<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Williamsburger</title>
	<link>http://www.williamsburger.com/wb</link>
	<description>Restaurant Reviews &#038; Recipes from Williamsburg, Brooklyn</description>
	<pubDate>Thu, 23 Aug 2007 02:11:15 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0</generator>
	<language>en</language>
			<item>
		<title>Etsy Shopping Spree</title>
		<link>http://www.williamsburger.com/wb/archives/etsy-shopping-spree</link>
		<comments>http://www.williamsburger.com/wb/archives/etsy-shopping-spree#comments</comments>
		<pubDate>Mon, 20 Aug 2007 05:32:54 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
		
	<category>Misc</category>
	<category>Technology</category>
		<guid isPermaLink="false">http://www.williamsburger.com/wb/archives/etsy-shopping-spree</guid>
		<description><![CDATA[

Scarf For Two (The Black Apple)

After months of favorites-list marking and bemoaning the empty spaces on our white(ish) walls in our new(ish) high-ceilinged if not alll that large apartment, we spent most of this rainy Sunday shopping away on Etsy.

I&#8217;ve bought a few things there before, a print and some jewelry, but mostly I&#8217;ve just [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.etsy.com/shop.php?user_id=991"><img src="http://farm2.static.flickr.com/1436/1178094005_ab4100ab11.jpg"/></a>
<br/>
Scarf For Two (The Black Apple)</p>

<p>After months of favorites-list marking and bemoaning the empty spaces on our white(ish) walls in our new(ish) high-ceilinged if not alll that large apartment, we spent most of this rainy Sunday shopping away on <a href="http://www.etsy.com" title="Etsy">Etsy</a>.</p>

<p>I&#8217;ve bought a few things there before, a print and some jewelry, but mostly I&#8217;ve just clicked around, saving copies of prints to put in my computer desktop background rotation, where they would lie in wait for the eventual day I&#8217;d give in and drop some money on the ones I really liked a lot.  And putting painting after print after t-shirt into my favorites list (represented by a cute little heart).</p>

<p>Just in the interface, you can tell the people behind Etsy really care about getting their artists&#8217; goods out to the public, including some very nice shopping features like interviews with artists, galleries (public lists by users), and the innovative if eventually unhelpful color-based shopping path.  They have some performance issues at times (we seemed to have abnormally slow page load times around 6-7pm), but considering their relative newness as a tech company and image-content-heaviness, this isn&#8217;t all that shocking.  If Etsy can figure out how to do Amazon-style recommendations with their content, they could have something truly amazing as opposed to just a great place to buy art.</p>

<p>After hours of deliberation (there&#8217;s a ton of stuff on Etsy!), we narrowed it down to a bunch of pieces that really struck us as befitting our styles.  A not insignificant but fortunately also not ridiculous amount of money later, we walked off with (technically, sat around and waited for) a nice big pile of art to brighten up those sterile walls.</p>

<p><a id="more-227"></a></p>

<table><tr><td valign="middle">
<a href="http://www.etsy.com/shop.php?user_id=5177982"><img width="240" height="300" src="http://farm2.static.flickr.com/1032/1178037143_bfa1e2a18a.jpg"/></a>
<br/>
Target Freedom (David V Moore)
</td><td valign="middle">
<a href="http://www.etsy.com/shop.php?user_id=5177982"><img width="300" height="240" src="http://farm2.static.flickr.com/1213/1178896364_0a34468264.jpg"/></a>
<br/>
Pele (David V Moore)
</td><td valign="middle">
<a href="http://www.etsy.com/shop.php?user_id=5177982"><img width="240" height="300" src="http://farm2.static.flickr.com/1028/1208708316_e7af20b095.jpg"/></a>
<br/>
Chlorophyll Dreams (David V Moore)
</td></tr></table>

<p><br/>
<br/></p>

<p><a href="http://www.etsy.com/shop.php?user_id=5231774"><img src="http://farm2.static.flickr.com/1207/1178899070_11b8aa710b.jpg"/></a>
<br/>
Together (Mattsart)</p>

<p><br/>
<br/></p>

<table><tr><td valign="middle">
<a href="http://www.etsy.com/shop.php?user_id=86028"><img src="http://farm2.static.flickr.com/1156/1178038941_d9b4def5da.jpg"/></a>
<br/>
The Bunny Sisters (Sarah Ogren)
</td><td valign="middle">
<a href="http://www.etsy.com/shop.php?user_id=32500"><img src="http://farm2.static.flickr.com/1186/1178900670_230d5dd8a3.jpg"/></a>
<br/>
Gone To Earth, Plate Two (Magic Jelly)
</td></tr></table>

<p><br/>
<br/></p>

<table><tr><td valign="middle">
<a href="http://www.etsy.com/shop.php?user_id=5164938"><img width="233" height="300" src="http://farm2.static.flickr.com/1185/1178903196_acf3645faf.jpg"/></a>
<br/>
The Cherry Berry Monster (Yumi Yumi)
</td><td valign="middle">
<a href="http://www.etsy.com/shop.php?user_id=5164938"><img width="233" height="300" src="http://farm2.static.flickr.com/1137/1178902450_d29085babd.jpg"/></a>
<br/>
Sitting Still (Yumi Yumi)
</td><td valign="middle">
<a href="http://www.etsy.com/shop.php?user_id=5164938"><img width="233" height="300" src="http://farm2.static.flickr.com/1204/1178901882_28956c008b.jpg"/></a>
<br/>
The Guava Berry Monster (Yumi Yumi)
</td></tr></table>

<p><br/>
<br/></p>

<p><a href="http://www.etsy.com/shop.php?user_id=991"><img src="http://farm2.static.flickr.com/1377/1178904594_b0ee677028.jpg"/></a>
<br/>
Bubblegum Betty (The Black Apple)</p>

<p><br/>
<br/></p>

<p><a href="http://www.etsy.com/shop.php?user_id=5164480"><img src="http://farm2.static.flickr.com/1249/1185163846_8196f8febd.jpg"/></a>
<br/>
Cat And The City (Bigrin Design)</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.williamsburger.com/wb/archives/etsy-shopping-spree/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Podcast Commute</title>
		<link>http://www.williamsburger.com/wb/archives/podcast-commute</link>
		<comments>http://www.williamsburger.com/wb/archives/podcast-commute#comments</comments>
		<pubDate>Thu, 15 Feb 2007 04:50:17 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
		
	<category>Media</category>
	<category>Technology</category>
		<guid isPermaLink="false">http://www.williamsburger.com/wb/archives/podcast-commute</guid>
		<description><![CDATA[When my walking-only commute began in London about a year ago, I rediscovered the joy of using my iPod.  More specifically, I finally got on board with the podcast phenomenon.  After a period of oversubscription to many podcasts, I&#8217;ve winnowed through the mess, and come up with the ones I&#8217;ve followed for a [...]]]></description>
			<content:encoded><![CDATA[<p>When my walking-only commute began in London about a year ago, I rediscovered the joy of using my iPod.  More specifically, I finally got on board with the podcast phenomenon.  After a period of oversubscription to many podcasts, I&#8217;ve winnowed through the mess, and come up with the ones I&#8217;ve followed for a while and look forward to every week.</p>

<p><strong>The Sound Of Young America</strong> - <a href="http://maximumfun.org/">http://maximumfun.org/</a></p>

<p>The first podcast I recommend to people if they ask, and often even if they don&#8217;t.  Other people have told me this show is like NPR, but I&#8217;ve never been able to make it through more than a few minutes of anything on NPR without becoming bored to tears.  Instead, TSOYA&#8217;s Jesse Thorn has the gravitas of an old-time radio interviewer, but the youthful energy of an idealistic recent college grad.  Produced from his living room, this show has that honest indie feel while simultaneously maintaining highly professional quality.  There&#8217;s a very good <a href="http://maximumfun.org/blog">companion blog</a> as well.</p>

<p><strong>Never Not Funny</strong> - <a href="http://podcast.jimmypardo.com">http://podcast.jimmypardo.com</a></p>

<p>This is the most consistently funny podcast out there for my tastes.  Never Not Funny is the first thing I listen to on Monday&#8217;s commute (new episodes come over the wire on Friday evening).</p>

<p><strong>Air Out My Shorts</strong> - <a href="http://www.theitspot.com">http://www.theitspot.com</a></p>

<p>Sophomoric humor with a contagious manic drunken energy.  The two hosts &#8212; &#8220;Preston Buttons &amp; The Word Whore&#8221; &#8212; read listener-submitted short stories while progressively getting drunker and drunker.  There have been some disappointingly frequent stumbles lately with scheduling, and the show suffers greatly when they&#8217;re not co-located and instead record over the phone (using skype, judging by the sound quality?).  The &#8220;let&#8217;s call a friend&#8221; sketches are hit or miss, but I did find myself missing them when they stopped for a while.</p>

<p><strong>AST Radio</strong> - <a href="http://podcast.aspecialthing.com/">http://podcast.aspecialthing.com/</a></p>

<p>The production quality and focus of this conversational podcast have skyrocketed since its stumbling debut a year or two back.  AST Radio is the only source I&#8217;ve encountered where you get to delve deep into the motivations and opinions of a slew of (usually west coast) comedians.  Unfortunately, new episodes are few and far between.</p>

<p><strong>The Sound Of Young America: The College Years</strong> - <a href="http://feeds.feedburner.com/collegeyears">http://feeds.feedburner.com/collegeyears
</a></p>

<p>With the format of a morning show (regardless of actual time of day of original broadcast), TSOYA: The College Years is an exceptionally entertaining broadcast done by intelligent college students.  It&#8217;s intriguing to see the origins of the current incarnation, with sketches and banter which often entertain me more than the new episodes.</p>

<p><strong>Jordan, Jesse, Go!</strong> - <a href="http://feeds.feedburner.com/thornmorris">http://feeds.feedburner.com/thornmorris</a></p>

<p>Pretty much the same as TSOYA: The College Years, although down to two hosts from the original trio, and recorded now instead of years ago.  This also has comedy-celebrity guests like Judge John Hodgman.</p>

<p><strong>PopSci Podcasts</strong> - <a href="http://www.popsci.com/podcasts/">http://www.popsci.com/podcasts/</a></p>

<p>Eight to nine minutes of Jonathan Coulton interviewing people involved with stories in Popular Science.  A framing device claiming that he&#8217;s doing all the interviews in an empty office on the moon provides an excuse for the low quality of the audio (it&#8217;s recorded via Skype)</p>

<p><strong>Escape Pod</strong> - <a href="http://escape.extraneous.org/">http://escape.extraneous.org/</a></p>

<p>When commutes and local travel cause me to burn through all of the new episodes of the above, it&#8217;s time to hit the well of Escape Pod, the best short-story podcast I&#8217;ve found.  Focusing on science fiction short stories, this usually runs in the 20-30 minute range.  They actually pay their authors as well, which is excellent.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.williamsburger.com/wb/archives/podcast-commute/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Public Transportation Badge</title>
		<link>http://www.williamsburger.com/wb/archives/public-transportation-badge</link>
		<comments>http://www.williamsburger.com/wb/archives/public-transportation-badge#comments</comments>
		<pubDate>Tue, 15 Aug 2006 17:05:34 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
		
	<category>Technology</category>
		<guid isPermaLink="false">http://www.williamsburger.com/wb/archives/public-transportation-badge</guid>
		<description><![CDATA[From b3co.com comes this neat little toy for transit geeks like me to make a list of the public transportation systems they&#8217;ve ridden.






















Make your own at b3co.com



It&#8217;s low on features, in that there&#8217;s no concept of stored state, user accounts, or Google Map integration, but it&#8217;s a fun toy nonetheless.  I&#8217;d love if it [...]]]></description>
			<content:encoded><![CDATA[<p>From <a href="http://metro.b3co.com" title="b3co">b3co.com</a> comes this neat little toy for transit geeks like me to make a list of the public transportation systems they&#8217;ve ridden.</p>

<div style="border:1px solid black; padding: 5px;">
<img src='http://metro.b3co.com/logos/barcelona.gif' title='barcelona'>
<img src='http://metro.b3co.com/logos/atlanta.gif' title='atlanta'>
<img src='http://metro.b3co.com/logos/berlin-s.gif' title='berlin s'>
<img src='http://metro.b3co.com/logos/berlin-u.gif' title='berlin u'>
<img src='http://metro.b3co.com/logos/boston.gif' title='boston'>
<img src='http://metro.b3co.com/logos/chicago-l.gif' title='chicago l'>
<img src='http://metro.b3co.com/logos/london-1.gif' title='london 1'>
<img src='http://metro.b3co.com/logos/madrid.gif' title='madrid'>
<img src='http://metro.b3co.com/logos/new-york-path.gif' title='new york path'>
<img src='http://metro.b3co.com/logos/new-york.gif' title='new york'>
<img src='http://metro.b3co.com/logos/osaka.gif' title='osaka'>
<img src='http://metro.b3co.com/logos/paris.gif' title='paris'>
<img src='http://metro.b3co.com/logos/rome.gif' title='rome'>
<img src='http://metro.b3co.com/logos/prague.gif' title='prague'>
<img src='http://metro.b3co.com/logos/san-francisco-muni.gif' title='san francisco muni'>
<img src='http://metro.b3co.com/logos/san-francisco.gif' title='san francisco'>
<img src='http://metro.b3co.com/logos/tokyo.gif' title='tokyo'>
<img src='http://metro.b3co.com/logos/taipei.gif' title='taipei'>
<img src='http://metro.b3co.com/logos/washington.gif' title='washington'>
<div style="text-align: center; font-size:smaller;">
Make your own at <a href="http://metro.b3co.com" title="Metros from the world">b3co.com</a>
</div>
</div>

<p>It&#8217;s low on features, in that there&#8217;s no concept of stored state, user accounts, or <a href="http://maps.google.com" title="Google Maps">Google Map</a> integration, but it&#8217;s a fun toy nonetheless.  I&#8217;d love if it covered other rail options like <a href="http://www.mnr.org/mnr/index.html" title="MetroNorth">MetroNorth</a> and the <a href="http://www.flickr.com/photos/mrfrosted/206146228/" title="Shinkansen">Shinkansen</a>, but without some sort of easily-managed public submission process (or even a Wiki-style public management process), it&#8217;d be nigh impossible for a site to accurately cover the world&#8217;s public transport options.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.williamsburger.com/wb/archives/public-transportation-badge/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>TableFilter</title>
		<link>http://www.williamsburger.com/wb/archives/tablefilter</link>
		<comments>http://www.williamsburger.com/wb/archives/tablefilter#comments</comments>
		<pubDate>Fri, 10 Mar 2006 07:00:48 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
		
	<category>Technology</category>
		<guid isPermaLink="false">http://www.williamsburger.com/wb/archives/tablefilter</guid>
		<description><![CDATA[TableFilter is a lightweight JavaScript enhancement to standard DHTML tables, allowing a filtered view of the data by column values.  It has no external JavaScript dependencies, and a very quick, unobtrusive installation procedure.

When viewing large tables of data via a web interface, it&#8217;s often desirable to limit the visible rows to a single column&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/tablefilter" title="TableFilter">TableFilter</a> is a lightweight JavaScript enhancement to standard DHTML tables, allowing a filtered view of the data by column values.  It has no external JavaScript dependencies, and a very quick, unobtrusive installation procedure.</p>

<p>When viewing large tables of data via a web interface, it&#8217;s often desirable to limit the visible rows to a single column&#8217;s value. This can be done very efficiently through backend coding, but can require knowledge of programming languages and more access to a server environment than many users have or want.</p>

<p>In the case where the data set is large enough to be unwieldy, but not so large or business-critical to need a multi-tiered system to manage this filtering, it may be good enough to just do all filtering on the client side.</p>

<p>I began writing this after using Stuart Langridge&#8217;s excellent <a href="http://kryogenix.org/code/browser/sorttable/" title="sorttable">sorttable</a> in a number of quick &amp; dirty admin tools.  I wanted something that satisfied the principles of unobtrusive DHTML, and which allowed me to add functionality without much effort.</p>

<p><a href="/tablefilter" title="TableFilter">TableFilter</a> is in its initial version, so if anyone finds any bugs, or has any suggestions, I&#8217;d love to hear about them.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.williamsburger.com/wb/archives/tablefilter/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Yelp Badge</title>
		<link>http://www.williamsburger.com/wb/archives/yelp-badge</link>
		<comments>http://www.williamsburger.com/wb/archives/yelp-badge#comments</comments>
		<pubDate>Thu, 09 Mar 2006 14:10:30 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
		
	<category>Technology</category>
		<guid isPermaLink="false">http://www.williamsburger.com/wb/archives/yelp-badge</guid>
		<description><![CDATA[Yelp, my favorite online restaurant review site, released badge functionality yesterday.  If you take a look at the Williamsburger sidebar &#8212; just below the fold on 1024&#215;768 monitors &#8212; you&#8217;ll notice a badge featuring the most recent Williamsburger Yelp reviews.



An interesting feature Yelp&#8217;s included is the ability to have an animated change between multiple [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.yelp.com" title="Yelp">Yelp</a>, my favorite online restaurant review site, released <a href="http://www.yelp.com/blogbling" title="Yelp - Blog Bling">badge</a> functionality yesterday.  If you take a look at the <a href="/wb/" title="Williamsburger">Williamsburger</a> sidebar &#8212; just below the fold on 1024&#215;768 monitors &#8212; you&#8217;ll notice a badge featuring the most recent <a href="http://williamsburger.yelp.com" title="Williamsburger on Yelp">Williamsburger Yelp reviews</a>.</p>

<p><img src="http://static.flickr.com/35/110068687_8221c5148f_o.jpg" alt="Yelp Badge"/></p>

<p>An interesting feature Yelp&#8217;s included is the ability to have an animated change between multiple views.  Williamsburger reviews are more often than not clustered in the East Village, Williamsburg, and Park Slope, so the way the map refocuses itself is very nice.  They&#8217;ve also made properties like the animation speed, badge size, and colors configurable to allow better integration into a site.</p>

<p>The Yelp badge does seem to have a bug or two in Firefox as of the original date of this posting, one of which is pretty major.  When the map initializes, one review&#8217;s popup window opens by default, and it&#8217;s impossible to get it to close.  This doesn&#8217;t happen in IE, and it only happens intermittently in Firefox, so I suspect it&#8217;s difficult to reproduce.  It&#8217;s brand new functionality, though, and it went into production with a <a href="http://blog.yelp.com/2006/03/much_love_going.html" title="Yelp Blog">bunch of other new features</a> this week, so I suspect it&#8217;ll be fixed shortly.</p>

<p>Get your own badge <a href="http://www.yelp.com/blogbling" title="Yelp - Blog Bling">here</a>.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.williamsburger.com/wb/archives/yelp-badge/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Firefox Extensions</title>
		<link>http://www.williamsburger.com/wb/archives/firefox-extensions</link>
		<comments>http://www.williamsburger.com/wb/archives/firefox-extensions#comments</comments>
		<pubDate>Mon, 06 Mar 2006 09:25:18 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
		
	<category>Technology</category>
		<guid isPermaLink="false">http://www.williamsburger.com/wb/archives/firefox-extensions</guid>
		<description><![CDATA[Firefox is a widely popular browser among technologists, in no small part for its easy customization with user-contributed extensions.  I install the following extensions on every machine I use.

Core Functionality




SessionSaver .2 (Extension)

Considering how frequently Firefox crashes on both my Windows XP and Mac OS X machines, SessionSaver is a life saver.





Adblock (Extension)

I have a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mozilla.com/firefox/" title="Firefox">Firefox</a> is a widely popular browser among technologists, in no small part for its easy customization with user-contributed extensions.  I install the following extensions on every machine I use.</p>

<p><strong>Core Functionality</strong></p>

<ul>
<li>
<p>
SessionSaver .2 (<a href="https://addons.mozilla.org/extensions/moreinfo.php?id=436">Extension</a>)
</p><p>
Considering how frequently Firefox crashes on both my Windows XP and Mac OS X machines, SessionSaver is a life saver.
</p>
</li>

<li>
<p>
Adblock (<a href="https://addons.mozilla.org/extensions/moreinfo.php?id=10">Extension</a>)
</p><p>
I have a difficult time using the internet at all on computers which don&#8217;t have this installed.  I suppose I&#8217;m depriving some sites of revenue, but the sheer joy of making flashing monkey banners leave my screen far outweighs any guilt here.
</p>
</li>

<li>
<p>
Tab Mix Plus (<a href="https://addons.mozilla.org/extensions/moreinfo.php?id=1122">Extension</a>)
</p><p>
Tab Mix Plus gives you more control over Firefox&#8217;s tabs.  I have my suspicions that this occasionally causes trouble with JavaScript-intense sites, as I&#8217;ve noticed errors pop up in my FireBug display.  The abilities to re-order tabs and force address bar changes to spawn new tabs are very convenient.
</p>
</li>

<li>
<p>
<a href="http://www.bugmenot.com/" title="BugMeNot">BugMeNot</a> (<a href="http://roachfiend.com/archives/2005/02/07/bugmenot/">Extension</a>)
</p><p>
BugMeNot is absolutely essential for reading sites like the <a href="http://www.nytimes.com">New York Times</a> or the <a href="http://www.washingtonpost.com">Washington Post</a>, who confusingly still mandate registration to read the free content.  This extension cuts the trip to bugmenot.com out of reading the news. 
</p>
</li>
</ul>

<p><strong>Thirdparty Integration</strong></p>

<p>These extensions really only have value if you use these sites.  I&#8217;m an avid user of all three, so I get a great deal of mileage out of them.</p>

<ul>
<li>
<p>
<a href="http://del.icio.us/" title="del.icio.us">Del.icio.us</a> (<a href="http://del.icio.us/help/firefox/extension">Extension</a>)
</p><p>
With a simple toolbar &#8220;Tag&#8221; button, posting to del.icio.us becomes an easy task.
</p>
</li>

<li>
<p>
<a href="http://gmail.com" title="GMail">GMail</a> Notifier (<a href="https://addons.mozilla.org/extensions/moreinfo.php?id=173">Extension</a>)
</p><p>
The GMail Notifier is a simple grey / red status bar indicator with a number letting you know how many unread messages you have.  The only problem is a bug preventing the notifier from consistently logging back in if disconnected, so the notifier can sometimes stay grey for a day or two until you get suspicious and check.
</p>
</li>

<li>
<p>
<a href="http://www.bloglines.com" title="Bloglines">Bloglines</a> Toolkit (<a href="http://www.bloglines.com/help/firefox">Extension</a>)
</p><p>
This extension has two parts: another simple notifier (a blue icon with a additional red dot for unread posts), and additional options in the context menu to help add new feeds to your Bloglines account.  The context menu options seem to have a lot of trouble consistently functioning under Firefox 1.5, though, which can lead to a lot of frustration.
</p>
</li>
</ul>

<p><strong>Developer Tools</strong></p>

<ul>
<li>
<p>
<a href="http://www.joehewitt.com/software/firebug/" title="FireBug">FireBug</a> (<a href="https://addons.mozilla.org/extensions/moreinfo.php?id=1843">Extension</a>)
</p><p>
Allowing far more powerful JavaScript debugging than Firefox&#8217;s already reasonably good native console, FireBug has the additional benefits of integration into the status bar and inline display of DOM element data.  This extension also provides the ability to monitor XMLHttpRequest activity in detail, which is hugely useful when debugging JavaScript apps.
</p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRSS>http://www.williamsburger.com/wb/archives/firefox-extensions/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Google Censorship Viewer: US vs. China</title>
		<link>http://www.williamsburger.com/wb/archives/google-us-vs-china</link>
		<comments>http://www.williamsburger.com/wb/archives/google-us-vs-china#comments</comments>
		<pubDate>Tue, 31 Jan 2006 21:09:04 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
		
	<category>Technology</category>
		<guid isPermaLink="false">http://www.williamsburger.com/wb/archives/google-us-vs-china</guid>
		<description><![CDATA[

On Wednesday, 25 January 2006, Google began providing filtered search results on Google.CN, contributing to the Chinese government&#8217;s ongoing
censorship of the internet.  This side-by-side viewer is intended to illustrate the implications of this censorship by providing side-by-side comparisons for search terms.

A few interesting queries:


Tiananmen (Images)
Falun Gong (Images)
Taiwan Independence (Web Search)


It seems that, even for [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/google" title="Google Censorship Viewer"><img src="http://static.flickr.com/36/93799605_4c546300ed_m.jpg" width="240" height="177" alt="Search Censorship Viewer, US vs. China (Google)" /></a></p>

<p>On Wednesday, 25 January 2006, <a href="http://www.google.com">Google</a> began providing filtered search results on <a href="http://www.google.cn">Google.CN</a>, contributing to the Chinese government&#8217;s <a href="http://en.wikipedia.org/wiki/Internet_censorship_in_mainland_China">ongoing
censorship</a> of the internet.  <a href="/google">This side-by-side viewer</a> is intended to illustrate the implications of this censorship by providing side-by-side comparisons for search terms.</p>

<p>A few interesting queries:</p>

<ul>
<li><a href="/google/?q=tiananmen&#038;type=i" title="Tiananmen (Images)">Tiananmen (Images)</a></li>
<li><a href="/google/?q=falun+gong&#038;type=i" title="Falun Gong (Images)">Falun Gong (Images)</a></li>
<li><a href="/google/?q=taiwan+independence&#038;type=s" title="Taiwan Independence (Web Search)">Taiwan Independence (Web Search)</a></li>
</ul>

<p>It seems that, even for terms like &#8220;<a href="/google/?q=democracy&amp;type=s" title="Democracy (Web Search)">democracy</a>&#8221; and &#8220;<a href="/google/?q=freedom&amp;type=s" title="Freedom (Web Search)">freedom</a>&#8220;, Google.CN still returns a reasonably good spread of links.  Whether or not these pages can be accessed from within China itself is a far different issue, of course.</p>

<p>Please leave a comment if you find any search terms with frighteningly different results between the two versions; I&#8217;d be interested what other people can find.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.williamsburger.com/wb/archives/google-us-vs-china/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>WordPress OpenSearch, v1.1</title>
		<link>http://www.williamsburger.com/wb/archives/opensearch-v-1-1</link>
		<comments>http://www.williamsburger.com/wb/archives/opensearch-v-1-1#comments</comments>
		<pubDate>Sat, 28 Jan 2006 20:19:29 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
		
	<category>Technology</category>
		<guid isPermaLink="false">http://www.williamsburger.com/wb/archives/opensearch-v-1-1</guid>
		<description><![CDATA[

The OpenSearch API provides a flexible common standard for XML-powered searches.  WordPress OpenSearch 1.0 worked on WordPress 1.5, but a few changes in the way WordPress deals with DB configuration and HTTP GET parameters caused it to fail in WordPress 2.0.  Thanks to tips from James E. Robinson, III, version 1.1 of this [...]]]></description>
			<content:encoded><![CDATA[<p><a title="WordPress OpenSearch, v1.0" href="http://www.flickr.com/photos/williamsburger/30506349/"><img width="240" height="174" alt="WordPress OpenSearch, v1.0" src="http://photos22.flickr.com/30506349_48d0bc3679_m.jpg" /></a></p>

<p>The <a href="http://opensearch.a9.com">OpenSearch API</a> provides a flexible common standard for XML-powered searches.  <a href="/wb/archives/opensearch-v-1-0">WordPress OpenSearch 1.0</a> worked on WordPress 1.5, but a few changes in the way WordPress deals with DB configuration and HTTP GET parameters caused it to fail in WordPress 2.0.  Thanks to tips from <a href="http://www.robinsonhouse.com/2005/12/31/wp-opensearch-10-fix-for-wp-20/">James E. Robinson, III</a>, version 1.1 of this plugin now wraps <a href="http://www.wordpress.org/">WordPress 2.0</a>&#8217;s search functionality.  This code should be generic enough to allow anyone to quickly add OpenSearch RSS feed functionality to a WordPress 2.0 site.</p>

<p>The source of version 1.1 is freely available for download <a href="/wb/code/os-src-1.1.tgz">here</a>.</p>

<p><a id="more-192"></a>Here are six quick steps to getting your WordPress blog running an OpenSearch RSS feed:</p>

<p><strong>Step 1</strong></p>

<p>Download the <a href="/wb/code/os-src-1.1.tgz">WordPress OpenSearch code</a>.</p>

<p><strong>Step 2</strong></p>

<p>Unpack the tgz contents into some directory under your wordpress installation.  I chose /wp-content/code-plugins/wp-opensearch/.  The &#8220;code-plugins&#8221; part isn&#8217;t strictly necessary; that&#8217;s just where I happened to put the files, as I didn&#8217;t feel right putting them in the plugins/ directory without first figuring out how to integrate the on/off switch with the WordPress admin interface.  The php files do have relative require statements which access WordPress&#8217;s wp-blog-header.php, so being 3 directories down is important (unless you want to go to the small effort of changing the &#8220;../../..&#8221; values to reflect your directory structure).</p>

<p><strong>Step 3</strong></p>

<p>Replace logo.gif with your own 64 x 64 pixel image.</p>

<p><strong>Step 4</strong></p>

<p>Open up description.php and change whatever you like.  Many values have been prefilled for your convenience.  The ones you should be sure to replace are the tags, sample search, and my name and email address, unless you feel like making me more popular than I should be.</p>

<p><strong>Step 5</strong></p>

<p>Edit your .htaccess file so that the paths hardcoded in the PHP files will match up with the actual file locations on your site.  Here&#8217;s a snippet from my .htaccess file, as an example.  Be sure to add this before the line containing &#8220;# BEGIN WordPress&#8221;, or the broadly-scoped default WordPress rewrites may override yours.</p>

<pre># BEGIN OpenSearch

&lt;IfModule mod_rewrite.c&gt;

RewriteRule ^os-query?(.*)$ /wb/wp-content/code-plugins/wp-opensearch/wp-opensearch.php?$1 [QSA,L]

RewriteRule ^os-description$ /wb/wp-content/code-plugins/wp-opensearch/description.php [QSA,L]

RewriteRule ^os-logo.gif$ /wb/wp-content/code-plugins/wp-opensearch/logo.gif [QSA,L]

&lt;/IfModule&gt;

#END OpenSearch</pre>

<p><strong>Step 6</strong></p>

<p>At this point, you should be ready to use your new OpenSearch RSS feed.  Head over to <a href="http://www.a9.com">a9.com</a> and add it to your columns.  They have preview functionality which lets you debug any problems you hadn&#8217;t noticed before.</p>

<p>The API is:</p>

<pre>/os-query?s={searchTerms}&#038;itemstart={startIndex}&#038;itempage={startPage}&#038;itemlimit={count}</pre>
]]></content:encoded>
			<wfw:commentRSS>http://www.williamsburger.com/wb/archives/opensearch-v-1-1/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>WordPress 2.0 Upgrade</title>
		<link>http://www.williamsburger.com/wb/archives/wordpress-2-0-upgrade</link>
		<comments>http://www.williamsburger.com/wb/archives/wordpress-2-0-upgrade#comments</comments>
		<pubDate>Sat, 28 Jan 2006 17:39:52 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
		
	<category>Meta</category>
	<category>Technology</category>
		<guid isPermaLink="false">http://www.williamsburger.com/wb/archives/wordpress-20</guid>
		<description><![CDATA[Today, Williamsburger upgraded to WordPress 2.0.

I ran through the DB backups easily, as well as the very quick official upgrade script.  I&#8217;ve reactivated most of my plugins, although Akismet doesn&#8217;t seem to be working anymore.  I&#8217;ve fixed problems with Williamsburger Maps, as well as an issue I already knew I would need to [...]]]></description>
			<content:encoded><![CDATA[<p>Today, Williamsburger <a href="http://codex.wordpress.org/Upgrading_WordPress">upgraded to WordPress 2.0</a>.</p>

<p>I ran through the DB backups easily, as well as the very quick official upgrade script.  I&#8217;ve reactivated most of my plugins, although <a href="http://www.akismet.com/">Akismet</a> doesn&#8217;t seem to be working anymore.  I&#8217;ve fixed problems with <a href="/wb/williamsburger-maps">Williamsburger Maps</a>, as well as an issue I already knew I would need to deal with to patch the <a href="/wb/archives/opensearch-v-1-1">WordPress OpenSearch Plugin</a>.</p>

<p>The changes I needed to make to support WP 2.0 are as follows:</p>

<ol>
    <li>The .htaccess file needs to have all non-WordPress regexp&#8217;s <em>before</em> the WordPress section, or else the new default rules will simply override any additional rules you&#8217;ve added.  This appears to be a change since Wordpress 1.5, where your custom regexp&#8217;s needed to be <em>after</em> the WordPress section.</li>
    <li>If you want to directly access a HTTP GET parameter, you can&#8217;t simply reference the variable by name, as is often the case with PHP, but instead need to use the internal $_GET function, as such:
<pre>
  $id = $_GET['id'];
</pre>
Thanks to <a href="http://www.robinsonhouse.com/2005/12/31/wp-opensearch-10-fix-for-wp-20/">James E. Robinson, III</a>&#8217;s post explaining how to patch my OpenSearch plugin for this tip.</li>
    <li>Something strange is going on with relative links within JavaScript GXmlHttp.create calls.  Previously, this code worked fine (there&#8217;s a .htaccess redirect behind the scenes, but I haven&#8217;t changed that):
<pre>
  request.open( 'GET',
                'wbmaps-map-info-' + WbMaps.Version + '.php?id=' + mapId,
                false );
</pre>
With WordPress 2.0, I needed to change this to the following:
<pre>
  request.open( 'GET', 
                '/wb/wbmaps-map-info-' + WbMaps.Version + '.php?id=' + mapId,
                false );
</pre>
Note the addition of the absolute directory path on my server, something I&#8217;d obviously prefer not to need to hardcode into JavaScript.</li>
    <li><p>The default editor for managing posts provided by WordPress 2.0 fails miserably when formatting the interiors of &lt;pre&gt; tags.  Granted, this isn&#8217;t an issue that most writers need to care about, but considering the tool offers an &#8220;edit as HTML&#8221; button, one would hope that it would at least attempt to respect what&#8217;s been typed into that field.  Also, in the case of Williamsburger, there are enough code snippets posted that &lt;pre&gt; absolutely must work as expected.</p>

<p>Additionally, the Markdown plugin provided with WordPress 2.0 has major troubles with &lt;ol&gt; and &lt;ul&gt; elements within table &lt;td&gt;&#8217;s, turning them into long hex strings, and the Textile plugin inserts unwanted &lt;br&gt;&#8217;s between &lt;li&gt; elements.  None of this behavior is appropriate, although Markdown&#8217;s problems are particularly unacceptable.  Markdown worked fine in WordPress 1.5, so I suspect it simply needs patching for WordPress 2.0, especially considering its &#8220;Extra&#8221; version is the eventual solution I&#8217;m now using.</p>

<a href="http://www.michelf.com/projects/php-markdown/">PHP Markdown Extra 1.0.1</a> seems to solve all of the other plugins&#8217; problems, and my posts now render as they used to, although it seems that multiple carriage returns within &lt;li&gt;&#8217;s don&#8217;t seem to act as they do outside of &lt;li&gt;&#8217;s, causing some mashed-together paragraphs if extra attention isn&#8217;t paid to adding your own &lt;p&gt; tags.</li>
</ol>
]]></content:encoded>
			<wfw:commentRSS>http://www.williamsburger.com/wb/archives/wordpress-2-0-upgrade/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Simple Rules For Clarity In Code</title>
		<link>http://www.williamsburger.com/wb/archives/simple-rules-for-clarity-in-code</link>
		<comments>http://www.williamsburger.com/wb/archives/simple-rules-for-clarity-in-code#comments</comments>
		<pubDate>Thu, 26 Jan 2006 16:29:56 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
		
	<category>Technology</category>
		<guid isPermaLink="false">http://www.williamsburger.com/wb/?p=189</guid>
		<description><![CDATA[As a developer, I constantly find myself reading code, sometimes with its developer at my side to clear up ambiguities, but obviously, far more frequently, the author is nowhere in the vicinity.  Maybe I&#8217;m trying to sort out a bug, maybe I&#8217;m trying to figure out functionality, or maybe I&#8217;m trying to optimize performance. [...]]]></description>
			<content:encoded><![CDATA[<p>As a developer, I constantly find myself reading code, sometimes with its developer at my side to clear up ambiguities, but obviously, far more frequently, the author is nowhere in the vicinity.  Maybe I&#8217;m trying to sort out a bug, maybe I&#8217;m trying to figure out functionality, or maybe I&#8217;m trying to optimize performance.  My first priority is to understand as much as possible about the code while wasting as little as possible time and effort.</p>

<p>What simple steps can developers take to help out the next reader down the line?</p>

<p><a id="more-189"></a>I&#8217;m not taking into account vastly more important (but more difficult to engender and enforce) practices like good design, refactoring, unit testing, and code reviews; the intent here is to document steps which require little effort but return large gains in readability.  Any examples here are in Java, as that&#8217;s the language I&#8217;m most familiar with lately, but the same principles are applicable to most programming projects.</p>

<ol>
<li><b>Define Formatting Standards</b>

<p>
A major barrier to understanding code in a code base maintained by a large team is the presence of disparate code formatting.  Developers are often fanatical about their personal style; arguments about numbers of spaces and locations of brackets can get pretty vehement.  Without explicit attention, this results in a code base with wildly different styles, sometimes even within the same file.  Keeping the code style variance in check reduces the amount of effort needed to mentally parse code.
</p>

<p>
Using an IDE like <a href="http://www.eclipse.org/">Eclipse</a> or <a href="http://www.jetbrains.com/idea/">IntelliJ</a>, it&#8217;s not difficult to create formatting rules for a code base.  Take advantage of this to ensure that code ends up in your common standard.  Auto-formatting tools (e.g., <a href="http://jalopy.sourceforge.net">Jalopy</a>) can also be made to work as IDE plugins or ant scripts, enforcing a common style while still allowing recalcitrant developers to continue coding in their own personal style.
</p>

<p>
Integrating an open source tool like <a href="http://jcsc.sourceforge.net/">JCSC</a> or <a href="http://checkstyle.sourceforge.net/">Checkstyle</a> into your ant build scripts isn&#8217;t a bad idea either.  With this, you can tie code formatting into your continuous integration environment, or, if you have more draconian leanings, you can simply cause developer builds to fail if the style checks have failed.  In working in large, highly geographically diverse teams, I&#8217;ve often found the latter method to be more effective, especially in keeping new team members in line.
</p>
</li>

<li><b>Use Comments Wisely</b>

<p>
Comments must describe why, never how.
</p>

<p>
I can&#8217;t count the number of times I&#8217;ve seen comments like the following:
<pre>
  // add value to list
  list.add( value );
</pre>
In this simple case, the comment just doesn&#8217;t add any value, and is a distraction.
</p>

<p>
In worse cases, when the code is incomprehensible without comments, a far better solution than writing comments is to clean up the code.  The need for comments to describe logic is an indicator that this code is too convoluted, and should be cleaned up.  <a href="http://www.martinfowler.com">Fowler</a> calls these comments &#8220;deodorant&#8221;, hiding the smell of bad code.
</p>
</li>

<li><b>Choose Meaningful Names</b>

<p>
At a previous job, we had the following three books on hand at all times: <a href="http://www.amazon.com/exec/obidos/redirect?tag=williamsburge-20%26link_code=xm2%26camp=2025%26creative=165953%26path=http://www.amazon.com/gp/redirect.html%253fASIN=0201633612%2526tag=williamsburge-20%2526lcode=xm2%2526cID=2025%2526ccmID=165953%2526location=/o/ASIN/0201633612%25253FSubscriptionId=0EMV44A9A5YT1RVDGZ82">Design Patterns</a>, a thesaurus, and a dictionary.  Any time we wanted to name a class, or encountered any confusion about a variable&#8217;s name, out came one or more of these tomes.  Design Patterns was usually the best of the three to refer to, if only to support industry standards and wider understandability, but having the other two around always made for some interesting discussions.
</p>
</li>

<li><b>Avoid Acronyms &#038; Abbreviations</b>

<p>
Shortening words results in confusion.  Different people abbreviate things different ways, and the accuracy lost in the abbreviation far outweighs the characters saved by writing shorter code.  The problem increases when a team includes developers whose first language isn&#8217;t English.
</p>

<p>
Some industry-standard acronyms are necessary and understandable by any developer (e.g., XML, HTML).  Feel free to use these, especially as they&#8217;re often in thirdparty package, class, and method names.
</p>

<p>
This is not to say don&#8217;t ever shorten variable names.  A misinterpretation of this I&#8217;ve seen far too frequently contributing to overly verbose code is the following:
<pre>
  SpecialSellableProduct specialSellableProduct = new SpecialSellableProduct( );
</pre>
</p>

<p>
It&#8217;s just fine, especially if the method is fairly short, and there aren&#8217;t any other variable names which could be mistaken for this one, to write something like:
<pre>
  SpecialSellableProduct product = new SpecialSellableProduct( );
</pre>
</p>

<p>
Succinct, to the point, and is better than this acronym anti-pattern:
<pre>
  SpecialSellableProduct ssProduct = new SpecialSellableProduct( );
</pre>
</p>

<p>
Or this abbreviation anti-pattern:
<pre>
  SpecialSellableProduct specSellProd = new SpecialSellableProduct( );
</pre>
</p>

<p>
Also, avoid practices like <a href="http://en.wikipedia.org/wiki/Hungarian_notation">Hungarian notation</a>. Appending/prepending letters to indicate variable type (nThings for ints, ISomething for interfaces) was very useful in the days of text-editors.  At this point, though, IDEs rule the development marketplace, and can be configured to distinguish types of variables with color or emphasis.
</p>
</li>

<li><b>Ban Inline Source Control</b>

<p>
Expandable change logs within files duplicate information readily found in your source control system (e.g., CVS&#8217;s $Log$), and don&#8217;t add value.  And if there are lines of text adding zero value to your code, they&#8217;re directly reducing the clarity of that code.  These can also lead to source control issues, and certainly make manual diffs more complicated.
</p>
</li>
</ol>

<p>Applying these practices to a development team can give relatively quick benefits, although as always, the way these are communicated is key.  Be sure to focus on maintainability costs, as this has obvious monetary justification.  It can help to adopt a common standard (like <a href="http://java.sun.com/docs/codeconv/">Sun</a>&#8217;s), even if you disagree with it as a team lead, because then at least the onus of defending specific subjective style choices is deflected onto a third party.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.williamsburger.com/wb/archives/simple-rules-for-clarity-in-code/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>
