Database heck
Charles Miller explains why a good DBA is worth the money.
Now you can find out how long you'll have power in the event of a zombie takeover. I just knew that people needed to know this...
Sometimes I really wonder about the technology sector. Take a look at some of the quotes in this story, for instance:
"For Sun to have such a hold on Java seems a little silly to me," said Peter Underwood, vice president of software development at Wall Street Access, a N.Y.-based brokerage firm. "It's time to release the programming language to the open-source community", he said
"Sun makes phenomenal hardware. It has a great operating system. And it helped create a fabulous programming language," said Crowhurst, who runs a mixed Java and Microsoft shop. "But why they need to control Java, I don't understand."
Still, Java's future is assured, regardless of which way Sun heads. 1CWhatever happens, the Java standard will stay alive, 1D said Sharabu.
These people are deeply confused. Sun, like any other company, is a business. They aren't a charity - Java's goal was to drive more business to Sun (in the form of hardware sales). The end of the dot-com era, combined with an improved Windows (server) and the rise of Linux (on commodity hardware) has dealt a pretty serious blow to that strategy, and it's clear that Sun is still trying to deal with those facts. Still, why would they open source Java? Their hardware is getting less valuable every day - as time goes by, Java is becoming the most valuable asset that Sun owns. If they made it open, they would be doing a disservice to their shareholders - and ultimately, that's who Sun has to answer to - not developers. It's clear why IBM, BEA (et. al.) would like to see an open source Java. It's less clear why developers don't grasp the position Sun is in. Eventually, they are going to have to attempt to monetize their massive investment in Java. I fully expects cries of shock when that happens.
I'm starting to think that Andrew Binstock doesn't understand the basic concepts of journalism - he writes articles, but he never, ever bothers to research any of his assertions. Take this week's gem in SD Times, for instance - he goes through a long discussion of population trends, and then quotes the following:
Consequently, Siegel predicts that offshoring will accelerate and our trade deficits with the developing world will increase dramatically. The end result, he feels, is that by 2050, the U.S. will no longer be the center of economic activity worldwide. That center will consist of China and India, with the then-older U.S. occupying the same declining role in the world economy as Europe does today.
Now, population trends are not an area of expertise for me. However, unlike Andrew Binstock, I've at least heard of Google. A quick scan of Google for China, India, and population trends brought me these links:
And what about India? Well, their population is not aging as fast as China's - but they are entering the same trendline. The UN reports that this is a global phenomenon. Finally, take a look at this paper:
Certainly, rapidly shrinking populations should alter the geo-political landscape. However, an article in the August 24th -30th edition of The Economist, has called into question some fundamental assumptions regarding the balance of power in the 21st century spurred by new U.S. population forecasts.
For 50 years, the U.S., Western Europe and more recently Japan have all been lumped together as rich countries, with low and declining fertility, and increasing numbers of old people, facing the same demographic problems. However, recent statistics found something unusual in the U.S. This trend between the U.S. and other industrialized countries began to diverge in the mid-1980s. Recent census statistics have found that the population has risen faster than it was previously thought in the 1990 census in the U.S. (281 million vs. 275 million) and the fertility rate is rising.
Someone hand this clown the url for Google, and show him how to use it before he writes again...
After an interesting post on MS and the Windows API, Joel put up some odd things today. In a wish list post for web stuff, he asks for this:
Javascript features to do fast REST queries back to the server, so I can implement things like a lush spell checker with the dictionary on the server. It should be possible to have a 300,000 employee directory on the server and create a web app that has a list box where you can type the first few letters of an employee's name and see a filtered list as fast as you can type on the screen.
Yeah, sure. On an ideal network connection with low latency, maybe. Unless you cache that dictionary locally, performance is going to suck eggs way, way too often. Some of his other wishlist items are unlikely for a variety of reasons...
I got a laugh out of this post from Tim Bray:
Going through a bunch of source-code files and and, one by one, removing the dozens of print statements that let you focus in tighter and tighter and tighter on a really obscure problem until you could finally see it. Debuggers are OK, but when the going gets tough, the tough use print.
Uh huh. The "tough" use print statements, the smart grab a better set of tools. Print level debugging is just so 70's....
Ted Leung points to some debugging tools that give Python some of the power of Smalltalk.
We went to a local watering hole for a trivia game last night (we were awful) - so I thought I'd post two questions from the game. We blew one, got the second one mostly correct:
We blew the last question - getting it right would have gotten us 5th place (instead of the last place we ended up with). We got 3 of the four in the second question. I'll post answers in the comments later today
Update:
Sorry the answers were late!
Dare Obasanjo offers an insider's view on Joel's "API" article. Worth reading.
Here's something you probably didn't expect to see - myself, Alan Knight, and Eliot Miranda (along with Tom Nies, Kim Thomas, Georg Heeg, Andrew Ignatow, Claude Poole, and Philippe Rouas) in suits. Oh, the humanity!

From left to right: Kim, Jim, Claude, Georg, Tom, Philippe, Alan, Andrew, Eliot
This story on WiFi access at airports is fascinating - it sounds to me like it'll be a bouncy ride over the next few years as some of these early deals die from the absurd fees companies are paying airports:
A couple of interesting tidbits emerge about airline deals, too, that might explain why AT&T Wireless charges $70 per month for unlimited access to their Wi-Fi network, including $10 per day for airport usage: they pay Denver International Airport $250,000 per month or $3 million per year for the right to operate the network. Nokia built the network and paid DIA fees until they could exit, and turn off the business to an operator.
This reminds me of dot-com silliness...
I pointed to a Python debugger post from Ted Leung this morning (here). In the comments, I was asked to post an image of a Smalltalk debugger in the middle of a sort. So, I slapped this code down in a workspace:
| items |
items := RSSFeedManager default getAllMyFeeds first items.
items asSortedCollection: [:a :b | a title <= b title].
Then I hit the "debug it" menu option, and got the following debugger:

Now, what does that stuff mean? Well, the top pane is the stack - the reason you see "UndefinedObject>>unboundMethod in there is that I executed the code out of a workspace - in other words, the code is not attached to any particular class. Incidentally, the VW Web Toolkit uses this feature to execute SSP code on a web page. Moving on, the code pane is below the context stack, and there's a toolbar at the top (with tooltips). Below the code pane are basic inspectors - for instance variables on the left, temps and method arguments on the right. Double clicking on any of them will yield a full inspector. You can move up and down the stack, inspecting things, executing code (possibly into new debuggers), and re-compile arbitrary methods - rewinding the stack to that point. Very cool stuff - and it's why you don't tend to see Smalltalkers getting excited about "modern" debuggers in other languages with (subsets) of this capability...
Phil Ringnalda points out how bad actors using popups have spoiled it for the rest of us. Yes, there were negative consequences to the spread of popup blockers....
For those of us with school age kids, summer doesn't really start until school is out. School ended for my daughter last week - so that must mean it's summer :) We actually have a different summer schedule than a lot of the parents around here. I (mostly) work from home, and my wife has a pretty flexible schedule. So, we don't sign our daughter up for camp all summer long. She attends one camp this summer - "Camp of the Arts" in Columbia. It's a pretty cool camp - they teach dance, and music, some craft work - and they put on a play. The kids work for the entire 3 weeks on learning their lines, making their costumes, and building the sets. At the end of it all, they put on the show to a packed auditorium (two days in a row). It's a great time - we love it, our daughter loves it. She's been going for 3 years now, and everyone looks forward to it.
Here's a great way to do link blogging wrong - the way Scoble is doing it with his link blog. Why do I say it's the wrong way? A number of reasons:
I've just unscubscribed from the blasted thing. It's too many items, with no real way to tell if any of them are truly interesting. I can't read them in BottomFeeder immediately, because they are partial (or no) content. Throwing every possible thing you find to be of interest in a minimal link is not only useless, it's aggravating. Scoble's normal blog often acts as a good link blog - he posts things of interest with a small summary quite frequently, and I can tell from his summary whether the linked item is of interest to me - in this regard, Scoble is to the tech sector what Instapundit is to politics - a quick summary of items that may be of interest. The link blog just doesn't work that way. My advice - stop doing it, and go back to concentrating on being a real filter.
The whole exercise is an example of an all too common problem in the IT field - an attempt to find a technical solution to a problem that simply cannot be solved by technology alone.
This post from BitWorking is everything you need to know about XML in one easy package. Here's what I mean:
When I tried to load it into an XML parser it failed to load. As it turns out the file was riddled with character set encoding problems, in particular quote marks. After much hand tweaking I finally have it in shape where a real XML parser can open in up. Now I can get on with the job of importing the data into pyblosxom. It isn't supposed to be this hard.
The real value of XML is interop and the currency of that interop is syntax as expressed in the term "well-formed".
I love this theory from the XML crowd. The theory being, "If only all XML data were well formed, our parsers would work". Well, deal with reality - not all XML will be well formed. Ever. There will always be crap out there. Some of it will be crap that people want to read. So, do you do what the advocates say - auto-reject the bad stuff and keep your parser "pure"? Or do what a sensible person does - have your parser deal with errors gracefully (logging them in some fashion so that you have a shot at notifying the producer) and moving on? The Atom advocates are still in the navel gazing phase of imagining a perfect world of all well formed XML. The rest of us who live in the real world have accepted the reality of bad content and moved on.
Ed Foster posts a gripe about support, "hidden" information, and sales pitches:
"I don't mind them selling supplies for their printer," concludes the reader. "Had I needed toner I may have bought it from them, if the pricing was competitive. But what I do mind is the withholding of a simple piece of information to make the user call in, and using that in combination with sales to try to turn tech support from an expense into a profit center. It was like a longer, real time version of spam that I had to sit through for 10 minutes to find out how to reset the printer. Is this where free tech support is headed?"
This could be a company trying to monetize support. It could also be a company where the support group has grown tired of trying to get the web people to update their site in a timely fashion, and is trying to route around the damage. From the outside, it looks like the former; there's simply no way to tell. I get the sneaking suspicion that lots of companies have communication issues between groups though...
I've posted a new Cincom Smalltalk survey - the topic this time is projects - size, scope, type. Let us know how you are using Smalltalk!
Dan Gillmor makes some good points about the proliferation of cameras - and their increasingly small sizes:
What's the alternative, anyway? When cameras disappear into shirt buttons, will companies force visitors to undergo detailed searches or ask them to strip and put on different clothes? Now there's a way to welcome your customers.
The implications of cameras everywhere -- especially cameras connected to networks -- go far beyond this. Imagine how events of the past would have looked had tomorrow's technology been available at the time.
This is the sort of thing that must be causing security officers - both government and corporate - to lose sleep. How are they going to deal with the massive increase in storage capability in small devices, and the increasingly small form factors of cameras and video equipment? It's a new world out there, and "always on" surveillance - professional and personal - is going to be a part of it....
Sci Fi Wire reports that the Star Trek Universe might have a shot at decent writers - Straczynski (Babylon 5) is pitching ideas for a Star Trek series. Straczynski can actually write - unlike the the utter bozos they currently have involved. It would be so nice to learn that Berman was exiled and Straczynski was in....
I'll be working from an undisclosed location in Florida this week - within walking distance of the Atlantic. All I need to find out is whether there's open WiFi overlooking the ocean....
Alan Kay has won the Kyoto Prize for his work on Smalltalk. He won a few other prestigious awards recently as well:
Earlier this month, Kay received the 2003 Turing Award from the Association for Computing Machinery for his breakthrough concepts on personal computing and for leading the team that invented Smalltalk, the first complete dynamic object-oriented programming language. The Turing Award, considered the "Nobel Prize of Computing," carries a $100,000 prize, with funding provided by Intel Corp.
In February, Kay won the National Academy of Engineering's 2004 Charles Stark Draper Prize along with three colleagues for their 1970s work at Xerox's Palo Alto Research Center. The team, credited with creating the first practical networked personal computer, included Kay, Robert W. Taylor, Butler W. Lampson and Charles P. Thacker. The prize, given to an engineer whose accomplishment has significantly impacted society, included a $500,000 cash award.
All these awards... almost as if Smalltalk represents a big leap forward or something :)
Blaine Buxton announces the next STUG meeting in Omaha:
Alright, I've got YET another exciting speaker lined up for the Smalltalk User's Group Meeting here in good ole Omaha! This time it is Alan Wostenberg and he will be talking about XP Swiki. Again, I hate to sound like a fanboy, but the XP Swiki aims to be a super cool new tool for XP teams! The meeting will be June 29, 7:00pm-8:00pm at the Abraham's Library Conference Room. I hope to see EVERY SMALLTALKER in OMAHA there! And hey, if you've been curious about what all the fuss is, come on down and we'll be glad to show you. Yes, that means if you don't know Smalltalk, you're invited too!
XPSwiki is an open source web tool for eXtreme Programming teams. It supports those XP practices related to requirements gathering and project management - user stories and the planning game.
XPSwiki is based on Swiki, the Squeak Wiki technology. It aims to be an agile and user friendly tool which adapts itself to your development process.
Looks like Blaine has kick started this group pretty well!
Patrick Logan makes an interesting point about Longhorn and the related set of technologies - MS has chosen to make a break with the current platform:
The interesting aspect of this issue is exactly that Microsoft has avoided inflection points of this magnitude so far, but with Longhorn they are *creating* their own inflection point. Let's just watch how they play this out; Longhorn is probably more interesting from a business sense than from a technical sense.
It's going to be interesting to see how this plays out - it seems to me that MS is betting on a reaction similar to the DOS/Windows 3.1 play - they hope that LongHorn will be seen as the place to be, and that anyone on older technologies will be left behind. I'm not entirely certain that it will work out that way this time around - one could easily have called the entire PC space an "early adopter" space circa the early 90's; it's not like that anymore. We are well down the mature market road at this point - witness the difficulties MS is having getting people to move from Win95, Win 98, and NT 4 to Win2K and XP. In theory, that should be a very much easier sell. The fact that it's been a tough road shows you that MS can't just shout "jump" and expect everyone to echo "how high?" It's a different market - one in which there's a real chance for competitors to horn in. If the perceived migration cost to LongHorn is high, then Mac OS X and Linux are going to get real evaluations.
Finally - mail providers are going to start dealing with spam-bots:
Consumers who allow their infected computers to send out millions of "spam" messages could be unplugged from the Internet under a proposal released on Tuesday by six large e-mail providers.
That will get the affected people to notice, an contact their ISP's - an then hopefully, get the problem systems cleane up.
Travis shows us how to customize dictionaries - and in the process, demonstrates a methodology for customizing any search function in Smalltalk. It's a great primer on the interplay between comparing and hashing in the base collection libraries.
I see a fair bit of this kind of post:
You won't believe this, but just spent quite a bit of time writing a reply to Joel Spolsky's article about Microsoft losing the API war, and my browser refreshed for some reason and the darn thing went away.
It always surprises me though. Browser sessions time out - it's in their nature. There are scads of client blog posting tools out there. Heck, I bundle a simple posting tool with BottomFeeder specifically because of the problems I use to have with browser sessions.
d2r makes an excellent point about the net - the packet switching layer may be nearly invulnerable, but that says very little about the parts of the net that we actually care about as users. Witness the Akamai outage from a few days ago - in some quarters, it wreaked havoc. He goes on to point out that we do, in fact, have some centralized services which offer something close to "single" points of failure:
Take DNS. Originally, name resolution ocurred by matching names against the contents of the local hosts table (stored in /etc/hosts) and when a new host was added a new hosts table was propagated across the participating hosts. Eventually, this process became impossible, since hosts were being added too fast. This led, in the 80s, to the development of DNS, which eventually became the standard.
DNS, however, is a highly centralized system, and it was designed for a network a couple of orders of magnitude smaller than what we have today. The fact that it does work today is more a credit to sheer engineering prowess in implementation, rather than design, although the design was clearly excellent for its time.
Even today, if the root Internet clusters (those that serve the root domains) where to be seriously compromised), the Internet would last about a week until most of the cached DNS mappings expired. And then we'd all be back to typing IP numbers.
And there have been attacks on the root DNS servers. If I wasn't typing this at 30,000 feet, I'd have a ref hany from Google (and just imagine the search havoc if that service got hit). We rely on a number of centralize services on the net - and losing some of them would cause real problems. Something to ponder....
Here's an interesting item on hiring. You see a lot of job postings asking for 3 (or 5, etc) years of experience with a specific programming language. You'll also hear managers say "I can't bring in technology X; where would I find developers?" Smalltalk (and other niche language) advocates get this a lot. The funny thing is, it's a silly prejudice. Developers will tell you that they can pick up a new language quickly (if that wasn't true, then neither Java nor C# ever would ever have taken off). The hard thing to learn is the specific domain that the developer will be working in - and that almost always seems to be a secondary concern on the hiring managers - they focus on the irrelevant, and ignore the important. Here's what hiring managers ought to do:
You want to know how to hire a programmer - don't even bother with technical questions in the first interview; have them write a one-page essay (preferably at home, using their choice of tools). Too many spelling errors - no hire; they will write bugs and not fix them. Monolithic block of text without paragraphs - no hire; they won't structure their programs. No introduction or conclusion - no hire; they won't know how to start or finish.
On the other hand, if you see a proper logical flow, maybe even a main title and section headings, and if there's a single coherent story being told - grab' em. Do hit them with a technical challenge, it is programming skill you're after - but you have a much better shot at a good programmer if they can write well to start with.
In other workds, look for good skills that will cross domains - because those will stand you in good stead no matter what comes down the pike. Focusing on a transient technical issue is probably the worst thing you can do.
O'Reilly points to an obnoxious DRM tactic:
Software to enforce DRM on the new Beastie Boys CD has caused a bit of a stir as it installs silently and at least under MacOS, doesn't seem to provide an uninstall tool. I'm apparently not the only one who didn't know CDs were trying to enforce DRM this way.
Just what I want - crapware that refuses to leave...
Eric Sink lays out the problems with the "elevator speech" - it's too long:
The Law of FocusĀ would insistĀ that a 25 word description is about 24 words too many.
The Law of Focus demands that we explain our product in one word.Ā Ries and Trout say, "No matter how complicated the product, no matter how complicated the needs of the market, it's always better to focus on one word or benefit than two or three or four."
Probably the best example he gives is the Sprint/Verizon competition in wireless. Sprint pushes one concept - Clarity. Verizon pushes one also - Coverage. Think of their ads - they all focus on this one point. Are there other benefits these vendors offer? Sure, but they want a simple message.
This is where a lot of us go wrong in the market. We come up with white papers, and bulleted lists, and all of the stock marketing stuff - but none of it sticks like the simple messages above. That's what we need to do with Smalltalk - boil it down to a simple direct phrase and/or word, and then relentlessly push that. Right now, we baffle people by getting bogged down in static vs. dynamic, or any of a number of other extraneous arguments. Eric's right - we need Focus
So I arrived down here at my parent's house in Florida. They were having network problems - it turned out tobe nothing more complicated than a bad cable. After we figured that out, my machine refused to see the network. I tried ipconfig /renew. I tried rebooting. Then I took a close look at the IP address. For some reason, my machine was trying to use the IP address it had been issued the last time I connected to the Cincom network in Cincinnati! This, even though I had:
The reboots alone should have cleared it, but no..... Finally, I tried the following:
After the second reboot. That finally worked. Now, I'm no fan of Linux on the desktop, but - had this been Linux, I could have gone into the appropriate rc directory and typed ./network restart - and it all would have worked. So anyone want to explain to me why two reboots didn't clear the stupid network settings?
It's a disaster of epic proportions - I can't get to the Dilbert site, and the feed hasn't been updated....
On the Atom mailing list, there's been a lot of talk recently about what should/should not be done with malformed feeds. The answer probably differs based on context:
The difference is context - if it's a business level communication, then guessing isn't appropriate. If, on the other hand, I'm trying to find out what the latest baseball scores are, then I don't really care about the stray Unicode character that wandered into a feed.
The truly interesting piece is the stats that Mark Pilgrim dug up:
I analyzed 5096 RSS and Atom feeds chosen at random from Syndic8.com and parsed them with Universal Feed Parser 3.0.1 using the latest version of libxml2 as the underlying XML parser.
Actually, I analyzed more feeds than that, but I threw away feeds that
- didn't either return an HTTP status code 200 or redirect to a URL that returned 200, or
- didn't have a recognizable root-level element of some version of RSS or Atom
- 3929 feeds (77.10%) were well-formed.
- 961 feeds (18.86%) were not well-formed due to specifying "Content-Type: text/xml" but containing non-us-ascii characters.
- 206 feeds (4.04%) were not well-formed for other reasons.
Nearly a quarter of the feeds chosen (and likely this holds across all feeds) have issues - and they have issues that a tighter spec is not going to solve. We've crossed the Rubicon on this one, at least in the consumer space....
Via Doc Searls comes this satirical piece on the RIAA. I'd laugh more if it wasn't so close to the way those bozos actually think....
Maybe the next big health care crisis won't involve humans at all: The Register reports that PC's spend more time on "sick leave" than people do:
British PCs are taking an average of nine sick days a year due to spam and viral attack, Yahoo! claims. This is two more days than the typical Brit spends at home as a result of illness/injury/Euro 2004-induced hangover.
So when will they start taking "mental health" days?
I decided to figure out how many downloads BottomFeeder gets from the server, so I had a look at the apache logs. I was pleasantly surprised to see that I'm averaging over 100 downloads of the install files (for all platforms) per day. I've also determined that Mac penetration is higher than most people seem to think - 1/7th of the Bf downloads are for the Mac platform. Maybe I should set up a mailing list :)
In a discussion of "next gen" development features, Wenser Moise makes an odd Smalltalk reference
I thinkĀ a major cause of the delay in this revolution is that both C/C++ relied on preprocessors and headers. Some historical languages like Smalltalk actually had this support. Fortunately, more modern languages like C#, Java and VB are standalone files, one class per file, with a little or no preprocessing support. This enables easy parsing.
Historical language?
Heh. He needs to have a look here. Source code in a db? Yawn, been there, done that - for years. I'm not sure about his parse node thing though. I just don't see direct representation being more meaningful than text....Greg Reinacker - the guy behind NewsGator - just got VC backing. The aggregator space just got more interesting....
Patrick Logan points to two interesting articles on new(); (in the context of Java). The first one is new considered harmful
Because memory allocation is new's primary function, it is hard to see how allocating memory from the heap could be a problem. But sometimes you want to allocate memory from somewhere other than the heap, and at other times you don't want to allocate memory at all. In other words, you may want an object, but you may not want to create one, at least not here, not now.
Now, in a language like Smalltalk, this isn't necessarily a problem - you can create your own version of #new and have it do what you want (create a new instance, manage some pool of instances by issuing one, return a singleton... you get the idea). As to where in memory the object is created - well, I figure the GC sub-system is going to do a better job with that than I am, so if I get a newly allocated object, I'm happy to let the system handle it. However - I can manage what #new does. The author of this paper goes through a number of examples of the issues in Java; it's worth reading. My little discussion of #new in Smalltalk gets into his second concern: polymorphism:
Turning to the second problem: new is famously nonpolymorphic. When I write new Rectangle(), I always get a Rectangle, never anything else, and in particular never a subclass of Rectangle. Much of the time this is what I want, but sometimes it isn't; for example:
A framework where I request an implementation by name or other attribute, and am given an instance of the appropriate class. Some of the classes in the java.security package, like Signature, work this way. Or imagine a data structure wizard that lets a client specify the desired properties of a data structure (for example, constant average-time access, no duplicates, ordering not required) and returns an implementation satisfying the criteria (HashSet, for instance).
Well, #new in Smalltalk is, of course, polymorphic. A good example of Factory usage in VisualWorks is the class SocketAccessor - you send instance creation messages to that class, but you actually get a platform specific subclass. It's not that you can't do this in Java; it's that you can't do it in the context of new(). What this does is add a layer of cruft, whereby you have to remember "oh yeah, I can't do that here...". To quote another section and reveal another issue:
The problem with static factory methods is that they are static; strictly speaking, a call to one is not polymorphic. That is, when you call Signature.getInstance you are always invoking the same code. Although its strategy for returning an appropriate subclass may be clever and complex, there is no way to use a different strategy.
The obvious antidote - indeed, the only other possibility - is a nonstatic factory method. In other words, you call a method on an object, and you get back an object (possibly a new one). Since instance (that is, nonstatic) method calls can be polymorphic, creation can be as well. There are a variety of ways in which this basic mechanism can be exploited.
Here the problem is that in Java, classes aren't actually objects - you can't add class methods in the same sense that you can in languages like Smalltalk. Again, this adds a layer of cruft that developers have to work around. A lot of what's problematic in java could be fixed by making classes into actual objects, and getting rid of keywords and adding methods (new() as opposed to #new). That's not going to happen anytime soon, so Java developers will just have to keep climbing the same piles of cruft over and over again...
Now, compare that with this discussion over on the Squeak-dev list.