Wednesday, November 29, 2006

I saw an email from a recruiter at Yahoo on the BayPiggies list today. He's looking for a Web developer, "We have deployed several applications using Cheetah templates and the Aquarium framework." I wrote Aquarium, so you can imagine how cool this is for me to see!

My library provides free access to Rosetta Stone which I wanted my kids to be able to use to learn Spanish. Rosetta Stone requires Shockwave which doesn't run under Linux like Flash does. The Ubuntu wiki offers some instructions on how to get it to work under Wine using a Windows version of Firefox. Alternatively, CrossOver Linux specifically supports Shockwave.

Unfortunately, neither of these options worked out for me on either of my laptops or in either Ubuntu 6.10 or Ubuntu 6.06. I was having weird X issues with both Wine and CrossOver Linux on my home machine. A bit of Googling suggested that the problem had not been fixed. My work machine wasn't being very cooperative either. In trying all the possible combinations of ways to get this to work, I wasted two days of my Thanksgiving vacation. I was really hoping that patience would lead to victory. Oh well, at least I upgraded my home laptop to Ubuntu 6.10 in the process.

There were some really nice instructions here about how to get IE to run under Linux. Since this would be useful to me as a Web developer, I decided to try it out. It worked really well. I even managed to get the Shockwave plugin working in IE--more on that in a bit.

It was late at night, so I went to bed. Having just installed IE, and since I'm pretty obsessive compulsive, I felt really dirty. In fact, I had nightmares all night. The next morning, I checked, and sure enough, IE had full access to all my files. I was hoping it was in some sort of Wine jail. I decided to wipe my entire home directory and restore it from backup. I felt better already! However, I still wanted access to IE. I decided to dedicate a user account just for IE. In order to access IE, I setup ssh with X11 forwarding so that I could run it while logged in as "jj" even though it's actually running as the "ie" user. Here's how:

First, I created a user using the "Users and Groups" system administration tool. I named it "ie". I saved the password. I used an unprivileged profile, although I did grant the user the "Use audio devices" privilege. I made sure that it had its own group named "ie".

Next, I did:

apt-get install wineapt-get install cabextract

Then, as "jj", I installed my public ssh key into the "ie" account. If you don't know what I'm talking about, you can skip this step.

Then, per the instructions in the link above, as the "ie" user, I did:

This installs into ~/.ies4linux. To run it, you use "/home/ie/.ies4linux/bin/ie6".

Then, as "jj", I did:

cp /home/ie/Desktop/IE6.0.desktop ~/Desktop

I modified it so that the Exec line says:

Exec=ssh -Y ie@localhost /home/ie/.ies4linux/bin/ie6

This gave me a nice little icon to click on to launch IE without even thinking about the fact that it's running as a separate user.

Next, in IE, I installed the Shockwave Player. I had to play with the security settings in IE's "Tools >> Internet Options >> Security" to get permission to do it. Not being a Windows user for almost a decade, this was all new to me.

After all that, it turns out that Rosetta Stone still wouldn't work. Sound didn't work in Shockwave, although it did work for the Flash plugin in IE. How frustrating! However, IE works now, and best of all, I don't feel dirty anymore!

Wednesday, November 15, 2006

Douglas Crockford is Yahoo!’s leading JavaScript Architect. He has written extensively on JavaScript and has been among the protagonists of the JavaScript developer community for more than a decade. Douglas is the discoverer of the JSON data format and a frequent contributor to YUIBlog.

I saw him give a talk at Yahoo's Hack Day, and it was amazing. The video is now available. Douglas provides an amazing historical perspective on JavaScript.

Tuesday, November 14, 2006

Referential integrity is a beautiful thing. Foreign key constraints are a godsend. However, sometimes, in certain situations you might have to get dirty and deal with orphans. Orphans are records that contain foreign key references to other records that don't exist anymore.

Suppose we have two tables, tags and article. Now suppose they have a many to many relationship via the tag_article_map table. Now, suppose for some unknown reason that someone deleted some tags from the tags table. We may now have orphans in the tag_article_map table. How do we delete them? Some special MySQL syntax makes it quite easy:

Imagine if Forrest Gump developed a famous Web site. Imagine if one day he sat down on a park bench to tell you how he did it. Now, imagine it with a strong English accent ;)

"Building Scalable Web Sites" is a virtual brain dump of everything technical that you need to know in order to build something like Flickr. (The author, Cal Henderson is the engineering manager for Flickr.) If you're a new engineer, it might be a godsend. If you're a more senior engineer with little time and less patience, it can be incredibly frustrating.

I found myself alternating between these two extremes. I was tearing my hair out when Cal spent five pages explaining what source control is and listing its basic features. I questioned relevance when Cal explained how to write an HTTP client from scratch in PHP (p. 143), and I was baffled when the very next section randomly jumped to the topic of "Remote Services Redundancy" (p. 145). On the other hand, I was grateful when Cal showed me how to use Ganglia as a wrapper for RRDTool to collect and graph application-specific metrics.

This book lacked O'Reilly's standard polish. For instance, in one code sample, the indentation didn't match the braces (p. 148). There's a simple typo, "abilityto" (p. 108), that shouldn't have made it past a spell checker, let alone an editor. It makes me wonder if O'Reilly was rushing this book out the door because Flickr is hot right now, or perhaps "translating" Cal's British English was burdensome on the editors.

In summary, about 30% of the material was new to me. I patiently marched through what I already knew, and I managed to learn a few new things, for which I'm thankful.

Friday, November 03, 2006

Scalability is not about using Java...We can create a scalable system in PHP that contains only one tier, no XML, no Java, and isn't even very fast:

<?php sleep(1); echo "Hello world!";?>

...It meets our three scalability criteria nicely. We can accommodate traffic growth by adding more web servers; nothing in the code needs to be changed...Our code is also very maintainable; there's not a trained programmer out there who couldn't figure out how to maintain it--for instance, if we needed to change it to say "Hello there". ["Building Scalable Web Sites" p. 203]