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

  <title><![CDATA[The Hiltmon]]></title>
  <link href="http://hiltmon.com/atom.xml" rel="self"/>
  <link href="http://hiltmon.com/"/>
  <updated>2013-06-15T13:24:04-04:00</updated>
  <id>http://hiltmon.com/</id>
  <author>
    <name><![CDATA[Hilton Lipschitz]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[WWDC 2013 Post-Game Review]]></title>
    <link href="http://hiltmon.com/blog/2013/06/15/wwdc-2013-post-game-review/"/>
    <updated>2013-06-15T12:22:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/06/15/wwdc-2013-post-game-review</id>
    <content type="html"><![CDATA[<p>Just under a week ago, Tim Cook walked out on stage to present the keynote at WWDC 2013 (<a href="http://www.apple.com/apple-events/june-2013/">Video here</a>). It was an astounding success. I think Apple has become Tim Cook&rsquo;s Apple, and the products announced are living proof of that.</p>

<p>After letting them percolate for a few days, here are my impressions of what was announced.</p>

<!--more-->


<h2>iOS 7</h2>

<p><img class="right" src="http://hiltmon.com/images/ios7-mail.jpg" width="238" height="422"></p>

<p>The iOS look and feel has remained largely unchanged since the first iPhone release. Same icons, same springboard, same buttons and UI elements. I think the key to the iPhone&rsquo;s success was this beautifully simple UI, and the fact that Apple got it so right at the first attempt was amazing.</p>

<p>But the current iOS UI is starting to look worn in as we have all  gotten used to it. I believe it was designed to <em>teach</em> us all how to use touch screens. We all now <em>know</em> how to use them. It is time for a change.</p>

<p>My first response to the new iOS 7 look and feel was this: <em>&ldquo;It&rsquo;s what Windows Phone would look like if they used real designers&rdquo;</em>. My first impression was of large swathes of bright white, tall and thin letterforms, borderless buttons and UI and the same flat look as Microsoft&rsquo;s metro. <span class="light">Yuk.</span></p>

<p><img class="left" src="http://hiltmon.com/images/ios7-weather.jpg" width="238" height="422"></p>

<p>But then I looked closer. The colors are more subtle, the shapes more organic, the text more readable and yet the UI calls to action remain visible and present, unlike Metro. <span class="light">Er, not Yuk.</span> It grew on me so quickly, especially after I started using it.</p>

<p>The updated email UI, the new weather app look, the today view on Notification Center, multitasking that looks like Palm&rsquo;s Web OS and the edge-to-edge use of the display are exceptionally functional and beautiful.</p>

<p>Of course this new look led to a typical Internet brouhaha. Designers shouted about how much they hated the new look, that the icons were horrible and the new control center looks like a mess. It was the typical knee-jerk screaming reaction to change.</p>

<p><img class="right" src="http://hiltmon.com/images/ios7-multitasking.jpg" width="238" height="422"></p>

<p>But they had not yet <em>used</em> iOS 7.</p>

<p>I installed it on my old iPhone 4 just to get a feel for it. And when I showed it off 24 hours later, I realized that I <em>did</em> indeed like it, a lot. The screens are easier to read, the tappables are just as explicit and easy to see and understand, and the content, not the chrome <em>does</em> stand out.</p>

<p>Considering that they had only 7 months to come up with this <em>Developer Preview</em> look, I think we can all look forward to some amazingly rapid changes before the final release and years of Apple&rsquo;s legendary iteration on this look and experience. I think iOS just seems to <em>work</em> better with the new look.</p>

<p><strong>Other likes</strong>: The radio service, the new photos interface, AirDrop, lost iPhone features.<br/>
<strong>Meh</strong>: iCloud keychain (<a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252F1password-password-manager%252Fid568903335%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">1Password</a> for ever!), apps near me.</p>

<h2>OS X Mavericks</h2>

<p>I&rsquo;m a Mac. I spend all day, every day working on OS X. Over the years, I have had to adjust my working style to suit as new editions came out.</p>

<p>The biggest change for me moving OS X 10.6 Snow Leopard to 10.7 Lion was the full screen apps change. I could full screen an app, wonderful, but my second monitor became useless unless I was using Aperture. It was distracting to see boring gray linen where I expected to see my other windows.</p>

<p><img src="http://hiltmon.com/images/lion-full-screen.jpg" width="720" height="225"></p>

<p>So I switched from a two monitor setup to a single monitor setup. And got used to using gestures to switch between Mission Control desktops, which I then justified as helping me remain focussed. Until I realized that that was actually true, I did remain more focussed and more productive on a single monitor setup.</p>

<p><img src="http://hiltmon.com/images/mavericks-full-screen.jpg" width="452" height="246"></p>

<p>The new independent multi-monitor features of OS X Mavericks looks just the trick. Independent monitors, menus on each screen, independent spaces, just right. It should have been done in Lion. I&rsquo;m glad Apple finally got it right.</p>

<p>I do like the new calendar look and feel, and finally someone has intelligently found a way to scroll a calendar. Finder tabs are cool, and integrated tagging looks great, I just hope it works with <a href="http://code.google.com/p/openmeta/">OpenMeta</a>.</p>

<p>On the geeky side, the new compressed memory, coalesced timers, app nap and click-to-play flash look fantastic and I am looking forward to seeing them in action.</p>

<p><strong>Other likes</strong>: Maps and notification actions.<br/>
<strong>Meh</strong>: iCloud Keychain, iBooks.<br/>
<strong>Dislike</strong>: The name &mdash; I don&rsquo;t know the place, but it feels like a plural name applied to a singular item, and therefore just wrong.</p>

<h2>Haswell Macbook Air</h2>

<p><img src="http://hiltmon.com/images/macbook-pro-side.jpg" width="650" height="142"></p>

<p>I am writing this on the top-of-the-line mid-2009 15&#8221; Macbook Pro with dual 3 GHz cores, 8GB of RAM, a new SSD and a failing battery, and this machine is plenty fast for my needs (as long as it&rsquo;s plugged in).</p>

<p><img src="http://hiltmon.com/images/macbook-air-side.jpg" width="650" height="79"></p>

<p>The new base model Air is benchmarked at just over double the performance of my current machine (the current Macbook Pro is four times). Yet it weighs less than half, runs on battery more than twice as long as this computer did when new, has hyper-threading, a higher resolution screen (13&#8221;) and yet has the exact same size keyboard.</p>

<p>The Air has iterated quickly from a pretty but slow, expensive and underpowered netbook into the current pretty, fast, cheap and did-I-mention-fast notebook that makes it the best laptop ever made. It&rsquo;s amazing to think that this tiny device killed off the bottom end of Apple&rsquo;s laptop line, and is squeezing the top end.</p>

<p>My next computer will be this new 13&#8221; Macbook Air. I&rsquo;ll get double the performance with half the weight&hellip;</p>

<h2>The Mac Pro</h2>

<p><img class="left" src="http://hiltmon.com/images/mac-pros-compared.jpg" width="362" height="299"></p>

<p>&hellip; Until I get one of these.</p>

<p>I bought my first Mac Pro in 2006, one of the first revision ones and used it at home for everything until I switched over to this laptop in 2009. And then it ran as my home server until 2011.</p>

<p>At work, I used a 2008 Mac Pro, 8 cores, 32GB RAM, oodles of disk and had it at 100% CPU and RAM use day in, day out running Hedge Fund models. <strong>No computing device I had ever seen came close to the desktop power and compute speed of that Mac Pro for anywhere near the price.</strong> It gave me productive advantage as a programmer, and business advantage with its massive compute speed. It&rsquo;s now my current home server, just waiting on the day I need to boost up another financial model on it.</p>

<p>Yet the current iMac and current MacBook Pro laptops have caught up in performance. The current Mac Pro graphics cards are too old to run Photoshop CS 6 properly, they do not have thunderbolt ports, and are starting to wheeze. It&rsquo;s been too long since the Mac Pro has been updated for professional users. We&rsquo;ve been waiting too long.</p>

<p>And then Tim Cook <em>previewed</em> the new Mac Pro in his Keynote.</p>

<p><span class="light"><em>Thud</em>. Jaw dropped, hit the floor and cracked the floorboards.</span></p>

<p><img class="left" src="http://hiltmon.com/images/mac-pro-cpu.jpg" width="287" height="424"></p>

<p>New Xeon&rsquo;s, super fast flash storage, dual high compute graphics cards, six full speed thunderbolt channels for almost unlimited IO throughput, in a sexy cylinder the size of a large coffee pot.</p>

<p><em>Unbelievable</em>.</p>

<p>I loved the look of the PowerMac G4 Cube. It&rsquo;s too bad the engineering and sales were not so great. The new Mac Pro shows that Apple can create amazing professional grade computers that outperform anything and yet still innovate massively on design.</p>

<p><img class="right" src="http://hiltmon.com/images/mac-pro-ports.jpg" width="287" height="362"></p>

<p>Of course, there have been some complaints about it too. You cannot add or change the video cards, or add more internal storage. Really? If you want to change video cards to play games, get a playstation. The video cards chosen are high-compute, chosen to help people like me use Open CL and massively increase our compute or render capability, and yet they can still drive 3 x 4K displays. And the plethora of full-speed Thunderbolt ports means that these computers have double the standard SAN bandwidth <em>per channel</em> used in data centers to access external storage. I kind of expect Apple to actually release their own external storage chassis to go with the new Mac Pro when it does get released, a new XSan.</p>

<p>All in all, the new Mac Pros look amazing and seem even more so on paper specs. I want one!</p>

<h2>Developer Tools</h2>

<p>Xcode 4 has finally hit it&rsquo;s stride. Xcode 5 takes it to the next level. Since most of what&rsquo;s new in the development libraries is under NDA, I cannot comment on them other than to say: Wow!</p>

<p>But a couple of publicly announced features do stand out.</p>

<p>Install-on-demand (promoted on the <a href="https://developer.apple.com/osx/whats-new/">OS X Mavericks for Developers</a>) page looks brilliant. We&rsquo;ve all had to live with old builds, or jump through hoops on OS X, or use hacks like homebrew, to install and update to the latest open source developer tools, software, databases and libraries. Now OS X Mavericks does it for you. No more hacks, no more hassles. I hope it is as simple as a <code>yum</code> or <code>gem update</code> command.</p>

<p>The other is the ability to use an OS X Server as a Continuous Integration server. I never got comfortable with Jenkins, it seems to be a strings and baling wire Rube Goldberg way to run things, especially when it came to  Objective-C projects. I am hoping the new OS X CI server is more robust. And I also hope I can use it to CI my non-Objective-C projects.</p>

<h2>Other Announcements</h2>

<p>The iWork in the cloud announcement did not really excite me. It is amazing what they could do in a browser, but I would have preferred newer desktop and iOS versions. Keynote is almost as old as my laptop, and with all the new technology that Apple has released over the years, it is in dire need of an update.</p>

<p>And where are the collaboration features? Why else would you create web versions unless you want to help people collaborate?</p>

<h2>Not Announced</h2>

<p>A lot of pundits were disappointed that Apple did not announce new Haswell Retina Macbook Pros. I did not expect any announcements there as the rMBP was bumped in February. Even the bumped version still struggles to run the retina screen, and the new Intel graphics that will power the next generation retina screens is not quite out of the lab yet. I do expect the next bump before the XMas buying season, probably the same time as the next iMac refresh.</p>

<p>The same goes for thinner thunderbolt displays, new pro software, a watch, a TV and unicorns. I do expect a next generation thunderbolt display, which will support Thunderbolt 2, and new Pro software to come out with the new Mac Pro&rsquo;s and take advantage of all those graphics card cores.</p>

<p>Apple also did not say anything about iCloud. To be fair, the purpose of the keynote was to show off the best, not apologize for the worst. I have not yet gotten to the video sessions for iCloud, so I am hoping there are some new tools and technologies to make iCloud sync more reliable (and easier to implement).</p>

<h2>One More Thing</h2>

<p>I don&rsquo;t really care that WWDC 2013 sold out in 71 seconds, there&rsquo;s no chance I would have gone anyway. But I am grateful to Apple and the people that did the work that we were all able to access and watch the videos of talks the same day they were presented. What a wonderful thing for Apple to do for our community. And I do like that those who had hotels and flights and no tickets still did go and held altWWDC. Maybe one day I&rsquo;ll go for that.</p>

<h2>Summary</h2>

<p>I really do think that the 2013 WWDC announcements are awesome, the best in years. Both operating systems get huge updates, new Air&rsquo;s, and the new Mac Pro show that Tim Cook&rsquo;s Apple is still at the very top of its game in design, focus, innovation and delivery. I am really excited to use the new hardware and software as my daily drivers.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Accessing SQL Server from OS X]]></title>
    <link href="http://hiltmon.com/blog/2013/06/09/accessing-sql-server-from-os-x/"/>
    <updated>2013-06-09T10:56:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/06/09/accessing-sql-server-from-os-x</id>
    <content type="html"><![CDATA[<p>Every once in a while I need to access a Microsoft SQL Server database from my Mac, usually to create a data migration script. In the past I used a <a href="http://www.actualtech.com">commercial ODBC driver</a>. But ODBC on OS X was deprecated ages ago.</p>

<p>In this post, I&rsquo;ll talk about my current stack for accessing SQL Server databases via Ruby and Python and how to set it up. <span class="light">Note that I do not use <a href="http://mxcl.github.io/homebrew/">homebrew</a>, so these are all native installs.</span></p>

<p>You will need Xcode and the command line tools installed, <em>which of course you already have</em>.</p>

<h2>FreeTDS</h2>

<p><a href="http://www.freetds.org">FreeTDS</a> is a set of libraries that one can use from UNIX based systems to natively talk to SQL Server. Download it from their <a href="ftp://ftp.freetds.org/pub/freetds/stable/freetds-stable.tgz">stable release</a> link to your <code>Downloads</code> folder (current version 0.91 as of writing).</p>

<p>Then, to build and install it:</p>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'><span class="nv">$ </span>tar zxvf freetds-stable.tar
</span><span class='line'><span class="nv">$ </span><span class="nb">cd </span>freetds-0.91
</span><span class='line'><span class="nv">$ </span>./configure --prefix<span class="o">=</span>/usr/local
</span><span class='line'><span class="nv">$ </span>make
</span><span class='line'><span class="nv">$ </span>sudo make install
</span></code></pre></td></tr></table></div></figure>


<p>To have FreeTDS default to the newer protocols for newer SQL servers, edit <code>/usr/local/etc/freetds.conf</code> and set:</p>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'><span class="o">[</span>global<span class="o">]</span>
</span><span class='line'><span class="c"># TDS protocol version</span>
</span><span class='line'>tds <span class="nv">version</span> <span class="o">=</span> 7.1 <span class="c"># or 8.0</span>
</span></code></pre></td></tr></table></div></figure>


<p>This works with SQL Server 2000, 2005 and 2008.</p>

<h2>Ruby</h2>

<p>You need the <a href="https://github.com/rails-sqlserver/tiny_tds">tiny_tds</a> Ruby gem to access SQL Server via FreeTDS from Ruby. I had a lot of trouble getting this gem to build on OS X 10.8.4 with Ruby 1.9.3 under RVM until I figured out the parameters needed to make it work with my FreeTDS and Apple&rsquo;s <code>iconv</code> library. Use the following <em>rather long</em> command:</p>

<figure class='code'><figcaption><span></span></figcaption><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='sh'><span class='line'><span class="nv">$ </span>gem install tiny_tds -- --with-iconv-include<span class="o">=</span>/usr/include --with-iconv-lib<span class="o">=</span>/usr/lib --with-freetds-include<span class="o">=</span>/usr/local/include/freetds --with-freetds-lib<span class="o">=</span>/usr/local/lib
</span></code></pre></td></tr></table></div></figure>


<p>This compiles the gem with Apple&rsquo;s <code>iconv</code> lib and the FreeTDS we just installed.</p>

<p>After that, accessing a SQL Server database is easy. Here&rsquo;s a script to dump a table or a query to a CSV file:</p>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="nb">require</span> <span class="s1">&#39;rubygems&#39;</span>
</span><span class='line'><span class="nb">require</span> <span class="s1">&#39;tiny_tds&#39;</span>
</span><span class='line'><span class="nb">require</span> <span class="s1">&#39;csv&#39;</span>
</span><span class='line'>
</span><span class='line'><span class="k">def</span> <span class="nf">write_csv</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
</span><span class='line'>  <span class="no">CSV</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">#{</span><span class="n">table</span><span class="si">}</span><span class="s2">.csv&quot;</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">csv</span><span class="o">|</span>
</span><span class='line'>    <span class="n">result</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">row</span><span class="o">|</span>
</span><span class='line'>      <span class="n">csv</span> <span class="o">&lt;&lt;</span> <span class="n">row</span><span class="o">.</span><span class="n">values</span>
</span><span class='line'>    <span class="k">end</span>
</span><span class='line'>  <span class="k">end</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="k">def</span> <span class="nf">dump_table</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
</span><span class='line'>  <span class="nb">puts</span> <span class="s2">&quot;dump_table: </span><span class="si">#{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class='line'>  <span class="n">result</span> <span class="o">=</span> <span class="vi">@client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT * FROM </span><span class="si">#{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span class='line'>  <span class="n">write_csv</span> <span class="n">table</span><span class="p">,</span> <span class="n">result</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="k">def</span> <span class="nf">dump_query</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">query</span><span class="p">)</span>
</span><span class='line'>  <span class="nb">puts</span> <span class="s2">&quot;dump_query: </span><span class="si">#{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class='line'>  <span class="n">result</span> <span class="o">=</span> <span class="vi">@client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
</span><span class='line'>  <span class="n">write_csv</span> <span class="n">table</span><span class="p">,</span> <span class="n">result</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="vi">@client</span> <span class="o">=</span> <span class="ss">TinyTds</span><span class="p">:</span><span class="ss">:Client</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="ss">:username</span> <span class="o">=&gt;</span> <span class="s1">&#39;username&#39;</span><span class="p">,</span> <span class="ss">:password</span> <span class="o">=&gt;</span> <span class="s1">&#39;password&#39;</span><span class="p">,</span> <span class="ss">:host</span> <span class="o">=&gt;</span> <span class="s1">&#39;192.168.x.x&#39;</span><span class="p">,</span> <span class="ss">:database</span> <span class="o">=&gt;</span> <span class="s1">&#39;database _name&#39;</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'><span class="n">dump_table</span><span class="p">(</span><span class="s1">&#39;table_name&#39;</span><span class="p">)</span>
</span><span class='line'><span class="n">dump_query</span><span class="p">(</span><span class="s1">&#39;table_name&#39;</span><span class="p">,</span> <span class="s2">&quot;select * from table_name where date &gt;= &#39;2013-01-01&#39;&quot;</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'><span class="vi">@client</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></code></pre></td></tr></table></div></figure>


<h2>Python</h2>

<p>For Python, I tried the <a href="http://code.google.com/p/pymssql/">pymssql</a> language extension. Installing this was quite easy:</p>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="err">$</span> <span class="n">sudo</span> <span class="n">easy_install</span> <span class="n">pip</span>
</span><span class='line'><span class="err">$</span> <span class="n">sudo</span> <span class="n">pip</span> <span class="n">install</span> <span class="n">cython</span>
</span><span class='line'><span class="err">$</span> <span class="n">sudo</span> <span class="n">pip</span> <span class="n">install</span> <span class="n">pymssql</span>
</span></code></pre></td></tr></table></div></figure>


<p>And in a simple script:</p>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="kn">import</span> <span class="nn">pymssql</span>
</span><span class='line'><span class="n">connection</span> <span class="o">=</span> <span class="n">pymssql</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">host</span> <span class="o">=</span> <span class="s">r&#39;192.168.x.y:1433&#39;</span><span class="p">,</span> <span class="n">user</span> <span class="o">=</span> <span class="s">&#39;username&#39;</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="s">r&#39;password&#39;</span><span class="p">,</span> <span class="n">database</span> <span class="o">=</span> <span class="s">&#39;database_name&#39;</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'><span class="n">cursor</span> <span class="o">=</span> <span class="n">connection</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
</span><span class='line'>
</span><span class='line'><span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">&#39;SELECT count(*) FROM table_name &#39;</span><span class="p">)</span>
</span><span class='line'><span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">cursor</span><span class="p">:</span>
</span><span class='line'>    <span class="k">print</span> <span class="n">row</span>
</span></code></pre></td></tr></table></div></figure>


<p><strong>Note</strong> the use of Python raw strings for the host and password.</p>

<h2>Bonus Round: <code>isql</code></h2>

<p>If you are old school like me and want access to SQL Server from the command line, you really need the old <code>isql</code> command line. FreeTDS does have a <code>tsql</code> command to test access from the command line, but it is not fully featured.</p>

<p>But <code>isql</code> is part of ODBC which is deprecated. Oh, well, time to install <a href="http://www.unixodbc.org">unixODBC</a>. It&rsquo;s an oldie, but a goodie. Download from this <a href="ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.1.tar.gz">link</a> or the downloads page. Then:</p>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'><span class="nv">$ </span>./configure --prefix<span class="o">=</span>/usr/local
</span><span class='line'><span class="nv">$ </span>make
</span><span class='line'><span class="nv">$ </span>sudo make install
</span></code></pre></td></tr></table></div></figure>


<p>You also need to recompile FreeTDS with support for <code>unixODBC</code>, so go back to your FreeTDS folder and:</p>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='sh'><span class='line'><span class="nv">$ </span><span class="nb">cd </span>freetds-0.91
</span><span class='line'><span class="nv">$ </span>./configure --prefix<span class="o">=</span>/usr/local --with-tdsver<span class="o">=</span>8.0 --with-unixodbc<span class="o">=</span>/usr/local
</span><span class='line'><span class="nv">$ </span>make
</span><span class='line'><span class="nv">$ </span>sudo make install
</span></code></pre></td></tr></table></div></figure>


<p>Following the instructions at <a href="http://www.unixodbc.org/doc/FreeTDS.html">http://www.unixodbc.org/doc/FreeTDS.html</a>, you need to register FreeTDS and create your first data source. My files look like this:</p>

<figure class='code'><figcaption><span>odbcinst.ini </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>
</pre></td><td class='code'><pre><code class='ini'><span class='line'><span class="k">[FreeTDS]</span>
</span><span class='line'><span class="na">Description</span><span class="o">=</span><span class="s">v0.63 with protocol v8.0</span>
</span><span class='line'><span class="na">Driver</span><span class="o">=</span><span class="s">/usr/local/lib/libtdsodbc.so</span>
</span><span class='line'><span class="na">UsageCount</span><span class="o">=</span><span class="s">1</span>
</span></code></pre></td></tr></table></div></figure>


<p>and</p>

<figure class='code'><figcaption><span>odbc.ini </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>
</pre></td><td class='code'><pre><code class='ini'><span class='line'><span class="k">[TEST]</span>
</span><span class='line'><span class="na">Driver</span><span class="o">=</span><span class="s">FreeTDS</span>
</span><span class='line'><span class="na">Description</span><span class="o">=</span><span class="s">Test Database</span>
</span><span class='line'><span class="na">Trace</span><span class="o">=</span><span class="s">No</span>
</span><span class='line'><span class="na">Address</span><span class="o">=</span><span class="s">192.168.x.y</span>
</span><span class='line'><span class="na">Port</span><span class="o">=</span><span class="s">1433</span>
</span><span class='line'><span class="na">Database</span><span class="o">=</span><span class="s">database_name</span>
</span><span class='line'><span class="na">TDS_Version</span><span class="o">=</span><span class="s">7.1</span>
</span></code></pre></td></tr></table></div></figure>


<p>To see if this is working, use the <code>osql</code> tool:</p>

<figure class='code'><figcaption><span></span></figcaption><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='sh'><span class='line'><span class="nv">$ </span>osql -S TEST -U user_name -P password -I /usr/local/etc
</span></code></pre></td></tr></table></div></figure>


<p>You can then access this database using good old <code>isql</code>:</p>

<figure class='code'><figcaption><span></span></figcaption><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='sh'><span class='line'><span class="nv">$ </span>isql TEST user_name password
</span></code></pre></td></tr></table></div></figure>


<p><strong>Note</strong> that you may need to put <code>"</code> characters around the password if there are special characters in it.</p>

<h2>Commentary</h2>

<p>It&rsquo;s quite sad that the popular Open Source databases like MySQL, PostgreSQL and MongoDB all have wonderful, fast, easy to install, native libraries for OS X and Linux, but the big commercial databases like SQL Server and Oracle still require these unpleasant hacks, ancient deprecated libraries or worse, Java!</p>

<p>A lot of companies are moving their servers off Microsoft Windows and on to Linux, but they still need access to legacy data, and these hacks are just not that elegant or robust enough for true production use. Until these companies can migrate their databases off Microsoft and Oracle, they are going to have to live in transition and hope these hacks hold.</p>

<p>I think it&rsquo;s in Microsoft and Oracle&rsquo;s interest to release public libraries to access their databases from anywhere, including other platforms, in order to stay relevant and in the game.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Horizons]]></title>
    <link href="http://hiltmon.com/blog/2013/06/06/horizons/"/>
    <updated>2013-06-06T18:11:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/06/06/horizons</id>
    <content type="html"><![CDATA[<p><img class="right" src="http://hiltmon.com/images/noun-baby.jpg" width="41" height="60"></p>

<p>When I was a child, my horizon was the building I was in, my home. I could reach out and touch my family and whomever wandered into the house.</p>

<p><img class="right" src="http://hiltmon.com/images/noun-bike.jpg" width="86" height="50"></p>

<p>As a teenager, I got a bicycle, and my horizon was the neighborhoods within cycling range. I could reach out and touch my friends in nearby neighborhoods. And I felt less constrained.</p>

<p><img class="right" src="http://hiltmon.com/images/noun-car.jpg" width="100" height="60"></p>

<p>Later, I learned to drive, and my horizon grew to the city I was living in. I could reach out and meet people from any neighborhood in the city. And I felt less constrained.</p>

<p><img class="right" src="http://hiltmon.com/images/noun-plane.jpg" width="59" height="60"></p>

<p>And one day, I got on a plane and went to another city in another country, and my horizons expanded to the city I was visiting. I could reach out and touch people in other cities. And I felt even less constrained.</p>

<p><img class="right" src="http://hiltmon.com/images/noun-phone.jpg" width="60" height="60"></p>

<p>Technology pushed these horizons even further away. I got a telephone and my horizon was wherever I could call. I could live in one place and still talk to people in other places, as long as I had their number.</p>

<p><img class="right" src="http://hiltmon.com/images/noun-internet.jpg" width="60" height="60"></p>

<p><strong>But when we got the Internet, our horizons ceased to exist.</strong> All constraints fell away. With the Internet, we can talk to anyone, anywhere on this planet at any time. We can reach out in seconds and touch them anywhere, even if we do not know them personally. And they can do the same with us.</p>

<p><img class="right" src="http://hiltmon.com/images/noun-world.jpg" width="120" height="90"></p>

<p>I <em>like</em> having no more horizons. I <em>like</em> being able to sit in New York and share a virtual breakfast with my nephews in Sydney, chat about a Springsteen concert a friend is just leaving in Melbourne, see the new clothing my mate in Malta just purchased, discuss bourbon with a buddy in North Carolina, see the latest creation a chef friend made in Tokyo, discuss luggage and scotch with a person I have never met in Edinburgh, try out a new software product with another new friend in Wisconsin and collaborate on software with a new mate in Germany.</p>

<p>Its a wonderful connected world.</p>

<p><img class="right" src="http://hiltmon.com/images/noun-ship.jpg" width="143" height="40"></p>

<p><em>But our communities and institutions have not yet adapted to this new reality.</em> They still reflect a local constrained horizon based on the limitations of paper mail delivery, slow trains or boats. On the mindset where reaching out could take days, weeks or even months. Where the impact of local affairs on individual&rsquo;s horizons used to be strong, and where local affairs did not affect the horizons of others elsewhere.</p>

<p><em>But that is no longer true.</em></p>

<p><img class="right" src="http://hiltmon.com/images/noun-newspaper.jpg" width="65" height="60"></p>

<p>No longer is a demonstration in Turkey which affects my Turkish friend&rsquo;s safety, a building collapse in Bangladesh that affects my local T-shirt shop, or a madman running North Korea that affects my family in Japan, <strong>no longer are these things that do not affect us elsewhere</strong>. The people impacted by those events in those places reach out and touch other people in other places who care about them. The ripples of these local events are felt globally.</p>

<p>Think about it. Almost nothing we buy these days is made locally. It&rsquo;s made elsewhere, with components from even farther afield and shipped to us.</p>

<p>Almost no-one we reach out to these days is local. They live and work all over the globe, and yet we still interact with them every day as if they were close by.</p>

<p><img class="right" src="http://hiltmon.com/images/noun-passport.jpg" width="48" height="60"></p>

<p>So, if people and products are global, why do we still have to deal with artificial horizons created by these institutions? Borders, nationality, roaming, passports, different local rules, barriers and tariffs, localized politics and localized interests all combine to try to constrain our horizons, to recreate them. Because of these antiquated and artificial horizons, bigger picture issues do not get addressed. Global warming, global disease, global hunger, global access to education are all being ignored. We depend on <em>globalness</em> for our people and our products, but we have no way of dealing with global issues.</p>

<p><img class="right" src="http://hiltmon.com/images/noun-security.jpg" width="60" height="60"></p>

<p>Going back to the people I was in contact without horizons, many of them cannot just get on a plane and come and visit or live in New York. They need &ldquo;permission&rdquo; in terms of visas. Their mobile phone calls still go via their own countries even when they are not in them and the call is to down the road. Their money and buying power is different even though the products are exactly the same. These are all artificial, and unnecessary, horizons. <em>On the Internet we&rsquo;re all equal, in the physical world, we&rsquo;re hemmed in.</em></p>

<p>As individuals we no longer have horizons, and this is wonderful. We can talk and share and care with anyone anywhere at any time. As a group, we need to find ways to eliminate the artificial ones. Then we can all gather to tackle the big issues the way we do now as local communities, just bigger, without horizons.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>

<p><span class="light" style="font-size:8pt">Images from <a href="http://thenounproject.com">The Noun Project</a>, including some by Louie McPherson, Mark McRory, and Catia G.</span></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Sharing Reminder Lists]]></title>
    <link href="http://hiltmon.com/blog/2013/06/01/sharing-reminder-lists/"/>
    <updated>2013-06-01T08:51:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/06/01/sharing-reminder-lists</id>
    <content type="html"><![CDATA[<p><img class="right" src="http://hiltmon.com/images/reminders-icon.jpg" width="76" height="94"></p>

<p>Looking for a quick and easy way to share reminders with other people? Here&rsquo;s how we do it.</p>

<p>My wife and I share a <a href="http://support.apple.com/kb/HT4970">Reminders.app</a> list called Groceries that we check on the way home. If there is anything on the list, we pop into the shop and pick it up.</p>

<p>Reminders.app is an Apple app included in iOS and the Mac that enables you to create lists, set reminder dates or reminder locations. It syncs via iCloud so reminders on any device are automatically distributed to all your other devices.</p>

<p>But, <strong>did you know that you can also share reminder lists between accounts?</strong>  That&rsquo;s how we share our groceries list between our separate accounts.</p>

<p><img class="right" src="http://hiltmon.com/images/reminders-new.jpg" width="350" height="208"></p>

<p>To share a list, start by logging in to your iCloud account at <a href="http://www.icloud.com/">www.icloud.com</a> and click on <strong>Reminders</strong>.</p>

<p>If you need to create a new, shared list, click the <strong>+</strong> at the bottom-left and name the new list. I just created <code>Shared List</code>. You could also, of course, share an existing list.</p>

<p><img class="right" src="http://hiltmon.com/images/reminders-sharing.jpg" width="350" height="207"></p>

<p>Then, click on the circular icon to the right of the list name to open the sharing dialog. Type in the email address of another iCloud user, then click <code>Done</code>. <em>Note: You need to use the same email that they use when setting up iCloud on their devices.</em></p>

<p>Apple then sends an email that invites that person to share the list. Once they accept, the icon on the sharing dialog next to their name turns green and the data appears on <em>their</em> devices.</p>

<p>Whenever you add or change something on this list, it will now replicate to all your devices <em>and all of theirs too.</em> <em>They</em> can change the list too, and you will see their updates on your devices.</p>

<p>Pretty cool, huh?</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Google Analytics for Status Board Server Edition]]></title>
    <link href="http://hiltmon.com/blog/2013/05/30/google-analytics-for-status-board-server-edition/"/>
    <updated>2013-05-30T16:59:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/30/google-analytics-for-status-board-server-edition</id>
    <content type="html"><![CDATA[<p>Dropbox went down today, and I found out when my <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fstatus-board%252Fid449955536%253Fmt%253D8%2526uo%253D4%2526partnerId%253D30">Status Board</a> stopped updating. This spurred me on to migrate my <a href="http://hiltmon.com/blog/2013/04/10/google-analytics-for-status-board/">Google Analytics for Status Board</a> scripts from Ruby and Dropbox over to server based PHP. <span class="light">Huge thanks to <a href="http://www.carlfranzon.com/2013/04/google-analytics-panel-for-status-board/">Carl Franzon</a> for the starter code.</span></p>

<p><strong>Warning: This version of the scripts requires PHP v5.3. It also uses a hacked version of the Google GAPI library that runs against the Google v2.4 API. The current Google API is v3, but that requires complex OAuth2 access, which is a pain in the <em>gazoot</em> to implement. <span class="light">Expect Google to deprecate the old API, probably tomorrow and without notice.</span></strong></p>

<h2>Quick Install Instructions</h2>

<ol>
<li>Download the <a href="http://hiltmon.com/files/statusboard.zip">statusboard.zip</a> file.</li>
<li>Expand it in the root of your web server. It creates a <code>statusboard</code> folder.</li>
<li>Edit each of the <code>analytics_*.php</code> files with your login and password.</li>
<li>The URL to use in Status Board is <code>http://&lt;your-domain&gt;/statusboard/analytics_&lt;file&gt;.php</code>, replacing <code>&lt;your-domain&gt;</code> with your server domain name, and <code>&lt;file&gt;</code> with one of <code>views</code> (graph), <code>hourly</code> (graph) or <code>pages</code> (table).</li>
</ol>


<p>You should get something like this <span class="light">(Yes, my follower count is still tiny. Yes, I live in New York, but I still use Celsius for weather.)</span>:</p>

<p><img src="http://hiltmon.com/images/status-board-ga-2.jpg" width="715" height="537"></p>

<h2>Details</h2>

<p>There are four files in the archive:</p>

<ul>
<li><code>analytics_views.php</code> to present a graph of Page views, Visitors and New Visits for the past week for a site.</li>
<li><code>analytics_hourly.php</code> to present the same data over the last 24 hours.</li>
<li><code>analytics_pages.php</code> to show the top pages today.</li>
<li><code>gapi.class.php</code> is required to access Google Analytics, but this one has been hacked to use the v2.4 API.</li>
</ul>


<p>For each of the <code>analytics_*.php</code> pages, change the first few lines with your own information:</p>

<figure class='code'> <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>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="x">define(&#39;ga_email&#39;,&#39;hiltmon@gmail.com&#39;);</span>
</span><span class='line'><span class="x">define(&#39;ga_password&#39;,&#39;i_aint_sayin&#39;);</span>
</span><span class='line'><span class="x">define(&#39;which_profile&#39;,0); // The first profile</span>
</span><span class='line'><span class="x">define(&#39;days_to_report&#39;, 7); // No of days excluding today!</span>
</span><span class='line'><span class="x">define(&#39;ga_title&#39;,&#39;Hiltmon.com Stats&#39;);</span>
</span><span class='line'><span class="x">date_default_timezone_set(&#39;America/New_York&#39;);</span>
</span></code></pre></td></tr></table></div></figure>


<p>If you have more than one Google Analytics profile (i.e. more than one site), you may need to change the profile, with 0 being the first profile in your list. I also recommend setting the timezone to your server timezone so that you don&rsquo;t fill your web logs with PHP errors.</p>

<p>Why choose these technologies?</p>

<ul>
<li><p>I chose to use PHP, <span class="light">which I intensely despise</span>, because that&rsquo;s the language most likely to be enabled on your web host. As it is on mine.</p></li>
<li><p>I used the GAPI library because it works <em>without</em> OAuth. <span class="light">For now.</span></p></li>
</ul>


<p>If you&rsquo;d prefer a more modern and robust approach, stick to the previous Ruby and Dropbox workflow at <a href="http://hiltmon.com/blog/2013/04/10/google-analytics-for-status-board/">Google Analytics for Status Board</a>.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Sanity Saver - Ticks and Crosses]]></title>
    <link href="http://hiltmon.com/blog/2013/05/28/sanity-saver-ticks-and-crosses/"/>
    <updated>2013-05-28T14:11:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/28/sanity-saver-ticks-and-crosses</id>
    <content type="html"><![CDATA[<p><em>Sanity Savers are quick tips that help you stay sane when using your computer.</em></p>

<p>I often create point form lists of things, whether planning a post or a coding sprint or a client activity. And to keep track of which points in the list are done and which will not be done, or what is right and what is wrong, I like to use <code>✓</code> and <code>✗</code> symbols.</p>

<p>I use them so frequently and am so lazy that even typing <code>,,tick</code> and <code>,,cross</code> <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Ftextexpander-for-mac%252Fid405274824%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">TextExpander</a> expansions are too much effort.</p>

<p>So I made them hot keys using <a href="http://www.keyboardmaestro.com/main/">Keyboard Maestro</a>. <code>⌃⌘=</code> gives me a <code>✓</code> and <code>⌃⌘-</code> gives a <code>✗</code>. Anywhere. Anytime.</p>

<p><img src="http://hiltmon.com/images/ticks-and-crosses.jpg" width="549" height="162"></p>

<p>✗ Cool<br/>
✓ Nerdy<br/>
✗ Fashionable<br/>
✓ Fun</p>

<p><span class="light">Batsu (罰) is Japanese for the ✗ symbol, meaning &ldquo;wrong&rdquo;, as in wrong answer (Wikipedia).</span></p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[My Mac Indie Writing Workflow]]></title>
    <link href="http://hiltmon.com/blog/2013/05/28/my-mac-indie-writing-workflow/"/>
    <updated>2013-05-28T12:39:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/28/my-mac-indie-writing-workflow</id>
    <content type="html"><![CDATA[<p>Over the past few years, I have been writing more and more on my Mac, whether it be single blog posts, blog series, systems documentation, knowledge bases and other articles. The best part is that all the tools I use are <em>indie</em> developed from all over the world, are amazingly great and way better than their mainstream counterparts.</p>

<p>In this post, I want to share the tools I use to <em>write</em> and why I choose them.</p>

<p>TL:DR:</p>

<ul>
<li><strong>Planning</strong>: <a href="http://brettterpstra.com/projects/nvalt/">nvAlt</a> / <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fmindnode-pro%252Fid402398561%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">MindNode Pro</a></li>
<li><strong>Drafts</strong>: <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fulysses-iii%252Fid623795237%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Ulysses III</a></li>
<li><strong>Single Post</strong>: <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a></li>
<li><strong>Long Form Writing</strong>: <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fscrivener%252Fid418889511%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Scrivener</a></li>
<li><strong>Article Review</strong>: <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fmarked%252Fid448925439%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Marked</a></li>
<li><strong>Article Art</strong>: <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Facorn-4-image-editor-for-humans%252Fid634108295%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Acorn</a> / <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fnapkin-concise-image-annotation%252Fid581789185%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Napkin</a></li>
</ul>


<h3>Planning: nvAlt / Mindnode Pro</h3>

<p>Before I write anything, I jot down what I want to say. I use <a href="http://brettterpstra.com/projects/nvalt/">nvAlt</a> by <a href="http://elasticthreads.tumblr.com">Elastic Threads / David Halter</a> and <a href="http://brettterpstra.com">Brett Terpstra</a>. <a href="http://brettterpstra.com/projects/nvalt/">nvAlt</a> is a markdown focussed fork of <a href="http://notational.net">Notational Velocity</a> by Zachary Schneirov, and is the tool I use to capture ideas.</p>

<p><img src="http://hiltmon.com/images/indie-writing-1.jpg" width="612" height="360"></p>

<p>These start out as bunch of confusing point-form thoughts that I have rattling around. By writing them down, I get a feel for what I am thinking, what I want to say and what will get written, in what order. By writing and reordering these, I usually find out the point I want to make (or whether there is no point, and the post idea dies there). I often surprise myself as I think I am going to write about one thing, and land up writing about something completely different.</p>

<p>For more complex articles, I sometimes build a mind-map using <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fmindnode-pro%252Fid402398561%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">MindNode Pro</a> by <a href="http://mindnode.com/imprint.html#imprint">IdeasOnCanvas</a> in Germany. I got this idea from <a href="http://www.macdrifter.com">Gabe Weatherhead / MacDrifter’s</a> post on <a href="http://www.macdrifter.com/2012/04/michael-schechters-writer-workflow.html">Michael Schechter&rsquo;s Writer Workflow</a>. This allows me to see the structure of the post and reorder the thoughts into a more intelligent structure and flow. I did not do this for earlier series of posts, but I think the articles I do create after mind-mapping turn out a lot better.</p>

<h3>Drafting: Ulysses III</h3>

<p><em>This is a new addition to my Mac writing toolkit.</em> I used to draft posts in <a href="http://brettterpstra.com/projects/nvalt/">nvAlt</a> but hated how my notes and ideas got mixed up with my drafts. When the point form summary is finished, I like to flesh out articles in draft. Then let them simmer for a while and revisit them. This one has been simmering for over a month. I usually have 10-12 open drafts going at a time, and many of them never get published.</p>

<p>Before switching to <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fulysses-iii%252Fid623795237%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Ulysses III</a>, I tried using a folder for Drafts wherein I placed my draft files and edited them using <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a>. But then I got confused between the draft and the final post.</p>

<p><img src="http://hiltmon.com/images/indie-writing-2.jpg" width="700" height="452"></p>

<p>Fortunately, <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fulysses-iii%252Fid623795237%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Ulysses III</a> by <a href="http://www.the-soulmen.com">The Soulmen GBR</a> in Germany came out at that time and I fell in love with the look and feel of it. I can see all my drafts in the left hand file pane, and do all my writing in the right. I love the fonts and colors that they chose, I love the ease of sharing the document directly into <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a>, their markdown format works great and the ability to jump between drafts with ease. <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fulysses-iii%252Fid623795237%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Ulysses III</a> still lacks features such as search that make it compete with bigger writing tools like <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fscrivener%252Fid418889511%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Scrivener</a>, but it fits my <em>drafting</em> needs perfectly.</p>

<h3>Single Post: Byword</h3>

<p>Since almost all my writing is a single, less than one thousand word article, I write the final post using <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a> by <a href="http://metaclassy.com">MetaClassy</a> in Portugal. Since adding <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fulysses-iii%252Fid623795237%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Ulysses III</a>, I now create the post using my <a href="http://hiltmon.com/blog/2012/07/18/octopress-post-and-publish/">command-line tools</a>, tune the <a href="http://hiltmon.com/blog/2012/06/18/markdown-metadata/">markdown meta-data</a> headers and then paste in the markdown from <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fulysses-iii%252Fid623795237%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Ulysses III</a> to start working on the final copy.</p>

<p><img src="http://hiltmon.com/images/indie-writing-3.jpg" width="507" height="484"></p>

<p>I think <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a> is the best distraction free markdown editor for plain old writing, supported with a lovely set of keyboard shortcuts, a great markdown implementation and a gorgeous default theme.</p>

<p>In the case of a series of posts, I write the whole thing in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fscrivener%252Fid418889511%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Scrivener</a>. But I still come back to <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a> to focus and finalize each individual article.</p>

<p><a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a> is so much part of my blog writing flow that I have modified <a href="http://octopress.org">Octopress</a> to launch new blank posts in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a>. I have made only one customization to <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a>, I use the excellent <a href="http://www.google.com/webfonts/specimen/Cousine">Cousine</a> font from Google web fonts.</p>

<h3>Long Form Writing: Scrivener</h3>

<p>Once I realize that a post is going to be a longer form series, I switch to writing in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fscrivener%252Fid418889511%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Scrivener</a> by <a href="http://www.literatureandlatte.com/about.php">Literature and Latte</a> in England. It is, by far, the <em>best</em> tool for writing any long-form documentation, whether they be books, theses, scripts, knowledge bases or series of posts.</p>

<p><img src="http://hiltmon.com/images/indie-writing-4.jpg" width="712" height="343"></p>

<p><a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fscrivener%252Fid418889511%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Scrivener</a> enables me to write freely, then reorganize the writing into the different articles in the series. I would never be able to look at and manipulate the structure of a larger document in any other tool. It also allows me to keep the research and reference material with the document. It seems that every time I launch <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fscrivener%252Fid418889511%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Scrivener</a> I learn something new. And I want to write more.</p>

<h3>Article Review: Marked</h3>

<p>One of the best ways to review your writing is to send it to an editor. But since I do not have one of those hanging around, I find it best to look at it in another form. I guess I become typo and grammar blind after a while in the same tool, plus I really do like to see the balance and flow of the article in its finished form.</p>

<p><img src="http://hiltmon.com/images/indie-writing-5.jpg" width="712" height="343"></p>

<p>For that, there is none better than <a href="http://brettterpstra.com">Brett Terpstra’s</a> <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fmarked%252Fid448925439%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Marked</a> app. Best of all, it works with both <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fscrivener%252Fid418889511%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Scrivener</a> and <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a> brilliantly. I have <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fmarked%252Fid448925439%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Marked</a> open on the right of my screen with <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fscrivener%252Fid418889511%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Scrivener</a> or <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbyword%252Fid420212497%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Byword</a> on the left. As soon as I make changes in the document, <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fmarked%252Fid448925439%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Marked</a> updates and displays it as it would appear on the blog. Not only that, it scrolls to the latest change to I don’t need to hunt to get back to my review position after correcting.</p>

<p>I am also starting to use <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fmarked%252Fid448925439%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Marked</a> for more than just blog post previews, such as creating documents on <a href="http://hiltmon.com/blog/2013/05/23/letterhead-markdown-style/">letterhead</a>.</p>

<h3>Article Art: Acorn / Napkin</h3>

<p>I use Adobe&rsquo;s Photoshop or Illustrator to create original art, for example for my  <a href="http://hiltmon.com/timetocall/">TimeToCall</a> application, but I find them too heavy and slow for quick blog use. For article art, I grab some screenshots from my iPhone or Mac and use <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Facorn-4-image-editor-for-humans%252Fid634108295%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Acorn</a> to composite, add text, resize, trim and export the final art for the blog. <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Facorn-4-image-editor-for-humans%252Fid634108295%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Acorn</a> by Gus Mueller at <a href="http://flyingmeat.com/about/">Flying Meat</a> is quick to launch, easy to use and very powerful without seeming heavy.</p>

<p>For annotated blog images, I seem to be using <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fnapkin-concise-image-annotation%252Fid581789185%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Napkin</a> from Aged &amp; Distilled in Canada by the great <a href="http://kickingbear.com/blog/">Guy English</a> and Chris Parrish more and more to capture screen images and annotate, then finalize in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Facorn-4-image-editor-for-humans%252Fid634108295%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Acorn</a>. I love the ability in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fnapkin-concise-image-annotation%252Fid581789185%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Napkin</a> to create zoomed callouts to highlight key features.</p>

<h2>All Indie Apps</h2>

<p>Until I started planning this post, I had not even thought that all of these programs are products of <strong>brilliant small independent developers</strong>, not major corporations. All of these products are a delight to use, the best in their class in my <span class="light">(humble / correct)</span> opinion, and enable terrific productivity. Not only that, but all have amazing competitors also created by indies, so if the indie tools I choose don’t work for you, there are plenty of other great indie products that will.</p>

<p><strong>It’s a great time to be a Mac user and writer with all this wonderful indie software out there.</strong></p>

<p>Now I just have to figure out which tools I like on the iPad for writing, I have too many installed.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter or <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Letterhead - Markdown Style]]></title>
    <link href="http://hiltmon.com/blog/2013/05/23/letterhead-markdown-style/"/>
    <updated>2013-05-23T08:47:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/23/letterhead-markdown-style</id>
    <content type="html"><![CDATA[<p>So I get this request yesterday to send a document on <a href="http://en.wikipedia.org/wiki/Letterhead">letterhead</a>. You all may remember letterheads from back in the day when companies had professional printers print their fancy logos on fancy paper that you then ran through the &ldquo;good&rdquo; laser printer that then went into matching fancy envelopes and someone stuck stamps on and mailed them.</p>

<p><img src="http://hiltmon.com/images/letterhead.jpg" width="500" height="153"></p>

<p>I thought that letterheads went the way of the dodo about the same time <a href="http://en.wikipedia.org/wiki/Fax">fax machines</a> and <a href="http://en.wikipedia.org/wiki/United_States_Postal_Service">US Mail</a> both died out. <em>I was wrong</em>. It turns out, sometimes to make something &ldquo;official&rdquo; <span class="light">(whatever the heck that means)</span> you need it on letterhead. And since it&rsquo;s 2013, a PDF version is acceptable.</p>

<p>Now I could have just dragged a logo into a <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fpages%252Fid409201541%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Pages</a> document, added the letterhead text, written the document, manually formatted it, PDF&rsquo;d it and emailed it. But since I am probably going to do more of these, I decided to integrate letterheads into my regular <a href="http://daringfireball.net/projects/markdown/">Markdown</a> process.</p>

<p>For this to work, I needed a markdown file for the document, a logo image and a stylesheet. I already have a logo and a CSS stylesheet for rendering Markdown in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fmarked%252Fid448925439%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Marked</a>, which I use to generate business documentation from Markdown source in my preferred business style for all my client engagements. Look and feel, covered.</p>

<p>So the only difference between a letterhead version of a document and a regular document is the logo, a  silly header and a silly footer.</p>

<p>No problem, I created these with Markdown using a smidgen of HTML code and plonked them at the top and bottom of my document. I then saved them as <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Ftextexpander-for-mac%252Fid405274824%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">TextExpander</a> snippets for when I need them again.</p>

<p>Preview in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fmarked%252Fid448925439%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Marked</a>. Print to PDF. Sent. Easy as Pie.</p>

<p>The letterhead document source in Markdown looks like this. Note that it contains my standard <a href="http://hiltmon.com/blog/2012/06/18/markdown-metadata/">Markdown Metadata</a> headers as well.</p>

<figure class='code'> <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>
</pre></td><td class='code'><pre><code class='text'><span class='line'>Title:          Sample Letterhead Document
</span><span class='line'>Subtitle:
</span><span class='line'>Project:        hiltmon.com
</span><span class='line'>Author:         Hilton Lipschitz
</span><span class='line'>Affiliation:    Noverse LLC
</span><span class='line'>Web:            http://www.noverse.com
</span><span class='line'>Date:           May 22, 2013
</span><span class='line'>
</span><span class='line'>![](noverse-logo-160-40.png)
</span><span class='line'>**Noverse LLC**  &lt;span class=&quot;light&quot;&gt;A New York Company&lt;/span&gt;
</span><span class='line'>
</span><span class='line'># Sample Letterhead Document
</span><span class='line'>22 May 2013
</span><span class='line'>
</span><span class='line'>**Client Company Name**
</span><span class='line'>Client Street Address
</span><span class='line'>New York NY 10019
</span><span class='line'>
</span><span class='line'>## RE: You need a letterhead?
</span><span class='line'>
</span><span class='line'>Yadda yadda yadda.
</span><span class='line'>
</span><span class='line'>More yadda yadda yadda.
</span><span class='line'>
</span><span class='line'>&lt;br/&gt;
</span><span class='line'>&lt;br/&gt;
</span><span class='line'>&lt;br/&gt;
</span><span class='line'>&lt;br/&gt;
</span><span class='line'>
</span><span class='line'>**Hilton Lipschitz**
</span><span class='line'>Noverse LLC
</span><span class='line'>&lt;span class=&quot;light&quot;&gt; **&amp;middot;** +1 (917) 555-1234 **&amp;middot;** www.noverse.com **&amp;middot;** contact@noverse.com **&amp;middot;** @noversellc&lt;/span&gt;
</span><span class='line'>&lt;span class=&quot;light&quot;&gt;--- My Office Street, City, State, Zip ---&lt;/span&gt;
</span></code></pre></td></tr></table></div></figure>


<p>Notes on the markdown source:</p>

<ul>
<li>There are two spaces after each line in the address and in the name block at the bottom. That way Markdown places them on different lines without creating paragraph gaps.</li>
<li>The <code>&lt;br/&gt;</code> lines are needed to create space for a signature which you used to use an instrument called a pen to scrawl your name in that space. For PDF letterheads, you can upload a signature image. But in this case, the recipient did not need the signature. &ldquo;Official&rdquo; but unsigned was weirdly fine too.</li>
<li>I like putting a subject at the top of things, such as in this case <code>Sample Letterhead Document</code>. In the 19th century, you used to put the title where the <code>RE: You need a letterhead?</code> is.</li>
</ul>


<p>And the result, an &ldquo;official&rdquo; looking document while remaining in the <a href="http://hiltmon.com/blog/2012/02/20/the-markdown-mindset/">Markdown Mindset</a>. Sweet!</p>

<p><img src="http://hiltmon.com/images/markdown-letterhead.png" width="588" height="470"></p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The One-Person Product]]></title>
    <link href="http://hiltmon.com/blog/2013/05/20/the-one-person-product/"/>
    <updated>2013-05-20T18:45:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/20/the-one-person-product</id>
    <content type="html"><![CDATA[<p>Marco Arment, writing about David Karp, founder of Tumblr, in <a href="http://www.marco.org/2013/05/20/one-person-product">The One-Person Product</a>. Not only is this piece well written, it is an amazing perspective of Tumblr from the inside. But, for me, the salient point and the highest praise in the piece goes to David Karp, the founder and visionary:</p>

<blockquote><p>David has an impeccable sense of what’s best for Tumblr, and he doesn’t need anyone else telling him what’s best for the product. Many people, myself included, have tried to convince him to go different directions, and we’ve been proven wrong every time.</p><p>Tumblr is David, and David is Tumblr.</p></blockquote>


<p><strong>I don&rsquo;t know</strong> of many founders (excluding Steve Jobs) whose people feel so strongly positive about their personality, vision, tenacity, forethought and skills to write something so wonderful like this. I do know a few, their vision is emerging brightly, and one day pieces like this will be written about them too.</p>

<p>However, <strong>I also know</strong> of many founders who love to <em>think</em> they are great visionaries, who think they are right all the time, who think they are the Jobs (and Karp&rsquo;s) of this world <strong>and are most certainly not</strong>. They do not have the humility and laser focus needed for the product. They spend more of their time on making money, on self-promotion, in self-delusion and in making mysterious pronouncements that do not match reality, their business or their products. And their products and profits are showing the results of such a loss of true focus.</p>

<p>We can&rsquo;t all be Steve Jobs or David Karp. But we sure can try to emulate their strengths.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Is it time to change tools?]]></title>
    <link href="http://hiltmon.com/blog/2013/05/16/is-it-time-to-change-tools/"/>
    <updated>2013-05-16T18:15:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/16/is-it-time-to-change-tools</id>
    <content type="html"><![CDATA[<blockquote><p>To improve is to change; to be perfect is to change often.</p><footer><strong>Winston Churchill</strong></footer></blockquote>


<p>Every once in a while I wonder if my programming tools, languages and platforms need to be changed. Maybe, just maybe, the software mix I use every day needs to be shaken up.</p>

<p><span class="light">And then my mind starts spinning in circles.</span></p>

<p>As we all do, I find myself using the same languages and tools over and over again. The same programmer&rsquo;s editor. The same color scheme and fonts. The same language for scripting. The same platform for web services. The same database. The same server applications.</p>

<p>I use them because they work. <strong>Actually, I <em>really</em> use them because I <em>know</em> them so well.</strong> They are proven, robust, easy for me to use, easy for me to deploy and easy for me to support. I have gone though the learning curves, fought with the quirks, dealt with the problems and emerged a master of these tools.</p>

<p><span class="light">Spin.</span></p>

<p>But I sometimes do wonder: <em>Is it time for a change?</em> Maybe I do need to learn and master a new editor, new scheme, new language, new web platform, new database, new server, new everything.</p>

<blockquote><p>The only way that we can live, is if we grow. The only way that we can grow is if we change. The only way that we can change is if we learn.</p><footer><strong>C Joybell C.</strong></footer></blockquote>


<p>But the question then is <em>which</em> new things to learn and tackle? My programmer&rsquo;s editor is still modern, fast and reliable. My scripting language is still popular and works great. The web platform I use is robust and has just been updated to a whole new version. And I switched to the database I use these days only three years ago.</p>

<p><span class="light">Spin.</span></p>

<p>So <em>maybe</em> I don&rsquo;t need to change. The languages and tools I use these days are still at or near the top of their game. A glance at the competitive space for each area shows a few promising new technologies, a few stable similarly aged technologies and a bunch of older ones, but none stand out as &ldquo;the next big thing&rdquo; yet.</p>

<p><span class="light">Spin.</span></p>

<p>But I don&rsquo;t want to miss or be late for &ldquo;next big thing&rdquo; wave. And I fortunately do have the time to learn new stuff. But what to learn? What to change?</p>

<p>And what to change to?</p>

<blockquote><p>Change Simply for the Sake of Change Is an Abdication of Leadership.</p><footer><strong>John Luke Jr</strong></footer></blockquote>


<p><em>Is change for the sake of changing good or no good?</em> John Luke Jr believes it is not good, a sign of bad leadership. Freek Vermeulen, Phanish Puranam, and Ranjay Gulati in the Harvard Business Review&rsquo;s <a href="http://hbr.org/2010/06/change-for-changes-sake/ar/1">Change for Change’s Sake</a> disagree, they view it as a good thing, a sign of good leadership. Both great sources of advice, and yet completely contradictory. Not helping!</p>

<p><span class="light">Spin.</span></p>

<p>Maybe, thinking more on it, I need a real arguable reason to change? A stand-out &ldquo;this is amazing and much better than what I use&rdquo; reason to change?</p>

<p>Looking back, it was <em>arguable need</em> that caused me to switch from stagnating Perl to growing Ruby years ago. From Apache to Nginx to get more workers and throughput on the same hardware. From ASP.Net to Ruby on Rails for platform independence and development speed. From MySQL to PostgreSQL for better write performance and large data management.</p>

<p><span class="light">Spin.</span></p>

<p>But what if I change and land up with the &ldquo;wrong&rdquo; platform? Marco Arment wrote about his trusty PHP when looking to make his own change:</p>

<blockquote><p>The fear of making the “wrong” choice actually makes the familiar, mastered PHP more attractive.</p><footer><strong>Marco Arment</strong> <cite><a href='http://www.marco.org/2012/06/29/php-addiction'>www.marco.org/2012/06/29/&hellip;</a></cite></footer></blockquote>


<p><span class="light">Spin.</span></p>

<p>Or, maybe it&rsquo;s not tools, just a timing issue? Is it <em>time</em> for the next change? Even though there seems to be no reason to do so just yet. Do I need to shake things up a bit <em>right now</em>?</p>

<h3>I honestly don&rsquo;t know.</h3>

<p>In this specific case, <em>maybe</em> T. Bert Lance is right (even though I do not believe this maxim):</p>

<blockquote><p>If it ain&#8217;t broke, don&#8217;t fix it.</p><footer><strong>Thomas Bertram Lance</strong></footer></blockquote>


<p><span class="light">Spin.</span></p>

<p>And so the thinking, spinning and search continues.</p>

<p>Until I find the &ldquo;right&rdquo; new things for me, I&rsquo;ll stick with what I have. But I&rsquo;ll keep looking, keep checking things out.</p>

<p>My next project will be a <em>trusty</em> Rails project on a trusty Linux platform using my <em>trusty</em> Nginx setup against <em>trusty</em> PostgreSQL. And my next script will still be in <em>trusty</em> Ruby. And I&rsquo;ll still program it all using <em>trusty</em> TextMate 2 with my familiar <a href="http://hiltmon.com/files/CombinedCasts.tmTheme">CombinedCasts</a> theme.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Every 'The Best Programmers Editor' Review]]></title>
    <link href="http://hiltmon.com/blog/2013/05/14/every-the-best-programmers-editor-review/"/>
    <updated>2013-05-14T17:58:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/14/every-the-best-programmers-editor-review</id>
    <content type="html"><![CDATA[<script>
    function setEditor(editor, url) {
        var elements = document.getElementsByClassName('editor-span');
        for (var i = 0; i < elements.length; ++i) {
            var element = elements[i];
            element.innerHTML = '<a href="' + url + '">' + editor + '</a>';
        }
        return false;
    }
    
    onload = function() {
        setEditor('TextMate 2', 'http://www.macromates.com/');
    }
</script>


<p><span class="light">I read a lot of programmer&rsquo;s editor reviews and see a lot of arguments about which is best. Yet, essentially, they all do the same thing, help you program the way you want to. So here is my review of your favorite programmer&rsquo;s editor for the Mac.</span></p>

<p>
    Choose your Editor:
    <a href="#" onclick="return setEditor('TextMate 2', 'http://www.macromates.com/');">TextMate 2</a> | 
    <a href="#" onclick="return setEditor('Sublime Text 2', 'http://www.sublimetext.com/2');">Sublime Text 2</a> | 
    <a href="#" onclick="return setEditor('BBEdit', 'http://www.barebones.com/products/bbedit/');">BBEdit</a> | 
    <a href="#" onclick="return setEditor('Chocolat', 'http://www.chocolatapp.com');">Chocolat</a> | 
    <a href="#" onclick="return setEditor('Vim', 'http://www.vim.org/');">Vim</a> | 
    <a href="#" onclick="return setEditor('Emacs', 'http://www.gnu.org/software/emacs/');">Emacs</a>
</p>


<h2>My <span class="editor-span">EDITOR</span> Review</h2>

<blockquote><p><span class="editor-span">EDITOR</span> is by far the best programmer&#8217;s editor ever.</p><footer><strong>Me</strong> <cite>Now</cite></footer></blockquote>


<p><strong>Here&rsquo;s why.</strong></p>

<p><span class="editor-span">EDITOR</span> contains all the basic features you would expect from a good programmer&rsquo;s editor, such as syntax highlighting, code folding, block selection, brace matching, and support for almost every programming language out there. It also supports multiple file encodings, different line ending conventions and, of course, has multi-level undo.</p>

<p>You can save and use your own code snippets within <span class="editor-span">EDITOR</span>. And you can create and run your own macros in <span class="editor-span">EDITOR</span> to increase your efficiency. And one of the best features is that there is an extensive library of bundles on the internet to extend <span class="editor-span">EDITOR</span>&rsquo;s feature set to do anything imaginable.</p>

<p><span class="editor-span">EDITOR</span> is blazingly fast to load and use. Much faster than any IDE. Plain text and regex search and replace are but a keystroke away and very quick. And navigating between files in a project or within a file is simple.</p>

<p>The UI is streamlined and does not get in your way. Which makes <span class="editor-span">EDITOR</span> a beautifully simple product. Of course, you can customize the font, spacing and theme to your desire.</p>

<p>Like all such tools though, there is a learning curve. There are only a few keystrokes a beginner needs to learn to get going. But once you have mastered <span class="editor-span">EDITOR</span> extensive keyboard shortcuts, you can do anything in it without reaching for the mouse.</p>

<p>Look, I am most productive in <span class="editor-span">EDITOR</span>. All the commands and features I need are available at a keystroke. And I have the muscle-memory to ensure that I can program at peak efficiency when I use <span class="editor-span">EDITOR</span>.</p>

<p><strong>So I highly recommend you use <span class="editor-span">EDITOR</span> as your primary programmer&rsquo;s editor. I cannot imagine programming without it.</strong></p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[My Next Product]]></title>
    <link href="http://hiltmon.com/blog/2013/05/13/my-next-product/"/>
    <updated>2013-05-13T10:56:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/13/my-next-product</id>
    <content type="html"><![CDATA[<p>My <em>next</em> product is going to be the best product I ever made. Of this I am certain.</p>

<p>It is going to have an absolutely beautiful design inside and out. The internal architecture is going to be sublime, the code and classes readable and maintainable. The functionality in the first version will hit all the high marks and the UI is going to stand out.</p>

<p>My next product is going to solve a problem that lots of other people face every day. Tens, hundreds, thousands, maybe even millions of people. And it is going to solve that problem in a new, unique and intuitive way. Users of my next product are going to wonder how they got bye without it.</p>

<p>Of course my next product will use the latest and greatest technologies. If that means that some users need to upgrade their platforms to use it, so be it. It is through the use of these technologies that the hottest features of this product will emerge.</p>

<p>My next product is going to test my skills to the limit. Nothing in my 23 years experience as a designer and developer of software will match the challenges of this product. And yet all that experience will help me overcome each hurdle as I craft it, all that experience will <em>enable</em> me to craft it.</p>

<p>My next product is going to be of the highest quality. I will get the core working, proven correct and fast. I will sweat all the details most would miss. It will be tested to death, and then tested some more.</p>

<p>But.</p>

<p><strong>I just have no idea what it this next product will be.</strong></p>

<p>But that is not the point.</p>

<p><strong><em>Whatever</em> my next product is, be it for myself or for a client, will be the best product I ever made.</strong></p>

<p>As was the one before it.</p>

<p>As will be the one after that.</p>

<p>Never stop learning. Never stop growing. Never stop improving.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[A Coda 2 Use Case]]></title>
    <link href="http://hiltmon.com/blog/2013/05/12/a-coda-2-use-case/"/>
    <updated>2013-05-12T11:20:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/12/a-coda-2-use-case</id>
    <content type="html"><![CDATA[<p><img class="right" src="http://hiltmon.com/images/coda2.png" width="128" height="128"></p>

<p>I upgraded to <a href="http://www.panic.com">Panic&rsquo;s</a> <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcoda-2%252Fid499340368%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Coda 2</a> when it came out, <em>and never used it</em>. Unless it was to trigger a software update.</p>

<p>That was until last week.</p>

<p>Last week I was working on an <em>odd</em> project to create a set of web pages that would be hosted on a payment processor&rsquo;s site, but must look and feel like they are running on the actual site. This was for some non-profits to enable them to accept credit-card donations and electronic payment of member fees. Think of it as a customized set of Paypal pages that run on Paypal&rsquo;s servers, yet are customized to the look and feel of the parent. Without Paypal, of course.</p>

<p>Since our payment processor&rsquo;s servers could only handle plain-old HTML and CSS files, this looked like a job for my trusty hammer tool, <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbbedit%252Fid404009241%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">BBEdit</a>. Which is what I started with. <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbbedit%252Fid404009241%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">BBEdit</a>&rsquo;s handling of HTML and CSS is excellent. So, my plan was to mock up the pages as plain old HTML and use <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbbedit%252Fid404009241%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">BBEdit</a>&rsquo;s live preview window to check that it looked right. I would then copy the final pages to a new <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbbedit%252Fid404009241%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">BBEdit</a> project where I could then insert the payment processor&rsquo;s <em>funky</em> markup to make it work. And then iterate. As you do.</p>

<p>But that led to a problem, one of navigation. I needed one <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbbedit%252Fid404009241%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">BBEdit</a> project window open for the mockup HTML (bottom left), another project window open for the processor&rsquo;s templates (top left) and <em>one preview window open for each page being mocked up.</em> This is because <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbbedit%252Fid404009241%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">BBEdit</a>&rsquo;s preview window is tied to the editor frame that is current when opening it, and it does not switch when you change to another editor frame containing a different file.</p>

<p><img src="http://hiltmon.com/images/bbedit-multi-preview.jpg" width="700" height="438"></p>

<p>I tiled the preview windows to help, but got confused as to which preview window to look at when I made a change to a HTML file. I tried just using one preview window, but that meant I had to close and open a preview each time I switched pages. This process was slowing me down.</p>

<p>I think I wore out my <code>⌘-~</code> (switch window) key jumping around. The problem was that my muscle memory kept on making me hit <code>⌘-⇥</code> (switch app) when moving between mockup-pages and the templates <em>even though they were in the same application</em>. My brain was seeing these as two separate products.</p>

<p>So, in personal OCD frustration, I decided to use another product for some of the work.</p>

<p>And remembered I had <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcoda-2%252Fid499340368%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Coda 2</a> which contains integrated previews. So I opened the mockups folder as a site in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcoda-2%252Fid499340368%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Coda 2</a> and used its split panes feature to add a preview window for <em>each</em> mockup, and then created a tab for each mockup page. And it worked brilliantly.</p>

<p><img src="http://hiltmon.com/images/coda-single-preview.jpg" width="700" height="446"></p>

<p>I could focus on a single mockup page in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcoda-2%252Fid499340368%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Coda 2</a>, see its changes live in the split-pane preview window, and jump tabs to work on different mockup pages with their <em>own</em> previews. Which suited my mindset. And then use <code>⌘-⇥</code> to jump back to <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbbedit%252Fid404009241%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">BBEdit</a> to modify the templates, which suited my muscle-memory. And which kept me sane.</p>

<p><em>I then found out you could even add the CSS file as an additional pane in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcoda-2%252Fid499340368%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Coda 2</a>, which made testing and customizing these mockup pages exceptionally easy and pleasurable.</em></p>

<p>The result is that I got to create and test these mockups quickly and easily in <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcoda-2%252Fid499340368%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Coda 2</a>, run and post the marked-up templates from <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fbbedit%252Fid404009241%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">BBEdit</a>, iterate as necessary, and got the job done on time without further frustration. I don&rsquo;t know of any other product that has live <em>integrated</em> pane previews for static HTML sites like <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fcoda-2%252Fid499340368%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Coda 2</a> does. Thank you, <a href="http://www.panic.com">Panic</a>, for this use case.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Octopress now has Footnotes]]></title>
    <link href="http://hiltmon.com/blog/2013/05/08/octopress-now-has-footnotes/"/>
    <updated>2013-05-08T17:30:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/08/octopress-now-has-footnotes</id>
    <content type="html"><![CDATA[<p>If you update to the latest Octopress and you still use the <code>rdiscount</code> markdown processor, you now get footnotes like this <sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>.  <span class="light">I was previously using a CSS workaround because I prefer the speed of <code>rdiscount</code> for my growing site<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> and still wanted footnotes.</span></p>

<p>To create a footnote, use the standard MultiMarkdown <code>[^1]</code> anchor to create the footnote reference link, and add <code>[^1]: The footnote content.</code> to the bottom of the file<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup>.</p>

<p>I also prefer my footnotes a tad smaller, lighter and closer together, so I added the following CSS to my <code>sass/custom/_styles.css</code> file:</p>

<figure class='code'><figcaption><span></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>
</pre></td><td class='code'><pre><code class='sass'><span class='line'><span class="nc">.footnotes</span> <span class="err">{</span>
</span><span class='line'>  <span class="na">font-size</span><span class="o">:</span> <span class="mi">13</span><span class="kt">px</span><span class="err">;</span>
</span><span class='line'>  <span class="na">line-height</span><span class="o">:</span> <span class="mi">16</span><span class="kt">px</span><span class="err">;</span>
</span><span class='line'>  <span class="na">color</span><span class="o">:</span> <span class="mh">#666</span><span class="err">;</span>
</span><span class='line'>
</span><span class='line'>  <span class="nt">p</span> <span class="err">{</span>
</span><span class='line'>    <span class="na">margin-bottom</span><span class="o">:</span> <span class="mi">6</span><span class="kt">px</span><span class="err">;</span>
</span><span class='line'>  <span class="err">}</span>
</span><span class='line'><span class="err">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>If you prefer popover style footnotes (which I do not), try the <a href="https://github.com/mattgemmell/footnotes-popover">Footnotes Popover</a> by <a href="http://mattgemmell.com">Matt Gemmell</a>.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:1">
<p>This is a footnote.<a href="#fnref:1" rev="footnote">&#8617;</a></p></li>
<li id="fn:2">
<p>If you had changed Markdown processors, you would have gotten footnotes sooner, but at the cost of significantly slower site generation speed. <code>rdiscount</code> is fast C code, the others are slower interpreted code.<a href="#fnref:2" rev="footnote">&#8617;</a></p></li>
<li id="fn:3">
<p><strong>Bold</strong> and <em>italics</em> work here too.<a href="#fnref:3" rev="footnote">&#8617;</a></p></li>
</ol>
</div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Avoiding the Blogger Trap]]></title>
    <link href="http://hiltmon.com/blog/2013/05/08/avoiding-the-blogger-trap/"/>
    <updated>2013-05-08T10:43:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/08/avoiding-the-blogger-trap</id>
    <content type="html"><![CDATA[<p>I totally agree with <a href="http://twitter.com/marcoarment">Marco</a> in <a href="http://www.marco.org/2009/04/05/avoiding-the-blogger-trap">Avoiding the blogger trap</a>:</p>

<blockquote><p>People aren’t so one-sided. Everyone has a life that goes much deeper than the topics on their blogs.</p></blockquote>


<p>and</p>

<blockquote><p>This site represents me, and I’m random and eccentric and interested in a wide variety of subjects.</p></blockquote>


<p><em>This</em> site is <strong>me</strong>, with a <em>hodge podge</em> of posts ranging from opinion pieces, news, geeky ideas, advice, links, jokes, setups and productivity. I write what I find interesting. I experiment. Sometimes I have a point. Sometimes I just want to provoke thought. And allegedly I even occasionally produce a good and useful post.</p>

<p>I don&rsquo;t make any money from this. I don&rsquo;t get any new business from this (as yet, still hoping).</p>

<p>I do care about my readers. I like to engage with you, and get very excited every time I get an email from <a href="https://disqus.com">Disqus</a> to say a new comment has been posted. Or a <a href="http://twitter.com/hiltmon">Twitter</a> or <a href="http://alpha.app.net/hiltmon">App.Net</a> mention. Or a <a href="https://www.facebook.com/hiltmoncom">Facebook</a> page like. And the best is when another blogger links to my work.</p>

<p>I like to write. And I intend to continue writing. Maybe I&rsquo;ll even get better at it.</p>

<p>But most importantly, <strong>thank you</strong> for reading <strong>Hiltmon.com</strong> and coming along on the journey. I hope you continue to enjoy it.</p>

<p>&ldquo;Good Journey.&rdquo;</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Reading the Archives]]></title>
    <link href="http://hiltmon.com/blog/2013/05/07/reading-the-archives/"/>
    <updated>2013-05-07T09:20:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/07/reading-the-archives</id>
    <content type="html"><![CDATA[<p>Most people when they click on a link to a new blog, read the linked article and move on elsewhere. Google Analytics records this as a <em>bounce</em> &ndash; a visitor comes in, reads a single page and leaves.</p>

<p>One of my <em>habits</em> when I come across a <em>new</em> blog is to <strong>read the archives</strong>. Almost every blogging platform has archives and almost every blogger makes these available.</p>

<p>But why <em>read the archives</em>?</p>

<ul>
<li>My primary reason is to scan the archive headlines to see what topics this blog covers. If the series of topics I see interest me, I&rsquo;ll add that blog to my RSS feeds.</li>
<li>I also want to see how frequently the blog gets updated. If the archives end a year ago, then I can tell that the blog has been abandoned, and will not subscribe.</li>
<li>If the post I was linked to <em>did</em> interest me, chances are that this writer has more posts that may interest me. <em>Reading the archives</em> often points me to another set of posts by the same writer, which I invariably <a href="http://www.instapaper.com">Instapaper</a> for tonight&rsquo;s recreational reading.</li>
<li>Even if the post I read was <em>not</em> as interesting as expected, I still <em>scan the archives</em> the first time around, just in case they have other topics that do interest me. I may have followed a link to an article I did not enjoy, but the link usually came from someone I do trust.</li>
</ul>


<p>I used to just <em>bounce</em> around the internet, reading one piece here, one piece there, but I found that all this <em>bouncing</em> around meant I read a lot of posts <em>that did not interest me</em>. By <em>reading the archives</em>, I found a bunch of sites that I subscribe to, regularly visit and find that my limited reading time is filled with stuff that interests me. It is so much more enjoyable.</p>

<p>I&rsquo;m not saying you should do this too, but chances are that your analytics has me logged as an arrival by link, followed by a click on the archives. Not a bounce.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Hedge Fund Systems]]></title>
    <link href="http://hiltmon.com/blog/2013/05/06/hedge-fund-systems/"/>
    <updated>2013-05-06T12:45:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/06/hedge-fund-systems</id>
    <content type="html"><![CDATA[<p>I have started a new series of articles on <a href="http://www.noverse.com/blog/categories/hedge-fund-systems/">Hedge Fund Systems</a> on my company, <a href="http://www.noverse.com/">Noverse LLC</a> blog.  <span class="light">I did not post them here (yet) because I am not sure my readers will be interested – and I am using them to promote my skills and services. Let me know in comments you think I should post them here too.</span></p>

<p>But just in case you <em>are</em> interested in Hedge Fund systems (or my professional skills), the first post is called <a href="http://www.noverse.com/blog/2013/05/the-opportunity/">The Opportunity</a> where I describe the opportunity I got starting in 2004 to design, develop and grow a brand new end-to-end Hedge Fund system for a completely fresh new business. It was the opportunity of a lifetime, and I took it.</p>

<p>In short, I <strong>did</strong> successfully architect, plan, design and build a feature-complete, integrated platform that ran the business for this Hedge Fund that traded <em>everything</em> and grew to over 900mm under management.</p>

<p>Head on over to <a href="http://www.noverse.com/blog/2013/05/the-opportunity/">The Opportunity</a> to read more. It&rsquo;s a pretty unbelievable, but true, story.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Fix the Mac Function Keys with Palua]]></title>
    <link href="http://hiltmon.com/blog/2013/05/01/fix-the-mac-function-keys-with-palua/"/>
    <updated>2013-05-01T13:04:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/01/fix-the-mac-function-keys-with-palua</id>
    <content type="html"><![CDATA[<p><img class="right" src="http://hiltmon.com/images/keyboard-f1.jpg" width="269" height="187"></p>

<p>By default, the function keys on Apple keyboards are mapped to the <em>Apple</em> functions on them, like brightness, volume and Mission Control. To access them as F1 &ndash; F12 requires you to hit the <code>fn</code> key as well. You could always reverse this in <strong>Preferences</strong> / <strong>Keyboard</strong> by checking <strong>Use all F1, F2, etc. keys as standard function keys</strong>.</p>

<p>But this change is <em>system-wide</em>. What if you want the default <em>Apple</em> behavior <em>most of the time</em>, but <em>Function</em> key behavior in certain applications, for example, in virtual machines?</p>

<p><img class="left" src="http://hiltmon.com/images/Palua.png" width="128" height="128"></p>

<p><a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fpalua%252Fid431494195%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Palua</a> is a simple menu-bar applet that allows the user to easily switch between <em>Apple</em> and <em>Function</em> key behavior using a keyboard shortcut. Tap the shortcut and the mode changes.</p>

<p>But I don&rsquo;t use it that way.</p>

<p><img class="right" src="http://hiltmon.com/images/palua-smart-mode.jpg" width="301" height="237"></p>

<p><a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fpalua%252Fid431494195%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Palua</a>&rsquo;s true power comes when you enable <strong>Smart Mode</strong> in its <strong>Preferences</strong>. Here, you can set which keyboard mode to use for which application, and <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fpalua%252Fid431494195%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Palua</a> makes the switch for you <em>automatically</em>. Brilliant!</p>

<p>In my case, I have <em>Function</em> mode enabled for <a href="http://www.vmware.com/products/fusion/overview.html">VMWare Fusion</a> so hosted VM&rsquo;s see the <code>F?</code> keys, and for Apple&rsquo;s Mail.app so that I can use the Function keys directly for <a href="http://www.indev.ca/MailActOn.html">Mail Act-On</a> behaviors. At the moment, I use <em>Apple</em> mode for the rest.</p>

<p><a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fpalua%252Fid431494195%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">Palua</a> is a lovely little utility that does <em>one thing well</em>, and then does it smartly: It automatically switches my keyboard mode based on the currently active app. I have it running all the time and managed by <a href="http://www.macbartender.com">MacBartender</a>.</p>

<p>Available on the <a href="http://click.linksynergy.com/fs-bin/stat?id=V41G*FiMqjc&amp;offerid=146261&amp;type=3&amp;subid=0&amp;tmpid=1826&amp;RD_PARM1=https%253A%252F%252Fitunes.apple.com%252Fus%252Fapp%252Fpalua%252Fid431494195%253Fmt%253D12%2526uo%253D4%2526partnerId%253D30">App Store</a> for 99c (US) as of writing.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Instantly grab a high-res icon for any Mac app]]></title>
    <link href="http://hiltmon.com/blog/2013/05/01/instantly-grab-a-high-res-icon-for-any-mac-app/"/>
    <updated>2013-05-01T11:28:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/05/01/instantly-grab-a-high-res-icon-for-any-mac-app</id>
    <content type="html"><![CDATA[<p>In <a href="http://brettterpstra.com/2013/04/28/instantly-grab-a-high-res-icon-for-any-ios-app/">Instantly grab a high-res icon for any iOS app</a>, the awesome Brett Terpstra (<a href="http://twitter.com/ttscoff">@ttscoff</a>) offered a script and an app to get the icon from iTunes for any <strong>iOS</strong> app.</p>

<p>I wanted the same for <strong>Mac</strong> apps. Turns out, it&rsquo;s a one word change to Brett&rsquo;s scripts. Just follow his instructions using the below files, but replace the script name with <code>macicon.rb</code> and the application name with <code>MacIcon</code>.</p>

<ul>
<li><a href="https://gist.github.com/hiltmon/5496034">Download and save the script</a> as <code>macicon.rb</code>.</li>
<li><a href="http://hiltmon.com/Files/MacIcon.zip">Download the MacIcon Application</a>.</li>
</ul>


<p><strong>Usual disclaimer: It works for me, should work for you, and no bunnies were harmed.</strong></p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Email before the Open Web]]></title>
    <link href="http://hiltmon.com/blog/2013/04/30/email-before-the-open-web/"/>
    <updated>2013-04-30T09:09:00-04:00</updated>
    <id>http://hiltmon.com/blog/2013/04/30/email-before-the-open-web</id>
    <content type="html"><![CDATA[<p><em>Today, April 30, 2013 is the 20th anniversary of CERN making the WWW free, see <a href="http://info.cern.ch">Twenty Years of a free, open web</a>. I thought I&rsquo;d share a story about how it was like before then.</em></p>

<p>The year was 1988 or 1989, and my Computer Science Professor wanted to send his first email. But first we had to connect our University to the fledgling Internet. Since I ran the UNIX lab, I was tasked to set this up.</p>

<p><img class="right" src="http://hiltmon.com/images/UCT.png" width="150" height="152"></p>

<p>I should point out that I was at the <a href="http://www.uct.ac.za">University of Cape Town</a> in South Africa at the time, about as far from the physical internet as was possible back then.</p>

<p>This was before ISP&rsquo;s. We ran our own wires, hubs and routers. And the Computer Science department had it&rsquo;s own LAN. We also had a bank of modems available for graduate students to dial in from other parts of the campus. We were not even wired to the next building. That was our entire network.</p>

<p>Since we were not interconnected, we had no access to the fledgling DNS network that was growing in the United States. And web servers and web browsers had yet to leave the lab and be opened up. And SMTP, which the planetary email network still depends on, would only work in a fully-connected environment.</p>

<p>The first step was then to find a way to connect to this Internet thingie from the far end of the world.</p>

<p><img class="right" src="http://hiltmon.com/images/cambridge.png" width="150" height="189"></p>

<p>One of my Professor&rsquo;s colleagues had written in a letter that his University, The <a href="http://www.cam.ac.uk">University of Cambridge</a> in the UK, had already been connected, and offered to enable us to route through them. All we needed to do was find a way to connect to them first.</p>

<p>We could have just used one of our modems to call out to Cambridge via the phone network. But international phone calls to host slow modem connections were prohibitively expensive, and the international lines out of Africa were notoriously noisy and unreliable. We needed another way.</p>

<p><img class="right" src="http://hiltmon.com/images/rhodes.png" width="150" height="213"></p>

<p>Then we found out that the <a href="http://www.ru.ac.za">Rhodes University</a> in Grahamstown in the Eastern Cape had been given a huge grant to pay for their connection to Cambridge. So my Professor got on the phone to his counterpart there and they agreed that UCT could route through Rhodes and piggyback on their UK connection.</p>

<p>So I set up a modem, scripts and routes to use UUCP (UNIX to UNIX copy) to connect our primary UNIX computer to the Rhodes one. It would dial up Rhodes every hour and use <a href="http://en.wikipedia.org/wiki/UUCP">UUCP</a> to transfer any files and messages between the two computers. I tested it by sending messages and files to my counterpart there. It was then up to the Rhodes computer to process any email messages for us.</p>

<p>And it worked. My Professor sat at my desk, typed in his email and hit send. Then we both stared at the screen. <em>Because nothing happened.</em> I checked the UUCP folders, and the message was there in the queue.  Sometime in the next hour, our modem awoke, called Rhodes and UUCP sent the message out. Rhodes forwarded it on sometime later to Cambridge and I have no idea how it went from there onwards.</p>

<p>The next morning we came in to see if there was a reply. But there was none. The UUCP queues and folders were empty. Maybe the message did not get through.</p>

<p>But the day after there was a message. It had come back through this ad-hoc network of computers, dial up connections, hand-coded scripts and home grown routing tables from the other end of the world.</p>

<p><a href="http://en.wikipedia.org/wiki/Donald_Knuth">Donald Knuth</a> himself had replied to my Professor&rsquo;s first emailed question.</p>

<p><em>Follow the author as <a href="http://twitter.com/hiltmon">@hiltmon</a> on Twitter and <a href="http://alpha.app.net/hiltmon">@hiltmon</a> on App.Net. Mute <code>#xpost</code> on one.</em></p>
]]></content>
  </entry>
  
</feed>
