<?xml version="1.0" encoding="utf8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Minh’s Notes</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/" />
    <link rel="self" type="application/atom+xml" href="http://notes.1ec5.org/atom.xml" />
    <id>tag:notes.1ec5.org,2008-08-20://2</id>
    <updated>2009-07-12T18:41:14Z</updated>
    <subtitle>Thinking too hard, for your viewing pleasure…</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.24-en</generator>

<entry>
    <title>What we watched before YouTube</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2009/07/10/watchman.html" />
    <id>tag:notes.1ec5.org,2009://2.2191</id>

    <published>2009-07-10T15:59:31Z</published>
    <updated>2009-07-12T18:41:14Z</updated>

    <summary>After I introduced the HeadSprout back in April, several people asked me how I came up with the idea. Meet the Sony Watchman.</summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="Gems" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Television" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="nostalgia" label="nostalgia" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="television" label="television" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>After I <a href="http://notes.1ec5.org/archives/2009/04/01/headsprout.html" rel="bookmark" title="Introducing the HeadSprout (Wednesday, April 1st, 2009)">introduced the HeadSprout</a> back in April, several people asked me how I came up with the idea of a bike- and head-mounted digital television system. The best answer I could give was that a <acronym title="television" class="initialism">TV</acronym> antenna and a bike helmet found themselves both in my field of vision at the same time.</p>

<p>The other day, I read a <cite class="website publication"><acronym title="British Broadcasting Corporation" class="initialism">BBC</acronym> Magazine</cite> article asking a teenager to <a href="http://news.bbc.co.uk/2/hi/uk_news/magazine/8117619.stm" rel="bookmark" title="BBC News Magazine: Giving up my iPod for a Walkman">trade his iPod for a Walkman</a> for a week. Feeling nostalgic as I always do, I went rummaging through a drawer at home and found my old <a href="http://en.wikipedia.org/wiki/Sony_Watchman" rel="bookmark" title="Wikipedia: Sony Watchman">Sony Watchman</a>. Slightly before my time, portable <acronym title="television" class="initialism">TV</acronym> gadgets were all the rage. At some point, my family purchased an <acronym class="initialism">FD</acronym>-250 model, probably at Sears, and it became my favorite toy growing up.</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: block; width: 200px; margin-left: auto; margin-right: auto;"><a href="http://notes.1ec5.org/archives/2009/07/10/watchman-overview.jpg" type="image/jpeg" class="center mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;"><img src="http://notes.1ec5.org/archives/assets_c/2009/07/watchman-overview-thumb-200x228.jpg" width="200" height="228" alt="Sony Watchman FD-250" /></a><p class="caption fine-print">The Watchman <acronym class="initialism">FD</acronym>-250 has the size and weight of a small book, but the antenna extends well over a foot.</p></span></p>

<p>The Watchman was my poor-man&rsquo;s introduction to <a href="http://en.wikipedia.org/wiki/DXing" rel="bookmark" title="Wikipedia: DXing"><acronym class="initialism">DX</acronym>ing</a>. Whenever my family took a summer road trip, I&rsquo;d bring the device along with me and tune in to various stations along the way, collecting their call letters as we entered large metropolitan areas. On the way to <a href="http://notes.1ec5.org/archives/2003/07/06/vacation_anecdotes.html" rel="bookmark" title="Back&hellip; again (Sunday, July 6th, 2003)">New Orleans</a>, I would pick up numerous Louisville, Nashville, Chattanooga, and Birmingham stations this way.</p>

<p>It still works, after you pop in a fresh battery or two. The first thing you notice is how much consumer electronics have changed within just twenty-odd years. Get it? Watchman, Walkman? You know, Walkman, predecessor to the <acronym title="Compact Disc" class="initialism">CD</acronym> player? Like large <acronym title="MPEG-3" class="initialism">MP3</acronym> players? Um, before iPods?</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: block; width: 250px; margin-left: auto; margin-right: auto;"><a href="http://notes.1ec5.org/archives/2009/07/10/watchman-screen.jpg" type="image/jpeg" class="center mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;"><img src="http://notes.1ec5.org/archives/assets_c/2009/07/watchman-screen-thumb-250x187.jpg" width="250" height="187" alt="Sony Watchman screen" title="Fair use for the purpose of illustrating the device&rsquo;s screen shape and reception quality." /></a><p class="caption fine-print">The Watchman&rsquo;s screen is angled downward and pincushioned inward. Shown here is some old movie on channel 38. Even if you watched it on a state-of-the-art digital <acronym title="television" class="initialism">TV</acronym>, it&rsquo;d still be in black-and-white, so no loss here.</p></span></p>

<p>This particular Watchman model had a black-and-white <acronym title="cathode ray tube" class="initialism">CRT</acronym> display. Actually, to give the device a less awkward form factor, the screen is just a mirror, angled to reflect the image produced by the <acronym title="cathode ray tube" class="initialism">CRT</acronym> tube (below the screen in the photos). The fact that the screen is black-and-white shouldn&rsquo;t be that surprising: in the early 1990s, you could still find plenty of full-size, black-and-white <acronym title="television" class="initialism">TV</acronym> sets at family-run electronics stores (another relic of that decade).</p>

<p>Since nearly all Cincinnati-area stations stopped broadcasting in analog sometime last month, the Watchman can only receive three stations: <acronym title="World&rsquo;s Largest Wireless Television" class="initialism">WLWT</acronym> 5, the Cincinnati <acronym title="National Broadcasting Company" class="initialism">NBC</acronym> affiliate; <acronym title="W Kathrine Elizabeth Flynn" class="initialism">WKEF</acronym> 22, the Dayton <acronym title="American Broadcasting Company" class="initialism">ABC</acronym> affiliate; and <acronym title="WB Queen City" class="initialism">WBQC</acronym> 38, an independent station in Cincinnati that airs kung-fu movies and similar fare. As a low-power station, <acronym title="WB Queen City" class="initialism">WBQC</acronym> isn&rsquo;t required to give up their analog signal yet, while the other two are airing nothing but <acronym title="digital television" class="initialism">DTV</acronym> infomercials in a federally-mandated loop. The reception isn&rsquo;t spectacular in any case&nbsp;&ndash; unidirectional <acronym title="very high frequency" class="initialism">VHF</acronym> antennae never work well this far out from the city&nbsp;&ndash; but the Watchman was built for mobility, not kung-fu movies.</p>

<p>If I had the right cables, I could restore the Watchman to full working condition by hooking a converter box up to its <acronym title="audio-visual" class="initialism">A/V</acronym> In jack. Then I could watch digital <acronym title="television" class="initialism">TV</acronym> in glorious black-and-white, and it would be plenty more convenient than HeadSprout. But that&rsquo;s a project for another day.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Introducing the HeadSprout</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2009/04/01/headsprout.html" />
    <id>tag:notes.1ec5.org,2009://2.2079</id>

    <published>2009-04-02T04:30:00Z</published>
    <updated>2009-04-03T04:04:38Z</updated>

    <summary>For the past three months, I along with five partners have toiled in stealth mode to build a disruptive product that will revolutionize media consumption as we know it, by synergizing television watching with bicycle riding. We are proud to announce the fruits of our labor.</summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="Entertainment" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Gems" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Humor" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="aprilfools" label="april fools" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="biking" label="biking" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="humor" label="humor" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="television" label="television" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p><span class="mt-enclosure mt-enclosure-image right"><a href="http://notes.1ec5.org/archives/2009/04/01/overview.jpg" type="image/jpeg" rel="bookmark"><img src="http://notes.1ec5.org/archives/assets_c/2009/04/overview-thumb-100x229.jpg" width="100" height="229" class="mt-image-right" alt="" title="Me, captivated by an episode of Mister Rogers&rsquo; Neighborhood" /></a></span></p>

<p>For the past three months, I along with five partners have toiled in stealth mode to build a disruptive product that will revolutionize media consumption as we know it, by synergizing television watching with bicycle riding. Leveraging unparalleled loyalties to both recreational activities, it is our intent to forge a new market based on mobile multimedia and capitalize upon emerging opportunities.</p>

<p>In short: we have developed the <strong>HeadSprout</strong>, the world&rsquo;s first fully-integrated bike- and head-mounted digital television system.</p>]]>
        <![CDATA[<p>Mobile television has been a tragically untapped market thus far in the United States. Because the vast majority of television viewers are accustomed to consuming broadcasting from the comfort of a living room, various companies have failed to make significant inroads in taking television out of the house.</p>

<p><span class="mt-enclosure mt-enclosure-image left"><a href="http://notes.1ec5.org/archives/2009/04/01/closeup.jpg" type="image/jpeg" rel="bookmark"><img src="http://notes.1ec5.org/archives/assets_c/2009/04/closeup-thumb-100x175.jpg" width="100" height="175" class="mt-image-left" alt="" title="The inconspicuous HeadSprout head mount" /></a></span><br />
Our approach is to start with perhaps the most mobile segment of the American population: college students. Typically without the resources to own a car, many college students are confined to their bicycles as their only means of transportation. Additionally, the college environment has historically seen less broadcast entertainment, since many students find themselves without the time to passively watch television or listen to the radio, and most do not have access to a living room. Paradoxically, individuals from this demographic tend to follow sporting events and other regularly scheduled programming more fanatically than younger or indeed older Americans.</p>

<p>In short: don&rsquo;t you wish you could keep up with March Madness even while biking to class? Of course you do. Wouldn&rsquo;t it be great to magically sprout antennae and continue watching the live coverage? Of course it would.</p>

<p>And that&rsquo;s where HeadSprout shines. Using our patent-pending, non-invasive head mount technology, HeadSprout provides a quick and easy way to keep a bidirectional <acronym title="very high frequency" class="initialism">VHF</acronym> receiver attached to the part of you that receives the best television reception: your head. This configuration transforms a previously frustrating process&nbsp;&ndash; adjusting the antenna for improved reception&nbsp;&ndash; into a very natural action: cocking ones head in various directions. The receiver is connected, via insulated wires or a coaxial cable, to a compact <acronym title="National Television System Committee" class="initialism">NTSC</acronym>/<acronym title="Advanced Television Systems Committee" class="initialism">ATSC</acronym> tuning device clipped to the bicycle frame. A <acronym title="Universal Serial Bus" class="initialism">USB</acronym> cord then runs forward to a mobile touchscreen device (sold separately), which is finally mounted to the handlebars via off-the-shelf components.</p>

<p><span class="mt-enclosure mt-enclosure-image right"><a href="http://notes.1ec5.org/archives/2009/04/01/display.jpg" type="image/jpeg" rel="bookmark"><img src="http://notes.1ec5.org/archives/assets_c/2009/04/display-thumb-100x150.jpg" width="100" height="150" class="mt-image-right" alt="" title="The HeadSprout is simply connected to your existing mobile touchscreen device." /></a></span></p>

<p>But what about controlling the television unit? Since our apparatus is designed to integrate with a mobile touchscreen device, the obvious solution would be to stop there and force cyclists to use the touchscreen while biking. However, we found key deficiencies in this model during preliminary testing. Specifically, I involved myself in a multi-bike <a href="http://notes.1ec5.org/archives/2006/10/21/intersection.html" rel="bookmark" title="The danger of having wheels (Saturday, October 21st, 2006)">pileup in the Intersection of Death</a> while attempting to operate the touchscreen with one hand.</p>

<p>Instead, we focused on more deeply integrating the television interface with the bicycle itself. For example, we found that changing channels is analogous to the process of changing gears, familiar to all but the youngest of bikers. Therefore, channels and gears are now controlled using the same dial, typically built into one of the handlebars. We also discovered that bikers tend to shift attention away from the television screen when braking, such as at busy intersections. In our apparatus, live television is paused whenever the brakes are pressed with sufficient firmness.</p>

<p><span class="mt-enclosure mt-enclosure-image center" style="display: inline;"><a href="http://notes.1ec5.org/archives/2009/04/01/dial.jpg" type="image/jpeg" rel="bookmark"><img src="http://notes.1ec5.org/archives/assets_c/2009/04/dial-thumb-250x210.jpg" width="250" height="210" class="mt-image-center" alt="" title="The HeadSprout apparatus integrates with your bicycle&rsquo;s built-in gear shift for changing channels." /></a></span></p>

<p>It&rsquo;s simple, conceptually, but the trick is getting it all to work together. We have pioneered a safe, durable apparatus that integrates all these parts into a package that can be easily installed onto an existing bicycle. With minor modifications, it will even be possible to support tricycles, tandems, and unicycles.</p>

<p>Our current design has undergone substantial testing, and we believe it is nearly ready for more widespread use. In fact, our team has used the system religiously for the past two weeks, with excellent results. (Namely, we know all about the latest soap operas and <cite class="performance production television show tv-show">Power Rangers</cite> episodes. What an odd lot we are.)</p>

<p><span class="mt-enclosure mt-enclosure-image right"><a href="http://notes.1ec5.org/archives/2009/04/01/rear.jpg" type="image/jpeg" rel="bookmark"><img src="http://notes.1ec5.org/archives/assets_c/2009/04/rear-thumb-100x150.jpg" width="100" height="150" class="mt-image-right" alt="" title="Our exclusive head mount technology makes antenna-based reception possible." /></a></span></p>

<p>Only two minor caveats remain: first, it is usually necessary to remain completely stationary (including holding one&rsquo;s breath) in order to receive digital signals reliably. We believe this is an issue out of our control and a fault on the part of the <acronym title="Advanced Television Systems Committee" class="initialism">ATSC</acronym>. Fortunately, there is a <a href="http://people.csail.mit.edu/rahimi/helmet/" rel="bookmark" title="Ali Rahimi: On the Effectiveness of Aluminium Foil Helmets: An Empirical Study">simple workaround</a>. Second, <acronym title="very high frequency" class="initialism">VHF</acronym> antennae usually extend upwards by a few feet. We have noted a variety of responses to our unique design from passers-by, ranging from the playfully curious to the downright malicious, due to the antennae&rsquo;s prominence. With the slight vertical footprint also comes a somewhat heightened risk of brushing into trees or having low clearances pull you right off your bike.</p>

<p>In the future, we hope to eliminate the HeadSprout&rsquo;s physical footprint&nbsp;&ndash; already much less than that of 18-wheelers and earth-moving machinery&nbsp;&ndash; by engineering an <acronym title="ultra-high frequency" class="initialism">UHF</acronym> antenna into a specially-designed helmet. The effectiveness of such helmets has been <a href="http://www.arrl.org/tis/info/pdf/9303052.pdf" type="application/pdf" rel="bookmark" title="New Ham Companion: Bicycle-Mobile Antennas">proven in life-or-death situations</a>. We also plan to contract with <a href="http://www.media.mit.edu/wearables/lizzy/HUD-paper/HUD.html" rel="bookmark" title="MIT Wearable Computing: Eyeglass Heads Up Display">eyeglass <acronym title="heads-up display" class="initialism">HUD</acronym></a> manufacturers. Soon, you won&rsquo;t even need to glance away from the road to view television, thanks to an opaque image of the current channel superimposed onto your regular field of vision.</p>

<p>We concede that the world is not expecting an advance in blue sky technology from these quarters. But we are confident that it needs one. As such, we fully intend to take this concept to production by the beginning of April next year. If you or someone you know is a venture capitalist with hoards of cash and a love for sophomoric technologies, please get in touch. Also, if you are a licensed psychologist, we could probably use your help too.</p>

<p>If you would like to keep up with the latest news on our venture, please submit the short form below:</p>

<form action="http://xkcd.com/512/" method="get" onsubmit="alert('Made ya click! April Fool&rsquo;s!\n\n(Not to worry: your e-mail address was not recorded in any way.)');">
<p><label>E-mail address: <input type="text" value="" /></label> <input type="submit" value="Keep me posted!" /></p>
</form>

<p class="credit">All the photos in this post are the work of HeadSprout photo wizard <a href="http://www.stanford.edu/~agustinr/main.html" rel="bookmark" title="Agustin Online">Agustin Ramirez</a>. Happy April!</p>]]>
    </content>
</entry>

<entry>
    <title>AVIM extension is now AVIM change-around</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2009/04/01/change.html" />
    <id>tag:notes.1ec5.org,2009://2.2077</id>

    <published>2009-04-01T09:08:33Z</published>
    <updated>2009-04-02T17:51:04Z</updated>

    <summary><![CDATA[Updated: This morning, Mozilla officially renamed &ldquo;add-ons&rdquo; to &ldquo;change-arounds&rdquo;. I&rsquo;m thrilled that Mozilla is finally listening to the more pedantic parts of their user base for once.]]></summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="AVIM" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Humor" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Mozilla Firefox" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="aprilfools" label="april fools" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="humor" label="humor" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="microsoft" label="microsoft" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mozilla" label="mozilla" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>This morning, Mozilla <a href="http://blog.mozilla.com/addons/2009/04/01/changing-things-around/" rel="bookmark" title="Mozilla Add-ons Blog: Changing things around">officially renamed</a> &ldquo;add-ons&rdquo; to &ldquo;change-arounds&rdquo;. Apparently the move is <a href="http://osunick.com/2009/04/01/change-around-your-life-for-good/" rel="bookmark" title="osunick: Change-around your life for good!">intended to capitalize</a> on Barack Obama&rsquo;s campaign for President, which centered <strong>around</strong> the word &ldquo;<strong>change</strong>&rdquo;.</p>

<p>Add-ons never added to my hard drive&rsquo;s available space, and the extensions I&rsquo;ve authored never added to my bottom line. So, though I find the new name a bit awkward, I&rsquo;m thrilled that Mozilla is finally listening to the more pedantic parts of their user base for once. I just Twittered a Mozilla official, who wished to either remain anonymous or place me under an <acronym title="Non-Divulgization Agreement" class="initialism">NDA</acronym>. He assured me&nbsp;&ndash; off the record&nbsp;&ndash; that the Internet Explorer team plans to make the same change to their browser interface, possibly as soon as the next Patch Tuesday come-arounds.</p>

<p>Mozilla had planned to rename the feature &ldquo;Take-outs&rdquo;&nbsp;&ndash; reflecting the subtractive nature of many extensions and themes&nbsp;&ndash; and had already commissioned a series of cute Chinese take-out box icons. However, the nearby Lucky Wok restaurant stepped in at the last minute, threatening legal action. &ldquo;Developers need Chinese take-out for late-night coding sessions,&rdquo; explained the official, again off the record. &ldquo;You wouldn&rsquo;t believe how many bugs we&rsquo;ve traced back to the presence of pizza or <acronym title="television" class="initialism">TV</acronym> dinners in the building. You just don&rsquo;t get that with moo goo gai pan.&rdquo;</p>

<p>I&rsquo;ve just updated <a href="http://www.1ec5.org/software/avim/index.x.html" rel="bookmark" title="AVIM for Firefox"><acronym title="Advanced Vietnamese Input Method">AVIM</acronym>&rsquo;s website</a> and its <a href="https://addons.mozilla.org/en-US/firefox/addon/2947" rel="bookmark" title="Firefox Change-arounds: AVIM">listing at Firefox Change-arounds</a> to reflect the change. The Mozilla official fully expects other change-around developers to follow suit. But you didn&rsquo;t hear it from him.</p>

<p class="update">[Update] After much outcry from such Facebook groups as &ldquo;I miss OLD Firefox Add-ons!!!11!!&rdquo;, Mozilla has changed the name back. The fact that it&rsquo;s now April 2<sup>nd</sup> must&rsquo;ve factored into the decision, too.</p>]]>
        
    </content>
</entry>

<entry>
    <title>High school humor</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2009/03/15/humor_links.html" />
    <id>tag:notes.1ec5.org,2009://2.2071</id>

    <published>2009-03-15T09:38:10Z</published>
    <updated>2009-03-20T01:52:29Z</updated>

    <summary><![CDATA[Funny links from back in high school. It&rsquo;s not every year you find this kind of brilliance on Digg or Reddit.]]></summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="High School" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Summary" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web Archaeology" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="link" label="link" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="old" label="old" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="summary" label="summary" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p><span class="mt-enclosure mt-enclosure-image" class="right" style="display: block; float: right; margin: 0 0 20px 20px;"><a href="http://notes.1ec5.org/archives/2009/03/15/old-papers.jpg" type="image/jpeg" rel="bookmark"><img src="http://notes.1ec5.org/archives/assets_c/2009/03/old-papers-250x188.jpg" width="250" height="188" alt="" class="mt-image-right" /></a></span></p>

<p>I keep a folder of bookmarks filled with pages I intend to mention at some point on this blog, because they&rsquo;re just so funny or otherwise worthwhile to read. But the last time I ever drew from the &ldquo;<a href="http://notes.1ec5.org/archives/2005/11/30/catchup.html" rel="bookmark" title="A drop in the bucket (Wednesday, November 30th, 2005)">Blog About</a>&hellip;&rdquo; folder was <a href="http://notes.1ec5.org/archives/2008/01/31/october.html" rel="October through January (Thursday, January 31st, 2008)">over a year ago</a>; since then, its growth has closely paralleled that of the National Debt. The 182 bookmarks stand as a rustic testament to my penchant for procrastination, and that&rsquo;s just the ones I didn&rsquo;t lose when switching to the Mac. Though many of those links are now dead, no longer interesting, or covered copiously elsewhere, I&rsquo;m still going to post the interesting ones.</p>

<p>Well, maybe later. Instead, I thought it&rsquo;d be fun to share a few of my oldest &ldquo;good read&rdquo; bookmarks. Here are some of the webpages I added to the &ldquo;Humor&rdquo; folder back in high school, sorted by date bookmarked. Seriously: it&rsquo;s not every year you find this kind of brilliance on Digg or Reddit:</p>

<ul>
<li><a href="http://www.thesneeze.com/mt-archives/000114.php" rel="bookmark" title="The Sneeze: Steve, Don't Eat It!&nbsp;&ndash; 1991 Urkel-Os">Steve, Don't Eat It!&nbsp;&ndash; 1991 Urkel-Os</a> (bookmarked June 23<sup>rd</sup>, 2005)</li>
<li><a href="http://www.cs.utah.edu/~gk/atwork/" rel="bookmark" title="University of Utah School of Computing: Gordon Kindlmann: Under Construction">Under Construction</a> (June 22<sup>nd</sup>, 2005)&nbsp;&ndash; <a href="http://home.fuse.net/lovelandschoolspress/construct.htm" rel="bookmark" title="The Loveland Schools Press ONLINE: Sorry, We&rsquo;re Under Construction">guilty</a></li>
<li><a href="http://www.theonion.com/2056-06-22/" rel="bookmark" title="The Onion: The Onion 2056">The Onion 2056</a> (June 22<sup>nd</sup>, 2005)</li>
<li><a href="http://www.bigfatinstitute.org/" rel="bookmark" title="Big Fat Institute for Advanced Interactive Experiences">Big Fat Institute for Advanced Interactive Experiences</a> (April 11<sup>th</sup>, 2005)&nbsp;&ndash; based in Cincinnati<!-- Osgood 4 (Glendale, Ohio) --></li>
<li><a href="http://www.zug.com/pranks/credit/" rel="bookmark" title="ZUG: The Credit Card Prank">The Credit Card Prank</a> (April 1<sup>st</sup>, 2005)</li>
<li><a href="http://www.podbrix.com/" rel="bookmark" title="PodBrix">PodBrix</a> (February 27<sup>th</sup>, 2005)&nbsp;&ndash; Legos, except not</li>
<li><a href="http://www.xach.com/lisp/taste-for-the-web.html" rel="bookmark" title="xach.com: Taste for the Web">Taste for the Web</a> (February 8<sup>th</sup>, 2005)&nbsp;&ndash; a parody of <a href="http://www.paulgraham.com/articles.html" rel="bookmark" title="Paul Graham: Essays">Paul Graham</a></li>
<li><a href="http://improbable.com/airchives/paperair/volume6/v6i4/postal-6-4.html" rel="bookmark" title="Improbable Research: Postal Experiments">Postal Experiments</a> (January 21<sup>st</sup>, 2005)</li>
<li><a href="http://www.yamara.com/axe/" rel="bookmark" title="Yamara: &ldquo;Oh my god! There&rsquo;s an axe in my head.&rdquo;">&ldquo;Oh my god! There&rsquo;s an axe in my head.&rdquo;</a> (September 22<sup>nd</sup>, 2004)&nbsp;&ndash; in 112 languages</li>
<li><a href="http://technet.microsoft.com/en-us/sysinternals/bb897558.aspx" rel="bookmark" title="Microsoft TechNet: BlueScreen Screen Saver v3.2">BlueScreen Screen Saver</a> (August 28<sup>th</sup>, 2004)&nbsp;&ndash; free from Microsoft</li>
<li><a href="http://www.hopf.demon.co.uk/humour/win98.txt" type="text/plain" rel="bookmark" title="win98.txt">win98.c</a> (February 14<sup>th</sup>, 2004)</li>
<li><a href="http://meyerweb.com/eric/portfolio/cwru2k/" rel="bookmark" title="meyerweb.com: Case Western Reserve University">Case Western Reserve University, circa <del>2000</del> <ins>1900</ins></a> (September 2<sup>nd</sup>, <del>2003</del> <ins>1903</ins>)&nbsp;&ndash; <a href="http://meyerweb.com/eric/thoughts/200404.html" rel="bookmark" title="meyerweb.com: F-F-F-F-Foolin&rsquo;">background</a></li>
<li><a href="http://www.trooperpx.com/BackGrnd/sequitur.html#Anime%20Laws" rel="bookmark" title="TrooperPX: Non-Sequitur Information: Laws of Japanese Animation
">Laws of Japanese Animation</a> (September 27<sup>th</sup>, 2002)</li>
</ul>]]>
        
    </content>
</entry>

<entry>
    <title>Wrong</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2009/02/15/eval.html" />
    <id>tag:notes.1ec5.org,2009://2.2062</id>

    <published>2009-02-16T07:40:00Z</published>
    <updated>2009-03-07T02:26:07Z</updated>

    <summary><![CDATA[Were you to conduct a comprehensive survey of computer programmers, I&rsquo;d suspect that nearly all of us would rate ourselves &ldquo;above average&rdquo; programmers who keep particularly good best practices in mind at all times. Like, to avoid eval() at all costs. But I called that function&nbsp;&ndash; once&nbsp;&ndash; and got caught.]]></summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="AVIM" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="JavaScript" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Vietnamese" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="avim" label="avim" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mozilla" label="mozilla" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="programming" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>First things first: if you use version 20080728.<strong>280</strong> of my <a href="http://www.1ec5.org/software/avim/" rel="bookmark" title="1ec5.org: AVIM for Firefox"><acronym title="Advanced Vietnamese Input Method">AVIM</acronym> extension</a>, <a href="http://www.1ec5.org/software/avim/#install" rel="bookmark" title="1ec5.org: AVIM for Firefox: Installation">upgrade</a> to version 20080728.<strong>306</strong> <em>now</em>.</p>

<p>Last Friday, Adblock Plus developer Wladimir Palant refuted <a href="http://adblockplus.org/blog/five-wrong-reasons-to-use-eval-in-an-extension" rel="bookmark" title="Adblock Plus and (a little) more: Five wrong reasons to use eval() in an extension">five typical excuses</a> for calling the <code>eval()</code> function in JavaScript. I remembered that function well: take any string, pass it into <code>eval()</code>, and the string gets executed as though it were ordinary code. When I took <a href="http://crypto.stanford.edu/cs155/" rel="bookmark" title="Stanford: CS 155 Computer and Network Security">Stanford&rsquo;s hacking class</a> last spring, we developed an exploit that targeted a fictitious website&rsquo;s generous use of the function. <code>eval()</code> is the most easily abused function available to JavaScripters, because it&rsquo;s such a tantalizing shortcut. Why bother learning <acronym title="Document Object Model">DOM</acronym> Level 3 when you can call one function and move on?</p>

<p>Were you to conduct a comprehensive survey of computer programmers, I&rsquo;d suspect that <a href="http://en.wikipedia.org/wiki/Lake_Wobegon_effect" rel="bookmark" title="Wikipedia: Lake Wobegon effect">nearly all of us would rate ourselves &ldquo;above average&rdquo;</a> programmers who keep particularly <em>good</em> best practices in mind at all times. Like, to avoid <code>eval()</code> at all costs. But I called that function&nbsp;&ndash; once&nbsp;&ndash; and Wladimir caught me.</p>]]>
        <![CDATA[<p>The gory technical details go something like this: Mozilla-based applications like Firefox have user interfaces built in an <acronym title="eXtensible Markup Language" class="initialism">XML</acronym>-based language called <acronym title="XML-based User Interface Language">XUL</acronym>. Textboxes in <acronym title="XML-based User Interface Language">XUL</acronym> look kind of like textboxes in <acronym title="HyperText Markup Language" class="initialism">HTML</acronym>: <code>&lt;textbox value="foobar" /></code>.</p>

<p>JavaScript makes the interface interactive, just as it does for webpages. If you want the textbox to do something special as soon as you change its contents, you use the <code><a href="https://developer.mozilla.org/en/XUL/textbox#a-oninput" rel="bookmark" title="MDC: textbox: oninput">oninput</a></code> attribute:</p>

<blockquote>
<code>&lt;textbox value="foobar" oninput="this.value = 'barbaz';" /></code>
</blockquote>

<p>This textbox changes its text to say &ldquo;barbaz&rdquo; every time you try to type or paste something in.</p>

<p>Since <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> is an <acronym title="input method editor" class="initialism">IME</acronym>, it similarly changes the textbox&rsquo;s contents when you type in it. But for various reasons, the <code>oninput</code> attribute has no effect when <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> interferes with the text. That prevents the interface from responding properly to input in places like the Find Bar and the Library (formerly the Bookmarks Organizer).</p>

<p>So what&rsquo;s my solution? After searching for low-level, implementation-detail functions to do what I want, I settle on calling&nbsp;&ndash; naturally&nbsp;&ndash; <code>eval()</code> with the contents of the <code>oninput</code> attribute. After some quick testing to verify that it works, I ship a new version of <acronym title="Advanced Vietnamese Input Method">AVIM</acronym>. To make myself feel better about knowingly using such a dangerous function, I added this comment above the call to <code>eval()</code>:</p>

<blockquote>
<code>// Truly awful kludge</code>
</blockquote>

<p>Indeed. The problem is that, like all extensions, <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> is given more privileges than an ordinary webpage script. It can access <acronym title="application programming interface" class="initialism">API</acronym>s for everything from opening dialog boxes to saving files. With enough effort, you might even be able to get files to execute. Such privileges aren&rsquo;t usually a problem, since malicious and <a href="http://notes.1ec5.org/archives/2008/05/08/trojan.html" rel="bookmark" title="Ngựa thành Troy (Thursday, May 8th, 2008)">malware-laden</a> extensions rarely go public on the official <a href="https://addons.mozilla.org/en-US/firefox/" rel="bookmark" title="Firefox Add-ons">Firefox Add-ons</a> website.</p>

<p>But the <code>eval()</code> function doesn&rsquo;t know where the string you&rsquo;re giving it came from. That string may come from a webpage that contains a textbox with the <code>oninput</code> attribute. <code>eval()</code> just assumes you wanted it to execute exactly what you, the extension, told it to. So the string gets executed within the extension&rsquo;s scope, with all the extension&rsquo;t privileges, and with access to plenty of Mozilla&rsquo;s low-level interfaces.</p>

<p>As a concrete example, what do you think would happen if a webpage contained this <acronym title="HyperText Markup Language" class="initialism">HTML</acronym> textbox:</p>

<blockquote>
<code>&lt;input oninput="delete avim;" /></code>
</blockquote>

<p>Never mind that <code>oninput</code> isn&rsquo;t a standard <acronym title="HyperText Markup Language" class="initialism">HTML</acronym> attribute: my extension never checked, and <code>eval()</code> certainly couldn&rsquo;t be bothered to. If you have <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> enabled and start typing in this textbox, <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> winds up disabling itself.</p>

<p>Cool, huh? One could imagine doing a bit more with that line of attack.</p>

<p>After Wladimir wrote about <code>eval()</code>, I spent several hours searching for more low-level functions that would execute the <code>oninput</code> code in a safer way, but nothing seemed clean or sane enough to actually use. As usual the solution turned out simpler than I ever imagined: generate a fake <code>onInput</code> <a href="https://developer.mozilla.org/en/XUL/Events" rel="bookmark" title="MDC: Events">event</a>.</p>

<p>So, yeah: upgrade now, pretend I never made this mistake, and hope you never do either.</p>

<p class="fine-print">This post was embargoed for eight days to give <acronym title="Advanced Vietnamese Input Method">AVIM</acronym>&rsquo;s users adequate time to upgrade.</p>]]>
    </content>
</entry>

<entry>
    <title>Almost a snow day</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2009/01/29/snow.html" />
    <id>tag:notes.1ec5.org,2009://2.2061</id>

    <published>2009-01-29T12:10:00Z</published>
    <updated>2009-03-20T01:53:05Z</updated>

    <summary>Sixth grade was not a good year for me on the school bus. Every year, Loveland City Schools shuffled its bus routes around, with the intent of keeping us students on our feet. That year, my stop wound up first...</summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="Elementary School" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Life" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="life" label="life" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="loveland" label="loveland" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="snow" label="snow" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="stcolumban" label="st. columban" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>Sixth grade was not a good year for me on the school bus. Every year, <a href="http://www.lovelandschools.org/" rel="bookmark" title="Loveland Schools">Loveland City Schools</a> shuffled its bus routes around, with the intent of keeping us students on our feet. That year, my stop wound up first on the route. The long ride each morning&nbsp;&ndash; usually half an hour to school&nbsp;&ndash; exacerbated my motion sickness, keeping me under the menacing eye of the bus driver.</p>

<p>One day, a classic winter storm passes through Cincinnati. You know: snow, sleet, slush, ice, slice. I can&rsquo;t remember quite how much snow accumulated that day, but it can&rsquo;t&rsquo;ve been more than five inches. Regardless, the weather forecasters went hysterical about the <em>sheer severity</em> of the storm. Loveland, on the other hand, kept their cool. At the time, the district was hard core about staying open despite inclement weather. (I believe these days we call it &ldquo;flinty Chicago toughness&rdquo;.) Nothing like those Northern Kentucky schools that&rsquo;d shut down whenever it felt chilly outside.</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://notes.1ec5.org/archives/2009/01/29/snow.jpg" type="image/jpeg" class="mt-image-left left" style="float: left; margin: 0 20px 20px 0;"><img src="http://notes.1ec5.org/archives/assets_c/2009/01/snow-thumb-200x266.jpg" width="200" height="266" alt="" title="Snow" /></a></span></p>

<p>Still hoping for a chance snow day, I monitor all the <acronym title="television" class="initialism">TV</acronym> stations&rsquo; scrolling tickers that morning. There&rsquo;s an art to channel surfing on snow days: you switch to each channel as its ticker nears &ldquo;L&rdquo;. Little Miami, Live Oaks, Lockland&nbsp;&ndash; wait for it&nbsp;&ndash; Lynchburg. <em>Fooey.</em></p>

<p>My bus meanders along its usual route, but at normal walking speed. Due to the thick layer of ice on the roads, the driver never makes stops; instead, she coasts a bit, swings open the doors, and waves us in. One by one, we jump aboard the oversized toboggan. While the driver carefully manages the slick hills, time is ticking on my motion sickness. We&rsquo;re already plenty late for school. A few more minutes, or a couple more speed bumps, and I&rsquo;ll have to pull out the Kroger bag the driver required me to carry, just in case.</p>

<p>Just as we slide past the final stop and start across town to school, the dispatcher comes across the radio, unusually loud and clear:</p>

<blockquote title="Loveland City Schools Transportation Office">
<p><code>Base to all drivers, pull over. Repeat: <em>pull over</em>. We are determining whether to cancel school for today.</code></p>
</blockquote>

<p>The freezing, exhausted passengers on the bus erupt in celebration, followed by arguments about who gets dropped off first once school is called off. Surely following the route in reverse would be unjust: some of us had been riding almost an hour already!</p>

<p>During the next ten minutes, we search for ways to stay warm as the district deliberates (in their cozy office, no doubt). Finally, a relieved-sounding dispatcher gives the all-clear over the radio. There will be school after all. Defeated silence. The eighth-graders at the back of the bus resume their daily routine of furiously scribbling down homework answers just before arriving at school. The kids across the aisle kick themselves for not <a href="http://notes.1ec5.org/archives/2007/02/12/snow_day.html" rel="bookmark" title="Mom, I canceled class today (Monday, February 12th, 2007)">flushing at 7:00</a> the night before. And I just want some fresh air.</p>

<p>Although <a href="http://www.saintcolumbanschool.org/" rel="bookmark" title="St. Columban School"><abbr title="Saint">St.</abbr> Columban School</a> is located within the Loveland school district boundaries, students come from several surrounding districts as well. That morning, the school appeared conspicuously empty. Of course, with Little Miami, Milford, and Goshen all closed, everyone but us Lovelanders had an excuse to stay home.</p>

<p class="fine-print">Readers from the West Coast will probably want to know what a <a href="http://www.thekrogerco.com/" rel="bookmark" title="The Kroger Co.">Kroger</a> bag is. They&rsquo;re your ordinary plastic grocery bags, but tan-colored, so they make for good barf bags and great <a href="http://www.flickr.com/photos/lipseyebrows/2352262759/" rel="bookmark" title="Flickr: recycle">dresses</a> (apparently).</p>]]>
        
    </content>
</entry>

<entry>
    <title>Revisiting Atmosphere</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2009/01/25/atmosphere.html" />
    <id>tag:notes.1ec5.org,2009://2.2060</id>

    <published>2009-01-25T09:30:00Z</published>
    <updated>2009-01-25T09:36:44Z</updated>

    <summary>Updated worlds and avatars for Adobe Atmosphere. Plus: In my quest to preserve the memory of the virtual reality software platform, I get stuck on a patent question.</summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="Adobe Atmosphere" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="MingerWorld" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web Archaeology" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="3d" label="3d" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="atmosphere" label="atmosphere" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="helpwanted" label="help wanted" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="law" label="law" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mingerworld" label="mingerworld" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="opensource" label="open source" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="software" label="software" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>Longtime readers of this blog&nbsp;&ndash; again, all two of you&nbsp;&ndash; will recall that I&rsquo;m still a fan of <a href="http://en.wikipedia.org/wiki/Adobe_Atmosphere" rel="bookmark" title="Wikipedia: Adobe Atmosphere">Adobe Atmosphere</a>, that brilliant online virtual reality platform, even though Adobe <a href="http://notes.1ec5.org/archives/2004/12/21/atmo_end.html" rel="bookmark" title="Going forward (Tuesday, December 21st, 2004)">killed it off</a> shortly after version 1.0, more than five years ago. But even though Atmosphere has gone virtually unused in the years since, I&rsquo;m on a quest to preserve its memory:</p>

<ul>
<li>Shortly after Adobe pulled their support, I asked the user community for help in establishing an &ldquo;abandonware&rdquo; website specifically for Atmosphere, similar to websites that memorialize other long-gone software. That led to the <a href="http://en.wikipedia.org/wiki/Adobe_Atmosphere" rel="bookmark" title="Wikipedia: Adobe Atmosphere">article on Wikipedia</a>. The article still lacks numerous details and contains scant citations, but it&rsquo;s a start.</li>
<li>A few months ago, I updated <a href="http://www.1ec5.org/3d/mingerworld/" rel="bookmark" title="1ec5.org: MingerWorld">MingerWorld</a>&nbsp;&ndash; which I painstakingly developed during my freshman year in high school&nbsp;&ndash; for compatibility with Atmosphere 1.0. Finally.</li>
<li>My latest project is &ldquo;<a href="http://www.1ec5.org/3d/avatars/dialup/" rel="bookmark" title="1ec5.org: Dialup">Dialup</a>&rdquo;, an avatar that Atmosphere&rsquo;s beta testers will instantly recognize. It imitates the placeholder avatar that other users would appear to wear as Atmosphere downloaded their real avatars.</li>
</ul>

<p>The breakthrough came when I found <a href="http://www.jfdhobbies.com/" rel="bookmark" title="jfdhobbies.com">Joe De Costa</a>, who&rsquo;s been running a working copy of Atmosphere&rsquo;s chat server all these years. With his permission, I hooked MingerWorld up to his server, allowing you to explore the world as it was meant.</p>

<p>Atmosphere&rsquo;s powerful chat functionality allowed users to see and converse with each other in-world, setting the software apart from countless other <acronym title="three-dimensional" class="initialism">3D</acronym> offerings, including Adobe&rsquo;s later ventures in <acronym title="three-dimensional" class="initialism">3D</acronym> modeling.</p>

<p>In a fit of irony, Adobe released the chat server under an &ldquo;Atmosphere Open Source License&rdquo; but neglected to publicize the fact. In fact, the only way to obtain a copy of the source code was to contact Adobe directly. So even at the height of Atmosphere&rsquo;s popularity, there were only a few chat servers in operation, apart from the official Adobe server. The vast majority of worlds were connected to the official server. After 2004, these worlds went silent: even in the worlds that saw dozens of visitors at a time, each user would appear to be alone. For the many thousands of meticulously-built worlds, the &ldquo;killer app&rdquo; was gone.</p>

<p>I want to fix that. I have a copy of the Adobe Community Server software, which I&rsquo;m planning to run on my own computer in the future. I&rsquo;d love to make the software publicly available, the way it should be, but first I have some legal questions about it. The key passage in <span><a href="http://notes.1ec5.org/archives/2009/01/25/atmo_server_license.pdf" type="application/pdf" rel="bookmark" title="Atmosphere Open Source License">the server&rsquo;s license agreement</a></span> reads:</p>

<blockquote cite="http://notes.1ec5.org/archives/2009/01/25/atmo_server_license.pdf" title="Atmosphere Open Source License">
<p class="first last only">Subject to the terms of this Agreement, Adobe grants you a non-exclusive, worldwide, royalty free license to use, reproduce, prepare derivative works, publicly display, publicly perform, distribute, and sublicense the Software for any purpose provided that the copyright notice below appears in a conspicuous location within the source code of the distributed Software and this license is distributed in the supporting 
documentation of the version of the Software you distribute.</p>
</blockquote>

<p>That&rsquo;s all well and good, but contained in the source code are two references to patent applications held by Adobe. The first was granted as <a href="http://www.google.com/patents?id=a5kTAAAAEBAJ" rel="bookmark" title="Google Patents: Method and apparatus for remote communication of data associated with dynamically generated type object at runtime to describe the data type">patent 6,842,786</a> and seems to describe a server-side dynamic language runtime. <a href="http://www.google.com/patents?id=aTmHAAAAEBAJ" rel="bookmark" title="Google Patents: Populating online forums">The second</a> is still pending after all these years and covers the way worlds &ldquo;cloned&rdquo; when full. (An overflow copy of the world was created automatically, so that worlds wouldn&rsquo;t fill up so severely and users wouldn&rsquo;t have to load 150 avatars on their dialup connections. Most of us found the feature annoying but dreaded the alternative.)</p>

<p>So my question is: would I be legally permitted to distribute and even modify the server software, as provisioned in the license, even though Adobe holds a patent on certain parts of the server? Note that the license never mentions patents, but rather grants sweeping rights. If not for the patent question, the license would even let me <em>relicense</em> the server under something very much like the <a href="http://www.opensource.org/licenses/mit-license.php" rel="bookmark" title="Open Source Initiative: The MIT License"><acronym title="Massachusetts Institute of Technology" class="initialism">MIT</acronym> license</a>.</p>

<p>Any help appreciated.</p>]]>
        
    </content>
</entry>

<entry>
    <title>AIM OpenID Login in Motion</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2009/01/15/motion.html" />
    <id>tag:notes.1ec5.org,2009://2.2058</id>

    <published>2009-01-16T07:45:00Z</published>
    <updated>2009-01-16T09:03:10Z</updated>

    <summary><![CDATA[From the I-should-have-blogged-about-this-literally-a-month-ago department, AIM OpenID Login has been released as part of Six Apart&rsquo;s Motion package.]]></summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Weblogging" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="movable type" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>From the I-should-have-blogged-about-this-literally-a-month-ago department, <a href="http://notes.1ec5.org/archives/2007/08/25/aimopenid.html" rel="bookmark" title="AIM OpenID Login 1.0 for Movable Type (Saturday, August 25th, 2007)"><acronym title="AOL Instant Messenger">AIM</acronym> OpenID Login</a> has been <a href="http://www.movabletype.com/blog/2008/12/the-web-is-in-motion-via-movable-type-pro.html" rel="bookmark" title="Movable Type: The Web is in Motion via Movable Type Pro">released</a> as part of Six Apart&rsquo;s <a href="http://www.movabletype.com/motion/" rel="bookmark" title="Movable Type: Motion">Motion</a> package. That was a mouthful, so allow me to unpack the sentence.</p>

<p><acronym title="AOL Instant Messenger">AIM</acronym> OpenID Login is a small plugin I wrote in 2007 that lets anyone with an <acronym title="America Online" class="initialism">AOL</acronym> account&nbsp;&ndash; including <acronym title="AOL Instant Messenger">AIM</acronym> users&nbsp;&ndash; easily log into your <a href="http://www.movabletype.org/" rel="bookmark" title="MovableType.org">Movable Type</a> blog to post a comment. Motion is a plugin for Movable Type that turns the blogging software into a social networking platform. It&rsquo;s currently a public beta, so you can download it for free while Six Apart works to smooth out the edges. According to the <a href="http://www.movabletype.com/motion/frequently-asked-questions.html" rel="bookmark" title="Movable Type: Frequently Asked Questions about Motion"><acronym title="frequently asked questions">FAQ</acronym></a>, its features&nbsp;&ndash; including, presumably, <acronym title="AOL Instant Messenger">AIM</acronym> OpenID Login&nbsp;&ndash; will be folded into the standard Movable Type application by version 4.25.</p>

<p>Early last month, a product manager at Six Apart e-mailed to notify me that my plugin would be incorporated into a future Movable Type release. He did not ask my permission. As it happens, I&rsquo;d already given explicit permission by licensing the plugin under the <acronym title="GNU&rsquo;s Not Linux!" class="initialism">GNU</acronym> General Public License, as I was required to. So this e-mail was simply a courteous heads-up. As you might imagine, I&rsquo;m quite pleased that one late night of coding has led to such visibility for my code. If only I got such a high <acronym title="return on investment">ROI</acronym> with this week&rsquo;s complement of problem sets.</p>

<p>Even if you have no inclination to turn your blog into a full-fledged social networking service, <a href="http://plugins.movabletype.org/aim-openid-login/" rel="bookmark" title="Movable Type Plugin Directory: AIM OpenID Login"><acronym title="AOL Instant Messenger">AIM</acronym> OpenID Login</a> lowers a barrier that keeps your readers from becoming commenters.</p>]]>
        
    </content>
</entry>

<entry>
    <title>AVIM not just for Firefox</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2008/12/09/avim.html" />
    <id>tag:notes.1ec5.org,2008://2.2056</id>

    <published>2008-12-10T01:30:00Z</published>
    <updated>2009-03-07T02:26:28Z</updated>

    <summary>AVIM, my Firefox extension, is now compatible with Thunderbird as well. Plus: Help wanted.</summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="AVIM" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="JavaScript" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Mozilla Thunderbird" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Vietnamese" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="avim" label="avim" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mozilla" label="mozilla" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="software" label="software" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="vietnamese" label="vietnamese" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>In July, when I <a href="http://notes.1ec5.org/archives/2008/07/05/avim.html" rel="bookmark" title="AVIM for Firefox (Saturday, July 5th, 2008)">last wrote</a> about <a href="http://www.1ec5.org/software/avim/" rel="bookmark" title="1ec5.org: AVIM for Firefox"><acronym title="Advanced Vietnamese Input Method">AVIM</acronym></a>, it was a Firefox extension that let you easily enter fully-accented Vietnamese into any webpage, as well as most of Firefox. It also supported a few well-known Firefox extensions.</p>

<p>Since then, <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> has gained French and Chinese localizations and added support for <em>all</em> of Firefox. More importantly, the extension now supports a number of Mozilla-based applications, including <a href="http://getsongbird.com/" rel="bookmark" title="Songbird">Songbird</a> and <a href="http://www.flock.com/" rel="bookmark" title="Flock Browser">Flock</a>. <acronym title="Advanced Vietnamese Input Method">AVIM</acronym>&rsquo;s also been <a href="https://addons.mozilla.org/en-US/statistics/addon/2947" rel="bookmark" title="Firefox Add-ons: Statistics Dashboard for AVIM">downloaded nearly 30,000 times</a> and serves over 1,700 people as of last month.</p>

<div align="center" class="center mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;"><span class="mt-enclosure mt-enclosure-image" style="display: block;"><a href="http://notes.1ec5.org/archives/2008/12/09/compose.png" type="image/png"><img alt="" title="Composing a new message using Thunderbird and AVIM" src="http://notes.1ec5.org/archives/assets_c/2008/12/compose-thumb-300x230.png" width="300" height="230" /></a></span></div>

<p>Mozilla Messaging today released the <a href="http://www.mozillamessaging.com/en-US/thunderbird/3.0b1/" rel="bookmark" title="Mozilla Messaging: Thunderbird 3 Beta 1 Preview Release">first beta of Thunderbird 3</a>. Since it runs on Mozilla 1.9, <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> supports it too. It&rsquo;s a boon for Vietnamese speakers who still use a desktop application for reading e-mail and news feeds.</p>

<p>You can <a href="http://www.1ec5.org/software/avim/#changes" rel="bookmark" title="1ec5.org: AVIM for Firefox: What&rsquo;s New">download <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> for free</a> and drag the file into Thunderbird&rsquo;s Add-ons window. Alternatively, you can use Thunderbird 3&rsquo;s new Add-ons Manager to install an older version of <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> hosted by Mozilla.</p>

<p>One thing you&rsquo;ll notice about <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> is that, even though the extension is intended for Vietnamese speakers, the extension&rsquo;s menus aren&rsquo;t necessarily in Vietnamese. If your copy of Thunderbird is in English, for example, <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> is also in English. That&rsquo;s because I designed the extension to blend in with the application as much as possible.</p>

<p>Unfortunately, efforts to <a href="https://l10n.mozilla.org/narro/narro_project_list.php?l=vi" rel="bookmark" title="Mozilla Narro: Project list">translate Thunderbird into Vietnamese</a> aren&rsquo;t complete yet. In the meantime, you can force <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> to display in Vietnamese anyways. Regardless of <acronym title="Advanced Vietnamese Input Method">AVIM</acronym>&rsquo;s interface language, the extension will continue allowing you to type in Vietnamese.</p>

<p>You might&rsquo;ve noticed that <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> is essentially in maintenance mode. I&rsquo;ve implemented all the big changes I have planned, and I really don&rsquo;t have much time to work on the software in the near future. However, you&rsquo;ll continue to see <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> support more and more applications as they upgrade to Mozilla 1.9. Someday, I&rsquo;ll get around to writing an operating system&ndash;level <acronym title="input method editor" class="initialism">IME</acronym>, so you&rsquo;ll get <acronym title="Advanced Vietnamese Input Method">AVIM</acronym>&rsquo;s well-known flexibility no matter which application you&rsquo;re using. Someday.</p>

<p>As always, I welcome any <a href="http://www.1ec5.org/software/avim/#contribute" rel="bookmark" title="1ec5.org: Firefox for AVIM: How to help">contributions</a> to the <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> project, whether in the form of code or translations, or by spreading the word. Working on <acronym title="Advanced Vietnamese Input Method">AVIM</acronym>&rsquo;s code require little more than a working knowledge of JavaScript and Vietnamese. For any code or translation contributions, you&rsquo;ll receive due credit on a widely-used piece of software and the satisfaction that you&rsquo;ve helped real people in a measurable way. If you&rsquo;d like to help out, please <a href="mailto:?to=&#x6d;&#x78;&#x6e;&#x40;&#x7a;&#x6f;&#x6f;&#x6d;&#x74;&#x00006f;&#x0077;&#x6e;&#x2e;&#x63;&#x6f;&#x6d;" rev="made">contact me</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Community</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2008/11/09/community.html" />
    <id>tag:notes.1ec5.org,2008://2.2054</id>

    <published>2008-11-09T08:15:00Z</published>
    <updated>2009-03-20T01:53:40Z</updated>

    <summary><![CDATA[Friday night, northern Vietnam&rsquo;s wiki addicts got together to discuss&nbsp;&ndash; what else?&nbsp;&ndash; wikis at the inaugural Wiki Day in Hanoi. It&rsquo;s awesome how far things have progressed since late 2003, when we were just a ragtag group of geeks starting into computer screens.]]></summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="Vietnamese" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Wikipedia" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>Friday night (San Francisco time), northern Vietnam&rsquo;s wiki addicts got together to discuss&nbsp;&ndash; what else?&nbsp;&ndash; wikis at the inaugural <a href="http://vi.wikipedia.org/wiki/Wikipedia:H%E1%BB%8Dp_m%E1%BA%B7t/Wiki_day_th%C3%A1ng_11_n%C4%83m_2008_t%E1%BA%A1i_H%C3%A0_N%E1%BB%99i" hreflang="vi" rel="bookmark" title="Wikipedia tiếng Việt: Wikipedia:Họp mặt/Wiki day tháng 11 năm 2008 tại Hà Nội">Wiki Day</a> in Hanoi.</p>

<div align="center" class="center" style="text-align: center; display: block; margin: 0 auto 20px;"><span class="mt-enclosure mt-enclosure-image" style="display: block;"><a href="http://notes.1ec5.org/archives/2008/11/09/Wiki_Day.jpg" type="image/jpeg" rel="bookmark"><img src="http://notes.1ec5.org/archives/assets_c/2008/11/Wiki_Day-thumb-300x225.jpg" width="300" height="225" class="mt-image-center" alt="Inside the inaugural Wiki Day." /></a><p>Inside the inaugural Wiki Day. <a href="http://vi.wikipedia.org/wiki/H%C3%ACnh:Wiki_Day_08112008_p1.jpg" hreflang="vi" rel="bookmark" title="Wikipedia tiếng Việt: Hình:Wiki Day 08112008 p1.jpg">Courtesy</a>: <span lang="vi" xml:lang="vi">Trần Xuân Trường, Nguyễn Phan Kiên, <acronym title="Nam Hy Hoàng Phong" class="initialism">NHHP</acronym></span>.</p></form></div>

<p>Unfortunately, I couldn&rsquo;t make it: at the last minute, my professor caught wind of my plans to take a plane to Vietnam instead of taking a midterm. <code class="ascii-art smiley">:^P</code> So instead of being able to finally meet my co-conspirators in the wiki revolution face to face, I settled for writing a talk for an attendee to read. In between studying for a midterm and completing a problem set, I managed to crank out what sounded (on paper) like a <a href="http://www.thuvienkhoahoc.com/tusach/VLOS:Th%E1%BA%A3o_lu%E1%BA%ADn/Wiki_day_th%C3%A1ng_11_n%C4%83m_2008_t%E1%BA%A1i_H%C3%A0_N%E1%BB%99i/Minh" hreflang="vi" rel="bookmark" title="Tủ sách Khoa học: VLOS:Thảo luận/Wiki day tháng 11 năm 2008 tại Hà Nội/Minh">coherent essay</a> on Wikipedia&rsquo;s principles, how we foster a community, and what we do about vandals. Hopefully it wasn&rsquo;t too awkward. Word has it that the meetup overall was a success.</p>

<p>I hadn&rsquo;t realized how big a deal wikis have become in Vietnam, but apparently the event has received coverage in the country&rsquo;s major newspapers, and a few national <acronym title="television" class="initialism">TV</acronym> networks were on-scene as well. If I knew the mainstream press was coming, I would&rsquo;ve probably switched into car salesman mode and pushed Wikipedia&rsquo;s benefits more than discussing the challenges ahead of us as a community. But it&rsquo;s not like we have anything to hide, what<!-- [sic] --> with an Edit button atop every page.</p>

<p>The <a href="http://vi.wikipedia.org/wiki/Trang_Ch%C3%ADnh" hreflang="vi" rel="bookmark" title="Wikipedia tiếng Việt">Vietnamese Wikipedia</a> community doesn&rsquo;t have official recognition with a Wikimedia Foundation chapter of its own, and it has yet to really spread to other Wikimedia projects like Wiktionary and Wikibooks. We haven&rsquo;t won any awards like the Italian community or put on a Wikimania conference like the Taiwanese. But still, it&rsquo;s awesome how far things have progressed since late 2003, when we were just a ragtag group of geeks starting into computer screens, developing carpal tunnel by writing too much.</p>

<p>Along the way, I learned a new language&nbsp;&ndash; I only knew a few words of Vietnamese before joining Wikipedia&nbsp;&ndash; we&rsquo;ve written on topics that&rsquo;ve never been written about in our language; and we&rsquo;ve changed the way people think about learning. You can, on your own time, enrich your understanding of the world around you. At least for those with Internet access, the excuse of not having the money or patience is gone. (Reaching those without Internet access is an open problem.)</p>

<p>What makes Wikipedia (and any other wiki) is that we&rsquo;re not <em>just</em> a community. We&rsquo;re a community making something useful: in our case, a website synonymous these days with &ldquo;encyclopedia&rdquo;. In making decisions at Wikipedia&nbsp;&ndash; such as determining how strict we enforce a rule on notability&nbsp;&ndash; the overriding challenge is balancing the needs of the community versus the needs of the encyclopedia.</p>

<p>I&rsquo;m pretty sure what kept me contributing to Wikipedia all these years, even as the offline world called, was the knowledge that the project depends on each individual to keep it afloat. Especially when there weren&rsquo;t many administrators and other dedicated contributors around, others would have to shoulder more work if I simply packed up and left. I wouldn&rsquo;t&rsquo;ve particularly cared, except that I&rsquo;d already built up a good working relationship with so many in the community. Meetups, like the one on Friday, ensure that &ldquo;the community&rdquo; isn&rsquo;t just a nebulous group of someone-or-others, but rather your friends.</p>

<p>In treating everyone as equals&nbsp;&ndash; with mostly the same editing rights, but more importantly with equal authority in arguments&nbsp;&ndash; we the wiki community think of everyone as trusted friends. That&rsquo;s a really great statement about humanity.</p>]]>
        
    </content>
</entry>

<entry>
    <title>In a word</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2008/10/19/politics.html" />
    <id>tag:notes.1ec5.org,2008://2.1268</id>

    <published>2008-10-19T20:18:32Z</published>
    <updated>2008-10-19T22:40:56Z</updated>

    <summary><![CDATA[Edited out of Saturday Night Live&rsquo;s coverage of the final presidential debate.]]></summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="Politics" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Quoteworthy" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="humor" label="humor" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="politics" label="politics" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://notes.1ec5.org/archives/2008/10/19/vote.png" type="image/png" class="right" style="float: right; margin: 0 0 20px 20px;"><img src="http://notes.1ec5.org/archives/assets_c/2008/10/vote-thumb-200x237.png" width="200" height="237" class="mt-image-right" alt="" title="For Sale By Owner" /></a></span></p>

<p>The following exchange was <a href="http://snltranscripts.jt.org/00/00adebate.phtml" rel="bookmark" title="SNL Transcripts: First Presidential Debate">edited out</a> of <cite class="performance television show tv-show">Saturday Night Live</cite>&rsquo;s coverage of the final presidential debate, in order to allot adequate time for applause:</p>

<ul>
<li>Moderator: &ldquo;Since you two clearly do not endorse the negative words your campaigns have used against each other in the last few weeks, would both of you care to summarize your campaigns in a single, hopefully positive word? <abbr title="Senator">Sen.</abbr> McCain, you first.&rdquo;</li>
<li>&ldquo;Joe-the-Plumber.&rdquo;</li>
<li>&ldquo;One word?&rdquo;</li>
<li>&ldquo;Hyphenated.&rdquo;</li>
<li><i>(Headline: &ldquo;Joe-the-Plumber&rsquo;s Name Hyphenated&rdquo;)</i></li>
<li>&ldquo;All&hellip; right, and you, <abbr title="Senator">Sen.</abbr> Obama?&rdquo;</li>
<li>&ldquo;Look&mdash;&rdquo;</li>
<li>&ldquo;That&rsquo;s all the time we have for tonight, live from all of us at <cite class="performance television show tv-show">Saturday Night</cite>.&rdquo;</li>
</ul>

<p>That&rsquo;s about all the politicking you&rsquo;ll find on <cite class="publication website weblog blog">Minh&rsquo;s Notes</cite> this election cycle. <acronym title="Television" class="initialism">TV</acronym> comedy&nbsp;&ndash; Fox News and <acronym title="Microsoft Network&nbsp;&ndash; National Broadcasting Company" class="initialism">MSNBC</acronym> included&nbsp;&ndash; have done a wonderful job covering the campaigns this time. Though I wonder if I&rsquo;d have more to say (read: <a href="http://notes.1ec5.org/archives/2004/10/25/citizen_leader.html" rel="bookmark" title="A new religion (Monday, October 25th, 2004)">more</a> <a href="http://notes.1ec5.org/archives/2004/11/01/take_back_faith.html" rel="bookmark" title="Pipe dream (Monday, November 1st, 2004)">fodder</a>) were I still in Ohio around now, deep in the heart of Pro-America.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Résumé</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2008/10/07/resume.html" />
    <id>tag:notes.1ec5.org,2008://2.1267</id>

    <published>2008-10-08T06:20:00Z</published>
    <updated>2008-10-08T07:36:37Z</updated>

    <summary>Twenty-five completely reasonable suggestions for action verb–filled résumés, ranging from the inept to the utterly inept.</summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="College" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Humor" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="humor" label="humor" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jobhunting" label="job hunting" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>Stanford&rsquo;s Career Development Center provides your typical list of <a href="http://cardinalcareers.stanford.edu/jobsearch/resumes/verbs.htm" rel="bookmark" title="Career Development Center: Action Verbs">action verbs</a> to add that fleeting pizzaz to your r&eacute;sum&eacute;. After all, who wants to <em>be</em> something good long-term, when you can <em>do</em> something good and be <em>done</em> with it already? So for those still padding their r&eacute;sum&eacute;s and for everyone else&rsquo;s reading pleasure, here are <strong>25 completely reasonable suggestions</strong> for action-filled job descriptions, ranging from the inept to the utterly inept, and extrapolated from the <acronym title="Career Development Center" class="initialism">CDC</acronym>&rsquo;s action verbs (in bold):</p>

<ol>
<li><strong>Acted</strong> childishly.</li>
<li><strong>Conceptualized</strong> nebulous abstractions.</li>
<li><strong>Imagined</strong> being <acronym title="Chief Executive Officer" class="initialism">CEO</acronym>.</li>
<li><strong>Planned</strong> to get work done.</li>
<li><strong>Contracted</strong> and <strong>delegated</strong> it out instead.</li>
<li><strong>Figured</strong> the job was for life.</li>
<li><strong>Arranged</strong> deck chairs on the <i>Titanic</i>.</li>
<li><strong>Cut</strong> and pasted. Copied too.</li>
<li><strong>Discovered</strong> gravity.</li>
<li><strong>Referred</strong> self to psychiatrist.</li>
<li><strong>Drew</strong> the curtains.</li>
<li><strong>Oversaw</strong>ed plywood for the deck out back.</li>
<li><strong>Invented</strong> all kinds of excuses.</li>
<li><strong>Fabricated</strong> lies unabashedly.</li>
<li><strong>Maintained</strong> own innocence.</li>
<li><strong>Bound</strong> and gagged.</li>
<li><strong>Drove</strong> self home every night.</li>
<li><strong>Merged</strong> onto <abbr title="Interstate">I</abbr>-75.</li>
<li><strong>Installed</strong> spyware accidentally.</li>
<li><strong>Operated</strong> a pencil sharpener.</li>
<li><strong>Collated</strong>. (Yes, <a href="http://www.sil.org/lingualinks/literacy/ImplementALiteracyProgram/HowToCollatePages.htm" rel="bookmark" title="LinguaLinks: How to collate pages">collated</a>.)</li>
<li><strong>Produced</strong> <a href="http://en.wikipedia.org/wiki/Software_bug" rel="bookmark" title="Wikipedia: Software bug">bugs</a>.</li>
<li><strong>Furnished</strong> own apartment.</li>
<li><strong>Assembled</strong> <acronym title="Ingvar Kamprad, Elmtaryd, Agunnaryd">IKEA</acronym> furniture.</li>
<li><strong>Interviewed</strong> self for the job already; thanks for the offer. (<strong>Problem solved</strong>.)</li>
</ol>

<p><a href="http://www.harpercollinschildrens.com/harperchildrens/kids/gamesandcontests/features/amelia/" rel="bookmark" title="Harper Collins Children&rsquo;s: Amelia Bedelia">Amelia Bedelia</a> would be proud.</p>

<p class="fine-print">Warning: Tongue planted firmly in cheek.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Mười lũy thừa một trăm</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2008/09/29/google.html" />
    <id>tag:notes.1ec5.org,2008://2.1265</id>

    <published>2008-09-30T06:55:00Z</published>
    <updated>2008-09-30T07:16:37Z</updated>

    <summary><![CDATA[Back in May, I noted that the major Web translation services, Babel Fish or Google Translate, hadn&rsquo;t gotten around to supporting Vietnamese. Today, Google has, and my first thought was to try and break it.]]></summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="Computing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Vietnamese" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="computerscience" label="computer science" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="vietnamese" label="vietnamese" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>Back in May, I <a href="http://notes.1ec5.org/archives/2008/05/16/vietrish.html" rel="bookmark" title="Pills with bank accounts (Friday, May 16th, 2008)">remarked</a> that VDict&rsquo;s English&harr;Vietnamese <a href="http://vdict.com/?autotranslation" rel="bookmark" title="VDict.com: Vietnamese translation">machine translation</a> service was too good at churning out sometimes incomprehensible Vietrish. I also pointed out that the major Web translation services, such as Babel Fish or Google Translate, hadn&rsquo;t gotten around to supporting Vietnamese. Today, <a href="http://googleresearch.blogspot.com/2008/09/doubling-up.html" rel="bookmark" title="Official Google Research Blog: Doubling Up">Google has</a>&nbsp;&ndash; VDict now piggybacks on their service&nbsp;&ndash; and my first thought was to try and break it.</p>]]>
        <![CDATA[<h2 id="welcome">Another welcome</h2>

<p>Once again, the <a href="http://vi.wikipedia.org/wiki/Trang_Ch%C3%ADnh" hreflang="vi" rel="bookmark" title="Wikipedia tiếng Việt">Vietnamese Wikipedia</a>&rsquo;s opening paragraph:</p>

<blockquote cite="http://vi.wikipedia.org/wiki/Trang_Ch%C3%ADnh" lang="vi" xml:lang="vi">
<p class="first last only">Hoan nghênh bạn đã đến với <strong>Wikipedia tiếng Việt</strong>! Đây là bách khoa toàn thư có nội dung mở và thuộc sở hữu cộng đồng. Dự án được bắt đầu từ tháng 10 năm 2003 do công sức đóng góp của nhiều người ở khắp mọi nơi, bạn cũng có thể tham gia. Hiện giờ chúng ta có <strong>86.752 thành viên</strong> (có tài khoản), nhưng mới chỉ đóng góp được <strong>58.022 bài</strong> thôi. Rất mong sự <strong>tham gia tích cực</strong> của bạn!</p>
</blockquote>

<p>Which roughly translates to:</p>

<blockquote>
<p class="first last only">Welcome; you&rsquo;ve arrived at the <strong>Vietnamese Wikipedia</strong>! This is an open-content encyclopedia belonging to the community. The project began in October 2003, thanks to the efforts of many contributors worldwide; you can join in too. Currently, we have <strong>86,752 members</strong> (with accounts) who&rsquo;ve contributed only <strong>58,022 articles</strong>. We really look forward to your <strong>active participation</strong>!</p>
</blockquote>

<p>Surprisingly, Google Translate gets it mostly right:</p>

<blockquote cite="http://translate.google.com/translate_t#vi|en|Hoan%20ngh%C3%AAnh%20b%E1%BA%A1n%20%C4%91%C3%A3%20%C4%91%E1%BA%BFn%20v%E1%BB%9Bi%20Wikipedia%20ti%E1%BA%BFng%20Vi%E1%BB%87t!%20%C4%90%C3%A2y%20l%C3%A0%20b%C3%A1ch%20khoa%20to%C3%A0n%20th%C6%B0%20c%C3%B3%20n%E1%BB%99i%20dung%20m%E1%BB%9F%20v%C3%A0%20thu%E1%BB%99c%20s%E1%BB%9F%20h%E1%BB%AFu%20c%E1%BB%99ng%20%C4%91%E1%BB%93ng.%20D%E1%BB%B1%20%C3%A1n%20%C4%91%C6%B0%E1%BB%A3c%20b%E1%BA%AFt%20%C4%91%E1%BA%A7u%20t%E1%BB%AB%20th%C3%A1ng%2010%20n%C4%83m%202003%20do%20c%C3%B4ng%20s%E1%BB%A9c%20%C4%91%C3%B3ng%20g%C3%B3p%20c%E1%BB%A7a%20nhi%E1%BB%81u%20ng%C6%B0%E1%BB%9Di%20%E1%BB%9F%20kh%E1%BA%AFp%20m%E1%BB%8Di%20n%C6%A1i%2C%20b%E1%BA%A1n%20c%C5%A9ng%20c%C3%B3%20th%E1%BB%83%20tham%20gia.%20Hi%E1%BB%87n%20gi%E1%BB%9D%20ch%C3%BAng%20ta%20c%C3%B3%2086.752%20th%C3%A0nh%20vi%C3%AAn%20(c%C3%B3%20t%C3%A0i%20kho%E1%BA%A3n)%2C%20nh%C6%B0ng%20m%E1%BB%9Bi%20ch%E1%BB%89%20%C4%91%C3%B3ng%20g%C3%B3p%20%C4%91%C6%B0%E1%BB%A3c%2058.022%20b%C3%A0i%20th%C3%B4i.%20R%E1%BA%A5t%20mong%20s%E1%BB%B1%20tham%20gia%20t%C3%ADch%20c%E1%BB%B1c%20c%E1%BB%A7a%20b%E1%BA%A1n!">
<p class="first last only">Welcome to Wikipedia, the free encyclopedia! This is the encyclopedia content open and owned communities. The project was started from <i lang="vi" xml:lang="vi">tháng 10</i> [&ldquo;October&rdquo;], 2003 by the contribution of many people everywhere, you can also participate. Now we have 86,752 members (of accounts), but contribute only be 58,022 items only. We hope the active participation of you!</p>
</blockquote>

<p>Sure, it&rsquo;s pretty ungrammatical, but at least they didn&rsquo;t start rambling on about medication, like VDict did. Still, Google passed my little test because they rely on sophisticated statistical analysis techniques to determine which English phrases typically go with each Vietnamese phrase. Rather than simply looking individual words up in a dictionary and pumping out the matching words, the smart folks at Google seem to take into account the kinds of phrases actually in use on the Internet and normalize them, so that no matter the source language, Google internally represents each sentence the same way.</p>

<h2 id="moon">Regained in re-translation</h2>

<p>This statistical technique usually allows Google&rsquo;s translation to at least sound remotely relevant. But it also makes spotting errors more difficult. Case in point, a definition of the Moon:</p>

<blockquote cite="http://vi.wikipedia.org/wiki/M%E1%BA%B7t_Tr%C4%83ng" lang="vi" xml:lang="vi">
<p class="first last only"><strong>Mặt Trăng</strong> (tiếng Latinh: <i lang="la" xml:lang="la">Luna</i>, ký hiệu: ☾) là vệ tinh tự nhiên duy nhất của Trái Đất và là vệ tinh tự nhiên lớn thứ năm trong Hệ Mặt Trời.</p>
</blockquote>

<p>Quite straightforwardly, it means:</p>

<blockquote>
<p class="first last only">The <strong>Moon</strong> (Latin: <i lang="la" xml:lang="la">Luna</i>, symbol: ☾) is the Earth&rsquo;s only natural satellite and the fifth-largest natural satellite in the Solar System.</p>
</blockquote>

<p>But here&rsquo;s what Google thinks it means:</p>

<blockquote cite="http://translate.google.com/translate_t#vi|en|M%E1%BA%B7t%20Tr%C4%83ng%20(ti%E1%BA%BFng%20Latinh%3A%20Luna%2C%20k%C3%BD%20hi%E1%BB%87u%3A%20%E2%98%BE)%20l%C3%A0%20v%E1%BB%87%20tinh%20t%E1%BB%B1%20nhi%C3%AAn%20duy%20nh%E1%BA%A5t%20c%E1%BB%A7a%20Tr%C3%A1i%20%C4%90%E1%BA%A5t%20v%C3%A0%20l%C3%A0%20v%E1%BB%87%20tinh%20t%E1%BB%B1%20nhi%C3%AAn%20l%E1%BB%9Bn%20th%E1%BB%A9%20n%C4%83m%20trong%20H%E1%BB%87%20M%E1%BA%B7t%20Tr%E1%BB%9Di.">
<p class="first last only">Moon (Latin: Luna, symbols: ☾) is a natural satellite of only Earth and the satellite is the natural largest in the Torah.</p>
</blockquote>

<p>First of all, English has this tricky feature where moving an adverb like &ldquo;only&rdquo; around the sentence actually changes the sentence&rsquo;s meaning. But quibbles aside, I wouldn&rsquo;t think to look in the Torah (the first five boks of the Bible) for the Moon. I&dquo;d just look up. Coincidentally, the fact that the Moon is the <em>fifth</em>-largest moon was lost in translation.</p>

<p>Now, the experts used to always caution against using machine translation tools. They also advised that we reverse-translate anything we find using those tools, just to see how much gets lost in translation:</p>

<blockquote cite="http://translate.google.com/translate_t#en|vi|Moon%20(Latin%3A%20Luna%2C%20symbols%3A%20%E2%98%BE)%20is%20a%20natural%20satellite%20of%20only%20Earth%20and%20the%20satellite%20is%20the%20natural%20largest%20in%20the%20Torah.">
<p class="first last only">Moon (Latin: Luna, ký hiệu: ☾) là một vệ tinh tự nhiên của Trái đất và chỉ là các vệ tinh tự nhiên lớn nhất trong Hệ Mặt Trời.</p>
</blockquote>

<p>Apparently, not much. This reverse-translation hides the various translation mistakes we saw before, because every word in the sentence above, when placed in exactly the same context as that sentence, will always have a 1:1 correspondence with a word in the target language. In other words, since &ldquo;abc<strong>1</strong>def&rdquo; can only ever translate to &ldquo;vwx<strong>2</strong>y&amp;z&rdquo; and is the only bit of text that can, &ldquo;vwx<strong>2</strong>y&amp;z&rdquo; can only ever translate to &ldquo;abc<strong>1</strong>def&rdquo;. So if you&rsquo;re using Google to translate into a language you don&rsquo;t know so well, you don&rsquo;t really know how well or how poorly Google&rsquo;s doing.</p>

<h2 id="numbers">Counting oddly</h2>

<p>So now, for kicks, a little stress test. Below we have a series of numbers spelled out, with all its idiosyncrasies:</p>

<blockquote lang="vi" xml:lang="vi">
<p class="first">0&ndash;30. Số không, một, hai, ba, bốn, năm, sáu, bảy, tám, chín, mười, mười một, mười hai, mười ba, mười bốn, mười lăm, mười sáu, mười bảy, mười tám, mười chín, hai mươi, hai mươi mốt, hai mươi hai, hai mươi ba, hai mươi tư, hai mươi lăm, hai mươi sáu, hai mươi bảy, hai mươi tám, hai mươi chín, ba mươi.</p>
<p>Một trăm (100), một trăm lẻ một (101), một trăm lẻ năm (105), một trăm hai mươi mốt (121), ba trăm (300).</p>
<p>Một ngàn (1.000), một ngàn lẻ một (1.001), hai ngàn rưởi (2.500).</p>
<p>Một vạn. Một vạn (10.000), một vạn lẻ một (10.001). Một triệu (1.000.000). Một tỷ (1.000.000.000).</p>
<p class="last">Một nửa (&frac12;), một phần tư (&frac14;), một phần trăm (1/100 hoặc 1%).</p>
</blockquote>

<p>Translated, with annotations where incorrect:</p>

<blockquote cite="http://translate.google.com/translate_t#vi|en|0%E2%80%9330.%20S%E1%BB%91%20kh%C3%B4ng%2C%20m%E1%BB%99t%2C%20hai%2C%20ba%2C%20b%E1%BB%91n%2C%20n%C4%83m%2C%20s%C3%A1u%2C%20b%E1%BA%A3y%2C%20t%C3%A1m%2C%20ch%C3%ADn%2C%20m%C6%B0%E1%BB%9Di%2C%20m%C6%B0%E1%BB%9Di%20m%E1%BB%99t%2C%20m%C6%B0%E1%BB%9Di%20hai%2C%20m%C6%B0%E1%BB%9Di%20ba%2C%20m%C6%B0%E1%BB%9Di%20b%E1%BB%91n%2C%20m%C6%B0%E1%BB%9Di%20l%C4%83m%2C%20m%C6%B0%E1%BB%9Di%20s%C3%A1u%2C%20m%C6%B0%E1%BB%9Di%20b%E1%BA%A3y%2C%20m%C6%B0%E1%BB%9Di%20t%C3%A1m%2C%20m%C6%B0%E1%BB%9Di%20ch%C3%ADn%2C%20hai%20m%C6%B0%C6%A1i%2C%20hai%20m%C6%B0%C6%A1i%20m%E1%BB%91t%2C%20hai%20m%C6%B0%C6%A1i%20hai%2C%20hai%20m%C6%B0%C6%A1i%20ba%2C%20hai%20m%C6%B0%C6%A1i%20t%C6%B0%2C%20hai%20m%C6%B0%C6%A1i%20l%C4%83m%2C%20hai%20m%C6%B0%C6%A1i%20s%C3%A1u%2C%20hai%20m%C6%B0%C6%A1i%20b%E1%BA%A3y%2C%20hai%20m%C6%B0%C6%A1i%20t%C3%A1m%2C%20hai%20m%C6%B0%C6%A1i%20ch%C3%ADn%2C%20ba%20m%C6%B0%C6%A1i.%0AM%E1%BB%99t%20tr%C4%83m%20(100)%2C%20m%E1%BB%99t%20tr%C4%83m%20l%E1%BA%BB%20m%E1%BB%99t%20(101)%2C%20m%E1%BB%99t%20tr%C4%83m%20l%E1%BA%BB%20n%C4%83m%20(105)%2C%20m%E1%BB%99t%20tr%C4%83m%20hai%20m%C6%B0%C6%A1i%20m%E1%BB%91t%20(121)%2C%20ba%20tr%C4%83m%20(300).%0AM%E1%BB%99t%20ng%C3%A0n%20(1.000)%2C%20m%E1%BB%99t%20ng%C3%A0n%20l%E1%BA%BB%20m%E1%BB%99t%20(1.001)%2C%20hai%20ng%C3%A0n%20r%C6%B0%E1%BB%9Fi%20(2.500).%0AM%E1%BB%99t%20v%E1%BA%A1n.%20M%E1%BB%99t%20v%E1%BA%A1n%20(10.000)%2C%20m%E1%BB%99t%20v%E1%BA%A1n%20l%E1%BA%BB%20m%E1%BB%99t%20(10.001).%20M%E1%BB%99t%20tri%E1%BB%87u%20(1.000.000).%20M%E1%BB%99t%20t%E1%BB%B7%20(1.000.000.000).%0AM%E1%BB%99t%20n%E1%BB%ADa%20(%C2%BD)%2C%20m%E1%BB%99t%20ph%E1%BA%A7n%20t%C6%B0%20(%C2%BC)%2C%20m%E1%BB%99t%20ph%E1%BA%A7n%20tr%C4%83m%20(1%2F100%20ho%E1%BA%B7c%201%25).">
<p class="first">0-30. Zero, one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen different [where&rsquo;d that &ldquo;different&rdquo; come from?], eighteen, nine of ten [woah, going fractional suddenly], twenty, twenty-one, twenty-two, twenty-three, from twenty [mistaking <i lang="vi" xml:lang="vi">tư</i> (&ldquo;four&rdquo;) for <i lang="vi" xml:lang="vi">từ</i> (&ldquo;from&rdquo;)], twenty-five, twenty-six, twenty-seven, twenty-eight, twenty-nine, thirty.</p>
<p>One hundred (100), an odd one hundred (101), a hundred odd years (105), a two hundred and eleven (121), three hundred (300). [An odd quirk of the Vietnamese counting system is that <i lang="vi" xml:lang="vi">lẻ</i> (&ldquo;odd&rdquo;) precedes the ones digit if the number is above 100.]</p>
<p>One thousand (1,000), an odd one thousand (1,001), <i>ruoi</i> two thousand (2,500).</p>
<p>A van. A ten thousand (10,000) [<i lang="vi" xml:lang="vi">một vạn</i> gives different results when alone], an odd one thousand (10,001). One million (1,000,000). One billion (1,000,000,000).</p>
<p class="last">One-half (½), a quarter (¼), one percent (1 / 100 or 1%).</p>
</blockquote>

<p>Counting is just one of those things that Google will have to hard-code into their translation software to get completely right. Statistical techniques won&rsquo;t really cut it, because&nbsp;&ndash; well, when&rsquo;t the last time anyone spelled out &ldquo;eighty-six thousand, seven hundred fifty-two&rdquo;.</p>

<p class="fine-print">The post title, by the way, is how you&rsquo;d spell out &ldquo;ten to the hundredth power&rdquo;&nbsp;&ndash; a googol&nbsp;&ndash; in Vietnamese.</p>]]>
    </content>
</entry>

<entry>
    <title>AVIM for Firefox</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2008/07/05/avim.html" />
    <id>tag:notes.1ec5.org,2008://2.1222</id>

    <published>2008-07-05T21:30:00Z</published>
    <updated>2009-03-07T02:26:45Z</updated>

    <summary><![CDATA[Back in November, I released a keyboard layout for Vietnamese, to improve the Vietnamese typing situation on the Mac. Now I&rsquo;m showing non-Mac users some input method love too.]]></summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="AVIM" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="JavaScript" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Mozilla Firefox" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Vietnamese" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="avim" label="avim" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mozilla" label="mozilla" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="software" label="software" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="vietnamese" label="vietnamese" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://notes.1ec5.org/archives/2008/07/05/icon.png" type="image/png" rel="bookmark" style="float: right; margin: 0 0 20px 20px;"><img src="http://notes.1ec5.org/archives/2008/07/05/icon-thumb-64x64.png" width="64" height="64" class="mt-image-right" alt="" title="AVIM Icon" /></a></span></p>

<p>Vietnamese computing is a very fragmented experience. Not only are there several character encodings for Vietnamese, but Vietnamese computer users must also choose between several popular input methods. As you&rsquo;ll recall from <a href="http://notes.1ec5.org/archives/2007/11/19/viqr.html" rel="bookmark" title="Vietnamese VIQR Keyboard Layout 1.0 for Mac OS X (Monday, November 19th, 2007)">November</a>, an <dfn>input method</dfn> is a procedure for typing in a complex, often non-alphabetic writing system. An <dfn>input method editor</dfn> (<acronym class="initialism">IME</acronym>) is software that intercepts your keystrokes and translates them into more complex characters, such as Chinese characters, on the fly. Today&rsquo;s major operating systems provide <acronym title="input method editor" class="initialism">IME</acronym> for most complex writing systems, notably Chinese and Japanese.</p>

<p>Vietnamese is alphabetic, unlike Chinese, but because of its large set of letter&ndash;diacritical mark combinations, it&rsquo;s impractical to simply assign each key to a letter or accented letter, as with French or Spanish. Making matters worse, operating systems have historically provided poor support for Vietnamese input. Microsoft Windows and Mac <acronym title="Operating System" class="initialism">OS</acronym> <abbr title="Ten">X</abbr> (<a href="http://www.icouple.sg/blog/tech/1539" rel="bookmark" title="iCouple: OS X Leopard and Vietnamese Unikey">until 10.5 Leopard</a>) don&rsquo;t include an <acronym title="input method editor" class="initialism">IME</acronym> for Vietnamese, so each Vietnamese-language website is expected to embed one using JavaScript. Webpages, ordinarily the least powerful of computing technologies, thus end up implementing one of the operating system&rsquo;s core responsibilities: text input. Predictably, there are at least a dozen such <acronym title="input method editor" class="initialism">IME</acronym>s, and each site uses a different one.</p>

<p>It&rsquo;s a situation no one likes, but it&rsquo;s not easy to convince operating system vendors to ship good support for Vietnamese, since the market for it is still relatively small. As a stop-gap solution, three of these <acronym title="input method editor" class="initialism">IME</acronym>&rsquo;s authors have released <a href="http://www.mozilla.com/en-US/firefox/" rel="bookmark" title="Mozilla: Firefox">Firefox</a> extensions that provide Vietnamese typing support on any webpage within the browser. Since the Web browser is pretty much the application that users keep open all day, it&rsquo;s not an entirely bad solution.</p>

<p>Back in November, I released a <a href="http://notes.1ec5.org/archives/2007/11/19/viqr.html" rel="bookmark" title="Vietnamese VIQR Keyboard Layout 1.0 for Mac OS X (Monday, November 19th, 2007)">keyboard layout for Vietnamese</a>, to improve the Vietnamese typing situation on the Mac. Although the keyboard layout provided support for <em>every</em> application on the system, it was far from ideal, because very few Vietnamese speakers use Mac <acronym title="Operating System" class="initialism">OS</acronym> <abbr title="Ten">X</abbr>. Now I finally have a way to show non-Mac users some input method love too.</p>

<p>In 2006, I made a number of modifications to one of the <acronym title="input method editor" class="initialism">IME</acronym> extensions, <a href="http://avim.veneroida.com/" hreflang="en-GB" rel="bookmark" title="Hieu&rsquo;s Blog" lang="vi" xml:lang="vi">Hiếu Đặng</a>&rsquo;s <a href="https://addons.mozilla.org/en-US/firefox/addon/2947" rel="bookmark" title="Firefox Add-ons: AVIM"><acronym title="Advanced Vietnamese Input Method">AVIM</acronym> extension</a>. However, because the original extension was a kludge and I didn&rsquo;t yet consider my version to be of release quality, I hung onto the modifications for nearly two years. Recently, I briefly encountered a curious phenomenon known as <dfn>free time</dfn> and began shaping <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> into a much more presentable extension.</p>

<h2 style="text-align: center;"><a href="http://www.1ec5.org/software/avim/" rel="bookmark" title="1ec5: AVIM for Firefox"><acronym title="Advanced Vietnamese Input Method">AVIM</acronym> for Firefox</a></h2>

<p>Since it was introduced to the <a href="http://vi.wikipedia.org/wiki/Trang_Ch%C3%ADnh" hreflang="vi" rel="bookmark" title="Wikipedia tiếng VIệt: Trang Chính">Vietnamese Wikipedia</a> in 2005, <acronym title="Advanced Vietnamese Input Method">AVIM</acronym> has turned a very poor editing experience into a pleasant one. My productivity at the site increased dramatically, as I could begin to write and edit articles from directly within the site, rather than copy-pasting my composed text from another program. I hope that this extension will give you the same dramatic increase in productivity, no matter what site you frequent.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Vietnamese Dictionary 1.0 for Firefox</title>
    <link rel="alternate" type="text/html" href="http://notes.1ec5.org/archives/2008/06/05/dictionary.html" />
    <id>tag:notes.1ec5.org,2008://2.1221</id>

    <published>2008-06-05T14:30:00Z</published>
    <updated>2009-02-28T08:05:03Z</updated>

    <summary>Updated: Introducing an extension for Firefox and its companion e-mail program, Thunderbird, that checks your Vietnamese spelling as you type.</summary>
    <author>
        <name>Minh Nguyễn</name>
        <uri>http://notes.1ec5.org/</uri>
    </author>
    
        <category term="Mozilla Firefox" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Programming" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Vietnamese" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mozilla" label="mozilla" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="software" label="software" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="vietnamese" label="vietnamese" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://notes.1ec5.org/">
        <![CDATA[<p>Any serious computer user lives by <a href="http://www.mozilla.com/en-US/firefox/" rel="bookmark" title="Mozilla: Firefox">Firefox</a> extensions. My copy of Firefox has around 30 installed, and I wouldn&rsquo;t part with more than five of them. It&rsquo;s bad enough that I employ the <a href="https://addons.mozilla.org/en-US/firefox/addon/6543" rel="bookmark" title="Firefox Add-ons: Nightly Tester Tools">Nightly Tester Tools</a> extension to shove out-of-date extensions down Firefox&rsquo;s figurative throat and <a href="https://addons.mozilla.org/en-US/firefox/addon/710" rel="bookmark" title="Firefox Add-ons: Menu Editor">Menu Editor</a> to keep my sprawling Tools menu (the product of 30 extensions) tidy.</p>

<p>I know most of this blog&rsquo;s readers don&rsquo;t write in Vietnamese, but for the few who do, I spent a bit of last weekend writing an extension for Firefox and its companion e-mail program, <a href="http://www.mozilla.com/en-US/thunderbird/" rel="bookmark" title="Mozilla: Thunderbird">Thunderbird</a>, that checks your Vietnamese spelling as you type. Unlike <a href="http://notes.1ec5.org/archives/2007/11/19/viqr.html" rel="bookmark" title="Vietnamese VIQR Keyboard Layout 1.0 for Mac OS X (Monday, November 19th, 2007)">the last piece of software I released</a>, this one requires hardly any explanation. You know if you need it.</p>]]>
        <![CDATA[<h2 id="features">Features</h2>

<p>The <strong>Vietnamese Dictionary extension</strong> provides two spell checking dictionaries: one prefers the newer-style diacritical marks typically used in Vietnam (e.g., <i lang="vi" xml:lang="vi">xoá</i>), and the other prefers the traditional placement of accent marks (<i lang="vi" xml:lang="vi">xóa</i>). Both dictionaries can suggest accented words when an unaccented word is entered, as long as the entered word is not recognized by the spell checker.</p>

<h2 id="install">Installation</h2>

<p>So if you&rsquo;re a Vietnamese speaker and don&rsquo;t have absolutely perfect typing skills, you can add Vietnamese spell checking to your Web browser by downloading this extension:</p>

<script type="application/x-javascript">
<!--
function install(evt) {
	var params = {
		"Vietnamese Dictionary": {
			URL: evt.target.href,
//			IconURL: evt.target.getAttribute("iconURL"),
			Hash: evt.target.getAttribute("hash"),
			toString: function () {
				return this.URL;
			}
		}
	};
	try {
		InstallTrigger.install(params);
	}
	catch (e) {
		return true;
	}
	return false;
}
-->
</script>
<p><span class="mt-enclosure mt-enclosure-file"><a href="http://notes.1ec5.org/archives/2008/06/05/vi_dictionary_1.0.0.24.xpi" hash="sha1:4c29fd9fd20b7a4d0534b9153c801e3f6cfee11c" type="application/x-xpinstall" rel="bookmark" onclick="return install(event);">vi_dictionary_1.0.0.24.xpi</a><br />(<acronym title="Cross-Platform Install">XPInstall</acronym> archive, 51.4 <abbr title="kilobytes">kB</abbr>)</span></p>

<p>Clicking the link above will trigger a banner (typically yellow) indicating that Firefox has blocked the installation:</p>

<ul>
<li>In Firefox 2, click Edit Options, and in the dialog box that appears, click Allow and Close. Click on the link again, and click Install Now in the dialog box that appears. Finally, restart Firefox. (By clicking Allow, you added <samp>notes.1ec5.org</samp> to your whitelist. To remove this site from the whitelist, go to the Security tag of the Options or Preferences window, and click the first Exceptions button. In the dialog box that appears, select <samp>notes.1ec5.org</samp> and click Remove Site.)</li>
<li>In Firefox 3, click Allow, then click Install Now in the dialog box that appears. Restart Firefox.</li>
</ul>

<p>To install this extension in Thunderbird, right-click on the link above and select Save Link As. After saving the file to your computer, open Thunderbird, go to the Tools menu, and select Add-ons. Now find the file you downloaded and drag it into the Add-ons window. Finally, click Install Now and restart Thunderbird.</p>

<p>The extension installer is also available at the official <a href="https://addons.mozilla.org/en-US/firefox/addon/7479" rel="bookmark" title="Firefox Add-ons: Vietnamese Dictionary">Firefox Add-ons</a> website (registration required for now) and <a href="http://code.google.com/p/hunspell-spellcheck-vi/downloads/detail?name=vi_dictionary_1.0.0.24.xpi">Google Code</a> (download only).</p>

<h2 id="requirements">System requirements</h2>

<p>The extension works in Firefox versions 2.0&ndash;3.0 and Thunderbird versions 2.0&ndash;3.0<abbr title=" alpha ">a</abbr>1. Please note that the extension doesn&rsquo;t provide great suggestions in Firefox 2, especially when the word is capitalized, but you can currently download a release candidate of <a href="http://www.mozilla.com/en-US/firefox/all-rc.html" rel="bookmark" title="Mozilla: Firefox 3 Release Candidate 2">Firefox 3</a> to see the spell checker in its full glory. (The final release of Firefox 3 is coming later this month.)</p>

<p>Your computer also needs a font capable of displaying the various Vietnamese characters. Most modern operating systems now come with Vietnamese font support.</p>

<h2 id="usage">Usage</h2>

<p>After installing this extension in Firefox, right-click on any webpage textbox, make sure the &ldquo;Check Spelling&rdquo; option is enabled, and select either <samp>Vietnamese (New)</samp> or <samp>Vietnamese (Old)</samp> from the <samp>Languages</samp> submenu.</p>

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://notes.1ec5.org/archives/2008/06/05/dictionary_mac.png" type="image/png" rel="lightbox[1221]" title="The Vietnamese Dictionary extension can detect mistakes in the placement of diacritical marks."><img alt="Suggestions for &ldquo;xoá&rdquo; in the Vietnamese Dictionary extension" src="http://notes.1ec5.org/archives/2008/06/05/dictionary_mac-thumb-300x213.png" width="300" height="213" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span>

<p>In Thunderbird, open the Options or Preferences window (<samp>Tools</samp>&nbsp;&#x25b8; <samp>Options&hellip;</samp> in Windows, or <samp>Thunderbird</samp>&nbsp;&#x25b8; <samp>Preferences&hellip;</samp> on the Mac). Go to the <samp>Composition</samp> panel and the <samp>Spelling</samp> tab beneath it. From here, you can change the spell-checking language to <samp>vi-x-New</samp> or <samp>vi-x-Old</samp>. Changing the spell-checking language is considerably easier if you instead install the <a href="https://addons.mozilla.org/en-US/thunderbird/addon/3993" rel="bookmark" title="Thunderbird Add-ons: Dictionary Switcher for Thunderbird">Dictionary Switcher</a> extension for Thunderbird.</p>

<h2 id="issues">Known issues</h2>

<p>In Firefox 2 and Thunderbird 2, the wordlist is case-sensitive, so any capitalized word is marked as a misspelling, and some words with misplaced diacritical marks are ignored.</p>

<h2 id="license">License</h2>

<p>This extension was based on a list of entries in the <a href="http://www.informatik.uni-leipzig.de/~duc/Dict/" rel="bookmark" title="Từ điển tiếng Việt">Free Vietnamese Dictionary Project</a> by <span lang="vi" xml:lang="vi">Hồ Ngọc Đức</span> and a set of rules for generating suggestions in the <a href="http://code.google.com/p/hunspell-spellcheck-vi/" rel="bookmark" title="Google Code: Vietnamese Spell Checker">Vietnamese spell checker for OpenOffice.org</a> by <span lang="es-ES" xml:lang="es-ES">Iv&aacute;n Garc&iacute;a</span>. Both are licensed under the <a href="http://www.gnu.org/licenses/gpl.html" rel="bookmark" title="GNU Project: Th GNU General Public License"><acronym title="GNU&rsquo;s Not Unix!">GNU</acronym> General Public License</a>. Because the <acronym title="General Public License">GPL</acronym> requires any derivative works to be released under the same license, the <acronym>GPL</acronym> applies to this extension as well.</p>

<p>In short, that means you&rsquo;re allowed&nbsp;&ndash; actually, encouraged&nbsp;&ndash; to download, install, use, tinker with, and share this extension, as long as you don&rsquo;t forbid others from doing the same.</p>

<h2 id="build">Building it yourself</h2>

<p>If you&rsquo;d like to keep up with the <a href="http://version.1ec5.org/viewvc.cgi/vi_dictionary/trunk/" rel="bookmark" title="1ec5.org ViewVC: vi_dictionary trunk">latest development code</a>, you can use the following command (which requires <a href="http://subversion.tigris.org/" rel="bookmark" title="Tigris.org: Subversion">Subversion</a>) in a command line window, to checkout the extension&rsquo;s current source code:</p>

<blockquote>
<kbd><del datetime="2008-06-05T14:45:00-07:00" title="Switched to Google Code&rsquo;s Subversion repository.">svn co http://version.1ec5.org/vi_dictionary/trunk/</del><br />svn co http://hunspell-spellcheck-vi.googlecode.com/svn/trunk/ hunspell-spellcheck-vi</kbd>
</blockquote>

<p class="update">Iv&aacute;n and I have merged our projects, so I&rsquo;ve updated the instructions to checkout from Google Code&rsquo;s Subversion respository.</p>

<p>To package the code as an extension yourself, you can use the included build script, which requires Linux or Mac <acronym title="Operating System">OS</acronym> <abbr title="Ten">X</abbr>. In a command line window, navigate to the <samp>hunspell-spellcheck-vi/firefox_thunderbird/</samp> directory and execute the following commands:</p>

<blockquote>
<kbd>chmod 755 build.sh<br />./build.sh</kbd>
</blockquote>

<p>Two installable archives, <samp>vi_dictionary.xpi</samp> and <samp>vi_dictionary_<var>version</var>.xpi</samp> should now reside in that directory.</p>

<h2 id="request">A humble request</h2>

<p>I need feedback: you might&rsquo;ve noticed that the extension is marked as &ldquo;experimental&rdquo; at the Firefox Add-ons site. Because Firefox has become so popular lately, Mozilla has implemented a stringent vetting process for new extensions such as mine. In order for the extension to appear &ldquo;publicly&rdquo;&nbsp;&ndash; that is, for it to be included in the extensions listing and installable without having to log in&nbsp;&ndash; I need to demonstrate to Mozilla that the extension is trustworthy.</p>

<p>That&rsquo;s where you come in. After installing the Vietnamese Dictionary extension, please take a moment to publicly share your thoughts at <a href="https://addons.mozilla.org/en-US/firefox/addon/7479" rel="bookmark" title="Firefox Add-ons: Vietnamese Dictionary">its Firefox Add-ons entry</a>. Once enough people install and comment on the extension at that page, I&rsquo;ll be able to nominate it for review.</p>

<p>Finally, if you encounter any correctly spelled words that the extension wrongly marks as incorrect, please leave a comment at the <a href="http://code.google.com/p/hunspell-spellcheck-vi/wiki/Errata" rel="bookmark" title="Google Code: Vietnamese Spell Checker: Errata">Errata</a> page.</p>

<p>I hope this extension makes your day-to-day Web browsing a tad easier. Maybe it&rsquo;ll even be one of your 25 can&rsquo;t-live-without extensions.</p>]]>
    </content>
</entry>

</feed>
