OPML Parser on SqueakSource

Today is a big day for me. I finished off the first version of my OPML parser that I've been writing in Squeak. Not only that, I've published it to SqueakSource under the MIT license! The SqueakSource project is titled "OPML Parser" and the home page is here. If you would like to keep up to date on the project, the RSS feed is here.

Thank you to Claudio Acciaresi for your link to the Squeak Map page on using Monticello, SqueakSource, and SqueakMap. A little digging and link-following and I was in business in minutes.

If you find the parser useful, please let me know. If you look at the code and find odd Smalltalk syntax, violated conventions, or general improvements, please let me know. If you want to become a developer and help enhance the code base, please let me know!

Squeak rocks!


Labels on my blog

I've recently started using labels on my blog posts. Hopefully this will give people the ability to filter what they are interested in. I've changed the layout of my blog to include a list of labels on the side bar. Thanks for making that easy, Blogger.


Whisker browser with SVI

Ng Pheng Siong has a post on how to make the Smalltalk Whisker browser use SVI instead of the built in editor here. Loving this. Loving Smalltalk. I gotta' lotta' love, man.


Smalltalk OPML Parser Progress

I was fortunately able to take over a week off for Thanksgiving. The break from work was just what I needed to clear my head. It also gave me an opportunity to do some more Squeak hacking.

I worked on the OPML parser I'm writing. I was able to use Chronos to parse the RFC 822 time format dictated in the OPML specification. I used Chronos to parse the RFC822 time into a DateTime and stored that in my OPMLHead class. Beautiful. Easy. Love it.

What's left? Not much. I need to add more tests. I've got two OPML sources that I'm testing against. I'm using an OPML example I found on the web and the OPML that lists my Google Reader subscriptions. I'm going to try to find some other OMPL test data and get a few more documents to test.

I've decided not to do any custom exception handling. This seems appropriate since the parser will be consumed as a component in other custom applications. So, I'm not going to wrap exceptions from Chronos in some kind of OPMLParser exception.

I'm planning to release the OPML parser as OSS and put it in SqueakSource. I'm not entirely sure how to do that or if I'm even doing my work "correctly", but we'll figure it out. You and me. Together. Love ya', Mr. Internet.


Superbug blows up your defenses

It's news like this about these "superbug" type microbes that put me in a philosophical tail spin. It goes something like this - if superbug's are caused by microbes that have acquired an immunity to antibiotics (or antivirals), then should we be using the drugs? Do/did we know what we are doing by using them or are we just taking stabs in the dark to try and treat causes we don't understand? If so, then what else are we doing that we don't understand the long term effect of? We have plenty of hindsight about stupid things we (as humans) have done in the past. What will be the hindsight in 50 years about what we're doing now?

It's about this point where I start thinking about my happy place and fight the urge to put my thumb in my mouth.


Innovative Ham Soda

My friend Thanh was complaining that there have been no innovations in candy for decades. He contends it's a pretty boring food group. He also says that the Asian companies lead the pack in candy innovation.

Well, Thanh, check out the ham soda story on CNN...


Finally found a useful Vista widget

In my current role I have to interact with people around the world on a daily basis. I’m usually wondering what time it is in their particular area of the world. I was using a nifty world clock widget for the Yahoo widget engine. I’ve recently received a new laptop running Vista, and I’m trying to stay pure and avoid installing applications that I don’t absolutely need. So, I decided I would use Vista sidebar for my widgets. Today I found a great world time widget from WORLDTIMESERVER.COM. There’s also a 12-hour version of the widget, if you can’t handle the 24 hour dial.



Chronos Date/Time Library - the answer for my RFC822 needs?

I just found the Chronos Date/Time Library for Smalltalk. According to the site:

Chronos is a reusable code library, written in Smalltalk, for the
creation of and computations with date and time values. It provides classes to
represent and perform computations with point-in-time values, temporal extents
(durations of time) and temporal intervals (specific periods of time, such as
the quarter from 15 July 2005 through 14 October 2005.) Chronos implements the ANSI-Smalltalk Standard DateAndTime, DateAndTimeFactory,
Duration and DurationFactory protocols.

Provides very flexible parsing of dates, times and date-and-time values from
character data--including full support for ISO 8601, RFC 2822, time zone names,
time zone abbreviations and time zone offsets.

Nice! I will be giving this a try as time permits. There is a Squeak port!


Parsing OPML in Squeak

I started writing an OPML parser in Smalltalk using Squeak and YAXO this weekend. At the risk of sounding like a Squeak/Smalltalk fanboy, I was once again left with a warm afterglow. I had a blast and I was able to write most of it in a couple of hours. The only part that I have unfinished is taking an RFC822 date and parsing it into an internal date. (Anyone have Smalltalk code? Anyone?)

I decided to write an OPML parser because I:
  1. Wanted to play more with Smalltalk.
  2. Wanted to play with parsing XML in Smalltalk.
  3. Had written an OPML parser in Common Lisp and wanted to compare.

So, I hate to say it, but I like my Smalltalk version better than my Common Lisp version. When I compare the code between the two, the Smalltalk version is much easier to follow. I think the key difference is that in Smalltalk I focused on the data structures (objects) and not on the algorithms (parsing and populating). Even though I used an XML parser in both languages (XMLS for Lisp), in Lisp there's alot of code around populating my object model. Not sure why the difference. Maybe the slot accessor syntax vs. method syntax?

Does this mean I love Smalltalk more than Lisp. No. But, I think it means I'm starting to love them both.


Ubuntu Upgrade is like Butter

I just upgraded a VMWare image from Fiesty Fawn to Gusty Gibbon (7.04 -> 7.10). I used the prescribed upgrade method. Everything went smoothly. The only hitch was that my scroll wheel on my mouse wasn’t working. Thanks to this thread on the VMWare forum, I was able to get it working. Like the others, I suspect that the problems are due to VMWare and will be addressed in a future VMWare tools update.

The Canonical guys are making running a Debian based Linux too easy. I’m going to have to give up my Captain Kernel Patch secret decoder ring.

Update 11/11/2007: I changed the labels on this post because I didn't follow the rules and put commas in between the labels. This makes it look like one big label and me look like one big idiot.


The social networking time suck

Maxed out on social software is a great post from Nat Torkington about the benefits of social networking software and the amount of time it takes to maintain your personal connections. There are some great comments on the post as well.

Email is Organic

One of the things that I’m not sure everyone appreciates is that email is a de facto part of modern collaboration. I’m sure for many people, this goes without saying. However, there is a vocal minority who find email to be a distraction, a poor substitute for vocal communication, a poor form of written communication, or a poor substitute for a discussion board in a content management system somewhere. Sure, it’s all of that. But, it’s more than that too. It’s an organic form of collaboration.

If you think about email in terms of starting discussion threads, you soon realize that most of your attempts to start a discussion are failures or minimally successful. You could judge this by the number of back and forth responses in any particular thread. Most email pings one or more people, gets a response, and dies. The communication value is high, but the collaboration value is low.

However, once in a while you hit a jackpot. A back and forth flurry of emails from a wide variety of participants with input from various perspectives. In these instances, the communication value is secondary to the collaboration value. Moreover, you’ve experienced an organic form of collaboration where you didn’t have to establish a topic in a discussion board, wait for responses, perhaps deal with a moderator, etc. Email has provided you with a rapid, organic collaboration experience.

Additionally, email allows you to collaborate on different levels. There are times when your collaboration is through the substance of the text you are sending one another. There are other times when the collaboration is through versions of files being sent back and forth. There are even times when email becomes a substitute for RSS or alerts to let the collaboration participants know you’ve updated a web site or another collaboration medium.

Finally, email is good at keeping history. Each message is a snapshot in time. For example, when I need to go back to a more successful version of the cabbage soup recipe I’m sharing with my friends, I can easily look up the version I sent last Thursday.

So, don’t hate your email. Let’s embrace it for the rapid, organic collaboration medium that it is.

Back to blogging

I’ve decided to try to take up blogging more frequently again. I’ve got some reasons – the primary one being that I need to get back in the habit of writing. It’s painful now when I sit down to write anything other than an email. So, I’m hoping that I can at least get back into the swing of writing something more formal than an email but less formal than a document. We’ll see.

What have I been up to? As a previous post mentioned, Carey and I had another child who’s now a year and a half old. We built and moved into a wonderful new house. I received a new assignment at work that has challenged me like none of my previous experience. So, it’s been a busy couple of years.

On a technical front – I’ve joined the Enterprise Content Management practice at Hitachi Consulting (not a new job, just a new practice for me), I’ve been learning Smalltalk and lovin’ it, I’ve built a Rails application for a friend, and I’ve started learning ASP.NET/C# as part of a charitable project. Again, busy couple of years.

So, I’m back and I’m pledging to post more frequently. I also hope to achieve new levels of relevance through a series of pithy observations… well… maybe I’ll just post more frequently. J


Netbeans as a Rails IDE

Jon mentioned to me the other day that Netbeans 6 is including Rails support. I put it on my list of things to check out. I just did a quick Google and found a great blog post with lots of purdy pitchures at the Life on Rails blog.

I'm going to have to get me some NetBeans.

Also, kudos to Sun for keeping NetBeans alive. You could have clearly given up as you were Eclipsed. I'm wondering if NetBeans 6 isn't a lesson in "try, try again" and "hold on tight to your dreams".


Note Studio Ceased

I was catching up on some blog reading today and came across the announcement that Dogmelon will no longer produce Note Studio. This really bums me out. Note Studio has been my tool of choice for GtD kung fu for the last few years. I try others, but the personal wiki draws me back. I've loved that I can sync it with my Palm and have everything with me. I've even done my weekly review on an airplane before.

I understand their reasons. I'm sure it's tough balancing products, financial considerations, and personal interests as a small (micro?) ISV. I don't fault them for their decision at all. I think they handled the announcement reasonably well too.

So, as a final send off I have to say thanks to the Dogmelon team. Their tool along with Volker Kurz's GtD templates helped me find my personal GtD style. Thanks a million, guys!



My latest programming fetish is turning out to be Squeak. Squeak is a Smalltalk environment that provides a unique UI interface called Morphic. Although there are many educational uses for Squeak, it's a full-fledged, grown-up Smalltalk environment.

What drew me to Squeak? I had been hearing about Squeak for years. Occasionally I'd download it, click around, and say things like, "Wow, this is weird." or "This looks like a cartoon." or "This must be for kids." Every time I looked at it, my curiosity would grow. Finally, the last time I downloaded it, I felt like I was being led to learn why everyone thought it was so great.

One of the first things that slaps you in the face is how different it is to interact with Morphic. It is an interface that is immediately usable, but it takes a bit to get used to it. Everything that is visual in Morphic is a Morph, which means you can interact with it, inspect it, embed it in other Morphs, etc. Although this gives the entire system a very layered and consistent feeling, it was something that I didn't know if I really liked. I mean, I'm the kind of programmer that prefers Emacs!

I decided I needed to dedicate some time to it and not blow it off as I had so many times before. Boy, am I glad I did. It's been 3 weeks or so now, and I'm growing extremely fond of Squeak. I have worked through some of the tutorials on Morphic programming. I've also played around with some of the Morphic direct programming using Viewers and scripts. I've been studying code and extended FileList2 to allow tagging files and storing the results with SPrevayler. I've been having lots of fun.

That brings me to what is continuing to pull me into Squeakland. I'm having fun. Squeak is just fun to use and hack around in. It makes me feel creative because not only can I code up things easily, but, thanks to Morphic, I can decorate my projects and workspaces with pictures, text, drawings, etc. In fact, I could use those same elements in my Morphic applications. It just makes me feel like anything is possible and that I'm some mad, creative inventor in my little virtual lab.

Thank you Squeak team.



I'm on a much needed vacation this week. It should be fun. We're going
to Tennessee for a family reunion. My wife's family is getting together
in Gatlinburg next weekend. Leading up to that, we'll be in Cleveland,
TN staying with my in-laws.

I'm anxious to leave the flat urban area of Dallas and see some hills
and trees again. It's fun going back to TN and seeing everything we
used to take for granted. It's like we're looking at it with a fresh
set of eyes.

We're all getting excited. My daughter is anxious to see Nana and
Gran. So are my wife and I.


20/20: Top 20 Programming Lessons

I just came across "20/20: Top 20 Programming Lessons I've Learned in 20 Years" by Jonathan Danylko. This is a great list and very timely as I've been having the DesignPatternsConsideredHarmful discussion with my friend Jon. Also, as a reminder:

Updated 07/16/2007: Had the wrong link for the article. Thanks for the update Jonathan!