<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12249734</id><updated>2011-07-31T01:02:21.199-07:00</updated><category term='iphone'/><category term='mysql'/><title type='text'>The Other Eighty Percent</title><subtitle type='html'>Another boring blog by another boring software engineer.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.pattern.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12249734.post-4831887628177335063</id><published>2009-03-14T23:38:00.000-07:00</published><updated>2009-03-15T13:07:50.528-07:00</updated><title type='text'>I don't get Building 43</title><content type='html'>I don't get the point of Building 43.  Well, I get that it is a video outlet for Robert Scoble, but what I really don't get is what Rackspace gets from it.  I mean, they get a popular blogger/web video guy promoting their brand, to some degree, but is it really going to drive new business for them?  Rackspace's big thing is their awesome support, which comes at a price.  Will watching a video of Scoble interview some guy from marketing at Random Dotcom, Inc make anyone decide they really do need the fanatical support that Rackspace brings?&lt;br /&gt;&lt;br /&gt;Maybe I would better get it if there was actual content on the site.  Yeah, another vaporware soft-launch.  This is to me the big sign there isn't quite yet a there there and that the endeavor is more about hype and buzz than real content.  Why get the blogosphere in a big tizzy before you have real content to go with the name?&lt;br /&gt;&lt;br /&gt;And wow, the name.  Doesn't Rackspace have some interesting name they could use rather than steal a name from Google?  What is it really supposed to mean?  Ignoring the N thousand mildly amused Google employees who might get the name (many of whom won't really associate anything special with building 43), and a handful of visitors, it pretty much will always need to be explained.&lt;br /&gt;&lt;br /&gt;So, I don't get it.  It just doesn't work at any level for me.  But hey, good luck, Robert and Rackspace.  Hopefully something cool will come from it.  But I suspect it will either be boring or just blatant advertising, and that's a shame.&lt;br /&gt;&lt;br /&gt;(oh yeah, this blog isn't dead... it's just been resting, pining for the fjords and all that)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-4831887628177335063?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.techcrunch.com/2009/03/14/scobles-new-thing-building-43/' title='I don&apos;t get Building 43'/><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/4831887628177335063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=4831887628177335063' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/4831887628177335063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/4831887628177335063'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2009/03/i-dont-get-building-43.html' title='I don&apos;t get Building 43'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-8897811775032984585</id><published>2007-07-25T21:06:00.000-07:00</published><updated>2007-07-26T20:39:56.794-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>How well does your MySQL survive power loss?</title><content type='html'>The huge power outage at 365, affecting such sites as &lt;a href="http://craigslist.org"&gt;craigslist.org&lt;/a&gt; and &lt;a href="http://www.yelp.com"&gt;Yelp&lt;/a&gt;, brings to mind some important thoughts about redundancy and infrastructure.  Of the many sites at 365, including both new, interesting startups and more mature sites, how many survived the power outage well?  More importantly, did they lose power on their databases, and then did they lose any data?&lt;br /&gt;&lt;br /&gt;It's easy to believe in your provider when they assure you of uptime, redundant power, excellent cooling, and whatever else they promise to get your business.  But you really shouldn't, and this is an example of why.  You must have multiple sites!  Preferably geographically diverse (nothing hurts like an earthquake or hurricane taking out your main data center &lt;span style="font-weight:bold;"&gt;and&lt;/span&gt; your redundant data center at the same time).&lt;br /&gt;&lt;br /&gt;MySQL, sadly, is not a durable database when it comes to power outages. I've heard from more than one person affected by the 365 incident and, consistent with my own experience, MySQL does not handle sudden power outages well.  Even with state of the art SCSI controllers with expensive battery-backed write buffering, MySQL can toss it all to the wind, especially when replication is involved.  Innodb itself is fairly hardened, but when, for instance, replication state does not match innodb's state (because, sadly, MySQL stores replication information non-transactionally in a separate file), you may have to skip statements.  Or maybe you use myisam -- now you have to repair your tables, which takes time.  Even innodb can take time to come back from a crash, particularly if you use a large buffer.&lt;br /&gt;&lt;br /&gt;So, how well will your database handle a power outage?  The 365 outage sucked, but in the grand scheme of things, it could have been a lot worse.  If your primary data center lost power for 72+ hours, how well would your business function?  Plan ahead!  Get those backups and replicas off-site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-8897811775032984585?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://news.google.com/news?ie=UTF-8&amp;oe=utf-8&amp;rls=org.mozilla:en-US:official&amp;client=firefox-a&amp;tab=wn&amp;ncl=1118511167&amp;hl=en' title='How well does your MySQL survive power loss?'/><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/8897811775032984585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=8897811775032984585' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/8897811775032984585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/8897811775032984585'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2007/07/how-well-does-your-mysql-survive-power.html' title='How well does your MySQL survive power loss?'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-8416312714816249318</id><published>2007-06-30T14:54:00.000-07:00</published><updated>2007-06-30T15:14:32.732-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>iPhone Experience</title><content type='html'>So, I got myself an iPhone.  Pretty predictable to anyone who knows me or reads this rarely updated blog.  I had pretty high expectations going into it, and a pretty good idea of what to expect, and I wasn't disappointed.  I'll leave it to other &lt;a href="http://www.scripting.com/"&gt;bloggers&lt;/a&gt;, &lt;a href="http://forums.macrumors.com/forumdisplay.php?f=99"&gt;posters&lt;/a&gt;, and &lt;a href="http://www.arstechnica.com"&gt;websites&lt;/a&gt; to detail owning and using the actual device.&lt;br /&gt;&lt;br /&gt;I'm more interested in the experience around the launch.  I admit, I was lame and had a feeling supplies wouldn't be scarce, so I waited til around 9PM to go to the Palo Alto "flagship" Apple retail store and, sure enough, spent 30 minutes finding parking and 10 minutes in line and purchasing the actual device.  So, nothing really exciting there.  I did enjoy talking with coworkers who were online whilst inline (not much to do when you're in line at an Apple store, really, except email, IM, and browse the web), and there was quite a bit of email on the topic on enthusiast mailing lists at work, but somehow I just didn't get swept up into the experience itself.  I did enjoy watching it, though.&lt;br /&gt;&lt;br /&gt;Some people think of it as the coming of a new age of cell phones (admittedly, I do think this will change the industry).  Others think of it as a crass demonstration of the worst aspects of capitalism (admittedly, there is some ugliness when you think about just how spoiled this shows some parts of the world are compared to those parts that are much worse off).  In the end, though, I think it's just people doing what people do and pursuing the things that matter to them and that give them joy.&lt;br /&gt;&lt;br /&gt;One thing that did strike me was &lt;a href="http://www.scobleizer.com/"&gt;Robert Scoble&lt;/a&gt; at the Palo Alto store and his impressive 36 hour campout.  It paid off -- he got to be first in line, had some nice publicity (even making the &lt;a href="http://www.newseum.org/todaysfrontpages/hr.asp?fpVname=CA_SJMN&amp;ref_pge=gal&amp;b_pge=1"&gt;cover&lt;/a&gt; of the San Jose Mercury News).  What really struck me was that he did it with his son, and that they had the opportunity to meet some great people like Andy Hertzfeld,  Bill Atkinson, and other Silicon Valley luminaries who also visited to get their own iPhones.  Most striking was that he did it with his son, Patrick; sounds like they had a great time, and I'm sure both will look back on it fondly years from now, long after the iPhone is a relic of the first step out of the seemingly prehistoric time of cell phones.  &lt;a href="http://scobleizer.com/2007/06/29/it-lives-up-to-every-bit-of-hype/"&gt;Their experience&lt;/a&gt; is a nice reminder of some of the human aspect of this spectacle.  It isn't just about the iPhone, it's also about the people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-8416312714816249318?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/8416312714816249318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=8416312714816249318' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/8416312714816249318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/8416312714816249318'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2007/06/iphone-experience.html' title='iPhone Experience'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-3160999801969707404</id><published>2007-04-30T14:55:00.000-07:00</published><updated>2007-04-30T15:07:45.630-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Fun, NewMySQL Storage Engine</title><content type='html'>In the spirit of the recent &lt;a href="http://www.mysqlconf.com/"&gt;MySQL Conference&lt;/a&gt;, I decided to have some fun and make a MySQL Storage Engine that would be of practical use.  My idea is that so, so much information is available through, say, &lt;code&gt;/proc&lt;/code&gt; on Linux and FreeBSD that it is a shame there isn't a convenient way to get to it short of ssh or (shudder) snmp.  So, I made a little storage engine that turns arbitrary files into MySQL tables.  It supports basic things like space separation to derive columns, etc.  Pretty simple, but I'm amazed how easy it was and how useful it could be.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/mysql-filesystem-engine/"&gt;http://code.google.com/p/mysql-filesystem-engine/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ideas for files to watch: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;/proc/mdstat&lt;/code&gt; - how is your software RAID array doing?  any bad disks?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;/proc/megaraid/*&lt;/code&gt; - how is your hardware RAID controller?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;/proc/meminfo&lt;/code&gt; - watch memory on your MySQL in depth&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;/etc/lsb-release&lt;/code&gt; - identify your server's OS easily&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;As an upshot, it gives me a chance to play more with &lt;a href="http://code.google.com/hosting/"&gt;Project Hosting&lt;/a&gt; on &lt;a href="http://code.google.com/"&gt;code.google.com&lt;/a&gt;; it's come a long way, and it really made getting code out there much easier than manually setting up SVN, a web site, etc would have.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-3160999801969707404?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/mysql-filesystem-engine/' title='Fun, NewMySQL Storage Engine'/><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/3160999801969707404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=3160999801969707404' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/3160999801969707404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/3160999801969707404'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2007/04/fun-mysql-table-handler.html' title='Fun, NewMySQL Storage Engine'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-114732785133603347</id><published>2006-05-10T22:48:00.000-07:00</published><updated>2006-11-11T20:59:41.566-08:00</updated><title type='text'>Google Trends is Amazing</title><content type='html'>So today we launched &lt;a href="http://www.google.com/trends"&gt;Google Trends&lt;/a&gt;.  Wow.  I first played with it earlier this week (that is, I wasn't on the team and didn't know it was coming out) and I was utterly blown away with it.  My first reaction was "very cool" and my second reaction was "this is extremely powerful!"  [1]&lt;br /&gt;&lt;br /&gt;In effect, Google Trends lets you see how search traffic for a given term has changed over time.  Even better, you can compare up to five different search terms to see how the popularity of things have changed over time.  I'm amazed that this kind of tool is now available to the general public (for free, no less!).  Obviously condensing a high volume of data into a small graph has some lossage, but this is a hugely fascinating source of information nonetheless.&lt;br /&gt;&lt;br /&gt;For instance, a company near and dear to my heart made a strategic decision several years ago about one of their products.  &lt;a href="http://www.google.com/trends?q=%22red+hat+linux%22%2C+%22red+hat+enterprise+linux%22%2C+%22fedora+core%22%2C+suse&amp;ctab=0&amp;date=all&amp;geo=all"&gt;Was it a good decision,&lt;/a&gt; or did it fracture their brand?&lt;br /&gt;&lt;br /&gt;What about new websites as they replace old?  How has &lt;a href="http://www.google.com/trends?q=digg%2C+slashdot&amp;ctab=0&amp;date=all&amp;geo=all"&gt;Digg compared to Slashdot&lt;/a&gt;?  What about some &lt;a href="http://www.google.com/trends?q=google%2C+yahoo%2C+myspace%2C+microsoft%2C+ibm&amp;ctab=0&amp;date=all&amp;geo=all"&gt;other popular websites/companies?&lt;/a&gt; (Yes, apparently more people search for myspace than for microsoft... who knew?)&lt;br /&gt;&lt;br /&gt;How about current events -- when did Abu Ghraib &lt;a href="http://www.google.com/trends?q=Abu+Ghraib%2C+Guantanamo&amp;ctab=0&amp;date=all&amp;geo=all"&gt;enter the global consciousness&lt;/a&gt;, compared to Guantanamo?  What about &lt;a href="http://www.google.com/trends?q=osama+bin+laden%2C+saddam+hussein&amp;ctab=0&amp;date=all&amp;geo=all"&gt;Osama versus Saddam&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;How about next generation game consoles -- how often are people searching for them?  &lt;a href="http://www.google.com/trends?q=xbox+360%2C+playstation+3%7Cps3%2C+nintendo+revolution%7Cwii&amp;ctab=0&amp;date=all&amp;geo=all"&gt;XBOX 360 vs Playstation 3 vs Nintendo Revolution/Wii&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Open Source versus proprietary?  How about &lt;a href="http://www.google.com/trends?q=oracle%2C+mysql%2C+postgres+%7C+postgresql%2C+db2&amp;ctab=0&amp;date=all&amp;geo=all"&gt;MySQL vs Oracle vs Postgresql vs DB2?&lt;/a&gt;  &lt;a href="http://www.google.com/trends?q=apache%2C+iis&amp;ctab=0&amp;date=all&amp;geo=all"&gt;Apache vs IIS&lt;/a&gt;?  &lt;a href="http://www.google.com/trends?q=html%2C+java%2C+xml&amp;ctab=0&amp;date=all&amp;geo=all"&gt;HTML vs XML vs Java&lt;/a&gt;?  &lt;a href="http://www.google.com/trends?q=weblogic%2C+jboss&amp;ctab=0&amp;date=all&amp;geo=all"&gt;JBoss vs Weblogic?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Obviously interpreting data is difficult.  Turning facts into truths is hard.  Also, users may not search like you expect, and name overlap (apple vs Apple) can lead to confusion, too.  But the power of Google Trends is amazing, and it truly shines lights both into the behavior of people as well as the change in that behavior over time.  Rock on, Trends Team!&lt;br /&gt;&lt;br /&gt;[1] - I speak only as a happy user of Google Trends.  I had nothing to do with its design, launch, implementation, etc etc.  I just think it's very, very cool.  Standard disclaimer - these opinions are mine alone and not the opinions of my employer.  Don't construe them as anything except random monkey typings into a random monkey blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-114732785133603347?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/114732785133603347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=114732785133603347' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/114732785133603347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/114732785133603347'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2006/05/google-trends-is-amazing.html' title='Google Trends is Amazing'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-114716134362920741</id><published>2006-05-09T00:47:00.000-07:00</published><updated>2006-11-11T20:59:41.355-08:00</updated><title type='text'>RIP: Sony Playstation 3</title><content type='html'>So Sony revealed more details about the PS3 today at E3.  The world seems underwhelmed and aghast, and I can't help but agree.  I *want* competition in the gaming industry, but now Microsoft will have a one year first-mover advantage (huge!), a second generation online experience (Sony's PS2 online is a sadly balkanized, fragmented experience), and absolutely nothing compelling over the other consoles except, perhaps, a bluray drive (though, of course, HD-DVD is already here, and Microsoft will likely have the HD-DVD addon for the XBOX 360 much sooner than the PS3's November release).&lt;br /&gt;&lt;br /&gt;I won't even mention price ($500 for the low end version, $600 for the high end version that actually can play bluray discs at hidef).  Come on, Sony!  That's a joke.  Some of us "grown-up" geek gamers may be able to afford that, but the vast majority of your market won't.  Hell, I'm so insulted by the lack of innovation and absurd pricing that maybe I won't buy one.&lt;br /&gt;&lt;br /&gt;There is a glimmer of hope in the Nintendo Wii (bleh name).  There is a real chance that it can bring something genuinely new and innovative into the game market.  I hope its low price, novelty, solid backwards compatibility, and true innovation will carry it far.  I think Nintendo has it right on this one.  Low price, compatibility, simplicity.  I hate that it lacks hidef output, but the more I see what they do, the more I suspect that the Wii may be the next major console, with the XBOX 360 close behind, and the PS3 relegated to a distant third.&lt;br /&gt;&lt;br /&gt;It's all about the games.  Microsoft has apparently made it very easy for developers to make games, but the platform is still very complicated (multiple cores will take years and years for the industry to really take advantage of).  Nintendo, though, will have significant backwards compatibility, a library of pre-Gamecube hits available online, and apparently has a significantly cheaper development kit compared to Sony or Microsoft.  This could really ignite a developer base, which is a very good thing, since the innovation of the new controller could make it much easier for independent publishers to make fun and different games, as opposed to the current market where it costs a huge amount to field a title for a PS2 or XBOX/XBOX 360.&lt;br /&gt;&lt;br /&gt;This year's console wars are getting interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-114716134362920741?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/114716134362920741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=114716134362920741' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/114716134362920741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/114716134362920741'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2006/05/rip-sony-playstation-3.html' title='RIP: Sony Playstation 3'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-114611120193767230</id><published>2006-04-26T20:35:00.000-07:00</published><updated>2006-11-11T20:59:41.128-08:00</updated><title type='text'>Multitasking</title><content type='html'>Concentration is important!  Long periods of uninterrupted focus are crucial to getting some things done.  Writing code, for instance, or documentation, or composing some detailed email about how to solve parking problems.  But sometimes, if you were to concentrate on just one thing at a time, you'd spend a lot of time waiting, and waiting, and waiting.&lt;br /&gt;&lt;br /&gt;For instance, compiling a piece of software, or even refreshing your local checkout of your project's version control system.  Talking via instant messenger with someone can also qualify; while chatting is one thing, sometimes IM is used for serious work-related discussions, and you need to frequently make sure you're keeping up with your part of the discussion.  Polling your inbox can also qualify, especially if you're waiting for an important email (such as a response to a network ticket you've filed, or the day's lunch menu).&lt;br /&gt;&lt;br /&gt;The key to successful multitasking is getting as much state out of your brain and into the computer.  Front-load the thinking and decision making, and then spread yourself as thin as possible across multiple tasks.  The goal is that, given some pile of tasks, you quickly dispatch the next step in each one as soon as it is ready.&lt;br /&gt;&lt;br /&gt;Another key is to be able to quickly recover state if you've lost it.  Sometimes, power outages happen, or you have to go home, or your network filer decides it really, really needs to stop talking to the network for a while.  Good multitasking hygiene means it is as easy as possible to pick up where you left off, be it five minutes or five days later.&lt;br /&gt;&lt;br /&gt;For me, one of the most common multitasking challenges is waiting for various programs to finish.  Sometimes I'm working on some code that needs compiling (usually C++).  Compiling can take a while.  Instead of sitting there and waiting for my terminal to finish the compile, I switch to another desktop.  Likewise, when running some tool that talks to other services over the network, there can be a delay.  Don't just sit there waiting, go find another desktop and work from there.&lt;br /&gt;&lt;br /&gt;Assuming you have a few different desktops with various tasks running on them, though, you sometimes can lose track.  There are a few strategies for dealing with this.  One is to graze across your desktop and windows, looking for completed tasks.  I used to do this a lot, but it is easy to forget desktops.  Lately I've been using &lt;a href="http://www.ignavus.net/software.html"&gt;xosd&lt;/a&gt; to pop-up unobtrusive onscreen messages when programs complete.  This is nice in that it gets my attention without being too obnoxious.&lt;br /&gt;&lt;br /&gt;I actually extended that idea into a little script that continuously polls /proc for known long-running processes (make, version control checkouts, etc).  When it sees one live over a few seconds, it will automatically send an onscreen display when it completes.  I'll probably teach it to do the opposite -- send a message when something has taken too long (such as leaving a vi editing a version control checkin message for days instead of the checkin finishing... oops!).&lt;br /&gt;&lt;br /&gt;Recovering state and being able to resume what you're working on is very important, too.  Phones ring, coworkers drop by, and all sorts of other undeferrable interrupts occur during the day, some of which may pull you away for hours.  The unix tool &lt;a href="http://www.gnu.org/software/screen/"&gt;screen&lt;/a&gt; can help resume long-running jobs from different locations, which helps for some activities (long-running scripts you want to go home while they run, for instance).  Also, taking notes of things to get back to, even if it is just a few minutes away, helps quite a bit (I permanently keep my todo file open, but I'm a luddite; software organizers and such work, too.  The key is that you be incented to use it often and have no overhead in using it, which rules out things like PDAs).&lt;br /&gt;&lt;br /&gt;Multitasking ends up being like juggling.  You really are in contact with each ball (task) for a fraction of a second, but that fraction is enough to keep it in motion for much longer and until it needs your attention again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-114611120193767230?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/114611120193767230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=114611120193767230' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/114611120193767230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/114611120193767230'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2006/04/multitasking.html' title='Multitasking'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-114595022357913510</id><published>2006-04-25T00:16:00.000-07:00</published><updated>2006-11-11T20:59:40.875-08:00</updated><title type='text'>How I Concentrate</title><content type='html'>&lt;a href="http://jeremy.zawodny.com/blog/archives/006681.html"&gt;Jeremy asks&lt;/a&gt; if people can concentrate.  I find this an interesting question and something I've been thinking quite a bit about lately.  My job involves a lot of interruptions, usually related to urgent issues (helping someone keep a system online) or URGENT issues (getting a system back online).  Pretty much everything falls into two buckets: "now" and "soon."  I'm always interested in staying productive.&lt;br /&gt;&lt;br /&gt;This works if tasks are short-lived, fire-and-forget, such as quickly fixing a script or responding to an email.  More often, though, things aren't so quickly resolved; that script may need to be tested thoroughly or that quick response turns into a long, drawn-out thread.  Add onto this long term projects which need to be done, but don't qualify as an urgent task, and things get hairy very quickly.&lt;br /&gt;&lt;br /&gt;So, I concentrate by accepting the interrupts and minimizing their impact.  I keep a todo file of "today," "this week," and "sooner or later."  Every day I check the "today" list and possibly migrate things back and forth in the list.  I try to get through the "today" list, well, today, but usually I don't.  That's okay -- better to aim high and miss than always shoot at the easy targets :)&lt;br /&gt;&lt;br /&gt;Whenever an interrupt occurs and I'm doing something else, it goes on the list.  Like a stack, push, pop, push push push, pop push pop pop pop.  This more or less works, with the goal being if something isn't so urgent as to need immediate attention then it can wait until my next planned context switch, at which time I reschedule what to do next (gee, sounds like a computer... I guess I'm a bit digital sometimes).&lt;br /&gt;&lt;br /&gt;Interrupts aside, here are some other things I do to concentrate:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Close my email client - or at least put it on another desktop&lt;/li&gt;&lt;li&gt;Ditto with instant messenging&lt;/li&gt;&lt;li&gt;Put headphones on and play familiar music (for me, a good beat helps)&lt;/li&gt;&lt;li&gt;Shut my office door&lt;/li&gt;&lt;li&gt;Work a half or full day from home&lt;/li&gt;&lt;li&gt;Schedule fake all-day meetings to keep other meetings from popping up&lt;/li&gt;&lt;li&gt;Read the excellent &lt;a href="http://www.amazon.com/gp/product/0596007833/sr=8-1/qid=1145949925/ref=pd_bbs_1/002-1991388-3702418?%5Fencoding=UTF8"&gt;Time Management for System Administrators&lt;/a&gt;, though I'm not a sysadmin&lt;/li&gt;&lt;li&gt;Tell people to get out of your office so you can get work done (this seems rude at first, but when you then get something done they wanted done, they quickly start being happy when you tell them to buzz off!)&lt;/li&gt;&lt;li&gt;Only read RSS feeds at home, not at work&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The key is to minimize the external distractions as much as possible, drown out your surroundings (I'm disturbed how much code I've written to Lords of Acid over the years... ahem), and to develop good work habits that prevent, say, that quick check of email (which, suddenly, you see an awesome thread on some inane detail not actually job-related that you simply must respond to, oh, and there's an IM about some interesting gossip, oh, and the people outside your office are commenting on the whiteboard project you're working on, oh, and ...).&lt;br /&gt;&lt;br /&gt;Sometimes, though, you have to multitask.  I'll blog next how I deal with things where I simply have to stop and find something else to do (such as waiting on a long build).  In a way, it's the opposite of concentrating; intentionally losing focus but organizing your approach such that the cost is minimal and getting back onto the task at hand is easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-114595022357913510?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/114595022357913510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=114595022357913510' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/114595022357913510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/114595022357913510'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2006/04/how-i-concentrate.html' title='How I Concentrate'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-114071317571492916</id><published>2006-02-23T08:45:00.000-08:00</published><updated>2006-11-11T20:59:40.602-08:00</updated><title type='text'>MacBook Pro arrived!</title><content type='html'>Hurray, my MacBook Pro arrived.  I'll save the reviews for other sites (at least for now), but so far, I'm quite happy with it.  Immediate impressions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Much faster than my old PowerBook&lt;/li&gt;&lt;li&gt;Gorgeous screen&lt;/li&gt;&lt;li&gt;Awesome power connector&lt;/li&gt;&lt;li&gt;Runs hotter&lt;/li&gt;&lt;li&gt;Better sound&lt;/li&gt;&lt;li&gt;Nicer form factor (slightly thinner)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;One interesting piece of trivia is you can turn any Universal binary into a PPC or Intel binary.  I did this to /usr/bin/openssl and ran 'openssl speed' in both modes.  Rosetta was surprisingly fast, but native is faster... usually!  Turns out even under rosetta, a few operations are competitive, or faster, than than native code.  Probably some lousy x86 optimization (my G4 utterly trounces the MacBook in these tests, too).&lt;br /&gt;&lt;br /&gt;Native:&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;type&lt;/td&gt;&lt;td&gt;16 bytes&lt;/td&gt;&lt;td&gt;64 bytes&lt;/td&gt;&lt;td&gt;256 bytes&lt;/td&gt;&lt;td&gt;1024 bytes&lt;/td&gt;&lt;td&gt;8192 bytes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sha1&lt;/td&gt;&lt;td&gt;10842.13k&lt;/td&gt;&lt;td&gt;31678.37k&lt;/td&gt;&lt;td&gt;71631.37k&lt;/td&gt;&lt;td&gt;103654.03k&lt;/td&gt;&lt;td&gt;118985.66k&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rmd160&lt;/td&gt;&lt;td&gt;8346.94k&lt;/td&gt;&lt;td&gt;22978.92k&lt;/td&gt;&lt;td&gt;46847.79k&lt;/td&gt;&lt;td&gt;63144.70k&lt;/td&gt;&lt;td&gt;70611.74k&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rc4&lt;/td&gt;&lt;td&gt;66578.82k&lt;/td&gt;&lt;td&gt;70902.22k&lt;/td&gt;&lt;td&gt;71037.20k&lt;/td&gt;&lt;td&gt;71580.98k&lt;/td&gt;&lt;td&gt;70851.90k&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;descbc&lt;/td&gt;&lt;td&gt;12851.89k&lt;/td&gt;&lt;td&gt;12742.98k&lt;/td&gt;&lt;td&gt;12187.14k&lt;/td&gt;&lt;td&gt;13295.03k&lt;/td&gt;&lt;td&gt;13847.59k&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Rosetta:&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;type&lt;/td&gt;&lt;td&gt;16 bytes&lt;/td&gt;&lt;td&gt;64 bytes&lt;/td&gt;&lt;td&gt;256 bytes&lt;/td&gt;&lt;td&gt;1024 bytes&lt;/td&gt;&lt;td&gt;8192 bytes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sha1&lt;/td&gt;&lt;td&gt;5420.84k&lt;/td&gt;&lt;td&gt;17725.77k&lt;/td&gt;&lt;td&gt;40761.72k&lt;/td&gt;&lt;td&gt;82726.74k&lt;/td&gt;&lt;td&gt;117348.61k&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rmd160&lt;/td&gt;&lt;td&gt;5153.40k&lt;/td&gt;&lt;td&gt;14432.81k&lt;/td&gt;&lt;td&gt;39718.66k&lt;/td&gt;&lt;td&gt;70466.69k&lt;/td&gt;&lt;td&gt;89786.69k&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rc4&lt;/td&gt;&lt;td&gt;79826.20k&lt;/td&gt;&lt;td&gt;94738.93k&lt;/td&gt;&lt;td&gt;99561.41k&lt;/td&gt;&lt;td&gt;101192.56k&lt;/td&gt;&lt;td&gt;101864.12k&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;descbc&lt;/td&gt;&lt;td&gt;19374.76k&lt;/td&gt;&lt;td&gt;21527.40k&lt;/td&gt;&lt;td&gt;22061.85k&lt;/td&gt;&lt;td&gt;22276.16k&lt;/td&gt;&lt;td&gt;22232.79k&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Expect more gushing reviews and gaga talk over time.  I've been waiting a long time for a fast Mac laptop.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-114071317571492916?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/114071317571492916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=114071317571492916' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/114071317571492916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/114071317571492916'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2006/02/macbook-pro-arrived.html' title='MacBook Pro arrived!'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-113601088451487854</id><published>2005-12-30T22:35:00.000-08:00</published><updated>2006-11-11T20:59:40.380-08:00</updated><title type='text'>Dell... great products, lousy support</title><content type='html'>Looks like &lt;a href="http://jeremy.zawodny.com/blog/archives/006009.html"&gt;Jeremy is stuck in Dell Hell&lt;/a&gt;, trying to deal with their terrible, terrible customer service.  Oh how I feel the sympathy.&lt;br /&gt;&lt;br /&gt;I once made the mistake of purchasing a Dell Inspiron.  The laptop itself was okay in terms of functionality and the display, though the whole thing was made completely of cheap-feeling plastic.  Sure enough, the motherboard itself died twice within two months, as did the keyboard.  Three on-site support technicians had to deal with that poor machine before I wised up and bought a Powerbook.&lt;br /&gt;&lt;br /&gt;Yes, yes, I know, it isn't Linux, and that's almost a sin considering I worked at Red Hat at the time, but there's nothing like sitting in the middle of a meeting and having the &lt;strong&gt;ONLY WORKING LAPTOP&lt;/strong&gt; in the room.  Wireless &lt;strong&gt;AND&lt;/strong&gt; suspend, both working... shocking.  I once actually managed to lockup a coworker's Thinkpad just by shutting the lid... oh how I laughed.  I managed to pawn off^W^Wsell the laptop to a good friend, and of course within two weeks, the same problem with the motherboard came back.  Thankfully it was under warranty... but I don't envy the misery he had.&lt;br /&gt;&lt;br /&gt;Laptops aside (I'm no fan of their desktops or servers, either), Dell does indeed make wonderful, wonderful LCD screens.  After being impressed with my pair at work, I, too, purchased a 2405FPW for home via employee discount.  It arrived with the styrofoam utterly crushed.  Somehow, miraculously it worked, though the power button has a tiny blemish from where apparently it rubbed the cardboard while being manhandled by DHL.  I count my blessings that I didn't have to deal with returning it.  Poor Jeremy.&lt;br /&gt;&lt;br /&gt;Unless you like sitting on hold or meeting on-site repair contractors, don't buy Dell.  Nowadays I'm pretty much either building a system  myself from scratch or buying Apple.  So much less hassle than Dell, and so much higher quality.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-113601088451487854?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/113601088451487854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=113601088451487854' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/113601088451487854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/113601088451487854'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/12/dell-great-products-lousy-support.html' title='Dell... great products, lousy support'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-113554717207103678</id><published>2005-12-25T13:46:00.000-08:00</published><updated>2006-11-11T20:59:40.126-08:00</updated><title type='text'>Perl to Python, Sure.  But Ruby?</title><content type='html'>At my previous job, I worked most with Perl, though there was some occasional Python on the side.  I enjoyed the occasional toying with Python, but I generally didn't spend much time with the language to have anything more than a passing familiarity with it.  Google is a very Python-heavy company, though, so once I started here, I read the writing on the wall and switched 100% to Python.&lt;br /&gt;&lt;br /&gt;Several thousand lines later, I'm now happy to say it is my scripting language of choice.  Perl is great for one-liners and quick tricks, but Python is ubiquitous on Linux (and OS X) these days, eliminating one former reason for preferring Perl.  But it's more than that; as powerful and expressive as Perl is, Python can pretty much match it at a language level.  Thankfully, the spartan, chaste days of Python "there's exactly one way to do it" 1.5 are long gone.  With Python 2.2 and higher, a huge number of powerful language features were added that really made Python not only effective but also fun.&lt;br /&gt;&lt;br /&gt;I've eyed Ruby for a number of years now, but beyond some reading and toy scripts maybe five years ago, I've pretty much ignored it.  The recent &lt;a href="http://blogsearch.google.com/blogsearch?hl=en&amp;q=%22Ruby+on+Rails%22&amp;btnG=Search+Blogs"&gt;Ruby on Rails&lt;/a&gt; phenomenon brought it back to my attention, though, and I decided it would be a fun diversion during my holiday break.&lt;br /&gt;&lt;br /&gt;Sadly, I was not enamored by it like I hoped to be.  I thought it would be even more fun than Perl or Python, since it seems to have a heavily Perl-influenced design but cleaner object orientation like Python.  But it just doesn't seem that great to me.  Maybe I don't get it, but it offers, at best, incremental improvements over some aspects of Python at a cost of questionable syntax and obscure naming of some built-in modules, functions, and classes.&lt;br /&gt;&lt;br /&gt;It seems like Gnome versus KDE all over again.  Someone decides they can do a whole system better than anyone else and goes off and starts work, attracting volunteers and developing what is, at most, a resulting product of feature parity with an existing, functional, robust product.  Sometimes this aspect of Open Source worries me.  Imagine if someone had decided, by fiat, that Gnome or KDE would be &lt;strong&gt;the&lt;/strong&gt; standard desktop environment.  All of the engineering, testing, documentation, and community effort that went into the other would have instead gone into the chosen environment (though perhaps not as much of it -- still, it would doubtlessly have received significant contributions).&lt;br /&gt;&lt;br /&gt;The argument that people seem to use to justify it, though, is that competition is good.  Okay, sure, competition &lt;strong&gt;is&lt;/strong&gt; good, but I think there is &lt;a href="http://java.sun.com/"&gt;already&lt;/a&gt; &lt;a href="http://www.microsoft.com"&gt;plenty&lt;/a&gt; of &lt;a href="http://www.oracle.com"&gt;competition&lt;/a&gt; out there already.  Let's not needlessly divide our resources when there are bigger fish to fry, eh?&lt;br /&gt;&lt;br /&gt;So anyway, back to my point.  Ruby is nice (quaint?) but I'll stick to Python.  Right now, it is the most vibrant Open Source scripting language there is (sadly, Perl is in a quagmire -- possibly a fatal one -- because of Perl 6).  It isn't perfect, but it's darn good, and certainly good enough for many serious uses.  Now if only Python had a serious CPAN-like service... ah well, I can dream.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-113554717207103678?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/113554717207103678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=113554717207103678' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/113554717207103678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/113554717207103678'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/12/perl-to-python-sure-but-ruby.html' title='Perl to Python, Sure.  But Ruby?'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-112668850630564972</id><published>2005-09-14T01:24:00.000-07:00</published><updated>2006-11-11T20:59:39.911-08:00</updated><title type='text'>Scoble likes our blogsearch... so do I :)</title><content type='html'>I'm glad &lt;a href="http://blogsearch.google.com/"&gt;Google's blog search&lt;/a&gt; has finally launched.  I've been waiting for this one for a while because, although I'm not a particularly prolific blog writer (or even reader), I see the medium as incredibly important.  Looks like even &lt;a href="http://radio.weblogs.com/0001011/2005/09/09.html#a11079"&gt;Scoble is impressed!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Actually, others are too!  Check out a nice, reflective query... &lt;a href="http://blogsearch.google.com/blogsearch?hl=en&amp;filter=0&amp;q=link%3Ahttp%3A%2F%2Fblogsearch.google.com%2F&amp;btnG=Search+Blogs&amp;scoring=d"&gt;blogsearch blogsearch for blogsearch!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that the RSS feed isn't just usable in your RSS reader.  The clever developer will realize an rss or atom feed are a form of API and maybe do something cool with it...  maybe even not-very-clever developers can do something fun:&lt;br /&gt;&lt;br /&gt;(cool thing that was once here but is now broken removed to somewhat reduce the embarrassment of having an iframe with an internal server error on the page)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-112668850630564972?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/112668850630564972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=112668850630564972' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112668850630564972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112668850630564972'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/09/scoble-likes-our-blogsearch-so-do-i.html' title='Scoble likes our blogsearch... so do I :)'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-112659625916903200</id><published>2005-09-13T00:21:00.000-07:00</published><updated>2006-11-11T20:59:39.629-08:00</updated><title type='text'>I have no self control.  Steve Jobs ownz me.</title><content type='html'>I admit it.  I'm a gadgetaholic.  I'm trying to get better, honest I am!  But just when I think I've kicked the habit, something comes along and says 'buy me.'&lt;br /&gt;&lt;br /&gt;The company that has consistently pushed my 'oooh shiney electronics' buttons for the past two years is Apple, and as anyone knows, Apple is not known for affordable pricing.  Damn you, Steve Jobs, damn you!  How much money must you so forcibly extract from me each month?  First it was a Powerbook almost two years ago.  Yes, I admit it, I wanted a laptop, and I was really tired of dealing with Linux annoyances on laptops (suspend?  802.11g?  things "just working"?  BWAHAHAHAHHAHAHAHAA).  Of course, I could never run Windows (except for casual gaming), so I decided to risk it and buy one of those sexy aluminum 15' Powerbooks.&lt;br /&gt;&lt;br /&gt;I was almost immediately in love.  The best part was everything just worked.  A few people at work had various iBooks and Powerbooks, but they were pretty rare (I did work at &lt;a href="http://www.redhat.com"&gt;Red Hat&lt;/a&gt;, after all, so pretty much every engineer and suit used Linux, except for the few Mac holdouts).  I started enjoying bringing it to meetings where everyone would, at first, snicker slightly at someone not using a Linux laptop.  I would smile, throw a verbal quip or two, and close the lit on their laptop -- which would crash about 50% of the time.  Who's sneering now!&lt;br /&gt;&lt;br /&gt;About a year later, though, you did it again, Mr. Jobs.  You released that damnable Mac Mini.  Affordable, aesthetically pleasing, and tiny.  How could I resist?  I figured it would be my little toy computer, but no, oh no, somehow it became my desktop (which was embarassing -- a 1.4GHz machine with 512mb of RAM being my main desktop when I had a perfectly good AMD64 with 1GB sitting next to it).  I soon realized your ploy, though.  You wanted me to do the upsell.  The Mini was great, but it was slow.  I hate slow computers, and I know you know that, Steve.  You know that.&lt;br /&gt;&lt;br /&gt;So finally about two months ago, I gave in and got a new Powermac.  Man oh man this thing is sexy.  Interior and exterior, hardware and software... everything is amazing (well, except the stupid mouse and slightly awkward keyboard, but those are clearly afterthoughts and I had my own anyway).&lt;br /&gt;&lt;br /&gt;Time still passed.  I managed to avoid the Shuffle and the Mighty Mouse, though both were pretty cool.  I thought, maybe, just maybe, I had kicked the habit, or at least sated it for a while (though I knew deep down that right when the Intel-based powerbooks roll out, I'll be needing an upgrade).  I thought I had that inner strenght to protect my poor bank account from your vicious pillagings.&lt;br /&gt;&lt;br /&gt;I was wrong.  I held out for a few days, but I broke down.  I'm your bitch, Mr. Jobs.  I'm your bitch.  My 4gb black iPod Nano should be here this week, hopefully.  Damn that thing is gorgeous.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-112659625916903200?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/112659625916903200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=112659625916903200' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112659625916903200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112659625916903200'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/09/i-have-no-self-control-steve-jobs-ownz.html' title='I have no self control.  Steve Jobs ownz me.'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-112627743602912508</id><published>2005-09-09T07:49:00.000-07:00</published><updated>2006-11-11T20:59:39.420-08:00</updated><title type='text'>"Thrill" the audience?</title><content type='html'>(disclaimer: I'm a Googler)&lt;br /&gt;&lt;br /&gt;Okay, I just spotted &lt;a href="http://radio.weblogs.com/0001011/2005/09/09.html#a11079"&gt;Scoble's post&lt;/a&gt; on how Microsoft can "beat Google" and that how it can do so being the wrong question to begin with.  I tend to agree with what he's saying, in some sense; a company shouldn't focus on what they can do to beat another competitor, they should focus on what they can do to satisfy their customers and acquire new customers.  The rest (usually) follows from being successful at those goals.&lt;br /&gt;&lt;br /&gt;Unfortunately, I disagree that Microsoft is in the "audience aggregation" business.  MSN certainly is, but not really Microsoft as a whole.  Audience aggregation, to a public company, is usually about audience acquisition and then monetizing the audience (nowadays mostly through advertisements of some kind).  I think his post blurs the lines between MSN, the subset, and MSFT, the whole.  Microsoft as a whole is in the enviable position of not &lt;strong&gt;having&lt;/strong&gt; to thrill most of its audience, and in the enviable position of basically not having to do anything to aggregate an audience -- when you have the number one desktop operating system, you get your audience for free.  No, I'm not complaining about monopolies, I'm just pointing out that the place Microsoft has in the computer industry is a special case and doesn't act like how most companies have to behave.&lt;br /&gt;&lt;br /&gt;Moreover, he compares audiences for concerts like audiences for websites.  Sadly, this is becoming less and less the case anymore.  I can come and go to concerts as I will -- the only loss of attending is the ticket price, and the only cost of not attending is missing a few hours of entertainment.  But as websites become more and more complicated, it no longer is an issue of just pointing your eyeballs at the site of your choosing.  After all, all of your email is in Yahoo! mail, or your contacts are in Plaxo, or your files are over on X-Drive.  One of the things I miss, say, about Yahoo! Maps is being able to save addresses... but I did manage to convert to Google Maps despite that weak tie in (browser auto complete helps!).&lt;br /&gt;&lt;br /&gt;This is not entirely unlike the world of "office" applications.  Vendors would basically try to lock you in by reading competitor file formats but not really writing them as nicely (at least, the market leader wouldn't need to write them as nicely; the market followers desperately needed to, but often failed).  Data lockin is as powerful, or even more powerful, than operating system lockin, and I think it will be one of the big issues technology and society deal with over the coming years.  WordPerfect (something most of you may not have even heard of!) is still a major use in the legal fields because the volume of documents already written in it and that templates are available and usable effectively only from WordPerfect.  To the rest of the world, though, WordPerfect is pretty much dead.&lt;br /&gt;&lt;br /&gt;For Microsoft, though, only a tiny, tiny portion of their income comes from MSN.  The bulk comes from operating system sales (which are almost never chosen because of an end user picking among multiple choices, like you do with cars or concerts; usually you have one choice, or are forced into the choice by the apps you want to run) and from Office.  So although MSN Virtual Earth may be the topic of the day in the blogs, it isn't what Microsoft the company is about and it largely is a marketting effort to keep users' eyeballs on MSN until they decide either how to monetize those eyeballs or write them off as a marketting expense to fight for mindshare.  This is a big area where, internally, I think Microsoft really &lt;strong&gt;is&lt;/strong&gt; fighting Google, in mindshare among users.  Never before since Microsoft first came into true power with Windows has another company so challenged them for the attention of all users as Google has, IMO.&lt;br /&gt;&lt;br /&gt;The thing that I really disagree with is him stating that "don't be evil" is just a synonym for not pissing off audiences.  The "don't be evil" philosophy (best described in the &lt;a href="http://www.sec.gov/Archives/edgar/data/1288776/000119312504073639/ds1.htm#toc16167_1"&gt;Letter from the Founders&lt;/a&gt;, aka the Owner's Manual for Google shares, which is part of Google's SEC IPO documents) is much more than that, but I can forgive someone who works at Microsoft for not seeing it :)  (Sorry Robert!  I couldn't resist a little barb).  More seriously, unless you've been inside the company and seen just how seriously "don't be evil" is taken, you might not get it.  But I assure you, it permeates Google -- "is that evil?" is one of the first questions asked of any new project, idea, or offering.  It isn't always easy to answer, but it is the foremost thought in our minds -- well above "is this cool?" or "will this make money?"&lt;br /&gt;&lt;br /&gt;That is one of the main reasons I chose to work at Google.  It's damn hard to find companies that have some kind of moral or ethical backbone, especially publicly traded companies that are relevant beyond a local scale.  I'm proud of how seriously we take "don't be evil" and I strongly disagree that it is just about not pissing off the audience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-112627743602912508?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/112627743602912508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=112627743602912508' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112627743602912508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112627743602912508'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/09/thrill-audience.html' title='&quot;Thrill&quot; the audience?'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-112616419590760899</id><published>2005-09-08T00:17:00.000-07:00</published><updated>2006-11-11T20:59:39.130-08:00</updated><title type='text'>Oh.  My.  Godel.</title><content type='html'>According to &lt;a href="http://news.com.com/Americans+open+to+teaching+creationism%2C+poll+says/2100-7337_3-5851178.html?tag=pulse.tb"&gt;a news.com story&lt;/a&gt;, 48% of Americans believe in evolution, and 42% believe that life has remained unchanged since the dawn of time (I suppose the other 10% believe in the &lt;a href="http://en.wikipedia.org/wiki/Flying_Spaghetti_Monster"&gt;Flying Spaghetti Monster&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Worse, 64% think that creationism should be taught along side evolution in public schools.&lt;br /&gt;&lt;br /&gt;I just can't fathom that.  I mean, come on!  There is lots of evidence life changes over time; look at the emergence of dog breeds, for instance.  It isn't like there were pomeranians running around the grasslands of Africa.  We've &lt;strong&gt;seen&lt;/strong&gt; evolution take place in various ways over the past century and a half since Darwin first came along with his new idea.&lt;br /&gt;&lt;br /&gt;I just can't believe that many Americans believe creationism is even a science, much less worth spending valuable class time on.  I mean, come on.  Get your religion on sundays.  How about, instead, we bring back music or art classes?&lt;br /&gt;&lt;br /&gt;*frumple*&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-112616419590760899?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/112616419590760899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=112616419590760899' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112616419590760899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112616419590760899'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/09/oh-my-godel.html' title='Oh.  My.  Godel.'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-112572746389630843</id><published>2005-09-02T22:52:00.002-07:00</published><updated>2006-11-11T20:59:38.870-08:00</updated><title type='text'>An electrician I am not.</title><content type='html'>An electrician I am not.  In fact, compared to many computer enthusiasts, I'm about as dumb as a rock when it comes to electricity.  All I know about electricity I learned in my high school physics class and, although my teacher was superb, that isn't very much.  I've recently been in a bit of a 'debate' with my local power company about my electricity bill, though, so my curiosity is a bit piqued about power usage.  In particular, I've been wondering just how much power my various computers and peripherals use.  So, while wandering the aisles of Fry's earlier tonight, I spotted something I had heard of a while ago -- a &lt;a href="http://www.doubleed.com/products.html"&gt;Watts Up? Pro&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;This little device is great.  Basically it is like an extension cord that measures the power flowing through it at any given time.  The Pro model even has a serial interface to collect the data.  I've not played with that yet, but I did stick the thing between most of my computers and the wall to see just how much power various things use.  I was actually a bit surprised how low it was in some cases.  In order of most power to least:&lt;br /&gt;&lt;table border="1"&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Dual 2.7GHz Powermac&lt;/td&gt;&lt;td&gt;~200 watts idle; ~380 watts with both processors occcupied&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Dual Core AMD64 X2 4800, Windows&lt;/td&gt;&lt;td&gt;~180 watts idle&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;AMD 64 3200+, Lunux&lt;/td&gt;&lt;td&gt;~73 watts (with cpuspeed), ~84 watts (w/o cpuspeed), ~130 watts (cpu occupied)&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Dell 2405 24" LCD Monitor&lt;/td&gt;&lt;td&gt;60 watts&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Linksys WRT54G Wireless router&lt;/td&gt;&lt;td&gt;~8 watts&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Soekris 4801&lt;/td&gt;&lt;td&gt;~4 watts&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;A few things of note.  The low power use on the Linux box is attributable to several factors.  One, the video card in it is a low-end, fanless card, whereas the Powermac and Windows machines have an NVIDIA 6800 Ultra and 7800 GTX in them -- very powerful video cards that are also very power hungry (apparently even when idle).  In addition, the Linux machine is a small form factor PC -- an IDEQ 210P.  It's a cute little box that I am very happy with, especially knowing it uses so little power :)  All machines were configured to use little power, though were not in sleep or hibernate modes (in sleep/hibernate, the systems use maybe 6-8 watts).&lt;br /&gt;&lt;br /&gt;The Soekris is one of my latest toys.  I've not set it up yet, but it is going to be my dns/dhcp server soon.  It's tiny, has 256MB of ram, a 266MHz processor, three ethernet ports, no video whatsoever, no moving parts whatsoever, and is one of the coolest toys I've played with in a long time.  It excites the uber-nerd in me.&lt;br /&gt;&lt;br /&gt;One of the most fascinating things about the Watts Up is how real-time the results are.  Quite literally, pressing a button that causes a 100% CPU use spikes the power draw by as much as 100 watts in the case of the Mac.  Heck, even waving the mouse over the dock so that the icons grow and shrink used 40 watts more!&lt;br /&gt;&lt;br /&gt;Next up is experimenting on how much power draw different components use.  How much does a 6800 Ultra use compared to a Radeon 7200?  What about a Seagate Raptor, how much does it use?  I'll also see about writing a nice little python module to start collecting and keeping all of this interesting data.  The only problem I see is just how damn interesting it is knowing how much power things use... now I'm going to be plugging it into everything in my house.&lt;br /&gt;&lt;br /&gt;PS: Yes, I have too many computers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-112572746389630843?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/112572746389630843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=112572746389630843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112572746389630843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112572746389630843'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/09/electrician-i-am-not_112572746389630843.html' title='An electrician I am not.'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-112425964266953964</id><published>2005-08-16T22:55:00.000-07:00</published><updated>2006-11-11T20:59:38.126-08:00</updated><title type='text'>Supervillain Engineers</title><content type='html'>I had an epiphany the other day watching a rerun of an old cartoon I watched as a child.  This epiphany struck such a fundamental chord that I absolutely knew it had to be true -- many software engineers are like supervillains!&lt;br /&gt;&lt;br /&gt;Every comic book supervillain, every James Bond villain, and every cartoon villain all suffered from the fatal flaw of making things overly complex.  Everyone remembers the laser designed to cut Mr. Bond in half -- you know, the one that started near his feet and moved at about an inch a minute?  Conveniently, of course, the villain du jour departs the scene before the deed is done, leaving Mr. Bond to his inevitable fate... except, of course, his fate is rather evitable (that actually is a word!), as we see mere moments later when he escapes.&lt;br /&gt;&lt;br /&gt;Or perhaps you recall the comic book villain, who uses sleeping gas to capture a superhero, only to have him or her completely at the villain's mercy, perhaps confined or tied up, so that said villain can not only revel in the victory (an understandable trait -- who doesn't like winning?) but also go on and on about every detail of his nefarious plan.  Like the Bond villain, the comic book villain then sets up some elaborate mechanism to do our hero in (a ticking bomb is popular, as is some device slowly filling with water, or the hero being slowly lowered into a vat of acid, or some other similar, time consuming death that, of course, must be completed while the villain and all of his henchmen attend to their other, more important tasks).&lt;br /&gt;&lt;br /&gt;Software engineers do this, too.  It is especially common among students and new programmers, but you actually see it all the time, at every company, from every engineer.  Sometimes it manifests itself by the use of a specialized, complex algorithm when in reality a much simpler approach would be 99% as effficient.  Other times it shows up more purely as premature optimization, perhaps trying to squeeze a few microseconds out of code that quite evidently to everyone (including the programmer in question) isn't a bottleneck.  Sometimes it is pride that drives us to be clever, but so often that pride leads us astray that we must guard against it as best we can.&lt;br /&gt;&lt;br /&gt;Sometimes the shadow of over-complexity will show up as a series of deeply nested loops, meandering through lists and data structures that are insuitable representations of the problem at hand, instead of finding the right representation and accessing the data more directly.  This can be a result of ignorance, or late night programming, or simply having a blind spot because you're too deep in the code.  Other times, it will be code taking the form of a comfy blanket of familiarity such as this (pardon the python):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;myhash = some_function_returning_a_hash()&lt;br /&gt;ret = []&lt;br /&gt;for key in myhash.keys():&lt;br /&gt;&amp;nbsp;&amp;nbsp;ret.append(myhash[key])&lt;br /&gt;return ret&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This, though, is much more simply represented as &lt;code&gt;return myhash.values()&lt;/code&gt;.  The frequency of 'make a return variable, stuff the values into it' is so common, though, that many times it slips through when there actually is a simpler approach.&lt;br /&gt;&lt;br /&gt;The villain's flaw of overly explaining their intentions sometimes creeps up, too.  Here's one of my favorite examples:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# use -1 as our smallest value&lt;br /&gt;minval = -1&lt;br /&gt;# loop over the keys of myhash and find the smallest of the hash's values&lt;br /&gt;for key in myhash.keys():&lt;br /&gt;&amp;nbsp;&amp;nbsp;# check if myhash's value for key is less than min&lt;br /&gt;&amp;nbsp;&amp;nbsp;if myhash[key] &lt; minval:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# if it is, we assign min to be myhash's value for key&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;minval = myhash[key]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Argh!  Of all of those comments, only the first is perhaps of any use (as it establishes that myhash's values will be greater than -1).  The rest go into painfully pointless detail on code that is completely legible to anyone who knows the language.  Worse, it is also an example of overly complex code!  We could instead just use &lt;code&gt;minval = min(myhash.values())&lt;/code&gt; -- simpler, more efficient, and it doesn't rely on some sentinel value like -1.  Plus, I would argue it is much easier to understand.&lt;br /&gt;&lt;br /&gt;At the very heart of all of this is complexity and indirectness versus simplicity and directness.  Very often, simple directness is the right choice.  You don't need a laser to kill James Bond, especially once you have him tied up -- just get a gun and do it, no delays, no monologues..  Likewise, know your language, always ask how you could make something shorter, and question whether a subroutine is, in fact, a vat of acid or if it is as simple and direct as it can be.  Above all... write less code!  When you come back six months later, you will thank yourself :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-112425964266953964?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/112425964266953964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=112425964266953964' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112425964266953964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112425964266953964'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/08/supervillain-engineers.html' title='Supervillain Engineers'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-112222869188381288</id><published>2005-07-24T10:49:00.000-07:00</published><updated>2006-11-11T20:59:37.892-08:00</updated><title type='text'>Hot Coffee silliness</title><content type='html'>So for the past week or so, the nation has been treated to a rather drawn-out discussion of video games, ratings, and sexual content.  One of the most popular games of the year, Grand Theft Auto: San Andreas, is the center of this little brouhaha.  It seems the brain scientists at Rockstar (the developers of GTA) left some code and artwork in the game that lets users have sex with their "girlfriends."  The issue here is the game is rated "M for Mature" by the ESRB (a self-policing entity for the video game industry, i.e., not a legal or governmental organization).&lt;br /&gt;&lt;br /&gt;Having only seen screenshots and read discussions of it, I can't say I've actually tried it, but I do have a decent idea of the details of this portion of the game.  Basically you can enter a girlfriend's house to have some 'hot coffee' (hence the name of the controversy) which is really a codeword for wild monkey sex.  It actually includes a little mini-game where you set the rhythm and pace of the activity and your girlfriend's pleasure meter rises or falls.  There is only limited nudity in the graphics, but the positions are pretty explicit.  Oh, and there is apparently some fun oral sex involved, too.&lt;br /&gt;&lt;br /&gt;Now, given this game could be bought by a 16 year old (at least, from vendors that pay attention to ESRB ratings, which is totally optional, but generally enforced), there is some right for parents to be slightly concerned.  But they neglect to take into account one thing -- &lt;em&gt;none of the code, graphics, sound, or art are accessible in the game you buy&lt;/em&gt;.  That's right, all that San Andreas hot monkey lovin' is totally disabled in the game as it ships.  The central controversy here stems from the fact some sharp hacker found a way to re-enable it by flipping a bit in a config file.  He published this and suddenly the world is on fire with righteous indignation.&lt;br /&gt;&lt;br /&gt;The result has been a sudden and intense examination of video games by the government, seemingly spearheaded by Hillary Clinton.  Normally I'm a fan of the Clintons, but I find it odd that a woman who knowingly lets her husband have little flings on the side is up in arms about a game that has crude representation of video game intercourse.  It's the same odd feeling when I think about her being a Senator from New York even though she's from Arkansas.  You know, that "political ambitions fuel every decision I make" funny feeling.&lt;br /&gt;&lt;br /&gt;Anyway, the world is up in arms and parents are screaming and politicians are screaming and the gaming industry is shivering at the thought of enforced regulation (again, the ESRB is a self-regulating group formed from the video game industry that, among other things, defines a rating system; pretty much every reseller and game developer takes part in the ESRB's system).  Best Buy, Circuit City, Wal-mart, and various other game sellers have ripped GTA:SA from store shelves.  No doubt there is real and substantial monetary impact from this decision.&lt;br /&gt;&lt;br /&gt;I look at this mess and find the reactions generally overblown.  I can see cause for some alarm, but the code is totally inaccessible -- you &lt;em&gt;have to go onto the Internet and download a game modification to access it at all&lt;/em&gt;.  Basically it is opt-in.  I suppose parents are worried their kids will opt-in without the parents knowing... but come on, folks, if your kids are slumming around on the internet, believe me, you should worry more about the other sites they're visiting.&lt;br /&gt;&lt;br /&gt;I wish the government and the ESRB had been more moderated in their reactions and approached it more calmly, but I guess that doesn't grab headlines.  What bothers me most is we have politicians complaining about virtual sex in a game where you, quite literally, &lt;em&gt;kill thousands of people&lt;/em&gt; to complete it.  You pop gangsters with a glock, tear into cops with a chainsaw, use a katana to shish kebob civilians, and generally find as many creative and interesting ways to kill people as you can, often with rather realistic sounds and graphics to accompany it.  I guess parents are fine with their children playing a game that lets them simulate mass murder, stealing cars, buying drugs, and a number of other &lt;em&gt;crimes&lt;/em&gt;, but not with having &lt;em&gt;legal, consensual&lt;/em&gt; sex with your simulated girlfriend.&lt;br /&gt;&lt;br /&gt;It all seems pretty messed up to me.  I highly support the right for game makers to make whatever game they want, and I find the ESRB to be a good solution to the problem.  Adding punitive fines to retailers who sell the games to underage kids (which is Clinton's proposal) seems to strike at the wrong area anyway... but I guess politicians need to grab their headlines (I hope that's all this is, as it will mean their interest will wane over the next few weeks; if they legitimately about the issue, then unfortunately they probably will actually end up doing something about it, rather than just grandstanding).&lt;br /&gt;&lt;br /&gt;Stupid move, Rockstar; next time, just remove the code.  I wish I knew what was going on inside that company, though, and who knew what and when they knew it.  I can just see some middle manager saying 'cut this from the game' and some code jockey going 'okey dokey' and adding a config flag instead of actually removing it.  Hell, that's probably how I'd do it :)  But look at the mess it caused.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-112222869188381288?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/112222869188381288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=112222869188381288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112222869188381288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/112222869188381288'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/07/hot-coffee-silliness.html' title='Hot Coffee silliness'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-111725917937389052</id><published>2005-05-27T22:28:00.000-07:00</published><updated>2006-11-11T20:59:37.660-08:00</updated><title type='text'>Don't Make Eye Contact</title><content type='html'>One of my original stated goals of this blog (which, gasp, now is by far the longest living, most frequently updated blog or website I've ever had!) was to chronicle my adventures as a newbie in California.  Okay so I've not really done that very much so far.&lt;br /&gt;&lt;br /&gt;Largely the reason is my transition to a Californian has been largely a smooth and enjoyable one.  I really like the Bay Area, and have been enjoying living here quite a bit.  Gas prices are a little higher than North Carolina (though not nearly as much as I expected), and there are lots more people, but by and large, life is life and it isn't that different.  I'm sure that wouldn't be the case if I lived in San Francisco instead of Sunnyvale, but nonetheless, the transition has been peaceful.&lt;br /&gt;&lt;br /&gt;One thing stands out, though.  One thing that bothers me a bit.  Strangers are less friendly here.  I'm not saying people are rude or that they go out of their way to be gruff, but there is definitely a less friendly feel to the area when you're in public.  People make less eye contact.  They smile and nod less.  Perhaps it is a southern thing, or perhaps it is just a small city thing, but I spent the first twenty seven years of my life smiling, making eye contact, and generally being friendly to strangers.&lt;br /&gt;&lt;br /&gt;At first, I did think it was rudeness.  But over time, I started to realize what happened if you made eye contact, if you smiled, if you nodded -- people asked you for money.  In the eight or so years I lived in larger cities (Nashville, Raleigh, Durham), I was asked for money maybe 5-6 times.  In less than two months, I've already reached that number here in California.  I guess the aloofness is a defense mechanism.&lt;br /&gt;&lt;br /&gt;Passing by someone on the street who asks for change always makes me feel like an asshole.  I have a good job; I can certainly spare some change... but I never do.  I always wonder what the person will do with the money.  Is it really for food, or is it to satisfy some kind of vice?  But then I wonder if it is even right for me to judge or to use that as a condition... after all, an addict who can't get his fix is just as miserable as someone who hasn't had a good meal in days.  So is it right for me to withhold or handout based on that?&lt;br /&gt;&lt;br /&gt;A friend of mine suggested handing out gift cards for grocery stores.  I think I'll start doing that.  It's not like handing out cash, mostly.  I dunno.&lt;br /&gt;&lt;br /&gt;But until then... don't make eye contact. :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-111725917937389052?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/111725917937389052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=111725917937389052' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111725917937389052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111725917937389052'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/05/dont-make-eye-contact.html' title='Don&apos;t Make Eye Contact'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-111707341829910360</id><published>2005-05-25T18:58:00.000-07:00</published><updated>2006-11-11T20:59:36.913-08:00</updated><title type='text'>Jesus Hates Perl</title><content type='html'>My pal &lt;a href="http://jroller.com/page/jmrodri/20050525#what_i_hate_about_perl"&gt;Jesus&lt;/a&gt; hates perl.  He's a Java guy and Java is the only language he likes.  That's okay, he's still my pal anyway!  But I feel the need to respond to his blog, as it is, of course, wrong, and he likely is complaining about code I wrote!&lt;br /&gt;&lt;br /&gt;First he complains about infix conditionals, such as:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;return 0 unless $condition;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;There are a couple of reasons this pops up in perl.  One is that you can't say this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;if ($condition)&lt;br /&gt;  foo&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I know, I know, it's weird, but you have to use braces, even if the block is just one line.  That's a bit annoying, so people often will reduce it to an inline conditional (not just with return, but with other clauses as well).&lt;br /&gt;&lt;br /&gt;The other reason -- and the reason I tend to use infix conditionals -- is that they let you emphasize the result over the condition.  In most languages, the condition always comes first, inside the if clause.  But it isn't always true that the condition is the more important part.  For example:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;print "The printer is on fire!\n" unless $quiet;&lt;br /&gt;$obj-&gt;foobar() if $obj-&gt;can("foobar");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The more important thing here is the message, not the check, and so you see the message first.   This is more a stylistic issue, but perl lets you be expressive, giving you the ability to emphasize one point over another.  I like this, too, as I think it actually can lead to &lt;em&gt;more&lt;/em&gt; readable code.  Read this aloud and you will see the perl version is more natural-sounding:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;if (debugging) {&lt;br /&gt;  printf("Something broke, check your stack\n");&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;vs&lt;br /&gt;&lt;code&gt;&lt;br /&gt;print "Something broke, check your stack\n" unless $debugging;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;He also complains about types in perl; well, many other people have debated strict typing vs loose typing, and I'll let them wage that war.&lt;br /&gt;&lt;br /&gt;His last complaint is about grep.  Argh!  grep is a wonderful function, because it is one of the parts of perl that allows for a more functional-style of programming.  I guess Jesus doesn't like functional programming, which is a pity, because functional programming can be very handy (and, not to mention, very efficient).&lt;br /&gt;&lt;br /&gt;But Jesus is a Java programmer, so functional programming is all but foreign to him, as is the 'relax, types will figure themselves out' approach of loosely typed languages.&lt;br /&gt;&lt;br /&gt;But that's okay!  Jesus is still my pal!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-111707341829910360?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/111707341829910360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=111707341829910360' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111707341829910360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111707341829910360'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/05/jesus-hates-perl.html' title='Jesus Hates Perl'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-111677993953706857</id><published>2005-05-22T09:19:00.000-07:00</published><updated>2006-11-11T20:59:36.738-08:00</updated><title type='text'>Review: Psychonauts</title><content type='html'>I picked up Psychonauts last weekend for a couple of reasons.  One, I was looking for something new to play.  Two, I wanted to find something that would be enjoyable a la my previous blog entry.  Three, I literally grew up on games Tim Schafer either made or was part of -- Maniac Mansion, Curse of Monkey Island, Day of the Tentacle, etc.  I liked each of those games, and they provided some of the few times when playing video games that I really and truly laugh out loud.&lt;br /&gt;&lt;br /&gt;So, like I said, I picked it up last Saturday.  I immediately was hooked on it.  The game itself is a platformer, though it has so much personality and the theme of mental exploration is so well done that it is utterly enthralling.  You play a ten year old boy named Raz who sneaks into a camp where psychics are trained to become Psychonauts (think secret agent psychics).  Before long, a nefarious plot begins, and you are swept into it.&lt;br /&gt;&lt;br /&gt;The game consists of a moderately sized campground where you explore to find other campers and counselors... whose heads you jump into!  Great idea, very well done.  Basically you pop into peoples' minds and those are the core levels of the game.  Each person has a distinct personality which makes you look forward to what being in their head would be like.  Like most platformers, you progress through levels and pick up various things, though instead of random coins or some other stable of platformers, you gather things appropriate to someone's mind -- figments of their imagination, psychic baggage, mental cobwebs, etc.  The psychic theme is woven perfectly into the game and creates a vivid world to explore.&lt;br /&gt;&lt;br /&gt;Of course, the idea of popping into peoples' brains has tremendous comic potential, and Tim and his crew don't disappoint.  The characters in the game are funny, demented, bizarre -- and that's until you jump into their heads.  Once inside, the truly demented nature of the game comes out.  Without giving away anything, let's just say that repairing the psyche of a bipolar nutcase or uncovering and defeating repressed memories make for excellent atmosphere and gameplay.&lt;br /&gt;&lt;br /&gt;Speaking of gameplay; it's quite good.  You start off with a basic set of powers and get more as you complete various parts of the game (some of which are appropriately given to you as merit badges -- it is a camp, after all).  Those powers also evolve over time, though not in ways that drastically change gameplay.  All in all, though, a solid concept and execution.  Additionally, the environment is quite interactive.  You can't destroy buildings, but you can use telekinesis, pyrokinesis, clairvoyance, etc on almost anything in the game... including woodland life.  PKing squirrels is rather funny, and accompanied by nice quips by the protagonist such as "Ooops, I didn't mean to do that."&lt;br /&gt;&lt;br /&gt;Overall it's a great game.  I wish it were a bit longer (I completed it with about 14 hours of gameplay and collected maybe 90% of the collectible items in the game) so it may be better suited for a rental.  But if you think you'd like it, go buy it!  It isn't getting much hype, but it is a truly great game.  It is clear the makers crafted it with care and love.  This is exactly what we as gamers want -- new material, people being creative, and making great games.  We don't want cookie cutter games, so support the underdog!  Heck, just go trade in your umpteen "mega hit" games you don't play anymore for Psychonauts, if nothing else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-111677993953706857?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/111677993953706857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=111677993953706857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111677993953706857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111677993953706857'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/05/review-psychonauts.html' title='Review: Psychonauts'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-111605940439690079</id><published>2005-05-14T01:22:00.000-07:00</published><updated>2006-11-11T20:59:36.497-08:00</updated><title type='text'>What makes a good video game</title><content type='html'>So I was discussing video games today with &lt;a href="http://xboxgamer.blogspot.com/"&gt;Greg&lt;/a&gt; and he mentioned Jade Empire. For those who don't know, &lt;a href="http://jade.bioware.com/"&gt;Jade Empire&lt;/a&gt; is a new game from Bioware, the folks who made the excellent &lt;a href="http://www.lucasarts.com/products/swkotor/"&gt;Star Wars: Knights of the Old Republic&lt;/a&gt; (and it's very good, but not quite as excellent sequel). Before its release it was hailed as being one of the big games for the season, with emphasis on the real-time martial arts style combat inside of an engrossing, story-driven RPG. Initial reviews were good as well, and they only got better as time went by. Excellent sign! So I bought it. Not really because of the hype (though hype does help bring games to peoples' attention) but because I liked this developer's previous works and because the reviews sounded interesting.&lt;br /&gt;&lt;br /&gt;Sadly, I was wrong. I should have picked up on details in the reviews I read about 'simplified' RPG elements -- simplified inventory, few new skills (in a flat list; no tree like, say, Diablo II). A few reviews may have mentioned something about the combat being somewhat of a let down, too. Shoulda picked up on that, too. Ultimately I was disappointed by Jade Empire, as I was by Fable before it (another hyped game, but then again, Peter Molyneux would hype ice to Eskimos... well, he would if it were his ice).&lt;br /&gt;&lt;br /&gt;To me, what it came down to was more or less one-dimensional gameplay. By that I mean as the game progressed, there was little that changed in how you played it. Talk to characters, explore dialog tree, kill opponents. Which really is the essence of &lt;span style="font-style: italic;"&gt;most&lt;/span&gt; games, but the ones that are enjoyable make it change over time.  They let you gain new abilities or weapons that you &lt;span style="font-style: italic;"&gt;need&lt;/span&gt; in order to progress.  Jade Empire, though, is never really difficult, and although you can gain other fighting styles and use weapons, you only need to specialize in one since they are all largely the same.  Zero depth.  Likewise, combat itself is sadly lacking.  You can block, but basically you &lt;span style="font-style: italic;"&gt;never want to&lt;/span&gt; because it is better to dodge.  So a large chunk of the already limited combat mechanic is gone, poof.  Never there, really.&lt;br /&gt;&lt;br /&gt;Some people won't mind that, but I find it surprising how many positive reviews the game really received.  Go check &lt;a href="http://www.metacritic.com/"&gt;metacritic&lt;/a&gt; or &lt;a href="http://www.gamerankings.com/"&gt;gamerankings&lt;/a&gt; to see just how positively it was received.  I think this is sadly a result of the hype; most reviewers don't seem to be willing to diverge from the trends of other reviewers or to pan a highly hyped game.  They do seem to tell you the truth about a game, but usually in the text, not in the final number.  Another oddity in this department are sites like &lt;a href="http://gamespot.com/"&gt;gamespot&lt;/a&gt; (which I actually like in general) -- they rate a game on five axes, for gameplay, graphics, sound, value, and tilt.  Except, if you look, you almost never see any divergence here!  I've yet to see a game get a 10 for graphics but a 4 for gameplay.  There's something fishy there.&lt;br /&gt;&lt;br /&gt;Well, that was a rat hole.  Back to the topic.  I personally think what makes a good video game is gameplay.  It all comes back to gameplay.  I find a game engaging if, while playing it, I want to see what is coming next, what the publishers will throw at me and what they will give me to overcome it.  For instance, I loved the old Megaman games because of the utterly brilliant mechanic where every time you beat a boss you got their powers to use in the rest of the game.  How awesome is that!  I found the recent God of War to be likewise a thoroughly wonderful game.  Not only did it give you a lot of variety in the gameplay, but you gained abilities as the game went on that changed how you played the game.  More combos, different weapons, new powers -- all added up to new ways to interact with the game.&lt;br /&gt;&lt;br /&gt;In terms of other metrics, I view them as less important, save one -- plot.  Plot matters, too.  I'm not a huge fan of the immersive 'oh wow I am totally in the game, and I customized this avatar to really represent my angst-ridden inner soul' games.  I don't necessarily mind them, but I'm not really playing the game to change who I consider my identity to be.  Oh, on this note -- game publishers!  I don't really care if I can change my character's name!  But I do care that spoken dialog ends up being stilted and peculiar in the games that DO let you pick your name because they can't have prerecorded all possible names... so you're always 'you' or 'hero' or 'that guy' or whatever.  Pet peeve.  Plot does matter, though, because it can help pull you to the next part of the game.  It ties together the gameplay and helps establish an interest with the material.&lt;br /&gt;&lt;br /&gt;Graphics are either bad, acceptable, or great.  That's about it.  And the scale changes over time, obviously.  I was very disappointed in Doom 3.  Sure, the graphics were great.  Top notch.  Awesome.  Amazing.  But the gameplay was absolutely nothing new, the story was terrible, and the "ambiance" of a creepy, shadow-ridden base on Mars really was just annoying because there was rarely enough light to &lt;span style="font-style: italic;"&gt;see&lt;/span&gt; the cool graphics.  And yet look at how many great reviews it received.  Reviewers were afraid to grade it poorly.&lt;br /&gt;&lt;br /&gt;Sound is either annoying, tolerable, or good.  Bad voice acting really can ruin things, and theme-specific sound effects can help with immersing yourself in the game (the Star Wars properties come to mind in this; I remember as far back as the original X-Wing how much like the movies absolutely every sound effect, er, sounded).&lt;br /&gt;&lt;br /&gt;Longevity, eh.  The market is such these days that there is almost always something new and pretty good out there.  I very rarely go back and replay old games.  But I am busier than the average high schooler (but, hmm, the average gamer is in his 20s... odd).  If I get about 20-25 hours of gameplay from a game, I'm happy.  If it takes 40 to finish, chances are, I won't do it, because I'll see something else new and shiny and go play it instead.&lt;br /&gt;&lt;br /&gt;So anyway, that's my long-winded critique of the game industry today.  Give us gameplay.  The rest will follow.  Show us your designers and engineers can be creative and give us experiences no other game has ever before, don't just recycle the same gameplay into your own packaging.  Give us more Lumines, more Psi-Ops, more X-Men Legends, more Viewtiful Joes, more Ninja Gaidens, and more Gods of War.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-111605940439690079?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/111605940439690079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=111605940439690079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111605940439690079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111605940439690079'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/05/what-makes-good-video-game.html' title='What makes a good video game'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-111439679134459038</id><published>2005-04-24T19:21:00.000-07:00</published><updated>2006-11-11T20:59:36.262-08:00</updated><title type='text'>Why CGI.pm should die, die, die.</title><content type='html'>Okay, maybe the title is a bit dramatic... but it's a true sentiment that I think needs to be expressed.&lt;br /&gt;&lt;br /&gt;For those who aren't familiar with CGI.pm, it is one of the most commonly used Perl modules on the planet.  If you're doing CGI with perl, then the chance you're not using CGI.pm is about the same as winning the lottery.  It is a cornerstone of web development with Perl, and Perl is one of the most common languages used for web development.  So, to say CGI.pm is fairly popular is an understatement.&lt;br /&gt;&lt;br /&gt;I tend to think of CGI.pm as one of those stepping stones that sometimes pop up in languages that beginners and intermediates use until they find something better.  scanf in C comes to mind, as does goto in basically every language on the planet.  I see CGI.pm similarly, being a stopping point until one moves to more advanced web development systems such as Mason or even pure mod_perl.&lt;br /&gt;&lt;br /&gt;Those are pretty harsh words, likening CGI.pm to scanf and goto.  As ubiquitous and useful as it is, CGI.pm is fundamentally flawed.  It is, for all extents, a swiss-army knife for web development.  Not necessarily a bad thing, but it is the implementation choices I find flaw with.  There is basically one class for the &lt;em&gt;whole system&lt;/em&gt;.  Want to parse CGI variables?  CGI is the class.  Want to munge headers and redirect a user to another page?  CGI is the class.  Want to generate some html, including html forms dashed with JavaScript?  You guessed it, CGI is the class.  All of this in one class.  For all intents and purposes, CGI.pm is a rather thin object veneer on a set of utility functions centered around web development.&lt;br /&gt;&lt;br /&gt;Which isn't so bad.  It just is rather old-school.  Very 90s.  I find it unfortunate that one of &lt;em&gt;the&lt;/em&gt; first modules &lt;em&gt;almost every&lt;/em&gt; new perl programmer will use is so poorly structured.  Contrary to what many people think, perl is a sophisticated object-oriented language, as-or-more flexible than any other OO language out there.  It has its warts, but it is very capable, and you &lt;em&gt;can&lt;/em&gt; have well-designed, clearly-structured class hierarchies in Perl.  I just wish CGI.pm were one of them.&lt;br /&gt;&lt;br /&gt;(Here's my deathbed recant; I learned CGI with CGI.pm, and it was very helpful for me.  It definitely has its uses, and its flaws are more a result of its success and organic growth than anything else.  I also have tremendous respect for its author, Lincoln Stein.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-111439679134459038?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/111439679134459038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=111439679134459038' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111439679134459038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111439679134459038'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/04/why-cgipm-should-die-die-die.html' title='Why CGI.pm should die, die, die.'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12249734.post-111379583190713457</id><published>2005-04-17T20:38:00.000-07:00</published><updated>2006-11-11T20:59:36.046-08:00</updated><title type='text'>Obligatory First Post</title><content type='html'>This is my obligatory first post.  All blogs must have a first post.  This is actually about the third blog I've made (not counting my rarely updated website), so I wouldn't hold your breath between updates if I were you.  I guess what is different this time is I actually have a bunch of people I want to share information with, but email is so ineffecient!&lt;br /&gt;&lt;br /&gt;Anyway, the reason for suddenly having people to share stuff with is because I no longer live near some of my best friends on the planet.  I recently moved from Raleigh, North Carolina to Sunnyvale, California.  Quite a move!  It was for a new job, and represented a bit of a chance to start anew, something I think everyone should do when they can.  I'd been in the same job for just over four years and I was feeling... antsy?  That and some recent changes in the company convinced me it was time to look elsewhere.  Fortunately I found somewhere extremely cool (I won't mention the company by name yet, but clever readers may be able to figure it out from the subtle clues), and so... I jumped!&lt;br /&gt;&lt;br /&gt;I moved out here about three weeks ago, and just finished my second week on the job.  I'll post more here about life in California.  I doubt there is much here interesting if you don't already know me, but hey, feel free to spam and slame me all you want -- that's what the Internet is for!&lt;br /&gt;&lt;br /&gt;Chip&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12249734-111379583190713457?l=blog.pattern.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pattern.net/feeds/111379583190713457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12249734&amp;postID=111379583190713457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111379583190713457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12249734/posts/default/111379583190713457'/><link rel='alternate' type='text/html' href='http://blog.pattern.net/2005/04/obligatory-first-post.html' title='Obligatory First Post'/><author><name>Chip</name><uri>http://www.blogger.com/profile/02509734740570392546</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
