<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Federico Weber</title>
  <subtitle>Notes</subtitle>
  <id>http://federicoweber.com/notes</id>
  <link href="http://federicoweber.com/notes"/>
  <link href="http://federicoweber.com/feed.xml" rel="self"/>
  <updated>2015-12-10T17:03:00+01:00</updated>
  <author>
    <name>Blog Author</name>
  </author>
  <entry>
    <title>Quantum Computers Explained</title>
    <link rel="alternate" href="http://federicoweber.com/notes/quantum-computers-explained.html"/>
    <id>http://federicoweber.com/notes/quantum-computers-explained.html</id>
    <published>2015-12-10T17:03:00+01:00</published>
    <updated>2015-12-10T17:11:27+01:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe width="658" height="370" src="http://www.youtube.com/embed/JhHMJCUmq28" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Quantum computing and the limits of Human technology explained by the exceptional &lt;a href="http://kurzgesagt.org/"&gt;Kurzgesagt&lt;/a&gt; team.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Volvo Trucks - Look Who’s Driving</title>
    <link rel="alternate" href="http://federicoweber.com/notes/volvo-trucks-remote.html"/>
    <id>http://federicoweber.com/notes/volvo-trucks-remote.html</id>
    <published>2015-12-05T11:16:00+01:00</published>
    <updated>2015-12-05T11:25:46+01:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe width="658" height="370" src="http://www.youtube.com/embed/7kx67NnuSd0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;This is brilliant: Volvo test the toughness of it&amp;rsquo;s latest FMX truck letting a four year old girl drive it &lt;em&gt;( with the safety of a remote controller )&lt;/em&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Turns by Breakwater Studios</title>
    <link rel="alternate" href="http://federicoweber.com/notes/turns-by-breakwater-studios.html"/>
    <id>http://federicoweber.com/notes/turns-by-breakwater-studios.html</id>
    <published>2015-12-04T15:21:00+01:00</published>
    <updated>2015-12-04T15:27:35+01:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe src="http://player.vimeo.com/video/126545288?color=ffffff" width="658" height="370" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;

&lt;p&gt;A fantastic  portrait of master woodturner &lt;a href="http://www.stevenkennard.com/"&gt;Steven Kennard&lt;/a&gt;, and his fantastic work.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Social network illustrated by Ivan Belikov</title>
    <link rel="alternate" href="http://federicoweber.com/notes/social-network-illustrated-by-ivan-belikov.html"/>
    <id>http://federicoweber.com/notes/social-network-illustrated-by-ivan-belikov.html</id>
    <published>2015-12-03T18:11:00+01:00</published>
    <updated>2015-12-03T18:19:28+01:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;&lt;img alt="Twitter Illustration by Ivan Belikov" src="social-network-illustrated-by-ivan-belikov/social-networks-illustration-twitter.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;Fantastic series of illustrations potraiting social networks by &lt;a href="https://www.behance.net/so_static"&gt;Ivan Belikov&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>10 Years Of Daylight and Darkness Visualized</title>
    <link rel="alternate" href="http://federicoweber.com/notes/10-years-of-daylight-and-darkness-visualized.html"/>
    <id>http://federicoweber.com/notes/10-years-of-daylight-and-darkness-visualized.html</id>
    <published>2015-11-30T18:08:00+01:00</published>
    <updated>2015-11-30T18:19:57+01:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;&lt;img alt="Light Calendars" src="10-years-of-daylight-and-darkness-visualized/3053577-slide-s-3-tenyearsoflight03.gif" /&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For its annual &amp;ldquo;Light Calendars,&amp;rdquo; London-based design studio &lt;a href="http://acceptandproceed.com/"&gt;Accept &amp;amp; Proceed&lt;/a&gt; visualizes the fluctuating length of daylight for each passing year with a series of stunningly detailed black and white prints&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  <entry>
    <title>Adidas futurecraft leather</title>
    <link rel="alternate" href="http://federicoweber.com/notes/adidas-futurecraft-leather.html"/>
    <id>http://federicoweber.com/notes/adidas-futurecraft-leather.html</id>
    <published>2015-11-11T20:31:00+01:00</published>
    <updated>2015-11-11T20:36:01+01:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe width="658" height="370" src="http://www.youtube.com/embed/Cl84LnbXb04" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Adidas milled one continuous piece of leather, to various thickness, to form the upper of this shoe.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Op – experimental optical film</title>
    <link rel="alternate" href="http://federicoweber.com/notes/op-experimental-film.html"/>
    <id>http://federicoweber.com/notes/op-experimental-film.html</id>
    <published>2015-10-30T16:32:00+01:00</published>
    <updated>2015-10-30T16:34:45+01:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe src="http://player.vimeo.com/video/95565377?color=ffffff" width="658" height="370" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;

&lt;p&gt;by: &lt;a href="http://www.giovfx.com/"&gt;Giovanni Rodriguez&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Setting the website typography with webfonter</title>
    <link rel="alternate" href="http://federicoweber.com/notes/setting-the-website-typography-with-webfonter.html"/>
    <id>http://federicoweber.com/notes/setting-the-website-typography-with-webfonter.html</id>
    <published>2015-10-24T12:41:00+02:00</published>
    <updated>2015-10-24T12:54:44+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;&lt;img alt="webfonter Chrome extension" src="setting-the-website-typography-with-webfonter/20151024_123806_Screenshot.png" /&gt;&lt;/p&gt;

&lt;p&gt;Just discovered &lt;a href="https://www.fontshop.com/"&gt;fontshop&lt;/a&gt; &lt;a href="https://webfonter.fontshop.com/"&gt;Webfonter&lt;/a&gt; Chrome extension. A neat solution to browse and experiment with the shop extensive catalog, directly on the website you are building. Among the various features it supports: &lt;em&gt;custom CSS selectors&lt;/em&gt; and save the configuration in the &lt;em&gt;Local Storage&lt;/em&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>100 day calligraphy challenge</title>
    <link rel="alternate" href="http://federicoweber.com/notes/100-day-calligraphy-challenge.html"/>
    <id>http://federicoweber.com/notes/100-day-calligraphy-challenge.html</id>
    <published>2015-10-21T14:37:00+02:00</published>
    <updated>2015-10-21T14:51:55+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;&lt;a href="https://instagram.com/p/9F_4CTDv76/?taken-by=federicoweber"&gt;&lt;img alt="An ounce of practice is generally worth more than a ton of theory." src="100-day-calligraphy-challenge/20151021-143849-nt-1-calligraphy.jpg" /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A couple of years ago I started learning to write in &lt;a href="https://www.wikiwand.com/en/Italic_type"&gt;Italic&lt;/a&gt;. But after the initial period of dedicated study, I practiced it less and less.
To get better at it, I decided to start a 100 day calligraphy challenge.
You can follow my progress in &lt;a href="https://instagram.com/federicoweber/"&gt;instagram&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Ghost in the shell, Identity in Space</title>
    <link rel="alternate" href="http://federicoweber.com/notes/ghost-in-the-shell.html"/>
    <id>http://federicoweber.com/notes/ghost-in-the-shell.html</id>
    <published>2015-10-17T10:35:00+02:00</published>
    <updated>2015-10-18T12:51:23+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe width="658" height="370" src="http://www.youtube.com/embed/gXTnl1FVFBw" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;all things change in a dynamic environment, your effort to remain as you are is what limits you&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  <entry>
    <title>Reddit AMA animated logo</title>
    <link rel="alternate" href="http://federicoweber.com/notes/reddit-ama-animated-logo.html"/>
    <id>http://federicoweber.com/notes/reddit-ama-animated-logo.html</id>
    <published>2015-10-14T11:48:00+02:00</published>
    <updated>2015-10-14T11:52:45+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;&lt;img alt="Reddit ama logo intro" src="reddit-ama-animated-logo/reddit-ama-logointro-10s_1.gif" /&gt;&lt;/p&gt;

&lt;p&gt;Intro design and animation for Reddit&amp;rsquo;s new AMA video series by &lt;a href="https://dribbble.com/DavidBStanfield"&gt;David Stanfield&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>A pretty scroll hijacking</title>
    <link rel="alternate" href="http://federicoweber.com/notes/a-nice-scroll-hijacking.html"/>
    <id>http://federicoweber.com/notes/a-nice-scroll-hijacking.html</id>
    <published>2015-10-13T15:39:00+02:00</published>
    <updated>2015-10-13T16:41:09+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;&lt;img alt="ginventory.co" src="a-nice-scroll-hijacking/ginventory.gif" /&gt;&lt;/p&gt;

&lt;p&gt;Usually, I&amp;rsquo;m not that in favor of scroll hijacking, but have to admit that &lt;a href="http://www.ginventory.co/"&gt;ginventory.co&lt;/a&gt; is pretty.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Wanderers</title>
    <link rel="alternate" href="http://federicoweber.com/notes/wanderers.html"/>
    <id>http://federicoweber.com/notes/wanderers.html</id>
    <published>2015-01-01T01:00:00+01:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe src="http://player.vimeo.com/video/108650530?color=ffffff" width="658" height="370" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;

&lt;blockquote&gt;
&lt;p&gt;“As for me, I am tormented with an everlasting itch for things remote. I love to sail forbidden seas, and land on barbarous coasts.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wanderers - a short film by Erik Wernquist&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Migrating from Amazon EC2 to Nodejitsu PaaS</title>
    <link rel="alternate" href="http://federicoweber.com/notes/EC2_nodejitsu_server_gestalt.html"/>
    <id>http://federicoweber.com/notes/EC2_nodejitsu_server_gestalt.html</id>
    <published>2013-02-10T01:00:00+01:00</published>
    <updated>2015-10-13T16:21:38+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;Last year I decided to renew my website, and cause I was also studying Node.js I decided to develop from scratch the publishing platform—you can read more about it in &lt;a href="http://federicoweber.com/gestaltapp/20120625-142551-pi-3-introducinggestalt"&gt;here&lt;/a&gt;—and self host it on Amazon EC2 to get a grip on the platform. &lt;/p&gt;

&lt;p&gt;As my first attempt to self manage a server, setting up the EC2 instance was far from an easy task for me. It took me a couple of days of studying official documentation and tutorials to successfully setup the EC2 instance, deploy Gestalt via GIT and have the server run it as a demon. &lt;/p&gt;

&lt;p&gt;During this time, while Gestalt grown in capabilities and performance, I discovered myself to be a terrible SisAdmin. Therefor when I received the notification that my free tier was about to expire I quickly decided to migrate everything to a managed platform where my only concern would bee to work on the Gestalt.&lt;/p&gt;

&lt;p&gt;Looking for the perfect match for my needs I decided to give a try at &lt;a href="http://nodejitsu.com/paas.html"&gt;Nodejitsu&amp;rsquo;s Platform as a Service&lt;/a&gt; (Paas)—being attracted from their convenient fees, with the cheapest plan, for individuals, starting at $3 a month. 
Prepared for a long and painful migration I created an account studied their documentation, installed jitsu CLI via npm and in &lt;strong&gt;less then 10 minutes&lt;/strong&gt; Gestalt was running smoothly from their servers. Once I&amp;rsquo;ve been sure that everything was stable I update the DNS records and shutted down  the EC2 instance.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s early for me to comment on their service reliability, but with such a pleasant startup I can not help but recommend their service.&lt;/p&gt;

&lt;p&gt;During this time (from February 28 2012) I&amp;rsquo;ve been able to use their services for free leveraging the &lt;a href="http://aws.amazon.com/free/faqs/"&gt;Free Tier Period&lt;/a&gt; &lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The New Disruptors</title>
    <link rel="alternate" href="http://federicoweber.com/notes/podcast_makers.html"/>
    <id>http://federicoweber.com/notes/podcast_makers.html</id>
    <published>2012-12-14T01:00:00+01:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;Hosted by Glenn Fleishman, &lt;a href="http://www.muleradio.net/newdisruptors/"&gt;The New Disruptors&lt;/a&gt; is brilliant weekly podcast, on Mule Radio Syndicate, that investigate the new economy of Makers and Crowdfunding.&lt;/p&gt;

&lt;p&gt;Unfortunately the audio quality is poor(that was true at the time of writing &lt;em&gt;12/14/2012&lt;/em&gt; but audio quality of the new episodes is remarkable), but the content is remarkable and the pace is engaging. If you are into self-production you must subscribe to this podcast.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Firefly, a skateboarding movie shooted with a drone</title>
    <link rel="alternate" href="http://federicoweber.com/notes/skateboard_video_drone.html"/>
    <id>http://federicoweber.com/notes/skateboard_video_drone.html</id>
    <published>2012-12-12T01:00:00+01:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe src="http://player.vimeo.com/video/55094977?color=ffffff" width="658" height="370" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;
</content>
  </entry>
  <entry>
    <title>Smart images responsive crop with CSS3</title>
    <link rel="alternate" href="http://federicoweber.com/notes/css3_images.html"/>
    <id>http://federicoweber.com/notes/css3_images.html</id>
    <published>2012-12-04T01:00:00+01:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;Explore the source code on Github&lt;/p&gt;

&lt;p&gt;[github]https://github.com/adamdbradley/focal-point#readme&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Behind The Scenes of Crysis 3</title>
    <link rel="alternate" href="http://federicoweber.com/notes/videogames_Crysis3.html"/>
    <id>http://federicoweber.com/notes/videogames_Crysis3.html</id>
    <published>2012-12-01T01:00:00+01:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe width="658" height="370" src="http://www.youtube.com/embed/rdGmH2AFvQo" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
</content>
  </entry>
  <entry>
    <title>Rain Room at the Barbican</title>
    <link rel="alternate" href="http://federicoweber.com/notes/art_experience.html"/>
    <id>http://federicoweber.com/notes/art_experience.html</id>
    <published>2012-11-20T01:00:00+01:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe src="http://player.vimeo.com/video/51830893?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;badge=0&amp;amp;color=ffffff" width="657" height="369"  frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;

&lt;blockquote&gt;
&lt;p&gt;Rain Room is a hundred square metre field of falling water through which it is possible to walk, trusting that a path can be navigated, without being drenched in the process.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A simple yet amazing concept well executed by &lt;a href="http://random-international.com"&gt;Randon International&lt;/a&gt;. This is truly the kind of experience in which technology become magic.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>My quest to Pogonotomy</title>
    <link rel="alternate" href="http://federicoweber.com/notes/pogonotomy.html"/>
    <id>http://federicoweber.com/notes/pogonotomy.html</id>
    <published>2012-11-18T15:48:58+01:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;h2&gt;The art of wet shaving&lt;/h2&gt;

&lt;p&gt;My father taught me to shave with a Bic disposable razor and canned foam when I was 14; and for my 16th birthday I received as a present from Gillette, a free Mac3&lt;sup id="fnref1"&gt;&lt;a href="#fn1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt; that become my shaving razor for almost a decade.
The experience of shaving with it was far from ideal, my neck used to be filled with ingrown hairs and razors burns and I grow up believing that I&amp;rsquo;ve been cursed with a delicate skin.&lt;/p&gt;

&lt;h3&gt;Electric shaving&lt;/h3&gt;

&lt;p&gt;For Christmas of 2008 my parents gifted me an electric shaver, a shining multi-purpose Braun Cruzer3. As awesome as it look this shaver can be really useful for trimming and refining intricate beard styles but, being almost beardless, I used that to completely shave myself. 
The shaving experience with the Cruzer3 have been, if possible, even worst. I&amp;rsquo;ve kept using it for almost six months, hoping that my beard will adapt, before giving up.&lt;/p&gt;

&lt;h3&gt;More blades are better&lt;/h3&gt;

&lt;p&gt;On that time I decide that my old Mac3 already got enough miles and I bought a Gillette Fusion&lt;sup id="fnref2"&gt;&lt;a href="#fn2" rel="footnote"&gt;2&lt;/a&gt;&lt;/sup&gt; and switched to shaving gel in place of the canned foam.&lt;/p&gt;

&lt;p&gt;I must admit that the overall shaving experience improved quite a bit, but the shaving costs grown out of control. 
To prevent razor burns I had to replace the shaving head every two week, and with a costs of €4,50 each, my beard used to cost me almost €100 a year in blades.&lt;/p&gt;

&lt;h3&gt;Shaved by a professional&lt;/h3&gt;

&lt;p&gt;On october of 2011 my wife got pregnant and we decided to move to a proper&lt;sup id="fnref3"&gt;&lt;a href="#fn3" rel="footnote"&gt;3&lt;/a&gt;&lt;/sup&gt; apartment in the city center. On the new neighborhood we discovered a small barber shop whose owner, a gentle man from Naples on its 70&amp;rsquo;s, use to provide old manner shaving service with a Shavette razor&lt;sup id="fnref4"&gt;&lt;a href="#fn4" rel="footnote"&gt;4&lt;/a&gt;&lt;/sup&gt;, pre-shave balm and hand mounted foam.
That have been by far one of the best shaving experience at that point, and settled the benchmark for all of the following ones.
The shaving foam was soft and warm and the razor glided over my tightened skin producing a resolute sound while trimming the whiskers. The result was a smooth and relaxed face on which the beard refused to grown back for the following three days.&lt;/p&gt;

&lt;h3&gt;The Straight Razor&lt;/h3&gt;

&lt;p&gt;After that experience I&amp;rsquo;ve grown interested in Straight Razors&lt;sup id="fnref5"&gt;&lt;a href="#fn5" rel="footnote"&gt;5&lt;/a&gt;&lt;/sup&gt;, and with my great pleasure, my Father in Law, in accord with my Wife, gave me as a present, for my 29th birthday, a huge 7/8 Straight Razor from Filarmonica&lt;sup id="fnref6"&gt;&lt;a href="#fn6" rel="footnote"&gt;6&lt;/a&gt;&lt;/sup&gt; and a leather strop.
My first shave with that razor was a mess, I recursively cutted my self badly, and my skin was so sore that I&amp;rsquo;ve been not able to shave for almost a week. 
The experience was so bad that I almost give up, but the memories of that one amazing shave I got in that small barber shop in Milan persuaded me to endure on the path. &lt;/p&gt;

&lt;h3&gt;Going pro&lt;/h3&gt;

&lt;p&gt;After that first terrible shave it&amp;rsquo;s passed almost one year. In this time  I bought a smaller, shave-ready, razor(5/8 roundpoint Astrale from Dovo); learned how to prepare my face, lather the shaving cream; and take care of my razor.&lt;/p&gt;

&lt;p&gt;Now days razors burns and ingrown hairs are distant nightmare, I rarely cut myself and I&amp;rsquo;m able to achieve a wonderful shave that is almost on par with the one I got in that barber shop. But more important than that is the transformation of a painful daily routine in an awesome ritual that I enjoy twice a week and I&amp;rsquo;m on a long life path to hone my skills in the art of pogonotomy.&lt;/p&gt;

&lt;p&gt;If you liked what you read please follow me on &lt;a href="http://twitter.com/FedericoWeber"&gt;Twitter&lt;/a&gt; or &lt;a href="https://alpha.app.net/federicoweber"&gt;ADN&lt;/a&gt;.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;The Gillette Mach3 is a line of safety razors produced by Gillette and introduced in 1998 after more than $750 million in research and development costs. Gillette used to ship free Mac3 razors as an advertisement around 1999. &lt;a href="http://en.wikipedia.org/wiki/Gillette_Mach3"&gt;Source&lt;/a&gt;&amp;nbsp;&lt;a href="#fnref1" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;The Gillette Fusion is a five-bladed razor released in 2006. The Fusion has five blades on the front, and a single sixth blade on the rear for precision trimming.&amp;nbsp;&lt;a href="#fnref2" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;We used to live in a nice multi level loft in the suburb, and we were imagining our baby jumping out from the open first floor as soon as she start crawling around.&amp;nbsp;&lt;a href="#fnref3" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;A Shavette is a straight razor that takes disposable blades. This is the kind of razor barbers use over a straight razor for hygienic reasons.&amp;nbsp;&lt;a href="#fnref4" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn5"&gt;
&lt;p&gt;A straight razor is a razor with a blade that can fold into its handle. They are also called open razors and cut-throat razors. &lt;a href="http://en.wikipedia.org/wiki/Straight_razor"&gt;Source&lt;/a&gt;&amp;nbsp;&lt;a href="#fnref5" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn6"&gt;
&lt;p&gt;I later discovered that the brand was a prestigious one from Spain. But it closed out around 1990 and the Razor I got is currently produced in some unknown factory, with an unknown blend of steel and it&amp;rsquo;s almost impossible to hone.  &amp;nbsp;&lt;a href="#fnref6" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Super Retina display</title>
    <link rel="alternate" href="http://federicoweber.com/notes/display_tech.html"/>
    <id>http://federicoweber.com/notes/display_tech.html</id>
    <published>2012-11-09T01:00:00+01:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Japan Display has developed a prototype 651ppi LCD panel. First announced in June 2012, this display has a resolution of 1280x800 pixels, equivalent to that in a regular notebook PC, but in a screen size of only 2.3 inches&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now imagine an iPad mini equipped with one of those.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The art of making</title>
    <link rel="alternate" href="http://federicoweber.com/notes/video_making.html"/>
    <id>http://federicoweber.com/notes/video_making.html</id>
    <published>2012-10-08T02:00:00+02:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;iframe src="http://player.vimeo.com/video/43005056?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;color=ffffff" width="657" height="369" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt; 
</content>
  </entry>
  <entry>
    <title>Validating your Local Storage Data</title>
    <link rel="alternate" href="http://federicoweber.com/notes/programming_web.html"/>
    <id>http://federicoweber.com/notes/programming_web.html</id>
    <published>2012-10-01T02:00:00+02:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;Local storage is a powerfull tool to cache data computed by web apps for later reuse or non critical persistency&lt;sup id="fnref1"&gt;&lt;a href="#fn1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt;. For example I do used it on a recent project, to reduce both the data loaded from the server and the computational cost of sorting a huge list of articles by filters.&lt;/p&gt;

&lt;p&gt;Cause the local storage will persiste on the browser for a long time to safely use this data we have to be sure that they are reliable and up to date. Usually the data can get useless for two main reasons: they are based on data produce by the server, that has been updated; or they have been stored by a previous version of the web app which data model have long changed.&lt;/p&gt;

&lt;h2&gt;Getting the timestamp&lt;/h2&gt;

&lt;p&gt;To check the data against the server a good option is to have it provide a timestamp&lt;sup id="fnref2"&gt;&lt;a href="#fn2" rel="footnote"&gt;2&lt;/a&gt;&lt;/sup&gt; for the latest time the data have been changed. &lt;/p&gt;

&lt;p&gt;If the web page, is rendered by the same server we are getting the data from, we can pass this information around as a &lt;strong&gt;Custom data attributes&lt;/strong&gt; in the DOM element that hold the app.&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"appHolder"&lt;/span&gt; &lt;span class="na"&gt;data-timestamp=&lt;/span&gt;&lt;span class="s"&gt;"2012-10-02T20:17:08.780Z"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Otherwise, if the data are coming from a different server, we can get the information as a lightweight JSON.&lt;/p&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;"updated"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-02T18:30:30.179Z"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Versioning your web app&lt;/h2&gt;

&lt;p&gt;To match the data against an updated version of your app the best option is to have a the version number as constant in your app namespace, and save it with your data on the Local Storage.&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;myApp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt; &lt;span class="nx"&gt;myApp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VERSION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"0.0.4"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Wrapping it up&lt;/h2&gt;

&lt;p&gt;It&amp;rsquo;s best to run this test as soon as the app is inited, if both of this test succeed you are usually safe to trust the stored data, otherwise it&amp;rsquo;s reccomended to recreate it.&lt;/p&gt;

&lt;p&gt;With non critical persistency I intend any kind of data that can be reconstructed without causing damages or requiring serius effort from the end user. Like a precompiled set of filters for a search.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;Although not mandatory I reccomend you to store this data in the ISO format &lt;em&gt;&amp;ldquo;2012-10-02T20:17:08.780Z&amp;rdquo;&lt;/em&gt; to better reuse it in javascript passing it as an argument of a new Date object.&amp;nbsp;&lt;a href="#fnref2" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Front end middleware with Backbone and PantaRhei</title>
    <link rel="alternate" href="http://federicoweber.com/notes/tutorial_backbone_pantarhei_javascript.html"/>
    <id>http://federicoweber.com/notes/tutorial_backbone_pantarhei_javascript.html</id>
    <published>2012-09-25T02:00:00+02:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;h2&gt;A middleware primer&lt;/h2&gt;

&lt;p&gt;The first time I&amp;rsquo;ve stumbled upon  the middleware pattern it was in &lt;a href="http://expressjs.com"&gt;Express.js&lt;/a&gt;, while developing the backend for &lt;a href="http://federicoweber.com/gestaltapp/20120625-142551-pi-3-introducinggestalt"&gt;Gestalt&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The concept of middleware it&amp;rsquo;s quite straight forward, it&amp;rsquo;s nothing more than a function that handle a request. What make it so interesting is the possibility to create a stack of middleware. By doing so each middleware will be able to process the request, and call the next one in the stack.&lt;/p&gt;

&lt;p&gt;A typical middleware will look like this:&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;foo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// all your logic goes in here&lt;/span&gt;

    &lt;span class="c1"&gt;// proceed to the next middleware&lt;/span&gt;
    &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If a middleware have to signal an error, it can do so passing it to the first argument of the next().&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;bar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// signal an error&lt;/span&gt;
    &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;"Something went wrong!"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To append a stack of middleware to a request in &lt;a href="http://www.senchalabs.org/connect/"&gt;Connect&lt;/a&gt; you have to declare them with the &lt;strong&gt;use&lt;/strong&gt; method&lt;sup id="fnref1"&gt;&lt;a href="#fn1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example from http://www.senchalabs.org/connect/&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'dev'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;static&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'public'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'hello world\n'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;What I really like about this pattern is that by simply reading the &lt;strong&gt;use&lt;/strong&gt; stack you can get a grip on the logics behind the application. Also structuring your application as a cascade of middleware you are encouraged to split it in small,  self contained, modules and avoid nasty callbacks. With the added benefit of a enhancing both the readability maintainability of your code.&lt;/p&gt;

&lt;h2&gt;Introducing PantaRhei.js&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://github.com/federicoweber/PantaRhei"&gt;PantaRhei.js&lt;/a&gt; is my front end implementation of the middleware pattern . I structured it as an extension for &lt;a href="http://backbonejs.org"&gt;Backbone.js&lt;/a&gt; because it is awesome, I&amp;rsquo;m using it on the wast majority of my projects, and I want to leverage it&amp;rsquo;s &lt;strong&gt;Events&lt;/strong&gt; module and the simple inheritance style provided by the &lt;strong&gt;extend()&lt;/strong&gt; method. &lt;/p&gt;

&lt;p&gt;PantaRhei is written in CoffeeScript and distributed with the MIT license. You can find the coffeescript sources and the compiled and minified javascript files on &lt;a href="http://github.com/federicoweber/PantaRhei"&gt;Github&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The purpose of PantaRhei is to ease the creation and the execution of queues of tasks, like fetching and manipulating data, managing the transitions between pages and so on.
Right now PantaRhei is composed by two modules: the &lt;strong&gt;Flow&lt;/strong&gt;, that is responsible for the execution of the queue and the &lt;strong&gt;Worker&lt;/strong&gt;, that describe one of the possible structure of middleware&lt;sup id="fnref2"&gt;&lt;a href="#fn2" rel="footnote"&gt;2&lt;/a&gt;&lt;/sup&gt; that the Flow can handle.&lt;/p&gt;

&lt;h3&gt;The Worker&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Worker&lt;/strong&gt; module is more a convention than a real module, and it&amp;rsquo;s meant to be extended. 
It describe two methods: the former is the &lt;strong&gt;run&lt;/strong&gt; it&amp;rsquo;s invoked by the Flow to execute the worker and accept a &lt;strong&gt;shared&lt;/strong&gt; object ( which purpose is to act as a place for workers to share data ) and the &lt;strong&gt;next&lt;/strong&gt; callback as arguments; the latter is the &lt;strong&gt;kill&lt;/strong&gt;, that is invoked by the Flow when the worker execution is completed to safely remove it.
The worker constructor also accept an option &lt;strong&gt;id&lt;/strong&gt; as an argument.&lt;/p&gt;

&lt;p&gt;To create a new Worker you need to extend it and implement it&amp;rsquo;s methods:&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;Delay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;PantaRhei&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;duration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shared&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;onTimeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
            &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
        &lt;span class="nx"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;onTimeout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;kill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="c1"&gt;// all your logics to remove the worker&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;shortDelay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'shortDelay'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;PantaRhei also include, under the PantaRhei.workers namespace, a series of workers&lt;sup id="fnref3"&gt;&lt;a href="#fn3" rel="footnote"&gt;3&lt;/a&gt;&lt;/sup&gt; JsonLoader and LoadAssets.&lt;/p&gt;

&lt;h3&gt;The Flow&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Flow&lt;/strong&gt; module is our middleware manager, and handle for you all the logic to create and run the queue.
To create a new flow all you have to do is to call it&amp;rsquo;s constructor and optionally pass two parameters: an &lt;strong&gt;id&lt;/strong&gt; and a array containing the list of &lt;strong&gt;workers&lt;/strong&gt; to use.&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;flow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;PantaRhei&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Flow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'myFirstFlow'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;task1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;task2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can also append a worker to the flow passing it  as an argument of the &lt;strong&gt;use&lt;/strong&gt; method.&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;task1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shared&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s2"&gt;"task one completed"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="nx"&gt;flow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;PantaRhei&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Flow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;flow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;task1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To execute the flow you have to invoke the &lt;strong&gt;run&lt;/strong&gt; method. The flow can also accept an optional &lt;strong&gt;shared&lt;/strong&gt; object. This is passed around to all the workers in the queue and it&amp;rsquo;s returned by the flow on complete, it&amp;rsquo;s actually the place for storing and passing data between workers. If this is not provided the Flow will create a empty object to use. &lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// create our workers&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;task1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shared&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;shared&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"the data have been processed"&lt;/span&gt;
    &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="nx"&gt;task2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shared&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;shared&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;newData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"we got some new data for you"&lt;/span&gt;
    &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;

&lt;span class="c1"&gt;// create our flow and workers passing the first task on the constructor&lt;/span&gt;
&lt;span class="nx"&gt;flow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;PantaRhei&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Flow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;  &lt;span class="s1"&gt;'myFirstFlow'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nx"&gt;task1&lt;/span&gt; &lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="nx"&gt;flow&lt;/span&gt;
    &lt;span class="c1"&gt;// append the second task&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;task2&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;// run the flow&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"the data is new"&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Events&lt;/h4&gt;

&lt;p&gt;PantaRhei make use of the Backbone Events, so the  Flow can dispatch the following events: run, pause, resume, error and complete. Apart from the error all the other events pass the shared object as an argument to the listener.
So to get notified when a flow have been successfully executed you can catch the complete event.
&amp;ldquo;`javascript
var onComplete = function( shared ){
    console.log(shared);
};&lt;/p&gt;

&lt;p&gt;flow
    .on( &amp;lsquo;complete&amp;rsquo;, onComplete)
    .run();
&amp;rdquo;`&lt;/p&gt;

&lt;h4&gt;Error handling&lt;/h4&gt;

&lt;p&gt;PantaRhei leave the responsibility to properly handle the errors to you. If any of the worker in the queue pass and error to the next callback, the Flow is paused and dispatch an &lt;strong&gt;error&lt;/strong&gt; event. 
Once you have  done with the error handling and you are ready to resume the flow you can call the &lt;strong&gt;resume&lt;/strong&gt; method to move to the next worker in the queue.&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;onError&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="c1"&gt;//handle the error in here&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resume&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;flow&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'error'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onError&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The other one is a simple function that accept as arguments the &lt;strong&gt;shared&lt;/strong&gt; object and the &lt;strong&gt;next&lt;/strong&gt; callback.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;If you are looking for an introduction to the use of middle wares in Connect I suggest you to check this short &lt;a href="http://stephensugden.com/middleware_guide/"&gt;guide&lt;/a&gt; written by Stephen Sugden.&amp;nbsp;&lt;a href="#fnref1" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;More to follow soon.&amp;nbsp;&lt;a href="#fnref3" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Kickstarter is not a store</title>
    <link rel="alternate" href="http://federicoweber.com/notes/kickstarter.html"/>
    <id>http://federicoweber.com/notes/kickstarter.html</id>
    <published>2012-09-21T02:00:00+02:00</published>
    <updated>2015-10-06T17:12:36+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;Recently there have been a lot of disillusionment about a series of successfully backed Kickstarter projects who failed to ship. Therefor Kickstarter decide to &lt;a href="http://www.kickstarter.com/blog/kickstarter-is-not-a-store"&gt;clarify&lt;/a&gt; their position and enforce a new series of rules especially targeted to physical product.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It&amp;rsquo;s hard to know how many people feel like they&amp;rsquo;re shopping at a store when they&amp;rsquo;re backing projects on Kickstarter, but we want to make sure that it&amp;rsquo;s no one. Today we&amp;rsquo;re introducing a number of changes to reinforce that Kickstarter isn’t a store.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While the &lt;strong&gt;Risks and Challenges&lt;/strong&gt; section is a correct move, I have mixed feelings about the new measures for Hardware and Product Design projects. Surely demanding a working prototype is a step in the right direction, but completely prohibit the 3D rendering is a poor choice. And neither of this help backers to understand if the product they are going to support can be realistically manufactured. &lt;/p&gt;

&lt;h2&gt;Working prototype&lt;/h2&gt;

&lt;p&gt;A working prototype is a necessary step for the creators to figure out how o produce a real product out of their amazing concept. But it&amp;rsquo;s not enough to assure the backers that it&amp;rsquo;s actually possible produce the same product in large quantity, leveraging industrial facilities, neither it&amp;rsquo;s a good estimation of the real production costs—which can also vary by a significant amount based on the number of peaces that are going to be manufactured.&lt;/p&gt;

&lt;p&gt;Especially for complicated products that require a combination of different technologies and draconian manufacturing and distribution lines&lt;sup id="fnref1"&gt;&lt;a href="#fn1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt;. &lt;/p&gt;

&lt;h2&gt;Renderings and simulations&lt;/h2&gt;

&lt;p&gt;The case against rendering is a complete non sense to me. Simulations and renderings are powerful tools for creators both to  design and iterate the product and to show the backers what the product it&amp;rsquo;s going to look like and the possible colors and trim customizations.&lt;/p&gt;

&lt;h2&gt;Is founding cap an option?&lt;/h2&gt;

&lt;p&gt;An interesting point Kickstarter raise in their post is to fix to one the amount of quantities that a project can offer to a single backer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Offering multiple quantities of a reward is prohibited. Hardware and Product Design projects can only offer rewards in single quantities or a sensible set&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This kind of choice make sense considering that over a certain amount of product to produce it could become necessary to reconsider the entire manufacturing line—that could not be convenient probably till a new order of magnitude is reached—and keep manufacturing the product using a line produced for smaller quantity is not always possible or desirable.&lt;/p&gt;

&lt;p&gt;This kind of consideration also open the road to another possibility, a founding cap. Clearly this is not something Kickstarter should force to the product, most of the projects founded don&amp;rsquo;t have real issues with over founding, but could be a nice option that the creators can decide to adopt.&lt;/p&gt;

&lt;p&gt;Even better would be to have &lt;strong&gt;progressive founding goals&lt;/strong&gt;; it&amp;rsquo;s quite a common practice, for creators, to promise increased sets of features based on the amount of money (over the initial founding goal) the project manage to raise&lt;sup id="fnref2"&gt;&lt;a href="#fn2" rel="footnote"&gt;2&lt;/a&gt;&lt;/sup&gt;. Kickstarter could officially support this kind of initiative by charging late bakers only when the next goal is reached.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;I do honestly doubt that the &lt;a href="http://www.kickstarter.com/projects/ouya/ouya-a-new-kind-of-video-game-console/posts/275869"&gt;Ouya&lt;/a&gt; will ship in time for Mar 2013.&amp;nbsp;&lt;a href="#fnref1" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;The &lt;a href="http://www.kickstarter.com/projects/659943965/planetary-annihilation-a-next-generation-rts"&gt;Planetary Annihilation&lt;/a&gt; project had an interesting take on this, adding game enhancements and orchestral sound track.&amp;nbsp;&lt;a href="#fnref2" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>My new tailor made leather bag</title>
    <link rel="alternate" href="http://federicoweber.com/notes/bag_design.html"/>
    <id>http://federicoweber.com/notes/bag_design.html</id>
    <published>2012-09-11T02:00:00+02:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;My new tailor made bag, by &lt;a href="http://www.etsy.com/shop/webag?ref=seller_info"&gt;WeBag&lt;/a&gt;, just arrived and it&amp;rsquo;s awesome.
The quality of the materials and fabrication is excellent; it truly is the kind of product that will last forever. &lt;/p&gt;

&lt;p&gt;&lt;img alt="tailor made WeBag" src="http://img0.etsystatic.com/005/0/6714672/il_fullxfull.373916680_prus.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;If you are in the market for a new leather bag you better check &lt;a href="http://www.etsy.com/shop/webag?ref=seller_info"&gt;WeBag&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>RIP Bill Moggridge</title>
    <link rel="alternate" href="http://federicoweber.com/notes/RIP_BillMoggridge.html"/>
    <id>http://federicoweber.com/notes/RIP_BillMoggridge.html</id>
    <published>2012-09-10T02:00:00+02:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;Sad but true Bill Moggridge passed away at the age of 69.
Among the other things he was the designer of the first laptop. If it&amp;rsquo;s work it&amp;rsquo;s unknown to you please do yourself a favor and read  &lt;a href="http://www.amazon.com/Designing-Interactions-Bill-Moggridge/dp/0262134748/ref=sr_1_1?ie=UTF8&amp;amp;qid=1347287007&amp;amp;sr=8-1&amp;amp;keywords=bill+moggridge"&gt;Design Interaction&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Adobe's CSS Shaders rolled into CSS Filter Effects Specification as an official web standard.</title>
    <link rel="alternate" href="http://federicoweber.com/notes/css3_filters_adobe.html"/>
    <id>http://federicoweber.com/notes/css3_filters_adobe.html</id>
    <published>2012-09-05T02:00:00+02:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;Great news for those among us who wish to bring more exciting effects on the web. Adobe&amp;rsquo;s CSS Shaders proposal have been approved approved by &lt;strong&gt;W3C&lt;/strong&gt;  as a part of the &lt;a href="https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html"&gt;Filter Effects&lt;/a&gt;. 
For the ones new with the matter here is an &lt;a href="http://www.adobe.com/devnet/html5/articles/css-shaders.html"&gt;introduction&lt;/a&gt; and a series of &lt;a href="http://adobe.github.com/web-platform/samples/css-customfilters/"&gt;examples&lt;/a&gt;&lt;sup id="fnref1"&gt;&lt;a href="#fn1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;A special prototype webkit browser by Adobe is required. You can download it &lt;a href="https://github.com/downloads/adobe/webkit/PrototypeEnhancementsForChromiumMac-may2012-f2f.zip"&gt;here&lt;/a&gt;&amp;nbsp;&lt;a href="#fnref1" rev="footnote"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Fine tune your headers typography with SlabText.js</title>
    <link rel="alternate" href="http://federicoweber.com/notes/jquery_typography.html"/>
    <id>http://federicoweber.com/notes/jquery_typography.html</id>
    <published>2012-09-03T02:00:00+02:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;Based on Erik Loyer&amp;rsquo;s &lt;a href="http://erikloyer.com/index.php/blog/the_slabtype_algorithm_part_1_background/"&gt;slabtype algorithm&lt;/a&gt; &lt;a href="http://www.frequency-decoder.com/demo/slabText/"&gt;SlabText&lt;/a&gt; is a nice jQuery plugin to achieve the popular slab header effect. 
I especially like to be able to manually set word combinations and the possibility to set a break point, to disable the effect, if the view port reach a chosen minimum resolution.
Get the source on &lt;a href="https://github.com/freqDec/slabText/"&gt;github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt="SlabTetx js in action" src="https://dl.dropbox.com/u/116832/federicoweber.com/20120903-113939-NT-3-jquery%20slabTetx.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;If you are interested in javascript and typography you should also check Paravel&amp;rsquo;s &lt;a href="http://letteringjs.com"&gt;lettering.js&lt;/a&gt; to fine tune each single letter of a given text.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Avgrund Modal</title>
    <link rel="alternate" href="http://federicoweber.com/notes/jquery_plugins.html"/>
    <id>http://federicoweber.com/notes/jquery_plugins.html</id>
    <published>2012-09-02T02:00:00+02:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;Nice jQuery plugin, based on the &lt;a href="http://lab.hakim.se/avgrund/"&gt;Avgrund&lt;/a&gt; concept by &lt;a href="http://hakim.se"&gt;Hakim&lt;/a&gt;, to display a modal layers showing the depth between it and the page.  &lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>From Twitter and RSS to OmniFocus</title>
    <link rel="alternate" href="http://federicoweber.com/notes/workflow_hazel_ifttt.html"/>
    <id>http://federicoweber.com/notes/workflow_hazel_ifttt.html</id>
    <published>2012-08-31T02:00:00+02:00</published>
    <updated>2015-10-10T19:43:39+02:00</updated>
    <author>
      <name>Federico Weber</name>
    </author>
    <content type="html">&lt;p&gt;I&amp;rsquo;m a voracious user of Flipboard, and during my daily reading I often stumble upon news that I wish to do more with: softwares I wish to try, news to writing about, etc.
To accomplish that i was using a series of &lt;a href="http://ifttt.com"&gt;IFTTT&lt;/a&gt; rules to send this content to my email; with the result of ending up with a quite polluted email inbox.&lt;/p&gt;

&lt;p&gt;Today &lt;a href="https://twitter.com/viticci"&gt;Federico Viticci&lt;/a&gt; published it&amp;rsquo;s, IFTTT and &lt;a href="http://www.noodlesoft.com/hazel.php"&gt;Hazel&lt;/a&gt;, &lt;a href="http://www.macstories.net/tutorials/send-favorite-tweets-to-omnifocus-inbox/"&gt;workflow&lt;/a&gt; to save starred tweets to OmniFocus, leveraging IFTTT and Hazel.
Inspired by that I&amp;rsquo;ve created two IFTTT recipes and two Hazel rules to achieve the same for both twitter and google reader.&lt;/p&gt;

&lt;p&gt;The IFTTT recieps are the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one for &lt;a href="https://ifttt.com/recipes/54060"&gt;twitter&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;one for &lt;a href="https://ifttt.com/recipes/54062"&gt;google reader&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are structured to create a text file inside a specified dropbox folder. The output is designed as a multiline text files.
The first first of which is used as the OF entry &lt;strong&gt;title&lt;/strong&gt; and the rest of the content is passed in as the &lt;strong&gt;note&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The first of the Hazel rules is conceived to run an &lt;strong&gt;appleScript&lt;/strong&gt; to the content of the file—to encode the text in &lt;strong&gt;UTF-8&lt;/strong&gt;, parse it and create the new entry in the OmniFocus &lt;strong&gt;inBox&lt;/strong&gt;.—, set the label to green (to know which files have been processed) and confirm the entry via Notification Center (using the automator action provided by &lt;a href="http://www.automatedworkflows.com/2012/08/26/display-notification-center-alert-automator-action-1-0-0/"&gt;Automated Workflows&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;img alt="The Hazel rule to watch the files" src="https://dl.dropbox.com/u/116832/federicoweber.com/20120831-205446-NT-0-hazel.png" /&gt;&lt;/p&gt;

&lt;p&gt;The appleScript to parse the conent:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- This script is meant to be executed from Hazel
-- It is used to create a new task inside omnifocus 
-- The first paragraph is used for the title, the others are passed in the notes
-- by Federico Weber | http://federicoweber.com

on hazelProcessFile(theFile)
    -- get the Title of the task
    set content to read theFile as «class utf8»
    set title to first paragraph of content

    -- Get the note of the Task
    set noteContent to get replaceText(title, "", content)

    tell application "OmniFocus"
        set theDoc to first document
        tell theDoc
            make new inbox task with properties {name:title, note:noteContent}
        end tell
    end tell

    return true
end hazelProcessFile

-- replaceText method by Buce Phillis 
-- http://foolsworkshop.com/applescript/2008/05/an-applescript-replace-text-method/
on replaceText(find, replace, subject)
    set prevTIDs to text item delimiters of AppleScript
    set text item delimiters of AppleScript to find
    set subject to text items of subject

    set text item delimiters of AppleScript to replace
    set subject to "" &amp;amp; subject
    set text item delimiters of AppleScript to prevTIDs

    return subject
end replaceText
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The second rules is used to erase the file after one week if the file have been properly parsed. I could have used just one rule and delete the content after it have been parsed, but I prefer to keep the files longer to fallback if something goes bad.&lt;/p&gt;

&lt;p&gt;If you found this useful please let me know via &lt;a href="http://twitter.com/FedericoWeber"&gt;twitter&lt;/a&gt; or &lt;a href="https://alpha.app.net/federicoweber"&gt;app.net&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
</feed>
