September 2003 Archives

Learning Ruby, Step Two: Lisp

After my first exercises with Roman numerals I started on something slightly more ambitious: a small Lisp interpreter.

Rational's RUP is not Waterfall

| No Comments

I was mildly surprised to read a paper on Rational's Unified Process (RUP) that looks distinctly agile. How to Fail with the RUP starts with a fairly thorough debunking of the Waterfall lifecycle model. It hammers home the importance of doing iterations. Inception, Elaboration, Construction and Transition are not just a fancy way of saying requirements, design, implementation, system test/deployment. I had heard that you could customize RUP to be a fairly agile process. I did not realize that it was the way Rational expects people to use it.

By the way, I found I had to mentally remind myself several times while reading the paper that the practices listed are exactly the opposite of what they would recommend.

[ Found via Jeff Sutherland's log ]

Update: cpm would like to thank the diligent reader who spotted the missing verb after "mentally" and the other diligent reader who spotted "by they way" earlier in the same sentence. I've found I usually cannot catch all the errors myself before publishing.

Declare or Program?

| No Comments

One of the things that programmers like about J2EE is the availability of declarative transactions.

Adam Bosworth, an architect at BEA, writes in a paper on the future of messaging technology:

Alan Kay is supposed to have said that simple things should be simple and hard things should be possible. It has been my experience over 25 years of software development that for most software products, simple things should be declarative and/or visual and hard things should be procedural.

[The added emphasis is mine.]

I came across the original saying — simple things should be simple and hard things should be possible — as a motto for Perl. It seems to me this variant is also a good design guideline. I especially like the remark immediately following it:

Declarative languages have an unfortunate tendency to metastasize because people need to do things that are hard. When they grow in this way, not only can most people not use these new features, they find the entire language more daunting. A good example of this is XSLT.

Transactions are hard are hard to understand conceptually and even harder to implement. However, for the J2EE transaction declaration, the domain is small. You choose your transaction type and that is it.

It is a boon to be able to declare (or configure) the behaviour you want instead of programming explicitly. Less code means fewer bugs. However, when it goes beyond covering a few common cases, a declarative language loses its advantage of being easy to learn and easy to apply.

(The rest of the paper is worth a read. I think he's wrong to say we want push technology for our mobile devices. Clay Shirky has the right insight, I think, in his article debunking the notion that grid computing is the next big thing: when faced with poor connectivity, people prefer to get better connectivity rather than give up control. Besides, who really wants to get spam on their mobile phone?)

Worth Learning About: Rsync

| No Comments

Here's what I use to copy webserver log files from my hosting account.

rsync -e "ssh -l user" -avz 'www.noctilucent.org:/customer_logs2/user/access.*' .

It works nicely with ssh. If I put keys on both sides, I could leave it running unattended. As it is I hang around long enough to type the password and let rsync take care of the rest.

As a user, I only care that rsync is fast and convenient. As someone who makes his living making computers work more efficiently, I'm also interested in the rsync algorithm.

Rsync is, by the way, one of many good things that come from Australia. Cheers!

Motorola CEO Resigns; Stock Up Almost Ten Per Cent

I used to be employed at Motorola. I am still a Motorola shareholder. I read about Chris Galvin's resignation and the stock market's reaction with interest.

Looking for an Apartment

| No Comments

Spent Saturday afternoon apartment hunting in Ravenswood, one of Chicago's neighbourhoods. We were looking for a place from which it would be easy to get to both our workplaces (in downtown and Evanston).

We looked at four places and loved one, in a six-flat on a quiet street. S. had her checkbook with her, so, after thinking it over in an outdoor café nearby, we returned and paid the deposit. Not bad for a stroll on a sunny afternoon at the start of autumn. Quite a contrast with our last attempts (over a five week period) to find a place in the suburbs just a year ago.

To celebrate, we had dinner at Tre Kronor, a cozy little Scandinavian restaurant further north. I had the steak and I didn't regret it. The aspargus that came with it was fresh and cooked just right, tender but still crisp.

"Lost in Translation"

| No Comments

Saw it yesterday evening. If you've seen the trailer you've practically seen the film. Like a trailer, there is hardly any plot; all is mood. Call it a full-length trailer, but with the length you get the full dose of jet lag and culture shock.

It all depends on whether you can believe that the two main characters can get into a relationship. On the one hand, Bill Murray is made to look old (merciless lighting). On the other, Scarlett Johansson not only looks young but naïve. Two things made me believe: the disorienting strangeness of Tokyo and their respective spouses, who abandon them for the length of the film (and, you might suspect, afterwards too).

Learning a New Language, Test First

| No Comments

The Pragmatic Duo suggest that programmers should learn a new [programming] language every year. One approach is to apply learning tests. I saw a talk on the subject by Justin Halloway last week. It looked promising so I decided to give it a go.

Last day at the Symposium

On Sunday, I learned some more...

Java Server Faces (JSF) is in some ways a nice technology, but technically does not seem to offer that much over other frameworks. If you like drag-n-drop GUI design tools, JSF is probably your best chance, but that depends on the tool vendors. The reference implementation is supposed to be ready for production when it is ready, but that's not quite yet.

How to send a file to a browser

Proper use of caching so that you can survive when you get SlashDotted

XQuery is a powerful language that feels like a meld of Perl, Lisp and SQL. It supports XML natively, so you can just write it inline — no markers or tags needed to delimit code from markup.

WebWork 2 is yet another MVC application framework. Like Spring it is supposed to be flexible and lightweight. (Nearly everything else seems to be lightweight compared to Struts, which has huge marketshare apparently just because it was there first.)

Overall, the symposium was well-organized, with excellent speakers, a good selection of topics, no marketing BS and low enough attendance that there is scope for real conversation. Obviously the speakers have themselves, their books and their companies to sell but they do it in a way that does not distract from the subject we are paying them to talk about.

The only complaint I had was that paper copies of handouts ran out before a couple of the sessions. The CD that they give every attendee helps a bit, but it means you have to print it yourself or read PDF (yuck!) and it means you can't take your notes on the same material that's being presented (or you have to transcribe later).

Attending the No Fluff Just Stuff Symposium

At the No Fluff Just Stuff symposium in Arlington Heights, a Chicago suburb not too far away from where I live. Quality of speakers and selection of topics generally excellent. Some things I have learned so far:

  • Message-Driven Beans are not that hard to write and may be more useful than their overhyped counterparts (*cough* entity beans *cough*). They should only be considered if the client does not care when it happens (as long as it does) and security is not a huge concern.
  • Hibernate looks like a kick-ass persistence framework. (It's another case of how well reflection can be used to configure infrastructure code for a particular application
  • EasyMock makes it easy to add mock objects to enable unit testing on code that would otherwise be too closely coupled with something awkward.
  • Learning tests are possibly the most natural way for a programmer to learn a new API, a new technique or even a new language. Diving into an unknown API with a good IDE such as Eclipse can produce surprisingly good results and if you keep your tests you have your knowledge in executable form.
  • Naked Objects are in some ways a return to the roots of object-oriented programming. By avoiding extra layers (such as Model-View-Controller), the Naked Objects approach also avoids the diffusion of business logic through those layers. It looks promising for exploring the domain with fairly sophisticated customers and the effort looks low enough that you could call it prototyping.
  • [This is more opinion, but something I can agree with.] The other engineering disciplines, the ones that we envy for their rigour and standardization, are not necessarily as far ahead as we might think. For example, the engineering models of bridges were grossly deficient as recently as the 1940s. (However, attempts to make software engineering a profession with certification are grossly premature.)

Inevitably, the subject of Outsourcing/Offshoring came up during the first panel discussion. Ted Neward had an interesting angle. He reckons this is one of the cycles the industry goes through, where management tries their version of a sliver bullet, something that will make everything cheaper with no nasty side effects. (The last time it was contracting: every company tried to staff projects with contractors only.) In a couple of years management will see the side effects for themselves. (In the case of contractors, the side effect was the pain of losing institutional memory inside the company.) At this stage, it becomes less of a bandwagon and companies decide based on more rational criteria when it makes sense to do development offshore and when it doesn't.

Making It Harder to Visit the U.S.

Crooked Timber has an entry on the new requirement that foreigners visiting the United States without a visa have to have a machine readable passport. For a lot of people, this means they either have to get a new passport or apply for a visa. The discussion in the comments section is well worth a read. I particularly like Maria's reply to Doug.

Doug: But America has a terrorist problem, and it has that problem in a way that no other country has. [...] Given these facts, what should be done?
Maria: Right now, US border control seems to be all inconvenience and no increased security. Seems to me like everyone’s a loser.

I am in the U.S. on H1-B status and I will need a visa stamp in my passport to re-enter the U.S. My next trip outside the U.S. will be to Ireland and will be at a time when I can make an appointment with the U.S. embassy there. (Somebody in Ireland has to call the premium phone line to make the arrangements for me.) I also look forward to filling out the DS-157 form also mentioned in the discussion.

For myself, I don't think things are much worse now than they was before the U.S. Patriot Act came into force. The INS (may it rest in peace) was notorious for its poor treatment of foreigners and applying for a visa always meant filling out some nasty forms. If you're a foreigner in the U.S., you've had strangers running their grubby fingers through your life and you can deal with a bit of bureaucratic humiliation.

Short-term visitors from visa-waiver countries will really notice the difference. How much is someone thinking of a tourist trip to Florida willing to go through?

Fortunately, the machine-readable passport requirement has been shelved for a year. Unfortunately, as far as I can tell, they are still planning to take the fingerprints of all visitors in future.