New Design: Xīnnián

With the arrival of Chinese New Year, I decided to make another design based on Zen and called it "Xīnnián." Xīnnián is Chinese for "new year" (新年), which is approximately pronounced "shin'nien" for those unfamiliar with Pinyin. Read on for explanations of various Chinese characters featured in this design.

5 Great, New Features in Drupal 6

With the release of Drupal 6 around the horizon, I made a presentation (as part of GHOP) that (attractively) outlines 5 new features in Drupal 6 that I deemed "awesome".

The following features are outlined:

  1. OpenID support
  2. Module update status
  3. Improved usability
  4. Alias filtering
  5. Internationalization

Get the presentation.

Comparison of CCK/Taxonomy Modules in Drupal

This is a cross-posting from a handbook page I wrote on It may or may not accurately reflect the latest revision; for the latest revision, please view the original handbook page.

"There is more than one way to do it." This philosophy isn’t limited to Perl; it generally extends to open source software itself. Likewise, there are four modules that are intended to integrate taxonomy fields into the Content Construction Kit (CCK) for Drupal; these modules have been identified to have similar or overlapping functionality. Below is a list of the 4 modules.

  • Content Taxonomy (content_taxonomy)
  • CCK Taxonomy Fields (cck_taxonomy)
  • Taxonomy Super Select (taxonomy_super_select)
  • CCK Taxonomy Super Select Ultra (cck_taxonomy_ssu)

This document serves to compare and contrast these modules in order to make it easier for site owners to choose one to suit their site development needs. The following issues are addressed for each module:

  • ease of installation and ease of use
  • list of any dependencies or companion modules associated with each module (CCK, Taxonomy, Views, API modules, externally hosted code, etc.)
  • features and functionality
  • pros and cons
  • list of access permissions
  • evaluation of the documentation/handbook (if any)
  • status of the most stable release (development, alpha, beta, official)
  • if it is still in development, an evaluation for its potential for successful completion
  • a brief examination of the its issue queues for any glaring or recurring problems

Spellify: How Not To Use Prototype

About two and a half weeks ago I wrote about jQuery being underutilized. That's nothing compared to Spellify, the absolutely perfect and horrendous example of how grossly unutilized Prototype is. Read on.

Flayout: Flexible Degrading Layout

Some time ago, I read an article that described a smart dynamic layout mechanism for web pages that would gradually hide and collapse certain elements of the page as the browser window is resized. Unfortunately I can no longer find the article (I'd appreciate it if someone points out where it is), but I thought the idea was great. In this era of awesome JavaScript libraries, it's trivially easy to implement this mechanism. So I took the liberty to do just that on this site.

On a resize event, it would check the viewport width and height, and, depending on what range it falls in, it would hide or collapse elements accordingly, gracefully degrading the layout. A technique that I dubbed "intelligent switching" was used to determine which range the width and height falls in, elegantly. To me, that means not resorting to a chain of if statements. I'll talk about intelligent switching in another article, but for now, below is the list of ranges and what happens when the viewport dimensions fall in that range.

When Width Is Below (px) This Happens
875 Right sidebar disappears.
700 Service links disappear.
550 Pine trunk on the right collapses. The navigation and breadcrumb bars disappear.
When Height Is Below (px) This Happens
500 Breadcrumb bar disappears. Navigation bar shortens and floats to top right. Header region collapses.

When the viewport dimensions move out of range the changes reverse. Flayout is working right now, live on this site, so try it out and see for yourself how it works. This has been tested and known to work under Firefox, Opera and Safari, and it isn't working under Internet Explorer, yet. I have yet to debug this under Internet Explorer. Someday, I'll do it.

Chyrp: How Not To Use jQuery

Chyrp, a recently dugg blogging system, looks like a very good and clean blogging system. I strongly agree with Alex's (the author) philosophy about Ajax: no overajaxifying.

Because we've all seen AJAX abused too many times, Chyrp is made to use it only where it works good. For example, creating a new post uses AJAX, because it's already definite where it's going to end up (the content, with all the other posts [unless you made it a draft, in which case it goes in to "Your Drafts" and tells you so]). However, for creating a page it uses regular old form submitting. This is because pages are meant to be their own section of the website. There's no point in having it fade in to the content or do anything fancy, because you'll end up going to its own page anyway.

Chyrp uses jQuery; a good choice. Inferring from most of the Ajax-pushing code, I can see that Alex has made the JavaScript as clean as possible. There are still some room for improvement, however, as seen in this:

Ruby Enumerable and Array Extras: pluck and invoke for Ruby

The Prototype JavaScript Framework has almost all of the Array and Enumerable extensions that Ruby has, but the reverse doesn't seem to be true. One thing apparently missing from Ruby is pluck() (or invoke()). Picture the following scenario in Prototype JavaScript:

Portal Santa Sign

Valve recently posted a new video on, featuring a "holiday vault" that showed the weighted companion cube wearing a Santa hat sitting beside a cake in front of a fireplace. Since a picture is worth a thousand words - I can go on and on to describe the vault - you should see the screenshot below.

Anyhow, there's enough stuff to let your eyes feast upon in the holiday vault. What really struck my interest was the sign right above the fireplace, where a gnome is also staring into your eyes. Anyone who's played Portal (or seen it) should be familiar of the various signs and logos present in each testing chamber (see right), denoting what puzzles and hazards are in the chamber. The sign above the fireplace is a humorous self-parody of the testing chamber signs and Santa Claus running down the chimney. Because of this, I've decided to recreate the sign in Inkscape, polishing my vector path editing skills along the way.

The SVG source is also available.

Synthetic Division Heavylifter

Synthetic Division Heavylifter is a tool available in JavaScript, Python, Ruby, and Common Lisp that performs synthetic division. Synthetic division is a process that is used to speed up the factoring of polynomials. However, it is still a hassle to utilize when the first term or the last term of the polynomial has a large number of factors, since the possible number factor candidates would increase.

New Version of Gmail Is Slower?

There has been several reports mentioning how slow the new Gmail is. In all cases, the problem seems to be cross browser, and of course, cross platform.

Strangely, in my own case, the new Gmail was not slow at all. In fact, it was so fast that I was surprised. It was then when I noticed subtle changes like the custom drop-down list, narrower message rows, the new position of the "Loading..." message, and the "Older Version" link. It even kindly reminded me that Firebug slows Gmail down, and, to fix it, I should disable Firebug for

Syndicate content