<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>robb.is</title>
  <link href="http://robb.is/"/>
  <link type="application/atom+xml" rel="self" href="http://robb.is/atom.xml"/>
  






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F&amp;title=Robb+B%C3%B6hnke+-+his+life+and+times&amp;user_id=robb&amp;category=text" />

  <updated>2013-05-17T16:52:19+02:00</updated>
  <id>http://robb.is/</id>
  <author>
    <name>Robert Böhnke</name>
    <email>robb@robb.is</email>
  </author>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/moments-of-peace-in-cheap-rooms</id>
    
    <link type="text/html" rel="alternate" href="https://soundcloud.com/patrick/moments-of-peace-in-cheap-rooms/"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fmoments-of-peace-in-cheap-rooms&amp;title=Moments+of+Peace+in+Cheap+Rooms&amp;user_id=robb&amp;category=text" />

    <title>Moments of Peace in Cheap Rooms</title>
    <updated>2013-05-17T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;https://soundcloud.com/patrick/moments-of-peace-in-cheap-rooms/&quot;&gt;

&lt;/div&gt;

&lt;p&gt;There’s more in the &lt;a href=&quot;https://soundcloud.com/patrick/sets/moments-of-peace-in-cheap-rooms&quot;&gt;set&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/uberspace</id>
    
    <link type="text/html" rel="alternate" href="http://uberspace.de"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fuberspace&amp;title=Uberspace&amp;user_id=robb&amp;category=text" />

    <title>Uberspace</title>
    <updated>2013-05-14T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&quot;https://uberspace.de/&quot;&gt;Uberspace&lt;/a&gt;, a pay-what-you-want hosting platform based in
southern Germany. I set up an account (no email required) and after poking
around for a while, I fell in love and decided to migrate my blog over.&lt;/p&gt;

&lt;p&gt;I still run a &lt;a href=&quot;http://jekyllrb.com/&quot;&gt;jekyll&lt;/a&gt; setup similar to the one on GitHub pages, though now that
I have control over the server-component, I also get run all the jekyll plug-ins
I fancy.&lt;/p&gt;

&lt;p&gt;Your uberspace comes well-prepared with multiple versions of ruby, node and
python and you’re free to install whatever you’re missing with &lt;a href=&quot;http://www.toastball.net/toast/&quot;&gt;toast&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I’m a bit of a noob when it comes to server administration, but support has been
stellar (being on the same time-zone probably helps) and it  shows that
Uberspace is a labor of love.&lt;/p&gt;

&lt;p&gt;❤&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/my-talk-for-uikonf-2013</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/my-talk-for-uikonf-2013"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fmy-talk-for-uikonf-2013&amp;title=My+talk+for+UIKonf+2013+on+ReactiveCocoa&amp;description=My+talk+for+UIKonf+2013.+It%27s+about+ReactiveCocoa%21&amp;user_id=robb&amp;category=text" />

    <title>My talk for UIKonf 2013 on ReactiveCocoa</title>
    <updated>2013-05-03T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;The first &lt;a href=&quot;http://uikonf.com&quot;&gt;UIKonf&lt;/a&gt; yesterday was a lot of fun. &lt;a href=&quot;http://eidhof.nl/&quot;&gt;Chris&lt;/a&gt;, &lt;a href=&quot;http://werkstatt.io/&quot;&gt;Matt&lt;/a&gt;, &lt;a href=&quot;http://www.thewavingcat.com/&quot;&gt;Peter&lt;/a&gt; and the
rest of the team did a great job putting together the conference. You should
come next year.&lt;/p&gt;

&lt;p&gt;I had the honor to give a talk on ReactiveCocoa, the slides of which are
embedded below:&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;https://speakerdeck.com/robb/reactivecocoa&quot;&gt;
    
&lt;/div&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/stop-drawing-dead-fish</id>
    
    <link type="text/html" rel="alternate" href="http://vimeo.com/64895205"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fstop-drawing-dead-fish&amp;title=Bret+Victor+%E2%80%93+Stop+Drawing+Dead+Fish&amp;user_id=robb&amp;category=text" />

    <title>Bret Victor – Stop Drawing Dead Fish</title>
    <updated>2013-05-01T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://vimeo.com/64895205&quot;&gt;
    
&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/thinking-about/how-to-defeat-terrorism</id>
    
    <link type="text/html" rel="alternate" href="http://parkerhiggins.net/2013/04/how-to-defeat-terrorism/"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fthinking-about%2Fhow-to-defeat-terrorism&amp;title=How+to+defeat+terrorism&amp;user_id=robb&amp;category=text" />

    <title>How to defeat terrorism</title>
    <updated>2013-04-16T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://parkerhiggins.net&quot;&gt;Parker&lt;/a&gt; writes about the bombs that struck Boston yesterday:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The cruel measure of “success” for an act of terror, then, isn’t how much harm
is done in the explosion itself, but whether society’s reaction allows the
terrible memories to fester and continue to disrupt our lives.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;[O]ne of the most pernicious effects of terrorism is to undermine the bonds of
trust and good faith in society. So one way to fight that is to celebrate the
first responders and other heroes to come out of today. Celebrating the
stories of kindness from after the bombing, many of which are truly
remarkable. […] Noting that selflessness helps avoid perpetuating a terrible and
cynical impression of human nature.&lt;/p&gt;
&lt;/blockquote&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/leaving-soundcloud</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/leaving-soundcloud"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fleaving-soundcloud&amp;title=Goodbye%2C+SoundCloud&amp;user_id=robb&amp;category=text" />

    <title>Goodbye, SoundCloud</title>
    <updated>2013-02-28T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;After three years with the SoundCloud team, today marks my last day as a
SoundClouder. I joined as an intern in the API team, worked on the Mac app and
later joined the mobile team to work on the iPad, iPhone and Android apps.&lt;/p&gt;

&lt;p&gt;I’ve had a great ride but the time has come for me to find new and bigger
challenges. I’d like to learn a new programming language or two, explore new
paradigms like FRP and do more writing.&lt;/p&gt;

&lt;p&gt;I want to thank all the friends I found at SoundCloud for everything they’ve
taught me over the years. &lt;em&gt;You guys rock&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Here’s a Goodbye Playlist that captures some memorable moments from past three
years at SoundCloud:&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;https://soundcloud.com/robb/sets/goodbye-soundcloud&quot;&gt;

&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/input-and-output</id>
    
    <link type="text/html" rel="alternate" href="http://blog.maybeapps.com/post/42894317939/input-and-output"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Finput-and-output&amp;title=Input+and+Output&amp;user_id=robb&amp;category=text" />

    <title>Input and Output</title>
    <updated>2013-02-18T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;blockquote&gt;
  &lt;p&gt;Functional reactive programming offers a way to once again view our programs
as simply input and output. We get to minimize state while also embracing a
unified view of what our app is doing. It’s all just inputs and outputs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you haven’t noticed by now, I’m a big fan of Reactive Cocoa.&lt;br /&gt;
&lt;a href=&quot;http://blog.maybeapps.com/post/42894317939/input-and-output&quot;&gt;In this blog post&lt;/a&gt;, &lt;a href=&quot;https://github.com/joshaber&quot;&gt;Josh Abernathy&lt;/a&gt; delivers a pretty good
pitch on the benefits of Functional Reactive Programming.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;When our only tool is state, every problem looks like a stateful nail.&lt;/p&gt;
&lt;/blockquote&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/stubbilino</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/stubbilino"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fstubbilino&amp;title=Stubbilino&amp;description=Easy+stubbing+for+Objective-C.&amp;user_id=robb&amp;category=text" />

    <title>Stubbilino</title>
    <updated>2013-02-09T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/robb/Stubbilino&quot;&gt;Stubbilino&lt;/a&gt; is a small library I wrote to help with stubbing in Objective-C. I
was looking for a block-based interface for stubbing to use together with
Specta.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;n&quot;&gt;afterEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Stubbilino&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;removeAllStubs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;A user view controller&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;__block&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;XYUserViewController&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;viewController&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;beforeEach&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;viewController&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;XYUserViewController&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;alloc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;should display the username&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SBStub&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stub&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Stubbilino&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stubObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;viewController&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;stub&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stubMethod&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;@selector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;withBlock&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;kXYTestUser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}];&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;viewController&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;view&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reloadData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;viewController&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;usernameLabel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kXYTestUser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You can also stub class methods, for instance, here is how to swap the default
NSNotificationCenter for a custom instance.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;kt&quot;&gt;Class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SBClassStub&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stub&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Stubbilino&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stubClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSNotificationCenter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;stub&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stubMethod&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;@selector&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;defaultCenter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;withBlock&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;myNotificationCenter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you would like to give Stubbilino a try, you can &lt;a href=&quot;https://github.com/robb/Stubbilino&quot;&gt;find the code on
GitHub&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/jumsoft-pulling-icloud-sync</id>
    
    <link type="text/html" rel="alternate" href="http://www.jumsoft.com/2013/01/response-to-sync-issues/"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fjumsoft-pulling-icloud-sync&amp;title=Jumsoft+pulling+iCloud+sync+from+Money&amp;user_id=robb&amp;category=text" />

    <title>Jumsoft pulling iCloud sync from Money</title>
    <updated>2013-01-31T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.jumsoft.com&quot;&gt;Jumsoft&lt;/a&gt;, the creators of the popular expense-tracker app Money, pulled iCloud
sync in the latest versions of their app.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;All of you surely know many document-based apps that use iCloud and seem to be
doing absolutely fine. That’s why it must seem odd that Jumsoft is utterly
incapable of developing a proper iCloud sync feature. However, the big
difference between Money and those iCloud-friendly apps is that Money uses a
relational database created with Core Data to handle its highly complex data
models.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Apparently, Jumsoft had to make a call here: iCloud or Core Data.&lt;/p&gt;

&lt;p&gt;Since Core Data tends to be an all-in kind of investment, it is likely that most
of their domain objects are generated from the Managed Object Model. Pulling out
Core Data would then prove prohibitively expensive.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/down-with-magic-strings</id>
    
    <link type="text/html" rel="alternate" href="http://www.cimgf.com/2013/01/29/down-with-magic-strings/"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fdown-with-magic-strings&amp;title=Down+with+Magic+Strings%21&amp;user_id=robb&amp;category=text" />

    <title>Down with Magic Strings!</title>
    <updated>2013-01-31T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;/❤ing/ksimagenamed&quot;&gt;I recently linked to KSImageNamed&lt;/a&gt; as a solution to the issue of
auto-completion and of image resources. Today I came across Patrick Hughes’
&lt;a href=&quot;https://gist.github.com/4462966&quot;&gt;script to generate image aliases as part of the build process&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Each time it runs it scans a folder for images. It then compares the image
names to collect the various platform specific and scaled versions and groups
them together. It then #defines a block for each group that loads the image
using imageNamed:, throws an assertion if the image doesn’t load and then
returns the image.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think I like this one even better, since it also validates the the image
resources and points out missing Retina or iPad assets where appropriate.&lt;/p&gt;

&lt;p&gt;Cocoa is unfortunately fairly &lt;a href=&quot;http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html&quot;&gt;stringly typed&lt;/a&gt; and the more we
enforce at compile-time, the fewer errors can happen at run-time.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/nsbrief-with-jspahrsummers</id>
    
    <link type="text/html" rel="alternate" href="http://nsbrief.com/81-justin-spahr-summers/"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fnsbrief-with-jspahrsummers&amp;title=NSBrief+with+Justin+Spahr-Summers&amp;user_id=robb&amp;category=text" />

    <title>NSBrief with Justin Spahr-Summers</title>
    <updated>2013-01-29T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;GitHub for Mac developer &lt;a href=&quot;https://github.com/jspahrsummers&quot;&gt;Justin Spahr-Summers&lt;/a&gt; has been the
featured guest on &lt;a href=&quot;http://nsbrief.com/81-justin-spahr-summers/&quot;&gt;the most recent episode of NSBrief&lt;/a&gt; where he talks
about &lt;em&gt;libextobj&lt;/em&gt;, &lt;em&gt;Mantle&lt;/em&gt; and of course &lt;em&gt;ReactiveCocoa&lt;/em&gt;. If you haven’t heard
of these yet, let me give you a quick run-down:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/jspahrsummers/libextobjc&quot;&gt;libextobj&lt;/a&gt; is a library that seeks to extend Objective-C with patterns found in
other programming languages. I think it’s great to see someone push the envelope
of what’s possible in Objective-C.&lt;/p&gt;

&lt;p&gt;Some of the more practical highlights include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Safe categories&lt;/em&gt;, for adding methods to a class without
overwriting anything.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Simpler and safer key paths&lt;/em&gt; &amp;amp;  &lt;em&gt;Compile-time checking of selectors&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Easier use of weak variables in blocks&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Scope-based resource cleanup&lt;/em&gt;, for automatically cleaning up manually-
allocated memory, file handles, locks, etc..&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;EXTNil&lt;/em&gt;, which is like NSNull, but behaves much more closely to actual nil&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/github/Mantle&quot;&gt;Mantle&lt;/a&gt;, a model framework used in GitHub’s Mac client, takes away some of the
common boilerplate when dealing with JSON APIs by using convention over
configuration. However, it’s not incompatible with Core Data and can easily be
used alongside of it.&lt;/p&gt;

&lt;p&gt;Last but not least, &lt;a href=&quot;https://github.com/github/ReactiveCocoa&quot;&gt;ReactiveCocoa&lt;/a&gt; is a powerful library that brings the
concepts of &lt;a href=&quot;http://en.wikipedia.org/wiki/Functional_reactive_programming&quot;&gt;Reactive Programming&lt;/a&gt; to the land of rounded corners. By
modeling behavior as values that transform over time, rather than mutable state
held in variables, Reactive Programming can greatly improve the locality of your
code and make it more concise.
For this topic alone, the podcast is worth a listen.&lt;/p&gt;

&lt;p&gt;I’ve been investigating ReactiveCocoa at SoundCloud recently and I think it’s a
powerful tool when dealing with asynchronous IO and complex user interactions –
but more on that later.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/ksimagenamed</id>
    
    <link type="text/html" rel="alternate" href="https://github.com/ksuther/KSImageNamed-Xcode"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fksimagenamed&amp;title=KSImageNamed+Xcode+plug-in&amp;user_id=robb&amp;category=text" />

    <title>KSImageNamed Xcode plug-in</title>
    <updated>2013-01-27T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;A common pain-point when dealing with user interfaces in Xcode is making sure
you correctly call &lt;code&gt;-[UIImage imageNamed:]&lt;/code&gt;. Since the compiler does not assist
you with making sure the the image name you pass in actually exists, it’s easy
for typos to sneak in.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href=&quot;https://github.com/ksuther/KSImageNamed-Xcode&quot;&gt;KSImageNamed&lt;/a&gt;, a nifty Xcode plugin that adds auto-completion for exactly
this case:&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
	&lt;img src=&quot;/img/ksimagenamed.png&quot; alt=&quot;KSImageNamed in action&quot; /&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Just type in [NSImage imageNamed: or [UIImage imageNamed: and all the images
in your project will conveniently appear in the autocomplete menu.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Easy as that! Makes me wish Xcode could to this out of the box.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/why-dont-you-leave-your-friends-behind</id>
    
    <link type="text/html" rel="alternate" href="https://soundcloud.com/kodachrome/koda-why-dont-you-leave-your"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fwhy-dont-you-leave-your-friends-behind&amp;title=Koda+%E2%80%93+Why+Don%27t+You+Leave+Your+Friends+Behind&amp;user_id=robb&amp;category=text" />

    <title>Koda – Why Don't You Leave Your Friends Behind</title>
    <updated>2013-01-07T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;https://soundcloud.com/kodachrome/koda-why-dont-you-leave-your&quot;&gt;
    &lt;a href=&quot;https://soundcloud.com/kodachrome/koda-why-dont-you-leave-your&quot;&gt;Koda – Why Don't You Leave Your Friends Behind&lt;/a&gt;
&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/1keyboard</id>
    
    <link type="text/html" rel="alternate" href="http://www.eyalw.com/1keyboard/"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2F1keyboard&amp;title=1Keyboard&amp;user_id=robb&amp;category=text" />

    <title>1Keyboard</title>
    <updated>2013-01-07T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;blockquote&gt;
  &lt;p&gt;1Keyboard to rule them all!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eyalw.com/&quot;&gt;Eyal Wiener&lt;/a&gt;’s awesome &lt;a href=&quot;http://www.eyalw.com/1keyboard/&quot;&gt;1keyboard&lt;/a&gt; allows you use your Mac’s keyboard and
mouse to control other devices. Since it’s using Bluetooth, you’re not limited
to computers, any HID-compatible device will work. I’m using the app to quickly
enter text on my development Nexus 4.&lt;/p&gt;

&lt;p&gt;1Keyboard is in beta right now, and while the responsivenes of the mouse can
surely be improved, it’s already a welcome addition to my Android development
flow.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/thinking-about/overloading-c-functions</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/thinking-about/overloading-c-functions"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fthinking-about%2Foverloading-c-functions&amp;title=Overloading+C+Functions+with+Clang&amp;user_id=robb&amp;category=text" />

    <title>Overloading C Functions with Clang</title>
    <updated>2013-01-01T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Clang, LLVM’s compiler front-end for C-based languages, features a couple of
&lt;a href=&quot;http://clang.llvm.org/docs/LanguageExtensions.html&quot;&gt;interesting language extensions&lt;/a&gt; to C, C++ and Objective-C. You are
probably familiar with auto-synthesis of properties or the new subscripting
syntax.&lt;/p&gt;

&lt;p&gt;One of the lesser known extensions, however, is the &lt;code&gt;__attribute__((overloadable))&lt;/code&gt; annotation.&lt;/p&gt;

&lt;p&gt;While languages like Java and C++ allow you to define multiple functions with
the same name but different arguments, this feature has been absent from C.&lt;/p&gt;

&lt;p&gt;However, using recent versions of Clang you can now rectify this behavior and
since Objective-C is a superset of C, knowing how to use this feature can be
useful even if you rarely venture outside of Cocoa or Cocoa Touch.&lt;/p&gt;

&lt;p&gt;Consider for example these function declarations:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;cp&quot;&gt;#define OVERLOADABLE __attribute__((overloadable))&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;OVERLOADABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NSArray&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSArray&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;OVERLOADABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NSDictionary&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSDictionary&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dictionary&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;We declare two different versions of the classic &lt;code&gt;map&lt;/code&gt; function.&lt;br /&gt;
Instances of NSArray will have a block applied to their elements that takes a
single argument while instances of NSDictionary have both their keys and values
sent to the block.&lt;/p&gt;

&lt;p&gt;The compiler will figure out which &lt;code&gt;map&lt;/code&gt; it needs to call simply based on the
types of the arguments.&lt;/p&gt;

&lt;p&gt;The implementation is pretty straightforward, too:&lt;br /&gt;
&lt;code&gt;-[NSArray enumerateObjectsUsingBlock:]&lt;/code&gt; is used to iterate over all elements.
If the block passed to &lt;code&gt;map&lt;/code&gt; returns &lt;code&gt;nil&lt;/code&gt;, the element is discarded. &lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;n&quot;&gt;OVERLOADABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NSArray&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSArray&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;NSMutableArray&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSMutableArray&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;arrayWithCapacity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;enumerateObjectsUsingBlock&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NSUInteger&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;idx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;BOOL&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mapped&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mapped&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;addObject&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mapped&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}];&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You may want to consider writing a parallel version of &lt;code&gt;map&lt;/code&gt; that makes use of 
&lt;code&gt;-[NSArray enumerateObjectsWithOptions:usingBlock:]&lt;/code&gt; and passes in
&lt;code&gt;NSEnumerationConcurrent&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The implementation for dictionaries looks similar:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;n&quot;&gt;OVERLOADABLE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NSDictionary&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSDictionary&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;NSMutableDictionary&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSMutableDictionary&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dictionaryWithCapacity&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dict&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;enumerateKeysAndObjectsUsingBlock&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;BOOL&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mapped&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mapped&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mapped&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}];&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now we have a nice and clean way to map over Cocoa’s most prevalent data
structures:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;n&quot;&gt;NSArray&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;numbers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;@1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;@2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;@3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;@4&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;NSArray&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;doubled&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;numbers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSNumber&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSNumber&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;doubleValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;NSDictionary&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;@&amp;quot;username&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;@&amp;quot;robb&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;@&amp;quot;website&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;@&amp;quot;http://robb.is&amp;quot;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Implementing &amp;#39;each&amp;#39; and its concurrent equivalent&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// is left as an exercise to the reader.&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;NSLog&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;%@: %@&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I think function overloading is a welcome addition to C and it goes to show how
knowing the underpinnings of Objective-C can help you write better and more
concise code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; &lt;a href=&quot;https://twitter.com/nicklockwood&quot;&gt;Nick Lockwood&lt;/a&gt; raised the point that &lt;code&gt;map&lt;/code&gt; may be
better suited for a category. When I came up with this example, I was also
considering an &lt;code&gt;each&lt;/code&gt; implementation that could deal with
&lt;code&gt;id&amp;lt;NSFastEnumeration&amp;gt;&lt;/code&gt;. E.g.:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;n&quot;&gt;OVERLOADABLE&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSFastEnumeration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;list&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;OVERLOADABLE&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSArray&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;OVERLOADABLE&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSDictionary&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dict&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That being said, if you’re looking for a solid and well tested map category,
check out &lt;a href=&quot;https://github.com/pandamonia/BlocksKit&quot;&gt;BlocksKit&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/jeeper-creeper</id>
    
    <link type="text/html" rel="alternate" href="https://soundcloud.com/sinkane/jeeper-creeper"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fjeeper-creeper&amp;title=Sinkane+-+Jeeper+Creeper&amp;user_id=robb&amp;category=text" />

    <title>Sinkane - Jeeper Creeper</title>
    <updated>2012-12-10T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;https://soundcloud.com/sinkane/jeeper-creeper&quot;&gt;

&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/soundcloud-for-android</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/soundcloud-for-android"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fsoundcloud-for-android&amp;title=The+new+SoundCloud+Android+App&amp;user_id=robb&amp;category=text" />

    <title>The new SoundCloud Android App</title>
    <updated>2012-12-05T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Today, we are releasing the new version of the &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.soundcloud.android&quot;&gt;SoundCloud Android app&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;image-container&quot;&gt;
  &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.soundcloud.android&quot;&gt;
    &lt;img src=&quot;/img/galaxy.png&quot; alt=&quot;The new SoundCloud Android app&quot; /&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;This is the first version that I contributed to. I made sure the onboarding
process is smooth and the new navigation is good looking. &lt;/p&gt;

&lt;p&gt;Kudos to &lt;a href=&quot;http://twitter.com/jberkel&quot;&gt;Jan&lt;/a&gt; and &lt;a href=&quot;https://soundcloud.com/jonathanschmidt&quot;&gt;Jon&lt;/a&gt; for doing a great job on this version.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/auf-dem-pfad-der-daemmerung</id>
    
    <link type="text/html" rel="alternate" href="http://soundcloud.com/rockotronic/pfad-der-d-mmerung"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fauf-dem-pfad-der-daemmerung&amp;title=Auf+dem+Pfad+der+D%C3%A4mmerung&amp;user_id=robb&amp;category=text" />

    <title>Auf dem Pfad der Dämmerung</title>
    <updated>2012-11-30T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Tocotronic auf SoundCloud!&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/rockotronic/pfad-der-d-mmerung&quot;&gt;

&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/hotline-miami</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/hotline-miami"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fhotline-miami&amp;title=Hotline+Miami&amp;user_id=robb&amp;category=text" />

    <title>Hotline Miami</title>
    <updated>2012-11-01T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;The soundtrack to &lt;a href=&quot;http://cactusquid.com/&quot;&gt;Cactus&lt;/a&gt;’ latest game, &lt;a href=&quot;http://hotlinemiami.com/&quot;&gt;Hotline Miami&lt;/a&gt; is just mind blowing:&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;https://soundcloud.com/devolverdigital/sets/hotline-miami-official&quot;&gt;

&lt;/div&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/on-burritos-sandwiches-and-the-law</id>
    
    <link type="text/html" rel="alternate" href="http://parkerhiggins.net/2012/09/on-burritos-sandwiches-and-the-law/"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fon-burritos-sandwiches-and-the-law&amp;title=On+Burritos%2C+Sandwiches%2C+and+the+Law&amp;user_id=robb&amp;category=text" />

    <title>On Burritos, Sandwiches, and the Law</title>
    <updated>2012-09-10T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;blockquote&gt;
  &lt;p&gt;Is a burrito a sandwich? We know what the judges say.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My buddy Parker completely in his element, talking about the intersection of law
and mexican cuisine:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Posner and Scalia have differing opinions on the 2006 landmark burrito law
case White City Shopping Center, LP v. PR Restaurants, LLC … in which a
Massachusetts judge held that a burrito is not a sandwich.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A must read. (Man, I do miss Cancun right now)&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/coffeescript-source-maps</id>
    
    <link type="text/html" rel="alternate" href="http://ryanflorence.com/2012/coffeescript-source-maps/"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fcoffeescript-source-maps&amp;title=CoffeeScript+Source+Maps&amp;user_id=robb&amp;category=text" />

    <title>CoffeeScript Source Maps</title>
    <updated>2012-09-08T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://ryanflorence.com/2012/coffeescript-source-maps/&quot;&gt;Ryan Florence&lt;/a&gt; shows you how to teach Chrome how your JavaScript
files map to their CoffeeScript sources.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Debugging CoffeeScript, the most popular and strongest argument for not using
it in the browser, is now 90% solved.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I never had problems finding the corresponding CoffeeScript line for my
JavaScript. However, it’s one of the most common points people bring up
against CoffeeScript and this pretty much makes it moot.&lt;/p&gt;

&lt;p&gt;Source maps are one of the first tangible benefits of Michael Ficarra’s awesome
endeavor to write &lt;a href=&quot;https://github.com/michaelficarra/CoffeeScriptRedux/&quot;&gt;a new and better CoffeeScript compiler&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/ponydebugger</id>
    
    <link type="text/html" rel="alternate" href="http://corner.squareup.com/2012/08/ponydebugger-remote-debugging.html"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fponydebugger&amp;title=PonyDebugger+%E2%80%93+Remote+Debugging+for+iOS&amp;user_id=robb&amp;category=text" />

    <title>PonyDebugger – Remote Debugging for iOS</title>
    <updated>2012-08-30T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://corner.squareup.com/2012/08/ponydebugger-remote-debugging.html&quot;&gt;PonyDebugger&lt;/a&gt; is a powerful new tool released by the Square iOS
team today. It consists of a client library and server component to remotely
debug the network traffic and Core Data stack of your application&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/ponydebugger.png&quot; class=&quot;float right&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;PonyDebugger acts as a powerful network debugger, allowing users the ability
to see an application’s network requests in real time. This means that it
reports not only all request and response headers, but how long each request
takes, associated cookies and the data itself if it is human-readable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What’s especially nice is, that PonyDebugger is built on top of the WebKit Web
Inspector. Web developers will feel &lt;em&gt;right at home&lt;/em&gt; and it’s a testament to the
great work done by the WebKit team.&lt;/p&gt;

&lt;p&gt;If your app communicates with one API or another, you’re &lt;em&gt;of course&lt;/em&gt; using SSL
to shield your user’s data against prying eyes. However, debugging an
application that uses encrypted communication can sometimes be a hassle –
encryption has to be turned off for debug builds or a specific, trusted
certificate has to be installed. With PonyDebugger, there is now an alternative:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;PonyDebugger forwards network traffic without sniffing it. This means that
traffic sent over a secure protocol (https) is reported.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’ve been using &lt;a href=&quot;http://www.charlesproxy.com/&quot;&gt;Charles Proxy&lt;/a&gt; for this and while I like it, I’m
looking forward to having something more tightly integrated with the iOS
platform.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;But there’s more,&lt;/em&gt; PonyDebugger can also be used to inspect your Core Data
store. This makes browsing your data a breeze and should considerably speed up
your Core Data debugging.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/rebuilding-facebook-for-ios</id>
    
    <link type="text/html" rel="alternate" href="https://www.facebook.com/notes/facebook-engineering/under-the-hood-rebuilding-facebook-for-ios/10151036091753920"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Frebuilding-facebook-for-ios&amp;title=Under+the+Hood+%E2%80%93+Rebuilding+Facebook+for+iOS&amp;user_id=robb&amp;category=text" />

    <title>Under the Hood – Rebuilding Facebook for iOS</title>
    <updated>2012-08-23T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Facebook finally released a rewrite of their mobile application, eschewing
WebViews in favor of a fully native experience.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://techcrunch.com/2011/06/09/facebook-sofa/&quot;&gt;Former SOFA developer&lt;/a&gt; Jonathan Dann writes:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The development of this new app signals a shift in how Facebook is building
mobile products, with a focus on digging deep into individual platforms. To
understand how we approached this shift, let’s take a look at how Facebook has
evolved on mobile.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There are some interesting tidbits in there:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;To give another example, we use Core Text to lay out many of our strings, but
layout calculations can quickly become a bottleneck. With our new iOS app, […]
we asynchronously calculate the sizes for all these strings, cache our
CTFramesetters […] and then use all these calculations later when we present
the story into our UITableView.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not having to layout strings yourself is probably the reason why a lot of
otherwise native applications use WebViews. They use a similar approach with
table view cells, too:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Firstly, when we do our initial asynchronous layout calculations, we also
store the height of the story in Core Data. In doing so, we completely avoid
layout calculation in -tableView:heightForRowAtIndexPath:. Secondly, we’ve
split up our “story” model object. We only fetch the story heights […] from
disk on startup. Later, we fetch the rest of the story data, and any more
layout calculations we have to do are all performed asynchronously.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you care about performance on iOS, make sure to take a lot &lt;a href=&quot;https://www.facebook.com/notes/facebook-engineering/under-the-hood-rebuilding-facebook-for-ios/10151036091753920&quot;&gt;at the
article&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/an-introduction-to-scenekit</id>
    
    <link type="text/html" rel="alternate" href="http://iphonedevelopment.blogspot.de/2012/08/an-introduction-to-scenekit.html"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fan-introduction-to-scenekit&amp;title=An+Introduction+to+SceneKit&amp;user_id=robb&amp;category=text" />

    <title>An Introduction to SceneKit</title>
    <updated>2012-08-22T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;blockquote&gt;
  &lt;p&gt;SceneKit provides some functionality for creating scenes from scratch right in
your code, but is primarily designed for working with 3D scene data&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This looks pretty interesting, I hope SceneKit makes it to iOS next year.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/ipod-shuffle</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/ipod-shuffle"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fipod-shuffle&amp;title=iPod+Shuffle&amp;description=An+iPod+Shuffle+built+with+HTML+%26+CSS&amp;user_id=robb&amp;category=text" />

    <title>iPod Shuffle</title>
    <updated>2012-07-24T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;As a small hack over the last couple of days, I’ve built an &lt;a href=&quot;/hacking-on/ipod-shuffle&quot;&gt;iPod Shuffle&lt;/a&gt;
with CSS and HTML. I’ve wired up the controls to play a couple of tracks from
SoundCloud.&lt;/p&gt;

&lt;div&gt;
  &lt;a href=&quot;/hacking-on/ipod-shuffle&quot;&gt;
    &lt;img src=&quot;/img/ipod-shuffle.png&quot; /&gt;
  &lt;/a&gt;
&lt;/div&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/white-keys</id>
    
    <link type="text/html" rel="alternate" href="http://vimeo.com/45249615"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fwhite-keys&amp;title=Chilly+Gonzales+-+White+Keys&amp;user_id=robb&amp;category=text" />

    <title>Chilly Gonzales - White Keys</title>
    <updated>2012-07-12T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://vimeo.com/45249615&quot; data-color=&quot;E9E9E9&quot;&gt;
  
&lt;/div&gt;

&lt;p&gt;/via &lt;a href=&quot;http://aneuu.com/&quot;&gt;Jens&lt;/a&gt;&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/css-envelopes</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/css-envelopes"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fcss-envelopes&amp;title=How+to+build+awesome+CSS+Envelopes&amp;description=A+small+tutorial+how+to+build+nice-looking+envelopes+with+HTML+%26+CSS&amp;user_id=robb&amp;category=text" />

    <title>How to build awesome CSS Envelopes</title>
    <updated>2012-07-10T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Even though I am an iOS Engineer by trade, I also have a passion for front-end
developement. When I came across &lt;a href=&quot;http://dribbble.com/shots/473676--2-Dribbble-Invites-Available&quot;&gt;this shot on dribbble&lt;/a&gt; the other
day, I started to wonder if I could create an awesome looking envelope with
nothing but HTML and CSS and the awesome &lt;a href=&quot;http://symbolset.com/#social&quot;&gt;Symbolset Social font&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/hacking-on/css-envelopes&quot;&gt;This&lt;/a&gt; is what I came up with:&lt;/p&gt;

&lt;div&gt;
  &lt;a href=&quot;/hacking-on/css-envelopes&quot;&gt;
    &lt;img src=&quot;/img/css-envelopes.png&quot; /&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;So, let’s have a look at the code, shall we?&lt;/p&gt;

&lt;h3 id=&quot;first-things-first--the-html&quot;&gt;First things first – the HTML&lt;/h3&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;html&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;envelope&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;https://twitter.com/ceterum_censeo&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;span&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;seal twitter ss-social-regular&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;span&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;embossed&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;twitter&lt;span class=&quot;nt&quot;&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The envelopes are simple &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;-tags. That’s semantically appropriate and makes
the whole envelope clickable without any nasty tricks.&lt;/p&gt;

&lt;p&gt;We use the outer &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; to model the seal on the envelope. The inner &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;
represents the embossed area of the seal.&lt;/p&gt;

&lt;p&gt;As you can probably already tell, the real magic happens in the CSS!&lt;/p&gt;

&lt;h3 id=&quot;a-pretty-clever-font&quot;&gt;A pretty clever font&lt;/h3&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;&lt;span class=&quot;k&quot;&gt;@font-face&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;font-family&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;SSSocial&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;./ss-social-regular.eot&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;./ss-social-regular.eot?#iefix&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;embedded-opentype&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
       &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;./ss-social-regular.woff&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;woff&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
       &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;./ss-social-regular.ttf&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;truetype&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
       &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;./ss-social-regular.svg#SSSocialRegular&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;format&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;svg&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;font-weight&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;normal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;font-style&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;normal&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;First, we define the custom &lt;a href=&quot;http://symbolset.com/#social&quot;&gt;Symbolset Social font&lt;/a&gt;. It aliases the
names of certain social networks and replaces them with their respective logos,
for example ‘twitter’, when set in SSSocial, turns into a little bird:
&lt;span class=&quot;ss-social&quot;&gt;twitter&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;It’s the same font I use here on my site and I urge you to check it out.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;.ss-social-regular&lt;/code&gt; class is just used to enable the Symbolset Social font
on specific tags, we only use them in the inner &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;s, no big deal.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;&lt;span class=&quot;nc&quot;&gt;.ss-social-regular&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;font-family&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;SSSocial&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;font-style&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;normal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;font-weight&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;normal&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;text-decoration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rendering&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;optimizeLegibility&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;white-space&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;nowrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;webkit&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;font&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;feature&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;liga&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;dlig&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;moz&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;font&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;feature&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;liga=1, dlig=1&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;moz&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;font&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;feature&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;liga&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;dlig&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;font&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;feature&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;liga&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;dlig&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;font&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;feature&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;liga&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;dlig&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;font&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;feature&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;settings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;liga&amp;quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;dlig&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id=&quot;the-envelope&quot;&gt;The envelope&lt;/h3&gt;

&lt;p&gt;Now, let’s have a look at the &lt;code&gt;.envelope&lt;/code&gt; class&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;&lt;span class=&quot;nc&quot;&gt;.envelope&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;m&quot;&gt;24&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;m&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;relative&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So far, this is all pretty basic, we turn the &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; into a block element and set
its dimensions. As we later want to position the seal absolutely within in the
envelope, we need to set the envelope’s &lt;code&gt;position&lt;/code&gt; attribute to &lt;code&gt;relative&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To style the envelope, we first define a background color.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;  &lt;span class=&quot;nt&quot;&gt;background-color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;#F5E6DD&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This is where it gets tricky: we set no less than seven background images on the
envelope to draw its paper texture and the two flaps.&lt;/p&gt;

&lt;p&gt;Background images are defined top-to-bottom, here are the first two:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;  &lt;span class=&quot;nt&quot;&gt;background-image&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-webkit-linear-gradient&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;235&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.5deg&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.7&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%),&lt;/span&gt;
                    &lt;span class=&quot;nt&quot;&gt;-webkit-linear-gradient&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-235&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.5deg&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.7&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;These first two linear gradients make up the bottom flap of the envelope.
You see the gradient is mostly transparent, only a thin strip around the 50%
mark is used to draw the actual flap. I’ve settled on the 235.5 degrees of
rotation after experimenting a bit with it.&lt;/p&gt;

&lt;p&gt;The next two gradients look similar.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;                    &lt;span class=&quot;nt&quot;&gt;-webkit-linear-gradient&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-235&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.5deg&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.5&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%),&lt;/span&gt;
                    &lt;span class=&quot;nt&quot;&gt;-webkit-linear-gradient&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;235&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.5deg&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;48&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;225&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.5&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Notice that I reversed their colors as this they draw the top flap.&lt;/p&gt;

&lt;p&gt;This is what the envelope looks like, so far:&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/envelope-1.png&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;You’ll notice that the four gradients overlap each other, forming two lines
instead of four. We’ll fix that in a bit.&lt;/p&gt;

&lt;p&gt;We want our envelope to have a more realistic appearance, so we apply a vertical
and a horizontal gradient to add some shading.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;                    &lt;span class=&quot;nt&quot;&gt;-webkit-linear-gradient&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.4&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;88&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;95&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.4&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%),&lt;/span&gt;
                    &lt;span class=&quot;nt&quot;&gt;-webkit-linear-gradient&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.20&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.00&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.00&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.20&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;88&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.30&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;95&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                            &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;41&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;31&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.50&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To top it off, I encoded a noise texture as a data-url to embed it straight into
my stylesheet. (Some may consider this cheating, I couldn’t care less…)&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;                    &lt;span class=&quot;nt&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAA1CAYAAADRarJRAAAD8GlDQ1BJQ0MgUHJvZmlsZQAAOMuNVd1v21QUP4lvXKQWP6Cxjg4Vi69VU1u5GxqtxgZJk6XpQhq5zdgqpMl1bhpT1za2021Vn/YCbwz4A4CyBx6QeEIaDMT2su0BtElTQRXVJKQ9dNpAaJP2gqpwrq9Tu13GuJGvfznndz7v0TVAx1ea45hJGWDe8l01n5GPn5iWO1YhCc9BJ/RAp6Z7TrpcLgIuxoVH1sNfIcHeNwfa6/9zdVappwMknkJsVz19HvFpgJSpO64PIN5G+fAp30Hc8TziHS4miFhheJbjLMMzHB8POFPqKGKWi6TXtSriJcT9MzH5bAzzHIK1I08t6hq6zHpRdu2aYdJYuk9Q/881bzZa8Xrx6fLmJo/iu4/VXnfH1BB/rmu5ScQvI77m+BkmfxXxvcZcJY14L0DymZp7pML5yTcW61PvIN6JuGr4halQvmjNlCa4bXJ5zj6qhpxrujeKPYMXEd+q00KR5yNAlWZzrF+Ie+uNsdC/MO4tTOZafhbroyXuR3Df08bLiHsQf+ja6gTPWVimZl7l/oUrjl8OcxDWLbNU5D6JRL2gxkDu16fGuC054OMhclsyXTOOFEL+kmMGs4i5kfNuQ62EnBuam8tzP+Q+tSqhz9SuqpZlvR1EfBiOJTSgYMMM7jpYsAEyqJCHDL4dcFFTAwNMlFDUUpQYiadhDmXteeWAw3HEmA2s15k1RmnP4RHuhBybdBOF7MfnICmSQ2SYjIBM3iRvkcMki9IRcnDTthyLz2Ld2fTzPjTQK+Mdg8y5nkZfFO+se9LQr3/09xZr+5GcaSufeAfAww60mAPx+q8u/bAr8rFCLrx7s+vqEkw8qb+p26n11Aruq6m1iJH6PbWGv1VIY25mkNE8PkaQhxfLIF7DZXx80HD/A3l2jLclYs061xNpWCfoB6WHJTjbH0mV35Q/lRXlC+W8cndbl9t2SfhU+Fb4UfhO+F74GWThknBZ+Em4InwjXIyd1ePnY/Psg3pb1TJNu15TMKWMtFt6ScpKL0ivSMXIn9QtDUlj0h7U7N48t3i8eC0GnMC91dX2sTivgloDTgUVeEGHLTizbf5Da9JLhkhh29QOs1luMcScmBXTIIt7xRFxSBxnuJWfuAd1I7jntkyd/pgKaIwVr3MgmDo2q8x6IdB5QH162mcX7ajtnHGN2bov71OU1+U0fqqoXLD0wX5ZM005UHmySz3qLtDqILDvIL+iH6jB9y2x83ok898GOPQX3lk3Itl0A+BrD6D7tUjWh3fis58BXDigN9yF8M5PJH4B8Gr79/F/XRm8m241mw/wvur4BGDj42bzn+Vmc+NL9L8GcMn8F1kAcXi1s/XUAAAACXBIWXMAAAsTAAALEwEAmpwYAAABbmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpCYWcvPgogICAgICAgICA8L2RjOnN1YmplY3Q+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrlPw1BAAAFcUlEQVRo3o2auU5rQRBE+yv4CYfv/yMSEhISEhIShISQkBABJDzaUqHjonrmBle2587Sa/Uyru/v76uf5/Tz/Ovn7e3t/Pn09PTv4+Pjd+zr6+v8XWP6TM/t7e3ve1+nvTm/3/UZ/cl1Wvvy8uJnnJ6fn6/q8/PzxJf9/QiBZJSPDuTz+Ph4QfRqDt81LTojrDkVuU8Ea1MSqo36nSR2fX19Jo6H9DsKRtLs+ZqXGOG4C0j79Xj5oknaPu5EuTZcYpyz02jvPTElYfZTlAK5lNT66QU8kGt2jGpea0UHp/du186AtMr9arLVZM+Tw+0eNyd31JUv8bvvUyT84eHhgrAep/r5TuNJisk0JufuM309LSH5WiS+D7y/v99K0gkTk3T6leaoPcIj93A7l1nxfYlzctVjrrokSSew14l52md/Bqz+M296uF6COdv8TkKEpoQcfvCEJJMAEjwyUHENY9BZ8rLlCXcTMcRrjtEEfO0ErQ4A/o5oJAH0/P5dyQlXaDNt7mtIrEtdpsr5/Z5aPoKCtbPJlbNOwUR7MRJrTITrt8MufYBnUQA6t/zAPshNIhGmxI0RzyW0c8QkFEk27evwXJOzrDYWEx40pPq7u7vorIkZ2e/ElJiQUKmtohN4RkeC3EScEEqq57Z5KLWYAhjPSLFjlTCeHdadKCVYLhkxm/A+zdWYC2ACBWnJCdbvX8n3JKlZWkj4O220s2GCgWecFIzDrjC9v7f2mBxKm5XUrsU0qaGi+YMIKyZ2ObtXbA6ZYkjzakKEVATQNqeEzE0lBSMSSN9Ids/g5yZ8UYy0+bB2naJrYrCJUGXlEtehU/DZaYVmTYZKnJOjnT1PeQlzDxE91ase7OjUq8BJky73Ytoac3lWVsrqkh+IWKbW8icX0JQCC8GS9i6CVFLzFCyStLWp1wE+t9+v0l/GkxQ/kj+U8o6UAMmhqI2pnEsRlD0gotcRnPe407//VFJuMqk+naTlBxzJ4903aEJKOY7GlPJOV2oSqTx0IlJhzci7iqoT1LJuduZjDTvh8yroeDrgxQZNhoVOqgfkoJ4HMSARJi9yG3oybdvVm7JMHn4kRZjQ6cjjWiw/mI6RJJWwd8JjaVJOz/2nDoRHV5quzylxs8r4KN2U2srRHUm8YTRJlI7vaciUGJ6DlKs7Fc2MeqnH4sU7JZYg1osbMsaiI+X6EnLPq1VLbupc+fubm5uxHuWYDp4qKu/YJXunIEtcNHdevrnNybHZIfPDJgLShcKqyeQFfNJUkaBdb9x7l17O0R7ppEfa5EceN8Fz3yYlYm5GCXXEwK7TmyLuLp6w2Pb+zkXHzHvkmixb3uUYq87DCjEmje7iyp8I632Syak88gkNkgaYt/u9V+rQeZfa8yIvaCpleVSZw1qKCZPtTg2klH1yjPN5Pok/pwdcyAIjNU130fVI6y+hWWpeHUGh2i2iY2ohCwRJZJWnH2mT0Ly8Ykoo9ZuYHbljorn4/NR7WaHN6vJAhUtK+Nz+a5e5Mf/mRqxLp7gwOXyCS7YGadfSSjLZcg+ewvzqzmjXknbTcCa8+CGqub9wbU2ZoOcgDWFEn1WqnGz+iB9M1zxTv6cmQojjRwoGRyxK1pErtTUSmvjZvq52F1q0v5Si8jbRtZUuCFYXbh6JmRp4Vdbn1urmYZWY7eDPr9o9K0x1Q1pD4fjfWSpdEaYqitc+iYCk9iMtlNUYb+YToNQULI6o2m9DdsXz6ndiYndPW9Otg2/i5dkU2FKnoIucqW03RVzfX8GLAFCvr68nZofsWvEmYvKDVUc3EaRWnv7C4kTuYFbnNN31/v5+JQYmk/C7IuX5freazGxq36WCR0T6fuk/Zj/P1X8GU07lyzj+XAAAAABJRU5ErkJggg==&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Our envelope looks a lot better now:&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/envelope-2.png&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;Next up: positioning the backgrounds.&lt;/p&gt;

&lt;p&gt;It took me a while until I found good positions for the flaps, but I found these
values to work fine.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;  &lt;span class=&quot;nt&quot;&gt;background-position&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;105&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;-5&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                       &lt;span class=&quot;nt&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-80&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                         &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-80&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                       &lt;span class=&quot;nt&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                       &lt;span class=&quot;nt&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                       &lt;span class=&quot;nt&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;nt&quot;&gt;background-size&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;12rem&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;12rem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                   &lt;span class=&quot;nt&quot;&gt;12rem&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;12rem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                   &lt;span class=&quot;nt&quot;&gt;12rem&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;12rem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                   &lt;span class=&quot;nt&quot;&gt;12rem&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;12rem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                   &lt;span class=&quot;nt&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                   &lt;span class=&quot;nt&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                   &lt;span class=&quot;nt&quot;&gt;auto&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;nt&quot;&gt;background-repeat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;no-repeat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;no-repeat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;no-repeat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;no-repeat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;repeat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;repeat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;repeat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You’ll notice that I set &lt;code&gt;background-position&lt;/code&gt;, &lt;code&gt;background-size&lt;/code&gt; and
&lt;code&gt;background-repeat&lt;/code&gt; for the first four backgrounds (the flap-gradients) and then
restore the default values for the other three.&lt;/p&gt;

&lt;p&gt;Last but not least, we add some more subtle shadows, both inner and outer and
turn up the border radius to avoid nasty paper cuts.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;  &lt;span class=&quot;nt&quot;&gt;box-shadow&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;1px&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.6&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
              &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;2px&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
              &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-3px&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;3px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
              &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;2px&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;3px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.4&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;),&lt;/span&gt;
              &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;6px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;12px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;nt&quot;&gt;border-radius&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.5rem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;nt&quot;&gt;text-decoration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now our envelope actually looks pretty nice.&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/envelope-3.png&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;Now, the flaps may look a bit odd, but we’ll just cover that up with the seal
and keep that between the two of us, okay?&lt;/p&gt;

&lt;h3 id=&quot;the-seal&quot;&gt;The seal&lt;/h3&gt;

&lt;p&gt;The seal itself is actually pretty straight forward. First, we position it in
the roughly in center of the envelope.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;&lt;span class=&quot;nc&quot;&gt;.seal&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;absolute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;m&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;      &lt;span class=&quot;m&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;m&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;-2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Easy! Now we set the &lt;code&gt;border-radius&lt;/code&gt; property, wax seals are not square after
all.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;  &lt;span class=&quot;nt&quot;&gt;border-radius&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.2rem&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.9rem&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.3rem&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.0rem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I defined four different radii to create the illusion of molten wax that you
wouldn’t get with a perfect circle.&lt;/p&gt;

&lt;p&gt;Let’s add a dash of color and some more highlights…&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;  &lt;span class=&quot;nt&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;nf&quot;&gt;#00ACED&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;        &lt;span class=&quot;nf&quot;&gt;#00ACED&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;border-color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;#00ACED&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;nt&quot;&gt;box-shadow&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-2px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;4px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
              &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;3px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;3px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;255&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.6&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
              &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;1px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;5px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.8&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;nt&quot;&gt;text-align&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;line-height&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.2rem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;font-size&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.2rem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;nt&quot;&gt;text-shadow&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;1px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;2px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.6&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and we’re almost there.&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/envelope-4.png&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;Remember the &lt;code&gt;.embossed&lt;/code&gt; class from the beginning? Now it’s time to style it!
First the position,&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;&lt;span class=&quot;nc&quot;&gt;.seal&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;.embossed&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;m&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;m&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;k&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;absolute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;      &lt;span class=&quot;m&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;m&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;c&quot;&gt;/* ... */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;then we add some shadows to achieve the desired embossed effect…&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;      &lt;span class=&quot;nt&quot;&gt;box-shadow&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;-2px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;2px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;3px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;3px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                  &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;   &lt;span class=&quot;nt&quot;&gt;1px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;2px&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.6&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

      &lt;span class=&quot;nt&quot;&gt;border-radius&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;999rem&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and finally, the background gradient. I chose a semi-transparent grey that I
laid over the background of the seal. This makes customization easier as I only
need to re-color the seal if I want a different kind of wax.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;      &lt;span class=&quot;nt&quot;&gt;background-image&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-webkit-linear-gradient&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
                                                &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%,&lt;/span&gt;
                                                &lt;span class=&quot;nt&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;51&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%);&lt;/span&gt;
    &lt;span class=&quot;err&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now we’re pretty much finished:&lt;/p&gt;

&lt;div class=&quot;img-wra&quot;&gt;
  &lt;img src=&quot;/img/envelope-5.png&quot; /&gt;
&lt;/div&gt;

&lt;h3 id=&quot;but-wheres-the-drop&quot;&gt;But, where’s the drop?!&lt;/h3&gt;

&lt;p&gt;As a small bonus, let’s add two wax drops next to the seal to make it look even
more awesome.&lt;/p&gt;

&lt;p&gt;We’re going to use the &lt;code&gt;:before&lt;/code&gt; and &lt;code&gt;:after&lt;/code&gt; pseudo-selectors to avoid adding
more tags to our markup. This first piece of code defines the common attributes
of both drops:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;&lt;span class=&quot;nc&quot;&gt;.seal&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:before&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;.seal&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:after&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;display&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;block&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;absolute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;line-height&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;font-size&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;inherit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;k&quot;&gt;hidden&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;box&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shadow&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3px&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;  &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;   &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt;
              &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3px&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3px&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rgba&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;205&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;inset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I set the &lt;code&gt;background&lt;/code&gt; property to &lt;code&gt;inherit&lt;/code&gt; so that the drops will end up
having the same color as the seal.&lt;/p&gt;

&lt;p&gt;We want both drops to look different so we set different values for &lt;code&gt;width&lt;/code&gt;,
&lt;code&gt;height&lt;/code&gt; etc.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;css&quot;&gt;&lt;span class=&quot;nc&quot;&gt;.seal&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:after&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;      &lt;span class=&quot;m&quot;&gt;84&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;m&quot;&gt;94&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;border&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;radius&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;95&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;nc&quot;&gt;.seal&lt;/span&gt;&lt;span class=&quot;nd&quot;&gt;:before&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;top&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;      &lt;span class=&quot;m&quot;&gt;103&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;m&quot;&gt;85&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;border&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;radius&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;95&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And here is the final result:&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/envelope-6.png&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;I hope you enjoyed this small tutorial, if you have any feedback, feel free to
send me a tweet &lt;a href=&quot;https://twitter.com/ceterum_censeo&quot;&gt;@ceterum_censeo&lt;/a&gt; or an &lt;a href=&quot;&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#114;&amp;#111;&amp;#098;&amp;#098;&amp;#064;&amp;#114;&amp;#111;&amp;#098;&amp;#098;&amp;#046;&amp;#105;&amp;#115;&quot;&gt;e-mail&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can also &lt;a href=&quot;https://flattr.com/thing/773436/CSS-Envelopes&quot;&gt;flattr this&lt;/a&gt;, if you fancy.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/the-paellas-long-night-comes</id>
    
    <link type="text/html" rel="alternate" href="http://thepaella-s.tumblr.com/"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fthe-paellas-long-night-comes&amp;title=The+Paellas&amp;user_id=robb&amp;category=text" />

    <title>The Paellas</title>
    <updated>2012-07-03T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;I just discovered this shoe-gazing gem from Osaka, Japan&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/the-paellas.jpg&quot; /&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;THE PAELLAS -we are indie LO-Fi guiter “NITETIME SURF POP” band in Japan,
Osaka! please checking our sound!!&lt;/p&gt;

  &lt;p&gt;We formed in November 2009 in Osaka.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;https://soundcloud.com/thepaella-s/long-night-comes&quot;&gt;

&lt;/div&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;https://soundcloud.com/thepaella-s/distance&quot;&gt;

&lt;/div&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/underscore.m</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/underscore.m"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Funderscore.m&amp;title=Underscore.m&amp;description=An+Objective-C+library+for+manipulating+data+structures.&amp;user_id=robb&amp;category=text" />

    <title>Underscore.m</title>
    <updated>2012-07-02T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;A couple of weeks ago, I started working on &lt;a href=&quot;http://underscorem.org&quot;&gt;Underscore.m&lt;/a&gt;. It’s a
small utility library that helps you with manipulating data structures in
Objective-C.&lt;/p&gt;

&lt;p&gt;Here’s a quick example:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// An array of tweets we obtained by deserializing the&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// JSON data from the twitter API&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;NSArray&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;processed&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tweets&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Let&amp;#39;s make sure that we only operate on NSDictionaries,&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// you never know with these APIs ;-)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Underscore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;isDictionary&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Remove all tweets that are in English&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;BOOL&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSDictionary&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tweet&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tweet&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;valueForKey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;iso_language_code&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;isEqualToString&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;en&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Create a simple string representation for every tweet&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSDictionary&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tweet&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tweet&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;valueForKey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;from_user_name&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tweet&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;valueForKey&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;text&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stringWithFormat&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;%@: %@&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you know Objective-C, you can probably tell that it uses a somewhat
unconventional syntax. Underscore.m eschews square brackets as they are not well
suited for chaining. [[[[[[[[[They will pile up at the beginning of your call
chain and add unnecessary noise.&lt;/p&gt;

&lt;p&gt;Don’t get me wrong, I think named arguments in Objective-C are great. They make
code a lot more self-descriptive. Consider&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RBMelon&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;alloc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;initWithNumberOfSeeds&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
                     &lt;span class=&quot;nl&quot;&gt;andPriceInDollars:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.50&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;compared to, let’s say its Java equivalent&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Melon&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;1.50&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The latter makes it much harder to guess what those two parameters mean. Now,
Java’s popular IDEs make it easy to look up the documentation or definition of
methods, but it’s still an unnecessary overhead.&lt;/p&gt;

&lt;p&gt;However, the Java example is still a lot shorter, so named arguments are clearly
a double edged sword.&lt;/p&gt;

&lt;p&gt;If you’ve written at least a tiny bit of Objective-C, you’ve probably come in
contact with&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSDictionary&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dictionaryWithObjectsAndKeys&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;foo&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSNumber&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;numberWithInt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
                                           &lt;span class=&quot;s&quot;&gt;@&amp;quot;bar&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSNumber&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;numberWithInt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
                                           &lt;span class=&quot;s&quot;&gt;@&amp;quot;baz&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;NSNumber&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;numberWithInt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
                                           &lt;span class=&quot;nb&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;which, thankfully, Objective-C now has a literal for:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;objectivec&quot;&gt;&lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;@1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;@&amp;quot;foo&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;@2&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;@&amp;quot;bar&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;@3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;@&amp;quot;baz&amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Similarly, the usual functional suspects like &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;reduce&lt;/code&gt;, &lt;code&gt;tail&lt;/code&gt; etc., are
well understood and don’t need a verbose, 20 character selector associated with
them.&lt;/p&gt;

&lt;p&gt;This is were Underscore.m comes in. By providing a tool-set of the most common
functional idioms, it tries to encourage developers to structure their
operations in small, concise chucks.&lt;/p&gt;

&lt;p&gt;Similar to Objective-C’s new literals, I hope its clarity can outweigh conventions.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/site-redesign</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/site-redesign"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fsite-redesign&amp;title=Site+Redesign&amp;user_id=robb&amp;category=text" />

    <title>Site Redesign</title>
    <updated>2012-07-01T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;I’ve been meaning to redesign my website for quite some time now, this weekend
I finally got around. This new design is much more colorful than the old one.&lt;/p&gt;

&lt;p&gt;Check out the awesome &lt;a href=&quot;http://symbolset.com/&quot;&gt;symbolset font&lt;/a&gt; I’m using for icons. It works
by applying ligatures to whole words, for example ‘love’ turns into
&lt;span class=&quot;ss-icon&quot;&gt;love&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;I also started to resolve embeds in the client using JavaScript, this makes it
easier for me to publish new blog posts. As a small bonus, the embeds will
usually pick up the color of the surrounding blog post.&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/frittenbude/mindestens-in-1000-jahren&quot;&gt;

&lt;/div&gt;

&lt;p&gt;I understand that there are still a couple of rough edges strewn across the
site, I plan to fix those over the coming days. If you notice anything out of
the ordinary, make sure to send me a
&lt;a class=&quot;ss-icon&quot; href=&quot;mailto:robb@robb.is&quot;&gt;mail&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/golden-gate-cmyk</id>
    
    <link type="text/html" rel="alternate" href="http://goldengatebridge.org/research/facts.php#cmyk"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fgolden-gate-cmyk&amp;title=Golden+Gate+CMYK&amp;user_id=robb&amp;category=text" />

    <title>Golden Gate CMYK</title>
    <updated>2012-07-01T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;So apparently, the official Golden Gate bridge color is:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Cyan: 0%&lt;br /&gt;
Magenta: 69%&lt;br /&gt;
Yellow: 100%&lt;br /&gt;
Black: 6%.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s &lt;code&gt;#ED4C00&lt;/code&gt; if you’re more the RGB kind of person.&lt;/p&gt;

&lt;p&gt;/via &lt;a href=&quot;http://parkerhiggins.net/2012/07/golden-gate-bridge-minimal/&quot;&gt;Parker&lt;/a&gt;&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/lee</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/lee"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Flee&amp;title=Lee&amp;user_id=robb&amp;category=text" />

    <title>Lee</title>
    <updated>2012-06-07T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Working at SoundCloud means working with some extraordinary people.
It also means working with Lee &lt;em&gt;fucking&lt;/em&gt; Martin.&lt;/p&gt;

&lt;p&gt;If you don’t know Lee, you most likely &lt;a href=&quot;http://stream.bandofhorses.com/&quot;&gt;know&lt;/a&gt; &lt;a href=&quot;http://foofighters.fm/&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;http://destroyed.moby.com/&quot;&gt;of&lt;/a&gt;
&lt;a href=&quot;http://spectrogr.am/&quot;&gt;his&lt;/a&gt; &lt;a href=&quot;http://stratus.sc/&quot;&gt;work&lt;/a&gt;.
He’s one of the most inspiring, honest and talented people I’ve ever met.
He also fights crime in in his Nyan Cat costume.&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/lee.jpg&quot; alt=&quot;nyan lee&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;Hashtag Bromance ❤&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/slang</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/slang"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fslang&amp;title=slang&amp;description=A+nice+pixelation+effect+in+the+browser&amp;user_id=robb&amp;category=text" />

    <title>slang</title>
    <updated>2012-04-29T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;/working-on/slang/demo.html&quot;&gt;slang&lt;/a&gt; is a small hack I built the other day. Inspired by
&lt;a href=&quot;http://revdancatt.com/&quot;&gt;Dan Catt&lt;/a&gt;’s &lt;a href=&quot;http://revdancatt.github.com/Flambient/&quot;&gt;Flambient&lt;/a&gt;, it allows you to apply an
interesting pixelation effect to any image. I use it to generate new backgrounds
for my desktop from screenshots of the same.
You can kind of make out the iOS simulator on this one:&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/slang.png&quot; alt=&quot;Slang&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;It’s a simple CoffeeScript implementation that you can find &lt;a href=&quot;http://github.com/robb/slang&quot;&gt;on github&lt;/a&gt;.
I would like to have the image processing running in a background web worker,
but unfortunately, canvas and web workers are mutually exclusive at this point.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/my-dotfiles</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/my-dotfiles"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fmy-dotfiles&amp;title=My+dotfiles&amp;description=I%27ve+open-sourced+my+dotfiles&amp;user_id=robb&amp;category=text" />

    <title>My dotfiles</title>
    <updated>2012-03-30T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;After using &lt;a href=&quot;https://github.com/robbyrussell/oh-my-zsh&quot;&gt;oh_my_zsh&lt;/a&gt; for quite a while, I recently switched to
having &lt;a href=&quot;https://github.com/robb/.dotfiles&quot;&gt;my own repo&lt;/a&gt; to store my dotfiles.
I got a better understanding of zsh and its customization, now there is no
suprising alias that I didn’t know of.&lt;/p&gt;

&lt;p&gt;My prompt now looks something like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/prompt.png&quot; alt=&quot;My prompt&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The right-hand side contains all relevant information about my currrent repo.
The red circle indicates that I have untracked files but it being empty means
nothing is staged.&lt;br /&gt;
The color indicates the time since the last commit, more than 30 minutes in this
case.&lt;br /&gt;
It also tells me the branch I am on or the SHA1 of the current HEAD, if I am in
‘detached HEAD’ state.&lt;/p&gt;

&lt;p&gt;You can find my prompt &lt;a href=&quot;https://github.com/robb/.dotfiles/blob/master/zsh/prompt.zsh&quot;&gt;here&lt;/a&gt;, if you would like to use some of it for
your own shell.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/spinamp</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/spinamp"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fspinamp&amp;title=Spinamp&amp;description=It+really+whips+the+moose%27s+ass&amp;user_id=robb&amp;category=text" />

    <title>Spinamp</title>
    <updated>2012-02-13T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;Spinamp&lt;/em&gt; is my hack for the &lt;a href=&quot;http://sf.musichackday.org/2012&quot;&gt;Music Hack Day San Francisco 2012&lt;/a&gt;.&lt;/p&gt;

&lt;div&gt;
  &lt;img src=&quot;/img/spinamp.png&quot; alt=&quot;Spinamp&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;Inspired by &lt;a href=&quot;http://vimeo.com/20149683&quot;&gt;Lee’s earlier work&lt;/a&gt;, I recreated the Winamp user experience
on top of the &lt;a href=&quot;https://developer.spotify.com/en/spotify-apps-api/overview/&quot;&gt;Spotify Apps API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The playback, shuffle, and replay buttons work and I even had time to add a
custom visualization based on &lt;a href=&quot;http://acko.net/blog/js1k-demo-the-making-of/&quot;&gt;Steve Wittens’ JS1K demo&lt;/a&gt;, that was powered
by a custom FFT event that &lt;a href=&quot;http://ikennd.ac/&quot;&gt;Daniel from Spotify&lt;/a&gt; was kind enought to throw
in for me.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/the-laughing-man</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/the-laughing-man"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fthe-laughing-man&amp;title=The+Laughing+Man&amp;description=the+Laughing+Man+logo+built+with+HTML+and+CSS&amp;user_id=robb&amp;category=text" />

    <title>The Laughing Man</title>
    <updated>2012-01-04T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;/working-on/the-laughing-man/demo.html&quot;&gt;I recreated the logo&lt;/a&gt; of The Laughing Man from
&lt;a href=&quot;http://en.wikipedia.org/wiki/Ghost_in_the_Shell:_Stand_Alone_Complex&quot;&gt;Ghost in the Shell: Stand Alone Complex&lt;/a&gt; using
only HTML and CSS.&lt;/p&gt;

&lt;p&gt;In the show, the Laughing Man is a notorious hacker, capable
of hacking TV cameras as well as the eyes of onlookers in
real-time, hiding his face behind his infamous logo.&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/laughing-man.png&quot; alt=&quot;The Laughing Man&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Ghost_in_the_Shell_(film)&quot;&gt;The film&lt;/a&gt; based on the same &lt;a href=&quot;http://en.wikipedia.org/wiki/Ghost_in_the_Shell_(manga)&quot;&gt;manga by Shirow Masamune&lt;/a&gt;
is one of my all time favorite movies and if you haven’t already,
you should really give it a try!&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/notorious-siri</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/notorious-siri"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fnotorious-siri&amp;title=Notorious+Siri&amp;description=lets+Siri+spit+some+wicked+lyrics&amp;user_id=robb&amp;category=text" />

    <title>Notorious Siri</title>
    <updated>2011-12-09T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;Notorious Siri&lt;/em&gt; is my hack for the &lt;a href=&quot;http://london.musichackday.org/2011/&quot;&gt;Music Hack Day London 2011&lt;/a&gt;.&lt;/p&gt;

&lt;div&gt;
  &lt;img src=&quot;/img/notorious-siri.png&quot; alt=&quot;Notorious Siri&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/plamoni/SiriProxy&quot;&gt;SiriProxy&lt;/a&gt; is used to intercept the communication with Apple’s
servers. Based on your song request, Notorious Siri then sends your choice of
Notorious B.I.G.’s Hypnotize and an a-cappella rendition of Queen’s Bohemian
Rhapsody to the device (the latter requiring 4 iPhones 4S).&lt;/p&gt;

&lt;p&gt;Siri’s speech synthesis is synced to the beat using the timestamps obtained from
the Echonest API which were then manually tweaked, to smooth out delays in the
text-to-speech engine.&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://vimeo.com/33402886&quot;&gt;&lt;/div&gt;

&lt;p&gt;Big thanks to Universal Music for awarding me a nice pair of Dr. Dre headphones&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/ia-rlyeh</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/ia-rlyeh"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fia-rlyeh&amp;title=Ia%2C+rlyeh%21&amp;user_id=robb&amp;category=text" />

    <title>Ia, rlyeh!</title>
    <updated>2011-11-13T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Knowing that I am a big fan of the Lovecraftian mythos, my good friend
&lt;a href=&quot;http://parkerhiggins.net&quot;&gt;Parker&lt;/a&gt; sent me this the other day:&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/ia-rlyeh.jpg&quot; alt=&quot;Ctuhlhu fhtagn!&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;phn’glui mglw’nafh cthulhu californa wgah’nagl fhtagn!&lt;/em&gt;&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/6strin.gs</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/6strin.gs"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2F6strin.gs&amp;title=6strin.gs&amp;description=Guitar+synthesis+in+the+browser&amp;user_id=robb&amp;category=text" />

    <title>6strin.gs</title>
    <updated>2011-11-10T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://6strin.gs&quot;&gt;
  &lt;img src=&quot;/img/6strings-screenshot-small.png&quot; alt=&quot;6strin.gs&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://robb.is/6strin.gs&quot;&gt;6strin.gs&lt;/a&gt; was my hack for &lt;a href=&quot;http://montreal.musichackday.org/2011/&quot;&gt;Music Hack Day Montreal&lt;/a&gt; in September 2011.
It’s an implementation of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Karplus%E2%80%93Strong_string_synthesis&quot;&gt;Karplus-Strong algorithm&lt;/a&gt; written in
&lt;a href=&quot;http://coffeescript.org&quot;&gt;CoffeeScript&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It uses Chrome’s shiny new webkitAudioContext, but unfortunately only runs in that
browser. Check out the source code on &lt;a href=&quot;https://github.com/robb/6strings&quot;&gt;github&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/soundcloud-for-ipad</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/soundcloud-for-ipad"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fsoundcloud-for-ipad&amp;title=SoundCloud+for+iPad&amp;description=The+official+SoundCloud+iPad+app&amp;user_id=robb&amp;category=text" />

    <title>SoundCloud for iPad</title>
    <updated>2011-10-27T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;And now, what you’ve all been waiting for:&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://vimeo.com/31084756&quot;&gt;&lt;/div&gt;

&lt;p&gt;You can find the app &lt;a href=&quot;http://itunes.apple.com/en/app/soundcloud/id336353151&quot;&gt;in the App Store&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Big ups to &lt;a href=&quot;https://soundcloud.com/mrtoto&quot;&gt;Toto&lt;/a&gt;, &lt;a href=&quot;https://soundcloud.com/343max&quot;&gt;Max&lt;/a&gt;, &lt;a href=&quot;https://soundcloud.com/gernot&quot;&gt;Gernot&lt;/a&gt;, &lt;a href=&quot;https://soundcloud.com/stigi&quot;&gt;Ullrich&lt;/a&gt;
and &lt;a href=&quot;https://soundcloud.com/anagrom_ataf&quot;&gt;Tobias&lt;/a&gt; from &lt;a href=&quot;http://nxtbgthng.com&quot;&gt;nxtbgthng&lt;/a&gt;
as well as &lt;a href=&quot;https://soundcloud.com/katharina&quot;&gt;Katharina&lt;/a&gt;, &lt;a href=&quot;https://soundcloud.com/mark&quot;&gt;Mark&lt;/a&gt;, &lt;a href=&quot;https://soundcloud.com/dagrobie&quot;&gt;Tobi&lt;/a&gt; and &lt;a href=&quot;https://soundcloud.com/pcalcado&quot;&gt;Phil&lt;/a&gt; from SoundCloud, 
I’m happy we finally got this out to the community.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/drive</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/drive"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fdrive&amp;title=Drive&amp;user_id=robb&amp;category=text" />

    <title>Drive</title>
    <updated>2011-10-24T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Great movie, great soundtrack.&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/drive-poster.jpg&quot; alt=&quot;Drive&quot; /&gt;
&lt;/div&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/college/college-feat-electric-youth-a-real-hero&quot;&gt;&lt;/div&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/deadcruiser/nightcall&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/the-blackwell-series</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/the-blackwell-series"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fthe-blackwell-series&amp;title=The+Blackwell+Series&amp;user_id=robb&amp;category=text" />

    <title>The Blackwell Series</title>
    <updated>2011-10-23T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;img src=&quot;/img/blackwell-deception-rosa.png&quot; alt=&quot;Rosa Blackwell&quot; class=&quot;left&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I’ve read much about the Blackwell series of indie point and click adventures and
after the recent release of the latest entry in the series, &lt;a href=&quot;http://www.wadjeteyegames.com/blackwell-deception.html&quot;&gt;The Blackwell Deception&lt;/a&gt;,
I finally gave them a spin.&lt;/p&gt;

&lt;p&gt;Written by Dave Gilbert, the games follow the story of medium-against-her-will
Rosa Blackwell and her ghost parter Joey Mallone, bringing peace to the restless
souls of recently deceased New Yorkers.&lt;/p&gt;

&lt;p&gt;While I am still waiting for the DVD package I ordered, containing all four
games of the series, I got to download the two latest ones: &lt;em&gt;The Blackwell
Convergence&lt;/em&gt; as well as aforementioned &lt;em&gt;Blackwell Deception&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/blackwell-convergence-screenshot.png&quot; alt=&quot;Another day, another satisfied spook.&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;The games, running at a decidedly oldschool 640x480, also feature a great,
jazzy soundtrack. Listen for example to Rosa’s Theme from the Blackwell Deception:&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/thomas-regin/blackwell-deception-rosas-theme&quot;&gt;&lt;/div&gt;

&lt;p&gt;Unfortunately, the team at Wadjet Eye decided to use the AGS Engine, a freeware
adventure game engine that only runs on Microsoft Windows.
I managed to get them working using VMWare Fusion, but the experience is shaky
to say the least.&lt;/p&gt;

&lt;p&gt;Still, this is a well written series of adventure games and I urge you to
check it out.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/futura</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/futura"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Ffutura&amp;title=Battles+%E2%80%93+Futura&amp;user_id=robb&amp;category=text" />

    <title>Battles – Futura</title>
    <updated>2011-10-15T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://vimeo.com/24513475&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/thinking-about/tabula-rasa</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/thinking-about/tabula-rasa"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fthinking-about%2Ftabula-rasa&amp;title=Tabula+Rasa&amp;user_id=robb&amp;category=text" />

    <title>Tabula Rasa</title>
    <updated>2011-10-02T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Today I finally received my new 13 inch MacBook Air. I’ve been pondering over
this for a while, going back and forth between this, or a MacBook Pro. I
ultimately chose portability over processing power and went with the Air, let’s
see how this pans out over the next couple of months.&lt;/p&gt;

&lt;p&gt;In many ways, getting a new machine is like sleeping in a freshly made bed,
everything feels nice and clean and there are no crumbs hidden under the cover,
yet. It also presents you with a nice opportunity to reevaluate your working
environment.&lt;/p&gt;

&lt;p&gt;Inspired by reading about other peoples setup on
&lt;a href=&quot;http://usesthis.com/&quot;&gt;usesthis&lt;/a&gt; (see for example one by &lt;a href=&quot;http://richard.stallman.usesthis.com/&quot;&gt;Richard Stallman&lt;/a&gt;), I
figured I might as well write something about some of my favorite applications.
So, without much further ado, here is a list of my tools of the trade and
whatever else I use on a daily basis:&lt;/p&gt;

&lt;h2 id=&quot;flux&quot;&gt;F.lux&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/flux.png&quot; alt=&quot;F.lux&quot; class=&quot;right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;F.lux is a small application that controls the white balance of your
computer’s monitor. Computer screens usually have a white-point of
&lt;a href=&quot;http://en.wikipedia.org/wiki/CIE_Standard_Illuminant_D65&quot;&gt;6500° Kelvin&lt;/a&gt; – while that looks great in broad daylight, in the evening
that usually means that you’re staring at a bright, blueish rectangle while
everything else is covered in warm, yellow light. This is unnecessarily tiring
your eyes.&lt;/p&gt;

&lt;p&gt;F.lux fixes this by dynamically setting the white point of your monitor to
something cooler after sunset, which makes your screen’s colors appear warmer.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Even if you don’t run Mac OS X&lt;/em&gt; on your computer, go and
&lt;a href=&quot;http://stereopsis.com/flux/&quot;&gt;install this program&lt;/a&gt; right now! It’s available for Windows and Linux,
too. How comes you can read this if you’re installing F.lux? Do you got it? OK,
let’s continue…&lt;/p&gt;

&lt;h2 id=&quot;iterm-2&quot;&gt;iTerm 2&lt;/h2&gt;

&lt;p&gt;iTerm 2 is a great replacement for the default Terminal.app OS X
ships with. It has a couple of great features such as split windows, Growl
support and is much more customizable than the default.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/iterm-2.png&quot; alt=&quot;iTerm 2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The main reason I use it, however, is its awesome &lt;em&gt;Hotkey Window&lt;/em&gt;. Define a
global hotkey and get access to a terminal window wherever you are. I set my
Caps Lock key to open a fullscreen terminal window by mapping the key to F13
using the awkwardly named &lt;a href=&quot;http://pqrs.org/macosx/keyremap4macbook/extra.html#t1&quot;&gt;PCKeyboardhack&lt;/a&gt; and then assigning
F13 to open the Hotkey Window.&lt;/p&gt;

&lt;p&gt;I also removed the fade in animation by running&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ defaults write com.googlecode.iterm2 HotkeyTermAnimationDuration -float 0
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;to make the terminal appear instantly.&lt;/p&gt;

&lt;h2 id=&quot;sublime-text-2&quot;&gt;Sublime Text 2&lt;/h2&gt;

&lt;p&gt;Electric Boogaloo. The go-to GUI text editor for developers on OS X has long
been TextMate. While the developer of TextMate has just reiterated that TextMate
2 is alive and well, many have turned to Sublime Text 2 for a modern editor.
It comes with many great features out of the box and is also compatible to some
of TextMates syntax highlighting bundles.&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/sublime-text-2.png&quot; alt=&quot;Sublime Text 2&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;I switched to &lt;a href=&quot;http://www.sublimetext.com/2&quot;&gt;Sublime Text 2&lt;/a&gt; for most of my personal editing
needs because of its great split screen support and the distraction free mode
in which I am currently writing this blog post while waiting on my plane.&lt;/p&gt;

&lt;p&gt;Once I’ve grown more familiar with all the bells and whistles, I’ll probably
make another post how I set it up, as most of the options you can set are
currently not easily discoverable.&lt;/p&gt;

&lt;h2 id=&quot;sparrow&quot;&gt;Sparrow&lt;/h2&gt;

&lt;p&gt;I never got the hang of using web based e-mail clients on a daily
base and about a year ago, I made the switch from Thunderbird to Sparrow.
It has a nice, clean UI and is well integrated with GMail.&lt;/p&gt;

&lt;p&gt;There is &lt;a href=&quot;http://itunes.apple.com/de/app/sparrow-lite/id417418059?mt=12&quot;&gt;a lite version&lt;/a&gt; on the Mac App Store, so make sure to
give it a spin.&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/Sparrow.png&quot; alt=&quot;Sparrow&quot; /&gt;
&lt;/div&gt;

&lt;h2 id=&quot;zsh&quot;&gt;zsh&lt;/h2&gt;

&lt;p&gt;The benefits of zsh over bash have been discussed at great length
multiple times now. zsh comes already installed on OS X and you can make it your
default shell by running &lt;code&gt;chsh -s zsh&lt;/code&gt;.
I’d like to recommend you a little something called &lt;a href=&quot;https://github.com/robbyrussell/oh-my-zsh&quot;&gt;Oh my zsh&lt;/a&gt;,
a repo of zsh plugins and themes.&lt;br /&gt;
Almost 3000 watchers on github can hardly be wrong…&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;               __                                     __
        ____  / /_     ____ ___  __  __   ____  _____/ /_
       / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \
      / /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / /
      \____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/
                              /____/
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;what-else&quot;&gt;What else&lt;/h2&gt;

&lt;p&gt;If I write something, I probably check it into git at some point.
I’m not a big fan of git GUIs, so I usually stick to the cli version.&lt;br /&gt;
For my Objective-C needs, I use a Xcode 4 and not much else.&lt;br /&gt;
My current browser of choice is Chrome.&lt;br /&gt;&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/like-an-eagle</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/like-an-eagle"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Flike-an-eagle&amp;title=Mighty+Oaks+%E2%80%93+Like+an+Eagle&amp;user_id=robb&amp;category=text" />

    <title>Mighty Oaks – Like an Eagle</title>
    <updated>2011-09-30T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://www.youtube.com/watch?v=D9NBlDqtuUM&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/spotify-lolcat</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/spotify-lolcat"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fspotify-lolcat&amp;title=Spotify+lolcat&amp;user_id=robb&amp;category=text" />

    <title>Spotify lolcat</title>
    <updated>2011-08-17T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Turns out, if you run&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ open /Applications/Spotify.app/Contents/Resources/lolcat.png
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;on your Mac, you’ll get this:&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/spotify-lolcat-preview-background.png&quot; alt=&quot;OMG!&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;(via &lt;a href=&quot;https://twitter.com/johanneswagener&quot;&gt;Johannes&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Apparently, the cat is &lt;a href=&quot;http://www.flickr.com/photos/rsms/299729369/&quot;&gt;owned by Rasmus&lt;/a&gt;, former
Spotify lead designer.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/anamanaguchi-daytrotter-session</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/anamanaguchi-daytrotter-session"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fanamanaguchi-daytrotter-session&amp;title=Anamanaguchi+%E2%80%93+Daytrotter+session&amp;user_id=robb&amp;category=text" />

    <title>Anamanaguchi – Daytrotter session</title>
    <updated>2011-08-16T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/lightfiction/sets/anamanaguchi-daytrotter/&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/graffiti</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/graffiti"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fgraffiti&amp;title=Graffiti&amp;user_id=robb&amp;category=text" />

    <title>Graffiti</title>
    <updated>2011-07-24T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/cammy-enaharo/graffiti&quot;&gt;&lt;/div&gt;

&lt;p&gt;When Cammy became SoundClouder of the Day, she sent us this lovely message:&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/cammy-enaharo/thank-you-soundcloud-for&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/shadowtime</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/shadowtime"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fshadowtime&amp;title=Edison+%E2%80%93+Shadowtime&amp;user_id=robb&amp;category=text" />

    <title>Edison – Shadowtime</title>
    <updated>2011-07-20T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://vimeo.com/26610039&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/sixteen-tons-of-work</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/sixteen-tons-of-work"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fsixteen-tons-of-work&amp;title=Sixteen+Tons+of+Work&amp;user_id=robb&amp;category=text" />

    <title>Sixteen Tons of Work</title>
    <updated>2011-07-15T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://www.youtube.com/watch?v=f0kCMNGU3-w&quot;&gt;

&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/more-embedly-goodness</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/more-embedly-goodness"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fmore-embedly-goodness&amp;title=More+embed.ly+goodness&amp;user_id=robb&amp;category=text" />

    <title>More embed.ly goodness</title>
    <updated>2011-07-11T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;I’ve added a new small feature to the &lt;a href=&quot;/working-on/embedly-and-jekyll&quot;&gt;embed.ly plug-in&lt;/a&gt;, now you can
pass along parameters specific to a particular embed, e.g.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{&lt;!-- --&gt;% embedly http://soundcloud.com/battles/ice-cream, color: FF11FF %}
{&lt;!-- --&gt;% embedly http://soundcloud.com/workit/the-drums-money, color: FFCC00 %}
{&lt;!-- --&gt;% embedly http://soundcloud.com/modularpeople/the-avalanches-since-i-left-you-stereolab-remix, color: 00CCFF %}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;will produce&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/battles/ice-cream&quot; data-color=&quot;FF11FF&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/workit/the-drums-money&quot; data-color=&quot;FFCC00&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/modularpeople/the-avalanches-since-i-left-you-stereolab-remix&quot; data-color=&quot;00CCFF&quot;&gt;&lt;/div&gt;

&lt;p&gt;Hooray for colorful SoundCloud players!&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/embedly-and-jekyll</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/embedly-and-jekyll"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fembedly-and-jekyll&amp;title=An+embed.ly+plug-in+for+Jekyll&amp;description=Add+oEmbed+to+your+static+website&amp;user_id=robb&amp;category=text" />

    <title>An embed.ly plug-in for Jekyll</title>
    <updated>2011-07-09T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;I use the static webpage generator &lt;a href=&quot;https://github.com/mojombo/jekyll&quot;&gt;Jekyll&lt;/a&gt; for running this site and
I absolutely love it.
Combined with Github’s powerful &lt;a href=&quot;http://pages.github.com&quot;&gt;github-pages&lt;/a&gt; feature, I get a well
performing site with minimal effort and a convenient git-based workflow.&lt;/p&gt;

&lt;p&gt;As you can see, I post a lot of SoundCloud tracks and videos on this site, but
I find the process of composing embed links very dull and time-consuming.&lt;/p&gt;

&lt;p&gt;To facilitate this process, I wrote &lt;a href=&quot;https://github.com/robb/jekyll-embedly-client&quot;&gt;a small Jekyll plug-in&lt;/a&gt; that
acts as an &lt;a href=&quot;http://oembed.com&quot;&gt;oEmbed&lt;/a&gt; client using the &lt;a href=&quot;http://embed.ly&quot;&gt;embed.ly&lt;/a&gt; API.&lt;/p&gt;

&lt;p&gt;Once you’ve install the plug-in, it will automatically turn every embedly tag
into a nice looking embed every time you compile your site.
If you encounter any problems, make sure
to file a report in the &lt;a href=&quot;https://github.com/robb/jekyll-embedly-client/issues&quot;&gt;Issues tracker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now, do you care for an example?&lt;/p&gt;

&lt;h2 id=&quot;wikipedia&quot;&gt;Wikipedia&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;{&lt;!----&gt;% embedly http://en.wikipedia.org/wiki/SoundCloud %}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;turns into&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://en.wikipedia.org/wiki/SoundCloud&quot;&gt;&lt;/div&gt;

&lt;h2 id=&quot;xkcd&quot;&gt;XKCD&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;{&lt;!----&gt;% embedly http://xkcd.com/918 %}&lt;/code&gt;&lt;/pre&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://xkcd.com/918/&quot;&gt;&lt;/div&gt;

&lt;h2 id=&quot;flickr&quot;&gt;Flickr&lt;/h2&gt;

&lt;pre&gt;&lt;code&gt;{&lt;!----&gt;% embedly http://www.flickr.com/photos/visivo/3389278626 %}&lt;/code&gt;&lt;/pre&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://www.flickr.com/photos/visivo/3389278626&quot;&gt;&lt;/div&gt;

&lt;p&gt;Overall, embed.ly supports over 180 services. I’ve made sure you can customize
and style your embeds as well as possible.&lt;/p&gt;

&lt;h2 id=&quot;however&quot;&gt;However…&lt;/h2&gt;

&lt;p&gt;Unfortunately, &lt;a href=&quot;http://pages.github.com&quot;&gt;github-pages&lt;/a&gt; does not offer support for plug-ins
for security reasons. To make use of this (and any other Jekyll plug-in), you
have to compile your site yourself and push it to your pages repo manually.&lt;/p&gt;

&lt;p&gt;Maybe they could include a plug-in like this in the future?&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/thinking-about/mobile-sites-at-rest</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/thinking-about/mobile-sites-at-rest"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fthinking-about%2Fmobile-sites-at-rest&amp;title=Mobile+sites%2C+at+rest&amp;user_id=robb&amp;category=text" />

    <title>Mobile sites, at rest</title>
    <updated>2011-07-08T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Today, I read a tweet by &lt;a href=&quot;http://twitter.com/jensnikolaus&quot;&gt;Jens&lt;/a&gt; about how he switched to the SoundCloud mobile
site on the desktop.&lt;/p&gt;

&lt;p&gt;I can certainly see why you would do that, mobile sites are more to the point
and optimized for slow connections, which makes them super fast when you’re
wired.&lt;/p&gt;

&lt;p&gt;Yet, I wondered how well it would work. I’ve been using the site on my iPad but it
certainly is not optimized for that screen size - especially in landscape.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/sc-mobile-ipad.png&quot; alt=&quot;Eew!&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Just pointing any modern browser to &lt;a href=&quot;http://m.soundcloud.com&quot;&gt;http://m.soundcloud.com&lt;/a&gt;
will do the trick, but switching between tabs just to play another track is a hassle,
So is accidentally closing a tab.&lt;br /&gt;
Luckily for us, there is a tool that allows you to create single site browsers.
It’s called &lt;a href=&quot;http://fluidapp.com&quot;&gt;Fluid&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Just enter a name, the URL and where it should get the icon from and
presto, you got yourself a nice little app.&lt;/p&gt;

&lt;div&gt;
  &lt;img src=&quot;/img/sc-mobile-fluid.png&quot; alt=&quot;That’s better&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;Now, this is cool and all, but I really urge you to go the extra mile.
Turns out, if you spend $5 on Fluid’s pro version you’ll get
the warm feeling of supporting small developers as well as access
to a feature called &lt;em&gt;Pin to status bar&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;With that, you can turn SoundCloud mobile into a small icon on the top of
your Mac’s screen, that gives you easy access to the app, wherever
you are.&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/sc-mobile-pinned.png&quot; alt=&quot;Nice!&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Tip:&lt;/em&gt; Make sure you hide the status bar from the main menu before
you pin the app to the status bar, you can still resize the app
by dragging the corners, even though there are no handles visible.&lt;/p&gt;

&lt;p&gt;I’ll keep experimenting with Fluid, as I’m curious how Google+ and other
mobile sites will work out.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/mighty-oaks-at-fusion</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/mighty-oaks-at-fusion"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fmighty-oaks-at-fusion&amp;title=Mighty+Oaks+at+Fusion&amp;user_id=robb&amp;category=text" />

    <title>Mighty Oaks at Fusion</title>
    <updated>2011-07-08T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;My friend Ian and his band, &lt;a href=&quot;http://mightyoaksmusic.com&quot;&gt;Mighty Oaks&lt;/a&gt;, played this
year’s Fusion festival.&lt;/p&gt;

&lt;p&gt;Man, I wish I could have been there.&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://youtube.com/watch?v=r11V1zY47RY&amp;amp;feature=view_all&amp;amp;list=PL01AEF389F609A4A5&quot;&gt;

&lt;/div&gt;

&lt;p&gt;(Make sure you watch the &lt;a href=&quot;http://www.youtube.com/playlist?list=PL01AEF389F609A4A5&quot;&gt;entire playlist&lt;/a&gt;)&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/wwdc-2011</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/wwdc-2011"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fwwdc-2011&amp;title=WWDC+2011&amp;user_id=robb&amp;category=text" />

    <title>WWDC 2011</title>
    <updated>2011-06-28T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;I had a wunderful time at this year’s WWDC in San Francisco. Look what I
spotted during the keynote.&lt;/p&gt;

&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/keynote-soundcloud.png&quot; alt=&quot;SoundCloud app on the Keynote&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;(Photo courtesy of &lt;a href=&quot;http://engadget.com&quot;&gt;engadget&lt;/a&gt;)&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/ich-bin-auslaender</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/ich-bin-auslaender"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fich-bin-auslaender&amp;title=Torpedo+Boys+%E2%80%93+Ich+bin+Ausl%C3%A4nder&amp;user_id=robb&amp;category=text" />

    <title>Torpedo Boys – Ich bin Ausländer</title>
    <updated>2011-06-27T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Leider zum Glück.&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://www.soundcloud.com/torpedo-boyz/ich-bin-auslander-leider-zum-gluck&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/speed-of-darkness</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/speed-of-darkness"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fspeed-of-darkness&amp;title=Flogging+Molly+%E2%80%93+Speed+Of+Darkness&amp;user_id=robb&amp;category=text" />

    <title>Flogging Molly – Speed Of Darkness</title>
    <updated>2011-05-31T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/floggingmolly/sets/speed-of-speed-album-sampler&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/berlin-wall</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/berlin-wall"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fberlin-wall&amp;title=Berlin+Wall&amp;user_id=robb&amp;category=text" />

    <title>Berlin Wall</title>
    <updated>2011-05-07T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://vimeo.com/22713488&quot;&gt;&lt;/div&gt;

&lt;p&gt;Incredible song, not quite the art style I imagined this video to have.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/the-situation-room</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/the-situation-room"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fthe-situation-room&amp;title=The+SoundCloud+situation+room&amp;user_id=robb&amp;category=text" />

    <title>The SoundCloud situation room</title>
    <updated>2011-05-05T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;img-wrapper&quot;&gt;
  &lt;img src=&quot;/img/soundcloud-situation-room.png&quot; alt=&quot;The SoundCloud situation room&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;A serious situation in the SoundCloud office. (Photo by &lt;a href=&quot;http://culturecowboy.tumblr.com/&quot;&gt;Natalie&lt;/a&gt;)&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/beastie-boys</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/beastie-boys"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fbeastie-boys&amp;title=Beastie+Boys&amp;user_id=robb&amp;category=text" />

    <title>Beastie Boys</title>
    <updated>2011-04-25T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Check out the new Beastie Boys Album, &lt;em&gt;Hot Sauce Committee Part Two&lt;/em&gt;. Sweet.&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/beastieboys/sets/hot-sauce-committee-part-two&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/marbleo.us</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/marbleo.us"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fmarbleo.us&amp;title=Marbleo.us&amp;description=An+online+marble+run+built+with+Canvas%2C+CoffeeScript&amp;user_id=robb&amp;category=text" />

    <title>Marbleo.us</title>
    <updated>2011-04-19T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://marbleo.us/#GQIAAP8AAAYvAgAA_wAAFDwAAAA_AAAABwICAP8AAAQAAAAAAAAAABgCAgD_AAALAQEAAP8AAAYpAQAAGgcIAf8AAAU_AAAAPwEAAP8AAAU_AAAAPwEAAP8AAAU_AAAAKwAAAB4CBQD_AAAEAAAAAAAAAAAwBwgA_wAABAAAAAAAAAAAAAAAACwHCQD_AAADAQEAAP8AAAYpAQAA_wAAIgAAAAAAAAAAAAAAAAABAAD_AAADKQEAAP8AAAYpAQAA_wAAKQEBAAD_AAAGKQEAAP8AACkBAQAAFAAAARUAAAAVAAAAFQAAABUAAAAFBwkAKQEAABYAAAEVAAAAFQAAABUAAAAFBwkA_wAAARUAAAAVAAAAFQAAABUAAAAVAAAABQIGAP8AAA8AAAAAAAAAAAAAAAAAAAAAFAEAAP8AAAIAAAAAAAAAAAAAAAAAAAAAMAIAAP8AAAIFAgAA_wAABjECAAAA=&quot;&gt;
  &lt;img src=&quot;/img/marbleous-screenshot-small.png&quot; alt=&quot;marbleo.us&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Together with my friend &lt;a href=&quot;http://simon-hohberg.de&quot;&gt;Simon&lt;/a&gt;, I’ve built a web-based marble run simulator called &lt;a href=&quot;http://marbleo.us&quot;&gt;Marbleo.us&lt;/a&gt;. &lt;a href=&quot;http://marbleo.us/#GQIAAP8AAAYvAgAA_wAAFDwAAAA_AAAABwICAP8AAAQAAAAAAAAAABgCAgD_AAALAQEAAP8AAAYpAQAAGgcIAf8AAAU_AAAAPwEAAP8AAAU_AAAAPwEAAP8AAAU_AAAAKwAAAB4CBQD_AAAEAAAAAAAAAAAwBwgA_wAABAAAAAAAAAAAAAAAACwHCQD_AAADAQEAAP8AAAYpAQAA_wAAIgAAAAAAAAAAAAAAAAABAAD_AAADKQEAAP8AAAYpAQAA_wAAKQEBAAD_AAAGKQEAAP8AACkBAQAAFAAAARUAAAAVAAAAFQAAABUAAAAFBwkAKQEAABYAAAEVAAAAFQAAABUAAAAFBwkA_wAAARUAAAAVAAAAFQAAABUAAAAVAAAABQIGAP8AAA8AAAAAAAAAAAAAAAAAAAAAFAEAAP8AAAIAAAAAAAAAAAAAAAAAAAAAMAIAAP8AAAIFAgAA_wAABjECAAAA=&quot;&gt;Here’s a fun example map&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It was our submission for the annual informatiCup, a competition for students interested in computer science. Unfortunately, it did not make it into the final round but I still very much consider this to be a success.&lt;/p&gt;

&lt;p&gt;So let me give you a quick overview of what we did, how we did it and what I’ve learnt building Marbleo.us.&lt;/p&gt;

&lt;h2 id=&quot;no-data-store-is-faster-than-no-data-store&quot;&gt;No data store is faster than no data store.&lt;/h2&gt;
&lt;p&gt;Early on, we decided to give users the ability to share their creation with their friends. However, learning from the popular sandbox game Minecraft, we wanted to have a counter measure against what is called griefing, malicious players destroying your creation.&lt;/p&gt;

&lt;p&gt;After considering different data stores and ways to handle both read-only and read-write links to the maps, we came up with a far more elegant solution: encoding the whole map into the fragment of the URL.&lt;/p&gt;

&lt;p&gt;Writing the whole application in client side Javascript also alleviated the need for a server-side persistence layer, so all we needed was a way to serve a bunch of static files.&lt;/p&gt;

&lt;h2 id=&quot;standing-on-the-shoulders-of-github&quot;&gt;Standing on the shoulders of github&lt;/h2&gt;
&lt;p&gt;We are using git, which is unfortunately not used often in our academic circles, but it meant the natural choice for hosting our repository was &lt;a href=&quot;https://github.com/robb/Marbleo.us&quot;&gt;github&lt;/a&gt;. Using the awesome github-pages feature, we can also serve http://marbleo.us from their servers at no additional cost and with great response times.&lt;/p&gt;

&lt;h2 id=&quot;i-like-my-sugar-with-coffee-and-strikecreamstrike-script&quot;&gt;I like my sugar with coffee and &lt;strike&gt;cream&lt;/strike&gt; …script&lt;/h2&gt;
&lt;p&gt;Only a short time before the start of this project came I across &lt;a href=&quot;http://coffeescript.org&quot;&gt;CoffeeScript&lt;/a&gt; - thanks to &lt;a href=&quot;http://dmytri.info/&quot;&gt;Dmytri&lt;/a&gt; for tipping me off.&lt;/p&gt;

&lt;p&gt;CoffeeScript is a lean, mean language that compiles to easy to read Javascript.
More than just syntactic sugar, it is a really beautiful way to express your intentions and you can tell that its creator, &lt;a href=&quot;https://github.com/jashkenas&quot;&gt;Jeremy Ashkenas&lt;/a&gt; is a firm believer in code as literature.&lt;/p&gt;

&lt;p&gt;Jeremy also wrote backbone.js which, amongst other things, powers the
&lt;a href=&quot;https://m.soundcloud.com&quot;&gt;SoundCloud mobile site&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;drawing-the-marble-run&quot;&gt;Drawing the marble run&lt;/h2&gt;
&lt;p&gt;After briefly investigating CSS-3 transformations like in &lt;a href=&quot;http://cssatoms.com/miscellaneous/create-a-3d-cube-in-pure-css3/&quot;&gt;this article&lt;/a&gt; for composing the map, I decided to go with a more straightforward approach by drawing the maps onto a canvas.&lt;/p&gt;

&lt;p&gt;A single block is then stitched together from multiple components, cached, and placed on the canvas at its correct position in space. The individual components are all stored in &lt;a href=&quot;https://github.com/robb/Marbleo.us/blob/master/src/img/textures.png&quot;&gt;one file&lt;/a&gt; to minimize requests.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/marbleous-compositing.png&quot; alt=&quot;Marbleo.us&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Additionally, a second, smaller canvas is used to allow the use to drag a stack of blocks freely across the browser window without doing costly redraws at every mouse position.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/marbleous-canvases.png&quot; alt=&quot;Marbleo.us&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We also save yet another representation of the marble run, to quickly determine face of a block is under the current mouse position.
This also allows us to draw a cute little hand cursor whenever the user places the mouse over a block with pixel precision.&lt;/p&gt;

&lt;p&gt;We simply compile a map using a special, color-coded sprite and then quickly look up what color (if any) is stored at the mouse position.
&lt;em&gt;Blue&lt;/em&gt; for the top, &lt;em&gt;red&lt;/em&gt; and &lt;em&gt;green&lt;/em&gt; of the block’s sides and &lt;em&gt;black&lt;/em&gt; for the floor.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/marbleous-hitmap.png&quot; alt=&quot;Marbleo.us&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now we have the run ready, here comes the marble!&lt;/p&gt;

&lt;h2 id=&quot;animating-the-marble&quot;&gt;Animating the marble&lt;/h2&gt;

&lt;p&gt;We use a mixed approach to move the marble over the run by discriminating between two different types of movement: free movement in space and movement on the tracks of the marble run.&lt;/p&gt;

&lt;h3 id=&quot;movement-in-space&quot;&gt;Movement in space&lt;/h3&gt;

&lt;p&gt;This part of the physics engine engine was simple, by using a basic collision detection we check if the marble collided with a block and then invert the appropriate velocity components. If the marble is rolling over the top of a block, we also test if it crosses a track which leads us to the next point:&lt;/p&gt;

&lt;h3 id=&quot;movement-on-the-track&quot;&gt;Movement on the track&lt;/h3&gt;

&lt;p&gt;For every block with its different grooves and tunnels, we defined small, directed graphs that we then join together to form the large, overall track graph.
It’s important that the nodes of this graph have a degree of at most two, so that there is no ambiguity in which node to pick.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/marbleous-tracks.png&quot; alt=&quot;Marbleo.us&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We then move the marble along these paths from node to node, until we encounter a node that has no neighbor we haven’t visited before. It is then that we leave the track and switch back to the previous mode of movement.&lt;/p&gt;

&lt;h2 id=&quot;drawing-the-marble&quot;&gt;Drawing the marble&lt;/h2&gt;

&lt;p&gt;Now that we have the animation of the marble in place, we of course need to draw it, but to do that, we first have to figure out where the marble is visible.&lt;/p&gt;

&lt;p&gt;First we draw the the marble onto a blank, offscreen canvas.&lt;/p&gt;

&lt;p&gt;Then we iterate over all blocks in map that could potentially obstruct our view to the marble, drawing only the parts that are actually in the way onto another offscreen canvas.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/marbleous-visibility.png&quot; alt=&quot;Marbleo.us&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As a last step, we join our two canvases by drawing the canvas that contains the obstructing parts onto the marble using the blend mode &lt;code&gt;destination-out&lt;/code&gt;, this removes the marble everywhere there is a block and leaves us with a nice precisely drawn marble.&lt;/p&gt;

&lt;p&gt;I hope you enjoy marbleo.us and found this write-up useful. If you have any more questions or comments, feel free to drop me a line at &lt;a href=&quot;&amp;#109;&amp;#097;&amp;#105;&amp;#108;&amp;#116;&amp;#111;:&amp;#114;&amp;#111;&amp;#098;&amp;#098;&amp;#064;&amp;#114;&amp;#111;&amp;#098;&amp;#098;&amp;#046;&amp;#105;&amp;#115;&quot;&gt;&amp;#114;&amp;#111;&amp;#098;&amp;#098;&amp;#064;&amp;#114;&amp;#111;&amp;#098;&amp;#098;&amp;#046;&amp;#105;&amp;#115;&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/just-a-number-05272011</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/just-a-number-05272011"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fjust-a-number-05272011&amp;title=BUSINESS&amp;user_id=robb&amp;category=text" />

    <title>BUSINESS</title>
    <updated>2011-04-18T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/battlekat-music/business-1&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/das-racist</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/das-racist"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fdas-racist&amp;title=Das+Racist&amp;user_id=robb&amp;category=text" />

    <title>Das Racist</title>
    <updated>2011-04-09T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;div class=&quot;embed&quot; data-url=&quot;http://soundcloud.com/dasracist/sets/mishka-presents-das-racist-shut-up-dude-mixtape&quot;&gt;&lt;/div&gt;
</content>
  </entry>
  
  <entry>
    <id>http://robb.is/%25E2%259D%25A4ing/holocene</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/%E2%9D%A4ing/holocene"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2F%25E2%259D%25A4ing%2Fholocene&amp;title=Holocene&amp;user_id=robb&amp;category=text" />

    <title>Holocene</title>
    <updated>2011-03-28T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Seeing this, I can’t wait for my &lt;a href=&quot;http://monome.org&quot;&gt;monome&lt;/a&gt; arc 4 to arrive.&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://vimeo.com/21596928&quot;&gt;&lt;/div&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/thedickensbar.com</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/thedickensbar.com"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fthedickensbar.com&amp;title=thedickensbar.com&amp;description=Dickbar+meets+Dickens&amp;user_id=robb&amp;category=text" />

    <title>thedickensbar.com</title>
    <updated>2011-03-24T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Modeled after the infamous &lt;a href=&quot;http://dickbar.org/&quot;&gt;#dickbar&lt;/a&gt;, &lt;a href=&quot;http://johndadams.com&quot;&gt;Johnny&lt;/a&gt;, &lt;a href=&quot;http://parkerhiggins.net&quot;&gt;Parker&lt;/a&gt; and I build &lt;a href=&quot;http://thedickensbar.com/&quot;&gt;the Dickensbar&lt;/a&gt;.
A quick and easy way to add some class to every &lt;a href=&quot;http://thedickensbar.com/goto/?url=http%3A%2F%2Frobb.is&quot;&gt;website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/dickensbar-screenshot-small.png&quot; alt=&quot;The Dickensbar&quot; title=&quot;Bah, humbug!&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Or, to quote Dickens himself:
&amp;gt; “Electric communication will never be a substitute for the face of someone
&amp;gt; who with their soul encourages another person to be brave and true.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Twitter just announced they have &lt;a href=&quot;http://thedickensbar.com/goto/?url=http%3A%2F%2Fblog.twitter.com%2F2011%2F03%2Fso-bar-walks-into-app.html&quot;&gt;removed the quickbar&lt;/a&gt; with the latest update of the iOS application.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/vib-ribboff</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/vib-ribboff"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fvib-ribboff&amp;title=Vib+Ribboff&amp;description=A+browser+based+rhythm+game&amp;user_id=robb&amp;category=text" />

    <title>Vib Ribboff</title>
    <updated>2011-02-21T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;Vib Ribboff was my submission for the Music Hackday in New York in early 2011. It is a browser based clone of an old Playstation game called &lt;a href=&quot;http://www.vib-ribbon.com&quot;&gt;Vib Ribbon&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It uses the &lt;a href=&quot;http://developer.echonest.com&quot;&gt;Echonest API&lt;/a&gt; to resolve beat information off of &lt;a href=&quot;http://soundcloud.com/tracks&quot;&gt;SoundCloud tracks&lt;/a&gt;. Then it composes a level, matching obstacles to beats in the song.&lt;/p&gt;

&lt;p&gt;I plan to publish this online, though I haven’t had the time yet to write a backend. I’ll look into this as soon as I have some spare time.&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;https://youtube.com/watch?v=K6BhnFegmb0&quot;&gt;

&lt;/div&gt;

&lt;p&gt;Thanks to Parker for MCing the presentation.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/inunico.de</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/inunico.de"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Finunico.de&amp;title=inunico.de&amp;description=Browsing+the+Unicode+made+easy&amp;user_id=robb&amp;category=text" />

    <title>inunico.de</title>
    <updated>2011-01-04T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://inunico.de&quot;&gt;Inunico.de&lt;/a&gt; is a project my friend &lt;a href=&quot;http://parkerhiggins.net&quot;&gt;Parker&lt;/a&gt; and I are working on. It is basically a browser-based character map that allows users to search for any of the Unicode characters.&lt;/p&gt;

&lt;p&gt;It also supports a handy deep linking feature using readable URLs, e.g.: &lt;a href=&quot;http://airplane.inunico.de&quot;&gt;airplane.inunico.de&lt;/a&gt;, &lt;a href=&quot;http://postal-mark-face.inunico.de/&quot;&gt;postal-mark-face.inunico.de&lt;/a&gt; or (yes) &lt;a href=&quot;http://pile-of-poo.inunico.de&quot;&gt;pile-of-poo.inunico.de&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Unfortunately&lt;/em&gt;, support for the characters varies by Operating System and browser. For the best effect, inunico.de recommends a recent Firefox with the &lt;a href=&quot;http://users.teilar.gr/~g1951d/&quot;&gt;Symbola&lt;/a&gt; font installed.&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/radio-free-hackday</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/radio-free-hackday"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fradio-free-hackday&amp;title=Radio+Free+Hackday&amp;description=A+physical+way+to+browse+SoundCloud+tracks&amp;user_id=robb&amp;category=text" />

    <title>Radio Free Hackday</title>
    <updated>2010-02-11T00:00:00+01:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;This is a project my friend Simon and I worked on during Music Hackday Stockholm in early 2010.&lt;/p&gt;

&lt;p&gt;We wanted to come up with a physical interface for online music consumption. After a bit of research into various devices, we found the Panasonic RF-2400 and instantly fell in love with its iconic appearance. (It couldn’t look more like a radio, could it?)&lt;/p&gt;

&lt;p&gt;We removed the power supply to make room for an Arduino Mini running a custom firmware and shortwired the frequency dial so that the radio is always tuned to the same frequency, no matter which frequency the user selected.&lt;/p&gt;

&lt;p&gt;We then read out the position of the dial with the Arduino and sent it to the computer via USB. The computer would then stream music from the &lt;a href=&quot;http://citysounds.fm&quot;&gt;Citysounds.fm&lt;/a&gt; and &lt;a href=&quot;http://soundcloud.com&quot;&gt;SoundCloud&lt;/a&gt; APIs back into the device using a FM Transmitter.&lt;/p&gt;

&lt;p&gt;We got very positive feedback for our hack, &lt;a href=&quot;http://createdigitalmusic.com/2010/02/diy-community-your-web-connected-musical-future-at-music-hackday-stockholm/&quot;&gt;Create Digital Music&lt;/a&gt; wrote about it, we won two nice prizes from &lt;a href=&quot;http://pacemaker.com&quot;&gt;Pacemaker&lt;/a&gt; and even got featured on Sweden’s public TV station, SVT:&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://vimeo.com/9491104&quot;&gt;&lt;/div&gt;

&lt;p&gt;Please skip to 02:30 (Vimeo doesn’t allow for timed embeds).&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <id>http://robb.is/working-on/the-xylobot</id>
    
    <link type="text/html" rel="alternate" href="http://robb.is/working-on/the-xylobot"/>
    
    
    






<link type="text/html" rel="payment" href="https://flattr.com/submit/auto?url=http%3A%2F%2Frobb.is%2Fworking-on%2Fthe-xylobot&amp;title=Xylobot&amp;description=A+monome-controlled%2C+xylophone-playing+robot&amp;user_id=robb&amp;category=text" />

    <title>Xylobot</title>
    <updated>2009-09-20T00:00:00+02:00</updated>
    <author>
      <name>Robert Böhnke</name>
      <uri>http://robb.is/</uri>
    </author>
    <content type="html">&lt;p&gt;I met Ramsey Arnaoot at the Music Hackday Berlin 2009, discussing how underrepresented hardware hacks were, we decided to do something about it and came up with the Xylobot.&lt;/p&gt;

&lt;p&gt;The build is nothing special and quite self-explanatory, little hammers made of hot-glued bolts strike the Glockenspiel. The Arduino library suffered from a bug that would let us use only 6 servos, so we had to settle for the major pentatonic scale.&lt;/p&gt;

&lt;p&gt;On the computer side, a Java application is listening to incoming MIDI data and triggers the servos using simple serial messages. This was the second project I did with the Arduino and I am still amazed how easily things can be prototyped with this platform. Ramsey wrote a custom Pd-Patch for RjDj to generate music from sensory data, though we haven’t got a video of this.&lt;/p&gt;

&lt;p&gt;The Xylobot also was mentioned by Peter in &lt;a href=&quot;http://createdigitalmusic.com/2009/09/wild-musical-inventions-from-berlin-hackday/&quot;&gt;his Music Hackday wrap-up&lt;/a&gt; on Create Digital Music.&lt;/p&gt;

&lt;div class=&quot;embed&quot; data-url=&quot;http://vimeo.com/6668819&quot;&gt;&lt;/div&gt;

</content>
  </entry>
  
</feed>
