<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Zachery Bir]]></title>
  <link href="http://urbanape.com/atom.xml" rel="self"/>
  <link href="http://urbanape.com/"/>
  <updated>2013-05-08T15:24:01-04:00</updated>
  <id>http://urbanape.com/</id>
  <author>
    <name><![CDATA[Zachery Bir]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[App.net Sidebar]]></title>
    <link href="http://urbanape.com/blog/2013/05/08/app-dot-net-sidebar/"/>
    <updated>2013-05-08T14:03:00-04:00</updated>
    <id>http://urbanape.com/blog/2013/05/08/app-dot-net-sidebar</id>
    <content type="html"><![CDATA[<p>“Surely,” I thought, “there already exists an App.net sidebar for Octopress.”</p>

<p>[<strong>Edit:</strong> Well, there is, <a href="https://github.com/octopress/adn-timeline">officially</a>.]</p>

<p><strike>Well, there is, sorta.</strike> <a href="http://www.rousette.org.uk/blog/archives/app-dot-net-widget/">But She’s a Girl</a>
posted about her work at getting it integrated with her site, but its artifacts are mostly
bound up in the commit messages for her blog. Additionally, there’s no longer a real need to
offload the fetching of your App.net content to cron, you can get perfectly serviceable JSON
directly from App.net’s API. So, I opted to tweak it, the results of which you can see in my
sidebar.</p>

<!-- more -->


<p>I reached out to the Octopress folks and learned that a future update will include better ways
to bundle new functionality and templates together, but for now, I&#8217;ve uploaded my start at
<a href="https://github.com/urbanape/octopress-appnet-sidebar/">an App.net sidebar for Octopress</a>.</p>

<p>Using it involves three steps:</p>

<ol>
<li><a href="#step-1">Adding the Files</a></li>
<li><a href="#step-2">Stitching up the Local Sass Rules</a></li>
<li><a href="#step-3">Configuring your App.net Variables</a></li>
</ol>


<h2><a name="step-1"></a>Adding the Files</h2>

<h3>Template</h3>

<p><code>source/_includes/custom/asides/adn.html</code></p>

<figure class='code'><figcaption><span>Simple Sidebar Template </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'>{% if site.adn_user %}
</span><span class='line'><span class="nt">&lt;section&gt;</span>
</span><span class='line'>  <span class="nt">&lt;h1&gt;</span>Latest from App.net<span class="nt">&lt;/h1&gt;</span>
</span><span class='line'>  <span class="nt">&lt;ul</span> <span class="na">id=</span><span class="s">&quot;adn_posts&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">&quot;loading&quot;</span><span class="nt">&gt;</span>Status updating...<span class="nt">&lt;/li&gt;</span>
</span><span class='line'>  <span class="nt">&lt;/ul&gt;</span>
</span><span class='line'>  <span class="nt">&lt;a</span> <span class="na">id=</span><span class="s">&quot;adn_follow&quot;</span> <span class="na">href=</span><span class="s">&quot;https://alpha.app.net/intent/follow/?user_id=@{{site.adn_user}}&quot;</span><span class="nt">&gt;</span>Follow @{{site.adn_user}} on App.net<span class="nt">&lt;/a&gt;</span>
</span><span class='line'>  <span class="nt">&lt;script </span><span class="na">type=</span><span class="s">&quot;text/javascript&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>    <span class="nx">$</span><span class="p">(</span><span class="nb">document</span><span class="p">).</span><span class="nx">ready</span><span class="p">(</span><span class="kd">function</span><span class="p">(){</span>
</span><span class='line'>      <span class="nx">getADNFeed</span><span class="p">(</span><span class="s2">&quot;{{site.adn_user}}&quot;</span><span class="p">,</span> <span class="p">{{</span><span class="nx">site</span><span class="p">.</span><span class="nx">adn_post_count</span><span class="p">}},</span> <span class="p">{{</span><span class="nx">site</span><span class="p">.</span><span class="nx">adn_show_replies</span><span class="p">}});</span>
</span><span class='line'>    <span class="p">});</span>
</span><span class='line'>  <span class="nt">&lt;/script&gt;</span>
</span><span class='line'>  <span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;{{ root_url }}/javascripts/adn.js&quot;</span> <span class="na">type=</span><span class="s">&quot;text/javascript&quot;</span><span class="nt">&gt;</span> <span class="nt">&lt;/script&gt;</span>
</span><span class='line'><span class="nt">&lt;/section&gt;</span>
</span><span class='line'>{% endif %}
</span></code></pre></td></tr></table></div></figure>


<h3>Javascript</h3>

<p><code>source/javascripts/adn.js</code></p>

<figure class='code'><figcaption><span>Cribbed and bent from twitter.js </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="c1">// JSON-P App.net fetcher for Octopress</span>
</span><span class='line'><span class="c1">// (c) Zachery Bir, based on Twitter fetcher by Brandon Mathis // MIT License</span>
</span><span class='line'>
</span><span class='line'><span class="cm">/* Sky Slavin, Ludopoli. MIT license.  * based on JavaScript Pretty Date * Copyright (c) 2008 John Resig (jquery.com) * Licensed under the MIT license.  */</span>
</span><span class='line'><span class="kd">function</span> <span class="nx">prettyDate</span><span class="p">(</span><span class="nx">time</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>  <span class="k">if</span> <span class="p">(</span><span class="nx">navigator</span><span class="p">.</span><span class="nx">appName</span> <span class="o">===</span> <span class="s1">&#39;Microsoft Internet Explorer&#39;</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">return</span> <span class="s2">&quot;&lt;span&gt;&amp;infin;&lt;/span&gt;&quot;</span><span class="p">;</span> <span class="c1">// because IE date parsing isn&#39;t fun.</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'>  <span class="kd">var</span> <span class="nx">say</span> <span class="o">=</span> <span class="p">{</span>
</span><span class='line'>    <span class="nx">just_now</span><span class="o">:</span>    <span class="s2">&quot; now&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nx">minute_ago</span><span class="o">:</span>  <span class="s2">&quot;1m&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nx">minutes_ago</span><span class="o">:</span> <span class="s2">&quot;m&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nx">hour_ago</span><span class="o">:</span>    <span class="s2">&quot;1h&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nx">hours_ago</span><span class="o">:</span>   <span class="s2">&quot;h&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nx">yesterday</span><span class="o">:</span>   <span class="s2">&quot;1d&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nx">days_ago</span><span class="o">:</span>    <span class="s2">&quot;d&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nx">last_week</span><span class="o">:</span>   <span class="s2">&quot;1w&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nx">weeks_ago</span><span class="o">:</span>   <span class="s2">&quot;w&quot;</span>
</span><span class='line'>  <span class="p">};</span>
</span><span class='line'>
</span><span class='line'>  <span class="kd">var</span> <span class="nx">current_date</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(),</span>
</span><span class='line'>      <span class="nx">current_date_time</span> <span class="o">=</span> <span class="nx">current_date</span><span class="p">.</span><span class="nx">getTime</span><span class="p">(),</span>
</span><span class='line'>      <span class="nx">current_date_full</span> <span class="o">=</span> <span class="nx">current_date_time</span> <span class="o">+</span> <span class="p">(</span><span class="mi">1</span> <span class="o">*</span> <span class="mi">60000</span><span class="p">),</span>
</span><span class='line'>      <span class="nx">date</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="nx">time</span><span class="p">),</span>
</span><span class='line'>      <span class="nx">diff</span> <span class="o">=</span> <span class="p">((</span><span class="nx">current_date_full</span> <span class="o">-</span> <span class="nx">date</span><span class="p">.</span><span class="nx">getTime</span><span class="p">())</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">),</span>
</span><span class='line'>      <span class="nx">day_diff</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">(</span><span class="nx">diff</span> <span class="o">/</span> <span class="mi">86400</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">if</span> <span class="p">(</span><span class="nb">isNaN</span><span class="p">(</span><span class="nx">day_diff</span><span class="p">)</span> <span class="o">||</span> <span class="nx">day_diff</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="s2">&quot;&lt;span&gt;&amp;infin;&lt;/span&gt;&quot;</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">return</span> <span class="nx">day_diff</span> <span class="o">===</span> <span class="mi">0</span> <span class="o">&amp;&amp;</span> <span class="p">(</span>
</span><span class='line'>    <span class="nx">diff</span> <span class="o">&lt;</span> <span class="mi">60</span> <span class="o">&amp;&amp;</span> <span class="nx">say</span><span class="p">.</span><span class="nx">just_now</span> <span class="o">||</span>
</span><span class='line'>    <span class="nx">diff</span> <span class="o">&lt;</span> <span class="mi">120</span> <span class="o">&amp;&amp;</span> <span class="nx">say</span><span class="p">.</span><span class="nx">minute_ago</span> <span class="o">||</span>
</span><span class='line'>    <span class="nx">diff</span> <span class="o">&lt;</span> <span class="mi">3600</span> <span class="o">&amp;&amp;</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">(</span><span class="nx">diff</span> <span class="o">/</span> <span class="mi">60</span><span class="p">)</span> <span class="o">+</span> <span class="nx">say</span><span class="p">.</span><span class="nx">minutes_ago</span> <span class="o">||</span>
</span><span class='line'>    <span class="nx">diff</span> <span class="o">&lt;</span> <span class="mi">7200</span> <span class="o">&amp;&amp;</span> <span class="nx">say</span><span class="p">.</span><span class="nx">hour_ago</span> <span class="o">||</span>
</span><span class='line'>    <span class="nx">diff</span> <span class="o">&lt;</span> <span class="mi">86400</span> <span class="o">&amp;&amp;</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">(</span><span class="nx">diff</span> <span class="o">/</span> <span class="mi">3600</span><span class="p">)</span> <span class="o">+</span> <span class="nx">say</span><span class="p">.</span><span class="nx">hours_ago</span><span class="p">)</span> <span class="o">||</span>
</span><span class='line'>    <span class="nx">day_diff</span> <span class="o">===</span> <span class="mi">1</span> <span class="o">&amp;&amp;</span> <span class="nx">say</span><span class="p">.</span><span class="nx">yesterday</span> <span class="o">||</span>
</span><span class='line'>    <span class="nx">day_diff</span> <span class="o">&lt;</span> <span class="mi">7</span> <span class="o">&amp;&amp;</span> <span class="nx">day_diff</span> <span class="o">+</span> <span class="nx">say</span><span class="p">.</span><span class="nx">days_ago</span> <span class="o">||</span>
</span><span class='line'>    <span class="nx">day_diff</span> <span class="o">===</span> <span class="mi">7</span> <span class="o">&amp;&amp;</span> <span class="nx">say</span><span class="p">.</span><span class="nx">last_week</span> <span class="o">||</span>
</span><span class='line'>    <span class="nx">day_diff</span> <span class="o">&gt;</span> <span class="mi">7</span> <span class="o">&amp;&amp;</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">ceil</span><span class="p">(</span><span class="nx">day_diff</span> <span class="o">/</span> <span class="mi">7</span><span class="p">)</span> <span class="o">+</span> <span class="nx">say</span><span class="p">.</span><span class="nx">weeks_ago</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="kd">function</span> <span class="nx">linkifyPost</span><span class="p">(</span><span class="nx">text</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>  <span class="c1">// Linkify urls, usernames</span>
</span><span class='line'>  <span class="nx">text</span> <span class="o">=</span> <span class="nx">text</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/(https?:\/\/)([\w\-:;?&amp;=+.%#\/]+)/gi</span><span class="p">,</span> <span class="s1">&#39;&lt;a href=&quot;$1$2&quot;&gt;$2&lt;/a&gt;&#39;</span><span class="p">)</span>
</span><span class='line'>    <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/(^|\W)@(\w+)/g</span><span class="p">,</span> <span class="s1">&#39;$1&lt;a href=&quot;https://alpha.app.net/$2&quot;&gt;@$2&lt;/a&gt;&#39;</span><span class="p">)</span>
</span><span class='line'>    <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\&gt;\&gt;/g</span><span class="p">,</span> <span class="s1">&#39;&amp;#x267B;&#39;</span><span class="p">);</span>
</span><span class='line'>
</span><span class='line'>  <span class="k">return</span> <span class="nx">text</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="kd">function</span> <span class="nx">showADNFeed</span><span class="p">(</span><span class="nx">posts</span><span class="p">,</span> <span class="nx">count</span><span class="p">,</span> <span class="nx">show_replies</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>  <span class="kd">var</span> <span class="nx">timeline</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;adn_posts&#39;</span><span class="p">),</span>
</span><span class='line'>      <span class="nx">content</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>  <span class="kd">var</span> <span class="nx">num</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span><span class='line'>  <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">t</span> <span class="k">in</span> <span class="nx">posts</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>      <span class="kd">var</span> <span class="nx">post</span> <span class="o">=</span> <span class="nx">posts</span><span class="p">[</span><span class="nx">t</span><span class="p">];</span>
</span><span class='line'>      <span class="k">if</span> <span class="p">(</span><span class="nx">post</span><span class="p">.</span><span class="nx">text</span> <span class="o">&amp;&amp;</span>
</span><span class='line'>          <span class="nx">num</span> <span class="o">&lt;</span> <span class="nx">count</span><span class="p">)</span>
</span><span class='line'>      <span class="p">{</span>
</span><span class='line'>          <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">show_replies</span> <span class="o">&amp;&amp;</span>
</span><span class='line'>              <span class="p">(</span><span class="nx">post</span><span class="p">.</span><span class="nx">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;@&#39;</span> <span class="o">||</span>
</span><span class='line'>               <span class="nx">post</span><span class="p">.</span><span class="nx">reply_to</span><span class="p">))</span>
</span><span class='line'>          <span class="p">{</span>
</span><span class='line'>              <span class="k">continue</span><span class="p">;</span>
</span><span class='line'>          <span class="p">}</span>
</span><span class='line'>          <span class="nx">content</span> <span class="o">+=</span> <span class="s1">&#39;&lt;li&gt;&#39;</span><span class="o">+</span><span class="s1">&#39;&lt;p&gt;&#39;</span><span class="o">+</span><span class="s1">&#39;&lt;a class=&quot;author&quot; href=&quot;&#39;</span> <span class="o">+</span> <span class="nx">post</span><span class="p">.</span><span class="nx">user</span><span class="p">.</span><span class="nx">canonical_url</span> <span class="o">+</span> <span class="s1">&#39;&quot;&gt;@&#39;</span> <span class="o">+</span> <span class="nx">post</span><span class="p">.</span><span class="nx">user</span><span class="p">.</span><span class="nx">username</span> <span class="o">+</span> <span class="s1">&#39;&lt;/a&gt; &lt;a class=&quot;timestamp&quot; href=&quot;&#39;</span><span class="o">+</span><span class="nx">post</span><span class="p">.</span><span class="nx">canonical_url</span><span class="o">+</span><span class="s1">&#39;&quot;&gt;&#39;</span><span class="o">+</span><span class="nx">prettyDate</span><span class="p">(</span><span class="nx">post</span><span class="p">.</span><span class="nx">created_at</span><span class="p">)</span><span class="o">+</span><span class="s1">&#39;&lt;/a&gt; &lt;div&gt;&#39;</span><span class="o">+</span><span class="nx">linkifyPost</span><span class="p">(</span><span class="nx">post</span><span class="p">.</span><span class="nx">text</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\n/g</span><span class="p">,</span> <span class="s1">&#39;&lt;br&gt;&#39;</span><span class="p">))</span><span class="o">+</span><span class="s1">&#39;&lt;/div&gt;&lt;/p&gt;&#39;</span><span class="o">+</span><span class="s1">&#39;&lt;/li&gt;&#39;</span><span class="p">;</span>
</span><span class='line'>          <span class="nx">num</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">;</span>
</span><span class='line'>      <span class="p">}</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'>  <span class="nx">timeline</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">content</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="kd">function</span> <span class="nx">getADNFeed</span><span class="p">(</span><span class="nx">user</span><span class="p">,</span> <span class="nx">count</span><span class="p">,</span> <span class="nx">show_replies</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>  <span class="nx">count</span> <span class="o">=</span> <span class="nb">parseInt</span><span class="p">(</span><span class="nx">count</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
</span><span class='line'>  <span class="nx">$</span><span class="p">.</span><span class="nx">ajax</span><span class="p">({</span>
</span><span class='line'>      <span class="nx">url</span><span class="o">:</span> <span class="s2">&quot;https://alpha-api.app.net/stream/0/users/@&quot;</span> <span class="o">+</span> <span class="nx">user</span> <span class="o">+</span> <span class="s2">&quot;/posts?count=&quot;</span> <span class="o">+</span> <span class="p">(</span><span class="nx">count</span> <span class="o">+</span> <span class="mi">20</span><span class="p">)</span>
</span><span class='line'>    <span class="p">,</span> <span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;GET&#39;</span>
</span><span class='line'>    <span class="p">,</span> <span class="nx">error</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#adn_posts li.loading&#39;</span><span class="p">).</span><span class="nx">addClass</span><span class="p">(</span><span class="s1">&#39;error&#39;</span><span class="p">).</span><span class="nx">text</span><span class="p">(</span><span class="s2">&quot;App.net’s unavailable&quot;</span><span class="p">);</span> <span class="p">}</span>
</span><span class='line'>    <span class="p">,</span> <span class="nx">success</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="p">{</span> <span class="nx">showADNFeed</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">data</span><span class="p">,</span> <span class="nx">count</span><span class="p">,</span> <span class="nx">show_replies</span><span class="p">);</span> <span class="p">}</span>
</span><span class='line'>  <span class="p">})</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Sass</h3>

<p><code>sass/partials/sidebar/_adn.scss</code></p>

<figure class='code'><figcaption><span>Cribbed and bent from the old Twitter SCSS </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
</pre></td><td class='code'><pre><code class='css'><span class='line'><span class="nf">#adn_posts</span> <span class="p">{</span>
</span><span class='line'>  <span class="o">.</span><span class="n">loading</span> <span class="err">{</span>
</span><span class='line'>    <span class="k">background</span><span class="o">:</span> <span class="k">inline</span><span class="o">-</span><span class="n">image</span><span class="p">(</span><span class="s1">&#39;adn_32_gray.png&#39;</span><span class="p">)</span> <span class="k">no-repeat</span> <span class="k">center</span> <span class="m">.5em</span><span class="p">;</span>
</span><span class='line'>    <span class="k">color</span><span class="o">:</span> <span class="n">darken</span><span class="p">(</span><span class="err">$</span><span class="n">sidebar</span><span class="o">-</span><span class="n">bg</span><span class="o">,</span> <span class="m">18</span><span class="p">);</span>
</span><span class='line'>    <span class="k">text-shadow</span><span class="o">:</span> <span class="err">$</span><span class="n">main</span><span class="o">-</span><span class="n">bg</span> <span class="m">0</span> <span class="m">1px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">text-align</span><span class="o">:</span> <span class="k">center</span><span class="p">;</span>
</span><span class='line'>    <span class="k">padding</span><span class="o">:</span> <span class="m">2.5em</span> <span class="m">0</span> <span class="m">.5em</span><span class="p">;</span>
</span><span class='line'>    <span class="o">&amp;.</span><span class="n">error</span> <span class="err">{</span>
</span><span class='line'>      <span class="k">background</span><span class="o">:</span> <span class="k">inline</span><span class="o">-</span><span class="n">image</span><span class="p">(</span><span class="s1">&#39;adn_32_gray.png&#39;</span><span class="p">)</span> <span class="k">no-repeat</span> <span class="k">center</span> <span class="m">.5em</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>  <span class="err">}</span>
</span><span class='line'>  <span class="nt">p</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">position</span><span class="o">:</span> <span class="k">relative</span><span class="p">;</span>
</span><span class='line'>    <span class="k">padding-right</span><span class="o">:</span> <span class="m">1em</span><span class="p">;</span>
</span><span class='line'>    <span class="k">font-size</span><span class="o">:</span> <span class="m">.9em</span><span class="p">;</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'>  <span class="nt">a</span><span class="nc">.author</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">float</span><span class="o">:</span> <span class="k">left</span><span class="p">;</span>
</span><span class='line'>    <span class="k">padding</span><span class="o">:</span> <span class="m">0</span> <span class="m">0</span> <span class="m">1em</span> <span class="m">.1em</span><span class="p">;</span>
</span><span class='line'>    <span class="k">position</span><span class="o">:</span> <span class="k">relative</span><span class="p">;</span>
</span><span class='line'>    <span class="k">text-shadow</span><span class="o">:</span> <span class="m">#fff</span> <span class="m">0</span> <span class="m">1px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">font-size</span><span class="o">:</span> <span class="m">.7em</span><span class="p">;</span>
</span><span class='line'>    <span class="n">span</span> <span class="err">{</span> <span class="k">font-size</span><span class="o">:</span> <span class="m">1.5em</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>    <span class="nt">text-decoration</span><span class="o">:</span> <span class="nt">none</span><span class="o">;</span>
</span><span class='line'>    <span class="o">&amp;</span><span class="nd">:hover</span> <span class="p">{</span>
</span><span class='line'>      <span class="k">color</span><span class="o">:</span> <span class="err">$</span><span class="n">sidebar</span><span class="o">-</span><span class="n">link</span><span class="o">-</span><span class="k">color</span><span class="o">-</span><span class="n">subdued</span><span class="o">-</span><span class="n">hover</span><span class="p">;</span>
</span><span class='line'>      <span class="k">text-decoration</span><span class="o">:</span> <span class="k">none</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>  <span class="err">}</span>
</span><span class='line'>  <span class="nt">a</span><span class="nc">.timestamp</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">color</span><span class="o">:</span> <span class="n">lighten</span><span class="p">(</span><span class="err">$</span><span class="n">sidebar</span><span class="o">-</span><span class="n">link</span><span class="o">-</span><span class="k">color</span><span class="o">-</span><span class="n">subdued</span><span class="o">,</span> <span class="m">15</span><span class="p">);</span>
</span><span class='line'>    <span class="k">float</span><span class="o">:</span> <span class="k">right</span><span class="p">;</span>
</span><span class='line'>    <span class="k">padding</span><span class="o">:</span> <span class="m">0</span> <span class="m">0</span> <span class="m">.1em</span> <span class="m">1em</span><span class="p">;</span>
</span><span class='line'>    <span class="k">position</span><span class="o">:</span> <span class="k">relative</span><span class="p">;</span> <span class="k">right</span><span class="o">:</span> <span class="m">-1.3em</span><span class="p">;</span>
</span><span class='line'>    <span class="k">text-shadow</span><span class="o">:</span> <span class="m">#fff</span> <span class="m">0</span> <span class="m">1px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">font-size</span><span class="o">:</span> <span class="m">.7em</span><span class="p">;</span>
</span><span class='line'>    <span class="n">span</span> <span class="err">{</span> <span class="k">font-size</span><span class="o">:</span> <span class="m">1.5em</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>    <span class="nt">text-decoration</span><span class="o">:</span> <span class="nt">none</span><span class="o">;</span>
</span><span class='line'>    <span class="o">&amp;</span><span class="nd">:hover</span> <span class="p">{</span>
</span><span class='line'>      <span class="k">color</span><span class="o">:</span> <span class="err">$</span><span class="n">sidebar</span><span class="o">-</span><span class="n">link</span><span class="o">-</span><span class="k">color</span><span class="o">-</span><span class="n">subdued</span><span class="o">-</span><span class="n">hover</span><span class="p">;</span>
</span><span class='line'>      <span class="k">text-decoration</span><span class="o">:</span> <span class="k">none</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>  <span class="err">}</span>
</span><span class='line'>  <span class="nt">a</span><span class="o">[</span><span class="nt">href</span><span class="o">*=</span><span class="s1">&#39;alpha.app.net&#39;</span><span class="o">]</span><span class="p">{</span>
</span><span class='line'>    <span class="o">@</span><span class="n">extend</span> <span class="o">.</span><span class="n">aside</span><span class="o">-</span><span class="n">alt</span><span class="o">-</span><span class="n">link</span><span class="p">;</span>
</span><span class='line'>    <span class="o">@</span><span class="n">include</span> <span class="n">hover</span><span class="o">-</span><span class="n">link</span><span class="p">;</span>
</span><span class='line'>    <span class="k">font-size</span><span class="o">:</span> <span class="m">.9em</span><span class="p">;</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'>  <span class="nt">div</span> <span class="p">{</span>
</span><span class='line'>      <span class="k">position</span><span class="o">:</span> <span class="k">relative</span><span class="p">;</span>
</span><span class='line'>      <span class="k">left</span><span class="o">:</span> <span class="m">.5em</span><span class="p">;</span>
</span><span class='line'>      <span class="k">padding-right</span><span class="o">:</span> <span class="m">.5em</span><span class="p">;</span>
</span><span class='line'>      <span class="k">font-size</span><span class="o">:</span> <span class="m">.9em</span><span class="p">;</span>
</span><span class='line'>      <span class="k">clear</span><span class="o">:</span> <span class="k">both</span><span class="p">;</span>
</span><span class='line'>  <span class="p">}</span>
</span><span class='line'><span class="err">}</span>
</span><span class='line'>
</span><span class='line'><span class="nt">a</span><span class="nf">#adn_follow</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">font-size</span><span class="o">:</span> <span class="m">.9em</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Images</h3>

<p><code>source/images/adn_32_gray.png</code></p>

<p><img src="http://urbanape.com/images/adn_32_gray.png"></p>

<h2><a name="step-2"></a>Stitching up the Local Sass Rules</h2>

<p>Beyond simple dropping the above files in the correct place, you&#8217;ll need to edit the following
file to include the ADN Sass for compilation:</p>

<p><code>sass/partials/_sidebar.scss</code></p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='sass'><span class='line'><span class="k">@import</span> <span class="s">&quot;sidebar/adn&quot;;</span>
</span></code></pre></td></tr></table></div></figure>


<h2><a name="step-3"></a>Configuring your App.net Variables</h2>

<p>Configuration is simple. Just add some variables to your <code>_config.yaml</code> file:</p>

<pre><code># App.net
adn_user: urbanape
adn_post_count: 5
adn_show_replies: false
</code></pre>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Buy My Bag: 2013]]></title>
    <link href="http://urbanape.com/blog/2013/05/06/buy-my-bag-2013/"/>
    <updated>2013-05-06T14:49:00-04:00</updated>
    <id>http://urbanape.com/blog/2013/05/06/buy-my-bag-2013</id>
    <content type="html"><![CDATA[<p>It’s that time again. Time for you to buy my bag. I’ve got a 2011 Tom Bihn Ristretto
for 13&#8221; MacBook Pro (same structure as their
<a href="http://www.tombihn.com/PROD/TB0231.html">Original Style Ristretto</a>, but larger). It’s
Cocoa with Cayenne interior, and it has the Absolute Shoulder Strap. It’s in fabulous
condition, and it really, really wants to live at your house. One solitary Benjamin is
all that separates you from this beautiful bag.</p>

<p><img class="borderless" src="http://urbanape.com/post_images/IMG_2215_thumbnail.png" title="Tom Bihn Ristretto" alt="Tom Bihn Ristretto"></p>

<p><img class="borderless" src="http://urbanape.com/post_images/IMG_2217_thumbnail.png" title="Tom Bihn Ristretto" alt="Tom Bihn Ristretto"></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Zem 0.9.9]]></title>
    <link href="http://urbanape.com/blog/2013/05/01/zem-0-9-9/"/>
    <updated>2013-05-01T17:10:00-04:00</updated>
    <id>http://urbanape.com/blog/2013/05/01/zem-0-9-9</id>
    <content type="html"><![CDATA[<h3>“ExternalEditor: Because no one should have to use &lt;textarea&gt;”</h3>

<p>Long ago, Casey Duncan wrote a Zope 2 product called ExternalEditor. It let users of Linux and
Windows designate local apps to edit Zope-hosted content. As a budding OS X developer, and a
user of Zope, I ported it to OS X using the PyObjC framework and called it ZopeEditManager.
Periodically, as OS X versions came along, ZopeEditManager needed to be patched and
resuscitated.</p>

<p>As it happens, I’m now doing some contract work with Zope, and found it needed another update
for Mountain Lion, so I’ve rolled out another version. And since it doesn’t seem to be on the
Zope Foundation list of a million GitHub repositories, I’ll be hosting it again under my
<a href="https://github.com/orangutango/Zem">Orangutango repositories</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Dunno if It’s Art, but I Like It]]></title>
    <link href="http://urbanape.com/blog/2013/02/19/dunno-if-its-art-but-i-like-it/"/>
    <updated>2013-02-19T13:06:00-05:00</updated>
    <id>http://urbanape.com/blog/2013/02/19/dunno-if-its-art-but-i-like-it</id>
    <content type="html"><![CDATA[<h2>The Itch</h2>

<p>It started innocuously enough. It started with a tweet:</p>

<blockquote class="twitter-tweet"><p>Since some of you have asked, I love these wallpapers: <a href="http://t.co/TrsZykfq"
title="http://simoncpage.co.uk/blog/">simoncpage.co.uk/blog/</a></p>&mdash; Craig Hockenberry (@chockenberry) <a href="https://twitter.com/chockenberry/status/302180625870364672">February 14,
2013</a></blockquote>


<script async src="http://urbanape.com//platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>I followed the link and Simon’s art made an immediate impression on me. In an instant, I knew how I might go about riffing on his designs. A long time ago, there was an app called
<a href="http://nodebox.net/">NodeBox</a> (and before that was DrawBot), which was made for generating programmatic art. I set about creating a simple NodeBox script to start making circles, hexagons, lines, and filling them in with various colors.</p>

<!-- more -->


<p><img src="http://urbanape.com/post_images/ugly_circles.jpeg" title="Ugly Circles" alt="Ugly Circles"></p>

<p>My first attempts were beyond ugly. Random colors do not a palette
make. So, I started browsing Adobe’s <a href="http://kuler.adobe.com/">Kuler</a> for some thoughtfully composed palettes.</p>

<p><img src="http://urbanape.com/post_images/pretty_circles.jpeg" title="Pretty Circles" alt="Pretty Circles"></p>

<p>I also played with creating more lines connecting the various circle centers, varying the thickness of all the strokes, parameterizing the size of the circles, and seeding the image with larger
blobs of color. Around this time, I also cleaned up the maths that situated the circles and the lines connecting them. Amazingly, the first attempts were produced via trial-and-error, and were
within a few pixels of what they should have been (sad Zac forgot a lot of math since high school).</p>

<p><img src="http://urbanape.com/post_images/more_lines.jpeg" title="More Lines" alt="More Lines"></p>

<p>Finally, as nice and complementary as the colors were, there was a richness and depth that was missing. So I applied a few Snapseed filters to give them a bit more toothsomeness.</p>

<p><img src="http://urbanape.com/post_images/toothsome_depth.jpeg" title="Toothsome Depth" alt="Toothsome Depth"></p>

<p>Since playing with the hexacircles, I’ve also taken a quick stab at doing something with triangles, and lollipops, inspired by several of the pieces in Simon’s
<a href="http://www.flickr.com/photos/simoncpage/sets/72157623099901702/with/4296226201/">Futurism set</a>.</p>

<p><a href="http://www.flickr.com/photos/urbanape/8485895127/in/set-72157632795310221"><img src="http://urbanape.com/post_images/triangles.jpeg" title="Triangles" alt="Triangles"></a></p>

<p><a href="http://www.flickr.com/photos/urbanape/8488761549/in/set-72157632795310221"><img src="http://urbanape.com/post_images/lollipops.jpeg" title="Lollipops" alt="Lollipops"></a></p>

<p><a href="http://www.flickr.com/photos/urbanape/8487004774/in/set-72157632795310221"><img src="http://urbanape.com/post_images/hexacircles.jpeg" title="Hexacircles" alt="Hexacircles"></a></p>

<h2>The Tools</h2>

<h3><a href="https://itunes.apple.com/app/id528579881">Pythonista</a></h3>

<p>This Universal iOS app is a brilliant little self-contained Python environment, complete with network access APIs for pulling in content (like the Adobe Kuler RSS feeds), and canvas and scene
libraries for making drawing (and interactivity) easy. Highly recommended.</p>

<h3><a href="http://nodebox.net/code/index.php/Home">NodeBox 1</a></h3>

<p>For the desktop, I use NodeBox 1. For the work I’ve done to date, it’s more than adequate. There are some discrepancies in the APIs between Pythonista and NodeBox, and I’m currently writing a
bridge library to make it easier to use the same scripts in both environments.</p>

<h3><a href="https://itunes.apple.com/us/app/snapseed/id439438619?mt=8">Snapseed</a></h3>

<p>For image filtering and processing, you can hardly go wrong with this app. There is a counterpart Mac app, but I haven’t used it yet. I understand it’s still awaiting a Retina update. For my
images, I typically give them an Auto Correct, a Drama with Saturation bumped up to about 65%, and a Grunge with Saturation kept at 65%, Texture Strength at 25%, and the others tweaked until it looks good.</p>

<h2>The Code</h2>

<p>I’ve begun uploading the <a href="http://github.com/urbanape/pythonista/">suite</a> of scripts that generate the base images. Pull requests welcome.</p>

<h2>The Results</h2>

<p>And I’ve uploaded the standouts to my <a href="http://www.flickr.com/photos/urbanape/sets/72157632795310221/">Flickr set</a>.</p>

<p>I hope you enjoy, and I’d love to hear how folks riff off my pretty pictures.</p>
]]></content>
  </entry>
  
</feed>
