<?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/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>Al Hoang &#187; programming</title>
	<atom:link href="http://blogs.law.harvard.edu/hoanga/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.law.harvard.edu/hoanga</link>
	<description>Just another weblog</description>
	<lastBuildDate>Wed, 09 Sep 2009 06:52:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
		<item>
		<title>Getting Ruby 1.9.1p243 to work on OS X 10.5.8 with Japanese input support on irb</title>
		<link>http://blogs.law.harvard.edu/hoanga/2009/09/08/getting-ruby-191p243-to-work-on-os-x-1058-with-japanese-input-support-on-irb/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2009/09/08/getting-ruby-191p243-to-work-on-os-x-1058-with-japanese-input-support-on-irb/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 08:47:13 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[fixes]]></category>
		<category><![CDATA[japan]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=761</guid>
		<description><![CDATA[Awhile back I installed Ruby 1.9.1 in such a way as to co-exist with my current Ruby installation [1], [2] (I should use rvm [3] these days&#8230;)
However, one issue that cropped up during an IRB session was I could not copy and paste Japanese characters into the IRB repl.  This is very very painful [...]]]></description>
			<content:encoded><![CDATA[<p>Awhile back I installed Ruby 1.9.1 in such a way as to co-exist with my current Ruby installation [1], [2] (I should use rvm [3] these days&#8230;)</p>
<p>However, one issue that cropped up during an IRB session was I could not copy and paste Japanese characters into the IRB repl.  This is very very painful for my day to day use with Ruby (Imagine not being able to use the &#8216;|&#8217; character while writing UNIX pipelines). </p>
<p>Below is an example of me trying to enter the character あ into IRB and watching it fail.</p>
<blockquote>
<pre>
$ irb
irb(main):001:0&gt; ab = "?"    &lt;---- Tried entering the character あ
SyntaxError: (irb):1: invalid multibyte char (UTF-8)
(irb):1: unterminated string meets end of file
from /usr/local/bin/irb19:12:in `'
</pre>
</blockquote>
<p>After a lot of head scritching I was able to narrow it down to something with readline:</p>
<blockquote>
<pre>
$ irb --noreadline
irb(main):002:0&gt; ab = "あ"
=&gt; "あ"
irb(main):003:0&gt;
</pre>
</blockquote>
<p>After some more digging into the issue.  The root cause seems to be the lack of GNU readline.  By default, Ruby will link in the system installed readline library on OS X which is called <a href="http://thrysoee.dk/editline/">editline</a> [4].  Unfortunately, editline does not support UTF8 or multi-byte character sets which makes this a no-go for daily usage.</p>
<p>Most of the other references suggest downloading readline from source and installing into <em>/usr/local</em> however I believe this defeats the purpose of using something like <a href="http://www.macports.org">MacPorts</a>.  After a bit of finagling I found that this is the invocation to get things working.</p>
<blockquote>
<pre>
wget&nbsp;<a href="ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.gz" title="ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.gz" target="_blank">ftp://ftp.ruby-lang.org/pub/ruby/1.9/rub...</a>
tar xvzf ruby-1.9.1-p243.tar.gz
cd ruby-1.9.1-p243
# Don't trust MacPorts version of autoconf because it somehow nuked the
# --with-readline-dir option
/usr/bin/autoconf
./configure --with-readline-dir=/opt/local --enable-shared --program-suffix=19 --enable-pthread
make
sudo make install
</pre>
</blockquote>
<p>I have it wrapped up in a script which you can <a href="http://gist.github.com/180805">see here</a>.</p>
<p>References</p>
<p>[1]&nbsp;<a href="http://wonko.com/post/how-to-compile-ruby-191" title="http://wonko.com/post/how-to-compile-ruby-191" target="_blank">http://wonko.com/post/how-to-compile-rub&#8230;</a><br />
[2]&nbsp;<a href="http://frozenplague.net/2009/01/ruby-191-rubygems-rails/" title="http://frozenplague.net/2009/01/ruby-191-rubygems-rails/" target="_blank">http://frozenplague.net/2009/01/ruby-191&#8230;</a><br />
[3]&nbsp;<a href="http://rvm.beginrescueend.com/" title="http://rvm.beginrescueend.com/" target="_blank">http://rvm.beginrescueend.com/</a><br />
[4]&nbsp;<a href="http://thrysoee.dk/editline/" title="http://thrysoee.dk/editline/" target="_blank">http://thrysoee.dk/editline/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2009/09/08/getting-ruby-191p243-to-work-on-os-x-1058-with-japanese-input-support-on-irb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Using hg commit &#8211;date</title>
		<link>http://blogs.law.harvard.edu/hoanga/2009/06/04/using-hg-commit-date/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2009/06/04/using-hg-commit-date/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 12:37:42 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=752</guid>
		<description><![CDATA[In Mercurial I noticed one new feature in the commit command that lets you specify a commit date.

$  hg commit --help
 -d --date       record datecode as commit date

Too bad the help is too sparse to explain the commit date format.  Luckily I found a good explanation at [...]]]></description>
			<content:encoded><![CDATA[<p>In Mercurial I noticed one new feature in the commit command that lets you specify a commit date.</p>
<pre>
$  hg commit --help
 -d --date       record datecode as commit date
</pre>
<p>Too bad the help is too sparse to explain the commit date format.  Luckily I found a good explanation at the URL below.</p>
<p>Thanks!<br />
<a href="http://blog.littleimpact.de/index.php/2009/03/03/usage-of-hg-commit-date-mercurial/">http://blog.littleimpact.de/index.php/2009/03/03/usage-of-hg-commit-date-mercurial/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2009/06/04/using-hg-commit-date/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Using a non-standard port for Capistrano SSH gateways</title>
		<link>http://blogs.law.harvard.edu/hoanga/2009/06/02/using-a-non-standard-port-for-capistrano-ssh-gateways/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2009/06/02/using-a-non-standard-port-for-capistrano-ssh-gateways/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 13:10:13 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[fixes]]></category>
		<category><![CDATA[gripe]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=731</guid>
		<description><![CDATA[I have a love-hate affair with Capistrano.   It is a great tool if you are a Ruby person and need to do something NOW on a bunch of machines.  But the docs are in a constant state of suck from my point of view.
The&#160;Capify.org website helps for remembering the &#8217;simple&#8217; details on [...]]]></description>
			<content:encoded><![CDATA[<p>I have a love-hate affair with Capistrano.   It is a great tool if you are a Ruby person and need to do something NOW on a bunch of machines.  But the docs are in a constant state of suck from my point of view.</p>
<p>The&nbsp;<a href="http://Capify.org" title="http://Capify. " target="_blank">Capify.org</a> website helps for remembering the &#8217;simple&#8217; details on what Capistrano can do.  But where I waste a lot of my time is asking questions like, &#8220;How do I set the Capistano SSH gateway to a non-standard port?&#8221;.   Luckily, Capistrano is written in Ruby so it is easy enough to glance through the code and finally find out where it is but this is why good tech docs exist.  To give enough context to answer those questions.</p>
<p>To answer my own question, below is a snippet you can add to your capfile to use a non-standard port if you need to deploy through a SSH gateway that lives on a non-standard port</p>
<blockquote><p>
# Add this to your Capfile<br />
# This sets the SSH gateway to a machine called&nbsp;<a href="http://mysshgateway.com" title="http://mysshgateway. " target="_blank">mysshgateway.com</a> on port 22222<br />
set :gateway, &#8216;mysshgateway.com:22222&#8242;
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2009/06/02/using-a-non-standard-port-for-capistrano-ssh-gateways/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Life not as a Game Developer / Porn Star</title>
		<link>http://blogs.law.harvard.edu/hoanga/2009/04/26/life-not-as-a-game-developer-porn-star/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2009/04/26/life-not-as-a-game-developer-porn-star/#comments</comments>
		<pubDate>Unknown, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=721</guid>
		<description><![CDATA[After reading Game Developers and Porn Stars I started recollecting an earlier time in my life.  At that point in time I was considering a life as a game developer.  I had heard the rumors that life as a game developer was a meat grinder and had really long hours.   I [...]]]></description>
			<content:encoded><![CDATA[<p>After reading <a href="http://www.killtenrats.com/2009/04/13/game-developers-and-porn-stars/">Game Developers and Porn Stars</a> I started recollecting an earlier time in my life.  At that point in time I was considering a life as a game developer.  I had heard the rumors that life as a game developer was a meat grinder and had really long hours.   I spent time reflecting on the choice I had.   I really like video games and think they a great form of entertainment that has had a large influence on my life.  But I still feel, at its core, video games are just entertainment.  Sometimes, they can educate along with delight but that is all.</p>
<p>Ultimately, I took a different path than becoming a game developer.   After reading <a href="http://www.killtenrats.com/2009/04/13/game-developers-and-porn-stars/">Kill Ten Rat&#8217;s blog post on Game developers</a>  I am glad about my choices.  I have pretty much erased almost any regrets on not taking that path in life.  Although I AM sad to read such a story in 2009 because the decisions I made were over a decade ago and it is disappointing to hear the state of the game industry for a game programmer as a whole seems so soul crushing.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2009/04/26/life-not-as-a-game-developer-porn-star/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Glad I&#8217;m not the only one who prefers monit over god</title>
		<link>http://blogs.law.harvard.edu/hoanga/2009/04/25/glad-im-not-the-only-one-who-prefers-monit-over-god/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2009/04/25/glad-im-not-the-only-one-who-prefers-monit-over-god/#comments</comments>
		<pubDate>Unknown, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[gripe]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=720</guid>
		<description><![CDATA[Seems someone else ran into issues while trying to deploy god.
While, I don&#8217;t think god sucks I definitely don&#8217;t endorse it.  At this point I would only use it under the following conditions:

Need for a process monitor tool with more dynamic configuration setups.  This is where god really shines against monit&#8217;s simpler understanding [...]]]></description>
			<content:encoded><![CDATA[<p>Seems someone else <a href="http://blog.bradgessler.com/use-monit-with-rails-not-god">ran into issues</a> while trying to deploy god.</p>
<p>While, I don&#8217;t think god sucks I definitely don&#8217;t endorse it.  At this point I would only use it under the following conditions:</p>
<ul>
<li>Need for a process monitor tool with more dynamic configuration setups.  This is where god really shines against monit&#8217;s simpler understanding of what process management is about.</li>
<li>The host that needs monitoring can easily spare at least 16MB for a monitoring process.  See below on why.</li>
<li>I really want an all Ruby solution for all the tools in a system</li>
</ul>
<p>In general, I am into the whole &#8216;It is Open Source.  If you&#8217;re having issues, fix it&#8217; deal so I am not nearly as angry sounding as Brad is about god.  However, after having issues with god, I switched to <a href="http://mmonit.com/monit/">monit</a> for simple process monitoring and restarting.  I had far less troubles and got on with other tasks that I considered more important than perfection in a process monitoring system.</p>
<p>For those that are curious here are the issues that I ran into with god:</p>
<ul>
<li>Daemonized Ruby took at least 8MB of RAM for the monitoring process.  With RAM the way it is, this is not as big a deal.  However, if you are trying to get by on a 128MB VPS host every kilobyte counts.</li>
<li>God itself had <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=13474&amp;group_id=3845&amp;atid=14814">issues just randomly dying after some time</a>.   Tom promptly fixed it after it was reported and that was great.  However, it was a little disappointing that a monitoring process just died.</li>
<li>Sparse documentation compared to monit&#8217;s.   Then again this is typical from many Ruby projects and luckily Ruby code is readable enough</li>
<li>Digging up known issues for god required noodling through groups, forums, and blog posts.   Would have been nice to just have a <a href="http://mmonit.com/wiki/Monit/FAQ">friggin&#8217; FAQ</a> like <a href="http://cr.yp.to/daemontools/faq.html">other</a> sys admin-targeted software I have seen.</li>
</ul>
<p>I also DO agree as has been said in <a href="http://blog.bradgessler.com/use-monit-with-rails-not-god">the comments on  Brad&#8217;s post</a> that it is the responsibility of the deployer of software to handle the issues with whatever they deploy and just deal with it.  The reason I say this is because I fell for the hyped up description of god in the beginning and ultimately paid the price when it sucked up my time.  I dealt with it but definitely am less impressed with overhyped marketing descriptions of software these days.   Personally, I am not a fan of that type of marketing for software since it seems a little disingenuous to me.   But that is just me.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2009/04/25/glad-im-not-the-only-one-who-prefers-monit-over-god/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Forced Pair Programming considered unproductive</title>
		<link>http://blogs.law.harvard.edu/hoanga/2009/04/10/forced-pair-programming-considered-unproductive/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2009/04/10/forced-pair-programming-considered-unproductive/#comments</comments>
		<pubDate>Unknown, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=719</guid>
		<description><![CDATA[I just read a blog post by Blaine Buxton describing the phenomenon of  Forced Pairing.  In a nutshell, pair programming has to take into consideration the human factor when programming.  Some people need their own space to code well.
On reflection, this makes sense.   When I have pair programmed, I have [...]]]></description>
			<content:encoded><![CDATA[<p>I just read a blog post by <a href="http://blog.blainbuxton.net">Blaine Buxton</a> describing the phenomenon of  <a href="http://blog.blainebuxton.net/2008/10/forced-pairing.html">Forced Pairing</a>.  In a nutshell, pair programming has to take into consideration the human factor when programming.  Some people need their own space to code well.</p>
<p>On reflection, this makes sense.   When I have pair programmed, I have usually been supportive of the idea and want to share my thoughts and ideas with the person that I pair with.  However, communication of thoughts and motives is at best an imprecise art.   From what I have seen, pair programming can have issues at the ground level under the following circumstances:</p>
<ul>
<li>If one person in a pair is not willing to communicate with the other person</li>
<li>If one person cannot express intentions well to the other person</li>
<li>One person is moving too quickly and will not slow down enough for the other person to keep up (This is not fun at all)</li>
</ul>
<p>I cannot imagine an environment where pair programming was taken so seriously that is has been codified as a <em>law</em> but if they do exist then Forced Pair Programming is definitely something to watch out for.  However, I do believe that pair programming is an effective strategy for getting multiple developers up to speed on any codebase and avoids the Only One Developer Understands this Code syndrome.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2009/04/10/forced-pair-programming-considered-unproductive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Insert the current filename into current edited file in vim</title>
		<link>http://blogs.law.harvard.edu/hoanga/2009/03/12/insert-the-current-filename-into-current-edited-file-in-vim/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2009/03/12/insert-the-current-filename-into-current-edited-file-in-vim/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 07:32:22 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[fixes]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=717</guid>
		<description><![CDATA[I had a need for inserting the name of the current file into a bunch of files I was editing.  I was pretty sure there was a function to do this in vim and after some searching I was right.
To insert the current filename.  In Insert Mode, type CTRL-r % and it will [...]]]></description>
			<content:encoded><![CDATA[<p>I had a need for inserting the name of the current file into a bunch of files I was editing.  I was pretty sure there was a function to do this in vim and after some searching I was right.</p>
<p>To insert the current filename.  In Insert Mode, type <em>CTRL-r</em> <em>%</em> and it will insert the current filename.</p>
<p>Thanks to <a href="http://mamchenkov.net/wordpress/2006/08/15/vim-tip-quickly-insert-current-filename/">blog post</a> for the tip!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2009/03/12/insert-the-current-filename-into-current-edited-file-in-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title></title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/12/28/708/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/12/28/708/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 01:16:38 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[mercurial]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=708</guid>
		<description><![CDATA[Luke describes a nice methodology for using Mercurial as a way to track patches from a subversion checkout.  This type of workflow stuff is very cool imo because it has the following:

Shows a concrete example of how to use a not so trivia tool
Works within constraints (in this example, playing with a subversion checkout)
Fills [...]]]></description>
			<content:encoded><![CDATA[<p>Luke describes a <a href="http://lukeplant.me.uk/blog.php?id=1107301689">nice methodology</a> for using Mercurial as a way to track patches from a subversion checkout.  This type of workflow stuff is very cool imo because it has the following:</p>
<ol>
<li>Shows a concrete example of how to use a not so trivia tool</li>
<li>Works within constraints (in this example, playing with a subversion checkout)</li>
<li>Fills a need (Managing non-trivial changes to a centralized SCM model without sending tons of commits)</li>
</ol>
<p><a href="http://lukeplant.me.uk/blog.php?id=1107301689">Read More</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/12/28/708/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>hgsubversion, finally a mercurial-subversion bridge that jfw?</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/10/15/hgsubversion-finally-a-mercurial-subversion-bridge-that-jfw/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/10/15/hgsubversion-finally-a-mercurial-subversion-bridge-that-jfw/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 13:35:07 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[mercurial]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=697</guid>
		<description><![CDATA[iBanjo talks about hgsubversion which seems to be a good mercurial-subversion bridge at last.
I&#8217;m surprised it took this long to show up but I guess the Mercurial community had not prioritized &#8216;Build a better git-svn&#8217; as something someone should roll out&#8230; until now.
Installation still looks a little painful (and requires lots subversion 1.5 libraries) but [...]]]></description>
			<content:encoded><![CDATA[<p>iBanjo <a href="http://blog.red-bean.com/sussman/?p=116">talks about hgsubversion</a> which seems to be a good mercurial-subversion bridge at last.</p>
<p>I&#8217;m surprised it took this long to show up but I guess the Mercurial community had not prioritized &#8216;Build a better git-svn&#8217; as something someone should roll out&#8230; until now.</p>
<p>Installation still looks a little painful (and requires lots subversion 1.5 libraries) but I am optimistic this will start gaining traction for those that need to integrate with a subversion world.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/10/15/hgsubversion-finally-a-mercurial-subversion-bridge-that-jfw/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>When Despair.com meets Stackoverflow</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/09/23/when-despaircom-meets-stackoverflow/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/09/23/when-despaircom-meets-stackoverflow/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 14:24:36 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=695</guid>
		<description><![CDATA[
Via Kvardek-du through Planet Lisp
]]></description>
			<content:encoded><![CDATA[<p><a href="http://1.bp.blogspot.com/_RNP4gnlxdnU/SM_w2igx10I/AAAAAAAAAKc/PWQq2hoOKTY/s1600-h/automotivator.jpg" title="poster adapted from Jeff Atwood's announcement, built with Xach's Auto Motivator"><img style="margin:0px auto 10px;text-align:center" src="http://1.bp.blogspot.com/_RNP4gnlxdnU/SM_w2igx10I/AAAAAAAAAKc/PWQq2hoOKTY/s400/automotivator.jpg" border="0" alt="Stack Overflow, none of us is as dumb as all of us" /></a></p>
<p>Via <a href="http://kvardek-du.kerno.org/2008/09/lisp-at-stack-overflow.html">Kvardek-du</a> through <a href="http://planet.lisp.org">Planet Lisp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/09/23/when-despaircom-meets-stackoverflow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Fixing that svn: Unrecognized format for the relative external URL</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/09/18/fixing-that-svn-unrecognized-format-for-the-relative-external-url/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/09/18/fixing-that-svn-unrecognized-format-for-the-relative-external-url/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 11:22:51 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[fixes]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/?p=692</guid>
		<description><![CDATA[So recently I saw this when doing a svn checkout of a project and ran into the following:

$ svn co&#160;http://svn.somewhere.com/svn/projects 
svn: Unrecognized format for the relative external URL &#8221;.

Wonderful.  This indicated to me there was a problem with the svn externals somewhere.  After noodling a little I decided to Google around and found [...]]]></description>
			<content:encoded><![CDATA[<p>So recently I saw this when doing a svn checkout of a project and ran into the following:</p>
<blockquote><p>
$ svn co&nbsp;<a href="http://svn.somewhere.com/svn/projects" title="http://svn.somewhere.com/svn/projects" target="_blank">http://svn.somewhere.com/svn/projects</a> <br />
svn: Unrecognized format for the relative external URL &#8221;.
</p></blockquote>
<p>Wonderful.  This indicated to me there was a problem with the svn externals somewhere.  After noodling a little I decided to Google around and found <a>this</a>.  Basically, duplicate listings in your svn:externals is a bad thing.</p>
<p><a href="http://hasno.info/2008/7/22/subversion-1-5-and-unexpected-format-errors-with-blank-info">Read more</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/09/18/fixing-that-svn-unrecognized-format-for-the-relative-external-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>svnbackup-restore.rb, svnbackup&#8217;s handy companion tool</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/07/03/svnbackup-restorerb-svnbackups-handy-companion-tool/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/07/03/svnbackup-restorerb-svnbackups-handy-companion-tool/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 03:48:21 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[fixes]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/2008/07/03/svnbackup-restorerb-svnbackups-handy-companion-tool/</guid>
		<description><![CDATA[Doug Hellman&#8217;s svnbackup script tool is a really handy tool for setting up automated backups for a subversion repository.  
However, the non-fun time comes when one wants to restore a subversion repository that has way too many dumpfiles parts.  The instructions for restoration are basically &#8216;roll your own&#8217; if you want to try [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doughellmann.com/projects/svnbackup/">Doug Hellman&#8217;s svnbackup script</a> tool is a really handy tool for setting up automated backups for a subversion repository.  </p>
<p>However, the non-fun time comes when one wants to restore a subversion repository that has way too many dumpfiles parts.  The instructions for restoration are basically <a href="http://code.google.com/p/svnautobackup/wiki/RestoringFromTheBackup">&#8216;roll your own&#8217;</a> if you want to try to automate the restore procedure.  What would be nicer is if there was the converse tool that made it easier to not have to figure out how to re-order the backup files in the proper manner in order to perform the restore.</p>
<p>I spent a few minutes thinking about it and wrote a small Ruby script to help with this that I call svnbackup-restore.rb.   Here is the (hastily written) source code.  (<a href="http://samsara.bebear.net/~al/scripts/svnbackup-restore.rb">Download here</a>)</p>
<pre>
#!/usr/bin/ruby
# Program Name: Restore the restore
# Purpose:      Take all the svn dumpfiles generated from svnbackup
#               sort them and try loading them via svnadmin
# Usage:        1. Create the new repo path with svnadmin create
#               2. Set repo_name to the repo backup file names
#               3. Set restore_path to the new path to restore to
#               4. Run it ./svnbackup-restore.rb
# Assumptions:  svnrestore-backup.rb is in the same dir as the svn dump files

# CHANGE PARAMETERS HERE
repo_name = 'myrepo'
restore_path = '/path/to/myrepo'

# Print out debugging?
DEBUG = true

# DON'T CHANGE BELOW

# Filename format is 'dumpfile---.bzip2'
svn_dumpfiles = Dir["dumpfile-#{repo_name}*.bzip2"]
sorted_files = svn_dumpfiles.sort do |a, b|
  left_rev = a.split('-')[2].to_i
  right_rev = b.split('-')[2].to_i
  left_rev  right_rev
end
sorted_files.each do |dump_part|
  results = `bzcat #{dump_part} | svnadmin load #{restore_path}; echo $?`
  puts results if DEBUG
  res = results.split.last.to_i
  if res != 0
    puts "Error on trying to load up #{dump_part}!"
    exit 1
  end
end
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/07/03/svnbackup-restorerb-svnbackups-handy-companion-tool/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>RubyKaigi 2008 Day 1 The Lightning Talks</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-2008-day-1-the-lightning-talks/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-2008-day-1-the-lightning-talks/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 14:36:29 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-2008-day-1-the-lightning-talks/</guid>
		<description><![CDATA[Lightning talks are one of the more interesting parts of a conference in my opinion since 5 minutes really forces the speaker to get to the point and it becomes painfully obvious if the presentation has no focus or if there has been real work to get across the main message in the shortest amount [...]]]></description>
			<content:encoded><![CDATA[<p>Lightning talks are one of the more interesting parts of a conference in my opinion since 5 minutes really forces the speaker to get to the point and it becomes painfully obvious if the presentation has no focus or if there has been real work to get across the main message in the shortest amount of time.</p>
<p>So here are some highlights</p>
<h4>Kuwata on Java to Ruby</h4>
<ul>
<li>No, not the book Java to Ruby</li>
<li>Going from Java to Ruby requires a change in mindset.  Not a change of code</li>
<li>Some historical example:  COBOL in Java (ed.  That sounds frightening) is like Java in Ruby</li>
<li>Don&#8217;t hold back experts and too many things spend too much time on beginners</li>
<li>Do not keep beginners as beginners (teach them!)</li>
<li>Bragging about the largeness of a project size is the wrong type of bragging (suggested large code + many devs == lack of ability</li>
</ul>
<h4>dRuby &amp; Security by Nishiyama</h4>
<ul>
<li>druby is not built by default to handle the wild Internet</li>
<li>There is a feature called insecure method list that will help prevent certain methods from being invocated remotely</li>
<li>Use $SAFE however it won&#8217;t save against a DoS.  Also don&#8217;t forget about rlimit</li>
</ul>
<h4>Ruby + ODE by Sasaki</h4>
<ul>
<li>Showed a very nice 3D demo walkthrough world controlled with a Wii-mote and looked like the Pitagora Switch world</li>
<li>Can summon objects pressing one of the buttons</li>
<li>Can stop time</li>
<li>The project should be on Code Repos</li>
<li>(ed. Seeing this in action was far more interesting than reading these notes)</li>
</ul>
<li>Do Beginners Dream Enumerators?  by Imai</li>
<ul>
<li>Conclusion first: Sorry they don&#8217;t</li>
<li>Showed some very nice examples of using the Enumerator library for many bad cases (each_slice)</li>
<li>Beginning Ruby programmers really love each to the point of going overboard</li>
</ul>
<h4>Folk programming with Ruby by mootoh</h4>
<ul>
<li>Folk Programming was introduced at YAPC Asia 2008 (See my <a href="/hoanga/2008/05/15/yapc-day-1-notes/">notes</a>)</li>
<li>Show examples outside of building web applications such as Rich UI exploration</li>
<li>Showed examples of Plugins to other programs since it&#8217;s easier than writing a big app (although with Ruby the apps should be nice and small)</li>
<li>Some examples:  Safari + Hatena bookmark, Quicksilver + Twitter (looks dangerous), Quartz Composer + Gainer, Vim + Refe</li>
<li>Ruby is a very good glue</li>
</ul>
<h4>Again as a Rubyist&#8230; toRuby by Ikezawa</h4>
<ul>
<li>(ed. I liked this talk a lot since it wasn&#8217;t by some uber-Ruby hacker)</li>
<li>Didn&#8217;t use Ruby until 2000</li>
<li>Background was as a consultant since 1984.  Helped found a Wapro Kissaten!</li>
<li>Moving to Ruby hit the OOP barrier.  Was not used to OOP methodologies at all</li>
<li>Stopped however after a long time in June 2007, found a local Ruby guru to help him out and that got the ball rolling again</li>
<li>Invites others to join in</li>
</ul>
<h4>Ruby 1.9 with Rails 2.1 by matsuda</h4>
<ul>
<li>Went through the history of web programming (or his version of it)</li>
<ul>
<li>Ancient History &#8211; PHP</li>
<li>Recent History &#8211; DB Framework with ORM (in Java&#8230; lots of these frameworks)</li>
<li>Current &#8211; Rails</li>
</ul>
<li>However DB access is a Rails weakness</li>
<li>Introduced named_scope feature (Is this a Rails 2.1 specific feature? Need to review this myself</li>
<li>More info on this at <a href="http://blog.dio.jp">blog.dio.jp</a></li>
</ul>
<h4>Read code with Testing by Endoh</h4>
<ul>
<li>Rookie Ruby Committed</li>
<li>His suggestion on learning is by reading real code</li>
<li>Use TBCR (Test Based Code Reading)</li>
<ul>
<li>Run make test-all</li>
<li>Find code paths that are never executed</li>
<li>Add tests (requires more code reading)</li>
</ul>
<li>Using this method have increased Ruby&#8217;s test coverage to 85%</li>
<li>In contrast Python is 80%, Perl 63%, PHP is 51% (plans to target PHP next)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-2008-day-1-the-lightning-talks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>RubyKaigi Day 1 The Matz Keynote</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-day-1-the-matz-keynote/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-day-1-the-matz-keynote/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 14:14:24 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-day-1-the-matz-keynote/</guid>
		<description><![CDATA[Okay this is my notes from Matz&#8217;s Keynote.  I was 5 minutes late since finding lunch took a really long time to find anything around the area unfortunately. Unfortunately, most of the visiting Rubyists decided to do KFC however Charles Nutter decided to stick it through and we finally found a nice Yakiniku restaurant [...]]]></description>
			<content:encoded><![CDATA[<p>Okay this is my notes from Matz&#8217;s Keynote.  I was 5 minutes late since finding lunch took a really long time to find anything around the area unfortunately. Unfortunately, most of the visiting Rubyists decided to do KFC however Charles Nutter decided to stick it through and we finally found a nice Yakiniku restaurant to eat at but that ended up being the reason I was 5 minutes late&#8230; okay anyways here are my notes from in the middle of the talk&#8230;</p>
<p>Matz was talking about sanctuaries and how some technologies have built their sanctuaries over time.  Here are some sanctuaries he mentioned and some of their defining characteristics:</p>
<ul>
<li>UNIX</li>
<ul>
<li>The filter (wahoo!)</li>
<li>&#8220;Worse is better&#8221; aka the New Jersey School of Design (I always ask myself just how much worse though..)</li>
<li>Convenience over perfection</li>
</ul>
<li>Smalltalk</li>
<ul>
<li>OOP, deep OOP</li>
<li>Targeted at children (funny how only greybeards really use this language now discounting eToys)</li>
<li>Bytecode VM but not the first to have one but one of the more prominent ones</li>
<li>A dynamic language implementation with decades of hard-earned experience, wisdom and knowledge around it</li>
</ul>
<li>java</li>
<ul>
<li>Well Java seems to fulfill business and &#8216;enterprise needs&#8217; (for now)</li>
<li>Java was originally slow however time has changed that perception.  Java&#8217;s speed complaints have mostly faded away (But I still complain about a 30 second startup time for the VM)</li>
<li>Absorbed many other ideas from other languages (VM, Garbage Collection, Exception Handling)</li>
<li>Java has one of the fastest Garbage Collected VMs now (with the amount of engineering effort thrown at it I&#8217;d hope so)</li>
</ul>
<p>Matz then describes that Sanctuaries tend to go through the following phases</p>
<ul>
<li>Hackers gathered</li>
<li>New technology is born</li>
<li>The world changed (because of the technology?  Missed this&#8230;)</li>
</ul>
<p>Don&#8217;t forget about centripetal forces during these stages.  The community matters quite a bit.  According to Matz, 50% of the types of OSes out there in this world are some type of UNIX.</p>
<p>Finally, he goes on to describe the Ruby Sanctuary and its defining characteristics</p>
<ul>
<li>For Rubyists, feeling matters.  Focus on the human and the joys programming</li>
<li>It inherited many things from the past.  Lisp metaprogramming, Smalltalk OOP, UNIX text processing</li>
<li>Productivity matters.  Machines are faster but people&#8217;s time is much more expensive</li>
<li>Agility matters.   Environments change and embracing the changes is the right thing</li>
</ul>
<p>At this point a person from Rakuten comes up on stage and talks about some projects that Matz has been collaborating with.</p>
<p>One is called ROMA which is some sort of distributed memory data storage (think memcached with some more ability for data integrity in case of failures)</p>
<p>The other one is called fairy which is supposed to be a lightweight distributed programming framework.</p>
<p>Unfortunately it seems that both projects are rather delayed and it doesn&#8217;t seem apparent if these projects will be Open Sourced or not.  That is rather disappointing to me but can&#8217;t have everything for free now can we?</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-day-1-the-matz-keynote/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>RubyKaigi 2008 Day 1 Part 3 Notes</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-2008-day-1-part-3-notes/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-2008-day-1-part-3-notes/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 14:00:42 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-2008-day-1-part-3-notes/</guid>
		<description><![CDATA[Evan Phoenix on Rubinius
Evan started off with a quick intro on Rubinius and proceeded to talk about some of the big pieces of Rubinius from a 10,000 feet high view.

The kernel of the system
The C Compatibility Layer
It&#8217;s a big project and Evan wants to have a conversation with anyone who wants to have one on [...]]]></description>
			<content:encoded><![CDATA[<h3>Evan Phoenix on Rubinius</h3>
<p>Evan started off with a quick intro on Rubinius and proceeded to talk about some of the big pieces of Rubinius from a 10,000 feet high view.</p>
<ul>
<li>The kernel of the system</li>
<li>The C Compatibility Layer</li>
<li>It&#8217;s a big project and Evan wants to have a conversation with anyone who wants to have one on it</li>
</ul>
<p>For the VM nerds here are some feature highlights&#8230;</p>
<ul>
<li>Accurate generational Garbage Collector</li>
<li>Bytecode based VM</li>
<li>Capable of bootstrapping itself</li>
</ul>
<p>Evan suggested we should think of Rubinius sort of like an OS.</p>
<p>Then he started diving right into a tour of some of the cool internals of Rubinius and explaining some of the internal objects that really are the heart of Rubinius (above the VM layer)</p>
<p>BTW what is the &lt;&lt;?  Evan coins it the left chevron.</p>
<li>MethodContext &#8211; Lets one see information regarding a method and the context surrounding it</li>
<li>CompiledMethod &#8211; Peek at the bytecodes of a method!</li>
<li>BlockContext &#8211; Tell me all the information about a block.   Can capture a compiled block and inspect byte codes</li>
<li>SendSite &#8211; One per place where a call is performed.  By caching information on this, can speed up method dispatch</li>
</ul>
<p>With MethodContext and CompiledMethod it&#8217;s possible to implement eval in Ruby and follow the principle of <a href="http://www.defmacro.org/ramblings/lisp.html">Code as Data</a>.  Taking advantage of Ryan Davis&#8217;s ParseTree (included in Rubinius) one can take something like</p>
<p><code>"1 + 1".to_sexp</code></p>
<p>Which will take <em>1 + 1</em> and change it into an s-expression, convert it into an AST, and a User Visitor Pattern implementation can walk through this and spit out bytecode.  (I might have recollected this wrong.. if so, sorry..  Not a VM implementor)</p>
<p>Some other big features that Evan mentioned were</p>
<ul>
<li>Extensions</li>
<ul>
<li>Getting close to running Ruby C-extensions</li>
<li>However they are still 2nd-class citizens (they will take a performance hit but working is better than fast and broken)</li>
<li>MRI in this case is still faster</li>
</ul>
<li>Multi-VM implementation</li>
<ul>
<li>stdin and stdout are implemented as pipes</li>
<li>Functional but still highly experimental (can try calculating Pi across a multi-core machine)</li>
<li><em>args = ["-e", "puts", "hello"]<br />
vm = Rubinius::Vm.spawn args <br />
puts vm.stdout.gets
</li>
</ul>
<li>Channels</li>
<ul>
<li>One of the main internal communication channels used in Rubinius</li>
<li>I/O events use channels for example</li>
</ul>
</ul>
<p>Then Evan goes on to showing some cool demo of implementing Binding.of_caller in front of the audience.  He also showed one neat thing about rbx.  If you run a command it will load irb automatically assuming you want a REPL (cool!)</p>
<h4>Q &amp; A</h4>
<ul>
<li>Q: What are your final goals with Rubinius?</li>
<li>A: Have an image like SmallTalk?   The VM only knows about byte codes not Ruby.  Could even write an implementation of SmallTalk on the Rubinius VM however Evan said he has no plans to</li>
<li>Q: Anything on shared benchmark testing?</li>
<li>A: (Matz) There has been movements to start collecting code as of last week.  Trying to make sure that it is more &#8216;real world&#8217; code benchmarks.  There should be an Infoq article on this. <br />
(Evan) Started on this.  Check out GitHub for more info</li>
<li>Q: How&#8217;s the performance?</li>
<li>A: No really hard numbers on Rubinius&#8217; performance.  Some things have gotten faster over time such as the generational part.  Awhile ago Evan wrote a bunch of small benchmarks to test things out but seems to have misplaced them somewhere</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/06/22/rubykaigi-2008-day-1-part-3-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>RubyKaigi 2008 Day 1 Part 2 Notes</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/06/21/rubykaigi-2008-day-1-part-2-notes/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/06/21/rubykaigi-2008-day-1-part-2-notes/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 21:31:54 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/2008/06/21/rubykaigi-2008-day-1-part-2-notes/</guid>
		<description><![CDATA[Here&#8217;s a continuation of my scribbled notes from the RubyKaigi.  This one from the JRuby implementors.  Some of my own thoughts and comments are inserted in parentheses.
Charles Nutter on JRuby

Quick intro and the impressive live demos of JRuby in action (or as the IRC channel said Nice Live Coding (NLC))
This summer, work on [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a continuation of my scribbled notes from the RubyKaigi.  This one from the JRuby implementors.  Some of my own thoughts and comments are inserted in parentheses.</p>
<h3>Charles Nutter on JRuby</h3>
<ul>
<li>Quick intro and the impressive live demos of JRuby in action (or as the IRC channel said Nice Live Coding (NLC))</li>
<li>This summer, work on Ruby 1.9 features (seems there&#8217;s an option flag to turn on 1.9 compatibility mode already)</li>
<li>Current 1.1.3 Progress Report</li>
<ul>
<li>A new interpreter that is up to 30% faster</li>
<li>Compile-time performance enhancements</li>
<li>Many Rails Bottlenecks fixed</li>
</ul>
<li>No new release of JRuby this year but&#8230;</li>
<li>Wanted to show some uses of JRuby</li>
<ul>
<li>IDEs (NetBeans, Eclipse, INtelliJ use JRuby in their IDEs</li>
<li>Swing GUI development</li>
<ul>
<li>Swing development can be very complex but Ruby helps to simplify it</li>
<li>Benefits from the &#8216;Write once, Run everywhere&#8217;</li>
<li>There are a plethora of options to choose from (why does this seem to happen in the Java world all the time?)</li>
<ul>
<li>Cheri</li>
<li>Profligacy (by the infamous Rails Ghetto-man Zed Shaw)</li>
<li>MonkeyBars (Proceeded to show an impressive demo)</li>
<ul>
<li>MonkeyBars leverages existing GUI utils (that&#8217;s a major plus)</li>
<li>MVC-like structure (hey looks like Rails&#8230;)</li>
</ul>
</ul>
</ul>
<li>Graphics (Showed some really sweet demos of ruby-processing in action)</li>
<ul>
<li>Processing had a way to interface to audio input devices</li>
<li>Remember to check out &#8220;A Face for Stephen Hawking&#8221;.  Wow that code looked really clean&#8230;</li>
</ul>
<li>Rails (the benchmark app that all implementors need to measure implementation readiness by)</li>
<ul>
<li>There has been a shift in Java Web frameworks lately (but still happening at a glacial pace)</li>
<li>Deployment problem is &#8220;solved&#8221; (I keep hearing this&#8230;)</li>
<li>mongrel is &#8220;old school&#8221; (at least for JRuby-based deployments)</li>
<li>Made mention of Phusion/Passenger but it still had the issue of rails process spawning and how to manage that (Seems Jruby doesn&#8217;t have these issues)</li>
<li>Some war deployment demoes</li>
<ul>
<li>A warbler demo (A tool to help create war files)</li>
<li>Will package in Jruby automagically into the war (That&#8217;s very nice)</li>
<li>Just run warble inside the rails application directory (Hopefully it doesn&#8217;t package up a gigantic development.log)</li>
<li>As simple as <em>GLASSFISH_HOME/bin/asadmin deploy *.war</em></li>
<li>Has Rack supoprt (can handle Merb and anything else with Rack support</li>
<li>Can be configurable</li>
<li>From his demo, it seems that warble will make a war of anything (aka be careful what directory you run this command)</li>
</ul>
<li>Showed some really nice benchmarks of rails and JRuby (I need to put this through the ringer when I get more time)</li>
<li>Showed another deployment tool called the glassfish gem</li>
<ul>
<li>3MB gem that had everything needed for JRuby on Rails</li>
<li>Tries to match the agile process</li>
</ul>
</ul>
<li>JRuby Users (in production): CSI&#8217;s Disease Surveillance, Oracle&#8217;s Mix website, Sun&#8217;s Media Cast, Thoughtworks Mingle</li>
</ul>
</ul>
<h4>Q &amp; A</h4>
<ul>
<li>Q: The Parser Implementation seems hard.  Any war stories</li>
<li>A: I hate parsers and refuse to write one.  Someone wrote something that used J.  I don&#8217;t know much about it but Tom&#8217;s pains dealing with it seem very hard.  No plans to change parsers anytime in the near future.</li>
<li>Q: Object Space &amp; Binding</li>
<li>A: On Jruby, this will incur an automatic performance penalty.  binding &amp; caller will be required each time which incurs a heavy cost</li>
<li>Q: Non-local break performance?</li>
<li>A: Implemented as a Java Exception.  By doing this, the JVM can optimize that as a Jump.  JRuby tries to use this as much as possible behind the scenes for performance</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/06/21/rubykaigi-2008-day-1-part-2-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>RubyKaigi 2008 Day 1 Part 1 Notes</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/06/21/rubykaigi-2008-day-1-part-1-notes/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/06/21/rubykaigi-2008-day-1-part-1-notes/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 21:08:57 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/2008/06/21/rubykaigi-2008-day-1-part-1-notes/</guid>
		<description><![CDATA[Ruby Kaigi 2008 is happening.  I&#8217;m sure there other posts on the Ruby Kaigi happening however here are some of my own hasty scribbles for anyone that cares&#8230;
Introduction Speech

This is the 3rd year of the conference
One theme of this year is multiple implementatios
More people coming into the Ruby community and we need to greet [...]]]></description>
			<content:encoded><![CDATA[<p>Ruby Kaigi 2008 is happening.  I&#8217;m sure there other posts on the Ruby Kaigi happening however here are some of my own hasty scribbles for anyone that cares&#8230;</p>
<h3>Introduction Speech</h3>
<ul>
<li>This is the 3rd year of the conference</li>
<li>One theme of this year is multiple implementatios</li>
<li>More people coming into the Ruby community and we need to greet the (Dave Thomas&#8217; speech from last year)</li>
<li>Two tracks this year (I mostly followed the main track)</li>
</ul>
<p>The first set of presentations from the main track were from the Ruby implementors.</p>
<h3>Koichi SASADA &#8211; Ruby VM Development</h3>
<ul>
<li>1.9.0-2 released as of 6/20/2008 (mainly bug fixes)</li>
<li>A little discussion of 1.9.1 Roadmap (Something about 1.9.1 being the more stable release?)</li>
<li>A plethora of interpreters available now (lists all of them)</li>
<li>Sasada-san felt a little sheepish over Matz mentioning taking only about technology is &#8216;boring&#8217; since his talk focused on mainly technology</li>
<li>University of Tokyo has become a haven for since Sasada-san now has a laboratory (wahoo!) which means&#8230;</li>
<ul>
<li>Ruby related research-projects</li>
<li>Student Research Projects on Ruby</li>
</ul>
<li>Parallel Thread Execution</li>
<ul>
<li>Better multi-core support</li>
<li>Memory resource usage (or was that resource contention?) can be a problem</li>
</ul>
<li>Multiple-VMs</li>
<ul>
<li>Run Multiple VMs in same Ruby process</li>
<li>Jruby + Nakada-san are the primary drivers</li>
<li>The JRuby guys are ready to implement it (waiting on API) and Rubinius seems to have one already</li>
</ul>
<li>API done</li>
<li>bootstrap done</li>
<li>Creation of interpreter mostly done (seems to have some small issues?)</li>
<li>Still needs documentation (What project doesn&#8217;t?)</li>
</ul>
<li>High Performance Computing (HPC) on Ruby</li>
<ul>
<li>Ruby implementations needs FP optimization for HPC</li>
<li>Ruby 1.9.x quite fast compared to other implementations (according to the Benchmarks Sasada-san showed)</li>
</ul>
<li>Atomic Ruby (aka Customizeable Ruby)</li>
<ul>
<li>Create an Optimal interpreter for &#8220;you&#8221;</li>
<li>Make it easier for Ruby to be used in embedded environments</li>
<li>Make it easier for Ruby customized for specific environments (iPhone anyone?)</li>
<li>Make it possible to plug in and out the core pieces</li>
<li>Byte code serialization and embedded</li>
<li>Make the GC customizeable</li>
</ul>
<li>More work  memory optimizations (Sounded like there was the need for more profiling)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/06/21/rubykaigi-2008-day-1-part-1-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>On the future (or lack) of Nitro Web framework</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/06/19/on-the-future-or-lack-of-nitro-web-framework/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/06/19/on-the-future-or-lack-of-nitro-web-framework/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 16:05:05 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[gripe]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/2008/06/19/on-the-future-or-lack-of-nitro-web-framework/</guid>
		<description><![CDATA[Before there was Rails, there existed other Web Frameworks for Ruby.  One of the promising ones is Nitro however it fell into realm of ignorance.  On some random surfing I ran across this blog post from one of the main authors of the Nitro Web Framework.
It&#8217;s an interesting read since the author laments [...]]]></description>
			<content:encoded><![CDATA[<p>Before there was Rails, there existed other Web Frameworks for Ruby.  One of the promising ones is <a href="http://www.nitroproject.org/">Nitro</a> however it fell into realm of ignorance.  On some random surfing I ran across <a href="https://www.blogger.com/comment.g?blogID=5824099472023370508&amp;postID=4589611158750886650">this blog post</a> from one of the main authors of the Nitro Web Framework.</p>
<p>It&#8217;s an interesting read since the author laments how <a href="http://www.nitroproject.org/">Nitro</a> could have been a contender but it never took off.  The comments are enlightening since it seems there were project (mis)management issues that prevented a community from really forming around <a href="http://www.nitroproject.org/">Nitro</a>.   Anyways, by now, <a href="http://rubyonrails.org">Rails</a> has the lion&#8217;s share of the attention so any hopes now would rest on it being so much better that people will switch.  My understanding is that it has some things that are better but not such a big enough jump to make people interested, unfortunately.</p>
<p><a href="https://www.blogger.com/comment.g?blogID=5824099472023370508&amp;postID=4589611158750886650">Read more</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/06/19/on-the-future-or-lack-of-nitro-web-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>mod_rails aka passenger == nice &amp;&amp; easy</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/06/19/mod_rails-aka-passenger-nice-easy/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/06/19/mod_rails-aka-passenger-nice-easy/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 15:55:28 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/2008/06/19/mod_rails-aka-passenger-nice-easy/</guid>
		<description><![CDATA[I looked over mod_rails today and realized how nice and easy looking it was to install.
The general install process is:
1. Install rubygems
2. Run gem install passenger
3. passenger-install-apache2-module
4. Follow the instructions and install any missing dependencies (it actually is smart enough to detect which ones you need before splatting itself into the filesystem)
5. Add some lines [...]]]></description>
			<content:encoded><![CDATA[<p>I looked over <a href="http://www.modrails.com/ ">mod_rails</a> today and realized how nice and easy looking it was to install.</p>
<p>The general install process is:</p>
<p>1. Install rubygems<br />
2. Run gem install passenger<br />
3. passenger-install-apache2-module<br />
4. Follow the instructions and install any missing dependencies (it actually is smart enough to detect which ones you need before splatting itself into the filesystem)<br />
5. Add some lines into the apache conf somewhere, declare a virtual host and point DocumentRoot to the public folder of the desired Rails app</p>
<p>By piggypacking onto the gems installation infrastructure they made it really simple to install even without support from native package managers (although my hope is that it will be as easy as apt-get install modrails one day).</p>
<p>However, always the skeptic I decided to give it a quick and dirty test run and lo&#8217; and behold it really is as easy as advertised and looks like it&#8217;s working okay.</p>
<p>Impressive stuff.  Now I just need to read a little more on how it actually works (seems to hand off to some sort of backend process that is intelligent enough to spawn a set number of backend rails processes as needed and kills any that are idle off or continue serving if things are busy).  So for those of you looking to deploy rails within an apache setup, this might be a nice and simple way (assuming you have access to manage the apache server process) to integrate rails within Apache.</p>
<p>I&#8217;m still unclear how many rails apps can be multiplexed on a realistic basis with one Apache installation with this method but a little bit of trial and error should give some ideas.</p>
<p><a href="http://www.modrails.com/">Read more on mod rails</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/06/19/mod_rails-aka-passenger-nice-easy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>The Rails Horde at RailsConf 2008</title>
		<link>http://blogs.law.harvard.edu/hoanga/2008/05/30/the-rails-horde-at-railsconf-2008/</link>
		<comments>http://blogs.law.harvard.edu/hoanga/2008/05/30/the-rails-horde-at-railsconf-2008/#comments</comments>
		<pubDate>Fri, 30 May 2008 16:30:13 +0000</pubDate>
		<dc:creator>hoanga</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blogs.law.harvard.edu/hoanga/2008/05/30/the-rails-horde-at-railsconf-2008/</guid>
		<description><![CDATA[Egads&#8230; so&#8230; many&#8230; Rails&#8230; zombies

]]></description>
			<content:encoded><![CDATA[<p>Egads&#8230; so&#8230; many&#8230; Rails&#8230; zombies</p>
<p><a href="http://www.flickr.com/photos/x180/2533749663/"><img src="http://farm3.static.flickr.com/2304/2533749663_7e847e60fb.jpg?v=0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/hoanga/2008/05/30/the-rails-horde-at-railsconf-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>
	</item>
	</channel>
</rss>
