12/12/2006
A letter to a friend
I hope you've been well. It's been 5 months since my last correspondence. Wow. I guess I'm now officially in the super-infrequent blogging category. It's not as unpleasant nor as lonely as I imagined. Hmmm...
There's been alot that has happened. The absolutely biggest and best thing has been the birth of my son. He's now 4 months old and an absolute joy - like his older sister. We're trying to spend plenty of time together. In fact, he's proofreading this post right now.
I hope everyone on the Internet is doing well. It seems like yesterday that we were all talking and laughing about who knows what. Maybe we'll be back there someday soon. Until then, I remain...
Respectfully yours,
Tom
7/13/2006
Intranet Trends to Watch for in 2006 - Part I
Intranet Trends to Watch for in 2006 - Part I
Over at Patrick Dodd's weblog, Shadowbox Studios, he has just shared an interesting weblog post taken from the recent CIO article by Shiv Singh on Intranet Trends to Watch for in 2006
[via Data Management Blogs]
- User Experience is starting to matter
- AJAX is coming to an Intranet near you
How to Manage a Supersized Architecture
How to Manage a Supersized Architecture
I don't know whether it has surfaced during any of my previous posts, but I don't really like "Architects" who speak about Enterprise Architecture in theory. There are many reasons for this fact, but today I'll focus on one that is burning me at the moment: Scalability.
[via Data Management Blogs]
6/02/2006
Identity 2.0 Presentation
Mark recently turned me on to Beyond Bullet Points by Cliff Atkinson. I really liked Cliff's ideas. Dick Hardt's technique seems very similar to BBP.
I have long hated presentation software, but given this methodology, I'm slowly changing my mind. Both of these things prove that it's not the tool, it's how you use it.
5/30/2006
Conkeror: They're only encouraging me
This weekend, I read Bill Clementson's post titled "Firefox for Emacs users". Bill talks about a new Firefox extension called Conkeror. Conkeror's stated mission is:
Conkeror is a mozilla based web browser designed to be completely keyboard driven, no compromises. It also strives to behave as much like Emacs as possible. This means all the key bindings and to-die-for features of Emacs that can be imitated by a javascript/XUL web browser Just Work.
Of course, I about jammed a finger trying to get to the Conkeror install site at warp speed. The install was typical - just an XPI file that installs itself like any other extension. However, it doesn't just show up like any other extension. You have to type a special command line to get Conkeror to fire up the first time (this is on the Conkeror "install" page):
firefox -chrome chrome://conkeror/content
Once you start it up, you see the Conkeror help page. You can't resize the window - pretty annoying. However, if you go down the page and hit the button that says "Set Chrome", restart Firefox normally, then you'll be in full time Conkeror mode and you can resize the window any way you wish.
Aside from the bizarre start-up, Conkeror rocks! It's sure to tickle your Emacs fancy because it binds many of the common Emacs keys to browser functions. They've also made it easy to "click" links on a page by numbering each link; you simply type the number of the link and BLAMO - you're navigating.
The only drawback I've seen on Windows is that Conkeror interferes with some AJAX/DHTML sites like... Blogger! But, as little as I interact with some of those hardcore sites, I can fire up IE as a work-around.
Give Conkeror a try and experience the beauty of mouse-less browsing. It really is quite cool.
Update 05-30-2006 10:38:26 CST:
It seems that Gmail attachments are causing problems for me in Conkeror. Yikes! This draw back may really cramp my style.
5/26/2006
Courage
Courage is not the absence of fear, but rather the judgment that something else is more important than fear.
-- Ambrose Redmoon
5/17/2006
Google Notebook - More proof of attempted world dominance
5/16/2006
Cygwin Ruby on Rails MySQL problem
No such file or directory - /tmp/mysql.sockIt turns out it's an issue with the Cygwin environment trying to use Unix sockets when you use "localhost". I read the excellent notes posted at
Labnotes » Blog Archive » Setting up Ruby + Gems on CygWin
. It turns out the fix is very simple. Just change localhost to its IP address, 127.0.0.1, and you're in business!
4/12/2006
GrayBit: Accessibility is a Gray Area
4/04/2006
Color Schemes
3/31/2006
Reveal: The Best Firefox Extension Ever
Well, today I came across Reveal. I think it's the best Firefox extension I've ever seen. It's not just its function. The extension works extremely well and the fit and finish are superb. There's even a tour that allows you to quickly learn how to use the extension once you install it. Brilliant!
So, what does Reveal do? It shows you thumbnails of your sessions (and session history) and allows you to quickly navigate and manage them. You can use the mouse, keyboard, or even search! The thumbnails are also added to the tooltips for your forward and back buttons as well as the drop down menus. Finally, there is a magnifying glass that you can use to get a close up view of stuff on a web page.
This extension sets the bar for all other Firefox extensions in my humble opinion.
3/30/2006
Software Architecture Blues
- You still have to focus on low-level components after decades of Computer Science.
- I feel like I create the same software constructs over and over again with no leverage. No higher-level abstractions.
- Producing up front architectural models and documentation is tedious and hard to get right.
After reading the article, it dawned on me that it would be nice if the industry placed more emphasis and value on software architecture practiced in the "guide" style. The guide style of architecture is good for the development team because if they are less skilled, the architect can help them improve their skills, understand the system, and make better decisions. It's good for the architect because if he/she helps the other members of the development team make better decisions, the architect will be able to make a big impact through leverage.
I like that. I've always valued leverage. When folks used to ask me about why I liked to manage people, I would say something like "Because I like to facilitate a group of people coming together to solve a problem." To me, that's one of the best things about being a part of or leading a team. Working together and solving the problem.
But, the industry doesn't seem to value the guide style of architecture. Clients want up-front technical documentation and the comfort that someone "in the know" is leading the software development effort and making good decisions. You certainly can't blame them for that. If I were a client, I'd sure as heck want it.
It leaves me feeling like I need to be both. I want to be the guide style architect, but I need to be the up-front, decision making architect too. It seems to me if you are around for the entire project, you can start off the up-front guy and transition yourself into the guide guy. So, you suck it up and take on the tedium up-front so you can have the fun on the other side. Maybe that's the outlook that will save my sanity.
3/13/2006
Canvarticles Library
2/27/2006
The Latest Van Morrison Fan
I'm happy to report that I've finally come to my senses. I've been hearing a variety of Van Morrison songs on various XM stations and I really liked them. So, I decided to take the plunge and purchase a Morrison album.
I actually just picked one at random that was relatively recent, seemed to get decent reviews, and had the right "feeling" based on samples. I purchased Magic Time and I love it. It's got some real groovy tunes like "They Sold Me Out" and "Celtic New Year".
In summary, I think I'm well on my way to becoming a genuine Van Morrison fan. I'm going to grab some of the essential Morrison albums and dive in. I'm glad that I'm finally able to recognize the genius.
2/18/2006
Lisp in 10 Bullets?!?!
2/13/2006
AutoHotkey Remaps Keys Too
The love just keeps on coming with AutoHotkey - it remaps keys, too! I was using a tool called KeyTweak that actually made registry entries and required a reboot. That's fine at work because I'm the only one using my computer. However, on our Windows machine at home I don't want to make my wife struggle to remember I've remapped the Control key.
This weekend I installed AutoHotkey at home and it dawned on me that I might be able to remap keys with it. I looked in the Help, and sure enough - there's a section on key remapping. (In fact, you can map mouse buttons to keys with AutoHotkey!) I edited my main script and added the following:
; Remap keys
CapsLock::Ctrl
RCtrl::CapsLock
This remaps the Caps Lock key to be the Control key. Then it remaps the right Control key to be Caps Lock. This works well for me because I rarely use the right control key. I'm considering making it the right Alt key because that is even more infrequently used.
The beauty of this set up is that it is per user and doesn't require any registry changes. So when my wife logs in to her profile, her keys have the default mapping. Love it.
Updated 2006-02-13: Someone tipped me off that the link to AutoHotkey was wrong. Thanks!
2/09/2006
Navigator Acquired!
As Jeff Reports, Navigator Systems, the company we work for, was acquired by Hitachi Consulting last week. You can read the press release here. Hitachi Consulting (HC) is a med-sized consulting company with a world-wide presence. It's going to be some big changes for little Navigator, but I think most of the Navigator folks are very excited about the future.
For us application development folk, I think being part of HC will give us the opportunity to be involved in even larger projects and stretch ourselves as developers. I'm anxious to see what kinds of application development projects HC has been doing, talk to some of their application development folk, and figure out how we can all integrate. Should be fun.
Workraving
In my recent quest to find ways reduce hand strain, I came across an application called Workrave. It's a nifty little Windows application that forces you take periodic typing breaks. You can configure the time between breaks and the length of each break. At the specified interval, it pops up a window and suggests a rest. You can skip or postpone the breaks. It works quite well, and I've noticed that it will even pop up in front of a full-screen VMWare session. There's even a way to view your work statistics by day!
Despite its goodness, I have a love/hate relationship with this application. The break pop-ups sometimes annoy me. I'm jamming away, all flowing, and there's the window. Sure, I can ignore it, dismiss it, or postpone it - but all that takes me out of the flow a little bit. I'm sure that I will learn to work with it better over time (just like my freshly remapped Control key).
I may be noticing some difference in my hand fatigue. I'll have to keep working with Workrave and my other improvements to see if they're really going to make a long-term difference.
BTW, I typed through a micro-break and finally took a micro-break during the production of this article.
Web Standards Project
I was reading the December 2005 issue of Computer yesterday (yes, I'm that far behind), and I came across a News Brief entitled Organization Develops Scripting Standards. The article talks The Web Standards Project. The Web Standards Project is a grassroots effort to fight for standards in web technologies. Currently they have campaigns for an Acid2 Test, DOM Scripting Task Force, Dreamweaver Task Force, and an Education Task Force.
I really like the idea behind the DOM Scripting Task Force. The manifesto says that the task force wants to solve some of the problems with JavaScript development like bad practices, obtrusive DOM scripting, and accessibility.
Yes - please fix all that.
2/06/2006
Blogger Markdown
Jasper de Vries has a Greasemonky script that will enhance Blogger's HTML editor with the ability to convert Markdown to HTML. Very sweet. Now you can post in Markdown. Love it.
Remapping My Control Key
Bill Clementson's post titled Surviving Emacs - Part 4 inspired me to remap my keyboard. I suffer from Emacs Pinky frequently and I'm looking for a little relief. So, today I made it a point to remap my keyboard to move the control key to caps lock using KeyTweak.
I have to say, I'm not used to it yet and it's bugging me really badly. I have alot of muscle memory built up. I can definitely see how the smaller reach is desirable, but it hasn't made a difference to me yet. Probably because I keep reaching for where the control key used to be rather than where it is now!
I'm going to keep going with it for a week or two. I'll try to report back and let you know how my pinky is doing. (The shift key seems to still be wearing me out, though.)
2/01/2006
Emacs Pinky - been there
1/31/2006
AutoHotkey + Cygwin + Markdown = Kung Foo
One of the easiest ways to generate formatted output from plaintext Markdown files is to use the perl script that is part of the official Markdown distribution. It's really simple to get this working - even on Windows. Take Markdown and add a little Cygwin... bingo! Again, simple is good.
After reading the "markdown for windows" article referenced above, I realized it would be really nice not to fire up a bash prompt and type a command just to get your Markdown converted to HTML. Enter AutoHotkey. (AutoHotkey is an OSS utility for writing Windows macros. I've been using it for a while, and I absolutely love it.) With AutoHotkey, you can add a keyboard macro definition similar to the following:
!#m::Run, "c:\cygwin\bin\bash" -c "getclip |/cygdrive/c/Markdown_1.0.1/Markdown.pl|putclip"
I now have the ability to enter Markdown anywhere, select it, cut/copy to the clipboard, hit WIN-ALT-M, and then paste my fresh HTML wherever I want it. To reiterate, simple is good.
Pure Kung Foo...
1/23/2006
Eclipse BIRT Home
12/27/2005
Apt-Pinning for Beginners
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.
12/12/2005
Recent Inspirational Reading
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.
12/05/2005
Finding the Best Programmer's Font || kuro5hin.org
Anonymous Font
12/01/2005
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
11/29/2005
More Free Love for Lisp
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
11/18/2005
Lemonodor: Short Course of Lisp
W3C Web APIs Working Group
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
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%.
11/14/2005
Learn Lisp From MIT--for Free!!!
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!
11/02/2005
New version of LW-ADD-ONS
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.
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.
<http://weitz.de/lw-add-ons/>
Note that you need the latest and greatest CL-PPCRE (1.2.12 or higher)
for this.
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!!!
10/31/2005
The Right Development Team for Rails
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
10/30/2005
LispWorks 4.4.6 Introduction Movie
- ANSI Common Lisp by Paul Graham
- Practical Common Lisp by Peter Siebel
- Successful Lisp by David Lamkins
10/29/2005
Handbook of Software Architecture
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
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?"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."
10/28/2005
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.
10/24/2005
R&D Making a Comeback - With New Rules
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.
10/19/2005
Hybrid Open Source Business Models
10/18/2005
del.icio.us code?
10/04/2005
Back To Firefox Again for the Second Time
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
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.
9/30/2005
Junction Rocks
Now, I’m off to restructure my hard drive the way I want it with superfluous links. Love it.
9/28/2005
Blogger for Word
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
Thanks to this PDA Street Forum post – it worked for me!
WOD of Issues
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. (
9/24/2005
Singing Opera
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.
9/23/2005
FT.com / Technology / Digital Business - How open source gave power to the people
More about declining interest in high tech education
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.
Argh.
9/16/2005
Design-first vs. code-first
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?
9/13/2005
What Firefox and Mozilla users should know about the IDN buffer overflow security issue
8/21/2005
Mighty Mouse
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.
8/05/2005
Lisp programming and RSI
SphereXP
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
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.
7/20/2005
Google Moon
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.
7/15/2005
IBM sales no more OS/2
Optimus Keyboard
6/10/2005
From one Spring Controller to Another
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.
6/02/2005
SiteMesh Is Lovely
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.
5/27/2005
Deep cop-out
5/26/2005
Faster Deep Copy Using Serialization
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
5/25/2005
Green Tea: Breath Be Gone
Trang, part 2
Trang
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!!!
5/24/2005
European Common Lisp Meeting Presentations, Videos, and Sounds
Courtesy of Lemonodor.
Ryan Shaw � Greasemonkey Stole Your Job (and Your Business Model)
Bottom line is that Greasemonkey is cool.
5/18/2005
Google Desktop Search for the Enterprise
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.
5/17/2005
Ajax (not the foaming cleanser)
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 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.
5/14/2005
Spring Framework 1.2 Released!
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! ;-)
5/05/2005
Show Me The Source, Jode-y!
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.
5/04/2005
Problems Loading Spring Framework in WebLogic 8 with Context Listener
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
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.
4/29/2005
NASA Open Sources PathFinder
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.
4/26/2005
onfocus.com | PGP-signed posts for weblog comments
Making Software Design More Like Architecture: Renderings
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.
4/22/2005
IBM Addresses SMBs with Latest WebSphere Integration Software @ JDJ
Java: Meta-Frameworks
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.
4/21/2005
Metawriting
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?
4/13/2005
Jakarta Commons Online Bookshelf
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
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
3/22/2005
Sleeping with WHAT?
Name: Tori Amos
Title: Sleeping with Butt
What the? Man, Tori's feeling a little passive aggressive. Oh wait! That's "Sleeping With Butterflies"...
3/17/2005
Accessing Recent Files in Emacs
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.
3/16/2005
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.
3/09/2005
3/07/2005
Phil Show Us Your O Face
2/16/2005
Cargo Cult Programming
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
2/15/2005
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!!!2/14/2005
Reclaim Your Attention Span
2/10/2005
Disecting Google Maps
The Human Adapter
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.

