<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:dtvmedia="http://participatoryculture.org/RSSModules/dtv/1.0"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>A Few Good Memes &#187; Software</title>
	<atom:link href="http://jase.dufair.org/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://jase.dufair.org</link>
	<description>Jason Dufair's weblog</description>
	<pubDate>Sun, 03 Aug 2008 21:10:51 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
		<!-- podcast_generator="podPress/8.5" -->
		<copyright>&#xA9; </copyright>
		<managingEditor>jase@dufair.org ()</managingEditor>
		<webMaster>jase@dufair.org</webMaster>
		<category></category>
		<itunes:keywords></itunes:keywords>
		<itunes:subtitle></itunes:subtitle>
		<itunes:summary>Jason Dufair's weblog</itunes:summary>
		<itunes:author></itunes:author>
		<itunes:category text="Society &amp; Culture"/>
		<itunes:owner>
			<itunes:name></itunes:name>
			<itunes:email>jase@dufair.org</itunes:email>
		</itunes:owner>
		<itunes:block>No</itunes:block>
		<itunes:explicit>no</itunes:explicit>
		<itunes:image href="http://jase.dufair.org/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<image>
			<url>http://jase.dufair.org/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
			<title>A Few Good Memes</title>
			<link>http://jase.dufair.org</link>
			<width>144</width>
			<height>144</height>
		</image>
		<item>
		<title>Three</title>
		<link>http://jase.dufair.org/2006/12/02/three/</link>
		<comments>http://jase.dufair.org/2006/12/02/three/#comments</comments>
		<pubDate>Sat, 02 Dec 2006 05:20:36 +0000</pubDate>
		<dc:creator>jase</dc:creator>
		
		<category><![CDATA[Family]]></category>

		<category><![CDATA[Language]]></category>

		<category><![CDATA[Music]]></category>

		<category><![CDATA[Personal]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jase.dufair.org/?p=74</guid>
		<description><![CDATA[Via thordora:
1.  3 Things that scare me: entropy, nukes, facing my future alone
2.  3 People who make me laugh: My kids, Greg Giraldo, zefrank
3.  3 Things I love: cycling, making and listening to music with friends, cooking
4.  3 Things I hate: switching tasks, sprawl, owning cars
5.  3 Things I donâ€™t [...]]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://vomitcomit.wordpress.com/">thordora</a>:</p>
<p>1.  <strong>3 Things that scare me:</strong> entropy, nukes, facing my future alone</p>
<p>2.  <strong>3 People who make me laugh:</strong> My kids, <a href="http://play.rhapsody.com/greggiraldo/gooddaytocrossariver">Greg Giraldo</a>, <a href="http://www.zefrank.com/theshow/">zefrank</a></p>
<p>3.  <strong>3 Things I love:</strong> cycling, making and listening to music with friends, cooking</p>
<p>4.  <strong>3 Things I hate:</strong> switching tasks, sprawl, owning cars</p>
<p>5.  <strong>3 Things I donâ€™t understand:</strong> time, the difference between por &#038; para, why I can&#8217;t get myself to go to bed at a decent hour</p>
<p>6.  <strong>3 Things on my desk:</strong> Earl Grey tea, a bonsai tree, cradles for Dell PDA and iPod, lost and stolen, respectively</p>
<p>7.  <strong>3 Things Iâ€™m doing right now:</strong> syncing my laptop home directory with my desktop using <a href="http://http://www.cis.upenn.edu/~bcpierce/unison/">unison</a>, listening to Umphrey&#8217;s McGee, wishing my night owl daughter would go to sleep, for God&#8217;s sake.</p>
<p>8.  <strong>3 Things I want to do before I die:</strong> hike the appalachian trail, visit India, bike coast-to-coast</p>
<p>9.  <strong>3 Things I can do:</strong> <a href="http://www.flickr.com/photos/jkdufair/34434483/" title="Photo Sharing">play guitar <img src="http://static.flickr.com/23/34434483_12bd50e351_s.jpg" width="25" height="25" alt="Lying on the table" /></a>, <a href="http://en.wikipedia.org/wiki/Trackstand">a track stand</a>, spell pneumonoultramicroscopicsilicovolcanoconiosis</p>
<p>10.  <strong>3 Things I canâ€™t do:</strong> sit still, remember birthdays, eat well (copied verbatim from thordora)</p>
<p>11.  <strong>3 Things I think you should listen to:</strong> <a href="http://www.rhapsody.com/umphreysmcgee">Umphrey&#8217;s McGee</a>, <a href="http://www.rhapsody.com/thepolyphonicspree">The Polyphonic Spree</a>, my friend Linda Hicks (whose CD is going to be released any day now - linkage forthcoming)</p>
<p>12.  <strong>3 Things you should never listen to:</strong> the first doctor you see, Carrie Underwood, bloggers</p>
<p>13.  3 Things Iâ€™d like to learn: mandarin chinese, the difference between por &#038; para, <a href="http://en.wikipedia.org/wiki/Lisp_programming_language">Common Lisp</a></p>
<p>14.  <strong>3 Favorite foods:</strong> paneer masala, sushi, homemade pizza</p>
<p>15.  <strong>3 Beverages I drink regularly:</strong> tea, coffee, scotch</p>
<p>16.  <strong>3 Shows I watched as a kid:</strong> Sanford &#038; Son, Zoom, 3-2-1 Contact</p>
<p>17.  <strong>3 People Iâ€™m tagging:</strong> <a href="http://www.fuzzyco.com/">Fuzzy</a>, <a href="http://sanjaypande.blogspot.com/">Sanjay Pande</a>, <a href="http://thesteed.com/">Garrett Steed</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jase.dufair.org/2006/12/02/three/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ink Blogging</title>
		<link>http://jase.dufair.org/2006/11/26/ink-blogging/</link>
		<comments>http://jase.dufair.org/2006/11/26/ink-blogging/#comments</comments>
		<pubDate>Sun, 26 Nov 2006 06:41:15 +0000</pubDate>
		<dc:creator>jase</dc:creator>
		
		<category><![CDATA[MetaMeme]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jase.dufair.org/?p=66</guid>
		<description><![CDATA[Well, I figured out how to do hyperlinks in ink via imagemaps, but hooboy is it tedious.  Write in OneNote, copy and paste into ImageReady, define image maps, save as html and gif, upload gif, open html in Emacs, copy and paste into WordPress, copy recognized text into WordPress, clean it up, create the [...]]]></description>
			<content:encoded><![CDATA[<p>Well, I figured out how to do hyperlinks in ink via imagemaps, but hooboy is it tedious.  Write in OneNote, copy and paste into ImageReady, define image maps, save as html and gif, upload gif, open html in Emacs, copy and paste into WordPress, copy recognized text into WordPress, clean it up, create the same damn hyperlinks for the text version, publish.</p>
<p>Hopefully OneNote 2007 will have more seamless blogging.  I played with Windows Live Writer with the ink blogging plugin, but I&#8217;d rather do it all in OneNote if possible.  Seems like it would be a natural application if OneNote allowed ink hyperlinks.</p>
]]></content:encoded>
			<wfw:commentRss>http://jase.dufair.org/2006/11/26/ink-blogging/feed/</wfw:commentRss>
		</item>
		<item>
		<title>tr2itunes.pl</title>
		<link>http://jase.dufair.org/2004/12/21/tr2itunespl/</link>
		<comments>http://jase.dufair.org/2004/12/21/tr2itunespl/#comments</comments>
		<pubDate>Tue, 21 Dec 2004 16:54:24 +0000</pubDate>
		<dc:creator>jase</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jase.dreamhosters.com/?p=16</guid>
		<description><![CDATA[For anyone Googling for Total Recorder Pro, iTunes, and Perl on Windows, I&#8217;ve created tr2itunes.pl that takes a TR job name, a &#8220;show name&#8221; (i.e. whatever you want to call your recording), a duration, a path to save to, and an extension for the file (i.e. mp3) and launches a TR job, records it to [...]]]></description>
			<content:encoded><![CDATA[<p>For anyone Googling for Total Recorder Pro, iTunes, and Perl on Windows, I&#8217;ve created tr2itunes.pl that takes a TR job name, a &#8220;show name&#8221; (i.e. whatever you want to call your recording), a duration, a path to save to, and an extension for the file (i.e. mp3) and launches a TR job, records it to a file name based on the show name and date, gives it and ID3v2 tag with the show name, and puts it in iTunes in a playlist with the name of the job as the playlist.</p>
<p>This basically gives you a way to schedule any web broadcast directly into your iPod.</p>
<p>To use Windows&#8217; Scheduled Task functionality with this (I had trouble using Cygwin cron because it runs as a different user by default and can&#8217;t do OLE automation to iTunes), just create a task with something like the following:</p>
<p>&#8220;c:\Program Files\cygwin\bin\perl5.8.2.exe&#8221; &#8220;c:\Documents and Settings\Jase\My Documents\bin\tr2itunes.pl&#8221; &#8220;WBAA AM&#8221; &#8220;Acoustic Blend&#8221; &#8220;01:04:00&#8243; &#8220;c:\Documents and Settings\Jase\My Documents\My Music\WBAA&#8221; &#8220;mp3&#8243;</p>
<p>This assumes your TotalRecorder.exe is in its standard install location and that you have Perl&#8217;s Win32::OLE, File::Basename, and MP3::Tag.</p>
<p>Please feel free to use this under the GPL<br />
<span id="more-16"></span><br />
#!/usr/bin/perl -w<br />
use strict;</p>
<p>use Win32::OLE;<br />
use File::Basename;<br />
use MP3::Tag;</p>
<p>my $scriptName = basename($0);<br />
my $job = $ARGV[0];<br />
my $show = $ARGV[1];<br />
my $duration = $ARGV[2];<br />
my $path = $ARGV[3];<br />
my $extension = $ARGV[4];</p>
<p>die &#8220;usage: $scriptName <jobName> <showName> <duration>
<path> <extension>\n&#8221; unless $job &#038;&#038; $show &#038;&#038; $duration &#038;&#038; $path &#038;&#038; $extension;</p>
<p>my ($second, $minute, $hour, $day, $month, $year, $weekday, $dayOfYear, $isDST) = localtime time;<br />
$month += 1;<br />
$year += 1900;<br />
my $date = sprintf(&#8221;%02d-%02d-%04d %02d.%02d.%02d&#8221;, $month, $day, $year, $hour, $minute, $second);<br />
my $file = &#8220;$path$show-$date.$extension&#8221;;</p>
<p>print &#8220;Recording $show from job &#8220;$job&#8221; to $file\n&#8221;;<br />
system(&#8221;/c/Program\ Files/HighCriteria/TotalRecorder/TotalRecorder.exe &#8220;$file&#8221; /Time:$duration /Job:&#8221;$job&#8221;");</p>
<p>print &#8220;Tagging $file\n&#8221;;<br />
my $mp3File = MP3::Tag->new($file);<br />
$mp3File->new_tag(&#8221;ID3v2&#8243;);<br />
$mp3File->{ID3v2}->add_frame(&#8221;TIT2&#8243;,&#8221;$show - $month/$day/$year&#8221;);<br />
$mp3File->{ID3v2}->write_tag;</p>
<p>print &#8220;Adding $file to iTunes\n&#8221;;<br />
my $iTunesApp = new Win32::OLE(&#8217;iTunes.Application&#8217;);<br />
$iTunesApp->LibraryPlaylist->AddFile($file);<br />
my $playlist = $iTunesApp->LibrarySource->Playlists->ItemByName($job);<br />
$playlist = $iTunesApp->CreatePlaylist($job) unless $playlist;<br />
$playlist->AddFile($file);<br />
$iTunesApp->UpdateIpod();</p>
]]></content:encoded>
			<wfw:commentRss>http://jase.dufair.org/2004/12/21/tr2itunespl/feed/</wfw:commentRss>
		</item>
		<item>
		<title>I dreamed I was a C program</title>
		<link>http://jase.dufair.org/2004/05/26/i-dreamed-i-was-a-c-program/</link>
		<comments>http://jase.dufair.org/2004/05/26/i-dreamed-i-was-a-c-program/#comments</comments>
		<pubDate>Wed, 26 May 2004 17:06:01 +0000</pubDate>
		<dc:creator>jase</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jase.dreamhosters.com/?p=7</guid>
		<description><![CDATA[A few nights ago, I had a dream I was a C program.  Not that I was programming C, but that I was the program.  I was actually terrified because I was afraid I would run into a buffer overflow or stack overflow and die right there.  I always knew C was [...]]]></description>
			<content:encoded><![CDATA[<p>A few nights ago, I had a dream I was a C program.  Not that I was programming C, but that I was the program.  I was actually terrified because I was afraid I would run into a buffer overflow or stack overflow and die right there.  I always knew C was a nightmare, but geez&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jase.dufair.org/2004/05/26/i-dreamed-i-was-a-c-program/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Quick Access Frontend</title>
		<link>http://jase.dufair.org/2004/03/17/a-quick-access-frontend/</link>
		<comments>http://jase.dufair.org/2004/03/17/a-quick-access-frontend/#comments</comments>
		<pubDate>Wed, 17 Mar 2004 22:49:29 +0000</pubDate>
		<dc:creator>jase</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jase.dreamhosters.com/?p=3</guid>
		<description><![CDATA[James Robertson talks about how we, as developers, tend to make software unneccessarily complex.  I wholeheartedly agree with James on the point that we should make software only as complex as is necessary (hell, I wholeheartedly agree with nearly everything the man says).  I do, however, have some sympathy for the rejection of [...]]]></description>
			<content:encoded><![CDATA[<p>James Robertson <a title="Smalltalk Tidbits, Industry Rants" href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&#038;entry=3256973925">talks</a> about how we, as developers, tend to make software unneccessarily complex.  I wholeheartedly agree with James on the point that we should make software only as complex as is necessary (hell, I wholeheartedly agree with nearly everything the man says).  I do, however, have some sympathy for the rejection of the &#8220;quick Access front end&#8221; idea.  Access is simply an unpleasant piece of software to work with.  I&#8217;ve done a number of small systems with it and dreaded every minute of working with that tool.  I would argue that it&#8217;s no more difficult to put together a simple LAMP (Linux/Apache/MySql/(Perl|PHP|Python) app than it is an Access app.  Or better yet, a <a href="http://beta4.com/seaside2/">Seaside</a> app instead of an Access app.  Developer wise, it&#8217;s probably more efficient and you don&#8217;t have those pesky client update issues.</p>
<p>Access is about as modal as you can get for a development tool (aside from, perhaps, your average shell script), and we know how I feel about modal tools.</p>
]]></content:encoded>
			<wfw:commentRss>http://jase.dufair.org/2004/03/17/a-quick-access-frontend/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Why Modelessness?</title>
		<link>http://jase.dufair.org/2004/03/15/why-modelessness/</link>
		<comments>http://jase.dufair.org/2004/03/15/why-modelessness/#comments</comments>
		<pubDate>Mon, 15 Mar 2004 21:31:34 +0000</pubDate>
		<dc:creator>jase</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://jase.dreamhosters.com/?p=2</guid>
		<description><![CDATA[I&#8217;ve been uninclined to start a blog for years, honestly.  I mean blogs are a bit vain, aren&#8217;t they?  Do I really have anything to say that the whole world needs to read?  I think I probably squarely fit the mold outlined by this Kuro5hin post.  In fact, I&#8217;d better do [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been uninclined to start a blog for years, honestly.  I mean blogs are a bit vain, aren&#8217;t they?  Do I really have anything to say that the whole world needs to read?  I think I probably squarely fit the mold outlined by <a href="http://www.kuro5hin.org/story/2004/2/2/171117/8823">this Kuro5hin post</a>.  In fact, I&#8217;d better do some more tweaking to the default MT template I&#8217;m using! (I did tweak it to embed my PhotoBlog on the right - gimme a break!)</p>
<p>Nonetheless, there have been <a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&#038;entry=3256307251">some</a> <a href="http://blog.colorstudy.com/ianb/weblog/2004/03/09.html#P67">interesting</a> <a href="http://www.amber.org/~petrilli/archive/2004/03/08/why_people_dont_get_smalltalk.html">posts</a> lately regarding why people do or don&#8217;t use Smalltalk.  It seems like those who disparage Smalltalk haven&#8217;t really done much Smalltalk, often making claims about Smalltalk that are patently false.  What is it about Smalltalk (and Lisp) that people really resist?</p>
<p>I joined a team at my employer, Purdue University, a few years ago where development was done in <a href="http://smalltalk.cincom.com">VisualWorks Smalltalk</a>.  I had wanted to join the team years prior, but I was really resistant to the idea of doing Smalltalk.  For one, it was just weird.  I had seen the development environment and it was ugly and very <a href="http://www.catb.org/~esr/jargon/html/W/WIMP-environment.html">WIMP</a>-ish.  I was very comfortable with text-editing, compiling, the usual Unix-ish development model.  Yeah, I&#8217;d also done VB, Delphi, Powerbuilder, etc., but Smalltalk just seemed super-strange.  I was also concerned about what kind of hit my résumé would take with an unknown number of years of Smalltalk on it. I decided to try and get on the team anyway since there were some really smart people working there.</p>
<p>Once I took the plunge and decided to <a href="http://www.m-w.com/cgi-bin/dictionary?defenestrate">defenestrate</a> my preconceptions and learn to do things &#8220;The Smalltalk Way&#8221;, I have to tell you - it was like a religious transformation.  Working in Smalltalk as a developer is simply better.  Now before you ask what was in the kool-aid on that team, I think I can demonstrate why Smalltalk (and probably Lisp) is simply a better tool for writing software than nearly anything else available.</p>
<p>People are notorious for having a small &#8220;stack&#8221;.  By stack, I mean layers of context you have to save to operate in successive modes over time.  You&#8217;re working on the next great american novel.  The detective is about to uncover the critical clue to solve the mystery.  You get a phone call.  So you save what you were thinking about the novel on to your mental stack.  You talk to the caller.  Then, you get a call on your second line.  You put the first caller on hold.  You save what you were talking about with the first caller on your mental stack, &#8220;on top of&#8221; the stack frame about the plot of your novel.  You talk to the second caller.  Your Palm Pilot beeps reminding you of your meeting with the publisher tomorrow.  You save what you were talking about with the second caller on your mental stack so you can decide whether the Palm Pilot is indicating something of great importance about your schedule.  By the time you turn off the Palm Pilot, hang up with the second caller, and hang up with the first caller, you&#8217;ve lost the plot of your novel off the bottom of your stack.  If people try to repeat more than seven numbers from a random sequence, they fail.  Small stack.  Evolving as hunter-gatherers, we just didn&#8217;t have a lot of context we had to push and pop on and off of our mental stacks.  Couple that with a small <a href="http://www-cse.stanford.edu/classes/sophomore-college/projects-01/human-computer-interaction/locus.htm">locus of attention</a> and you realize we&#8217;re ill equipped to write complex software.</p>
<p>One of the things you learn in rudimentary user interface design is to <a href="http://humane.sourceforge.net/humane_interface/hollands_review.html">avoid modal interfaces</a>.  A modal interface is one in which the user is restricted at some point to a limited set of operations before proceeding.  Modal dialog boxes, once common in GUIs, are now widely reviled.  Modal interfaces confuse the user, hide functionality, and are generally less efficient to use.  It&#8217;s harder to develop a modeless interface from a developer&#8217;s point of view, but it&#8217;s generally recognized as the Right Thing To Do.</p>
<p>How does this relate to Smalltalk?  Several ways.  Developing in Smalltalk is modeless.  By modeless, I mean that unlike, say C, you don&#8217;t have the edit-compile-run cycle.  You don&#8217;t even have the edit-run cycle of, say, Perl.  Smalltalk and Lisp (and dialects) are unique in that you can change the state of the running system from the running system.  This is the modelessness of Smalltalk.  You add/edit/delete a class or method, and you&#8217;re done.  That&#8217;s it.  The power of this model cannot be understated.  There are no restrictions to what you can do at any point in the development process.  Want to edit a class in C++ or Java?  Shut down the system, edit, recompile, restart.  Wanna change a string resource in Perl?  Shut down the system, change, restart.  Wanna make any change whatsovever in Smalltalk?  Change the method/class, accept.</p>
<p>Additionally, in Smalltalk, everything is an object.  Everything.  Some people find this restrictive.  I find it extremely liberating.  Why?  It gets back to the limited human stack and locus of attention.  Because I don&#8217;t have to keep on my stack whether, like in C++, I&#8217;m working with objects, simple type declarations, functions (which are not first class), typedefs, etc.  In Smalltalk, you have objects, you send messages to those objects.  That&#8217;s it.  It&#8217;s a nearly syntax-free language.  This makes my small-stack, limited RAM brain very happy.  I can focus on the work I have to do and not whether I need to dereference a function pointer or whether I should pass a parameter by value or reference.</p>
<p>Sure, as programmers, we tend to have to have particularly well-developed facilites for keeping deeper stacks and more information in our L2 brain caches.  And I have done enough work in the languages on the <a href="http://www.paulgraham.com/icad.html">Fortran trunk of the evolutionary tree of languages</a> (C, C++, Java) to have developed these skills and get my work done.  But having those types of skills is kind of like having to develop the muscles of a world-class bodybuilder just to be able to walk down the street.  It&#8217;s wasteful.  I want a language that caters to me and not the other way around.</p>
<p>Oddly, I&#8217;m not doing Smalltalk anymore (as of the last month or so).  My employer is ditching our project and bringing in an ERP.  I suppose it makes sense, but I miss the power and flexibility of Smalltalk already.  I&#8217;m doing some Scheme work as a consulting gig, but it is, ironically, using a Scheme->C compiler, and so I&#8217;m on the edit-compile-run treadmill anyhow.</p>
<p>I find that my desire for modelessness reaches far beyond just programming.  I modelessness is desirable for many of life&#8217;s endeavors.  At some point I hope expound modelessness in text editors, religion, fashion, and maybe, if I can put the synapses together, music.</p>
]]></content:encoded>
			<wfw:commentRss>http://jase.dufair.org/2004/03/15/why-modelessness/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
