The Book I Want to Read
I buy and read a lot of books, technical books. But certain books never get written. I have already noted (217 days ago) the lack of books on topics such as Cygwin and libxml2/libxslt.
Today, I'm adding Patterns of GUI Application Architecture to that list. Something like Martin Folwer's Patterns of Enterprise Application Architecture but focused on the topics of GUI design would be a most welcome addition to my library.
I want to read what the experts say about the general principles of writing a rich-client GUI in the enterprise application area---the other half of PoEAA, if you will.
weiqigao.com ranked # 6 in Google for ...
... intellisense schema xhtml," proclaimed an email from Elizabeth Richson
I'm a web master, and I was just searching Google for intellisense schema xhtml. I found your domain, weiqigao.com ranked 6, which is pretty cool.My site is all about Computers - Software, too . Maybe we should link up? I wouldn't be stealing any of your sales, because all I do is write informational articles...not selling anything on my site at all. And most of my visitors write back to say that they love the fact that I only write good, quality info. As a matter of fact, I've got a pretty loyal following of people that come back over and over again (they use the site as a reference), so if you link to me, you should get some pretty good traffic from it -- which is always nice.
Anyway, let me know if you'd like to swap links. I've already linked to you, and will keep it up there for a few days until I hear back. Hope to hear from you soon!
Thank you Elizabeth for the kind words. I would be glad to swap links with you, just as soon as you send me your link.
On second thought, I'll just search you up on Google. Hmm, this one seems interesting. :)
Continuous Design
Up there on Martin Fowler.com, a new Design column for the IEEE Software called Continuous Design by Jim Shore is posted.
It's an eye-opening read. And if you have not been exposed to the idea of continuous design (a.k.a. evolutionary design or emergent design) some of the practices might be a shock:
- DRY (Don't Repeat Yourself)
- Explicit
- Simple
- Cohesive
- Decoupled
- Isolated
- Present-day: The design doesn't try to predict future features
- No hooks: Interfaces, factory methods, events, and other extensibility "hooks" are left out unless they meet a current need
It termed up-front design as speculative. And provided testimony that continuous design generates superior designs.
The Machine That Invents
Brad just emailed alerting me to a story on the local newspaper St. Louis Post-Dispatch.
The Machine That Invents is a fascinating read. It profiles a ex-McDonnell Douglas physicist who invented a Thinking Machine.
The website of his company, Imagination Engines, Inc. is worth exploration too.
Tab Groups in IDEA 4.0
"You can't see two files at the same time in an IDEA project" has been one of the complaints against IDEA.
Not any more.
IDEA 4.0 (RC1 now) supports the concept of tab groups. A tab group is the tabbed pane that contains the editor pane. Only two tab groups can be created. And a file can be shown in only one tab group.
These menu items manage tab groups in an intuitive manner:
- New Horizontal Tab Group
- New Vertical Tab Group
- Move to Opposite Tab Group
- Change Tab Groups Orientation
Save Me From the Good People
Years ago, I used to listen to KMOX (1120kHz, St. Louis, MO)'s Jim White at night.
One of Jim's signature phrases is "Save me from the good people." By "good people" he meant people with very good intentions, who often gives advises or comments based on a set of doctrines they can cite from very authoritative sources.
There are plenty of them in software development. From the Hungarian notation zealots, to the coding style police, to the let's design first methodologists, to the "I spent five years establishing the enterprise architecture---by gosh you are not going to step outside of it by one inch" architects.
They are all good ideas. But they don't always lead to successful results. The ideas usually come from experiences of others in an earlier time, which seems good and sensible in their particular environment. But as the good idea spreads, it become more crystallized, distilled, and catch-phrase-ized. The context gets lost in transit, and unsuspecting newcomers would take it as universal truth.
Have you worked with some of these good people (a.k.a. smart people) on a project or two?
The Courage to Serve XML
I didn't realize this until yesterday: all your painstakingly crafted XHTML web pages, well-formed, and validated against the DTD, are served by the typical web server as "text/html".
As such, the browser will treat them just as good old HTML. All the close tags that you inserted, all the quotes around attributes, and the silly <br /> tags, are treated as superfluous or quirks.
I learned this on a public debate at Norman Walsh's Weblog.
And he served the a subsequent blog as application/xhtml+xml, the correct MIME type for XHTML pages.
And guess what? It rendered perfectly in Mozilla.
I remember in the early days of XML, pundits often say, "If you have an XML browser, you can do blah blah blah." Now that we all have XML browsers, where are the XML web sites?
Do you dare to serve your website as XML?
Weblog Software Upgraded
I upgraded the weblog software to Pebble 1.4 Beta1 (still running in JBoss 3.2.2).
The upgrade is as simple as exploding the new war file into JBoss's deploy directory, copying in my customizations to the custom theme. I didn't have to change either my JBoss configuration or anything in the blog directory. Didn't even shutdown JBoss.
Inevitable Path for Proprietary Software
I bought my personal license of IntelliJ IDEA 3.0 with a free upgrade to 4.0 twenty days ago.
But I've heard people raising their concerns about the upcoming new release.
That leads me to think about what would happen to IDEA in the next few years:
- They will add features
- They will fix bugs
- They will raise prices (which they have done consistently in the past)
- They will make it an "enterprise tool" (for people and companies who have money to spend, but don't necessarily want anything done)
This seems to be the path taken by most proprietary software tools. Borland's offerings are examples. And I can't think of any proprietary tool that did not follow this path yet still survives after ten years.
Who knows? Maybe in five years we'll be buying IntelliJ IDEA Enterprise Edition for $5000 a piece for all the developers on our teams, which isn't a bad deal for the developers in St. Petersburg, Russia. :)
Windows on the Second Hard Drive (Linux on the First)
I had the occasion to rebuild my workstation recently (see my post four days ago for my excuse).
"I'll do something different this time. I'll put Windows on the second hard drive," I said. I've never done that before.
A casual Google search on "Windows on the second hard drive" turned up a bunch of pages talking about how to add a second hard drive to a Windows system.
(I should have taken the hint.)
Stuck the W2K CD in. Boot to CD. "Delete the old partitions and lose all data?" Sure!
"Where do you want to install Windows?" I selected the second hard drive.
"Even though you want to install Windows on the second hard drive, we have to put some startup files on the first hard drive. Do you want me to do that?" Saying no drops me right back to the previous screen.
(I should have taken the hint.)
Finally I gave in. Created a small partition on the first hard drive and proceeded to install Windows. Smooth install. Reboot to complete the install. Install the stuff from the MB CD, reboot. Sound driver, reboot. Video driver, reboot. Scanner driver, reboot. Printer driver, reboot. Office, reboot. Dozens of other software, dozens of reboots.
Now, it's Linux's turn. Stuck the Fedora Core 1 CD in. Boot to CD. Zapped that Windows partition on the first hard drive. "It was just some files to get the W2K installation started, right? Now the W2K installation is done, it can be safely deleted," thought I.
(What was I thinking?)
Created a whole bunch of partitions on the first hard drive and installed Linux. Linux also installed smoothly, discovering all my hardware along the way, except the scanner. No reboots required.
It saw the W2K installation on the second hard drive and offered a dual boot setup, with GRUB as the bootloader.
Come time to reboot to W2K, it wouldn't. GRUB printed
rootnoverify (hd1, 0) chainloader +1
and hung.
(I should have known better than to delete that W2K partition on the first drive! But now it's too late.)
Stuck in W2K CD again and booted to the Recovery Console. Saw the content of my W2K installation, all right there in the C:\ drive. Ran a couple of commands: FIXBOOT C: and FIXMBR C:. No luck.
Did an info grub to find out that GRUB has to trick W2K into thinking that the second hard drive it is installed on is the first hard drive. So I modified /boot/grub/menu.lst so that it reads, in part:
title Windows 2000
rootnoverify (hd1,0)
map (hd0) (hd1)
map (hd1) (hd0)
chainloader +1
Progress! Now it boots past GRUB into W2K-land and complained about could not find NTLDR
I went back to the W2K Recovery Console, and looked at the content of the root C:\ directory. Sure enough, NTLDR was not there, along with four other files (MTDETECT.COM, arcldr.exe, arcsetup.exe, boot.ini).
I copied them over from another known good W2K installation. And this time it worked.
It still says something like "Your BOOT.INI file is wrong. Booting from C:\WINNT", which suits me just fine.
The Tyranny of Object-Orientation
Eight days ago, I talked about the phenomenon whereby a programmer can be working on an EJB project for a prolonged period of time without actually knowing the details of EJB.
This happens on projects that's heavily OO/Framework based. What ends up happening is that a fantastic EJB based framework plus a build process is established early on. And all later activities happen on top of the framework.
This allows the bulk of the project to be around the framework and not EJB, which is a good thing all around, especially when the day comes when EJBs are out of fashion.
But there is one catch: it divides us programmers into the high-powered OO/Framework writers and the low-powered Business Object writers (or panel programmers who wrote not a line of Swing code, or web page authors who used no HTML tags).
OO is bad news to them because the knowledge they gained about (the use of) the framework is highly proprietary and in most cases non-transferable:
Interviewer: Do you know how to write OO programs?
Programmer: I know how to write business objects for our ABC OO framework.
Interviewer: Do you know anything about patterns?
Programmer: Our ABC framework is full of patterns but I wrote none of it.
No
When the auto-update tool of your operating system asks questions like:
The kernel-2.4.22-1.2138.nptl.rpm you have just downloaded does not contain a valid digital signature. It is corrupt or has been tempered with. Do you want to continue?
Answer No!
Model-Oriented Architecture
Yesterday's St. Louis Java Users Group had an interesting talk by Brad Wright and Randall Hauch from MetaMatrix, an Enterprise Information Integration vendor.
The topic is Model-Oriented Architecture, and their MOA based EII product, also called MetaMatrix.
This is my first exposure to MOA and the product.
What impresses me the most is the way they leveraged the OMG standards on modeling and formal definition and methods as the bases of their modeler and the execution engine, and the way they made extensive use of Open Source tools and products in their implementation:
- MOF, MDA, XMI, CWM, UML
- Xerces, Axis, Ant, Commons, Lucene, RegExp
- JDT, SDT, PDE, Team, EMF, XSD, JUnit, JAXEN
- JBoss, JDOM, Saxon, ConcurrentUtil, CruiseControl
- Clover, Wiki, QuickBase, Squerrel, DBVisualizer
Update: The presentation slides are here
Leaky Communication
Have you ever heard of these phrases:
- Leaky abstraction
- Worse is better
- Model-View-Controller
- Web Services
Now, think about them a little bit. What do they really mean?
No, no, no, don't hit the F9 key for Google! Better yet, print this page out and turn off your browser. Write down on a piece of paper what you think they mean. Hand the list to ten other people and have them do the same thing.
Now compare your answers. Would you be surprised if the answers are all different? I wouldn't.
Words mean things. However, we have overloaded words with so many different meanings it is hard to pin them down. And when we communicate with these catch phrases, we run the risk of leaky communication---you've communicated the words, but not the meaning you want to convey.
Irony In Names
Confucius (551 BC--479 BC) said in The Analect:
What is necessary is to rectify names. If names be not correct, language is not in accordance with the truth of things. If language be not in accordance with the truth of things, affairs cannot be carried on to success.
Of course he was talking about calling your father father, and calling your king king. But his realization of the power of names is profound.
Just think:
- When was the last time you extended XML without causing trouble?
- You can be on an EJB project without knowing anything about EJB.
- Extreme Programming is perfectly common sense.
- You can find things faster on the Internet with Google than on your local file system.
- Did you ever refactor your code to change its behavior?
Now, was what you had for lunch today really food?
