Apt-Pinning for Beginners

I'm off work this week and it's given me an opportunity to rebuild one of my servers. I decided to move from FreeBSD to Debian because I like the speed of grabbing binaries from apt vs. compiling ports. Also, there is much more Common Lisp support with Debian.

As part of the install, I wanted to grab some packages from Debian Unstable (namely Gallery 2). I'd done this on another server and didn't care what got upgraded to an instable status. However, I decided on the server I just rebuilt that I wanted to stay as stable as possible while getting the packages in Unstable. I found an article called Apt-Pinning for Beginners that gives you a simple way to control how apt chooses to get its packages. I followed the instructions and I think it's working.

Nifty! Those apt guys sure are cool.


Recent Inspirational Reading

I've been a GtD convert for about 9 months now (thanks, Mark!) and it's really made a big impact on the way I organize and keep track of all my "stuff". Prior to GtD I was a Covey follower and prior to that I used a system that I cobbled together in college based on different techniques. So, as you can see, I'm a long-time student of time management.

Over the weekend I read two good articles related to time management. The first was "Meet the life hackers" by Clive Thompson. This is a great article that talks about how some researches are trying to solve our information overloaded condition with software. (Has A.I. found another domain?)

I also read "Do It Now" by Steve Pavlina. This is an unbelievable tale of how Steve made it through college in 3 semesters. He also tells you how he did it and the keys to his success. I love the "Do It Now" section. I'm a procrastinator at heart and this section really spoke to me.


Finding the Best Programmer's Font || kuro5hin.org

Jon pointed me to a list of fonts that someone had rated on kur5shin.org. MMMmmm. Fonts. I think I may like ti92pluspc even better than Anonymous. Will play.

Anonymous Font

Thanks to a message on the LispWorks mailing list, I found a sweet monospaced font over the weekend. It's called Anonymous. (Mark Simonson has a bunch of other cool fonts that you might want to check out while you are there.) It's great for coding because it is monospaced, pretty, and 0s have lines through them so you can easily tell them apart. It reminds me of how I was supposed to write block characters in drafting. Of course, mine never looked this good.


Try Ruby - 15 minute tutorial

why the lucky stiff has created a short intruduction to Ruby called Try Ruby! It's quite ingenious. It's an interactive Ruby prompt coupled with a tutorial that follows you along burried in a web page. Very cool. He says he's going to add some content, so it's a site to watch.

via Lemonodor


More Free Love for Lisp

Christopher Roach posted another installment about learning Lisp. This time he talks about how learning functional programming via Lisp made him a better programmer:

Now, I've never used Lisp in my professional life, however, I began to notice that some of the habits I picked up while programming in Lisp were creeping into my daily programming and were actually helping me out quite bit. In functional languages, side-effects are "generally" avoided. (I say "generally" here since, to my knowledge at least, some side-effects seem to be unavoidable—such as I/O operations, for instance). For anyone new to the term, a side-effect occurs when the state of your program is changed from within a function (procedure, method...whatever). This happens quite often in normal procedural and OO programming, but in functional programming it is avoided as much as possible. After programming in Lisp for a month or two, I noticed that in my daily life I had begun to avoid side-effects in my programs whenever I found it possible to do so. This allowed me to create programs that were much easier to unit test, since all I had to do was check the function's output to know that it worked correctly. Also, since no undesired changes occurred inside of my functions, my software immediately showed a vast reduction in bugs, not too mention that purely functional code is also immediately thread safe. Being able to test each function as I wrote it, and prove that it worked correctly without exception, meant that my programs would work almost the first time I integrated everything and r


Lemonodor: Short Course of Lisp

Lemonodor: Short Course of Lisp is a reference to Robert Sayre talking about Yahoo 2.0. There's 2 nuggets here, the "syllabus" for learning Lisp and a link to Greg Linden's article about Sawzall.

W3C Web APIs Working Group

Came across the W3C Web APIs Working Group page today courtesy of Screaming Penguin. It looks like the W3C is putting together a working group to document existing web client APIs and develop new ones. Things like an API for a client interface, DOM Level 3 events, timed events, client persistence, network communication, etc.

In my dream world, the output of this group would become a series of open APIs that cross-platform GUI toolkits could be built upon.

ONJava.com: Ruby the Rival

The ONJava article/interview ONJava.com: Ruby the Rival is a good read. Chris Adamson talks to Bruce Tate, James Duncan Davidson, Robert Cooper, and Bill Venners about Ruby and Rails. I liked reading the different perspectives on Ruby and Ruby on Rails and its impact on the Java world.

If someone were to prove that it simplifies web development and it makes 80% of the applications easier to write, then I would say bring it on. We can use something else for the 20%.


Learn Lisp From MIT--for Free!!!

Christopher Roach has a great article about the OpenCourseWare initiative at MIT and how you can take the Structure and Interpretation of Computer Programming (SICP) course for free. His article has some great links to sites that have supporting materials for SICP.

SICP is regarded in many circles as the ultimate introduction to computer programming. I've been meaning to read the book for a couple of years now and have never made time to do it. I've heard that even if you are not interested in Lisp programming you should read SICP. Now you can not only read the book, you can take the course, listen to/watch the lectures, and take the quizes - FOR FREE!


New version of LW-ADD-ONS

Edi Weitz has released a new version of his LW-ADD-ONS package. From the LW mailing list:

Let me spam the list for a moment to notify those who use LW-ADD-ONS
that I've just uploaded a new version which adds a nifty Apropos
dialog (mimicking a Lisp implementation I won't mention here) and
several new features mostly submitted by Sean Ross.


Note that you need the latest and greatest CL-PPCRE (1.2.12 or higher)
for this.
LW-ADD-ONS is very nice. It adds some Slime type functionality to the LW environment and some things that are not found in Slime.

I still end up using Slime some of the time, but LW-ADD-ONS really makes working in the LW environment much more pleasant. Also, Edi's documentation search function ROCKS!!!


The Right Development Team for Rails

Glenn Vanderburg has a good post about "The Right Team for Rails". Having no Rails (and almost 0 Ruby experience) I cannot vouch for the article's accuracy. However, I'm betting he's right on the money.

Glenn says:
The wrong Rails team is one that doesn't understand those principles and practices. The fact that Rails makes things easy won't be enough. In my experience, such teams expend amazing effort and ingenuity to do the wrong thing.
I love this paragraph. If you remove the Rails references, there's universal truisms in here. It applies to almost any technology or language. In fact, you could make the statement about something as general as "programming" and it would be applicable.

So, like Glenn, I think we're still saying, "This can make good, well-informed people really efficient. However, the rest will still find it difficult to succeed."

12 Best Practices for Spring Configuration Files

Jason Zhicheng Li has a blog post where he lays out 12 best practices for Spring configuration files. I have only used Spring on 1 project, but I can definitely see the basis for several of them. These are worth keeping in mind as you develop your next project based on the Spring Framework.


LispWorks 4.4.6 Introduction Movie

Rainer Joswig has made a short introductory movie demonstrating the features of LispWorks Personal Edition 4.4.6. The movie just shows off the environment and doesn't give any introductory Common Lisp information. For that, check out:
Also, be sure to subscribe to the Planet Lisp feed to get the latest and greatest information from the Lisp world in one, aggregated place.


Handbook of Software Architecture

Did you know that Grady Booch is working on a new book called "Handbook of Software Architecture"? I just found out today. He's developing the book online. There's also a blog that has information about the book progress and other tasty tidbits.

I really look forward to reading this book. We need more high-quality books on systems architecture. It's one of the hardest things to learn well because our knowledge of it is scattered in so many places. I'm excited because I'm sure if anyone can pull a good overview of the subject together, it's Grady Booch.

LispWorks Personal 4.4.6 Release

LispWorks has released the LispWorks Personal 4.4.6. There are some bug fixes, but perhaps the biggest news is that it now supports a larger image size. Dave Fox of LispWorks explained:
"We often receive requests for a free Edition of LispWorks that can
run larger programs, so here it is. LispWorks Personal Edition can now
grow by more than twice as much as previous versions and so is
suitable for a wide range of academic research and other
non-commercial uses."
Sweet. LispWorks is a fantastic environment. If you've been wanting to see what a professional Common Lisp environment is like, why wait any longer?


Made With Secret Alien Technology

I absolutely love the new Lisp logos that Conrad Barski has developed for use with Lisp projects. It cracks me up.

If you haven't checked out Conrad's "Casting SPELs in Lisp", you really should. It's an intro to Lisp that leads you to build an adventure game. Really good idea.


R&D Making a Comeback - With New Rules

Computerworld reports on an R&D Revival. The article says that R&D is making a come back, but the rules have changed. Companies are now making sure that R&D efforts are more targeted and the potential outcomes mesh with the company's business. The focus is still on rapid innovation because that remains a market differentiator for many companies.

I'm glad that R&D is still valued. It seems like over the past couple of years all we've heard about is R&D cuts, facilities being shut down, and research going overseas. (I guess the last point may still be true as more companies become multinational). It's refreshing to hear something positive about the R&D community.


Hybrid Open Source Business Models

TheServerSide has a reference to Zach Urlocker's blog article on Hybrid Open Source Business Models. Zach points out how a hybrid business model is becoming more popular where companies have some portion of their offering that is Open Source Software. It's an interesting model, and I would imagine that it's hard to pull off in practice. Well, maybe pull it off right.


del.icio.us code?

From Chris Double's Radio Weblog, Snippets is a site where you can post snippets of code and categorize them by tagging them with keywords. You can then share your code snippets. It's very del.icio.us, but even more tasty because it's chocked full of code goodness.


Back To Firefox Again for the Second Time

Well, I've gone back to Firefox from Opera. I gave Opera a solid week. I like the browser and especially the M2 mail and news client. However, the feature set didn't compel me like it used to. Also, I found myself missing the compatibility (that's right, I said compatibility) of Firefox. Go figure.

Interestingly enough, I didn't miss my extensions too much. Hmmm... Maybe I should clean out my extensions in Firefox and only add back the ones I really care about...

Mighty Mouse and Firefox

I have been having a "problem" with my Apple Mighty Mouse in Firefox on my Mac. Instead of scrolling horizontally, moving the ball left and right made Firefox go forward and backward through history. I hated this action, and it's really been a nuisance to me.

Tonight I decided to do something about it. I found this article on macosxhints. The second entry seemed to work for me. I now don't have the forward and back scrolling problem and all is well.


Junction Rocks

I just found a tool that rocks so hard it’ll make your grandma freak.  I’ve wanted a tool to create symlinks on Windows for years; nay, perhaps a decade now.  Fortunately, my friend Jeff turned me on to Junction.  It’s small, it’s simple, it has no requirements.  I like that.

Now, I’m off to restructure my hard drive the way I want it with superfluous links.  Love it.


Blogger for Word

I’m not a big fan of Word, but the Blogger for Word add-on works extremely well.  I’ve published all of today’s posts using it.  It integrates into Word as a toolbar.  You just create a new document containing your post and use the toolbar to publish.  Simple and it works.

I really need to invest some time and get Emacs set up to publish to Blogger.  I just haven’t felt like investing the time yet.

Treo 600: SD Card Not Recognized

Here’s a tip for you Treo 600 owners…  If you’re Treo suddenly tells you that “The handheld cannot recognize this card.” when you are using an SD card, try putting the card in the slot and doing a soft reset.  Once the device is reset, there’s a chance that the card will magically be recognized.  Why?  I don’t know why.

Thanks to this PDA Street Forum post – it worked for me!

WOD of Issues

The Fishbowl has a great post about The Wall of Death.  The idea is that you create a wall where you put issues, enhancements, etc. for the current release for a software product on a big wall.  Developers take issues off the wall, work on them, then record the time it took on the paper.  When they are done, they deposit the pieces of paper in a “done” pile.  This leaves a very nice paper trail and shows your progress.

I love this idea.  I can think of at least a half dozen projects where I would have loved a Wall Of Death.  (You could even casually call it the WOD which feels satisfying.)  The WOD would have been much more satisfying to work with than a spreadsheet or online issue tracking system.  

The only draw back is that I’m a consultant.  Most of the time I have to work in conditions that would not be friendly for a WOD.  Now, if you could have a virtual WOD, that would be cool.  Wait a minute, isn’t that what systems like Altassian’s should strive for?  Maybe they should incorporate the WOD idea into the next version of their products.  (


Singing Opera

Last month, Opera celebrated its 10th anniversary by giving away free licenses of their browser. I took advantage of it because I was an Opera lover before Mozilla went 1.0. I installed the latest version of Opera and licensed my copy. I played for a bit, and then put it away.

For several months now, I've noticed that my Firefox is leaking memory like crazy. I don't know what's going on - is it an extension? Is it the core? I guess I could uninstall everything or use a different (new) profile to see if I have still the problem. I also suspect Gmail's web interface. Seems like if you leave that up for a couple of hours, the next thing you know Firefox is topping 80 - 100 MB of memory usage.

Instead of playing around, I decided to give Opera another whirl and I've been enjoying it immensely. I set up M2 (Opera's mail client) to do my Gmail via POP. It's a very slick mail client. I am not sure if it allows me to send HTML mail messages, but I'm not sure that I care either. I love its speed and simplicity. I also love the way it indexes mail and integrates so nicely with the browser.

I've also started loving the Opera interface all over again. The mouse gestures are awesome for when you don't want to take your hand off the mouse. The keyboard shortcuts are equally awesome for when you don't want to take your hands off the keyboard.

So, what's annoying? Lack of sites that support it. Gmail mostly works. The dialog box where you type in someone's name to send them a message doesn't work from time to time. But, M2 is working like a champ for that.

Some sites just don't recognize the Opera browser, and they let you know it. However, you can hit F12 and change Opera to emulate Firefox or IE. The problem is that the emulation isn't complete (or completely broken in the case of IE). However, it does let you fake out some of the sites some of the time. Also, when I use Safari on my Mac, I have similar issues.

All in all I'm having a great time with Opera. I think I'm going to continue to use it as my preferred browser for another week or two and give it a fair shake. It's certainly stable and doesn't seem to leak memory that badly. And those two things are worth alot to me.


FT.com / Technology / Digital Business - How open source gave power to the people

FT.com / Technology / Digital Business - How open source gave power to the people is a nice piece on how Open Source Software (OSS) is empowering people in new ways that weren't previously possible. There's also reference to how OSS is starting to change how corporations offer their products and services.

More about declining interest in high tech education

The Globe and Mail: Where jobs are and students aren't reports about how young people are not pursuing technical careers. They site the technical bust as the reason.

Whatever the reason, I'm afraid there is a growing possibility of real technical brain drain problem in the U.S. Not only are we losing research funding to other countries, but we're also having trouble finding people to even pursue a technical career.


Linux Empowers Supervillians

This cracked me up even though it completely lets our secret out...


Design-first vs. code-first

The Server Side has a hot thread on Design is not coding, coding is not design. As you might imagine, it has all the trappings of a Holy War. There are some interesting posts, though.

I think there's a misconception in the software world that there is some kind of silver bullet to making great software. Sometimes languages are held up as a silver bullet. Sometimes it's tools. In this case it seems to be methodology, specifically design-first vs. code-first type of methodology.

What do I think? Well, I think it takes a team of dedicated, talented people to make great software. It takes good ideas, good design, good project management, good code, and good customer support. Without dedication, talent, direction, and sound practices it doesn't seem to me that any of the things you must be "good" at is possible.

So, design-first vs. code-first? Yes. As long as it fits in the context of a good practice that allows your firm to make good software.

I would like to create a methodology called "Holistic Software Development". It's mission statement would be something like "get good, hard working people to focus their talent and energy on turning great ideas into great software that empowers customers through excellent practices". It would be a methodology framework that other methodologies could plug into - something like the Spring application framework. But, it would tie them together in a way that supported it's mission statement.

But, what do I know?


What Firefox and Mozilla users should know about the IDN buffer overflow security issue

Mozilla has released a security advisory about a buffer overflow problem in Firefox. You can read about how to work around the issue here. The problem has to do with how Firefox handles local characters in an IDN domain name. CNET has a write up here.


Mighty Mouse

Apple's marketing is so powerful... I first saw the Mighty Mouse yesterday and I went out and bought one today. Yeah, call me a Mac Fanboy, a lemming, or a card carrying member of the Apple Cult. But I have an excuse!

See, here's the deal. I've wanted a 3 button scrolling mouse for my Mac for 2 years. I bought a Kensington Studio Mouse about a year and a half ago, but it really sucked. It's little scroll area didn't work well for me and it just didn't look as cool as the rest of my Mac. In fact, the last part is the problem. None of the other mice that have been out looked as cool as my Mac. So, I stuck with the Apple Pro Mouse that came with my iMac.

But, seeing the Mighty Mouse made me realize I had to have one. It's just so cool. It's sleek. It's white. It matches my Mac. Plus, it gives me buttons.

After I got the mouse, it took no time to install. I unplugged the Pro from my keyboard and stuck in the Mighty. Boom. Working. Then I installed the Mighty Mouse software so I could program the buttons. This required a restart, but it's forgivable. Mouse drivers are a bit low level and you can't just restart the window manager (Aqua) on the Mac.

Once the Mighty Mouse software was installed, things got even better. By default the two top buttons are the primary click (as if you didn't have a left and a right), the middle is Dashboard, and the sides are Expose. I reprogrammed the top buttons to be left and right and left the others as is to see if I liked them. Two hours later, and I think I'm going to keep the middle and sides programmed to Dashboard and Expose.

I have to say, I've really been missing out by having a single button mouse on the Mac. Just having the ability to scroll makes it feel like you can do things faster. The cool thing is that I can scroll vertically AND horizontally. Love it.

Bottom line: This mouse ROARS!*

* Obscure reference to The Mouse That Roared. I played Professor Kokintz in the play in 7th grade. I've never seen the film, but it seems like a must-see Peter Sellers performance.


Lisp programming and RSI

There's an interesting thread on comp.lang.lisp about Repetitive Strain Injury and Lisp. It's not the RSI or Lisp's relationship to it that is interesting. People are posting lots of links and information about alternate keyboards and keyboard mappings. If you're like me and interested in that kind of thing, check it out.


Stuck in Windows? So am I. It's pretty boring. However, I just found a cool application that might make your life a little more entertaining. Check out SphereXP! It's a 3D window manager that runs on top of Windows XP. It's very cool, and it only takes a few minutes to get the hang of it.

I can't say much about it's stability or it's quirks because I've only been using it for 30 minutes. However, it sure makes switching from Visio to my browser entertaining! :-)

What's Happening

The last coding project I was on using Spring and some other cool technologies ended abruptly about a month ago. The project was cut due to funding (rather the client didn't secure it before starting). So, I've moved on to another project.

I'm currently working on a business process project. A "business process project" is where you go in to a business, map out their current process, and then make some recommendations for how they can improve. This is usually something that business analysts and Industrial Engineers are particularly suited for. I happen to be the latter.

I haven't really practiced Industrial Engineering in the last 10 years or so, but this is my third process project in the last year. I think the reason is that I just happened to be familiar with the client and I know my way around manufacturing.

I really prefer writing software. In fact, that's why I switched careers 10 years ago. When I was an engineer, I would go home at night and tinker with my computer. I would install Slackware on some old machines or perhaps sit down and hack out some VX*REXX toys. In other words, I engineered by day and hacked by night.

It's comin' back around again!
This is for the people of the sun!
It's comin' back around again! Uh!

-- "People of the Sun" by Rage Against The Machine

I'm back in that mode. I go do my flowcharts by day, but by night I'm tinkering with CLOS. I use my Dell Latitude D800 by day, but by night I'm a Mac hacker. I'm back to living a double life.

So, I'll continue to lead my double life until October when my current project wraps up. After that, hopefully it will be back to software and one life to live.


Google Moon

A posting on Paolo Amoroso's blog made me aware of Google Moon. This is a cool demonstration of how the Google Maps technology is "earth-independent". (Hopefully I just coined a phrase, but I suspect the science fiction community beat me to the punch decades ago.)

In addition, check out the link to Google Earth. I just downloaded it, and I don't have time to play right now. It looks like a hoot, though.


IBM sales no more OS/2

Slashdot has a story about IBM officially ending sales of OS/2 this year. Goodbye old friend! I fondly remember when you ran Windows 3.1 faster than DOS could. I'll also remember when I was writing 8086 assembler code in your DOS box so that when I screwed up interrupt vectors I could just close the DOS box and reopen. You saved many a three finger salute.

Optimus Keyboard

Slashdot has a story about the Optimus keyboard. I WANT ONE!!! I don't know if I would ever truly reprogram the keys, but it just looks SO cool...

Optimus Keyboard


From one Spring Controller to Another

It's been a BUSY week for me. I'm heads-down on my current project trying to get some code cranked out before next Wednesday. I'm not sure I'm going to make it, but I'm giving it hell.

I'm using the Sring Framework and its MVC layer on this project. I ran into a problem where I wanted to do some work with one controller and forward the result to another controller. It turns out, that ain't exactly pretty in this version of Spring MVC. It's actually a problem that Spring Web Flow is going to solve. Unfortunately, it's too late for me to pull the plug and switch to Web Flow.

I found Tamer Salama's Weblog post about Spring controller forwarding extremely useful. FYI - I went with the RedirectView option, but I put my information on the URL as parameters.


SiteMesh Is Lovely

Aaron, my coworker, has a great post about SiteMesh vs. Tiles. The project that he's referring to is the one we've been working on together. SiteMesh is one of the tools that has made the project a joy so far.

I think Aaron's assessment is right on. However, I will clarify one thing with his statement about third party tag libraries. The problem wasn't that SiteMesh was filtering out the custom tags. The problem was that SiteMesh was filtering out the HTML/JavaScript generated by the Alphablox tag because it was in the "head" portion of the decorated JSP. To work around this, we set up a special decorator to put the Alphablox tag in the head of the decorator instead of relying on it being in the decorated page.

Like Aaron, I really like SiteMesh and hope to use it again on my future projects.


Deep cop-out

I decided not to write my own deep copy yesterday and went with the serialization solution. This turned out to be the way to go. I didn't even use the optimized byte streams I mentioned and the deep copy of my object takes a very tiny fraction of a second. I'm staying with that option for now.


Faster Deep Copy Using Serialization

JavaTechniques | Faster Deep Copy of Java Objects presents a trick to make deep copy using serialization faster. The author provides FastByteArrayOutputStream and FastByteArrayInputStream which speed up the copy. However, the performance gain provided still doesn't put the technique on par with writing your own deep copy.

If you haven't guessed. I'm trying to avoid writing a deep copy method. :-)

Java Tip 76: An alternative to the deep copy technique

Java Tip 76: An alternative to the deep copy technique presents a really neat deep copy technique. Dave Miller, the author, uses serialization to deep copy an object graph. The only thing stopping me from using this technique from now on is the performance compared to cloning. However, it's a really quick and dirty way to do deep copy if you don't have to do it often or just want to prove something out.


Green Tea: Breath Be Gone

Another benefit of Green Tea is that it kills things that cause bad breath. Maybe this is the real reason my wife wanted me to start drinking it. Now my coworkers are reaping the benefit as well.

Trang, part 2

Well, I just got through checking the DTD that I built with Trang. I actually only had one thing to change so far. Trang even inferred the optional elements and the + operators for my elements. Kudos!


Trang is the gift that just keeps on giving. Ever since I started using James Clark's nXML mode for Emacs, I've also been using his Trang tool to convert DTDs to Relax NG compact schema. This allows nXML to validate your XML as you type it! It's really a great Emacs mode that also features tag completion.

However, I just discovered another great thing about Trang. I am writing an application that I need a configuration file for. I decided that I would make the configuration file XML and use Jakarta Commons Digester to read the file in and turn it into Java Beans. I mocked up my XML, and it turned out to be a little complex but workable. Since an administrator will edit the configuration file with an editor, I want the Digester to validate it using a DTD to make things more bulletproof.

SO, I was faced with creating a DTD for my XML file. Ugh. At least it's not a Schema. But, I still didn't want to do it. I remembered that Trang had different input and output options, and I wondered if it would create a DTD from my sample XML as a starting point.

Being brave and lazy, I fired up Trang against the XML and told it to spit out a DTD. VOILA! Within a second I had a working first cut at a DTD!!!

Thank you Trang, from the bottom of my lazy heart!!!


European Common Lisp Meeting Presentations, Videos, and Sounds

Edi Weitz has posted the presentations and videos of the European Common Lisp Meeting. Also , Kevin Smith pulled the sound tracks from the videos and posted them .

Courtesy of Lemonodor.

Ryan Shaw � Greasemonkey Stole Your Job (and Your Business Model)

Ryan Shaw � Greasemonkey Stole Your Job (and Your Business Model). Interesting idea: bright kids redesigning your site's UI and threatening your job as a user-interface designer. However, another perspective might be increasing the longevity of a site you no longer have time or patience to maintain.

Bottom line is that Greasemonkey is cool.


Google Desktop Search for the Enterprise

In "MSN Enterprise Search?" I speculated that Microsoft is trying a "free is better" power move on Google. I was wrong. I was misinformed - no, I was uninformed.

Today when I logged into Google, I realized MSN Enterprise Search will be a late response to a Google first strike. Enter Google Desktop Search for Enterprise. Currently, it appears to be free.

So, there you go. MS is struggling to stay in the game.


Ajax (not the foaming cleanser)

Edd Dumbill is talking about Ajax. It looks as if there is a Ajax summit going on. Also, the Ruby on Rails guys are getting all Ajax-y with it. I'm one of the many watching from the sidelines and tossing out the occaisional barb.

I'm wondering why we don't just abandon HTML. Sure, HTTP is a fine protocol for doing alot of stuff. Let's keep that. However, DHTML and things like Ajax are attempts to cling to a presentation method that we're clearly outgrowing.

Here's an idea - why don't we come up with a cross-platform, easy to program user interface language. Something that tools can sit on top of. Also, it's gotta' be something you can validate for correctness like XML. I don't want any more of that quirky parsing behavior (Do you hear me IE?).

Yeah, I've heard of XForms. But I don't think that cuts it. Clearly we need to encapsulate the event model as well as the presentation. We also want rich interactivity. Why should we limit ourselves to forms? We want canvases and crazy custom controls built for our cross-platform UI language.

You gonna' come at me with Java applets or Macromedia Flash? Please... You've seen the lack luster appeal of those technologies as well as I have.

Yes, Avalon does sound good. But, you know that's only going to be on one platform! Sure, the Mono gang may be able to port it. However, Microsoft will still be in charge of the standard.

Shouldn't we have a rich, cross-platform, distributed UI standard/language/toolkit by now? I think we could if everyone would turn away from their lock-in strategies and general silliness.

MSN Enterprise Search?

I'm not sure why this raises my eyebrows, but Mary Jo Foley is reporting that MS has an enterprise version of their desktop search product in the works. I'm guessing this will compete with the Google Search Appliance.

I wonder if this will be a way for Microsoft to undercut Google like they did with Netscape. Perhaps they will release their Enterprise Desktop Search (or whatever they'll call it) for free. Where does that leave Google? Microsoft learned the first time that "free" beats "superior technology" in the technology RoShamBo.


Spring Framework 1.2 Released!

Over the past couple of months, I've become a huge fan of the Spring Framework for Java. I've been using 1.1.5 in my current project and it's been a blast. I'm even using the Spring MVC web framework as an alternative to Struts. I'm very pleased so far.

just checked the Spring website because I've been expecting the final of 1.2 for a couple of days. Lo and behold it was released on Friday! Very nice. I know what I'm doing first thing on Monday! ;-)


Show Me The Source, Jode-y!

I've been using the Jode Eclipse Plugin probably as long as it's been out. It's one of the few Eclipse plugins I always re-install. The plugin will decompile any .class files that Eclipse comes across.

This turns out to be pretty handy. When you are debugging and you accidentally step into a 3rd party library, you can actually see the source code (but you may not get debugging information if they didn't compile it into their classes). If you are looking at 3rd party library that has no documentation and isn't OSS, you can decompile the class files to see what they're doing with what you pass in and what they should return.

Is it legal? Probably not. Will the 3rd party support you if you rely on a call that they don't publish? No way. Will you get your work done faster and feel ultra-cool? Yes... yes you will.


Problems Loading Spring Framework in WebLogic 8 with Context Listener

How's that for a specific title?

I just managed to struggle through a problem I was having with Spring MVC on WebLogic 8.1. For some reason, I couldn't reference beans from my application context in my servlet context file. Spring would tell me that it couldn't find the bean that I was referencing.

Here was my setup. I loaded the main Spring ApplicationContext with the ContextLoaderListener. Then I declare a single DispatcherServlet and name it "action". I set the "load-on-startup" value for my servlet to 1 so it gets loaded before everything else.

On Tomcat, this configuration works fine. Spring loads the main application context and then loads the servlet context. I can reference beans defined in applicationContext.xml from action-servlet.xml. No problems.

On WebLogic, I noticed that WebLogic loaded the DispatcherServlet before the ContextLoaderListener was invoked. That meant that the DispatcherServlet's action-servlet.xml was referencing beans that hadn't been instantiated yet! Argh.

I found this article in the Spring support forum. It really didn't have a direct relationship to my problem, but the problem was still the load order of the servlet context versus the application context. I noticed in a code paste that the suggestion was to load the ContextLoaderServlet before the DispatcherServlet. AHA!!! Ditch the listener and try the servlet approach to loading the application context.

SO, I removed the ContextLoaderListener config from my web.xml and used ContextLoaderServlet. I gave it a load-on-startup value of 1 and DispatcherServlet a load-on-startup value of 2. Redeploy, restart... BINGO! We have love.

del.icio.us extension

Are you using del.icio.us yet? Are you using Firefox? Good. Now, are you using the latest version of the del.icio.us extension for Firefox? If not, you should think about installing it.

The integration of the del.icio.us extension is nice. It provides a sidebar that gives you access to all your bookmarks. The sidebar allows you to select a tag and it shows you all the bookmarks that are associated with that tag. You can also select multiple tags, right click, and query the selected tags. Neato.

Perhaps the best feature is the context menu for del.icio.us. It lets you post the current page to your del.icio.us account. A separate window pops up and gives you the opportunity to enter the metadata about the tag (e.g. description, title, etc.). Of course, you also get to specify the tags that you want to associate the bookmark with. This is the good part - it tries to guess which tags might be appropriate and it shows not only your current tag set but also what other people have tagged the mark with. VERY nice.

Does this kill the folksonomy? Does this make you more sheeple like if you are using someone else's tags for your content? I don't know. Personally, I think it makes it easier to come up with new ways to tag your bookmarks. Ways that are sometimes much more intuitive than what you come up with on your own.


NASA Open Sources PathFinder

According to the JDJ, NASA is open sourcing their PathFinder application which finds bugs in Java programs. PathFinder is a JVM that traces through Java programs and looks for things like deadlocks and unhandled exceptions.

I think this looks really cool. I imagine this would fit well with Cleanroom Software Engineering practices - you want to guarantee reliability. This would definitely help you do that.


onfocus.com | PGP-signed posts for weblog comments

It just occurred to me how cool it would be to use GPG to sign your blog posts or comments. This guy had the idea back in 2002.

Making Software Design More Like Architecture: Renderings

It occurs to me that there's another way that software design is not like architecture. Architects typically create a rendering of their design. This is a model or picture(s) used to convey to lay people what the design will look like when the construction is complete. I don't believe that many software design projects produce a complete rendering of the system as part of their deliverables.

How do we create renderings of a design during software design? Does UML count? I don't think so. That's more like the building plans that an architect draws. What about user interface mock-ups that a user interface architect creates? This may be more analogous. However, not every project has the luxury of having a interface architect on it (much less during design).

Should this be part of software architecture? It seems like business users need renderings to understand what we are designing. Often I hear business users asking, "What would that LOOK like?"

How do you get this into your development methodology? Sometimes architects spend alot of time modeling or drawing sketches of their designs. It seems that we would need similar time to mock-up our interfaces.

Thinking along these lines makes me think that user interface architects need to be in on the design from the very beginning. This would give them the time they need to create these renderings at the beginning of the project.

This means that they need to come in and design in conjunction (or possibly even before) the software architect. (Well, only if the software architect is not an all-in-one wonder kid.) So, this means that the interface architect should be part of the design team.

It would be interesting to research how design teams that include an interface architect prevent stepping on each other and what their methodology looks like.


IBM Addresses SMBs with Latest WebSphere Integration Software @ JDJ

IBM Addresses SMBs with Latest WebSphere Integration Software. JDJ reports that IBM has a new version of WebSphere MQ and WebSphere Business Integration Server for small and mid-sized businesses.

Java: Meta-Frameworks

Duncan Mills recently posted an excellent article on the JDJ website titled "J2EE vs .NET: Where Is Application Development Going?". In the article he talks about the rise of meta-frameworks (frameworks that pull together individual frameworks into a single API/model) as the next trend in application development. The Spring Framework gets some good press here since it matches Duncan's definition of meta-framework to a tee.

Why meta-frameworks? Duncan has some great points including this:
This then is the major carrot that meta-frameworks can offer to enterprise development shops - stability, but without stagnation. A meta-framework has to evolve and offer it's consumers the latest and greatest whilst at the same time maintaining a rock solid foundation for existing applications.
I think the isolation from the underlying APIs is a nice benefit of meta-frameworks. However, I also think that after the associated learning curve, a good meta-framework can speed development of good development practices. In fact, sometimes they encapsulate best practices. For example, with Spring you don't have to write Factory classes/methods any more. So, it makes it easier and faster to write loosely coupled code with all the benefits of the Factory pattern.

As I mentioned in my previous post, I just finished the design phase of a new project. On this project, I'm specifying that we use Spring. I'm excited to start the development phase and experience a real world example of a clean architecture built around Spring.



For the past week, I've been spending the majority of my time writing a design document for my current project. The document has been challenging for me to write because there was alot of material to cover and I wanted to communicate the design in a "low tech" way. The low tech requirement was driven by the amount of experience the client has with the technologies we'll employ in the project.

While I was writing this document, something struck me. I was writing about writing. I was writing a document about writing software. In effect, I was "metawriting". The concept struck me as funny and I wondered why it had never occurred to me before.

So, I started thinking more about that. It got me thinking. Do authors write formal documentation detailing the novel they are writing? Nope. Do painters write a formal specification for their next painting. Never. What gives?

I'm thinking that writing software is not an act of intensely personal expression that writing novels and painting are. Sure, writing chunks of code can be. But, in most cases, the process of writing an application is not.

Writing software is much more like architecture where you create a design specification (sometimes in concert with others) that details how something will be constructed. The architect exhibits personal expression in the beauty of the design. The builder can exhibit personal expression in the craftsmanship and interpretation of the design.

However, how much beauty and art do you typically find in a software architecture document. If you read mine, very little. I typically bang out a document following as many best practices as I can. I also try to leverage work that I've done or seen before and steal ideas and pieces of design from other places. In fact, I'll copy the format of the specification document or even large paragraphs from other documents.

Am I really practicing an art like architecture? I don't know. I don't think I've ever designed the software equivalent of the Eiffel Tower, New York's Guggenheim Museum, London's Tower Bridge, or even the Leaning Tower of Pisa. Sure, I've had leaning designs, but not with such style.

I feel like I'm missing something. Everyone wants to compare software design to architecture. On the one hand, I agree - you create a formal specification that details how something should be built. On the other hand, I'm missing the beauty - and believe me, I LOVE writing software.

I am sure that some of it has to do with either my level of talent or my skill level. I can think of some examples of beautiful software designs: Common Lisp, Emacs, the Apple/Next Cocoa Framework, and more recently Ruby on Rails. Perhaps the best thing I could do, just like apprentice architects, is study great software designs to understand what makes them great.

I'm well aware that software patterns are an attempt to do the same thing. However, I think there's more there. It's not just the classic design elements, it's how those elements come together to create something beautiful. That's what's missing from a pure pattern study.

So, perhaps the realization I've been metawriting and what that means has given me a new direction. Wouldn't that be cool?


Jakarta Commons Online Bookshelf

Jakarta Commons Online Bookshelf is a collection of PDFs that detail each of the pieces of the Apache Jakarta Commons components. You can purchase them individually for $4 - $7 each or you can purchase the whole set for $39.95.

I'm strongly considering purchasing some or all of these. I have used Apache Commons components on my projects for the last few years. I've struggled along with the "thin" documentation and information from mailing lists. This set of PDFs may save my sanity.

Best Practices for Java Logging

Today I've been looking into best practices for Java logging. There's alot of information out there, but I was looking for something very tangible - what to log at what level (Apache Commons Logging with Log4j) and when. I found what I was looking for in the Best Practices section of the Apache Commons Logging User Guide.

I'm starting a new project, and I'm going to adopt the recommendations in this guide. I've been logging some things, specifically exceptions, at inappropriate levels. I've been logging too many exceptions at the "debug" level. This causes the administrator to run the application with the "debug" level of logging turned on so that there is traceable information when something goes wrong. In addition, I've been logging too many exceptions at "error".

Hopefully, by following the Commons Logging practices, I'll get a log file with more valuable information.

eWeek: Browsers Get Ready for Graphics Boost

eWeek reports that Opera and Mozilla are going to incorporate SVG support instead requiring you to use the Adobe plug-in. VERY nice. Hopefully this will increase the adoption rate of SVG.


Sleeping with WHAT?

The XM radio built into my dash has a limited number of characters that it will display for song title. I've found that it's generally just enough characters to make you really wonder what the song title is supposed to be. This morning on my way to work, I checked out the display:

Name: Tori Amos
Title: Sleeping with Butt

What the? Man, Tori's feeling a little passive aggressive. Oh wait! That's "Sleeping With Butterflies"...


Accessing Recent Files in Emacs

Some of you may be used to having recently used files available in the Windows file menu. When you look at the Emacs file menu, you may be wondering why that menu is there. In fact, you may be dismissing Emacs as incapable. WRONG! In fact, it's even now part of the GNU Emacs distribution as opposed to being a separate download. Joe Grossberg has a nice, concise write-up of how to enable it.

In Joe's example, he remaps C-x C-r to show the recent files list instead of opening a file read-only. I don't open files read-only very often at all, so I just followed his example to the letter.


Learning to Drink Green Tea

I'm not a tea drinker. I like iced tea, but it has to be the instant kind with lemon and sugar added. So, I guess I am a tea drinker, but I'm not bon vivant.

My wife is leading the charge on getting healthy again. She's convinced me that I should drink green tea. Well, convince is a strong word - she said that it's good for me and I should try it. That's usually all I need.

This morning when I got to work, I brewed a cup of Lipton Green Tea. I steeped it for several minutes expecting it to get dark. It didn't. Confused, I tossed the tea bag and sipped.

I have to say, it really wasn't that bad. The aroma was tea like, but the taste was very mild. I found that I didn't even need sugar. I felt really proud of myself as I set there and drank my healthful elixir.

I decided to go check what WebMD had to say about green tea. WOW! Medical folks rave about this stuff, huh? I guess I'm the last on the planet to know. That seals it, I have to learn to drink green tea.

So far, so good. I'm actually thinking of having another cup. But, I'm going to have to get a little coffee kicker in between. It's going to take a bit to wean off the hard stuff.



PrintFu is a a great idea. They will take a PDF, print it, and bind it for you. I can finally get that copy of OnLisp I've been wanting! Woohoo! (Or as Bubb Rubb would say Woo WOO!)


Phil Show Us Your O Face

Check out ESPN's coverage of Phil Mickelson's disappointment this weekend at ESPN.com: Page 2 : The Tiger awakened. Get a good look at the photo from some AP photogropher:


Cargo Cult Programming

I love the term Cargo Cult Programming. I complain about it from time to time, but I have to admit I'm guilty of it. Worse, I'm guilty of pushing other people to do it. All in the interest of time.

That said, isn't Cargo Cult Programming related to the promise or reusable software components? Isn't that concept supposed to provide me with little black box components that I just hook up to and expect the functionality they promise? Maybe Cargo Cult Programming is the ultimate manifestation of reusable software.

My torches are lit...

Microsoft 180s on forcing you to Longhorn to get IE 7

Mary Jo Foley's Microsoft Changes Course: New Standalone IE for XP Planned reports that Gates announced at the RSA Conference that they would make a stand-alone version of IE 7. Broad speculation on its features is occurring on Slashdot. I'm guessing that Firefox can continue to outpace IE. I will be shocked if there is any advanced features like themes or plug-ins. Why? They're a big company and their product (IE) now has a huge code base. Plus, they integrated the damn thing into the Windows shell, so there is no way they're going to go out on a limb with new features. With as many security problems as they've had, plug-ins would be the kiss of death.


Koders - Source Code Search Engine

The Koders search engine just now hit my radar. This is a really cool concept. It allows you to search solely on source code. It also allows you to select a license type if you have a preference.

Thank you Koders team, THANK YOU!!!


Reclaim Your Attention Span

Surviving the Bit Infinity at goodexperience.com comments on a NYT article about how people, especially Microsoft, are looking into ways to prevent as many interruptions from technology as possible. I find this incredibly ironic because Microsoft is the company that brought us Clippy and most lately those DAMNED XP UI BALLOONS!

Taskbar Balloon


Disecting Google Maps

Curious about how Google Maps works? Here's a great article about the magic under the covers. This guy's done an excellent job of documenting the inner workings from the client side.

The Human Adapter

I have to create a PowerPoint presentation that has many pages that require tables. Unfortunately, PowerPoint's table editing functionality isn't up to snuff with some of it's other features. For instance, the tables don't automatically resize to fit their containers. So, when you have a table that gets too big for the box on the slide, Powerpoint just makes your box bigger instead of scaling the text and cell sizes. This is ROYAL PAIN when you are trying to create a table on the fly and you don't know how big it's going to get.

So, I'm working around that. I'm creating my table in Excel and pasting it into the slide. When I do this, PowerPoint 2003 automagically converts my Excel table to a PowerPoint table. When it does this, it resizes the table to fit to the best of its ability. It's easier to create my table in Excel because I can just go hog wild with resizing, lengthening, etc.

Isn't this hysterical? I really almost started laughing out loud when I realized how jacked up this is. I'm a human adapter. I'm resolving the impedance mismatch between the requirements around creating a table on the fly and how the software actually works.

I then started thinking about how often I actually do this. I do it all the time. I create my diagrams in Visio and paste them into PowerPoint and Word because those products have completely impotent drawing tools. I often edit text in Emacs and pull it into Word and format it. Word's text manipulation capabilities suck and Emacs doesn't do formatting only content.

What happened to the idea of our environments having all these little components that do one thing really well and they all just plug together? What happened to Taligent? Yeah, I know, but I'm talking about the idea of Pink.

In fact, why can't Emacs's incredible editing engine just be a component that I, as a user, tell the system to plug in wherever an editor is needed? I could use the engine as a mail editor, Word editor, etc. (Ignore speed of startup and other current limitations - come on, think outside the box with me.) I want components that I know how to use and they travel with me. Excel is my table plug-in, period. Visio is my drawing plug-in, period. If you're an artist, maybe Freehand is your drawing plug-in.

Ok, back to reality. Emacs, Excel, Visio, and PowerPoint call. Four tools to make one presentation because I refuse to have my requirements cheapened by your inability to meet them.


A night with the OQO Model 01

The OQO Model 01 is very small. Posted by Hello

A friend of mine recently bought an OQO Model 01 at work. He took it home last weekend to play with it. He graciously let me put my grubby fingers on it for a couple of hours on Friday night.

It rated pretty high on the cool scale. However, I couldn't figure out what I would use it for. It's too small to be good for any serious data input, and it's too big and doesn't resume fast enough to be used like a PDA. Also, I think I would take the $1600 or so that this thing costs and put it toward a PowerBook instead. But, it was really fun to play with for a couple of hours.

I have other pictures coming. You just won't believe how small this thing is. Check it out!

Notice the size relative to my car keys. Freaky, huh? And that's really Windows XP full version running on it. Posted by Hello

A picture of the OQO Model 01 on my desk. Complete with portable keyboard and miniature portable mouse. Bluetooth, of course. Posted by Hello


Passive Aggressive Communications Solutions

Today was a really rough day. There was plenty of frustration and general tedium that lead to a general state of dysphoria. I definitely needed a pick me up.

A friend of mine sent me a link to a great idea for punctuation substitution. It's hysterical. If you don't like it, well... :)


I outsourced my DNS: Losing a little more geekitude

This is a big day for me. I made the decision to outsource my DNS to DNS Park. I feel good about the decision because DNS Park seems like a reputable company, and their web-based management interface rocks. However, I realize I've lost some geekitude by doing this.

It's really a question of priorities. I find that my free time in front of my computer ain't what it used to be. It's not only that I prefer to spend more time with my daughter, but I've also made a shift to more coding and less system administration. So, maintaining my DNS server isn't something I enjoy doing any more.

I feel a bit bad because I know it's not really that difficult to maintain a DNS server once you understand how they work. In fact, once you get it setup, you don't have to do anything as long as nothing changes. HOWEVER, I've been through 3 static IP changes (ISP consolidation) and 2 operating system changes (it's a bit of a personal problem controlling my OS fetish) in the last 2 years. Every time something changes, I'm reminded of how I'd much rather let someone else set it up and maintain it.

So, goodbye DNS! I hope my little domain will be happy at DNS Park. We'll know in 24 to 48 hours after "the propagation" happens...