<?xml version="1.0" encoding="UTF-8"?>
<posts type="array">
  <post>
    <body>&lt;p&gt;Today I&amp;#8217;ve been captivated by an article published in the New Yorker by food writer and Chinese cuisine specialist Fuschia Dunlop. &lt;a href="http://www.newyorker.com/reporting/2008/11/24/081124fa_fact_dunlop?currentPage=all"&gt;Letters from China: Garden of Contentment&lt;/a&gt; is the story of Dragon Well Manor, a restaurant in Hangzhou that strives to keep alive ancient cuisinary techniques of the region, sourcing ingredients not just from local farms and collectors, but from expeditions through the forests and mountains of the region as well.&lt;/p&gt;


	&lt;p&gt;Just as captivating are the descriptions of the restaurant, which was originally a traditional landscaped garden in one of China&amp;#8217;s most spectacular natural regions.&lt;/p&gt;</body>
    <created-at type="datetime">2008-11-28T17:01:58+00:00</created-at>
    <id type="integer">52</id>
    <permalink>garden-of-contentment</permalink>
    <title>Garden of Contentment</title>
    <updated-at type="datetime">2008-11-29T01:02:15+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;Earlier today I &lt;a href="http://jamesgolick.com/2008/10/27/off-topic-caf&#233;-myriade"&gt;came across mention&lt;/a&gt; of a new espresso place in Downtown Montreal called Cafe Myriade. Oddly enough, it was on another developer&amp;#8217;s blog, &lt;a href="http://jamesgolick.com/"&gt;James Golick,&lt;/a&gt; who&amp;#8217;s even more of a coffee nerd than me, it seems.&lt;/p&gt;


	&lt;p&gt;The staff at Myriade is genuinely friendly and excited about their new venture. The espresso I ordered &amp;#8211; a single shot made with coffee from Vancouver&amp;#8217;s &lt;a href="http://www.49thparallelroasters.com/"&gt;49th Parallel&lt;/a&gt; &amp;#8211; was among the best I&amp;#8217;ve had in recent memory, incredibly velvety, with as little bitterness as I&amp;#8217;ve had with these beans. Remarkably even and enjoyable, especially if you like woody/chocolatey espresso.&lt;/p&gt;


	&lt;p&gt;Myriade also sells &lt;a href="http://somachocolate.com/"&gt;&lt;span class="caps"&gt;SOMA&lt;/span&gt;&lt;/a&gt; chocolate, imported from the Toronto chocolatier, one of only two in Canada that make their own chocolate, apparently. I really like that this shop is supporting Canadian providers, and at really reasonable prices ($2 for a single shot of espresso, for instance). Apparently the lattes and melted chocolate cappuccinos are Myriade&#8217;s specialty.&lt;/p&gt;


	&lt;p&gt;So check it out: &lt;a href="http://cafemyriade.com"&gt;Cafe Myriade&lt;/a&gt; located at 1432 Mackay, Downtown Montreal, between Ste-Catherine and DeMaisonneueve.&lt;/p&gt;</body>
    <created-at type="datetime">2008-11-06T00:16:53+00:00</created-at>
    <id type="integer">51</id>
    <permalink>cafe-myriade</permalink>
    <title>Cafe Myriade</title>
    <updated-at type="datetime">2008-11-17T18:25:09+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;So I&amp;#8217;ve discovered the wonderfully easy-to-use &lt;a href="http://www.thoughtbot.com/projects/paperclip"&gt;Paperclip&lt;/a&gt; attachment plugin for Ruby on Rails, written by Jon Yurek at &lt;a href="http://www.thoughtbot.com"&gt;Thoughbot&lt;/a&gt; .&lt;/p&gt;


	&lt;p&gt;I like that attachments are treated like any other class instance attribute (@post.image), instead of having to be associated with a post from a separate assets resource entirely. It uses Imagemagick, it has a small footprint, many of the features that make attachment_fu great, and others that it lacks.&lt;/p&gt;


	&lt;p&gt;When I started playing around with Paperclip, I noticed that there are some RESTful actions missing in the documentation: destroy, edit, update, and so on. That same documention intimates that you should/can have an upload form on your edit page, so I persevered &#8211; it would really be ideal if users could simply upload new images and documents, overwriting existing ones.&lt;/p&gt;


	&lt;p&gt;When I got to this point, I did what anyone would do: wrote out the actions based on the generated scaffolding patterns, hoping it would &amp;#8216;just work&amp;#8217;. I had a post model with attachments for an image and also a sample text. Not only do I want users to be able to swap these out, but to update other columns in the class instance without losing the existing files attached to the record.&lt;/p&gt;


	&lt;p&gt;When I went ahead a tested the configuration I&amp;#8217;d cobbled together, it wasn&amp;#8217;t working correctly. It didn&amp;#8217;t update, it &lt;em&gt;created&lt;/em&gt; a new record, with the existing values, which was&amp;#8230;not ideal.&lt;/p&gt;


	&lt;p&gt;Evaluating the form_for tag, I noticed that the tag I&amp;#8217;d copied in from the RiDocs was using was a little unusual:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;&amp;lt;% form_for :post, @post, :url =&amp;gt; posts_path, :html =&amp;gt; { :multipart =&amp;gt; true } do |f| %&amp;gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The tutorials online only require the symbol for the class and the &lt;code&gt;multipart =&amp;gt; true&lt;/code&gt; bits. Not only that, but knowing how RESTful conventions work, that &lt;code&gt;:url =&amp;gt; posts_path&lt;/code&gt; is an obvious problem: when you&amp;#8217;re working with a class instance, your paths should be singular.&lt;/p&gt;


	&lt;p&gt;Changing it to singular (&lt;code&gt;:url =&amp;gt; post_path&lt;/code&gt;) didn&amp;#8217;t work &#8211; suddenly I was getting an error stating that the ID of the object wasn&amp;#8217;t an action! Well, obviously. So I needed to explicitly state the action:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;&amp;lt;% form_for :post, @post, :url =&amp;gt; post_path, :action =&amp;gt; 'update', :html =&amp;gt; { :multipart =&amp;gt; true} do |f| %&amp;gt;  &lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;But this didn&amp;#8217;t work either! The update parameter was either being overlooked or wasn&amp;#8217;t providing the correct parameters in the expected format. Finally, researching the available parameters for the form_for tag, I came up with this:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;&amp;lt;% form_for :post, @post, :url =&amp;gt; post_path, :html =&amp;gt; { :multipart =&amp;gt; true, :method =&amp;gt; :put } do |f| %&amp;gt;  &lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Which explicitly states the http method used in the transaction. This works beautifully! File attachments remain the same unless you&amp;#8217;ve selected new ones,  it works for multiple simultaneous attachments on a model&amp;#8230;it&amp;#8217;s gorgeous. I hope this helps, I couldn&amp;#8217;t find much info on edit/update features for Paperclip.&lt;/p&gt;</body>
    <created-at type="datetime">2008-08-29T00:37:23+00:00</created-at>
    <id type="integer">50</id>
    <permalink>edit-update-paperclip-plugin-attachments</permalink>
    <title>Edit/Update Paperclip Plugin Attachments</title>
    <updated-at type="datetime">2008-08-29T07:49:12+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0089/oly4.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.boston.com/bigpicture/"&gt;The Big Picture&lt;/a&gt; has posted yet another &lt;a href="http://www.boston.com/bigpicture/2008/08/2008_olympics_opening_ceremony.html"&gt;fantastic photo essay&lt;/a&gt; on the opening ceremonies of the Beijing 2008 Olympic Games.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;d really like to see some video of Cai Guo-Qiang&#8217;s fireworks and gunpowder show (of which I&amp;#8217;m assuming the above photo is a highlight).&lt;/p&gt;</body>
    <created-at type="datetime">2008-08-08T13:30:43+00:00</created-at>
    <id type="integer">49</id>
    <permalink>beijing-2008-opening-ceremony</permalink>
    <title>Beijing 2008 Opening Ceremony</title>
    <updated-at type="datetime">2008-08-08T20:31:19+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0087/Picture_1.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Longtime Dust and Mold client Andrea Vanderkooij and her husband Alan Groombridge welcomed Kees Alfred Vanderkooij-Groombridge into their family on Sunday, June 30. Kees Alfred is a large, healthy and happy baby (9.5 lbs, 22.5 inches), possibly with an early taste for butter-cream icing, as a result of his mother&amp;#8217;s recent &lt;em&gt;Babycakes&lt;/em&gt; project and performance, which you can check out at &lt;a href="http://andreavanderkooij.com/works/per_bab.php"&gt;the artist&#8217;s website&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Congratulations Andrea and Alan!&lt;/p&gt;</body>
    <created-at type="datetime">2008-07-05T13:02:10+00:00</created-at>
    <id type="integer">48</id>
    <permalink>welcome-kees-alfred</permalink>
    <title>Welcome Kees Alfred</title>
    <updated-at type="datetime">2008-07-06T00:40:14+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;One thing I very much like about Textpattern is the ability to use excerpts for list views of articles giving you the freedom to customize the output, instead of (as is the case with most Rails blogs) a set truncated amount of text form the post.body.&lt;/p&gt;


	&lt;p&gt;When making a blog/posts resource for a client site recently, I noticed that if an article was posted with a narrow (i.e. portrait-oriented) image, then the the view on the index page&#8212;which uses the first 60 words from the post.body&#8212; creates an unsightly gap in spacing, with the image floating to the left, and the text only running less than half the way down the length.&lt;/p&gt;


	&lt;p&gt;I decided it might make sense to give the poster the option to customize the output on the index page, much like textpattern&#8217;s excerpt feature. This way, on the rare occasion that a spacing issue is caused by the automated body.post truncate behaviour, it can be overridden and fixed (in the scenario I described, one would simply add more text to the excerpt, so that it ran the full length of the image, and wrapped below).&lt;/p&gt;


	&lt;p&gt;Obviously the optimal solution would be to have an excerpt field, which is output on the index view instead of the truncated post.body text. If left empty, the app would output the truncated post.body text by default. No problem, right? A simple conditional statement, such as:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
&amp;lt;% if post.excerpt.nil? %&amp;gt;
&amp;lt;%= truncate_words(post.body, 60) %&amp;gt;
&amp;lt;% else %&amp;gt;
&amp;lt;% post.excerpt %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;But there are 2 problems here: first,  this seems really kind of inelegant, not something one has to suffer with Ruby usually&#8212;but more importantly, it doesn&amp;#8217;t work quite as expected.&lt;/p&gt;


	&lt;p&gt;The issue here only pops up if you write in the excerpt field, update, change your mind and delete what you&amp;#8217;ve written, and then re-save. Once you&amp;#8217;ve added anything to a field, it&amp;#8217;s no longer nil, even if you delete the data in that column.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m going to do some more research about Ruby&amp;#8217;s nil object, and update this post in the near future to discuss the specifics of this behaviour (I remember if cropping up in the Pickaxe Book, at some point) but for now, I&amp;#8217;d simply like to give you the solution, in a handsome one-liner:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
&amp;lt;%= post.excerpt.nil? || post.excerpt == "" ? truncate_words(post.body, 60) : post.excerpt  %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;This is basically just saying if the excerpt column is nil (i.e. never touched by a put action), or if it simply isn&amp;#8217;t empty, then use the regular truncated post.body output, otherwise, use the excerpt.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m sure there&#8217;s a more sensible solution, as Ruby always seems to have even more elegant solutions up its sleeve. Get in touch if you have any suggestions&#8212;I make no pretensions of being much of a Rubyist, so any help you might have is very much appreciated (note: comments coming to this blog soon.)&lt;/p&gt;</body>
    <created-at type="datetime">2008-05-10T16:45:26+00:00</created-at>
    <id type="integer">47</id>
    <permalink>add-a-one-line-excerpt-conditional-to-your-blog-posts-resource</permalink>
    <title>Add a one-line conditional excerpt to your blog/posts resource</title>
    <updated-at type="datetime">2008-05-11T00:03:00+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;I&amp;#8217;m gradually kludging &lt;a href="http://weblog.techno-weenie.net/"&gt;Rick Olsen&amp;#8217;s&lt;/a&gt; fantastic &lt;a href="http://svn.techno-weenie.net/projects/plugins/attachment_fu/"&gt;attachment_fu&lt;/a&gt;  plugin into serving all of my needs in my client sites. Which is not to say that I&amp;#8217;ve forked it and am making a meaningful contribution&#8212;I&amp;#8217;m simply talking about getting my standard use-case right.&lt;/p&gt;


	&lt;p&gt;One such use-case is to save information to the model along with the attachment itself, like a caption or name saved alongside an image. This is no problem, you just add the relevant validations alongside attachment_fu&#8217;s regular validates_as_attachment. But things get a bit sticky for your functional tests, especially on edit/update.&lt;/p&gt;


	&lt;p&gt;Now, the thing is, I haven&amp;#8217;t quite figured out how to replace an uploaded file on edit/update. This kind of function kind of runs against what attachment_fu is meant to do, that is&#8212;if you want to change the attached file, then your main resource should be separated from the attachment, i.e. a project is its own resource, and you can associate an uploaded image with that project in any number of ways.&lt;/p&gt;


	&lt;p&gt;But, as I mentioned, there are scenarios where you&#8217;ll want to edit/update your attachment model object&#8212;the example of an image caption holds, although in the following example, I&amp;#8217;m using a videos resource (the values I&amp;#8217;m storing along with the video, in this case, are &amp;#8216;title&amp;#8217;, &amp;#8216;date&amp;#8217;, &amp;#8216;duration&amp;#8217;, etc.).&lt;/p&gt;


	&lt;p&gt;This is how to make sure things are set up correctly, and that your functional tests don&#8217;t throw validation errors.&lt;/p&gt;


	&lt;p&gt;First, if you&amp;#8217;ve read Mike Clark&#8217;s great primer on working with &lt;a href="http://clarkware.com/cgi/blosxom/2007/02/24#FileUploadFu"&gt;attachment_fu,&lt;/a&gt; then you&amp;#8217;re probably aware that your upload form needs to look something like this:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;&amp;lt;h3&amp;gt;New video (&amp;lt;%= link_to 'back', videos_path %&amp;gt;)&amp;lt;/h3&amp;gt;
&amp;lt;%= error_messages_for :video %&amp;gt;  
&amp;lt;% form_for(:video, :url =&amp;gt; videos_path, :html =&amp;gt; {:multipart =&amp;gt; true}) do |f| -%&amp;gt;   
&amp;lt;p id ="asset_uploader"&amp;gt;
    &amp;lt;%= f.label "uploaded_data", "Browse for video and select:" %&amp;gt;&amp;lt;br /&amp;gt;
    &amp;lt;%= f.file_field :uploaded_data %&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;%= render :partial =&amp;gt; "form", :locals =&amp;gt; {:f =&amp;gt; f} %&amp;gt;                                          
    &amp;lt;p id="submit"&amp;gt;
        &amp;lt;%= submit_tag "Create", :class =&amp;gt; "submit" %&amp;gt; or go &amp;lt;%= link_to 'back', videos_path %&amp;gt;
        &amp;lt;img src="/graphics/ajax-loader.gif" alt="ajax-loader.gif" id="progress" style="display:none;" /&amp;gt;           
    &amp;lt;/p&amp;gt;                                                                                                  
&amp;lt;% end -%&amp;gt; &lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Note that I&amp;#8217;ve left the uploaded_data fields out of the partial that contains all my other fields (for captions, etc.) Note also that my form_for tag has the special :html =&amp;gt; :multipart attribute, and other divergences from the standard form_for that the rails scaffolding produces.&lt;/p&gt;


	&lt;p&gt;If you were to use this as your edit.html.erb, you&amp;#8217;d have all kinds of problem&#8212;the test would choke on the uploaded_data and multipart bits. so this is what our edit.html.erb looks like:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
&amp;lt;h3&amp;gt;Editing &#8216;&amp;lt;%= @video.title.capitalize %&amp;gt;&#8217; (&amp;lt;%= link_to 'back', videos_path %&amp;gt;)&amp;lt;/h3&amp;gt;

&amp;lt;%= error_messages_for :video %&amp;gt;

&amp;lt;% form_for(@video) do |f| %&amp;gt;
&amp;lt;%= render :partial =&amp;gt; "form", :locals =&amp;gt; {:f =&amp;gt; f} %&amp;gt;                                          
    &amp;lt;p class="submit"&amp;gt;
        &amp;lt;%= submit_tag "Update", :class =&amp;gt; "submit" %&amp;gt; or go &amp;lt;%= link_to 'back', videos_path %&amp;gt; 
    &amp;lt;/p&amp;gt;

&amp;lt;% end -%&amp;gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;See, it&amp;#8217;s just a normal scaffolded upload form. Keeping our uploaded_data fields out of the fields partial allows us to keep the edit view clear of any uploaded_data hiccups in the functional test.&lt;/p&gt;


	&lt;p&gt;But we&#8217;re not done! While this will work, you&#8217;re still going to get that annoying, vague failure that I&amp;#8217;ve come to dread (associated with videos_update_test):&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;response to be a &amp;lt;:redirect&amp;gt;, but was &amp;lt;200&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Grrr. This is annoying because it basically means that your app is returning the correct data to the browser, but it&amp;#8217;s not returning the expected behaviour, which is a redirect. So it&amp;#8217;s like saying &amp;#8220;your update works&amp;#8230;sort of&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;After combing a lot of rails &lt;span class="caps"&gt;IRC&lt;/span&gt; chat libraries, I finally traced this error, in this kind of scenario, to a validation issue. Remember, this kind of error can take place almost under any circumstance, so if you&amp;#8217;ve found this article by Googling this error, my fix might not be for you. So anyway, this is where your test is failing:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;validates_as_attachment&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Ha ha! Rick&amp;#8217;s handy method turns out to have issues when you attempt to upload without any values for :size or :content_type. Duh. Fortunately this error doesn&#8217;t affect real-world performance of your app, and so then all you have to do is add :size and :content-type values to your functional update test, like so:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
  def test_should_update_video  
    login_as :quentin
    put :update, :id =&amp;gt; 'video-one', :video =&amp;gt; { :content_type =&amp;gt; 'quicktime/mov', :size =&amp;gt; '40000000' }
    assert_redirected_to video_path(assigns(:video))
  end               
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;So there you go. Many thanks to Rick for his superb work, and good luck all!&lt;/p&gt;</body>
    <created-at type="datetime">2008-05-09T17:54:01+00:00</created-at>
    <id type="integer">45</id>
    <permalink>passing-functional-test-validations-for-attachment_fu-models-on-update</permalink>
    <title>Passing functional test validations for attachment_fu models on update</title>
    <updated-at type="datetime">2008-05-10T01:01:17+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0083/Picture_22.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Yesterday, on his birthday, &lt;a href="http://jquery.com"&gt;jQuery&lt;/a&gt; inventor/developer &lt;a href="http://ejohn.org/about/"&gt;John Resig&lt;/a&gt; finally announced the successfully porting to javascript of the &lt;a href="http://www.processing.org/"&gt;Processing&lt;/a&gt; open-source language and &lt;span class="caps"&gt;IDE&lt;/span&gt;. Processing was developed for object-oriented, generative and algorithm-based graphical animation, and it was created through &lt;span class="caps"&gt;MIT&lt;/span&gt; by Ben Fry and Casey Reas. I myself looked at Processing back in 2003 (or Proce55ing, as it was then called) for my &lt;span class="caps"&gt;MFA&lt;/span&gt; thesis.&lt;/p&gt;


	&lt;p&gt;This port is just a huge, mind-boggling win. Previously, Processing could only run in Java, making it a fun and usable tool in a restricted environment. Porting it to javascript opens up a host of possibilities for use on the web and elsewhere, and it very likely means that Processing can now go &amp;#8216;mainstream&amp;#8217;, seeing much wider usage than before.&lt;/p&gt;


	&lt;p&gt;How was this done? i won&#8217;t go into details, but Processing.js is about 5 thousand lines of code, and makes use of the &lt;span class="caps"&gt;DOM&lt;/span&gt; &amp;#8216;canvas&amp;#8217; element, which doesn&amp;#8217;t really have effectively widespread adoption in browsers&#8212;in fact, most of the examples on Resig&amp;#8217;s website require the latest Firefox or WebKit nightlies, and will overload your &lt;span class="caps"&gt;CPU&lt;/span&gt;. But it works! Rich visual animations running in javascript! Your &lt;strong&gt;mobile phone&lt;/strong&gt; runs javascript (depending on your phone, obvs).&lt;/p&gt;


	&lt;p&gt;This is being touted as javascript&#8217;s big chance to compete with Flash, but I think that&amp;#8217;s the wrong way to look at it. Javascript is already incredibly powerful and useful, and has never needed to compete with Flash&#8212;but the range and depth of what it can do just exploded.&lt;/p&gt;


	&lt;p&gt;See Resig&#8217;s &lt;a href="http://ejohn.org/blog/processingjs/"&gt;complete rundown&lt;/a&gt; of the Processing.js project for more details, examples, and to download the js file.&lt;/p&gt;</body>
    <created-at type="datetime">2008-05-09T13:24:58+00:00</created-at>
    <id type="integer">44</id>
    <permalink>processing-js</permalink>
    <title>Processing.js</title>
    <updated-at type="datetime">2008-05-09T20:29:00+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0081/2470488860_9bcdbb864f.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Gruber recently posted a &lt;a href="http://www.flickr.com/photos/gruber/sets/72157604911850885/"&gt;remarkable photo-set&lt;/a&gt; to his flickr account. These are photos shot on a family trip to the &lt;a href="http://www2.fi.edu/"&gt;Franklin Institute&lt;/a&gt; to see the travelling &lt;a href="http://www2.fi.edu/exhibits/traveling/starwars/"&gt;Star Wars exhibit,&lt;/a&gt; and it&amp;#8217;s really remarkable how Star Wars-y these props and costumes look, how they communicate the textures and atmosphere of the films.&lt;/p&gt;


	&lt;p&gt;I know Gruber is shooting with (possibly?) a Ricoh &lt;span class="caps"&gt;GRD&lt;/span&gt; [&lt;em&gt;edit: actually a Canon &lt;span class="caps"&gt;EOS&lt;/span&gt; Digital Rebel XT&lt;/em&gt;], and the lighting here is dramatic, but some of these shots really look like original production stills. I attribute this mostly to the timeless accomplishment of the prop-master/costume designers&#8212;it&amp;#8217;s impressive that so much of the aura of the franchise is carried in these objects&#8212;but one must also credit Gruber&#8217;s deep understanding of his subject matter.&lt;/p&gt;</body>
    <created-at type="datetime">2008-05-06T06:42:40+00:00</created-at>
    <id type="integer">43</id>
    <permalink>star-wars-where-science-meets-imagination</permalink>
    <title>Stars Wars: Where Science Meets Imagination</title>
    <updated-at type="datetime">2008-05-06T13:46:43+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0077/Photo-25.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;span style="font-size: 0.7em; width: 400px;"&gt;&lt;i&gt;Some days I have two lazy eyes&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;


	&lt;p&gt;This is my new haircut, April 29, 2008. Possibly the finest haircut I&amp;#8217;ve yet received, I am recording it here for posterity so I can whip out my iPhone/holographic telepathy tablet/whatever when I sit down for future haircuts, and give a quick demonstration of the ideal that should be strived for.&lt;/p&gt;


	&lt;p&gt;This cut comes seven weeks after what was previously my best-yet haircut, also by Kenzo of Kenzo Hair, on Ave. Duluth, in Montreal, Canada. Kenzo is a very chatty and flamboyant 49-y/o vietnamese fellow working out of a bizarre, sand-floored cavern decorated with paper buddhist decorations and all kinds of other paraphernalia.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m pretty sure Kenzo (the name is acquired, btw) founded Coupe Bizarre, and then de-camped for a more quirky, light-hearted and independent direction. Whatever, the man is a monster talent. No product, hardly any clippers, he really just adjusts your hair, or intervenes, or something. Plus you get a lychee candy before you cross the street for a pint at Reservoir&amp;#8230;&lt;/p&gt;


	&lt;p&gt;(Apologies for the crap photography, it&amp;#8217;s just a webcam photo.)&lt;/p&gt;


	&lt;p&gt;[edit: changed photo to something a little less vampy/laser-pointer-stare-y. it&amp;#8217;s a blink-shot, but whatever.]&lt;/p&gt;</body>
    <created-at type="datetime">2008-04-29T17:32:44+00:00</created-at>
    <id type="integer">42</id>
    <permalink>kenzo-hair</permalink>
    <title>Kenzo Hair</title>
    <updated-at type="datetime">2008-04-30T00:52:29+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0067/pepper-flower.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Anyone unfamiliar with the &lt;a href="http://http://en.wikipedia.org/wiki/Sichuan_pepper"&gt;Sichuan Pepper Flower&lt;/a&gt; would probably find the above starter&#8212;as chosen as part of the menu for Anton Corbijn&amp;#8217;s &amp;#8216;last meal&amp;#8217; in issue 12 of Monocle&#8212;to be achingly pretentious. The presentation, on the one hand, is kind of silly&#8212;but on the other hand, this little culinary marvel  really deserves all the reverence we can lavish on it.&lt;/p&gt;


	&lt;p&gt;&lt;img src ="http://kevinfinlayson.com/images/assets/0000/0069/siquan5_2_zapped.1.jpg" alt ="" style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;/p&gt;


	&lt;p&gt;The Sichuan Pepper Flower is a unique sensory experience&#8212;its flavor is intense, floral, aromatic, and it produces a tingling mouth-feel that coats your tongue and palate. Apparently it compliments and even moderates the more traditional hotness we associate with chillies, creating a heady, transportive effect.&lt;/p&gt;


	&lt;p&gt;If you&amp;#8217;ve never had a dish prepared with this ingredient, I can&amp;#8217;t recommend it strongly enough. Here in Montreal, I general go to &lt;a href="http://www.montrealmirror.com/ARCHIVES/2003/111303/resto.html"&gt;Niu Kee&lt;/a&gt; and order the willowy fish, an intense stew of peppers, chillies, fish fillet slices and pepper flower. Don&amp;#8217;t forget to order a Tsing Tao.&lt;/p&gt;</body>
    <created-at type="datetime">2008-04-29T04:40:11+00:00</created-at>
    <id type="integer">41</id>
    <permalink>sichuan-pepper-flower</permalink>
    <title>Sichuan Pepper Flower</title>
    <updated-at type="datetime">2008-04-29T14:25:19+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0065/Picture_2.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m waiting for a high-res version to come out, but I thought I&amp;#8217;d link to &lt;a href="http://www.youtube.com/watch?v=Uu_vq0lK3xo"&gt;this animated short&lt;/a&gt; by Takashi Murakami, a commercial for Luis Vuitton. Love the Tokyo street scenes (mattes and passersby, especially)&#8212;they remind me of something by Production IG or even Masaaki Yuasa.&lt;/p&gt;</body>
    <created-at type="datetime">2008-04-29T04:10:02+00:00</created-at>
    <id type="integer">40</id>
    <permalink>murakami-commercial-for-luis-vuitton</permalink>
    <title>Murakami Commercial for Luis Vuitton</title>
    <updated-at type="datetime">2008-04-29T14:27:39+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;Okay, everyone knows that you need to back up your dev box/home computer, right? Ever since Apple rolled out the mostly-fabulous &lt;a href="http://www.apple.com/macosx/features/timemachine.html"&gt;Time Machine&lt;/a&gt; with &lt;a href="http://apple.com/macosx"&gt;Leopard&lt;/a&gt;, everyone has a really easy way to retrieve lost files, and can rest assured their data is mostly never lost, almost always, probably. The slightly-more-paranoid might use a second partition or drive to make a clone of their entire system using &lt;a href="http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html"&gt;Superduper!&lt;/a&gt; Because restoring your system from Time Machine is a bit of a pain (and all you folks who&amp;#8217;ve been using Time Machine over an &lt;span class="caps"&gt;AEBS&lt;/span&gt;, know that Apple doesn&amp;#8217;t recommend you do that, because the complete restore process apparently fails&#8212;you&amp;#8217;ve been warned).&lt;/p&gt;


	&lt;p&gt;But what about the fire that razes your palatial palace and destroys your redundant array/wheezing Lacie clunker as well as your computer(s)? What about the thief with the mean streak who makes off with your backup drive as well as your Macbook Air?&lt;/p&gt;


	&lt;p&gt;Or&#8212;and let&amp;#8217;s be realistic, this is what this article is actually about&#8212;maybe you need to backup your &lt;span class="caps"&gt;VPS&lt;/span&gt;/slice/server online. Sure, maybe you&amp;#8217;re on Dreamhost, and they back up their accounts and databases, but what if you&amp;#8217;re with a &lt;span class="caps"&gt;DIY&lt;/span&gt; server company like &lt;a href="http://slicehost.com"&gt;Slicehost&lt;/a&gt;, and you don&amp;#8217;t want to fork over for onsite &lt;span class="caps"&gt;RAID&lt;/span&gt; backups?&lt;/p&gt;


	&lt;p&gt;In this series, I&amp;#8217;m going to discuss how to set up automated, incremental backups to Amazon&amp;#8217;s awesome &lt;a href="http://www.amazon.com/gp/browse.html?node=16427261"&gt;S3&lt;/a&gt; service, and automated &lt;span class="caps"&gt;SQL&lt;/span&gt; dumps and uploads to S3, as well. We&amp;#8217;ll also talk about scheduling these tasks using &lt;a href="http://en.wikipedia.org/wiki/Cron"&gt;Cron&lt;/a&gt;, and, finally, we&amp;#8217;ll make sure you get the feedback you want from these tasks.&lt;/p&gt;


	&lt;p&gt;Over the next couple of weeks, watch for the following articles:&lt;/p&gt;


	&lt;p&gt;1. Remote Backups for Everyone&lt;br /&gt;
2. Get to know Amazon S3&lt;br /&gt;
3. Duplicity: incremental backups to S3&lt;br /&gt;
4. Rotating &lt;span class="caps"&gt;SQL&lt;/span&gt; dumps with automysqlbackup&lt;br /&gt;
5. &lt;span class="caps"&gt;SCP&lt;/span&gt; (secure copy) to S3 using s3cmd&lt;br /&gt;
6. Scheduling your backup tasks with Cron&lt;br /&gt;
7. Feelin&#8217; the feedback: wrangling cron task output&lt;br /&gt;&lt;/p&gt;</body>
    <created-at type="datetime">2008-04-28T02:46:57+00:00</created-at>
    <id type="integer">39</id>
    <permalink>remote-backups-for-everyone</permalink>
    <title>Remote Backups for Everyone</title>
    <updated-at type="datetime">2008-04-28T10:34:17+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0063/154035031_4101e75ac9.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Check out these &lt;a href="http://www.flickr.com/photos/trans_parent/sets/72157594549201878/"&gt;amazing black and white portraits&lt;/a&gt; by flickr user zeissizm. sorry for reposting from NoCot.&lt;/p&gt;</body>
    <created-at type="datetime">2008-04-24T04:31:08+00:00</created-at>
    <id type="integer">38</id>
    <permalink>zeissizm-animal-portraits</permalink>
    <title>Zeissizm animal portraits</title>
    <updated-at type="datetime">2008-04-24T11:32:16+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;Took a long time to get this one just right, to weed out the avant-jazz and Strauss and stuff, and to really set up the pacing and transitions.&lt;/p&gt;


	&lt;p&gt;It skews a bit towards beats and melancholy, but this is one sick mixtape, if I do say so myself. Check it out at &lt;a href="http://kfinlayson.muxtape.com"&gt;kfinlayson.muxtape.com&lt;/a&gt;&lt;/p&gt;</body>
    <created-at type="datetime">2008-04-24T04:23:19+00:00</created-at>
    <id type="integer">37</id>
    <permalink>my-muxtape</permalink>
    <title>My Muxtape</title>
    <updated-at type="datetime">2008-04-24T11:24:39+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0061/Picture-1.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Obviously you&amp;#8217;ve read about this all over the place by now, I just wanted to weigh in on the delightful synchronicity that is an &lt;span class="caps"&gt;SSB&lt;/span&gt; of muxtape using version 0.9 of fluid.app (with the coverflow plugin). A beautiful, random, user-created jukebox that&amp;#8217;s endlessly enjoyable. More of a true shuffle than iTunes, and much more compelling than LastFM (sorry guys).&lt;/p&gt;


	&lt;p&gt;I admit I&amp;#8217;m biased towards simple web apps, big time, so I&amp;#8217;m interested to see what kind of legs muxtape has beyond the initial novelty.&lt;/p&gt;


	&lt;p&gt;If you want to hook yourself up with the newest jukebox combo on the block, check out &lt;a href="http://internetjogging.com/2008/04/17/23/"&gt;this article.&lt;/a&gt;&lt;/p&gt;</body>
    <created-at type="datetime">2008-04-23T03:58:52+00:00</created-at>
    <id type="integer">36</id>
    <permalink>muxtape-fluid-app-coverflow-plugin-heaven</permalink>
    <title>Muxtape + Fluid.app + Coverflow plugin = heaven</title>
    <updated-at type="datetime">2008-04-23T11:25:42+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0053/Attap-logo.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;Just dropped by the &lt;a href="http://attap.com"&gt;&lt;span class="caps"&gt;ATTAP&lt;/span&gt;&lt;/a&gt; website to check out what they&#8217;re up to these days, and decided to take the &lt;a href="http://personaldna.com"&gt;Personal &lt;span class="caps"&gt;DNA&lt;/span&gt;&lt;/a&gt; test again. I&amp;#8217;m pleased to announce that I ended up being profiled as a &#8216;considerate director&#8217;, which suits me quite nicely. &lt;span style="text-decoration: line-through;"&gt;Here&amp;#8217;s the little badge to prove it:&lt;/span&gt; [edit: Attap there&amp;#8217;s some styling that makes the badge look nasty on my site, and I&amp;#8217;m too lazy to hack it. Just check out my results &lt;a href="http://www.personaldna.com/report.php?k=deXmlqbMEoVnpeb-PG-AACAD-9605"&gt;here&lt;/a&gt; if you care to.]&lt;/p&gt;


	&lt;p&gt;It&#8217;s nice, because the first time i took the test, back when I was post &lt;span class="caps"&gt;MFA&lt;/span&gt;, studying 3 kinds of programming languages and eating only flat foods, I think my result was something like &#8216;earnest hobgoblin&#8217;. Good to see that trend reversing.&lt;/p&gt;</body>
    <created-at type="datetime">2008-04-19T23:46:04+00:00</created-at>
    <id type="integer">35</id>
    <permalink>personal-dna</permalink>
    <title>Personal DNA</title>
    <updated-at type="datetime">2008-04-19T08:49:25+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;Before Leopard dropped, with tabbed windows in Terminal, I used the terrific Terminal emulator &lt;a href="http://iterm.sourceforge.net/"&gt;iTerm,&lt;/a&gt; for which I found some scripting that really cut down on the bootstrapping required when I&amp;#8217;d sit down to work on a rails project. I&amp;#8217;d fire up the script and enter the project directory name in a modal dialogue, and a pre-defined set of working tabs would open with shell commands, each working within the project folder&#8212;so I&amp;#8217;d spawn a mongrel instance, open an irb console, fire up autotest, launch the textmate project file and ssh to my server&#8212;all with one command.&lt;/p&gt;


	&lt;p&gt;When I switched back to Terminal, I lost that great shortcut, and haven&amp;#8217;t had the time to seek a replacement, until now. Turns out the solution was pretty simple, but not without a few hitches. First, I found the descriptively entitled &lt;a href="http://onrails.org/articles/2007/11/28/scripting-the-leopard-terminal"&gt;Scripting the Leopard Terminal,&lt;/a&gt; an article by Solomon White on his various attempts to write a &lt;span class="caps"&gt;DRY&lt;/span&gt; bootstrapping script in Ruby that would talk with applescript, using various Ruby/Applescript scripting bridges. The article solves the issue and gives you everything you need to make it work for yourself, but it&#8217;s in the comments that I found a link to &lt;a href="https://wush.net/svn/public/terminit/"&gt;terminit,&lt;/a&gt; which is a little utility that I happened to end up using. It requires a single Ruby script, with project information stored in &lt;span class="caps"&gt;YAML&lt;/span&gt; files in the same directory.&lt;/p&gt;


	&lt;p&gt;I ran into a bit of a hitch getting my script up and running, so I thought I&amp;#8217;d mention this to save other people some time: when setting up the script, I needed to install a gem&#8212;the ruby/applescript bridge &lt;a href="http://appscript.sourceforge.net/"&gt;rb-appscript.&lt;/a&gt; But the script wasn&amp;#8217;t finding the gem, for some reason. I fired up my irb console, and the gem was being found after requiring rubygems, so I was a bit confused. Turns out the shebang line at the beginning of the script (I&amp;#8217;m pretty much blind to shebangs, for some reason) points to your /usr/bin/ruby, and I have mine in usr/local/bin. There you go. Now rubygems is included properly, and the rb-appscript bridge is found.&lt;/p&gt;


	&lt;p&gt;I put my terminit script and &lt;span class="caps"&gt;YAML&lt;/span&gt; config files in my Library, in a folder called &#8216;TermInit&#8217;, made the script executable, and symlinked it to my usr/local/bin (which should be in your &lt;span class="caps"&gt;PATH&lt;/span&gt;, obvoiusly), so now I can just type:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
terminit projectname
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;and terminit finds my folder and runs the commands in my config file, which amounts to a cluster of tabs and a Textmate project file opening, autotest launching, etc. And it&amp;#8217;s really fast! The only catch is you have to keep Terminal as the frontmost, active app while the various tabs are spawning.&lt;/p&gt;


	&lt;p&gt;Thanks to everyone who posted their scripts, not having to bootstrap is really luxurious. This is what my &lt;span class="caps"&gt;YAML&lt;/span&gt; file looks like (you can have an unlimited number of projects, each with their own &lt;span class="caps"&gt;YAML&lt;/span&gt; file, I just haven&amp;#8217;t set up any more projects beyond my current one, yet):&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;# you can make as many tabs as you wish...
# tab names are actually arbitrary at this point too.
---
- tab1: 
    - cd ~/Sites/projectname
    - script/server       
- tab2: 
  - cd ~/Sites/projectname
  - autotest -rails 
- tab3: ssh deploy@web.server.ip.address  
- tab4:
    - cd ~/Sites/projectname
    - open *.tmproj&lt;/code&gt;&lt;/pre&gt;</body>
    <created-at type="datetime">2008-04-18T14:03:40+00:00</created-at>
    <id type="integer">34</id>
    <permalink>keep-your-boots-dry-with-terminit</permalink>
    <title>Keep your bootstraps DRY with TermInit </title>
    <updated-at type="datetime">2008-04-18T21:12:41+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;For anyone who didn&amp;#8217;t see it, I direct your attention to Paul Hill&amp;#8217;s excellent, comprehensive &lt;a href="http://www.cityofsound.com/blog/2008/04/monocle-design.html"&gt;account of working at Monocle&lt;/a&gt; as head of web and broadcast through the launch and first volume. Monocle has truly innovated in creating complementary web and print publications, and Hill discusses everything&#8212;from the broad planning strokes, to interface design, to daily office life.&lt;/p&gt;


	&lt;p&gt;An excerpt about the weighting of complementary content, for example, shows the clarity of thinking behind the project, and just how successful it was:&lt;/p&gt;


&lt;blockquote style="font-size: 1.18em; font-style: italic; margin-bottom: 20px; margin-top: 10px; margin-left: 170px; line-height: 1.8em;"&gt;&#8220;&amp;#8230;the website, while containing virtually every word from the magazines in a rich archive for subscribers, would actually discreetly conceal that material in the background, pushing the original broadcast-style programming to the foreground. So Monocle.com would very clearly showcase the programmes, using the magazine editorial as a supportive structure which provides further context, further reading. The programmes are out front, the magazine content towards the back.&#8221;&lt;/blockquote&gt;

	&lt;p&gt;Rarely do articles of this depth and insight end up on the web&#8212;although I suppose that&amp;#8217;s rather the point: Hill himself is responsible for one of the more successful recent attempts to reverse this.&lt;/p&gt;</body>
    <created-at type="datetime">2008-04-16T15:28:34+00:00</created-at>
    <id type="integer">33</id>
    <permalink>monocle-from-the-trenches</permalink>
    <title>Monocle from the Trenches</title>
    <updated-at type="datetime">2008-04-16T22:31:00+00:00</updated-at>
  </post>
  <post>
    <body>&lt;p&gt;&lt;img src="http://kevinfinlayson.com/images/assets/0000/0051/Picture_2.png" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;span style="font-size: 0.7em; width: 400px;"&gt;&lt;i&gt;Left to right: iCal, Mint, Mail, Google Reader, GitHub, flickr, ..?, localhost:3000, Textmate.&lt;/i&gt;&lt;/small&gt;&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ve really gotten into &lt;a href="http://fluidapp.com"&gt;Fluid.app&lt;/a&gt; lately, it&amp;#8217;s an application that spawns stand-alone browsers for webapps. It&amp;#8217;s great if you have integral apps that you use in your workflow, and you don&amp;#8217;t want some random click to a flash-based site or &lt;span class="caps"&gt;PDF&lt;/span&gt; to crash your session.&lt;/p&gt;


	&lt;p&gt;The reason I got into Fluid app initially is kind of embarassing: I wanted the &lt;a href="http://github.com/blog/38-github-on-fluid"&gt;Octocat&lt;/a&gt; icon for &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt; drawn by the amazing &lt;a href="http://www.idokungfoo.com/"&gt;Simon Oxley&lt;/a&gt; in my dock, so I started playing around. Now I have a few SSBs, each with a coveted dock-spot: &lt;a href="http://flickr.com"&gt;flickr,&lt;/a&gt; &lt;a href="http://haveamint.com"&gt;mint&lt;/a&gt; (for this website), and &lt;a href="http://google.com/reader/view"&gt;Google Reader,&lt;/a&gt; to name a few.&lt;/p&gt;


	&lt;p&gt;My favourite thus far, however, is my localhost:3000 icon, which gives me a dedicated &lt;span class="caps"&gt;SSB&lt;/span&gt; for rails development (you can have a separate one for merb, django, whatever, based on the ports you&amp;#8217;re using).&lt;/p&gt;


	&lt;p&gt;Fluid has lots of great features: &lt;a href="http://tinyurl.com"&gt;TinyURL&lt;/a&gt; integration, coverflow, &lt;span class="caps"&gt;SSB&lt;/span&gt;-specific clipboards, greasemonkey-style user scripts, and you can &lt;a href="http://www.ditchnet.org/wp/2008/03/21/web-inspector-meet-fluid/"&gt;toggle the app&amp;#8217;s defaults&lt;/a&gt; to enable the terrific webkit inspector palette for developers.&lt;/p&gt;</body>
    <created-at type="datetime">2008-04-15T16:47:03+00:00</created-at>
    <id type="integer">32</id>
    <permalink>fluid-app</permalink>
    <title>Fluid App</title>
    <updated-at type="datetime">2008-04-15T23:55:06+00:00</updated-at>
  </post>
</posts>
