Via the C2 Wiki:
After an idea is tried and has failed, been tweaked and tried again, been tweaked and tried again, etc. my inclination to reject the idea and look for alternative solutions.
However, management (and colleagues) frequently claim that that they "know why it didn't work", proceed to address the most obvious manifestation of problems with shallow solutions and chant "ItWillWorkThisTime". (They disapprove of my "negative attitude".)
Lots more good stuff on this topic over there.
After releasing BottomFeeder 2.8, Dave created a new set of settings pages based on the VW 7.1 settings framework. I had held off on doing that for the 2.8 release, since it seemed like a big change. Looks like I should have gone ahead! The new pages work like a charm, integrate just fine with my settings backend, and - look way, way better. Vassili deserves a lot of credit for the new settings framework - it was so much easier for me to work with.
I'm going to add a new server side directory for upgrades - specifically for the dev stream. This way, I can upload new versions of the application that are under development, and have people willing to test them out do so - while not impacting people who would rather stay on a stable release. Since I haven't actually added any new development code, nothing much has changed. However, if you want to track the dev stuff, change the upgradeURL setting from:
Keep in mind that dev builds are just that - DEV. That means they might break something; YMMV...
VPS = Value Prevention Society. In my experience, most IT departments are charter members of the VPS - they can't spell empowerment, much less practice it. Here's where I came across this notion, from Bob Lewis in Infoworld:
In late 1997, the U.S.S. Benfold was stationed in the Persian Gulf, one of the destroyers responsible for inspecting all ships entering and leaving Iraq . An average ship inspection required five hours.
The Benfold performed its inspections in half that time. How? A junior petty officer, Fire Controlman Derrick Thomas, built a PC database on his own that automatically filled out the boarding paperwork -- a 100-item questionnaire, for which most responses didn't and couldn't change for any given ship undergoing inspection.
Pull out your IT policies and procedures manual and ask yourself whether you would have allowed Fire Controlman Thomas to build his database in your company. If so, you're among the enlightened ones. Many corporate IT departments, led by charter members of the Value Prevention Society (VPS), prohibit end-users from making use of a personal database such as Microsoft Access.
Sounds familiar, doesn't it? The question is, how do we get past this problem?
Via the C2 Wiki:
I'm a serious Java proponent, I program only in Java now, and haven't programmed in anything else for over two years (except for one, short back-slide early this year). My job title has the word "Java" in it, for goodness' sakes.
However, the bitter truth is that it's not as productive, or as useful for rapid, bug-free programming, as Smalltalk. I used Smalltalk day in and day out for over six years. That followed almost two years of day-to-day use of C++. Out of the three, Smalltalk is still the hands down winner for productivity. I can develop probably 1.5X as fast in Smalltalk as I can in Java, which is probably 4X the speed with which I can develop in C++.
The Smalltalk libraries had at their inception things that are just now starting to make their way into the JDK 1.2 (e.g. real collections). There is nothing I can think of in Java that I have today (except possibly servlets) that Smalltalk did not have, usually better, two or more years ago.
So, why didn't Smalltalk win? Because in the marketplace the best solutions don't always get picked. It's the Dvorak vs. QWERTY effect, or the Beta vs. VHS effect. Java had Sun's massive marketing muscle behind it. It was the first language demoed in a browser, so it forever had the internet "shine" attached to it. The JavaBandwagon is a real phenomenon. Some jump on without knowing where's its going because it's flashy and hip, some leave their old, worn-out horses for a better, faster ride, and some sadly leave behind their first loves because it's quickly becoming the only show in town.
I updated the 2.8 parcels on the site - if you are running 2.8, it should detect the new parcels as being available and allow you to download them. You'll have to restart BottomFeeder - that's the way the update is implemented in 2.8. That could change in the next release, but I'm not quite sure yet. So what's new?
The Feedster and Google searches were having problems on error conditions due to a namespace lookup problem. That's addressed, and one other tweak as well - if you search from the item pane, the search uses the title of the item. Searches from the HTML pane will use the selected text in the item pane.
Bad things happen. Have a look at these bills pending in Florida and Massachussetts:
The (DMCA) Digital Millennium Copyright Act clearly isn't enough for some people. Massachusetts and Texas are - in curious formation - considering bills that will extend it to make firewalls (among other things) illegal.
The strange synchronicity is illustrated by a quick look at the draft of the Texas bill then comparing it with the Massachusetts one>, which you'll find in RTF format at Ed Felten's Freedom to Tinker, here. The strikeouts indicate that both, for whatever reason, have decided not to repress video this time around.
The repression that remains is however impressive. Felten points to this wording:
(b) Offense defined.--Any person commits an offense if he knowingly:
(1) possesses, uses, manufactures, develops, assembles, distributes, transfers, imports into this state, licenses, leases, sells or offers, promotes or advertises for sale, use or distribution any communication device:
(i) for the commission of a theft of a communication service or to receive, intercept, disrupt, transmit, re-transmits, decrypt, acquire or facilitate the receipt, interception, disruption, transmission, re-transmission, decryption or acquisition of any communication service without the express consent or express authorization of the communication service provider; or
(ii) to conceal or to assist another to conceal from any communication service provider, or from any lawful authority, the existence or place of origin or destination of any communication
That's right campers - these bills would outlaw NAT and encryption. Ahh, the joys of the clueless leading the blind....
Spotted in CLS:
Matisse Software Inc. is pleased to announce the availability of Smalltalk binding for VisualWorks 7 on the Windows and Linux platforms for its flagship product Matisse 6.0 DBMS.
Matisse 6.0 is an Object-SQL DBMS which natively supports objects, SQL, and XML based on the language-independent object model. Matisse supports many languages like Java, C++, C#, Smalltalk, Eiffel, Perl, Python, and PHP. These bindings share the same object model, so the database objects can be accessed through all the interfaces including SQL and XML.
The Smalltalk binding for Matisse is designed to directly map the database objects into VisualWorks avoiding the Object-Relational mapping and support the bi-directional schema evolution.
The binding is open source along with other language bindings, and has been placed on the public STORE repository
The binding and the free evaluation version of Matisse 6.0 can be downloaded from our download site
Cameron Shafie Matisse Software Inc.
Peter Ghali asks about testing private methods:
So how do people test private methods....my opinion is that you should test private methods at all. Adequate test coverage should cover these methods through testing of the public and protected methods that use the private methods. However....
I don't test private methods. Being able to quickly create, move around, and change the functionality of private methods is vital to remaining agile while developing.
There is a significant cost involved in changing the behaviour of your public interface: you have to make sure each caller can cope with the change. Sometimes you even have to write new tests for each caller because you have introduced some new edge-case that wasn't there before. Private methods, on the other hand, can always be tested by running the tests for the enclosing class. If you've introduced a new edge-case, you only ever have to write new tests for that one class. It's all self-contained.
This sounds reasonable. The only problem I have with it is that too often, the public interface for something is either under-specified or simply inadequate. I think the best you can do is call this a goal, not an iron clad law of development...
I've started light - so far, there's ctrl-n for next unread, and ctrl-p for previous unread. All by itself that's pretty cool; now a few more - search and browse at least.
I added a bunch of keyboard shortcuts to BottomFeeder this evening. The shortcuts are as follows:
- ctrl-b - Browse (either the feed or item)
- ctrl-l - Close the selected folder
- ctrl-n - Select next unread item
- ctrl-o - Open the selected folder
- ctrl-p - Select the previous unread item
- ctrl-r - Mark all items (in feed or folder) read
- ctrl-s - Open the search tool
- ctrl-u - Mark all items (in feed or folder) unread
Makes it a lot easier to use, that's for sure.
I've been adding a bunch of shortcuts to BottomFeeder over the last two days. They are only in the dev versions - to see that, just change your upgrade settings as indicated here. I listed the initial set of shortcuts here, but I've since done more work. The full listing can be found on the Wiki project page.
Via Reflective Surface comes this amusing urban myth that's been making the rounds:
"We don't believe this guy's story - either he's either a lunatic or a pathological liar," says an SEC insider.
"But the fact is, with an initial investment of only $800, in two weeks' time he had a portfolio valued at over $350 million. Every trade he made capitalized on unexpected business developments, which simply can't be pure luck.
Carlssin declared that he had traveled back in time from over 200 years in the future, when it is common knowledge that our era experienced one of the worst stock plunges in history. Yet anyone armed with knowledge of the handful of stocks destined to go through the roof could make a fortune.
"It was just too tempting to resist," Carlssin allegedly said in his videotaped confession. "I had planned to make it look natural, you know, lose a little here and there so it doesn't look too perfect. But I just got caught in the moment."
In a bid for leniency, Carlssin has reportedly offered to divulge "historical facts" such as the whereabouts of Osama Bin Laden and a cure for AIDS.
Officials are quite confident the "time-traveler's" claims are bogus. Yet the SEC source admits, "No one can find any record of any Andrew Carlssin existing anywhere before December 2002."
I've always wondered how these urban myths get started - once they start making the rounds, they just circulate via email, newsgroup postings, and now blogs. But I'd be curious to know how one gets initially established.
We tried to have dinner out tonight with friends, but the three kids (their two and our one) simply couldn't sit still and agree on who was going to sit next to whom. We ended up having to bail on the restaurant and get carry out - and that caused a small problem, as they lost an order.
That made us all nice and perky for board game night. What with the war on, we considered Tigris and Euphrates, but that looked like it would require too much thinking. So we settled on a game we hadn't played in awhile, Ra. Unlike my recent string of successes with Puerto Rico, I got washed and waxed right from the first turn - I messed up all the bidding. Better luck next time - and with any luck, better behaved children....
Over at Strongly Typed I saw this riff on Prevlayer:
Joshua writes about the delusions between "prevalence" and database systems."...in terms of functionality, Query Processing, Storage and Indexing are rarely things that a programmer can implement better than the professionals. Most of the innovation in terms of "persistence" layers revolves around the Data Access layer, and the fundamentals of the rest of the storage stack remain relevant."
I don't think it's quite fair to compare the two systems in most respects. They are each best suited for areas that lightly overlap. In this case both are not a hammer.
Interesting. It's a fair point, and one that extends to other areas. You need look no further than the huge number of buffer overflow exploits to see that memory management is another area that the average developer should not be dealing with. Based the quality of the RSS Feeds I see, production of XML is another.
More snow is falling!!!
Too warm for it to stick to the roads (yet), but it's late March already....
Every so often, I've had feeds that produce errors and kill the update process in BottomFeeder. That's why there's a manual restart, and a watchdog process. However, that can cause cycling issues with a feed that is busted - the update loop dies over and over again in the same place, while the watchdog keeps restarting it.
With the latest dev build (if you have your 2.9 dev build set to the correct dev build directory, you'll see it as an available option), I'm trying a fix for that. It's hard to test; I don't have a bad feed at the moment. What should happen is that a bad feed should get visibly marked as bad and not get updated any longer by the update loop.
I still need to add a menu option to allow setting a feed from bad to good - but more importantly, I need to know if this works, or causes problems. Please let me know if you get feeds marked as bad (all black) that you think shouldn't be, or if this attempted fix causes problems.
I ran across an interesting problem today. I was trying to add a feed, and it wouldn't parse. Nothing looked wrong on a casual view in IE, so I inserted a break point at the start of the XML parsing to see what was happening. The RSS feed in question is here - if you look carefully, you'll see an invalid character in the first entry. At least as of the time of this posting :)
I decided that I ought to allow such feeds through, so I took a look at the XML Parser. Overriding #next in StreamWrapper did the trick, but I wasn't satisfied with that - if BottomFeeder was loaded into a dev image, my hack was going to affect all uses of the XML parser. I had already subclassed the XML parser to prevent that problem; I wanted to subclass StreamWrapper as well.
It turns out that it's referenced 6 places - changing all six from direct refs to something like this:
StreamWrapper blah to self streamWrapperClass blah
did the trick. Modified the six methods, and implemented the method above in XMLParser and in my subclass. That allows me to modify as I want, without hosing off other XML clients (like, say the source manager in VW). It also allowed me to add the feed I mentioned above to my subscribed list, which was my original goal. I think I've made the parser more pluggable by doing this. Anyone else have thoughts on it?
BGE decided to grace us with another micro-outage last night - just long enough to knock the Linux box off the air, apparently. It looks like my battery backup is shot, because the outage was well less than 20 minutes. Sigh. Now I need to buy a new backup and get that installed before going to CA tomorrow......
I lean towards the former, but this is an interesting post:
When I read this: "Smalltalk is such a productive language that consulting companies and development managers are avoiding it. Consulting companies are avoiding it as the billable time per project is several times shorter. Managers are avoiding it, because with Smalltalk they would not have that many developers to manage and thus it would decrease a need for managers.. --Vlastimil Adamovsky"
I start to wonder why people are always doing the same mistakes. Newspapers talks about Java and C# because it is more cool !!
So if you have any good reason why so many persons kill Smalltalk let me know.
It's amazing how quickly something can become the de facto standard in our industry. Take Java, for instance. It's not even a decade old and already companies, universities, and independent programmers have eschewed all other choices in favor of the dark brewed wonder. But, from a technical standpoint, does Java really deserve this rapid exaltation?
If you're comparing Java to C++, it does have some immediately nice aspects. However, one doesn't always have to compare everything to C++. Further, I still believe there are instances where C++ is the correct choice and not the hindrance it is often portrayed to be. However, it's obvious to me that many companies are not building their internal enterprise infrastructure with C++ and instead are choosing Java because it seems close enough to C++.
What if, instead of comparing Java with C++, we compare it with Smalltalk? After all, Java was inspired more by Smalltalk than C++. Smalltalk is positioned to service the same set of problems as Java, namely enterprise business software. In addition, there are several Smalltalks on the market that easily put Java to shame for the development of shrink-wrap software.
The sad part is, many people haven't considered it because they simply don't know what they don't know...
I just changed the update manager to use a progress dialog. Dohh, there's something I shouldn't have had to be asked!. Anyway, the latest updates are in the process of being uploaded to the 2.9 dev build area. In the meantime, the updates are available via BottomFeeder's upgrade manager.
If the line
doesn't have a trailing /, add one. You can omit the dev if you don't want to point at the dev build updates. Dumb bug, being addressed in the new stuff.
Someone's not with the program - it's snowing here, again! Probably not a serious snow, but it's cold enough to snow, which is bad enough....
I posted on the conflicts of interest of consulting companies yesterday - now comes this report from the Register on ROI and large ERP installations:
Most customers surveyed had used SAP software for close to three years and 57 per cent of them said they've paid more for the code than it's worth.
The average cost for a three-year SAP deployment is $10m, with consulting accounting for $3.6m, personnel soaking up $2.5m, software licenses another $2m, and related hardware and training costs picking up the rest of the tab.
Companies surveyed saw some benefits from workers being able to manipulate data more quickly with SAP products and better company-wide access to information. "However, a positive return on the SAP investment was achieved only when there was both a sufficient number of users and sufficient frequency of use (breadth and repeatability) to reap significant productivity based gains from the solution," Nucleus writes.
Now stop and consider who is helped by this sort of thing - typically, a large consulting firm sends in tons of bodies to implement this sort of thing. Think of the billable hours behind a full installation of something like this - is it even possible for a consultancy to be objective? At least with the vendor, you know where they are coming from - they want to sell you the tools. But the consulting firms put on an air of neutrality, and then recommend paths that - surprise - would result in lots of billable hours
So when you see a recommendation from (insert consulting firm here) to migrate your Smalltalk app - you know, the one that actually works - to Java, or .NET - ask yourself who benefits. At the end of the exercise, if it succeeds, you are right where you started - you have a working app. The consulting firm, having taken you zero feet forwards, is now much wealthier - at your expense
More evidence that blogs are hitting the mainstream, via InstaPundit:
CULTURE WATCH: Just seen on the bottom of the CNN Headline News screen:
Gary Hart Cyber Campaign Starts blog on possible 2004 presidential bid
Delightful, isn't it, that they felt no need to explain what a blog is?
As I mentioned yesterday, it's not the issues being raised on these blogs that I'm interested in here - merely the fact that blogs are being used more widely. I knew something was up when I got interviewed by the Lehrer Report, and now CNN is mentioning blogs in passing.
Where's my ls -ltr? The date field in Explorer is populated by evil aliens! Nothing lines up!
heh. Another satisfied Windows user....
I'm heading to our engineering planning meetings in Santa Clara tomorrow - my flight leaves at 5 AM. I'm not even sure I believe that time of day exists....
I should resolve never to fly on the old TWA equipment again - all the way to California, and no power at the seats!!!
Sigh. I did get most of a BottomFeeder export feeds as OPML done. So anyway, here I am at the engineering meetings, imparting my views of where we need to go, and getting the reactions (and vision) of the engineering group. Like any other engineering group, it's akin to getting a bunch of cats moving in synch (i.e., nearly impossible). However, this is a great group of people - one I'm very proud to be working with. I'll likely have more to say on the meetings later, but now I have to listen to Eliot talk about his technical vision for VisualWorks.
Remember that "MS Buys Squeak" April Fools trick from a few years back? Well, someone put together a MS buys Linux trick this year:
At a small press conference in Nepal, attended by two Sherpas and a Yak, as well as a THG stringer, Microsoft spokeswoman Avril Wonful announced that the Redmond company had acquired Linux. Although this surreptitious attempt by Microsoft to kill the Open Source community was supposed to go unnoticed, THG sources had long known that Microsoft executives were holed up in a Buddhist monastery in the area, meditating and trying to achieve greater self-awareness.
Go read the whole thing....
And another April Fools joke, via Lambda the Ultimate:
In a move which surprised industry analysts, Yahoo, Inc. has confirmed that the software which runs Yahoo Store, which was in the process of being converted from its original implementation in the computer language lisp to the C++ language, will be converted back into lisp as soon as possible. A Yahoo spokesman, who requested anonymity, had this to say: "Boy, that was really embarrassing. See, the reason we wanted to get rid of lisp is that none of us could read any of the code because of all those silly parentheses. But just last week, we found a text editor (called "emacs", I think) which has this amazing feature -- it actually can highlight the opening parenthesis that corresponds to a closing parenthesis. That just blew us all away. Once we had that killer feature, we knew that it was in our long-term interests to go back to lisp -- it's much more flexible than C++. Unfortunately, we'd already converted everything to C++ already... if any lisp programmers are reading this, you might want to fax us your resume." The spokesman went on to say that he'd heard great things about something called "closures", which he believed were a way to seal code against bugs or something like that.
The Fishbowl has some interesting thoughts on where software revolutions come from:
Look at Java, recently described on Bruce Eckel's weblog thusly, citing Paul Prescod: "He called COBOL and Java neanderthal languages that have no descendents on the evolutionary tree.". Java has great libraries and right now, great momentum, but it's a dead-end. It has no future. It has nothing to evolve into. Its only likely long-lived descendant is C#, a language that, if it survives, will do so for the same reasons that Visual Basic survived so far beyond BASIC's use-by date. This is the source of my disquiet about Web Services. Microsoft are telling me they'll be big. IBM are telling me they'll be big. Some very respected developers are enthusiastic, but most are sitting back wondering what the fuss is, and have been for three or four years now. The momentum just hasn't gathered. SOAP and XML-RPC are both great solutions to a particular range of problems, but we're just going to have to face the fact that the chance of them becoming a revolution, as promised, are slim. Shortly, some technology is going to appear and blow my socks off. But it's more likely to appear in some experimental corner of JBoss 4.0 than it is in J2EE 1.4 or in .NET. And it's quite likely going to appear in Python or Ruby, or even coded in C by some college student or lab assistant who has thought of a really neat way to solve a real problemin the real world, and wants to share that solution with the rest of us. And we'll take it, and use it in ways the inventor never dreamed of. That's where revolutions come from.I'm seeing more and more evidence that developers are ready for something else. The Smalltalk Community needs to be prepared if we want to be one of the answers
My posting tools are apparently posting through the proxy server (I'm on dialup at the hotel) - but telling me that they aren't. Then there was IE's complete refusal to browse with the proxy server, while Netscape seems happy. Sigh....
Spotted on Loosely Coupled:
The bad news for the IT industry is that CIOs have realized they can spend less and achieve more, using web services. Instead of investing in new systems, they want to get more out of the systems they've already got. Here's what they've been saying at InfoWorld's CTO Forum this week:
- "We've got to rationalize our investments. We've been spending $4 billion a year for years. We need to get more out of it," says Merrill Lynch's chief technology architect, Rick Carey.
- "When we looked at our core assets, we had lots of services our customers were not using. The problem was [the services] were not flexible and convenient enough," says senior Verizon IT executive Luis Lando.
The really bad news is that they can expose and link those web services without having to invest in expensive new integration systems. They don't even have to buy application servers, according to Cape Clear founder Annrai O'Toole
Hah! Anyone who thinks that exposing via web services will be easier than - say CORBA - hasn't tried it both ways.....
I've written an EXDI and Store interface for Sqlite (http://www.sqlite.org/) databases. It works on my machine under linux and windows (wine, really). And I think Sqlite is quite neat for local repositories, because the setup is so easy - you just need one dll/shared library where VW can find it. No server process, no configuration files.
The bad news is it's new and untested. While the feature set I use seems to work, that's about all I can claim. There were also some problems with Sqlite's view implementation; a large part of the code is workarounds. So I don't want to put it in the open repository until a few more people have used it.
I did put it on a web page: install instructions and downloadable links are at http://www.gjdv.at/cgi-bin/pyson.cgi/en/vwsqlite.pyson
If you do give it a try, I would suggest to also use a "real" repository, or "Publish as Parcel" on a regular basis ;-)
I got this in email as a response to this post:
Last night I read a piece by Dr. Alan Kay. Within the article is a section "Most of current practice today was invented in the 60s". It goes on:
"It is worth noting the slow pace of assimilation and acceptance in the larger world. C++ was made by doing to C roughly what was done to Algol in 1965 to make Simula. Java is very similar. The mouse and hyper-linking were invented in the early sixties. HTML is a markup language like SCRIBE of the late 60s. XML is a more generalized notation, but just does notationally what LISP did in the 60s. Linux is basically Unix, which dates from 1970, yet is now the "hottest thing" for many programmers. Overlapping window UIs are one of the few ideas from the seventies that has been adopted today. But most of the systems ideas that programmers use today are from the data- and server-centric world of the 60s.
The lag of adoption seems to be about 30 years for the larger world of programming, especially in business."
This, as you might expect, leads us to believe that the time for Smalltalk (and Lisp?) is about to come?
- BottomFeeder now supports OPML (as done by syndic8) in addition to OCS for feed lists
- BottomFeeder can export the subscribed feeds as an OPML file. This flattens all feeds into a single folder, but does allow export
- BottomFeeder can import OPML based (as done by syndic8) feedlists from a local file, and convert that into a set of subscribed feeds
Numerous people have requested this feature.
Via Matt Croyden
Follow the link for all the feeds - 12 from Cisco alone!
I've managed to get a few interesting new BottomFeeder features done in the last two days:
- Import from OPML File - You can now import an OPML file (in the format used by syndic8 into BottomFeeder. The imported feeds will be added to a new folder under the subscribed list
- Import from OCS File - You can now import an OCS file into BottomFeeder. The imported feeds will be added to a new folder under the subscribed list
- Add Feedlists from an OPML source (such as syndic8).
One of the complaints I've received in the past is that BottomFeeder cannot have feeds added from local export files (say, from other RSS aggregators). If you can get your feeds into OPML or OCS format, that's no longer the case.
I've just added an RSS Import to BottomFeeder. Numerous tools export feeds as either RSS, OPML, or OCS. BottomFeeder can now handle all three. In the case of RSS, the feeds get listed as items. In any case, BottomFeeder can now import all three formats, and export as OPML. This should make it easier to test the tool out.
Very cool... simplegeek
Yes it is and something I will be looking into and writing about. "S# is not a scripting language in the sense that it's any less powerful than other .NET languages; instead, it's a scripting language in the sense that it doesn't require strong variable typing in other words, it's a dynamically typed language. . . Beyond that, you can perform operations impossible in VB.NET or C#. " - Like Jason and his upcoming Win-Dev session, I am always interested in moreof the CLR from the internalperspective or "alternative Langauges" aspect of .NET to keep things interesting.
More news from the REST vs. SOAP front, via Slashdot:
tadghin writes "I was recently talking with Jeff Barr, creator of syndic8 and now Amazon's chief web services evangelist. He let drop an interesting tidbit. Amazon has both SOAP and REST interfaces to their web services, and 85% of their usage is of the REST interface." Read on for some more thoughts and information on REST and Web services, including information about a free Web services seminar on April 22nd.
" Despite all of the corporate hype over the SOAP stack, this is pretty compelling evidence that developers like the simpler REST approach. (I'm sure there are applications where SOAP is better, but I've always liked technologies that have low barriers to entry and grassroots adoption, and simple XML over HTTP approach seems to have that winning combination.)
This is pretty much how it's going in the blog world as well - when developers choose, they choose simple....