<?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>worrbase &#187; Projects</title>
	<atom:link href="http://www.worrbase.com/category/project/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.worrbase.com</link>
	<description>Highlighting the thrilling adventures of William Orr</description>
	<lastBuildDate>Tue, 06 Jul 2010 08:04:16 +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>Formspring.me API beta</title>
		<link>http://www.worrbase.com/2010/06/03/formspring-me-api-beta/</link>
		<comments>http://www.worrbase.com/2010/06/03/formspring-me-api-beta/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 07:19:11 +0000</pubDate>
		<dc:creator>worr</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[cpan]]></category>
		<category><![CDATA[formspring]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.worrbase.com/?p=40</guid>
		<description><![CDATA[formspring.me released a beta version of their API today. For those of you who don&#8217;t know, formspring.me is the popular social networking site that allows people to ask and answer anonymous questions. It uses Facebook Connect for user auth, as well as letting users sign up on the site if they don&#8217;t have a Facebook [...]]]></description>
			<content:encoded><![CDATA[<p>formspring.me released a beta version of their API today. For those of you who don&#8217;t know, formspring.me is the popular social networking site that allows people to ask and answer anonymous questions. It uses Facebook Connect for user auth, as well as letting users sign up on the site if they don&#8217;t have a Facebook account.</p>
<p>Apparently, as a joke some time ago, I signed up for the beta API. So I decided to develop a Perl module allowing easy use of the Formspring.me API. You can follow the development of it on my <a href="http://github.com/worr/WWW--Formspring" onclick="pageTracker._trackPageview('/outgoing/github.com/worr/WWW--Formspring?referer=');">github</a>. I plan to release this code to CPAN when I&#8217;m done so that other people can use it.</p>
<p>Since I&#8217;m new to the CPAN world, if one of you astute readers notices something blatantly wrong about my code, I&#8217;d appreciate it if you&#8217;d point it out.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this post:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F&amp;title=Formspring.me%20API%20beta&amp;bodytext=formspring.me%20released%20a%20beta%20version%20of%20their%20API%20today.%20For%20those%20of%20you%20who%20don%27t%20know%2C%20formspring.me%20is%20the%20popular%20social%20networking%20site%20that%20allows%20people%20to%20ask%20and%20answer%20anonymous%20questions.%20It%20uses%20Facebook%20Connect%20for%20user%20auth%2C%20as%20well%20a" title="Digg" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F_amp_title=Formspring.me_20API_20beta_amp_bodytext=formspring.me_20released_20a_20beta_20version_20of_20their_20API_20today._20For_20those_20of_20you_20who_20don_27t_20know_2C_20formspring.me_20is_20the_20popular_20social_20networking_20site_20that_20allows_20people_20to_20ask_20and_20answer_20anonymous_20questions._20It_20uses_20Facebook_20Connect_20for_20user_20auth_2C_20as_20well_20a&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F&amp;title=Formspring.me%20API%20beta&amp;notes=formspring.me%20released%20a%20beta%20version%20of%20their%20API%20today.%20For%20those%20of%20you%20who%20don%27t%20know%2C%20formspring.me%20is%20the%20popular%20social%20networking%20site%20that%20allows%20people%20to%20ask%20and%20answer%20anonymous%20questions.%20It%20uses%20Facebook%20Connect%20for%20user%20auth%2C%20as%20well%20a" title="del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F_amp_title=Formspring.me_20API_20beta_amp_notes=formspring.me_20released_20a_20beta_20version_20of_20their_20API_20today._20For_20those_20of_20you_20who_20don_27t_20know_2C_20formspring.me_20is_20the_20popular_20social_20networking_20site_20that_20allows_20people_20to_20ask_20and_20answer_20anonymous_20questions._20It_20uses_20Facebook_20Connect_20for_20user_20auth_2C_20as_20well_20a&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F&amp;t=Formspring.me%20API%20beta" title="Facebook" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/share.php?u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F_amp_t=Formspring.me_20API_20beta&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F&amp;title=Formspring.me%20API%20beta&amp;annotation=formspring.me%20released%20a%20beta%20version%20of%20their%20API%20today.%20For%20those%20of%20you%20who%20don%27t%20know%2C%20formspring.me%20is%20the%20popular%20social%20networking%20site%20that%20allows%20people%20to%20ask%20and%20answer%20anonymous%20questions.%20It%20uses%20Facebook%20Connect%20for%20user%20auth%2C%20as%20well%20a" title="Google Bookmarks" onclick="pageTracker._trackPageview('/outgoing/www.google.com/bookmarks/mark?op=edit_amp_bkmk=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F_amp_title=Formspring.me_20API_20beta_amp_annotation=formspring.me_20released_20a_20beta_20version_20of_20their_20API_20today._20For_20those_20of_20you_20who_20don_27t_20know_2C_20formspring.me_20is_20the_20popular_20social_20networking_20site_20that_20allows_20people_20to_20ask_20and_20answer_20anonymous_20questions._20It_20uses_20Facebook_20Connect_20for_20user_20auth_2C_20as_20well_20a&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Formspring.me%20API%20beta&amp;link=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F" title="FriendFeed" onclick="pageTracker._trackPageview('/outgoing/www.friendfeed.com/share?title=Formspring.me_20API_20beta_amp_link=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F" title="Identi.ca" onclick="pageTracker._trackPageview('/outgoing/identi.ca/notice/new?status_textarea=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F&amp;title=Formspring.me%20API%20beta&amp;source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr&amp;summary=formspring.me%20released%20a%20beta%20version%20of%20their%20API%20today.%20For%20those%20of%20you%20who%20don%27t%20know%2C%20formspring.me%20is%20the%20popular%20social%20networking%20site%20that%20allows%20people%20to%20ask%20and%20answer%20anonymous%20questions.%20It%20uses%20Facebook%20Connect%20for%20user%20auth%2C%20as%20well%20a" title="LinkedIn" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/shareArticle?mini=true_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F_amp_title=Formspring.me_20API_20beta_amp_source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr_amp_summary=formspring.me_20released_20a_20beta_20version_20of_20their_20API_20today._20For_20those_20of_20you_20who_20don_27t_20know_2C_20formspring.me_20is_20the_20popular_20social_20networking_20site_20that_20allows_20people_20to_20ask_20and_20answer_20anonymous_20questions._20It_20uses_20Facebook_20Connect_20for_20user_20auth_2C_20as_20well_20a&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F&amp;title=Formspring.me%20API%20beta" title="Live" onclick="pageTracker._trackPageview('/outgoing/favorites.live.com/quickadd.aspx?marklet=1_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F_amp_title=Formspring.me_20API_20beta&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F&amp;title=Formspring.me%20API%20beta" title="Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F_amp_title=Formspring.me_20API_20beta&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Formspring.me%20API%20beta&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F" title="Slashdot" onclick="pageTracker._trackPageview('/outgoing/slashdot.org/bookmark.pl?title=Formspring.me_20API_20beta_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F&amp;title=Formspring.me%20API%20beta" title="StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F_amp_title=Formspring.me_20API_20beta&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F&amp;t=Formspring.me%20API%20beta&amp;s=formspring.me%20released%20a%20beta%20version%20of%20their%20API%20today.%20For%20those%20of%20you%20who%20don%27t%20know%2C%20formspring.me%20is%20the%20popular%20social%20networking%20site%20that%20allows%20people%20to%20ask%20and%20answer%20anonymous%20questions.%20It%20uses%20Facebook%20Connect%20for%20user%20auth%2C%20as%20well%20a" title="Tumblr" onclick="pageTracker._trackPageview('/outgoing/www.tumblr.com/share?v=3_amp_u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F_amp_t=Formspring.me_20API_20beta_amp_s=formspring.me_20released_20a_20beta_20version_20of_20their_20API_20today._20For_20those_20of_20you_20who_20don_27t_20know_2C_20formspring.me_20is_20the_20popular_20social_20networking_20site_20that_20allows_20people_20to_20ask_20and_20answer_20anonymous_20questions._20It_20uses_20Facebook_20Connect_20for_20user_20auth_2C_20as_20well_20a&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Formspring.me%20API%20beta%20-%20http%3A%2F%2Fwww.worrbase.com%2F2010%2F06%2F03%2Fformspring-me-api-beta%2F" title="Twitter" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Formspring.me_20API_20beta_20-_20http_3A_2F_2Fwww.worrbase.com_2F2010_2F06_2F03_2Fformspring-me-api-beta_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.worrbase.com/2010/06/03/formspring-me-api-beta/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My first COBOL program on z/OS</title>
		<link>http://www.worrbase.com/2010/04/25/my-first-cobol-program-on-zos/</link>
		<comments>http://www.worrbase.com/2010/04/25/my-first-cobol-program-on-zos/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 09:42:23 +0000</pubDate>
		<dc:creator>worr</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[cobol]]></category>
		<category><![CDATA[JCL]]></category>
		<category><![CDATA[mainframes]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[z/OS]]></category>

		<guid isPermaLink="false">http://www.worrbase.com/?p=34</guid>
		<description><![CDATA[Today, I got Hello World working in COBOL on an IBM Z9. This is actually surprisingly more difficult than it would seem. But I&#8217;m gonna document it here so I remember how to do it, and also in case some random z/OS n00b stumbles upon this entry.
Here is the Hello World file I wrote:

1
2
3
4
5
IDENTIFICATION DIVISION.
PROGRAM-ID. [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I got Hello World working in COBOL on an IBM Z9. This is actually surprisingly more difficult than it would seem. But I&#8217;m gonna document it here so I remember how to do it, and also in case some random z/OS n00b stumbles upon this entry.</p>
<p>Here is the Hello World file I wrote:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="cobol" style="font-family:monospace;"><span style="color: #008000; font-weight: bold;">IDENTIFICATION</span> <span style="color: #008000; font-weight: bold;">DIVISION</span><span style="color: #000066;">.</span>
<span style="color: #008000; font-weight: bold;">PROGRAM-ID</span><span style="color: #000066;">.</span> HELLO<span style="color: #000066;">.</span>
<span style="color: #008000; font-weight: bold;">PROCEDURE</span> <span style="color: #008000; font-weight: bold;">DIVISION</span><span style="color: #000066;">.</span>
    <span style="color: #000000; font-weight: bold;">DISPLAY</span> <span style="color: #ff0000;">'Hello, World'</span><span style="color: #000066;">.</span>
    <span style="color: #008000; font-weight: bold;">STOP</span> <span style="color: #008000; font-weight: bold;">RUN</span><span style="color: #000066;">.</span></pre></td></tr></table></div>

<p>Seems pretty easy, right? Well, yeah, no duh. It&#8217;s Hello World. I grabbed it from a Wikipedia article. It&#8217;s not exactly innovative genius. However, compiling it and linking it is a different story.</p>
<p>I tried at first using the ISPF foreground COBOL compiler. However, this was very non-obvious, and the documentation was lacking. All the documentation I found consisted mostly of how to do it through TSO, where it made mention that an ISPF interface did exist.</p>
<p>So then I went the JCL route.</p>
<p>IBM has some great documentation on how to do this. However, it is definitely not in the 900+ page Enterprise COBOL for z/OS Programming Guide. That was really just confusing. <a href="http://publib.boulder.ibm.com/infocenter/zos/basics/index.jsp?topic=/com.ibm.zos.zappldev/toc.htm" onclick="pageTracker._trackPageview('/outgoing/publib.boulder.ibm.com/infocenter/zos/basics/index.jsp?topic=/com.ibm.zos.zappldev/toc.htm&amp;referer=');">Here is the great documentation.</a> This is what got me off the ground.</p>
<p>My JCL ended up looking like this:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="" style="font-family:monospace;">//CLGP JOB
//CLG EXEC IGYWCLG
//COBOL.SYSIN DD DSN=HLQ.EXPERIME.COBOL<span class="br0">&#40;</span>HELLO<span class="br0">&#41;</span>,DISP=SHR</pre></td></tr></table></div>

<p>It&#8217;s really pretty simple. The first line just declares the name of the job (CLGP), the next line executes the terribly named COBOL compile, link-editor, and run JCL procedure. IBM wrote it so you don&#8217;t have to. The last line just loads the dataset member that contains all of the COBOL code.</p>
<p>See? Mainframes and COBOL are THAT easy!</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this post:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F&amp;title=My%20first%20COBOL%20program%20on%20z%2FOS&amp;bodytext=Today%2C%20I%20got%20Hello%20World%20working%20in%20COBOL%20on%20an%20IBM%20Z9.%20This%20is%20actually%20surprisingly%20more%20difficult%20than%20it%20would%20seem.%20But%20I%27m%20gonna%20document%20it%20here%20so%20I%20remember%20how%20to%20do%20it%2C%20and%20also%20in%20case%20some%20random%20z%2FOS%20n00b%20stumbles%20upon%20this%20entry.%0D%0A%0D%0AHe" title="Digg" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F_amp_title=My_20first_20COBOL_20program_20on_20z_2FOS_amp_bodytext=Today_2C_20I_20got_20Hello_20World_20working_20in_20COBOL_20on_20an_20IBM_20Z9._20This_20is_20actually_20surprisingly_20more_20difficult_20than_20it_20would_20seem._20But_20I_27m_20gonna_20document_20it_20here_20so_20I_20remember_20how_20to_20do_20it_2C_20and_20also_20in_20case_20some_20random_20z_2FOS_20n00b_20stumbles_20upon_20this_20entry._0D_0A_0D_0AHe&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F&amp;title=My%20first%20COBOL%20program%20on%20z%2FOS&amp;notes=Today%2C%20I%20got%20Hello%20World%20working%20in%20COBOL%20on%20an%20IBM%20Z9.%20This%20is%20actually%20surprisingly%20more%20difficult%20than%20it%20would%20seem.%20But%20I%27m%20gonna%20document%20it%20here%20so%20I%20remember%20how%20to%20do%20it%2C%20and%20also%20in%20case%20some%20random%20z%2FOS%20n00b%20stumbles%20upon%20this%20entry.%0D%0A%0D%0AHe" title="del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F_amp_title=My_20first_20COBOL_20program_20on_20z_2FOS_amp_notes=Today_2C_20I_20got_20Hello_20World_20working_20in_20COBOL_20on_20an_20IBM_20Z9._20This_20is_20actually_20surprisingly_20more_20difficult_20than_20it_20would_20seem._20But_20I_27m_20gonna_20document_20it_20here_20so_20I_20remember_20how_20to_20do_20it_2C_20and_20also_20in_20case_20some_20random_20z_2FOS_20n00b_20stumbles_20upon_20this_20entry._0D_0A_0D_0AHe&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F&amp;t=My%20first%20COBOL%20program%20on%20z%2FOS" title="Facebook" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/share.php?u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F_amp_t=My_20first_20COBOL_20program_20on_20z_2FOS&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F&amp;title=My%20first%20COBOL%20program%20on%20z%2FOS&amp;annotation=Today%2C%20I%20got%20Hello%20World%20working%20in%20COBOL%20on%20an%20IBM%20Z9.%20This%20is%20actually%20surprisingly%20more%20difficult%20than%20it%20would%20seem.%20But%20I%27m%20gonna%20document%20it%20here%20so%20I%20remember%20how%20to%20do%20it%2C%20and%20also%20in%20case%20some%20random%20z%2FOS%20n00b%20stumbles%20upon%20this%20entry.%0D%0A%0D%0AHe" title="Google Bookmarks" onclick="pageTracker._trackPageview('/outgoing/www.google.com/bookmarks/mark?op=edit_amp_bkmk=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F_amp_title=My_20first_20COBOL_20program_20on_20z_2FOS_amp_annotation=Today_2C_20I_20got_20Hello_20World_20working_20in_20COBOL_20on_20an_20IBM_20Z9._20This_20is_20actually_20surprisingly_20more_20difficult_20than_20it_20would_20seem._20But_20I_27m_20gonna_20document_20it_20here_20so_20I_20remember_20how_20to_20do_20it_2C_20and_20also_20in_20case_20some_20random_20z_2FOS_20n00b_20stumbles_20upon_20this_20entry._0D_0A_0D_0AHe&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=My%20first%20COBOL%20program%20on%20z%2FOS&amp;link=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F" title="FriendFeed" onclick="pageTracker._trackPageview('/outgoing/www.friendfeed.com/share?title=My_20first_20COBOL_20program_20on_20z_2FOS_amp_link=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F" title="Identi.ca" onclick="pageTracker._trackPageview('/outgoing/identi.ca/notice/new?status_textarea=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F&amp;title=My%20first%20COBOL%20program%20on%20z%2FOS&amp;source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr&amp;summary=Today%2C%20I%20got%20Hello%20World%20working%20in%20COBOL%20on%20an%20IBM%20Z9.%20This%20is%20actually%20surprisingly%20more%20difficult%20than%20it%20would%20seem.%20But%20I%27m%20gonna%20document%20it%20here%20so%20I%20remember%20how%20to%20do%20it%2C%20and%20also%20in%20case%20some%20random%20z%2FOS%20n00b%20stumbles%20upon%20this%20entry.%0D%0A%0D%0AHe" title="LinkedIn" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/shareArticle?mini=true_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F_amp_title=My_20first_20COBOL_20program_20on_20z_2FOS_amp_source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr_amp_summary=Today_2C_20I_20got_20Hello_20World_20working_20in_20COBOL_20on_20an_20IBM_20Z9._20This_20is_20actually_20surprisingly_20more_20difficult_20than_20it_20would_20seem._20But_20I_27m_20gonna_20document_20it_20here_20so_20I_20remember_20how_20to_20do_20it_2C_20and_20also_20in_20case_20some_20random_20z_2FOS_20n00b_20stumbles_20upon_20this_20entry._0D_0A_0D_0AHe&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F&amp;title=My%20first%20COBOL%20program%20on%20z%2FOS" title="Live" onclick="pageTracker._trackPageview('/outgoing/favorites.live.com/quickadd.aspx?marklet=1_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F_amp_title=My_20first_20COBOL_20program_20on_20z_2FOS&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F&amp;title=My%20first%20COBOL%20program%20on%20z%2FOS" title="Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F_amp_title=My_20first_20COBOL_20program_20on_20z_2FOS&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=My%20first%20COBOL%20program%20on%20z%2FOS&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F" title="Slashdot" onclick="pageTracker._trackPageview('/outgoing/slashdot.org/bookmark.pl?title=My_20first_20COBOL_20program_20on_20z_2FOS_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F&amp;title=My%20first%20COBOL%20program%20on%20z%2FOS" title="StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F_amp_title=My_20first_20COBOL_20program_20on_20z_2FOS&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F&amp;t=My%20first%20COBOL%20program%20on%20z%2FOS&amp;s=Today%2C%20I%20got%20Hello%20World%20working%20in%20COBOL%20on%20an%20IBM%20Z9.%20This%20is%20actually%20surprisingly%20more%20difficult%20than%20it%20would%20seem.%20But%20I%27m%20gonna%20document%20it%20here%20so%20I%20remember%20how%20to%20do%20it%2C%20and%20also%20in%20case%20some%20random%20z%2FOS%20n00b%20stumbles%20upon%20this%20entry.%0D%0A%0D%0AHe" title="Tumblr" onclick="pageTracker._trackPageview('/outgoing/www.tumblr.com/share?v=3_amp_u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F_amp_t=My_20first_20COBOL_20program_20on_20z_2FOS_amp_s=Today_2C_20I_20got_20Hello_20World_20working_20in_20COBOL_20on_20an_20IBM_20Z9._20This_20is_20actually_20surprisingly_20more_20difficult_20than_20it_20would_20seem._20But_20I_27m_20gonna_20document_20it_20here_20so_20I_20remember_20how_20to_20do_20it_2C_20and_20also_20in_20case_20some_20random_20z_2FOS_20n00b_20stumbles_20upon_20this_20entry._0D_0A_0D_0AHe&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=My%20first%20COBOL%20program%20on%20z%2FOS%20-%20http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F25%2Fmy-first-cobol-program-on-zos%2F" title="Twitter" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=My_20first_20COBOL_20program_20on_20z_2FOS_20-_20http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F25_2Fmy-first-cobol-program-on-zos_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.worrbase.com/2010/04/25/my-first-cobol-program-on-zos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LTSP</title>
		<link>http://www.worrbase.com/2010/04/22/ltsp/</link>
		<comments>http://www.worrbase.com/2010/04/22/ltsp/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 08:52:40 +0000</pubDate>
		<dc:creator>worr</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Systems Administration]]></category>

		<guid isPermaLink="false">http://www.worrbase.com/?p=32</guid>
		<description><![CDATA[I finally finished rolling out the new changes to CSH&#8217;s usercenter. I decided to move away from Fully Automatic Installation and move towards the thin client solution provided by LTSP.
FAI was really painful to test, as well as significantly more painful to manage. LTSP allows us to only update one machine, and install upgrades without [...]]]></description>
			<content:encoded><![CDATA[<p>I finally finished rolling out the new changes to CSH&#8217;s usercenter. I decided to move away from Fully Automatic Installation and move towards the thin client solution provided by <a href="http://ltsp.org" onclick="pageTracker._trackPageview('/outgoing/ltsp.org?referer=');">LTSP</a>.</p>
<p>FAI was really painful to test, as well as significantly more painful to manage. LTSP allows us to only update one machine, and install upgrades without having to reboot the machines to receive the softupdates (the FAI way).</p>
<p>One machine, in this case a virtual machine on CSH&#8217;s Xen cluster, runs all of the software for the clients. The terminal client connects to the terminal server&#8217;s login prompt until the user logs in. Then the client automatically ssh&#8217;s (with X forwarding of course) to the server and subsequently runs all of their software off of that.</p>
<p>It is bandwidth heavy (on that segment of our network anyway), but it works very well. The clients are just as fast with the X forwarding as they would be with a locally installed OS (these machines are ultra slow).</p>
<p>Really, there isn&#8217;t much to say other than FAI is terrible. Related: I plan on setting up <a href="http://www.puppetlabs.com/" onclick="pageTracker._trackPageview('/outgoing/www.puppetlabs.com/?referer=');">puppet</a> at some point for myself.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this post:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F&amp;title=LTSP&amp;bodytext=I%20finally%20finished%20rolling%20out%20the%20new%20changes%20to%20CSH%27s%20usercenter.%20I%20decided%20to%20move%20away%20from%20Fully%20Automatic%20Installation%20and%20move%20towards%20the%20thin%20client%20solution%20provided%20by%20LTSP.%0D%0A%0D%0AFAI%20was%20really%20painful%20to%20test%2C%20as%20well%20as%20significantly%20more%20" title="Digg" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F_amp_title=LTSP_amp_bodytext=I_20finally_20finished_20rolling_20out_20the_20new_20changes_20to_20CSH_27s_20usercenter._20I_20decided_20to_20move_20away_20from_20Fully_20Automatic_20Installation_20and_20move_20towards_20the_20thin_20client_20solution_20provided_20by_20LTSP._0D_0A_0D_0AFAI_20was_20really_20painful_20to_20test_2C_20as_20well_20as_20significantly_20more_20&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F&amp;title=LTSP&amp;notes=I%20finally%20finished%20rolling%20out%20the%20new%20changes%20to%20CSH%27s%20usercenter.%20I%20decided%20to%20move%20away%20from%20Fully%20Automatic%20Installation%20and%20move%20towards%20the%20thin%20client%20solution%20provided%20by%20LTSP.%0D%0A%0D%0AFAI%20was%20really%20painful%20to%20test%2C%20as%20well%20as%20significantly%20more%20" title="del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F_amp_title=LTSP_amp_notes=I_20finally_20finished_20rolling_20out_20the_20new_20changes_20to_20CSH_27s_20usercenter._20I_20decided_20to_20move_20away_20from_20Fully_20Automatic_20Installation_20and_20move_20towards_20the_20thin_20client_20solution_20provided_20by_20LTSP._0D_0A_0D_0AFAI_20was_20really_20painful_20to_20test_2C_20as_20well_20as_20significantly_20more_20&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F&amp;t=LTSP" title="Facebook" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/share.php?u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F_amp_t=LTSP&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F&amp;title=LTSP&amp;annotation=I%20finally%20finished%20rolling%20out%20the%20new%20changes%20to%20CSH%27s%20usercenter.%20I%20decided%20to%20move%20away%20from%20Fully%20Automatic%20Installation%20and%20move%20towards%20the%20thin%20client%20solution%20provided%20by%20LTSP.%0D%0A%0D%0AFAI%20was%20really%20painful%20to%20test%2C%20as%20well%20as%20significantly%20more%20" title="Google Bookmarks" onclick="pageTracker._trackPageview('/outgoing/www.google.com/bookmarks/mark?op=edit_amp_bkmk=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F_amp_title=LTSP_amp_annotation=I_20finally_20finished_20rolling_20out_20the_20new_20changes_20to_20CSH_27s_20usercenter._20I_20decided_20to_20move_20away_20from_20Fully_20Automatic_20Installation_20and_20move_20towards_20the_20thin_20client_20solution_20provided_20by_20LTSP._0D_0A_0D_0AFAI_20was_20really_20painful_20to_20test_2C_20as_20well_20as_20significantly_20more_20&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=LTSP&amp;link=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F" title="FriendFeed" onclick="pageTracker._trackPageview('/outgoing/www.friendfeed.com/share?title=LTSP_amp_link=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F" title="Identi.ca" onclick="pageTracker._trackPageview('/outgoing/identi.ca/notice/new?status_textarea=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F&amp;title=LTSP&amp;source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr&amp;summary=I%20finally%20finished%20rolling%20out%20the%20new%20changes%20to%20CSH%27s%20usercenter.%20I%20decided%20to%20move%20away%20from%20Fully%20Automatic%20Installation%20and%20move%20towards%20the%20thin%20client%20solution%20provided%20by%20LTSP.%0D%0A%0D%0AFAI%20was%20really%20painful%20to%20test%2C%20as%20well%20as%20significantly%20more%20" title="LinkedIn" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/shareArticle?mini=true_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F_amp_title=LTSP_amp_source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr_amp_summary=I_20finally_20finished_20rolling_20out_20the_20new_20changes_20to_20CSH_27s_20usercenter._20I_20decided_20to_20move_20away_20from_20Fully_20Automatic_20Installation_20and_20move_20towards_20the_20thin_20client_20solution_20provided_20by_20LTSP._0D_0A_0D_0AFAI_20was_20really_20painful_20to_20test_2C_20as_20well_20as_20significantly_20more_20&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F&amp;title=LTSP" title="Live" onclick="pageTracker._trackPageview('/outgoing/favorites.live.com/quickadd.aspx?marklet=1_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F_amp_title=LTSP&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F&amp;title=LTSP" title="Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F_amp_title=LTSP&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=LTSP&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F" title="Slashdot" onclick="pageTracker._trackPageview('/outgoing/slashdot.org/bookmark.pl?title=LTSP_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F&amp;title=LTSP" title="StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F_amp_title=LTSP&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F&amp;t=LTSP&amp;s=I%20finally%20finished%20rolling%20out%20the%20new%20changes%20to%20CSH%27s%20usercenter.%20I%20decided%20to%20move%20away%20from%20Fully%20Automatic%20Installation%20and%20move%20towards%20the%20thin%20client%20solution%20provided%20by%20LTSP.%0D%0A%0D%0AFAI%20was%20really%20painful%20to%20test%2C%20as%20well%20as%20significantly%20more%20" title="Tumblr" onclick="pageTracker._trackPageview('/outgoing/www.tumblr.com/share?v=3_amp_u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F_amp_t=LTSP_amp_s=I_20finally_20finished_20rolling_20out_20the_20new_20changes_20to_20CSH_27s_20usercenter._20I_20decided_20to_20move_20away_20from_20Fully_20Automatic_20Installation_20and_20move_20towards_20the_20thin_20client_20solution_20provided_20by_20LTSP._0D_0A_0D_0AFAI_20was_20really_20painful_20to_20test_2C_20as_20well_20as_20significantly_20more_20&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=LTSP%20-%20http%3A%2F%2Fwww.worrbase.com%2F2010%2F04%2F22%2Fltsp%2F" title="Twitter" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=LTSP_20-_20http_3A_2F_2Fwww.worrbase.com_2F2010_2F04_2F22_2Fltsp_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.worrbase.com/2010/04/22/ltsp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>COBOL</title>
		<link>http://www.worrbase.com/2010/03/13/cobol/</link>
		<comments>http://www.worrbase.com/2010/03/13/cobol/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 08:24:01 +0000</pubDate>
		<dc:creator>worr</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[cobol]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[mainframes]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[totally not 60 years old]]></category>

		<guid isPermaLink="false">http://www.worrbase.com/?p=19</guid>
		<description><![CDATA[So I haven&#8217;t really posted in the last month, mainly because I haven&#8217;t done anything interesting. I&#8217;ve been writing some Perl code using Catalyst and Mason. But that&#8217;s not terribly exciting.
I am however, taking a Mainframes course at RIT this quarter. It promises to be relatively exciting. In it, we get to learn the intricacies [...]]]></description>
			<content:encoded><![CDATA[<p>So I haven&#8217;t really posted in the last month, mainly because I haven&#8217;t done anything interesting. I&#8217;ve been writing some Perl code using Catalyst and Mason. But that&#8217;s not terribly exciting.</p>
<p>I am however, taking a Mainframes course at RIT this quarter. It promises to be relatively exciting. In it, we get to learn the intricacies of z/OS, and how to manage one of those beasts. That&#8217;ll be fun. Surprisingly, there&#8217;s a programming project towards the end of it (it&#8217;s surprising because it&#8217;s a Networking and Sysadmin course, we don&#8217;t program much). And since I&#8217;m learning how to administer and use mainframes, I thought to myself, &#8220;Hell, let&#8217;s do this project in COBOL.&#8221; So here I sit, trying to find a decent COBOL tutorial on the internet.</p>
<p>If anyone finds one, please send it to me. It&#8217;d be nice.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this post:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F&amp;title=COBOL&amp;bodytext=So%20I%20haven%27t%20really%20posted%20in%20the%20last%20month%2C%20mainly%20because%20I%20haven%27t%20done%20anything%20interesting.%20I%27ve%20been%20writing%20some%20Perl%20code%20using%20Catalyst%20and%20Mason.%20But%20that%27s%20not%20terribly%20exciting.%0D%0A%0D%0AI%20am%20however%2C%20taking%20a%20Mainframes%20course%20at%20RIT%20this%20qua" title="Digg" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F_amp_title=COBOL_amp_bodytext=So_20I_20haven_27t_20really_20posted_20in_20the_20last_20month_2C_20mainly_20because_20I_20haven_27t_20done_20anything_20interesting._20I_27ve_20been_20writing_20some_20Perl_20code_20using_20Catalyst_20and_20Mason._20But_20that_27s_20not_20terribly_20exciting._0D_0A_0D_0AI_20am_20however_2C_20taking_20a_20Mainframes_20course_20at_20RIT_20this_20qua&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F&amp;title=COBOL&amp;notes=So%20I%20haven%27t%20really%20posted%20in%20the%20last%20month%2C%20mainly%20because%20I%20haven%27t%20done%20anything%20interesting.%20I%27ve%20been%20writing%20some%20Perl%20code%20using%20Catalyst%20and%20Mason.%20But%20that%27s%20not%20terribly%20exciting.%0D%0A%0D%0AI%20am%20however%2C%20taking%20a%20Mainframes%20course%20at%20RIT%20this%20qua" title="del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F_amp_title=COBOL_amp_notes=So_20I_20haven_27t_20really_20posted_20in_20the_20last_20month_2C_20mainly_20because_20I_20haven_27t_20done_20anything_20interesting._20I_27ve_20been_20writing_20some_20Perl_20code_20using_20Catalyst_20and_20Mason._20But_20that_27s_20not_20terribly_20exciting._0D_0A_0D_0AI_20am_20however_2C_20taking_20a_20Mainframes_20course_20at_20RIT_20this_20qua&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F&amp;t=COBOL" title="Facebook" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/share.php?u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F_amp_t=COBOL&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F&amp;title=COBOL&amp;annotation=So%20I%20haven%27t%20really%20posted%20in%20the%20last%20month%2C%20mainly%20because%20I%20haven%27t%20done%20anything%20interesting.%20I%27ve%20been%20writing%20some%20Perl%20code%20using%20Catalyst%20and%20Mason.%20But%20that%27s%20not%20terribly%20exciting.%0D%0A%0D%0AI%20am%20however%2C%20taking%20a%20Mainframes%20course%20at%20RIT%20this%20qua" title="Google Bookmarks" onclick="pageTracker._trackPageview('/outgoing/www.google.com/bookmarks/mark?op=edit_amp_bkmk=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F_amp_title=COBOL_amp_annotation=So_20I_20haven_27t_20really_20posted_20in_20the_20last_20month_2C_20mainly_20because_20I_20haven_27t_20done_20anything_20interesting._20I_27ve_20been_20writing_20some_20Perl_20code_20using_20Catalyst_20and_20Mason._20But_20that_27s_20not_20terribly_20exciting._0D_0A_0D_0AI_20am_20however_2C_20taking_20a_20Mainframes_20course_20at_20RIT_20this_20qua&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=COBOL&amp;link=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F" title="FriendFeed" onclick="pageTracker._trackPageview('/outgoing/www.friendfeed.com/share?title=COBOL_amp_link=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F" title="Identi.ca" onclick="pageTracker._trackPageview('/outgoing/identi.ca/notice/new?status_textarea=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F&amp;title=COBOL&amp;source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr&amp;summary=So%20I%20haven%27t%20really%20posted%20in%20the%20last%20month%2C%20mainly%20because%20I%20haven%27t%20done%20anything%20interesting.%20I%27ve%20been%20writing%20some%20Perl%20code%20using%20Catalyst%20and%20Mason.%20But%20that%27s%20not%20terribly%20exciting.%0D%0A%0D%0AI%20am%20however%2C%20taking%20a%20Mainframes%20course%20at%20RIT%20this%20qua" title="LinkedIn" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/shareArticle?mini=true_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F_amp_title=COBOL_amp_source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr_amp_summary=So_20I_20haven_27t_20really_20posted_20in_20the_20last_20month_2C_20mainly_20because_20I_20haven_27t_20done_20anything_20interesting._20I_27ve_20been_20writing_20some_20Perl_20code_20using_20Catalyst_20and_20Mason._20But_20that_27s_20not_20terribly_20exciting._0D_0A_0D_0AI_20am_20however_2C_20taking_20a_20Mainframes_20course_20at_20RIT_20this_20qua&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F&amp;title=COBOL" title="Live" onclick="pageTracker._trackPageview('/outgoing/favorites.live.com/quickadd.aspx?marklet=1_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F_amp_title=COBOL&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F&amp;title=COBOL" title="Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F_amp_title=COBOL&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=COBOL&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F" title="Slashdot" onclick="pageTracker._trackPageview('/outgoing/slashdot.org/bookmark.pl?title=COBOL_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F&amp;title=COBOL" title="StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F_amp_title=COBOL&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F&amp;t=COBOL&amp;s=So%20I%20haven%27t%20really%20posted%20in%20the%20last%20month%2C%20mainly%20because%20I%20haven%27t%20done%20anything%20interesting.%20I%27ve%20been%20writing%20some%20Perl%20code%20using%20Catalyst%20and%20Mason.%20But%20that%27s%20not%20terribly%20exciting.%0D%0A%0D%0AI%20am%20however%2C%20taking%20a%20Mainframes%20course%20at%20RIT%20this%20qua" title="Tumblr" onclick="pageTracker._trackPageview('/outgoing/www.tumblr.com/share?v=3_amp_u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F_amp_t=COBOL_amp_s=So_20I_20haven_27t_20really_20posted_20in_20the_20last_20month_2C_20mainly_20because_20I_20haven_27t_20done_20anything_20interesting._20I_27ve_20been_20writing_20some_20Perl_20code_20using_20Catalyst_20and_20Mason._20But_20that_27s_20not_20terribly_20exciting._0D_0A_0D_0AI_20am_20however_2C_20taking_20a_20Mainframes_20course_20at_20RIT_20this_20qua&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=COBOL%20-%20http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fcobol%2F" title="Twitter" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=COBOL_20-_20http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fcobol_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.worrbase.com/2010/03/13/cobol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App Engine, Twitter4J and OAuth</title>
		<link>http://www.worrbase.com/2010/03/13/google-app-engine-twitter4j-and-oauth/</link>
		<comments>http://www.worrbase.com/2010/03/13/google-app-engine-twitter4j-and-oauth/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 08:17:26 +0000</pubDate>
		<dc:creator>worr</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[datastore]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter4j]]></category>

		<guid isPermaLink="false">http://www.worrbase.com/?p=18</guid>
		<description><![CDATA[So I&#8217;m writing a Twitter app in Java on Google App Engine right now with my friend, Dave Bright. We&#8217;re using Google Web Toolkit for our frontend, and App Engine for hosting and database and such. Twitter4J is our Twitter library of choice.
Since we ran into a spot of trouble using OAuth with the Twitter4J [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;m writing a Twitter app in Java on Google App Engine right now with my friend, Dave Bright. We&#8217;re using Google Web Toolkit for our frontend, and App Engine for hosting and database and such. <a href="http://twitter4j.org" onclick="pageTracker._trackPageview('/outgoing/twitter4j.org?referer=');">Twitter4J</a> is our Twitter library of choice.</p>
<p>Since we ran into a spot of trouble using OAuth with the Twitter4J library, I decided to give a bit of a brief tutorial on how to get it working on App Engine. There is actually very different than the code in my as I do some more error checking, and need to do some other stuff with my datastore.</p>
<h2>Twitter4J OAuth Overview</h2>
<ol>
<li>Set the consumer key and secret for your twitter object with setOAuthConsumer(key, secret)</li>
<li>Get a request token with getRequestToken(callback_uri)</li>
<li>Persist the request token somewhere, we&#8217;ll need the original later when we need to get the access token.</li>
<li>Redirect the user to the URL returned by getAuthorizationURL()</li>
<li>Get the persisted request token, setOAuthConsumer again.</li>
<li>Call getOAuthAccessToken(request_token, oauth_verifier) to get an access token</li>
<li>Persist that token with the user data, you&#8217;ll need this everytime you want to authenticate.</li>
</ol>
<h2>Some incomplete example code</h2>
<p>Please note, this is not code I actually have in production anywhere. It&#8217;s original code just for the blog.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> authenticate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    TwitterFactory tf <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TwitterFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Twitter twitter <span style="color: #339933;">=</span> tf.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// This is actually really important, as Twitter WILL NOT send you back the oauth_verifier if</span>
    <span style="color: #666666; font-style: italic;">// you don't provide the callback URI, even if you provide a callback on their site</span>
    twitter.<span style="color: #006633;">setOAuthConsumer</span><span style="color: #009900;">&#40;</span>CONSUMER_KEY, CONSUMER_SECRET<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    RequestToken rtoken <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> RequestToken<span style="color: #009900;">&#40;</span>CALLBACK_URI<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// This is a special class that just relates the token to the RequestToken object in the app engine</span>
    <span style="color: #666666; font-style: italic;">// datastore. The token string itself is the key.</span>
    OAuthTemp temp <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> OAuthTemp<span style="color: #009900;">&#40;</span>rtoken.<span style="color: #006633;">getToken</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, rtoken<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Our persistence manager is named pm</span>
    pm.<span style="color: #006633;">makePersistent</span><span style="color: #009900;">&#40;</span>temp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">return</span> rtoken.<span style="color: #006633;">getAuthorizationURL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>The second bit of the code gets called when the user is returned to the page. You need to get the oauth_token and the oauth_verifier GET variables and pass them to this function.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> authenticatePartII<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> oauth_token, <span style="color: #003399;">String</span> oauth_verifier<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    TwitterFactory tf <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TwitterFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Twitter twitter <span style="color: #339933;">=</span> tf.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Get the temp object out of the datastore, and get the old RequestToken</span>
    <span style="color: #666666; font-style: italic;">// Yes, it MUST be the old RequestToken. Or at least, have all the same parameters</span>
    <span style="color: #666666; font-style: italic;">// as the old RequestToken.</span>
    <span style="color: #003399;">Key</span> k <span style="color: #339933;">=</span> <span style="color: #003399;">KeyFactory</span>.<span style="color: #006633;">createKey</span><span style="color: #009900;">&#40;</span>OAuthTemp.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006633;">getSimpleName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, oauth_token<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    OAuthTemp temp <span style="color: #339933;">=</span> pm.<span style="color: #006633;">getObjectById</span><span style="color: #009900;">&#40;</span>OAuthTemp.<span style="color: #000000; font-weight: bold;">class</span>, k<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    RequestToken rtoken <span style="color: #339933;">=</span> temp.<span style="color: #006633;">getrtoken</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// You MUST provide the original RequestToken and the oauth_verifier passed to you by Twitter</span>
    twitter.<span style="color: #006633;">setOAuthConsumer</span><span style="color: #009900;">&#40;</span>CONSUMER_KEY, CONSUMER_SECRET<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    AccessToken ac  <span style="color: #339933;">=</span> twitter.<span style="color: #006633;">getOAuthAccessToken</span><span style="color: #009900;">&#40;</span>rtoken, oauth_verifier<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// You really don't need the RequestToken information after you got your AccessToken, so</span>
    <span style="color: #666666; font-style: italic;">// delete it.</span>
    twitter.<span style="color: #006633;">setOAuthAccessToken</span><span style="color: #009900;">&#40;</span>ac<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    pm.<span style="color: #006633;">deletePersistent</span><span style="color: #009900;">&#40;</span>temp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// However you store user data, you ought to associate the AcessToken object you</span>
    <span style="color: #666666; font-style: italic;">// just got with your twitter user, and pop it in the datastore. I'll leave that bit up to you.</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>That&#8217;s all there really is to it. The Twitter4J library isn&#8217;t the best documented library, and just looking at the Javadocs and the Desktop-centric code examples isn&#8217;t really that helpful. I hope this clears up some confusion on how to get Twitter4J working with OAuth.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this post:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F&amp;title=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth&amp;bodytext=So%20I%27m%20writing%20a%20Twitter%20app%20in%20Java%20on%20Google%20App%20Engine%20right%20now%20with%20my%20friend%2C%20Dave%20Bright.%20We%27re%20using%20Google%20Web%20Toolkit%20for%20our%20frontend%2C%20and%20App%20Engine%20for%20hosting%20and%20database%20and%20such.%20Twitter4J%20is%20our%20Twitter%20library%20of%20choice.%0D%0A%0D%0ASince%20w" title="Digg" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F_amp_title=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth_amp_bodytext=So_20I_27m_20writing_20a_20Twitter_20app_20in_20Java_20on_20Google_20App_20Engine_20right_20now_20with_20my_20friend_2C_20Dave_20Bright._20We_27re_20using_20Google_20Web_20Toolkit_20for_20our_20frontend_2C_20and_20App_20Engine_20for_20hosting_20and_20database_20and_20such._20Twitter4J_20is_20our_20Twitter_20library_20of_20choice._0D_0A_0D_0ASince_20w&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F&amp;title=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth&amp;notes=So%20I%27m%20writing%20a%20Twitter%20app%20in%20Java%20on%20Google%20App%20Engine%20right%20now%20with%20my%20friend%2C%20Dave%20Bright.%20We%27re%20using%20Google%20Web%20Toolkit%20for%20our%20frontend%2C%20and%20App%20Engine%20for%20hosting%20and%20database%20and%20such.%20Twitter4J%20is%20our%20Twitter%20library%20of%20choice.%0D%0A%0D%0ASince%20w" title="del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F_amp_title=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth_amp_notes=So_20I_27m_20writing_20a_20Twitter_20app_20in_20Java_20on_20Google_20App_20Engine_20right_20now_20with_20my_20friend_2C_20Dave_20Bright._20We_27re_20using_20Google_20Web_20Toolkit_20for_20our_20frontend_2C_20and_20App_20Engine_20for_20hosting_20and_20database_20and_20such._20Twitter4J_20is_20our_20Twitter_20library_20of_20choice._0D_0A_0D_0ASince_20w&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F&amp;t=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth" title="Facebook" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/share.php?u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F_amp_t=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F&amp;title=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth&amp;annotation=So%20I%27m%20writing%20a%20Twitter%20app%20in%20Java%20on%20Google%20App%20Engine%20right%20now%20with%20my%20friend%2C%20Dave%20Bright.%20We%27re%20using%20Google%20Web%20Toolkit%20for%20our%20frontend%2C%20and%20App%20Engine%20for%20hosting%20and%20database%20and%20such.%20Twitter4J%20is%20our%20Twitter%20library%20of%20choice.%0D%0A%0D%0ASince%20w" title="Google Bookmarks" onclick="pageTracker._trackPageview('/outgoing/www.google.com/bookmarks/mark?op=edit_amp_bkmk=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F_amp_title=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth_amp_annotation=So_20I_27m_20writing_20a_20Twitter_20app_20in_20Java_20on_20Google_20App_20Engine_20right_20now_20with_20my_20friend_2C_20Dave_20Bright._20We_27re_20using_20Google_20Web_20Toolkit_20for_20our_20frontend_2C_20and_20App_20Engine_20for_20hosting_20and_20database_20and_20such._20Twitter4J_20is_20our_20Twitter_20library_20of_20choice._0D_0A_0D_0ASince_20w&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth&amp;link=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F" title="FriendFeed" onclick="pageTracker._trackPageview('/outgoing/www.friendfeed.com/share?title=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth_amp_link=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F" title="Identi.ca" onclick="pageTracker._trackPageview('/outgoing/identi.ca/notice/new?status_textarea=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F&amp;title=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth&amp;source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr&amp;summary=So%20I%27m%20writing%20a%20Twitter%20app%20in%20Java%20on%20Google%20App%20Engine%20right%20now%20with%20my%20friend%2C%20Dave%20Bright.%20We%27re%20using%20Google%20Web%20Toolkit%20for%20our%20frontend%2C%20and%20App%20Engine%20for%20hosting%20and%20database%20and%20such.%20Twitter4J%20is%20our%20Twitter%20library%20of%20choice.%0D%0A%0D%0ASince%20w" title="LinkedIn" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/shareArticle?mini=true_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F_amp_title=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth_amp_source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr_amp_summary=So_20I_27m_20writing_20a_20Twitter_20app_20in_20Java_20on_20Google_20App_20Engine_20right_20now_20with_20my_20friend_2C_20Dave_20Bright._20We_27re_20using_20Google_20Web_20Toolkit_20for_20our_20frontend_2C_20and_20App_20Engine_20for_20hosting_20and_20database_20and_20such._20Twitter4J_20is_20our_20Twitter_20library_20of_20choice._0D_0A_0D_0ASince_20w&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F&amp;title=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth" title="Live" onclick="pageTracker._trackPageview('/outgoing/favorites.live.com/quickadd.aspx?marklet=1_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F_amp_title=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F&amp;title=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth" title="Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F_amp_title=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F" title="Slashdot" onclick="pageTracker._trackPageview('/outgoing/slashdot.org/bookmark.pl?title=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F&amp;title=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth" title="StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F_amp_title=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F&amp;t=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth&amp;s=So%20I%27m%20writing%20a%20Twitter%20app%20in%20Java%20on%20Google%20App%20Engine%20right%20now%20with%20my%20friend%2C%20Dave%20Bright.%20We%27re%20using%20Google%20Web%20Toolkit%20for%20our%20frontend%2C%20and%20App%20Engine%20for%20hosting%20and%20database%20and%20such.%20Twitter4J%20is%20our%20Twitter%20library%20of%20choice.%0D%0A%0D%0ASince%20w" title="Tumblr" onclick="pageTracker._trackPageview('/outgoing/www.tumblr.com/share?v=3_amp_u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F_amp_t=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth_amp_s=So_20I_27m_20writing_20a_20Twitter_20app_20in_20Java_20on_20Google_20App_20Engine_20right_20now_20with_20my_20friend_2C_20Dave_20Bright._20We_27re_20using_20Google_20Web_20Toolkit_20for_20our_20frontend_2C_20and_20App_20Engine_20for_20hosting_20and_20database_20and_20such._20Twitter4J_20is_20our_20Twitter_20library_20of_20choice._0D_0A_0D_0ASince_20w&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Google%20App%20Engine%2C%20Twitter4J%20and%20OAuth%20-%20http%3A%2F%2Fwww.worrbase.com%2F2010%2F03%2F13%2Fgoogle-app-engine-twitter4j-and-oauth%2F" title="Twitter" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Google_20App_20Engine_2C_20Twitter4J_20and_20OAuth_20-_20http_3A_2F_2Fwww.worrbase.com_2F2010_2F03_2F13_2Fgoogle-app-engine-twitter4j-and-oauth_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.worrbase.com/2010/03/13/google-app-engine-twitter4j-and-oauth/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Useless programs are the best programs</title>
		<link>http://www.worrbase.com/2010/01/31/useless-programs-are-the-best-programs/</link>
		<comments>http://www.worrbase.com/2010/01/31/useless-programs-are-the-best-programs/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 10:02:31 +0000</pubDate>
		<dc:creator>worr</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[apt-echo]]></category>
		<category><![CDATA[boredom]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[jokes]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[useless]]></category>
		<category><![CDATA[waste of time]]></category>

		<guid isPermaLink="false">http://www.worrbase.com/?p=17</guid>
		<description><![CDATA[A couple of weekends ago, a couple of friends and I were joking about making a useless Debian utility called apt-echo. So that weekend, I sat down and wrote it in Perl. I also went and made a Debian package, complete with relevant documentation. I never really put it anywhere.
So I got bored and decided [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weekends ago, a couple of friends and I were joking about making a useless Debian utility called apt-echo. So that weekend, I sat down and wrote it in Perl. I also went and made a Debian package, complete with relevant documentation. I never really put it anywhere.</p>
<p>So I got bored and decided to make a really an awesome web 1.0 page for apt-echo, as well as off it for download. I even set up a github repo for it. If you want to see the site, it&#8217;s <a href="http://apt-echo.worrbase.com" onclick="pageTracker._trackPageview('/outgoing/apt-echo.worrbase.com?referer=');">right here</a>.</p>
<p>So go ahead, install it. Maybe someone will find it useful one day. It&#8217;s slightly faster than aptitude search, and it has few dependencies. Send me an e-mail if there are bugs. Or if you like it. Or if you found a way for it to be useful.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this post:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F&amp;title=Useless%20programs%20are%20the%20best%20programs&amp;bodytext=A%20couple%20of%20weekends%20ago%2C%20a%20couple%20of%20friends%20and%20I%20were%20joking%20about%20making%20a%20useless%20Debian%20utility%20called%20apt-echo.%20So%20that%20weekend%2C%20I%20sat%20down%20and%20wrote%20it%20in%20Perl.%20I%20also%20went%20and%20made%20a%20Debian%20package%2C%20complete%20with%20relevant%20documentation.%20I%20ne" title="Digg" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F_amp_title=Useless_20programs_20are_20the_20best_20programs_amp_bodytext=A_20couple_20of_20weekends_20ago_2C_20a_20couple_20of_20friends_20and_20I_20were_20joking_20about_20making_20a_20useless_20Debian_20utility_20called_20apt-echo._20So_20that_20weekend_2C_20I_20sat_20down_20and_20wrote_20it_20in_20Perl._20I_20also_20went_20and_20made_20a_20Debian_20package_2C_20complete_20with_20relevant_20documentation._20I_20ne&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F&amp;title=Useless%20programs%20are%20the%20best%20programs&amp;notes=A%20couple%20of%20weekends%20ago%2C%20a%20couple%20of%20friends%20and%20I%20were%20joking%20about%20making%20a%20useless%20Debian%20utility%20called%20apt-echo.%20So%20that%20weekend%2C%20I%20sat%20down%20and%20wrote%20it%20in%20Perl.%20I%20also%20went%20and%20made%20a%20Debian%20package%2C%20complete%20with%20relevant%20documentation.%20I%20ne" title="del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F_amp_title=Useless_20programs_20are_20the_20best_20programs_amp_notes=A_20couple_20of_20weekends_20ago_2C_20a_20couple_20of_20friends_20and_20I_20were_20joking_20about_20making_20a_20useless_20Debian_20utility_20called_20apt-echo._20So_20that_20weekend_2C_20I_20sat_20down_20and_20wrote_20it_20in_20Perl._20I_20also_20went_20and_20made_20a_20Debian_20package_2C_20complete_20with_20relevant_20documentation._20I_20ne&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F&amp;t=Useless%20programs%20are%20the%20best%20programs" title="Facebook" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/share.php?u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F_amp_t=Useless_20programs_20are_20the_20best_20programs&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F&amp;title=Useless%20programs%20are%20the%20best%20programs&amp;annotation=A%20couple%20of%20weekends%20ago%2C%20a%20couple%20of%20friends%20and%20I%20were%20joking%20about%20making%20a%20useless%20Debian%20utility%20called%20apt-echo.%20So%20that%20weekend%2C%20I%20sat%20down%20and%20wrote%20it%20in%20Perl.%20I%20also%20went%20and%20made%20a%20Debian%20package%2C%20complete%20with%20relevant%20documentation.%20I%20ne" title="Google Bookmarks" onclick="pageTracker._trackPageview('/outgoing/www.google.com/bookmarks/mark?op=edit_amp_bkmk=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F_amp_title=Useless_20programs_20are_20the_20best_20programs_amp_annotation=A_20couple_20of_20weekends_20ago_2C_20a_20couple_20of_20friends_20and_20I_20were_20joking_20about_20making_20a_20useless_20Debian_20utility_20called_20apt-echo._20So_20that_20weekend_2C_20I_20sat_20down_20and_20wrote_20it_20in_20Perl._20I_20also_20went_20and_20made_20a_20Debian_20package_2C_20complete_20with_20relevant_20documentation._20I_20ne&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Useless%20programs%20are%20the%20best%20programs&amp;link=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F" title="FriendFeed" onclick="pageTracker._trackPageview('/outgoing/www.friendfeed.com/share?title=Useless_20programs_20are_20the_20best_20programs_amp_link=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F" title="Identi.ca" onclick="pageTracker._trackPageview('/outgoing/identi.ca/notice/new?status_textarea=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F&amp;title=Useless%20programs%20are%20the%20best%20programs&amp;source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr&amp;summary=A%20couple%20of%20weekends%20ago%2C%20a%20couple%20of%20friends%20and%20I%20were%20joking%20about%20making%20a%20useless%20Debian%20utility%20called%20apt-echo.%20So%20that%20weekend%2C%20I%20sat%20down%20and%20wrote%20it%20in%20Perl.%20I%20also%20went%20and%20made%20a%20Debian%20package%2C%20complete%20with%20relevant%20documentation.%20I%20ne" title="LinkedIn" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/shareArticle?mini=true_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F_amp_title=Useless_20programs_20are_20the_20best_20programs_amp_source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr_amp_summary=A_20couple_20of_20weekends_20ago_2C_20a_20couple_20of_20friends_20and_20I_20were_20joking_20about_20making_20a_20useless_20Debian_20utility_20called_20apt-echo._20So_20that_20weekend_2C_20I_20sat_20down_20and_20wrote_20it_20in_20Perl._20I_20also_20went_20and_20made_20a_20Debian_20package_2C_20complete_20with_20relevant_20documentation._20I_20ne&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F&amp;title=Useless%20programs%20are%20the%20best%20programs" title="Live" onclick="pageTracker._trackPageview('/outgoing/favorites.live.com/quickadd.aspx?marklet=1_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F_amp_title=Useless_20programs_20are_20the_20best_20programs&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F&amp;title=Useless%20programs%20are%20the%20best%20programs" title="Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F_amp_title=Useless_20programs_20are_20the_20best_20programs&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Useless%20programs%20are%20the%20best%20programs&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F" title="Slashdot" onclick="pageTracker._trackPageview('/outgoing/slashdot.org/bookmark.pl?title=Useless_20programs_20are_20the_20best_20programs_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F&amp;title=Useless%20programs%20are%20the%20best%20programs" title="StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F_amp_title=Useless_20programs_20are_20the_20best_20programs&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F&amp;t=Useless%20programs%20are%20the%20best%20programs&amp;s=A%20couple%20of%20weekends%20ago%2C%20a%20couple%20of%20friends%20and%20I%20were%20joking%20about%20making%20a%20useless%20Debian%20utility%20called%20apt-echo.%20So%20that%20weekend%2C%20I%20sat%20down%20and%20wrote%20it%20in%20Perl.%20I%20also%20went%20and%20made%20a%20Debian%20package%2C%20complete%20with%20relevant%20documentation.%20I%20ne" title="Tumblr" onclick="pageTracker._trackPageview('/outgoing/www.tumblr.com/share?v=3_amp_u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F_amp_t=Useless_20programs_20are_20the_20best_20programs_amp_s=A_20couple_20of_20weekends_20ago_2C_20a_20couple_20of_20friends_20and_20I_20were_20joking_20about_20making_20a_20useless_20Debian_20utility_20called_20apt-echo._20So_20that_20weekend_2C_20I_20sat_20down_20and_20wrote_20it_20in_20Perl._20I_20also_20went_20and_20made_20a_20Debian_20package_2C_20complete_20with_20relevant_20documentation._20I_20ne&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Useless%20programs%20are%20the%20best%20programs%20-%20http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F31%2Fuseless-programs-are-the-best-programs%2F" title="Twitter" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Useless_20programs_20are_20the_20best_20programs_20-_20http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F31_2Fuseless-programs-are-the-best-programs_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.worrbase.com/2010/01/31/useless-programs-are-the-best-programs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My major is too easy&#8230;</title>
		<link>http://www.worrbase.com/2010/01/18/my-major-is-too-easy/</link>
		<comments>http://www.worrbase.com/2010/01/18/my-major-is-too-easy/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 08:10:24 +0000</pubDate>
		<dc:creator>worr</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[boredom]]></category>
		<category><![CDATA[brainfuck]]></category>
		<category><![CDATA[code generation]]></category>
		<category><![CDATA[csh]]></category>
		<category><![CDATA[hello world]]></category>
		<category><![CDATA[interpreter]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[useless]]></category>

		<guid isPermaLink="false">http://www.worrbase.com/?p=16</guid>
		<description><![CDATA[This weekend, I had absolutely nothing to do. I didn&#8217;t have any homework, studying, projects or the like because my major is far too easy. So I got bored and wrote a complete Brainfuck interpreter in Perl.
The interpreter was the easiest; it took me a morning to get that working albeit without support for nested [...]]]></description>
			<content:encoded><![CDATA[<p>This weekend, I had absolutely nothing to do. I didn&#8217;t have any homework, studying, projects or the like because my major is far too easy. So I got bored and wrote a complete <a href="http://en.wikipedia.org/wiki/Brainfuck" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Brainfuck?referer=');">Brainfuck</a> interpreter in Perl.</p>
<p>The interpreter was the easiest; it took me a morning to get that working albeit without support for nested parens. After that, I decided to write a text to Brainfuck converter, which (not surprisingly) turns text into executable Brainfuck code. Maybe if I get bored again, I could write a module to output the equivalent Perl or C code given some Brainfuck code.</p>
<p>This was my first real project using object oriented Perl. In all honesty, I like that Perl&#8217;s object system allows for many different types of objects (objects can be scalars, arrays, or hashes) and how flexible that is. Unfortunately, I didn&#8217;t get to exploit that flexibility in my code. It&#8217;s still cool though.</p>
<p>What I wrote is 2 Perl modules that make up the linked list that store data generated by Brainfuck code, a Perl module that interprets and runs the code, and a Perl module that translates text to executable Brainfuck code. I know I could have used a pre-built linked list, but I thought it was more fun to write my own.</p>
<p>The biggest challenge was definitely writing the translation code. I could&#8217;ve done it the easy way, and just output x amount of pluses for the character code of each letter, but I decided that was the lamest way to write Brainfuck. Instead, I looped through each character in the phrase, and added some nodes in my Brainfuck code that corresponded to the tens place of each character code. Then, when outputting a character, my Brainfuck code would change the data pointer to the node that was set to the tens place of the character code of the desired character, and increment or decrement it to the proper value.</p>
<p>A more ideal way to do it (to generate cleaner Brainfuck, at least) is to set each of those prep nodes to the nearest multiple of 20 for each character code, and then use whichever node is closest to the desired value. Maybe if I feel like doing more with this, then I&#8217;ll add that feature (probably not).</p>
<p>In addition to writing all this, I also made a <a href="http://github.com/worr" onclick="pageTracker._trackPageview('/outgoing/github.com/worr?referer=');">GitHub</a> account. My GitHub has all the above code, so you can clone the repo if you want to see what the code looks like (it&#8217;s actually really easy to read Perl).</p>
<p>This whole idea came from an idea on CSH. A guy here decided to publish a &#8220;Hello World of the Week&#8221; article in our newsletter, and to combat him I wrote a Brainfuck version of Hello World. This contest grew, and other people joined (albeit humorously) with such contributions as a boot loader that printed out Hello World, Hello World in White Space, and Hello World in Microsoft Word. My contribution (also in my git repo) generated valid Brainfuck code for the phrase Hello World, and then ran it through my interpreter (aka Hello World in 425ish lines).</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this post:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F&amp;title=My%20major%20is%20too%20easy...&amp;bodytext=This%20weekend%2C%20I%20had%20absolutely%20nothing%20to%20do.%20I%20didn%27t%20have%20any%20homework%2C%20studying%2C%20projects%20or%20the%20like%20because%20my%20major%20is%20far%20too%20easy.%20So%20I%20got%20bored%20and%20wrote%20a%20complete%20Brainfuck%20interpreter%20in%20Perl.%0D%0A%0D%0AThe%20interpreter%20was%20the%20easiest%3B%20it%20took%20" title="Digg" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F_amp_title=My_20major_20is_20too_20easy..._amp_bodytext=This_20weekend_2C_20I_20had_20absolutely_20nothing_20to_20do._20I_20didn_27t_20have_20any_20homework_2C_20studying_2C_20projects_20or_20the_20like_20because_20my_20major_20is_20far_20too_20easy._20So_20I_20got_20bored_20and_20wrote_20a_20complete_20Brainfuck_20interpreter_20in_20Perl._0D_0A_0D_0AThe_20interpreter_20was_20the_20easiest_3B_20it_20took_20&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F&amp;title=My%20major%20is%20too%20easy...&amp;notes=This%20weekend%2C%20I%20had%20absolutely%20nothing%20to%20do.%20I%20didn%27t%20have%20any%20homework%2C%20studying%2C%20projects%20or%20the%20like%20because%20my%20major%20is%20far%20too%20easy.%20So%20I%20got%20bored%20and%20wrote%20a%20complete%20Brainfuck%20interpreter%20in%20Perl.%0D%0A%0D%0AThe%20interpreter%20was%20the%20easiest%3B%20it%20took%20" title="del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F_amp_title=My_20major_20is_20too_20easy..._amp_notes=This_20weekend_2C_20I_20had_20absolutely_20nothing_20to_20do._20I_20didn_27t_20have_20any_20homework_2C_20studying_2C_20projects_20or_20the_20like_20because_20my_20major_20is_20far_20too_20easy._20So_20I_20got_20bored_20and_20wrote_20a_20complete_20Brainfuck_20interpreter_20in_20Perl._0D_0A_0D_0AThe_20interpreter_20was_20the_20easiest_3B_20it_20took_20&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F&amp;t=My%20major%20is%20too%20easy..." title="Facebook" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/share.php?u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F_amp_t=My_20major_20is_20too_20easy...&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F&amp;title=My%20major%20is%20too%20easy...&amp;annotation=This%20weekend%2C%20I%20had%20absolutely%20nothing%20to%20do.%20I%20didn%27t%20have%20any%20homework%2C%20studying%2C%20projects%20or%20the%20like%20because%20my%20major%20is%20far%20too%20easy.%20So%20I%20got%20bored%20and%20wrote%20a%20complete%20Brainfuck%20interpreter%20in%20Perl.%0D%0A%0D%0AThe%20interpreter%20was%20the%20easiest%3B%20it%20took%20" title="Google Bookmarks" onclick="pageTracker._trackPageview('/outgoing/www.google.com/bookmarks/mark?op=edit_amp_bkmk=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F_amp_title=My_20major_20is_20too_20easy..._amp_annotation=This_20weekend_2C_20I_20had_20absolutely_20nothing_20to_20do._20I_20didn_27t_20have_20any_20homework_2C_20studying_2C_20projects_20or_20the_20like_20because_20my_20major_20is_20far_20too_20easy._20So_20I_20got_20bored_20and_20wrote_20a_20complete_20Brainfuck_20interpreter_20in_20Perl._0D_0A_0D_0AThe_20interpreter_20was_20the_20easiest_3B_20it_20took_20&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=My%20major%20is%20too%20easy...&amp;link=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F" title="FriendFeed" onclick="pageTracker._trackPageview('/outgoing/www.friendfeed.com/share?title=My_20major_20is_20too_20easy..._amp_link=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F" title="Identi.ca" onclick="pageTracker._trackPageview('/outgoing/identi.ca/notice/new?status_textarea=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F&amp;title=My%20major%20is%20too%20easy...&amp;source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr&amp;summary=This%20weekend%2C%20I%20had%20absolutely%20nothing%20to%20do.%20I%20didn%27t%20have%20any%20homework%2C%20studying%2C%20projects%20or%20the%20like%20because%20my%20major%20is%20far%20too%20easy.%20So%20I%20got%20bored%20and%20wrote%20a%20complete%20Brainfuck%20interpreter%20in%20Perl.%0D%0A%0D%0AThe%20interpreter%20was%20the%20easiest%3B%20it%20took%20" title="LinkedIn" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/shareArticle?mini=true_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F_amp_title=My_20major_20is_20too_20easy..._amp_source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr_amp_summary=This_20weekend_2C_20I_20had_20absolutely_20nothing_20to_20do._20I_20didn_27t_20have_20any_20homework_2C_20studying_2C_20projects_20or_20the_20like_20because_20my_20major_20is_20far_20too_20easy._20So_20I_20got_20bored_20and_20wrote_20a_20complete_20Brainfuck_20interpreter_20in_20Perl._0D_0A_0D_0AThe_20interpreter_20was_20the_20easiest_3B_20it_20took_20&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F&amp;title=My%20major%20is%20too%20easy..." title="Live" onclick="pageTracker._trackPageview('/outgoing/favorites.live.com/quickadd.aspx?marklet=1_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F_amp_title=My_20major_20is_20too_20easy...&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F&amp;title=My%20major%20is%20too%20easy..." title="Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F_amp_title=My_20major_20is_20too_20easy...&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=My%20major%20is%20too%20easy...&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F" title="Slashdot" onclick="pageTracker._trackPageview('/outgoing/slashdot.org/bookmark.pl?title=My_20major_20is_20too_20easy..._amp_url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F&amp;title=My%20major%20is%20too%20easy..." title="StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F_amp_title=My_20major_20is_20too_20easy...&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F&amp;t=My%20major%20is%20too%20easy...&amp;s=This%20weekend%2C%20I%20had%20absolutely%20nothing%20to%20do.%20I%20didn%27t%20have%20any%20homework%2C%20studying%2C%20projects%20or%20the%20like%20because%20my%20major%20is%20far%20too%20easy.%20So%20I%20got%20bored%20and%20wrote%20a%20complete%20Brainfuck%20interpreter%20in%20Perl.%0D%0A%0D%0AThe%20interpreter%20was%20the%20easiest%3B%20it%20took%20" title="Tumblr" onclick="pageTracker._trackPageview('/outgoing/www.tumblr.com/share?v=3_amp_u=http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F_amp_t=My_20major_20is_20too_20easy..._amp_s=This_20weekend_2C_20I_20had_20absolutely_20nothing_20to_20do._20I_20didn_27t_20have_20any_20homework_2C_20studying_2C_20projects_20or_20the_20like_20because_20my_20major_20is_20far_20too_20easy._20So_20I_20got_20bored_20and_20wrote_20a_20complete_20Brainfuck_20interpreter_20in_20Perl._0D_0A_0D_0AThe_20interpreter_20was_20the_20easiest_3B_20it_20took_20&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=My%20major%20is%20too%20easy...%20-%20http%3A%2F%2Fwww.worrbase.com%2F2010%2F01%2F18%2Fmy-major-is-too-easy%2F" title="Twitter" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=My_20major_20is_20too_20easy..._20-_20http_3A_2F_2Fwww.worrbase.com_2F2010_2F01_2F18_2Fmy-major-is-too-easy_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.worrbase.com/2010/01/18/my-major-is-too-easy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl, Apache2::Request, and uploading files</title>
		<link>http://www.worrbase.com/2009/12/07/perl-apache2request-and-uploading-files/</link>
		<comments>http://www.worrbase.com/2009/12/07/perl-apache2request-and-uploading-files/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 10:09:14 +0000</pubDate>
		<dc:creator>worr</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[csh]]></category>
		<category><![CDATA[file uploads]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[mason]]></category>
		<category><![CDATA[netboot]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.worrbase.com/?p=13</guid>
		<description><![CDATA[So I started writing a netboot server for floor. I decided to start writing the web interface first, and learn myself some mason, web perl, and database-y things. Also found some things out about the process that were a little undocumented/misdocumented (now a word).
The biggest issue (so far) was file uploads. So here&#8217;s a quick [...]]]></description>
			<content:encoded><![CDATA[<p>So I started writing a netboot server for floor. I decided to start writing the web interface first, and learn myself some mason, web perl, and database-y things. Also found some things out about the process that were a little undocumented/misdocumented (now a word).</p>
<p>The biggest issue (so far) was file uploads. So here&#8217;s a quick tutorial on how to do file uploads with perl, with mason.</p>
<p>In index.html (or wherever your form HTML code lives):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;form method=&quot;post&quot; action=&quot;upload.mas&quot; enctype=&quot;multipart/form-data&quot;&gt;
  &lt;input type=&quot;file&quot; name=&quot;file_name&quot; /&gt;&lt;br /&gt;
  &lt;input type=&quot;submit&quot; value=&quot;Submit&quot; /&gt;
&lt;/form&gt;</pre></td></tr></table></div>

<p>In upload.mas:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">%init</span><span style="color: #339933;">&gt;</span>
    <span style="color: #000000; font-weight: bold;">use</span> Apache2<span style="color: #339933;">::</span><span style="color: #006600;">Upload</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># $r is an Apache2::RequestRec, not an Apache2::Request like some places say it is</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$req</span> <span style="color: #339933;">=</span> Apache2<span style="color: #339933;">::</span><span style="color: #006600;">Request</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$r</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># file_name refers to the form name you had in your HTML</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$upload</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$req</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">upload</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'file_name'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$fh</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$upload</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">fh</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">open</span> OUTFILE<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&gt;$where_ever_you_wanna_save_the)file&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">binmode</span> <span style="color: #0000ff;">$fh</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">binmode</span> OUTFILE<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">print</span> OUTFILE <span style="color: #0000ff;">$line</span> <span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$line</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">&lt;</span><span style="color: #0000ff;">$fh</span><span style="color: #339933;">&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">close</span> OUTFILE<span style="color: #339933;">;</span>
    <span style="color: #000066;">close</span> <span style="color: #0000ff;">$fh</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span><span style="color: #0000ff;">%init</span><span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>In your httpd.conf:</p>
<pre>APREQ2_READLIMIT 2G # Sets the max size of your user's uploads to 2GB</pre>
<p>I intentionally skipped over error handling code and all of the httpd.conf config for the sake of brevity (I did say brief tutorial). Since I need to allow for larger file sizes than Apache does by default (64MB), I spent quite some time looking for that Apache directive.</p>
<p>Hopefully this saves someone some time.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this post:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F&amp;title=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files&amp;bodytext=So%20I%20started%20writing%20a%20netboot%20server%20for%20floor.%20I%20decided%20to%20start%20writing%20the%20web%20interface%20first%2C%20and%20learn%20myself%20some%20mason%2C%20web%20perl%2C%20and%20database-y%20things.%20Also%20found%20some%20things%20out%20about%20the%20process%20that%20were%20a%20little%20undocumented%2Fmisdocumen" title="Digg" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F_amp_title=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files_amp_bodytext=So_20I_20started_20writing_20a_20netboot_20server_20for_20floor._20I_20decided_20to_20start_20writing_20the_20web_20interface_20first_2C_20and_20learn_20myself_20some_20mason_2C_20web_20perl_2C_20and_20database-y_20things._20Also_20found_20some_20things_20out_20about_20the_20process_20that_20were_20a_20little_20undocumented_2Fmisdocumen&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F&amp;title=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files&amp;notes=So%20I%20started%20writing%20a%20netboot%20server%20for%20floor.%20I%20decided%20to%20start%20writing%20the%20web%20interface%20first%2C%20and%20learn%20myself%20some%20mason%2C%20web%20perl%2C%20and%20database-y%20things.%20Also%20found%20some%20things%20out%20about%20the%20process%20that%20were%20a%20little%20undocumented%2Fmisdocumen" title="del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F_amp_title=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files_amp_notes=So_20I_20started_20writing_20a_20netboot_20server_20for_20floor._20I_20decided_20to_20start_20writing_20the_20web_20interface_20first_2C_20and_20learn_20myself_20some_20mason_2C_20web_20perl_2C_20and_20database-y_20things._20Also_20found_20some_20things_20out_20about_20the_20process_20that_20were_20a_20little_20undocumented_2Fmisdocumen&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F&amp;t=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files" title="Facebook" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/share.php?u=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F_amp_t=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F&amp;title=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files&amp;annotation=So%20I%20started%20writing%20a%20netboot%20server%20for%20floor.%20I%20decided%20to%20start%20writing%20the%20web%20interface%20first%2C%20and%20learn%20myself%20some%20mason%2C%20web%20perl%2C%20and%20database-y%20things.%20Also%20found%20some%20things%20out%20about%20the%20process%20that%20were%20a%20little%20undocumented%2Fmisdocumen" title="Google Bookmarks" onclick="pageTracker._trackPageview('/outgoing/www.google.com/bookmarks/mark?op=edit_amp_bkmk=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F_amp_title=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files_amp_annotation=So_20I_20started_20writing_20a_20netboot_20server_20for_20floor._20I_20decided_20to_20start_20writing_20the_20web_20interface_20first_2C_20and_20learn_20myself_20some_20mason_2C_20web_20perl_2C_20and_20database-y_20things._20Also_20found_20some_20things_20out_20about_20the_20process_20that_20were_20a_20little_20undocumented_2Fmisdocumen&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files&amp;link=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F" title="FriendFeed" onclick="pageTracker._trackPageview('/outgoing/www.friendfeed.com/share?title=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files_amp_link=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F" title="Identi.ca" onclick="pageTracker._trackPageview('/outgoing/identi.ca/notice/new?status_textarea=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F&amp;title=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files&amp;source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr&amp;summary=So%20I%20started%20writing%20a%20netboot%20server%20for%20floor.%20I%20decided%20to%20start%20writing%20the%20web%20interface%20first%2C%20and%20learn%20myself%20some%20mason%2C%20web%20perl%2C%20and%20database-y%20things.%20Also%20found%20some%20things%20out%20about%20the%20process%20that%20were%20a%20little%20undocumented%2Fmisdocumen" title="LinkedIn" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/shareArticle?mini=true_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F_amp_title=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files_amp_source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr_amp_summary=So_20I_20started_20writing_20a_20netboot_20server_20for_20floor._20I_20decided_20to_20start_20writing_20the_20web_20interface_20first_2C_20and_20learn_20myself_20some_20mason_2C_20web_20perl_2C_20and_20database-y_20things._20Also_20found_20some_20things_20out_20about_20the_20process_20that_20were_20a_20little_20undocumented_2Fmisdocumen&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F&amp;title=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files" title="Live" onclick="pageTracker._trackPageview('/outgoing/favorites.live.com/quickadd.aspx?marklet=1_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F_amp_title=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F&amp;title=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files" title="Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F_amp_title=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F" title="Slashdot" onclick="pageTracker._trackPageview('/outgoing/slashdot.org/bookmark.pl?title=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F&amp;title=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files" title="StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F_amp_title=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F&amp;t=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files&amp;s=So%20I%20started%20writing%20a%20netboot%20server%20for%20floor.%20I%20decided%20to%20start%20writing%20the%20web%20interface%20first%2C%20and%20learn%20myself%20some%20mason%2C%20web%20perl%2C%20and%20database-y%20things.%20Also%20found%20some%20things%20out%20about%20the%20process%20that%20were%20a%20little%20undocumented%2Fmisdocumen" title="Tumblr" onclick="pageTracker._trackPageview('/outgoing/www.tumblr.com/share?v=3_amp_u=http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F_amp_t=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files_amp_s=So_20I_20started_20writing_20a_20netboot_20server_20for_20floor._20I_20decided_20to_20start_20writing_20the_20web_20interface_20first_2C_20and_20learn_20myself_20some_20mason_2C_20web_20perl_2C_20and_20database-y_20things._20Also_20found_20some_20things_20out_20about_20the_20process_20that_20were_20a_20little_20undocumented_2Fmisdocumen&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Perl%2C%20Apache2%3A%3ARequest%2C%20and%20uploading%20files%20-%20http%3A%2F%2Fwww.worrbase.com%2F2009%2F12%2F07%2Fperl-apache2request-and-uploading-files%2F" title="Twitter" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Perl_2C_20Apache2_3A_3ARequest_2C_20and_20uploading_20files_20-_20http_3A_2F_2Fwww.worrbase.com_2F2009_2F12_2F07_2Fperl-apache2request-and-uploading-files_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.worrbase.com/2009/12/07/perl-apache2request-and-uploading-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Wave</title>
		<link>http://www.worrbase.com/2009/10/26/google-wave/</link>
		<comments>http://www.worrbase.com/2009/10/26/google-wave/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 06:52:00 +0000</pubDate>
		<dc:creator>worr</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.worrbase.com/?p=10</guid>
		<description><![CDATA[Yeah, that&#8217;s right. Just got an account. Well, by just, I mean I got one on Friday. Don&#8217;t even ask for invites, because they were gone by Saturday morning. Also, if you don&#8217;t know what Wave is, you should really go to this site and watch the video. I know it&#8217;s long, but it&#8217;s well [...]]]></description>
			<content:encoded><![CDATA[<p>Yeah, that&#8217;s right. Just got an account. Well, by just, I mean I got one on Friday. Don&#8217;t even ask for invites, because they were gone by Saturday morning. Also, if you don&#8217;t know what Wave is, you should really go to <a href="http://wave.google.com" onclick="pageTracker._trackPageview('/outgoing/wave.google.com?referer=');">this</a> site and watch the video. I know it&#8217;s long, but it&#8217;s well worth it.</p>
<p>So Google Wave is pretty awesome. It&#8217;s ridiculously buggy, but it works well enough if you aren&#8217;t using it in a production environment. I have yet to try out any of the multimedia stuff beyond embedding YouTube videos in Wave, but I imagine it works just as well as everything else does. I&#8217;ll probably talk more about that when I&#8217;ve played with it.</p>
<p>What I&#8217;ve really been playing with is the Wave API, in Python of course. The jist of what I&#8217;ve been reading is that the Java API isn&#8217;t as up to par as the Python API. Also, I hate Java, and I hate writing code in Java.</p>
<p>The Wave API is built off of <a href="http://appspot.com" onclick="pageTracker._trackPageview('/outgoing/appspot.com?referer=');">Google App Engine</a>, and has all the same limitations as App Engine. My roommate and I kinda half started working on an NNTP gateway to Wave. Unfortunately, the limitations App Engine sets makes this a little more difficult than we&#8217;d like (no sockets or anything of the sort).</p>
<p>The one thing I&#8217;ve come across in the API that I don&#8217;t like, is that you *must* include the entire Python Wave module in the app directory that you upload to App Engine. Not a huge issue, but definitely a bit of an annoyance. The only real problems I see are the possibility for people to modify the version of the Wave API they upload, and that the version of the Wave API they upload is outdated.</p>
<p>Another issue with using App Engine as the platform for all of the Wave code and such, is that you *must* use Python 2.5. App Engine doesn&#8217;t work with anything higher than that. So even though the Wave development site says you can use Python 2.5 or above, the above part is really a lie.</p>
<p>The good news: Google Wave won&#8217;t forever be reliant on App Engine. Sometime in the future, they will be allowing Apps from anywhere. This is will be awesome, and I can&#8217;t wait.</p>
<p>Oh, and I had other productive things I was gonna do this weekend, but they all got shot to hell when I got my Wave account.</p>
<p>Now you can wave me at ay1244@googlewave.com</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this post:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F&amp;title=Google%20Wave&amp;bodytext=Yeah%2C%20that%27s%20right.%20Just%20got%20an%20account.%20Well%2C%20by%20just%2C%20I%20mean%20I%20got%20one%20on%20Friday.%20Don%27t%20even%20ask%20for%20invites%2C%20because%20they%20were%20gone%20by%20Saturday%20morning.%20Also%2C%20if%20you%20don%27t%20know%20what%20Wave%20is%2C%20you%20should%20really%20go%20to%20this%20site%20and%20watch%20the%20video.%20I" title="Digg" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F_amp_title=Google_20Wave_amp_bodytext=Yeah_2C_20that_27s_20right._20Just_20got_20an_20account._20Well_2C_20by_20just_2C_20I_20mean_20I_20got_20one_20on_20Friday._20Don_27t_20even_20ask_20for_20invites_2C_20because_20they_20were_20gone_20by_20Saturday_20morning._20Also_2C_20if_20you_20don_27t_20know_20what_20Wave_20is_2C_20you_20should_20really_20go_20to_20this_20site_20and_20watch_20the_20video._20I&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F&amp;title=Google%20Wave&amp;notes=Yeah%2C%20that%27s%20right.%20Just%20got%20an%20account.%20Well%2C%20by%20just%2C%20I%20mean%20I%20got%20one%20on%20Friday.%20Don%27t%20even%20ask%20for%20invites%2C%20because%20they%20were%20gone%20by%20Saturday%20morning.%20Also%2C%20if%20you%20don%27t%20know%20what%20Wave%20is%2C%20you%20should%20really%20go%20to%20this%20site%20and%20watch%20the%20video.%20I" title="del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F_amp_title=Google_20Wave_amp_notes=Yeah_2C_20that_27s_20right._20Just_20got_20an_20account._20Well_2C_20by_20just_2C_20I_20mean_20I_20got_20one_20on_20Friday._20Don_27t_20even_20ask_20for_20invites_2C_20because_20they_20were_20gone_20by_20Saturday_20morning._20Also_2C_20if_20you_20don_27t_20know_20what_20Wave_20is_2C_20you_20should_20really_20go_20to_20this_20site_20and_20watch_20the_20video._20I&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F&amp;t=Google%20Wave" title="Facebook" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/share.php?u=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F_amp_t=Google_20Wave&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F&amp;title=Google%20Wave&amp;annotation=Yeah%2C%20that%27s%20right.%20Just%20got%20an%20account.%20Well%2C%20by%20just%2C%20I%20mean%20I%20got%20one%20on%20Friday.%20Don%27t%20even%20ask%20for%20invites%2C%20because%20they%20were%20gone%20by%20Saturday%20morning.%20Also%2C%20if%20you%20don%27t%20know%20what%20Wave%20is%2C%20you%20should%20really%20go%20to%20this%20site%20and%20watch%20the%20video.%20I" title="Google Bookmarks" onclick="pageTracker._trackPageview('/outgoing/www.google.com/bookmarks/mark?op=edit_amp_bkmk=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F_amp_title=Google_20Wave_amp_annotation=Yeah_2C_20that_27s_20right._20Just_20got_20an_20account._20Well_2C_20by_20just_2C_20I_20mean_20I_20got_20one_20on_20Friday._20Don_27t_20even_20ask_20for_20invites_2C_20because_20they_20were_20gone_20by_20Saturday_20morning._20Also_2C_20if_20you_20don_27t_20know_20what_20Wave_20is_2C_20you_20should_20really_20go_20to_20this_20site_20and_20watch_20the_20video._20I&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Google%20Wave&amp;link=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F" title="FriendFeed" onclick="pageTracker._trackPageview('/outgoing/www.friendfeed.com/share?title=Google_20Wave_amp_link=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F" title="Identi.ca" onclick="pageTracker._trackPageview('/outgoing/identi.ca/notice/new?status_textarea=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F&amp;title=Google%20Wave&amp;source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr&amp;summary=Yeah%2C%20that%27s%20right.%20Just%20got%20an%20account.%20Well%2C%20by%20just%2C%20I%20mean%20I%20got%20one%20on%20Friday.%20Don%27t%20even%20ask%20for%20invites%2C%20because%20they%20were%20gone%20by%20Saturday%20morning.%20Also%2C%20if%20you%20don%27t%20know%20what%20Wave%20is%2C%20you%20should%20really%20go%20to%20this%20site%20and%20watch%20the%20video.%20I" title="LinkedIn" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/shareArticle?mini=true_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F_amp_title=Google_20Wave_amp_source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr_amp_summary=Yeah_2C_20that_27s_20right._20Just_20got_20an_20account._20Well_2C_20by_20just_2C_20I_20mean_20I_20got_20one_20on_20Friday._20Don_27t_20even_20ask_20for_20invites_2C_20because_20they_20were_20gone_20by_20Saturday_20morning._20Also_2C_20if_20you_20don_27t_20know_20what_20Wave_20is_2C_20you_20should_20really_20go_20to_20this_20site_20and_20watch_20the_20video._20I&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F&amp;title=Google%20Wave" title="Live" onclick="pageTracker._trackPageview('/outgoing/favorites.live.com/quickadd.aspx?marklet=1_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F_amp_title=Google_20Wave&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F&amp;title=Google%20Wave" title="Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F_amp_title=Google_20Wave&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Google%20Wave&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F" title="Slashdot" onclick="pageTracker._trackPageview('/outgoing/slashdot.org/bookmark.pl?title=Google_20Wave_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F&amp;title=Google%20Wave" title="StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F_amp_title=Google_20Wave&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F&amp;t=Google%20Wave&amp;s=Yeah%2C%20that%27s%20right.%20Just%20got%20an%20account.%20Well%2C%20by%20just%2C%20I%20mean%20I%20got%20one%20on%20Friday.%20Don%27t%20even%20ask%20for%20invites%2C%20because%20they%20were%20gone%20by%20Saturday%20morning.%20Also%2C%20if%20you%20don%27t%20know%20what%20Wave%20is%2C%20you%20should%20really%20go%20to%20this%20site%20and%20watch%20the%20video.%20I" title="Tumblr" onclick="pageTracker._trackPageview('/outgoing/www.tumblr.com/share?v=3_amp_u=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F_amp_t=Google_20Wave_amp_s=Yeah_2C_20that_27s_20right._20Just_20got_20an_20account._20Well_2C_20by_20just_2C_20I_20mean_20I_20got_20one_20on_20Friday._20Don_27t_20even_20ask_20for_20invites_2C_20because_20they_20were_20gone_20by_20Saturday_20morning._20Also_2C_20if_20you_20don_27t_20know_20what_20Wave_20is_2C_20you_20should_20really_20go_20to_20this_20site_20and_20watch_20the_20video._20I&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Google%20Wave%20-%20http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F26%2Fgoogle-wave%2F" title="Twitter" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Google_20Wave_20-_20http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F26_2Fgoogle-wave_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.worrbase.com/2009/10/26/google-wave/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Project Work Weekend Part II</title>
		<link>http://www.worrbase.com/2009/10/19/project-work-weekend-part-ii/</link>
		<comments>http://www.worrbase.com/2009/10/19/project-work-weekend-part-ii/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 07:37:15 +0000</pubDate>
		<dc:creator>worr</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Systems Administration]]></category>
		<category><![CDATA[cs]]></category>
		<category><![CDATA[csh]]></category>
		<category><![CDATA[omegle]]></category>
		<category><![CDATA[opcomm]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://www.worrbase.com/?p=8</guid>
		<description><![CDATA[Yesterday ended up being extraordinarily productive for me. I learned GTK+ in perl, and wrote the GUI for my Omegle app. It&#8217;s looking decent, although there is this annoying issue with the menu bar that&#8217;s bothering me a bit. It&#8217;s very simple, but I can&#8217;t really think of any other features to put in the [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday ended up being extraordinarily productive for me. I learned GTK+ in perl, and wrote the GUI for my Omegle app. It&#8217;s looking decent, although there is this annoying issue with the menu bar that&#8217;s bothering me a bit. It&#8217;s very simple, but I can&#8217;t really think of any other features to put in the GUI.</p>
<p>I also got a bunch of the abstraction for my CS project done today. But that wasn&#8217;t that much code. Oh well.</p>
<p>Also, in the middle of this post, got roped into helping fix our Xen management interface. And by help, I meant I installed Ubuntu server (ugh) on a machine and installed openssh. Woo.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this post:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F&amp;title=Project%20Work%20Weekend%20Part%20II&amp;bodytext=Yesterday%20ended%20up%20being%20extraordinarily%20productive%20for%20me.%20I%20learned%20GTK%2B%20in%20perl%2C%20and%20wrote%20the%20GUI%20for%20my%20Omegle%20app.%20It%27s%20looking%20decent%2C%20although%20there%20is%20this%20annoying%20issue%20with%20the%20menu%20bar%20that%27s%20bothering%20me%20a%20bit.%20It%27s%20very%20simple%2C%20but%20I%20c" title="Digg" onclick="pageTracker._trackPageview('/outgoing/digg.com/submit?phase=2_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F_amp_title=Project_20Work_20Weekend_20Part_20II_amp_bodytext=Yesterday_20ended_20up_20being_20extraordinarily_20productive_20for_20me._20I_20learned_20GTK_2B_20in_20perl_2C_20and_20wrote_20the_20GUI_20for_20my_20Omegle_20app._20It_27s_20looking_20decent_2C_20although_20there_20is_20this_20annoying_20issue_20with_20the_20menu_20bar_20that_27s_20bothering_20me_20a_20bit._20It_27s_20very_20simple_2C_20but_20I_20c&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F&amp;title=Project%20Work%20Weekend%20Part%20II&amp;notes=Yesterday%20ended%20up%20being%20extraordinarily%20productive%20for%20me.%20I%20learned%20GTK%2B%20in%20perl%2C%20and%20wrote%20the%20GUI%20for%20my%20Omegle%20app.%20It%27s%20looking%20decent%2C%20although%20there%20is%20this%20annoying%20issue%20with%20the%20menu%20bar%20that%27s%20bothering%20me%20a%20bit.%20It%27s%20very%20simple%2C%20but%20I%20c" title="del.icio.us" onclick="pageTracker._trackPageview('/outgoing/delicious.com/post?url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F_amp_title=Project_20Work_20Weekend_20Part_20II_amp_notes=Yesterday_20ended_20up_20being_20extraordinarily_20productive_20for_20me._20I_20learned_20GTK_2B_20in_20perl_2C_20and_20wrote_20the_20GUI_20for_20my_20Omegle_20app._20It_27s_20looking_20decent_2C_20although_20there_20is_20this_20annoying_20issue_20with_20the_20menu_20bar_20that_27s_20bothering_20me_20a_20bit._20It_27s_20very_20simple_2C_20but_20I_20c&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F&amp;t=Project%20Work%20Weekend%20Part%20II" title="Facebook" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/share.php?u=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F_amp_t=Project_20Work_20Weekend_20Part_20II&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F&amp;title=Project%20Work%20Weekend%20Part%20II&amp;annotation=Yesterday%20ended%20up%20being%20extraordinarily%20productive%20for%20me.%20I%20learned%20GTK%2B%20in%20perl%2C%20and%20wrote%20the%20GUI%20for%20my%20Omegle%20app.%20It%27s%20looking%20decent%2C%20although%20there%20is%20this%20annoying%20issue%20with%20the%20menu%20bar%20that%27s%20bothering%20me%20a%20bit.%20It%27s%20very%20simple%2C%20but%20I%20c" title="Google Bookmarks" onclick="pageTracker._trackPageview('/outgoing/www.google.com/bookmarks/mark?op=edit_amp_bkmk=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F_amp_title=Project_20Work_20Weekend_20Part_20II_amp_annotation=Yesterday_20ended_20up_20being_20extraordinarily_20productive_20for_20me._20I_20learned_20GTK_2B_20in_20perl_2C_20and_20wrote_20the_20GUI_20for_20my_20Omegle_20app._20It_27s_20looking_20decent_2C_20although_20there_20is_20this_20annoying_20issue_20with_20the_20menu_20bar_20that_27s_20bothering_20me_20a_20bit._20It_27s_20very_20simple_2C_20but_20I_20c&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.friendfeed.com/share?title=Project%20Work%20Weekend%20Part%20II&amp;link=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F" title="FriendFeed" onclick="pageTracker._trackPageview('/outgoing/www.friendfeed.com/share?title=Project_20Work_20Weekend_20Part_20II_amp_link=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/friendfeed.png" title="FriendFeed" alt="FriendFeed" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F" title="Identi.ca" onclick="pageTracker._trackPageview('/outgoing/identi.ca/notice/new?status_textarea=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F&amp;title=Project%20Work%20Weekend%20Part%20II&amp;source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr&amp;summary=Yesterday%20ended%20up%20being%20extraordinarily%20productive%20for%20me.%20I%20learned%20GTK%2B%20in%20perl%2C%20and%20wrote%20the%20GUI%20for%20my%20Omegle%20app.%20It%27s%20looking%20decent%2C%20although%20there%20is%20this%20annoying%20issue%20with%20the%20menu%20bar%20that%27s%20bothering%20me%20a%20bit.%20It%27s%20very%20simple%2C%20but%20I%20c" title="LinkedIn" onclick="pageTracker._trackPageview('/outgoing/www.linkedin.com/shareArticle?mini=true_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F_amp_title=Project_20Work_20Weekend_20Part_20II_amp_source=worrbase+Highlighting+the+thrilling+adventures+of+William+Orr_amp_summary=Yesterday_20ended_20up_20being_20extraordinarily_20productive_20for_20me._20I_20learned_20GTK_2B_20in_20perl_2C_20and_20wrote_20the_20GUI_20for_20my_20Omegle_20app._20It_27s_20looking_20decent_2C_20although_20there_20is_20this_20annoying_20issue_20with_20the_20menu_20bar_20that_27s_20bothering_20me_20a_20bit._20It_27s_20very_20simple_2C_20but_20I_20c&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F&amp;title=Project%20Work%20Weekend%20Part%20II" title="Live" onclick="pageTracker._trackPageview('/outgoing/favorites.live.com/quickadd.aspx?marklet=1_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F_amp_title=Project_20Work_20Weekend_20Part_20II&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F&amp;title=Project%20Work%20Weekend%20Part%20II" title="Reddit" onclick="pageTracker._trackPageview('/outgoing/reddit.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F_amp_title=Project_20Work_20Weekend_20Part_20II&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://slashdot.org/bookmark.pl?title=Project%20Work%20Weekend%20Part%20II&amp;url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F" title="Slashdot" onclick="pageTracker._trackPageview('/outgoing/slashdot.org/bookmark.pl?title=Project_20Work_20Weekend_20Part_20II_amp_url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F&amp;title=Project%20Work%20Weekend%20Part%20II" title="StumbleUpon" onclick="pageTracker._trackPageview('/outgoing/www.stumbleupon.com/submit?url=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F_amp_title=Project_20Work_20Weekend_20Part_20II&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F&amp;t=Project%20Work%20Weekend%20Part%20II&amp;s=Yesterday%20ended%20up%20being%20extraordinarily%20productive%20for%20me.%20I%20learned%20GTK%2B%20in%20perl%2C%20and%20wrote%20the%20GUI%20for%20my%20Omegle%20app.%20It%27s%20looking%20decent%2C%20although%20there%20is%20this%20annoying%20issue%20with%20the%20menu%20bar%20that%27s%20bothering%20me%20a%20bit.%20It%27s%20very%20simple%2C%20but%20I%20c" title="Tumblr" onclick="pageTracker._trackPageview('/outgoing/www.tumblr.com/share?v=3_amp_u=http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F_amp_t=Project_20Work_20Weekend_20Part_20II_amp_s=Yesterday_20ended_20up_20being_20extraordinarily_20productive_20for_20me._20I_20learned_20GTK_2B_20in_20perl_2C_20and_20wrote_20the_20GUI_20for_20my_20Omegle_20app._20It_27s_20looking_20decent_2C_20although_20there_20is_20this_20annoying_20issue_20with_20the_20menu_20bar_20that_27s_20bothering_20me_20a_20bit._20It_27s_20very_20simple_2C_20but_20I_20c&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/tumblr.png" title="Tumblr" alt="Tumblr" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://twitter.com/home?status=Project%20Work%20Weekend%20Part%20II%20-%20http%3A%2F%2Fwww.worrbase.com%2F2009%2F10%2F19%2Fproject-work-weekend-part-ii%2F" title="Twitter" onclick="pageTracker._trackPageview('/outgoing/twitter.com/home?status=Project_20Work_20Weekend_20Part_20II_20-_20http_3A_2F_2Fwww.worrbase.com_2F2009_2F10_2F19_2Fproject-work-weekend-part-ii_2F&amp;referer=');"><img src="http://www.worrbase.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.worrbase.com/2009/10/19/project-work-weekend-part-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
