Older blog entries for robocoder (starting at number 314)

Random thoughts for the day

One of the nice things about open source software is the high reuse factor, especially for libraries. Leveraging 3rd party code can pay off -- invest a little time to integrate, and save yourself the effort of building similar functionality from scratch. Of course there's a tradeoff: higher maintenance, whether it be re-integrating when an API changes, tracking down & fixing a bug that isn't fixed upstream, or simply regression testing the latest "stable" release (or bleeding edge from the trunk, as the case may be).

So, I'm updating jQuery and its various plugins on Piwik (an open source analytics platform, the successor to phpMyVisites), and I've settled on the following kitchen rules:

  • GATHER ESSENTIAL INGREDIENTS: set-up a test environment where you can run the trunk (or latest release) and this branch, side by side; use the latest browsers; for Firefox, get the Web Developer add-on
  • READ THE RECIPE: read the Changelog or CHANGES ... otherwise, fallback to the source
  • SEASON TO TASTE: forward port any local customizations that you know of (assuming you kept track of version numbers or copies of the original code)
  • MIX AND BAKE: plug it in and see what breaks (learn from this and add more automated tests)
  • DECORATE: patch as necessary with liberal sprinkling of diff or meld

Arguably, it's only necessary to develop and test with the latest browsers. If someone opens a ticket wrt an older browser and it isn't reproduceable with the latest browser, you can:

  • Let it languish in the bug tracker until either someone else fixes it or no one really cares about supporting that browser anymore.
  • Close it as WONTFIX and instruct the reporter to update their browser.
  • Or actually fix it, hoping someone else has already run into this problem and blogged about it. ;)

It's also debateable whether a project should sync up 3rd party libraries. Some reasons not to:

  • plan to replace that library
  • too many local customizations (either didn't make it upstream or were rejected) to warrant continuous reintegration
  • further development/maintenace on the library appears to have stalled
  • the latest and greatest (notably, frameworks) is increasingly bloated, and you only depend on an ever smaller, tiny fraction of the code

On the topic of browsers, I'm debating whether or not to add Chrome to my list of browsers for UI testing. I have no plans to add SeaMonkey. I've already dropped Konqueror 3.5.x and 4.1.x from my desktop, in anticipation of 4.2 in a few weeks.

The iPhone's interface may be too intuitive. My 2 y.o. picked up my phone, pressed the home button, slid her finger (i.e., passlocked), and pressed the "keys". I'm glad I don't have the "erase after 10 failed attempts" ... in the meantime, my iPhone is disabled for the next hour ... =P

Now I remember why we didn't move these websites sooner -- some scripts depended on CPAN modules that aren't installed on the servers from our hosting provider. Anyway, other than a few minor hiccups (e.g., hardcoded absolute paths buried in a php script), the sites are up ... and running (for the most part).

Tomorrow: install Ubuntu on the web server (was Red Hat), and set-up a couple of Piwik environments.

I'm in IT administration mode today. It's time to take care of some long deferred tasks, or face putting them on next year's list of New Year Resolutions.

  • Move all remaining public facing websites to externally hosted green web servers.
  • Update the OS on our in-house web server and dedicate it to development and staging.
  • Update DNS entries for what's being moved, shelved (redirect), or monetized.
Tis the season...
20 Sep 2008 (updated 20 Sep 2008 at 12:59 UTC) »

With all the attention on benchmarking the performance of next generation Javascript engines -- Google's V8 vs Mozilla's TraceMonkey vs WebKits's SquirrelFish Extreme -- I'll point out that Wine folks have been steadily making advances on their jscript.dll implementation based on SpiderMonkey. The implication is that we'll see Javascript executing faster in Wine than native on Windows. LOL.

CAPTCHAs as a usability improvement? As a defense against automated attempts to harvest our MLS database (e.g., screen scraping), our MLS now uses reCAPTCHA So instead of being booted off the system (and redo'ing whatever it was you were in the middle of), you'll be prompted to enter the two words shown.

In the upgrade to Ubuntu Hardy, users began complaining when Nautilus no longer preserved a file's timestamp when copied.

After protracted debate about "the right way" and rationalizing "that's how cp works" -- whether right or wrong -- Nautilus developers listened to the users and pushed out a fix.

A new File Management Preference (under the "Behaviors" tab) would have been my preference, but that's just me...

4 May 2008 (updated 4 May 2008 at 06:01 UTC) »

Ran into a weird bug (applies to Apache httpd 1.3.39 and 2.0.40 -- not sure about later 1.x and 2.0.x releases -- but certainly doesn't apply to 2.2.8, where it appears to work correctly) where mod_rewrite exposes the absolute path in the redirect (which then fails).

In a subdirectory off my web root (and root of a virtual host), I have a .htaccess file:

RewriteEngine On
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^anthonpang\.com [NC]
RewriteRule (.*) http://anthonpang.com/$1 [R,L]

The URL (yes, I left off the trailing slash):


Mysteriously becomes:


I say mysterious, because the behaviour depends on the domain I use in RewriteRule. For example, anthonpang.ca does get rewritten correctly.

That said, it's probably "minor" as I don't expect to publish or link to the subdirectory-based URL when this goes "live".

30 Apr 2008 (updated 1 May 2008 at 15:48 UTC) »

Thanks sneakums. My bad. DomainKeys != DKIM. I'm amending my previous blog comment as follows:

DomainKeys is dead. Long live DKIM (Domain Keys Identified Mail).
Oh goody...it looks like cpanel does have support for setting up DKIM. I'll have to ask my hosting provider if it's available on shared hosting accounts.
24 Apr 2008 (updated 24 Apr 2008 at 02:59 UTC) »

Taking a page from the domain cybersquatter playbook, I registered typos of my name, Anthon -- because the 'h' is silent. But rather than a simple redirect or creating a CNAME, I threw up some single page web sites, ala Wikipedia dab pages: Anton Pang.com and Anton Pang.ca. I also embedded a little analytics tracking code, so I could gauge the utility (or futility, as the case may be) of this exercise. (The self-deprecating reference to typo-squatting is in jest.)

I can't say this was a welcome/needed distraction, given everything else on my plate, but this was "low hanging fruit", so to speak, and I needed to feel like I accomplished something today.

305 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!