Skip to main content


Showing posts from November, 2006

Blogger: New Template

I just picked a new template for this blog. Reading Ian Bicking's blog , I learned that fixed width columns are like totally uncool. Hence, I picked something that flowed to the page width. If this new look pisses you off, I can change it back. If there's anything you see missing, please tell me. Otherwise, tell me if you like the new template. It's the one that irritated me the least.

Linux: Internet Explorer on Linux Using a Separate User Account

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 instruction

JavaScript: Douglas Crockford Video

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.

MySQL: Deleting Orphans

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: DELETE tag_article_map FROM tag_article_map LEFT JOIN tags ON tag_article_map.tag_id = tags.tag_id WHERE tags.tag_id IS NULL; References:

Books: Building Scalable Web Sites

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 wh

Vim: More Vim Tidbits

I reread "vimtutor" for the first time in years. I learned a few things: e "e" is a motion that means "to the end of the word". "ce" is useful. /searchterm<enter>nN When searching, "n" to search forward, "N" to go backwards. Start with "?" to aways go backwards. I had forgotten about "N". :#,#s/old/new/g Do a search and replace only between two line numbers. :%s/old/new/gc Do a search and replace with prompts. :r !shellcommand Execute a shell command and insert the results at the cursor. R This is over-write mode. partial-command^D<tab> Show possible command completions, then tab to complete. evim gvim in "easy" mode. In the Vim tutorial, there's a mention of "$VIMRUNTIME/vimrc_example.vim" which I had never seen before. This helped me to improve my own .vimrc: " These are general settings. colorscheme torte set autoindent set guifont=Monospace\ 9 set h

Scalability: The Scaling Myth

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]