Misc Technology

When did Linux become mainstream?

I read an “article on”: which talks about perceived changes in the culture of It blames the widespread adoption of Linux as the culprit which shooed away the hard-core geeks from the site. Of course Linux adoption was a slow, gradual process brought out by a series of events in the computer world. The article gives several examples including IBM embracing Linux at the LinuxWorld Conference & Expo in 2001 and a congressman from Venezuela telling Microsoft to drag its underhanded business practices elsewhere because he was going to adopt Linux for use in his country.

I personally think the shift started back during the United States vs. Microsoft case. I can’t remember, but I think it was Ballmer who stated, “We’re not a monopoly, because there’s that Linux thing.” Well, that statement unleashed the curiosity of the American media, gave Linux plenty of free press on national television, and launched it into the mainstream.

Why? Linux had been around for almost a decade, existing only as source code passed around the Internet between only the most hard-core of geeks. But now Aunt Helen, located in a little town somewhere in the Corn Belt of America, found out about Linux by watching Fox News even before she was able to get broadband.

This is one of the few times I will say, “Thank you, Microsoft”.

Geek How-To Technology

Setup MarsEdit with Quills 0.9 Final

I have been wanting to find a better way to write blogs rather than using the Plone interface. I was happy to find that MarsEdit and Quills both implement several blog APIs. Though it would appear that the implementation for both the BloggerAPI and the MetaWeblogAPI are not complete, MarsEdit can still be used to post articles using the BloggerAPI.

Here are examples of necessary configuration:

Name: MyBlog
Home URL:
Software: Other Blogger-compatible
Blog ID: weblog.2006-01-10.2395214781

The tricky part is obtaining the Blog ID. Plone uses an immutable identifier for all objects so that they can be found even after renaming them. Quills in turn uses this ID to get at your weblog object.

In order get this ID you’ll need to login to your Zope Management Interface (ZMI) and go digging through the uid_catalog in Plone. When you have clicked on the catalog object, click on the tab labeled Catalog. Find your blog object in the list of results and click on its link.

Search on the resulting popup page for the key named UID. The value of this key is what you will need to use for the Blog ID.

Note: Because of errors in the implementation of the MetaWeblog API, you will see a Zope error after posting, however the post will be correctly saved.

Design Patterns Programming

Design Patterns – The Decorator

Tonight was the second night of my design patterns meeting I hold with some friends from work. Most of us already had the book Head First Design Patterns by O’Reilly Publishing, but never made the time to go through it. Jennifer was the one who came up with the idea to start having a meeting every two weeks and we all agreed that it was a good idea.

We’re currently working on our format, but so far have settled on one person being the ‘teacher’ for the evening. This person is responsible for presenting the highlights of the chapter to everyone even though we have all read it. After they are finished presenting, we then go around the table and share our ideas on how the pattern could be used at work or on personal projects.

Tonight we discussed the Decorator Pattern. Here were my solutions:

Recipe card

In this design, the recipe card is the base object and the decorators are ingredients. As per the design, ingredients would be stacked up to create the ingredient list. Here’s a rough cut at the class diagram.


click to view a larger image

Some of the interesting characteristics of recipes is that they often have to be scaled (eg, from 4 to 12 persons) or translated to another type of measurement (eg, metric/english). This functionality can easily be added down at the ingredient level. The different ingredients could also have superclasses based on their type – liquid, solid, etc. This makes it easy to separate scaling and measurement translation as necessary.

Invoice discounts

In this example the base object is an invoice and the decorators would be different types of discounts or rebates. This would allow a sales team to be creative with the types of discounts given to a particular client.

Discount objects could be applied to different products, plus you have them expire at certain times (free for 3 months), also be percentages or flat dollar amounts.

Next time I’m presenting the Command Pattern.

How-To Technology

Added AdSense by Google

One thing that I like about Google is that they make things easy.

One thing that I like about Plone and Zope is that they make things easy.

In about an hour or two, I managed to put AdSense ads on my web site.

Go to and sign up for your account. Click on all of the emails to activate your account. Log in and grab your AdSense code.

Add a portlet to your custom area in Plone. Paste Google’s AdSense code in the body of your portlet.

Add portlet to your root Plone @right_slots@ property. Refresh your browser to see your Google ads.

h3. Resources

  • “Plone book errata”:
    This webpage has an Google AdSense portlet example in ZPT. Search for “Page Template: google_ad_portlet”
  • “ : A webpage with an example Page Template used to create a portlet”:
  • “ – how to control portlets”:
    A website which has instructions on properties which control portlet activation.
Photography Reviews

New Canon Digital Rebel XT

There is a huge difference moving from a low-end digital camera to a digital SLR – and it feels really good!

Last week I received my Canon Digital Rebel XT from Dell. It’s my third digital camera in 6 years and I’ll say I’m happy again to have come back to an SLR with real lenses.

For the past week I’ve been taking photos around my apartment and outside just to get used to it and its controls. So far I have shot around 700 photos.

Here are the top reasons why I chose the Digital Rebel XT:

  • (almost) instant on
  • real lenses (SLR)
  • low shutter lag
  • highly rated
  • upset at Nikon’s decision to lock down their RAW format

I looked through many of my old photos taken with my Kodak DC240 and Nikon 4500. I saw that many of them were unusable for these following reasons:

  • slow focusing (missed photo)
  • shutter lag (missed photo)
  • slow boot up time (missed photo)
  • difficult manual focusing (blurry photo)

Also there are some features of the camera which have pleasantly surprised me:

  • the battery life !! (350 photos)
  • speed of autofocus (fast)
  • flash range (really far)

I have no regrets at all buying this camera. All of the previously mentioned issues I had with my other cameras are now a thing of the past. I feel like a have a real tool in my hands. The experience has been very very liberating.

Thanks Canon!