<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>eric.jain.name</title>
	<atom:link href="http://eric.jain.name/feed/" rel="self" type="application/rss+xml" />
	<link>http://eric.jain.name</link>
	<description>Eric Jain&#039;s Blog</description>
	<lastBuildDate>Mon, 26 Apr 2010 18:40:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Kauai</title>
		<link>http://eric.jain.name/2010/04/16/kauai/</link>
		<comments>http://eric.jain.name/2010/04/16/kauai/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 04:20:56 +0000</pubDate>
		<dc:creator>Eric Jain</dc:creator>
				<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://eric.jain.name/?p=117</guid>
		<description><![CDATA[Trip report for a one-week vacation on Kauai (Hawaii), April 8th &#8212; 15th.

Day 1
Arrived in Lihue in the evening. Picked up our rental car from Hertz (1 min shuttle drive from the terminal). Upgraded the car to a Subaru Forester (AWD) due to some concern about the condition of a road we intended to drive [...]]]></description>
			<content:encoded><![CDATA[<p>Trip report for a one-week vacation on Kauai (Hawaii), April 8th &#8212; 15th.</p>
<p><span id="more-117"></span></p>
<h3>Day 1</h3>
<p>Arrived in Lihue in the evening. Picked up our rental car from Hertz (1 min shuttle drive from the terminal). Upgraded the car to a Subaru Forester (AWD) due to some concern about the condition of a road we intended to drive the next day. Checked in at our hotel, the <a href="http://www.astonhotels.com/aston/propertyOverview.do?propertyGroupId=45463">Aston Islander on the Beach</a> in Kapaa [<a href="http://www.tripadvisor.com/ShowUserReviews-g60616-d87217-r61767061-Aston_Islander_on_the_Beach-Kapaa_Kauai_Hawaii.html">My Review</a>].</p>
<h3>Day 2</h3>
<p>Got our <a href="http://www.hawaiistateparks.org/parks/kauai/">state park camping permits</a> in Lihue. Spent almost an hour waiting for the paperwork to be completed, but was glad we had been able to get all the permits we wanted on short notice (advance reservations of up to one year are sometimes required). Bought groceries for camping and to stock up our hotel fridge. Didn&#8217;t manage to get hold of a gas canister for our camping stove, so we&#8217;d have to make do with a Sterno. Bought topo maps at the museum shop. Rented snorkeling gear at <a href="http://www.snorkelbob.com/">Snorkel Bob&#8217;s</a>.</p>
<p>Drove around to the west side of the island. To get to Polihale Beach we had to drive the last few miles on a notorious dirt road [<a href="http://maps.google.com/maps/ms?ie=UTF8&#038;hl=en&#038;msa=0&#038;msid=111885530645305979451.000482fe794ebdb98ba77&#038;t=h&#038;z=13">Directions</a>]. There had been a lot of rain prior to our arrival, and we had been warned when we got the permit that we&#8217;d get stuck for sure. But the road was starting to dry out, and we made it just fine (albeit covered with mud). Might even have made it with a compact car, but navigating the miles of potholes would have taken forever, and we&#8217;d have had to leave the car at the day use area at the end of the road. Found a beautiful spot to set up camp and walked up along the beach until we hit the end.</p>
<table style="width:194px;">
<tr>
<td align="center" style="height:194px;background:url(http://picasaweb.google.com/s/c/transparent_album_background.gif) no-repeat left"><a href="http://picasaweb.google.com/eric.jain/PolihaleBeachApril2010?feat=embedwebsite"><img src="http://lh4.ggpht.com/_GeX70u05z6k/S8lEdFGX1PE/AAAAAAAAops/3VmT1MemPPU/s160-c/PolihaleBeachApril2010.jpg" width="160" height="160" style="margin:1px 0 0 4px;"></a></td>
</tr>
<tr>
<td style="text-align:center;font-family:arial,sans-serif;font-size:11px"><a href="http://picasaweb.google.com/eric.jain/PolihaleBeachApril2010?feat=embedwebsite" style="color:#4D4D4D;font-weight:bold;text-decoration:none;">Polihale Beach Photos</a></td>
</tr>
</table>
<h3>Day 3</h3>
<p>Drove back to Waimea and from there up to Koke&#8217;e State Park along the spectacular Waimea canyon. Stopped at the <a href="http://www.kokee.org/">Koke&#8217;e Museum</a> to ask about trail conditions. Started hiking from the end of the road at the Pu&#8217;uokila Lookout (amazing views down into Kalalau Valley and out into the ocean). Followed the (muddy) Pihea trail along the valley rim and then down into the Alakai Swamp (nice boardwalk). Followed the Alakai Trail from the intersection to its beginning at a picnic area with stunning views down Waimea Canyon. Headed back, with a small detour up Pihea Peak. Stayed at the Koke&#8217;e campground (near the museum).</p>
<table style="width:194px;">
<tr>
<td align="center" style="height:194px;background:url(http://picasaweb.google.com/s/c/transparent_album_background.gif) no-repeat left"><a href="http://picasaweb.google.com/eric.jain/AlakaiSwampApril2010?feat=embedwebsite"><img src="http://lh3.ggpht.com/_GeX70u05z6k/S8q3Ixzuc8E/AAAAAAAAo7k/CXpNsMbcUZo/s160-c/AlakaiSwampApril2010.jpg" width="160" height="160" style="margin:1px 0 0 4px;"></a></td>
</tr>
<tr>
<td style="text-align:center;font-family:arial,sans-serif;font-size:11px"><a href="http://picasaweb.google.com/eric.jain/AlakaiSwampApril2010?feat=embedwebsite" style="color:#4D4D4D;font-weight:bold;text-decoration:none;">Alakai Swamp Photos</a></td>
</tr>
</table>
<h3>Day 4</h3>
<p>Drove down to Po&#8217;ipu. Po&#8217;ipu Beach looked a bit crowded, but we didn&#8217;t have trouble finding parking. The snorkeling turned out to be quite simple: Just had to stick the head underwater and watch all kinds of colorful fish swim up. Next we went on a (guided) tour of the Allerton Garden. They had some pretty amazing flowers and fruits growing there. Too bad the guide was more focused on keeping the group entertained with football jokes than lecturing&#8230; Before we headed back to the hotel to clean our gear and get a good night&#8217;s sleep, we were glad we checked out the &#8220;Spouting Horn&#8221; blowhole across the road from the garden [<a href="http://www.youtube.com/watch?v=PJfSqJ2s7hc">Movie</a>].</p>
<table style="width:194px;">
<tr>
<td align="center" style="height:194px;background:url(http://picasaweb.google.com/s/c/transparent_album_background.gif) no-repeat left"><a href="http://picasaweb.google.com/eric.jain/AllertonGardenApril2010?feat=embedwebsite"><img src="http://lh4.ggpht.com/_GeX70u05z6k/S8wH0bJfRCE/AAAAAAAApyw/zK7AzyQZ7bM/s160-c/AllertonGardenApril2010.jpg" width="160" height="160" style="margin:1px 0 0 4px;"></a></td>
</tr>
<tr>
<td style="text-align:center;font-family:arial,sans-serif;font-size:11px"><a href="http://picasaweb.google.com/eric.jain/AllertonGardenApril2010?feat=embedwebsite" style="color:#4D4D4D;font-weight:bold;text-decoration:none;">Allerton Garden Photos</a></td>
</tr>
</table>
<h3>Day 5</h3>
<p>Got up early and drove to the other end of the road, Ke&#8217;e beach, from where we hiked the Kalalau trail along the Napali coast 11 miles to Kalalau Beach. The trail is notorious for some scary bits along cliffs, but, being used to hiking in the mountains, we did just fine. On the other hand we lost a lot of time slipping along muddy sections of the trail (the first 2 miles were worst). Not to mention time lost crossing several streams (though none more than knee-deep) and filtering water. We also went through several cycles of getting rained on and drying out again, never bothered getting out our rain jackets. Reached Kalalau Valley as the sun was setting. The evening light combined with a rainbow or two made for a very scenic setting. By the time we reached the campground at the other end of the valley, it was dark. Surprised to find the campground packed; took us a while to find an even spot between the tents. [<a href="http://connect.garmin.com/proxy/activity-service-1.0/kml/activity/30268031?full=true">Tracklog</a>]</p>
<h3>Day 6</h3>
<p>Wished we had a day to explore the valley and talk to the friendly &#8220;locals&#8221;, but we had to head back out&#8230;</p>
<table style="width:194px;">
<tr>
<td align="center" style="height:194px;background:url(http://picasaweb.google.com/s/c/transparent_album_background.gif) no-repeat left"><a href="http://picasaweb.google.com/eric.jain/KalalauTrailApril2010?feat=embedwebsite"><img src="http://lh3.ggpht.com/_GeX70u05z6k/S8wBfGhz3xE/AAAAAAAApyk/nbryrDXxDbo/s160-c/KalalauTrailApril2010.jpg" width="160" height="160" style="margin:1px 0 0 4px;"></a></td>
</tr>
<tr>
<td style="text-align:center;font-family:arial,sans-serif;font-size:11px"><a href="http://picasaweb.google.com/eric.jain/KalalauTrailApril2010?feat=embedwebsite" style="color:#4D4D4D;font-weight:bold;text-decoration:none;">Kalalau Trail Photos</a></td>
</tr>
</table>
<h3>Day 7</h3>
<p>Long list of things to do on our last day: Find sea turtles (got lucky in the area next to Brennecker&#8217;s Beach, there was even a rare monk seal there). Visit the Museum in Lihue (no stunning exhibits, but interesting nevertheless). Return rented snorkeling gear. Clean our gear (and rental car). Return the snorkeling equipment. Buy gifts. Mail postcards. Print boarding passes. Even managed to swing by the Opaeka&#8217;a (yawn) and Wailua (wow) Falls [<a href="http://www.youtube.com/watch?v=DpTl_Ohjafc">Movie</a>].</p>
<h3>Day 8</h3>
<p>Our flight left early in the morning. On our last day a cold front had hit Hawaii; and since the weather back home in Seattle was nice, there was almost no noticeable difference when we got off the plane!</p>
<h3>Useful Resources</h3>
<ul>
<li><a href="http://www.amazon.com/Ultimate-Kauai-Guidebook-Revealed/dp/0971727953">Ultimate Kauai Guidebook</a> incl <a href="http://www.wizardpub.com/kauai/kauupdate.html">Updates</a> [<a href="http://www.amazon.com/review/R1YHVCI5D2W8WH/ref=cm_cr_rdp_perm">My Review</a>]</li>
<li><a href="http://www.tripadvisor.com/ShowForum-g29218-i304-Kauai_Hawaii.html">Kauai Forum</a> at TripAdvisor &#8212; had all questions the guidebook didn&#8217;t cover answered there</li>
<li><a href="http://www.kauaiexplorer.com/">Kauai Explorer</a> &#8212; ocean report and list of beaches and hiking trails</li>
<li><a href="http://www.wrcc.dri.edu/narratives/HAWAII.htm">Climate of Hawaii</a> &#8212; some background information required to make sense of local weather forecasts</li>
<li>National Weather Service: <a href="http://forecast.weather.gov/product.php?site=NWS&#038;issuedby=HFO&#038;product=AFD&#038;format=txt">Area Forecast</a>; <a href="http://forecast.weather.gov/MapClick.php?zoneid=HIZ002&#038;TextType=1">Windward</a>, <a href="http://forecast.weather.gov/MapClick.php?zoneid=HIZ003&#038;TextType=1">Leeward</a> and <a href="http://forecast.weather.gov/MapClick.php?zoneid=HIZ004&#038;TextType=1">Mountain</a> Forecasts</li>
<li><a href="http://www.priceline.com/">Priceline.com</a> &#8212; first time I used them, but seemed to work great for getting a good deal on the flight + hotel + car rental</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eric.jain.name/2010/04/16/kauai/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hosting Applets in Google Docs</title>
		<link>http://eric.jain.name/2010/01/22/hosting-applets-in-google-docs/</link>
		<comments>http://eric.jain.name/2010/01/22/hosting-applets-in-google-docs/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 23:44:46 +0000</pubDate>
		<dc:creator>Eric Jain</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eric.jain.name/?p=92</guid>
		<description><![CDATA[Google Docs recently added support for uploading arbitrary files (up to 250MB large). Can this be used to host Java applets?

I uploaded a jar file containing a simple test applet to Google Docs and referenced it like so:

&#60;applet
  width=&#34;440&#34; height=&#34;60&#34;
  code=&#34;JavaVersionDisplayApplet.class&#34;
  codebase=&#34;http://docs.google.com/&#34;
  archive=&#34;uc?id=0B9ANnqvnRtroOTM5YWE3YmMtMGZkMy00ZGE5LWE2NWUtOGZhNzk5MzA2NzBk&#34;&#62;
&#60;/applet&#62;

The result:
 
]]></description>
			<content:encoded><![CDATA[<p>Google Docs recently added support for <a href="http://docs.google.com/support/bin/answer.py?answer=50092">uploading arbitrary files</a> (up to 250MB large). Can this be used to host Java applets?</p>
<p><span id="more-92"></span></p>
<p>I uploaded a jar file containing a simple test applet to Google Docs and referenced it like so:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">applet</span></span>
<span style="color: #009900;">  <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;440&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;60&quot;</span></span>
<span style="color: #009900;">  <span style="color: #000066;">code</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;JavaVersionDisplayApplet.class&quot;</span></span>
<span style="color: #009900;">  <span style="color: #000066;">codebase</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://docs.google.com/&quot;</span></span>
<span style="color: #009900;">  <span style="color: #000066;">archive</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;uc?id=0B9ANnqvnRtroOTM5YWE3YmMtMGZkMy00ZGE5LWE2NWUtOGZhNzk5MzA2NzBk&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">applet</span>&gt;</span></pre></div></div>

<p>The result:</p>
<p><applet width="440" height="60" code="JavaVersionDisplayApplet.class" codebase="http://docs.google.com/" archive="uc?id=0B9ANnqvnRtroOTM5YWE3YmMtMGZkMy00ZGE5LWE2NWUtOGZhNzk5MzA2NzBk"> </applet></p>
]]></content:encoded>
			<wfw:commentRss>http://eric.jain.name/2010/01/22/hosting-applets-in-google-docs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sharing Tracklogs</title>
		<link>http://eric.jain.name/2009/11/12/sharing-tracklogs/</link>
		<comments>http://eric.jain.name/2009/11/12/sharing-tracklogs/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 02:12:17 +0000</pubDate>
		<dc:creator>Eric Jain</dc:creator>
				<category><![CDATA[Recreation]]></category>

		<guid isPermaLink="false">http://eric.jain.name/?p=68</guid>
		<description><![CDATA[While hiking, I often carry along a small GPS device to record my tracks. This is not just useful in case I get lost and need to backtrack, but also allows me to geotag my pictures before uploading them. Plus it can be fun to review a hike in Google Earth. What about sharing tracklogs? [...]]]></description>
			<content:encoded><![CDATA[<p>While hiking, I often carry along a <a href="http://www.garmin.com/products/etrexH/">small GPS device</a> to record my tracks. This is not just useful in case I get lost and need to backtrack, but also allows me to <a href="http://www.robogeo.com/">geotag</a> my pictures before <a href="http://picasaweb.google.com/eric.jain">uploading</a> them. Plus it can be fun to review a hike in Google Earth. What about sharing tracklogs? This can be valuable when hiking in areas with outdated maps or maps hat don&#8217;t have all trails. So I had a look at some of the existing websites for sharing GPS tracklogs &#8212; here&#8217;s what I found.</p>
<p><span id="more-68"></span></p>
<div style="padding: 1em; border: 1px solid silver">
<a href="/2009/11/12/sharing-tracklogs/20091101.gpx"><img src="http://lh5.ggpht.com/_GeX70u05z6k/Su5n9DeylLI/AAAAAAAAgB4/z4L-IrVJsIM/s320/20091101-tracklog.jpg" /></a><br />
<small>Tracklog in Google Earth</small>
</div>
<h3><a href="http://trailregistry.com/">TrailRegistry</a></h3>
<p>TrailRegistry appears to be one of the oldest sites for sharing tracklogs. It also has the smartest approach, using a <a href="http://www.topofusion.com/network.php">network algorithm</a> to consolidate overlapping tracklogs and remove noise. Unfortunately the site doesn&#8217;t appear to have had much effort invested into it since it was set up in 2003.</p>
<h3><a href="http://www.gpxchange.com/">GPXchange</a></h3>
<p>GPXchange also appears to have been around since about 2003. The interface is similarly lacking and trail coverage isn&#8217;t great. No attempt is made to consolidate tracklogs.</p>
<h3><a href="http://www.gpsxchange.com/">GpsXChange.com</a></h3>
<p>GpsXChange.com is a simple forum where people can post tracklogs. Seems to have been around since circa 2006 &#8212; like the following sites. Finding a tracklog requires searching the forums e.g. with a trail name. There doesn&#8217;t appear to be a huge amount of participation.</p>
<h3><a href="http://redtrails.com/">Redtrails</a></h3>
<p>Redtrails is based on the trail maps compiled by <a href="http://switchbacks.com/maps/NW_Trails.html">Northwest Trails</a>, where you can submit tracklogs (and wait for them to be integrated into a consolidated trail map database which is released every month or so). This is by far the most comprehensive set of trails (for Washington State) that  I came across.</p>
<h3><a href="http://www.everytrail.com/">EveryTrail</a></h3>
<p>EveryTrail is a Web 2.0-ish site where you can share a trip by uploading a tracklog and some pictures. Nice site to browse around, but if you are looking for a specific trail, your chances aren&#8217;t to good (unless it happens to be a major tourist attraction). Requires login to download raw tracklogs.</p>
<h3><a href="http://www.wikiloc.com/">Wikiloc</a></h3>
<p>Similar to EveryTrail. The interface is a bit less cluttered interface but I found only a dozen hiking trails for all of Washington State. Also requires login to download raw tracklogs.</p>
<h3><a href="http://connect.garmin.com/">Garmin Connect</a></h3>
<p>The focus of this site seems to be more on keeping track of your fitness than providing hiking trail maps (e.g. it will show additional information such as the heart rate, if recorded), but it has the best interface for looking at tracklogs. There&#8217;s a reasonable amount of trails. Exports raw tracklogs in Garmin&#8217;s TCX rather than in the standard GPX format.</p>
<h3><a href="http://www.trails.com/">Trails.com</a></h3>
<p>This site has been around since at least 2000, but they just started experimenting with letting people upload tracklogs. Tracklogs are attached to trail descriptions taken from books. But I couldn&#8217;t get this feature to work yet&#8230;</p>
<h3>(In)conclusion</h3>
<p>There is no shortage of options for uploading tracklogs. The ideal site would both store individual tracklogs and aggregate them into consensus trails &#8212; while making use of contextual information (How long ago was a tracklog recorded? During what season? Using what device? How reliable is the submitter?). Such as site does not appear to exist at the moment.</p>
<p>I&#8217;m not sure I&#8217;d bother submitting my (sometimes messy) tracklogs to sites such as TrailRegistry or Northwest Trails. But I do want to make sure that the raw data is available to anyone who wants to crawl it. Hosting the raw files on this blog is an option, but that makes finding the files difficult for anyone but Google. So I&#8217;ll probably go with Garmin Connect or Gp(s)XChange.com. Suggestions?</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.jain.name/2009/11/12/sharing-tracklogs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GTAC 2008</title>
		<link>http://eric.jain.name/2008/10/23/gtac-2008/</link>
		<comments>http://eric.jain.name/2008/10/23/gtac-2008/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 07:03:45 +0000</pubDate>
		<dc:creator>Eric Jain</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eric.jain.name/2008/10/24/gtac-2008/</guid>
		<description><![CDATA[Here are my take-away notes from the first day of the Google Testing and Automation Conference.

James A. Whitaker (Microsoft) on The Future of Testing: Crowdsourcing testing (see e.g. uTest) is the simplest way to get an application tested on a large number of different platforms. Such services should also allow testers to focus more on [...]]]></description>
			<content:encoded><![CDATA[<p>Here are my take-away notes from the first day of the <a href="http://googletesting.blogspot.com/2008/04/gtac-2008-in-seattle.html">Google Testing and Automation Conference</a>.</p>
<p><span id="more-67"></span></p>
<p><strong>James A. Whitaker (Microsoft) on <em>The Future of Testing</em>:</strong> Crowdsourcing testing (see e.g. <a href="http://www.utest.com/">uTest</a>) is the simplest way to get an application tested on a large number of different platforms. Such services should also allow testers to focus more on designing rather than executing (manual) tests. Virtualisation could address the issue of hard to reproduce bugs by capturing the state of the machine as part of bug reports. Game testers use maps to highlight areas in game worlds that have been thoroughly tested. Similar visualizations could help people testing normal software what areas of the application need more testing.</p>
<p><strong>Elfriede Dustin and Marcus Borch (IDT) on <em>Advances in Automated Software Testing Technologies</em></strong>: There are <a href="http://generatedata.com/">tools that can help generate random test data</a>. The speakers spoke in great length about generating test code from customer supplied spreadsheets. Not sure if anyone in the audience understood what the advantage of this approach is &#8212; I didn&#8217;t.</p>
<p><strong>Andres Almiray (Oracle) on <em>Boosting Your Testing Productivity with Groovy</em>:</strong> This was more about the advantages of Groovy in general than testing, though towards the end of the talk the speaker did show how to create mock objects (using MockFor/StubFor) and how to use DbUnit in Groovy (more or less the same way you&#8217;d use it in Java). Oh boy this guy really did drink the Kool-Aid&#8230;</p>
<p><strong>Markus Clermont and John Thomas on <em>Taming the Beast: How to Test an AJAX Application</em>:</strong> The speakers did their best to keep he audience awake in this after-lunch talk. This got a bit tiring after the tenth &#8220;raise your hand if&#8230;&#8221;, but they had an excellent point: The amount of large, end-to-end tests (written e.g. with Selenium) should be minimized in favor of &#8220;medium&#8221;-sized tests that test interactions between specific components (one level deep).</p>
<p><strong>Matt Wood (Sanger Institute) on <em>The New Genomics: Software Development at Petabyte Scale</em>:</strong> This was perhaps the most interesting talk, though it didn&#8217;t really go into testing at all!</p>
<p><strong>Marc-Elian Bégin (Six2) on <em>Using Cloud Computing to Automate Full-Scale System Tests</em>:</strong> The case was made that Amazon EC2 is of great use for (system-level) testing. The speaker predicts that paravirtualization (e.g. with Xen) will increasingly be replaced with full virtualization (e.g. KVM), even though latter requires special hardware support (built into most newer processors?).</p>
<p><strong>Vishal Chowdhary (Microsoft) on <em>Practicing Testablity in the Real World</em>:</strong> Good explanation of the basics of writing testable code, though perhaps a bit too basic for the audience that was present.</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.jain.name/2008/10/23/gtac-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seattle by Land, Water and Air</title>
		<link>http://eric.jain.name/2008/08/05/seattle-land-water-air/</link>
		<comments>http://eric.jain.name/2008/08/05/seattle-land-water-air/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 01:11:10 +0000</pubDate>
		<dc:creator>Eric Jain</dc:creator>
				<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://eric.jain.name/2008/08/05/seattle-land-water-air/</guid>
		<description><![CDATA[Having my sister visit me here in Seattle provided a good excuse to do some local sightseeing &#8212; first by land and water with the Ducks of Seattle, then by air with Seattle Sea Planes.

Here are the exact routes taken on these two tours:
Ride the Ducks of Seattle

Tracklog
Seattle Sea Planes

Tracklog &#124; Pictures

#map-plane, #map-duck { width: [...]]]></description>
			<content:encoded><![CDATA[<p>Having my sister visit me here in Seattle provided a good excuse to do some local sightseeing &#8212; first by land and water with the <a href="http://www.ridetheducksofseattle.com/">Ducks of Seattle</a>, then by air with <a href="http://www.seattleseaplanes.com/">Seattle Sea Planes</a>.</p>
<p><span id="more-66"></span></p>
<p>Here are the exact routes taken on these two tours:</p>
<p><strong>Ride the Ducks of Seattle</strong></p>
<div id="map-duck"></div>
<p><a href="duck.gpx">Tracklog</a></p>
<p><strong>Seattle Sea Planes</strong></p>
<div id="map-plane"></div>
<p><a href="plane.gpx">Tracklog</a> | <a href="http://picasaweb.google.com/eric.jain/SeattleSeaPlaneAugust2008">Pictures</a></p>
<p><script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAA1ie5eJQW9e6q2ZQ_BA68hRTRNlqWHuvjCh6l9lpJg_hxaZzwYxRdO9Z9zsnPQ1egjGR83hDs3rnrLg" type="text/javascript"></script></p>
<style type="text/css">#map-plane, #map-duck { width: 400px; height: 300px; }</style>
<p><script type="text/javascript" src="duck.js"></script><br />
<script type="text/javascript" src="plane.js"></script></p>
<p>The routes were recorded with a Garmin eTrex H, and the maps were created with <a href="http://www.robogeo.com/home/">Robogeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.jain.name/2008/08/05/seattle-land-water-air/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Edward Tufte&#039;s Presenting Data and Information Course</title>
		<link>http://eric.jain.name/2008/07/18/edward-tufte-presenting-data-and-information-course/</link>
		<comments>http://eric.jain.name/2008/07/18/edward-tufte-presenting-data-and-information-course/#comments</comments>
		<pubDate>Sat, 19 Jul 2008 00:08:31 +0000</pubDate>
		<dc:creator>Eric Jain</dc:creator>
				<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://eric.jain.name/2008/07/18/edward-tufte-presenting-data-and-information-course/</guid>
		<description><![CDATA[Here are some take-away notes from the course on presenting data and information that Edward Tufte gave in Seattle on July 17.


Don&#8217;t choose a visualization method in advance. The goal of a graphic is to invoke a content response, not a design response (i.e. wow, nice graph).
Organization charts are not informative &#8212; unless the lines [...]]]></description>
			<content:encoded><![CDATA[<p>Here are some take-away notes from the course on <a href="http://www.edwardtufte.com/tufte/courses">presenting data and information</a> that Edward Tufte gave in Seattle on July 17.</p>
<p><span id="more-65"></span></p>
<p><img src="tufte_books.gif" alt="Course Books"/></p>
<p>Don&#8217;t choose a visualization method in advance. The goal of a graphic is to invoke a <strong>content response</strong>, not a design response (i.e. wow, nice graph).</p>
<p>Organization charts are not informative &#8212; unless the lines (relationships) are annotated.</p>
<p>Every graphic should provide <strong>reasons to believe</strong>. Detail helps credibility and raises interest (as an extreme example consider aerial pictures). If you don&#8217;t show all the data you must be a &#8220;cherry picker&#8221;.</p>
<p>Letting people look at data themselves stimulates their interest and gets them thinking (and has more impact). More data points means more &#8220;hooks&#8221; for people to (potentially) be interested in.</p>
<p>When possible, bring <strong>something real</strong> to a presentation (for example a hospital bill when discussing medical expenses).</p>
<p><strong>Annotate everything</strong> &#8212; even your text. Don&#8217;t use foot notes, create side notes.</p>
<p>It rarely makes sense to order items in tables alphabetically.</p>
<p>The Gil Sans font (a compact sans-serif font) works great for (time-)tables.</p>
<p>Don&#8217;t go for the lowest common denominator. Don&#8217;t be &#8220;flabby &#038; generic&#8221;.</p>
<p>Make presentations that make proper use of the human eye-brain system (which has a bandwidth of ~10Mbs).</p>
<p>Tables outperform graphics up until ~500 data points.</p>
<p>Respect both the content and the audience. Why is it that an average PowerPoint table contains only 12 numbers, but tables in the sports section of a magazine can burden their audience with an average of ~200 numbers?</p>
<p>Distribute data in space (using multiple monitors, if must be) rather than not time (e.g. across several slides).</p>
<p>People should have their names on their work (as pride often results in better work).</p>
<p>Don&#8217;t separate information depending to its mode of production (e.g. in separate &#8220;multimedia&#8221; slide shows).</p>
<p>Be aware that design often mimics the hierarchy in an organization.</p>
<p>The original computer desktop at Xerox had icons for documents only (i.e. now trash icon etc).</p>
<p>Create &#8220;infographics&#8221; that you can leave around (maybe people will give them another look during a following, boring presentation).</p>
<p>&#8220;No matter how beautiful your interface is, it would be better if there was less of it&#8221; (though I don&#8217;t think he&#8217;d extend that all the way to command line interfaces).</p>
<p>&#8220;Flat&#8221; interfaces beat &#8220;hierarchical&#8221; interfaces in terms of usability.</p>
<p>Efforts to provide &#8220;personalized&#8221; interfaces are &#8220;pathetic&#8221; (shows that you don&#8217;t know how to present something, and try to offload the responsibility to the user).</p>
<p>Going beyond <a href="http://en.wikipedia.org/wiki/Sparkline">sparklines</a>: <a href="http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0002vW&#038;topic_id=1">Wavefields</a> (?).</p>
<p>Instead of doing &#8220;presentations&#8221;, dump the data on the audience, let them read through it, and then have a &#8220;guided discussion&#8221; (i.e. answer questions).</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.jain.name/2008/07/18/edward-tufte-presenting-data-and-information-course/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manning Books in Safari Books</title>
		<link>http://eric.jain.name/2008/06/19/manning-books-in-safari-books/</link>
		<comments>http://eric.jain.name/2008/06/19/manning-books-in-safari-books/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 20:38:35 +0000</pubDate>
		<dc:creator>Eric Jain</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eric.jain.name/2008/06/19/manning-books-in-safari-books/</guid>
		<description><![CDATA[Over the last few days several books from Manning Publications appear to have been added to Safari Books.


So far there are 11 books, from Jess in Action (published July 2003) to jQuery in Action (published February 2008). I&#8217;m somewhat surprised that there was no announcement (so far) on either company&#8217;s web sites&#8230; In any case [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last few days several books from <a href="http://www.manning.com/">Manning Publications</a> appear to have been added to <a href="http://my.safaribooksonline.com/">Safari Books</a>.</p>
<p><span id="more-64"></span></p>
<p><img src="/2008/06/19/manning-books-in-safari-books/safari.png" alt="Safari Screen Shot"/></p>
<p>So far there are 11 books, from <a href="http://my.safaribooksonline.com/9781930110892">Jess in Action</a> (published July 2003) to <a href="http://my.safaribooksonline.com/9781933988351">jQuery in Action</a> (published February 2008). I&#8217;m somewhat surprised that there was no announcement (so far) on either company&#8217;s web sites&#8230; In any case I&#8217;m hoping that there is more to come!</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.jain.name/2008/06/19/manning-books-in-safari-books/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No Fluff Just Stuff</title>
		<link>http://eric.jain.name/2008/04/20/no-fluff-just-stuff/</link>
		<comments>http://eric.jain.name/2008/04/20/no-fluff-just-stuff/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 06:25:04 +0000</pubDate>
		<dc:creator>Eric Jain</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eric.jain.name/2008/04/20/no-fluff-just-stuff/</guid>
		<description><![CDATA[Spent this weekend at the Spring 2008 Pacific Northwest Software Symposium. Here are my notes (trimmed down to whatever I felt was new &#038; noteworthy to me) and some general comments about the event.

Sessions
These are the sessions I attended:

TestNG with Code Coverage (Howard Lewis Ship)
Groovy: Metaprogramming (Scott Davis)
Professional Java UI Development with Eclipse RCP (Brian [...]]]></description>
			<content:encoded><![CDATA[<p>Spent this weekend at the <a href="http://www.nofluffjuststuff.com/conference/seattle/2008/04/index.html">Spring 2008 Pacific Northwest Software Symposium</a>. Here are my notes (trimmed down to whatever I felt was new &#038; noteworthy to me) and some general comments about the event.</p>
<p><span id="more-63"></span></p>
<h3>Sessions</h3>
<p>These are the sessions I attended:</p>
<ul>
<li>TestNG with Code Coverage (Howard Lewis Ship)</li>
<li>Groovy: Metaprogramming (Scott Davis)</li>
<li>Professional Java UI Development with Eclipse RCP (Brian Sam-Bodden)</li>
<li>The Busy Java Developers Guide to Concurrency (Ted Neward)</li>
<li>Code Metrics &#038; Analysis for Agile Projects (Neal Ford)</li>
<li>Building Web Apps with Spring OSGi (Craig Walls)</li>
<li>The Busy Developer&#8217;s Guide to Debugging (Ted Neward)</li>
<li>The Busy Developer&#8217;s Guide to Monitoring (Ted Neward)</li>
<li>The Busy Developer&#8217;s Guide to Scala (Ted Neward)</li>
<li>The Busy Developer&#8217;s Guide to Hacking on the JVM (Ted Neward)</li>
</ul>
<h3>Notes</h3>
<p>Test coverage should at least be 85% as there is often a significant number of bugs that are flushed out when you cross that threshold. But if you don&#8217;t aim for 100% coverage, there is the risk that you start copping out on testing the most difficult code!</p>
<p>When using the <a href="http://www.eclemma.org/">EclEmma</a> Eclipse plug-in for gathering code coverage statistics, set up separate build output folders &#8212; otherwise unit tests are included in the statistics (even if the unit test source folder is not selected).</p>
<p><a href="http://cobertura.sourceforge.net/">Cobertura</a> generates somewhat better code coverage statistics than <a href="http://emma.sourceforge.net/">EMMA</a>, but lacks an IDE plug-in.</p>
<p><a href="http://maven.apache.org/">Maven</a> is a great idea, but using it for your project can be &#8220;like living with a dangerous psychopath&#8221; &#8212; it behaves when showing it to other people, but you never know when it will turn on you&#8230;.</p>
<p>Ant has a <a href="http://ant.apache.org/manual/CoreTasks/presetdef.html">presetdef</a> task that allows you to create an alias for a task, and set default attribute values.</p>
<p><a href="http://testng.org/doc/">TestNG</a> can be used both for unit and for functional tests. Test &#8220;groups&#8221; can distinguish the two (quirk: can&#8217;t directly select all tests that are not in a group). TestNG creates only one instance of each test class. TestNG can run tests in parallel (either at the class or at the method level). There is an @DataProvider mechanism that can return either an array of test data or an iterator. TestNG can run JUnit tests! Can also run Selenium RC from TestNG &#8212; check the Tapestry test code.</p>
<p>New <a href="http://groovy.codehaus.org/">Groovy</a> language features don&#8217;t require new Java versions. This may be attractive for people who are stuck with old versions of Java. Groovy even allows addition and modification of all methods at runtime via its <a href="http://groovy.codehaus.org/ExpandoMetaClass">ExpandoMetaClass</a>, e.g. <code>String.metaClass.foo = { -> delegate.toUppercase() }</code></p>
<p>A JVM may map threads n:m at the OS level.</p>
<p>Schedulers may do &#8220;priority inversion&#8221; when a low priority thread holds a lock required by a high priority thread.</p>
<p>Build-specific deltas are more interesting than absolute numbers when looking at code metrics.</p>
<p>The &#8220;teddy bear&#8221; debugging technique: Explain the problem to a teddy bear! Often you&#8217;ll realize what the problem is before you need to go bother a colleague&#8230;</p>
<p>Should declare unchecked exceptions.</p>
<p><code>-XX:OnOutOfMemoryError=cmd</code> sets a command that is run when we run out of memory.</p>
<p><code>-XX:TraceClassLoading</code> shows where classes are loaded from.</p>
<p>The <code>extconflict</code> tool (shipped with Sun&#8217;s Java) detects duplicate classes in lib/ext.</p>
<p>Heisenberg principal: Monitoring a system always influences it (e.g. garbage collection activity due to jconsole connection).</p>
<p>jconsole has a scripting plugin. Also consider using Groovy for scripting tasks.</p>
<p><a href="http://www.scala-lang.org/">Scala</a> is an (impure) functional language. Functional languages are great for concurrent programming (immutable objects, use of &#8220;actors&#8221; etc). But Scala won&#8217;t be ready for production use this year (or even next year). Get the <a href="http://www.artima.com/shop/forsale">book</a>!</p>
<p>Reflection can be used to read (and set) private fields, even in core classes such as java.lang.String! Going one step further: We can provide our own String implementation (use <code>-Xbootclasspath=...</code>).</p>
<h3>Comments</h3>
<p>Most of the talks were at a level of detail that if you happened to have read a book on the topic you weren&#8217;t likely to learn a lot. Nevertheless you were bound to pick up some useful stuff as (most of) the speakers were clearly not only quite experienced but also great speakers. Ideally you&#8217;d have the number one expert on each topic give the talk, but I realize that isn&#8217;t practical&#8230; Despite the &#8220;No Fluff&#8221; branding there was a lot of talk about how we all need to be &#8220;agile&#8221; etc. Nevertheless I think everyone managed to keep their feet on the ground, and in any case their were sufficient technical talks. Not to mention the food and free stuff :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://eric.jain.name/2008/04/20/no-fluff-just-stuff/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Java to Read Excel Files</title>
		<link>http://eric.jain.name/2008/02/14/java-excel/</link>
		<comments>http://eric.jain.name/2008/02/14/java-excel/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 03:06:35 +0000</pubDate>
		<dc:creator>Eric Jain</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eric.jain.name/2008/02/14/java-excel/</guid>
		<description><![CDATA[I recently needed to add support for extracting data from Excel files (which are still ubiquitous in labs) to a Java application.

First I tried using POI-HSSF (a well-known Apache project). The code is reasonably straightforward &#8212; though I had to get it from tutorials on the Web as I couldn&#8217;t find much in terms of [...]]]></description>
			<content:encoded><![CDATA[<p>I recently needed to add support for extracting data from Excel files (which are still ubiquitous in labs) to a Java application.</p>
<p><span id="more-62"></span></p>
<p>First I tried using <a href="http://poi.apache.org/hssf/">POI-HSSF</a> (a well-known Apache project). The code is reasonably straightforward &#8212; though I had to get it from tutorials on the Web as I couldn&#8217;t find much in terms of documentation on their site, and the API isn&#8217;t exactly self-evident:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">POIFSFileSystem fs = <span style="color: #000000; font-weight: bold;">new</span> POIFSFileSystem<span style="color: #009900;">&#40;</span>in<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
HSSFWorkbook wb = <span style="color: #000000; font-weight: bold;">new</span> HSSFWorkbook<span style="color: #009900;">&#40;</span>fs<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
HSSFSheet sheet = wb.<span style="color: #006633;">getSheetAt</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399; font-weight: bold;">Iterator</span> rows = sheet.<span style="color: #006633;">rowIterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000;  font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>rows.<span style="color: #006633;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    HSSFRow row = <span style="color: #009900;">&#40;</span>HSSFRow<span style="color: #009900;">&#41;</span> rows.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399; font-weight: bold;">Iterator</span> cells = row.<span style="color: #006633;">cellIterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    List<span style="color: #339933;">&lt;</span>string<span style="color: #339933;">&gt;</span> fields = <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>string<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000;  font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>cells.<span style="color: #006633;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        HSSFCell cell = <span style="color: #009900;">&#40;</span>HSSFCell<span style="color: #009900;">&#41;</span> cells.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000;  font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>cell.<span style="color: #006633;">getCellType</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000;  font-weight: bold;">case</span> HSSFCell.<span style="color: #006633;">CELL_TYPE_STRING</span>:
                fields.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>cell.<span style="color: #006633;">getStringCellValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
            <span style="color: #000000;  font-weight: bold;">case</span> HSSFCell.<span style="color: #006633;">CELL_TYPE_NUMERIC</span>:
                fields.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">Double</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span>cell.<span style="color: #006633;">getNumericCellValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
            <span style="color: #000000;  font-weight: bold;">default</span>:
                log.<span style="color: #006633;">warn</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Unsupported cell type: &quot;</span> + cell.<span style="color: #006633;">getCellType</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    process<span style="color: #009900;">&#40;</span>fields<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>This works fine &#8212; except that there doesn&#8217;t seem to be a way to keep the precision of numbers, i.e. if you don&#8217;t want to convert &#8220;4&#8243; to &#8220;4.0&#8243;! Fortunately POI isn&#8217;t the only game in town. I ended up using <a href="http://jexcelapi.sourceforge.net/">JExcel API</a> which has a much simpler API (and behaves the way I want it to):</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">Workbook workbook = Workbook.<span style="color: #006633;">getWorkbook</span><span style="color: #009900;">&#40;</span>in<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Sheet sheet = workbook.<span style="color: #006633;">getSheet</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000;  font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #006600; font-weight: bold;">int</span> i = <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> sheet.<span style="color: #006633;">getRows</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> ++i<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    List<span style="color: #339933;">&lt;</span>string<span style="color: #339933;">&gt;</span> fields = <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>string<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000;  font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #006600; font-weight: bold;">int</span> j = <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> sheet.<span style="color: #006633;">getColumns</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> ++j<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        fields.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>sheet.<span style="color: #006633;">getCell</span><span style="color: #009900;">&#40;</span>j, i<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getContents</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    process<span style="color: #009900;">&#40;</span>fields<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://eric.jain.name/2008/02/14/java-excel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Blist</title>
		<link>http://eric.jain.name/2008/02/12/blist/</link>
		<comments>http://eric.jain.name/2008/02/12/blist/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 07:38:10 +0000</pubDate>
		<dc:creator>Eric Jain</dc:creator>
				<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://eric.jain.name/2008/02/12/blist/</guid>
		<description><![CDATA[Blist is an interesting cross between a spreadsheet application and an interface to a proper database. The goal (I believe) is to allow mere mortals to create and share simple databases on the Web.

Upon logging in and creating a &#8220;blist&#8221;, you are presented with a spreadsheet-like view. You then drag and drop data types onto [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.blist.com/">Blist</a> is an interesting cross between a spreadsheet application and an interface to a proper database. The goal (I believe) is to allow mere mortals to create and share simple databases on the Web.</p>
<p><span id="more-61"></span></p>
<p>Upon logging in and creating a &#8220;blist&#8221;, you are presented with a spreadsheet-like view. You then drag and drop data types onto the spreadsheet to create columns.</p>
<p><img alt="Screenshot" src="/2008/02/12/blist/screenshot.png"/></p>
<p>&#8220;Lenses&#8221; can be created to get non-tabular (and filtered) views of your data. Data can be entered directly both in the table or in the &#8220;lense&#8221; views. There are options to share and discuss &#8220;blists&#8221; &#8212; however these don&#8217;t seem to be implemented yet.</p>
<p>Blist is still in a very early stage. Following are some comments, based on my initial impression.</p>
<h3>Neat!</h3>
<p>In addition to the standard data types (text, numbers, dates etc) there are lots of unusual but useful data types such as email addresses, images, and star ratings.</p>
<p>Columns (unlike in a normal spreadsheet) can be set to allow multiple values in a single &#8220;cell&#8221; (possible, but cumbersome to implement with a normal database).</p>
<p>You can easily create &#8220;custom types&#8221; a.k.a. &#8220;pick lists&#8221; or enumerations.</p>
<p>It is possible to group/nest columns one level deep, creating a &#8220;blist-in-a-blist&#8221;.</p>
<p>Blist (unlike a normal database) doesn&#8217;t prevent invalid values in fields that expect a certain format. But (unlike a normal spreadsheet) invalid values are highlighted.</p>
<h3>Suggestions&#8230;</h3>
<p>If non-technical users are the main audience, it may be worth thinking about making the interface less intimidating. Too many buttons and controls!</p>
<p>Features that haven&#8217;t been implemented yet would probably better be hidden from view. It&#8217;s frustrating to not know if a button is disabled because you&#8217;re in the wrong mode, or because it isn&#8217;t implemented yet&#8230;</p>
<p>Support for undoing actions (and fewer prompts).</p>
<p>Support for changing the data type of a column (e.g. from number to string).</p>
<p>There is a nice calendar control for entering dates. Unfortunately it can&#8217;t be bypassed &#8212; if you want to enter an old date you need to go back in time month by month&#8230; The money data type is nice, too, but seems to be USD only.</p>
<p>Some of the data types muddle the distinction between data type and display. For example, is a checkbox really a different data type than a boolean &#8212; or is it just another way to display boolean values?</p>
<p>Help, Firefox eats all my memory! (May be an issue with Flash?)</p>
<p>I bet a geo-location data type and map view is already being worked on&#8230;</p>
<p>If the query builder showed a preview of the results, this would save some tedious back and forth when building queries. Speaking of search: Where is the quick search?</p>
<p>Should be able to link blists to each other (one of the killer features of relational databases)!</p>
<p>Support copy-pasting single (and multiple) cells.</p>
<p>Finally, there is a typo in the &#8220;downloading Lenss&#8221; status message :-)</p>
<h3>Conclusion</h3>
<p>While Blist isn&#8217;t the first effort to do spreadsheets or databases on the Web (think <a href="http://docs.google.com/">Google Spreadsheet</a> or <a href="http://www.freebase.com/">Freebase</a>), the way it combines the best features from both worlds seems new (to me, at least).</p>
<p>Will be interesting to see how the &#8220;social&#8221; features are implemented &#8212; and of course if their infrastructure manages to scale (especially once they enable the data import feature and people start dumping existing collections into Blist)!</p>
<div id="2008-02-20" style="font-size: smaller">
<h3 style="color: red">Update (February 20, 2008)</h3>
<p>Some more suggestions regarding the <a href="http://blog.blist.com/index.php/2008/02/20/new-features-excel-import-sharing-charts-search/">features added in the latest release</a>:</p>
<ul>
<li>Import: Support tab-delimited files in addition to CSV? Auto-detect e.g. numeric columns? Support creating custom types during import? Need to know a bit more than &#8220;There was a problem uploading your file&#8221; if something goes wrong!</li>
<li>Charts: This will be useful once aggregates are supported! Can the generated charts be copy-pasted into e.g. PowerPoint?</li>
<li>Search: Don&#8217;t need substring matches &#8212; but more speed! Highlight matches? Support for multiple search terms? Searches across several blists?</li>
<li>Sharing: Will there be a way to make blists public, and link to them?</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://eric.jain.name/2008/02/12/blist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
