<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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/"
	>

<channel>
	<title>Jay McGavren's Journal</title>
	<link>http://jay.mcgavren.com/blog</link>
	<description>Ramblings on Ruby on Rails</description>
	<pubDate>Fri, 03 Feb 2012 06:06:46 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>Zip + RSync = Easy to Maintain, Easy to Download Collections</title>
		<link>http://jay.mcgavren.com/blog/archives/1489</link>
		<comments>http://jay.mcgavren.com/blog/archives/1489#comments</comments>
		<pubDate>Fri, 03 Feb 2012 05:13:00 +0000</pubDate>
		<dc:creator>jay</dc:creator>
		
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://jay.mcgavren.com/blog/archives/1489</guid>
		<description><![CDATA[Most people who&#8217;ve used a command line know about the existence of the &#8220;zip&#8221; utility.  It&#8217;s basically a scriptable version of the archive tools we all use in our file browsers.  Hopefully most people also know about RSync, which brings a directory structure into sync on two machines by creating, deleting, and updating [...]]]></description>
			<content:encoded><![CDATA[<p>Most people who&#8217;ve used a command line know about the existence of the &#8220;zip&#8221; utility.  It&#8217;s basically a scriptable version of the archive tools we all use in our file browsers.  Hopefully most people also know about <a href="http://everythinglinux.org/rsync/">RSync</a>, which brings a directory structure into sync on two machines by creating, deleting, and updating files as necessary.</p>
<p>What people may <em>not</em> know, however, is that RSync will transmit only the updated portions of a file if it already exists on the remote side.  That means you can easily maintain downloadable .zip archives, so your audience can retrieve whole collections of files at once.  (Say, of your <a href="/blog/archives/1488">favorite Creative Commons-licensed music</a>, which is the example we&#8217;ll use here.)</p>
<p>We start with a command line to add MP3s to a .zip file:</p>
<pre>
$ zip ~/Documents/media/cc_music.zip \
/Users/jay/Music/iTunes/iTunes\ Music/Ghost/ccMixter/Lullaby.mp3
</pre>
<p>The long music path is for convenience - that way I can just drag-and-drop files onto a terminal.  It&#8217;s a nice touch that the full folder structure is preserved (though I will likely want to strike the &#8220;Users/jay&#8221; directory at some point):</p>
<pre>
$ unzip -l ~/Documents/media/cc_music.zip
Archive:  /Users/jay/Documents/media/cc_music.zip
 Length     Date   Time    Name
 --------    ----   ----    ----
 3664924  06-26-11 00:58   Users/jay/Music/iTunes/iTunes
Music/Ghost/ccMixter/Lullaby.mp3
...
</pre>
<p>If we use &#8220;&#038;&#038;&#8221; to add on an rsync command, the .zip file will automatically be sent to the remote server if compression is successful:</p>
<pre>
$ zip ~/Documents/media/cc_music.zip
/Users/jay/Music/iTunes/iTunes\ Music/Ghost/ccMixter/Lullaby.mp3 &#038;&#038; \
rsync --verbose --compress ~/Documents/media/cc_music.zip \
jay.mcgavren.com:files/cc_music.zip
</pre>
<p>In the output, we can see the file being zipped, followed by the rsync transmission info:</p>
<pre>
 adding: Users/jay/Music/iTunes/iTunes
Music/Ghost/ccMixter/Lullaby.mp3 (deflated 3%)
cc_music.zip

sent 3556109 bytes  received 31 bytes  78156.92 bytes/sec
total size is 3554835  speedup is 1.00
</pre>
<p>Keeping all this as one command allows automatic updates of the remote file as new MP3s are added:</p>
<pre>
$ zip ~/Documents/media/cc_music.zip \
/Users/jay/Music/iTunes/iTunes\ Music/DoKashiteru/ccMixter/Our\
Slanted\ Voices\ \(ft.\ Colin\ Mutchler\).mp3 &#038;&#038; \
rsync --verbose --compress ~/Documents/media/cc_music.zip \
jay.mcgavren.com:files/cc_music.zip
 adding: Users/jay/Music/iTunes/iTunes Music/DoKashiteru/ccMixter/Our
Slanted Voices (ft. Colin Mutchler).mp3 (deflated 1%)
cc_music.zip

sent 5043684 bytes  received 11377 bytes  306367.33 bytes/sec
total size is 8595106  speedup is 1.70
</pre>
<p>Those transmission sizes represent only the new MP3 that&#8217;s been added, not the whole archive.  For example, if I add a small README.txt to the archive&#8230;</p>
<pre>
$ zip ~/Documents/media/cc_music.zip README.txt &#038;&#038; \
rsync --verbose --compress ~/Documents/media/cc_music.zip \
jay.mcgavren.com:files/cc_music.zip
 adding: README.txt (deflated 36%)
cc_music.zip

sent 1288 bytes  received 20521 bytes  3965.27 bytes/sec
total size is 11636110  speedup is 533.55
</pre>
<p>&#8230;note that only 1KB (of the now-11MB file) is actually transmitted.  Updates to files in the middle of the archive likewise cause the retransmission of only that file&#8217;s zipped content.</p>
<p>This can of course be converted to a shell script, but personally I think doing it all at the prompt lends itself to ad-hoc, on-the-fly alterations.  (I wouldn&#8217;t want a script sitting around for every collection I could think to post.)</p>
<p>And I can certainly think of a lot of things to share this way - Project Gutenberg books, Creative Commons wallpapers, your own photos, basically anything that you can freely redistribute.  Some care needs to be taken with variance in licenses (I had to add attribution ID3 tags to some of the MP3s, for example).  But generally, it should be possible to include the needed documentation in the archive alongside the content.  (I am not a lawyer, this is not legal advice, etc. etc.)</p>
<p>I view this as vastly preferable to clicking though dozens of <a href="http://archive.org">archive.org</a> pages to manually download individual files.  If you agree, I hope you&#8217;ll use this technique to start sharing your own collections!</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.mcgavren.com/blog/archives/1489/feed</wfw:commentRss>
		</item>
		<item>
		<title>A Creative Commons Mixtape</title>
		<link>http://jay.mcgavren.com/blog/archives/1488</link>
		<comments>http://jay.mcgavren.com/blog/archives/1488#comments</comments>
		<pubDate>Wed, 01 Feb 2012 06:53:07 +0000</pubDate>
		<dc:creator>jay</dc:creator>
		
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://jay.mcgavren.com/blog/archives/1488</guid>
		<description><![CDATA[Creative Commons (creativecommons.org) is a license you can apply to stuff you create that basically says &#8220;anyone can redistribute this as much as they want, they just have to give me credit&#8221;.  I figured that would enable people to conveniently and legally share huge zip-files of their favorite Creative Commons music, but that hasn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Creative Commons (<a href="http://creativecommons.org/">creativecommons.org</a>) is a license you can apply to stuff you create that basically says &#8220;anyone can redistribute this as much as they want, they just have to give me credit&#8221;.  I figured that would enable people to conveniently and legally share huge zip-files of their favorite Creative Commons music, but that hasn&#8217;t been the case so far.  So, here&#8217;s my attempt to fix that:</p>
<p><a href="http://jay.mcgavren.com/files/cc_licensed_music.zip">cc_licensed_music.zip</a></p>
<p>Just download and unzip; it&#8217;s already sorted into folders for you.  Drop the whole shebang on top of iTunes to import the tracks.  Share with whoever you like; it&#8217;s totally legal to do so.</p>
<p>I discovered <a href="/blog/archives/1489">a couple clever tricks with Linux utilities</a> that will let me easily update this file as I discover new CC music, so feel free to bookmark this URL.  And don&#8217;t worry, I&#8217;m being selective; I know there&#8217;s a lot of crap out there.  These are real gems, though.  If you agree, most of the artists have other music for sale; visit the URLs in each MP3&#8217;s comment field to find it.</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.mcgavren.com/blog/archives/1488/feed</wfw:commentRss>
		</item>
		<item>
		<title>Calling to remind and remind and remind</title>
		<link>http://jay.mcgavren.com/blog/archives/1477</link>
		<comments>http://jay.mcgavren.com/blog/archives/1477#comments</comments>
		<pubDate>Wed, 17 Aug 2011 05:08:33 +0000</pubDate>
		<dc:creator>jay</dc:creator>
		
		<category><![CDATA[family]]></category>

		<guid isPermaLink="false">http://jay.mcgavren.com/blog/archives/1477</guid>
		<description><![CDATA[
Received: Tue, 16 Aug 2011 17:35:00 -0700 (PDT)
Subject: New voicemail from (602) 999-9999 at 5:35 PM
From: Google Voice 
To: me@example.com
Transcript: The [doctor&#8217;s office], calling to remind Jeremy of the an appointment on Tuesday, August 23rd at 11. Hey and in the pediatric office. Please listen to the following options to confirm your appointment, please press [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
Received: Tue, 16 Aug 2011 17:35:00 -0700 (PDT)<br />
Subject: New voicemail from (602) 999-9999 at 5:35 PM<br />
From: Google Voice <voice-noreply@google.com><br />
To: me@example.com</p>
<p>Transcript: The [doctor&#8217;s office], calling to remind Jeremy of the an appointment on Tuesday, August 23rd at 11. Hey and in the pediatric office. Please listen to the following options to confirm your appointment, please press 1 to confirm your appointment.  Please press 2, to repeat this message. Please press 3, to cancel or reschedule your appointment. Please press forward to hear. Directions to our office. Hello. This is [doctor&#8217;s office], calling to remind Jeremy of the an appointment on Tuesday, August 23rd at 11. Hey and in the pediatric office. Please listen to the following options to confirm your appointment, please press 1 to confirm your appointment.  Please press 2, to repeat this message, please press 3, to cancel or reschedule your appointment. Please press forward to hear. Directions to our office. Hello. This is [doctor&#8217;s office], calling to remind Jeremy of the an appointment on Tuesday, August 23rd at 11. Hey and in the pediatric office. Please listen to the following options to confirm your appointment, please press 1 to confirm your appointment.  Please press 2, to repeat this message, please press 3, to cancel or reschedule your appointment. Please press forward to hear. Directions to our office.</p>
<p>Play message:<br />
https://www.google.com/voice/fm/9999999999999999/loremipsumdolorsitametconsecteturadipisicingelitseddoeiusmod
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://jay.mcgavren.com/blog/archives/1477/feed</wfw:commentRss>
		</item>
		<item>
		<title>Media manifesto&#8230;</title>
		<link>http://jay.mcgavren.com/blog/archives/1476</link>
		<comments>http://jay.mcgavren.com/blog/archives/1476#comments</comments>
		<pubDate>Sat, 06 Aug 2011 07:38:20 +0000</pubDate>
		<dc:creator>jay</dc:creator>
		
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://jay.mcgavren.com/blog/archives/1476</guid>
		<description><![CDATA[A friend asked me by e-mail what I was passionate about.  When I had completed my long-winded answer, I realized that while I think endlessly about my life goal, I had never really written it down before.  So, I&#8217;ve included it here.

My contribution to this whole mess is going to be tools that [...]]]></description>
			<content:encoded><![CDATA[<p>A friend asked me by e-mail what I was passionate about.  When I had completed my long-winded answer, I realized that while I think endlessly about my life goal, I had never really written it down before.  So, I&#8217;ve included it here.</p>
<blockquote><p>
My contribution to this whole mess is going to be tools that enable creative expression.  So far it&#8217;s been the direct creation of art - generative art and game libraries.  But the world is <em>most</em> lacking in tools that allow people to share what they&#8217;ve made (and make a living doing it).  Sure, there are publication channels like Amazon and the iTunes Store, but you usually have to design what you&#8217;re making to fit the channel.</p>
<p>I want people to be able to write a book or a song, mark it as available for sale, and that&#8217;s all they have to do.  Software should take care of publishing it to a website AND the Android Marketplace AND future channels that haven&#8217;t been invented yet.  It should take care of promoting your work directly to people who are interested, and it should gather payments for you from all these places and plop them into your bank account.  It should also give you feedback on who likes your work and why.  If you want to publish your work for free, or allow others to remix it, the same tools should allow you to do that.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://jay.mcgavren.com/blog/archives/1476/feed</wfw:commentRss>
		</item>
		<item>
		<title>Apple II Rescue!</title>
		<link>http://jay.mcgavren.com/blog/archives/1475</link>
		<comments>http://jay.mcgavren.com/blog/archives/1475#comments</comments>
		<pubDate>Thu, 21 Jul 2011 07:09:06 +0000</pubDate>
		<dc:creator>jay</dc:creator>
		
		<category><![CDATA[development]]></category>

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

		<guid isPermaLink="false">http://jay.mcgavren.com/blog/archives/1475</guid>
		<description><![CDATA[Huge thanks to Austin and Zach at Heatsync Labs for their massive efforts to rescue my old Applesoft Basic programs.  Don&#8217;t have the source yet (it&#8217;s on a IIgs 3.5&#8243; floppy that I also can&#8217;t read, but it&#8217;s an improvement), but I do have some runtime footage!

]]></description>
			<content:encoded><![CDATA[<p>Huge thanks to Austin and Zach at Heatsync Labs for their massive efforts to rescue my old Applesoft Basic programs.  Don&#8217;t have the source yet (it&#8217;s on a IIgs 3.5&#8243; floppy that I <b>also</b> can&#8217;t read, but it&#8217;s an improvement), but I do have some runtime footage!</p>
<p><iframe width="425" height="349" src="http://www.youtube.com/embed/p4IoyFgAmqI?hl=en&#038;fs=1" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://jay.mcgavren.com/blog/archives/1475/feed</wfw:commentRss>
		</item>
		<item>
		<title>Code Koans Pecha Kucha</title>
		<link>http://jay.mcgavren.com/blog/archives/1473</link>
		<comments>http://jay.mcgavren.com/blog/archives/1473#comments</comments>
		<pubDate>Sun, 17 Jul 2011 07:58:12 +0000</pubDate>
		<dc:creator>jay</dc:creator>
		
		<category><![CDATA[development]]></category>

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

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

		<guid isPermaLink="false">http://jay.mcgavren.com/blog/archives/1473</guid>
		<description><![CDATA[The Geek &#8216;n&#8217; Eat group at work had a Pecha Kucha day, and I prepped a quick presentation on learning Ruby/Clojure/Scala/Javascript through koans.  (It&#8217;s also secretly about flow and how to achieve it in your coding.)  I had recently learned how to record audio and export video from Keynote, and applied my newfound [...]]]></description>
			<content:encoded><![CDATA[<p>The Geek &#8216;n&#8217; Eat group at work had a Pecha Kucha day, and I prepped a quick presentation on learning Ruby/Clojure/Scala/Javascript through koans.  (It&#8217;s also secretly about <a href="http://en.wikipedia.org/wiki/Flow_(psychology)">flow</a> and how to achieve it in your coding.)  I had recently learned how to record audio and export video from Keynote, and applied my newfound knowledge to do a Youtube-ready version:</p>
<p><iframe width="425" height="349" src="http://www.youtube.com/embed/mG6NsCIRKAk" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://jay.mcgavren.com/blog/archives/1473/feed</wfw:commentRss>
		</item>
		<item>
		<title>mountain.rb wrapup book&#8230;</title>
		<link>http://jay.mcgavren.com/blog/archives/1471</link>
		<comments>http://jay.mcgavren.com/blog/archives/1471#comments</comments>
		<pubDate>Sat, 18 Jun 2011 23:39:36 +0000</pubDate>
		<dc:creator>jay</dc:creator>
		
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://jay.mcgavren.com/blog/archives/1471</guid>
		<description><![CDATA[The mountain.rb (henceforth to be known as Rocky Mountain Ruby) Chronicles are finally out.  Pretty darn honored to occupy a page opposite Jim Weirich.  (Many other illustrious names in there too.)  Great wrapup of a great event.
]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://rockymtnruby.com/mountain.rb.chronicles.pdf">mountain.rb (henceforth to be known as Rocky Mountain Ruby) Chronicles</a> are finally out.  Pretty darn honored to occupy a page opposite Jim Weirich.  (Many other illustrious names in there too.)  Great wrapup of a great event.</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.mcgavren.com/blog/archives/1471/feed</wfw:commentRss>
		</item>
		<item>
		<title></title>
		<link>http://jay.mcgavren.com/blog/archives/1469</link>
		<comments>http://jay.mcgavren.com/blog/archives/1469#comments</comments>
		<pubDate>Fri, 10 Jun 2011 06:45:30 +0000</pubDate>
		<dc:creator>jay</dc:creator>
		
		<category><![CDATA[development]]></category>

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

		<guid isPermaLink="false">http://jay.mcgavren.com/blog/archives/1469</guid>
		<description><![CDATA[Hmmm&#8230; How about a puzzle game where pieces are &#8220;if&#8221; statements, and the branch evaluates as soon as they&#8217;re &#8220;true&#8221;? That makes other statements true, causing them to evaluate, which makes other statements true&#8230;  forming a combo - er - cascade.
]]></description>
			<content:encoded><![CDATA[<p>Hmmm&#8230; How about a puzzle game where pieces are &#8220;if&#8221; statements, and the branch evaluates as soon as they&#8217;re &#8220;true&#8221;? That makes other statements true, causing them to evaluate, which makes other statements true&#8230;  forming a combo - er - cascade.</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.mcgavren.com/blog/archives/1469/feed</wfw:commentRss>
		</item>
		<item>
		<title>CC-licensed Ruboto presentation&#8230;</title>
		<link>http://jay.mcgavren.com/blog/archives/1468</link>
		<comments>http://jay.mcgavren.com/blog/archives/1468#comments</comments>
		<pubDate>Tue, 03 May 2011 07:29:06 +0000</pubDate>
		<dc:creator>jay</dc:creator>
		
		<category><![CDATA[android]]></category>

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

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

		<guid isPermaLink="false">http://jay.mcgavren.com/blog/archives/1468</guid>
		<description><![CDATA[Here&#8217;s the latest version of my Ruboto presentation&#8230;  An earlier version of these slides was used by Charlie at JRubyConf 2010, and I updated them for my talk at Philly Emerging Tech.
Pre-rendered HTML
Source (for Showoff presentation software)
These are Creative Commons-licensed, so you&#8217;re encouraged to steal these slides for use at your favorite technology user [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s the latest version of my Ruboto presentation&#8230;  An earlier version of these slides was used by Charlie at JRubyConf 2010, and I updated them for my talk at Philly Emerging Tech.</p>
<p><a href="http://jay.mcgavren.com/files/presentations/ruboto">Pre-rendered HTML</a></p>
<p><a href="https://github.com/jaymcgavren/presentations/tree/master/ruboto">Source (for Showoff presentation software)</a></p>
<p>These are Creative Commons-licensed, so you&#8217;re encouraged to steal these slides for use at your favorite technology user groups!</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.mcgavren.com/blog/archives/1468/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Reference Games Manifesto</title>
		<link>http://jay.mcgavren.com/blog/archives/1464</link>
		<comments>http://jay.mcgavren.com/blog/archives/1464#comments</comments>
		<pubDate>Fri, 21 Jan 2011 04:33:34 +0000</pubDate>
		<dc:creator>jay</dc:creator>
		
		<category><![CDATA[development]]></category>

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

		<guid isPermaLink="false">http://jay.mcgavren.com/blog/archives/1464</guid>
		<description><![CDATA[A couple nights ago, I was playing Score Rush, a twin-stick shooter on XBox, and thinking what an exemplary game it was.  Simple, but with highly polished gameplay.  Something that other designers and developers could stand to learn from.
That started me wishing there was an open-source game in each genre that was playable [...]]]></description>
			<content:encoded><![CDATA[<p>A couple nights ago, I was playing Score Rush, a twin-stick shooter on XBox, and thinking what an exemplary game it was.  Simple, but with highly polished gameplay.  Something that other designers and developers could stand to learn from.</p>
<p>That started me wishing there was an open-source game in each genre that was playable and fun, but was first and foremost a reference for developers to learn techniques from.  Web framework standards have reference implementations, why can&#8217;t games?  All the needed infrastructure is out there - freely available game libraries in a variety of languages, GitHub and other source code sites for forking and improving on projects, and a great many motivated (but largely disorganized) open-source game developers.  What if we joined forces to make something bigger than any one game?</p>
<p>And so resulted this initial draft of The Reference Games manifesto:</p>
<ul>
<li>We seek to meet the needs of both casual and experienced gamers where possible.
<ul>
<li>We believe that affordances for casual gamers should never be obstructive to experienced gamers.</li>
<li>In the rare event that needs are mutually exclusive, we strive to provide for both markets through multiple configurations of the same game.</li>
</ul>
</li>
<li>We prove our assertions through appropriate testing.
<ul>
<li>Example: A/B testing to prove that a particular control scheme reduces player error.</li>
</ul>
</li>
<li>Although we support innovation, we are a platform for sharing proven best practices first.
<ul>
<li>The reference game codebases can be forked and customized, but only proven techniques usable by a wide audience should be incorporated into core reference games.</li>
</ul>
</li>
<li>We value gameplay over graphics.
<ul>
<li>The majority of maintenance and development time should be spent on game mechanics.</li>
<li>We support users with low-power or low-cost hardware.</li>
<li>We allow graphical improvements through abstracted rendering interfaces.</li>
</ul>
</li>
<li>We are open.
<ul>
<li>We do not rely on proprietary frameworks or formats that are not freely available or could become unavailable in the future.</li>
</ul>
</li>
<li>We work with the tools most commonly used by the development community.
<ul>
<li>While respecting the openness principle, we choose the tools and languages most widely used by game developers.</li>
</ul>
</li>
</ul>
<p>I don&#8217;t know if I&#8217;ll have an opportunity to go anywhere with this, but it&#8217;s something I&#8217;d love to see.  Any enterprising developers out there that want to take this and run with it?</p>
]]></content:encoded>
			<wfw:commentRss>http://jay.mcgavren.com/blog/archives/1464/feed</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.220 seconds -->

