<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Tim&#039;s Blog</title>
	<atom:link href="http://timclem.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://timclem.wordpress.com</link>
	<description>Hack everything</description>
	<lastBuildDate>Tue, 02 Apr 2013 16:13:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='timclem.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Tim&#039;s Blog</title>
		<link>http://timclem.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://timclem.wordpress.com/osd.xml" title="Tim&#039;s Blog" />
	<atom:link rel='hub' href='http://timclem.wordpress.com/?pushpress=hub'/>
		<item>
		<title>GitHub for Windows</title>
		<link>http://timclem.wordpress.com/2012/05/21/github-for-windows/</link>
		<comments>http://timclem.wordpress.com/2012/05/21/github-for-windows/#comments</comments>
		<pubDate>Mon, 21 May 2012 19:58:36 +0000</pubDate>
		<dc:creator>Tim Clem</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://timclem.wordpress.com/?p=396</guid>
		<description><![CDATA[If you didn&#8217;t catch the news already, we just released GitHub for Windows to the world this morning. You can read the full blog post or go check out the launch site. I&#8217;m so excited to be shipping to such a great community of users!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=396&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>If you didn&#8217;t catch the news already, we just released <a href="http://windows.github.com/" target="_blank">GitHub for Windows</a> to the world this morning. You can read the full <a href="https://github.com/blog/1127-github-for-windows" target="_blank">blog post</a> or go check out the launch <a href="http://windows.github.com/" target="_blank">site</a>. I&#8217;m so excited to be shipping to such a great community of users!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timclem.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timclem.wordpress.com/396/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=396&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://timclem.wordpress.com/2012/05/21/github-for-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/2f4861b27dc35663ed271d39f5358261?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">timclem</media:title>
		</media:content>
	</item>
		<item>
		<title>Mind the End of Your Line</title>
		<link>http://timclem.wordpress.com/2012/03/01/mind-the-end-of-your-line/</link>
		<comments>http://timclem.wordpress.com/2012/03/01/mind-the-end-of-your-line/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 19:01:27 +0000</pubDate>
		<dc:creator>Tim Clem</dc:creator>
				<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://timclem.wordpress.com/?p=381</guid>
		<description><![CDATA[One of the most frequent questions I answer about Git is why dealing with line endings is so difficult. This is an attempt to answer that question and explain the myriad of options and settings that control line endings in Git. Git has gone through two systems for dealing with line endings in repositories. The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=381&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<article class="markdown-body">
<p>One of the most frequent questions I answer about Git is why dealing with line endings is so difficult. This is an attempt to answer that question and explain the myriad of options and settings that control line endings in Git.</p>
<p>Git has gone through two systems for dealing with line endings in repositories. The root of the problem being that Unix, Linux and OS X use <code>LF</code> and Windows uses <code>CRLF</code> to denote the end of a line. Previous to OS X, Mac actually used <code>CR</code>, but for the most part we can ignore that.</p>
<p>None of this would be a problem if we each lived in our own little worlds and never shared code between operating systems. And by share I mean everything from working on a cross platform project to copy-pasting code out of a browser. In fact, anytime you download a sample project in a zip file, copy code out of a gist, copy code from someones blog or use code out of a file that you keep in Dropbox &#8211; you are sharing text and you need to deal with these invisible line-ending characters. All of these activities potentially introduce a different set of line endings into your code base which is going to make diffs messy and Git generally unhappy.</p>
<p>Git&#8217;s primary solution to all this is to specify that <code>LF</code> is the best way to store line endings for <em>text files</em> in a Git repository&#8217;s object database. It doesn&#8217;t force this on you but most developers using Git and GitHub have adopted this as a convention and even our own <a href="http://help.github.com/line-endings/">help</a> recommends setting up your config to do this. </p>
<h2>Background</h2>
<p>Before describing the settings that control line endings in Git, there are a couple of things you need to know about: <code>core.eol</code> and what it means to write something to the object database.</p>
<h3>End of line</h3>
<p><code>core.eol</code></p>
<p>The first setting you need to know about is <code>core.eol</code>. In all but the rarest of cases you should never have to change this setting from it&#8217;s default. This setting doesn&#8217;t do much on its own, but as soon as we start telling Git to change our line endings for us we need to know the value of <code>core.eol</code>. This setting is used by all the other things we are going to talk about below, so it&#8217;s good to know that it exists and good to know that you probably don&#8217;t want to change it.</p>
<ul>
<li>
<p><code>core.eol = native</code> &#8211; The default. When Git needs to change line endings to write a file in your working directory it will change them to whatever is the default line ending on your platform. For Windows this will be <code>CRLF</code>, for Unix/Linux/OS X this will be <code>LF</code>. </p>
</li>
<li>
<p><code>core.eol = crlf</code> &#8211; When Git needs to change line endings to write a file in your working directory it will always use <code>CRLF</code> to denote end of line.</p>
</li>
<li>
<p><code>core.eol = lf</code> &#8211; When Git needs to change line endings to write a file in your working directory it will always use <code>LF</code> to denote end of line.</p>
</li>
</ul>
<p>You can run <code>git config --global core.eol</code> to see what this value is set to on your system. If nothing comes back that means you are on the using the default which is <code>native</code>.</p>
<h3>In and out of the object database</h3>
<p>What is the object database? I&#8217;m going to talk a lot about two different operations: writing to the object database and writing out to the working directory. It helps to understand these concepts a bit before moving on.</p>
<p>You may already know that Git has it&#8217;s own database in that <code>.git</code> folder which Scott does a great job of explaining in <a href="http://progit.org/book/ch9-0.html">Chapter 9</a> of his <a href="http://progit.org/book/">Pro Git book</a>. All you need to know is that when you do something like <code>git commit</code> you are writing objects into the database. This involves taking the files that you are committing, calculating their shas and writing them into the object database as blobs. This is what I mean when I say <em>writing to the object database</em> and this is when Git has a chance to run filters and do things like converting line endings.</p>
<p>The other place that Git has a chance to run filters is when it reads out of the object database and writes files into your working directory. This is what I mean when I say <em>writing out into the working directory</em>. Many commands in Git do this, but <code>git checkout</code> is the most obvious and easy to understand. This also happens when you do a <code>git clone</code> or run a command like <code>git reset</code> that changes your working directory.</p>
<h2>The Old System</h2>
<p>First, let&#8217;s talk about the old system. This is the original set of features in Git designed to solve this particular problem of line endings. There is a good chance you are still using this system and don&#8217;t even know. Here is how it works: Git has a configuration setting called <code>core.autocrlf</code> which is specifically designed to make sure that when a <em>text</em> file is written to the repository&#8217;s object database that all line endings in that text file are normalized to <code>LF</code>. Here are the different options for <code>core.autocrlf</code> and what they mean:</p>
<ul>
<li>
<p><code>core.autocrlf = false</code> &#8211; This is the default, but most people are <a href="http://help.github.com/line-endings/">encouraged</a> to change this immediately. The result of using false is that Git doesn&#8217;t ever mess with line endings on your file. You can check in files with <code>LF</code> or <code>CRLF</code> or <code>CR</code> or some random mix of those three and Git does not care. This can make diffs harder to read and merges more difficult. Most people working in a Unix/Linux world use this value because they don&#8217;t have <code>CRLF</code> problems and they don&#8217;t need Git to be doing extra work whenever files are written to the object database or written out into the working directory.</p>
</li>
<li>
<p><code>core.autocrlf = true</code> &#8211; This means that Git will process all <em>text</em> files and make sure that <code>CRLF</code> is replaced with <code>LF</code> when writing that file to the object database and turn all <code>LF</code> back into <code>CRLF</code> when writing out into the working directory. This is the recommended setting on Windows because it ensures that your repository can be used on other platforms while retaining <code>CRLF</code> in your working directory.</p>
</li>
<li>
<p><code>core.autocrlf = input</code> &#8211; This means that Git will process all <em>text</em> files and make sure that <code>CRLF</code> is replaced with <code>LF</code> when writing that file to the object database. It will <strong>not</strong>, however, do the reverse. When you read files back out of the object database and write them into the working directory they will still have <code>LF</code>s to denote the end of line. This setting is generally used on Unix/Linux/OS X to prevent <code>CRLF</code>s from getting written into the repository. The idea being that if you pasted code from a web browser and accidentally got <code>CRLF</code>s into one of your files, Git would make sure they were replaced with <code>LF</code>s when you wrote to the object database.</p>
</li>
</ul>
<p>You can run <code>git config --global core.autocrlf</code> to see what this value is set to on your system. If nothing comes back that means you are on the using the default which is <code>false</code>.</p>
<p>How does Git know that a file is <em>text</em>? Good question. Git has an internal method for heuristically checking if a file is binary or not. A file is deemed <em>text</em> if it is not binary. Git can sometimes be wrong and this is the basis for our next setting.</p>
<p>The next setting that was introduced is <code>core.safecrlf</code> which is designed to protect against these cases where Git might change line endings on a file that really should just be left alone.</p>
<ul>
<li>
<p><code>core.safecrlf = true</code> &#8211; When getting ready to run this operation of replacing <code>CRLF</code> with <code>LF</code> before writing to the object database, Git will make sure that it can actually successfully back out of the operation. It will verify that the reverse can happen (<code>LF</code> to <code>CRLF</code>) and if not the operation will be aborted.</p>
</li>
<li>
<p><code>core.safecrlf = warn</code> &#8211; Same as above, but instead of aborting the operation, Git will just warn you that something bad might happen.</p>
</li>
</ul>
<p>One final layer on all this is that you can create a file called <code>.gitattributes</code> in the root of your repository and add rules for specific files. These rules allow you to control things like <code>autocrlf</code> on a per file basis. So you could, for instance, put this in that file to tell Git to always replace <code>CRLF</code> with <code>LF</code> in txt files:</p>
<p><code>*.txt crlf</code></p>
<p>Or you could do this to tell Git to never replace <code>CRLF</code> with <code>LF</code> for txt files like this:</p>
<p><code>*.txt -crlf</code></p>
<p>Or you could do this to tell Git to only replace <code>CRLF</code> with <code>LF</code> when writing, but to read back <code>LF</code> when writing the working directory for txt files like this:</p>
<p><code>*.txt crlf=input</code></p>
<p>OK. Got all that? See all the problems and the mess we&#8217;ve made? It gets worse when you start working on projects that push you towards different global settings. Enter the new system which is available in Git 1.7.2 and above.</p>
<h2>The New System</h2>
<p>The new system moves to defining all of this in the <code>.gitattributes</code> file that you keep with your repository. This means that line endings can be encapsulated entirely within a repository and don&#8217;t depend on everyone having the proper global settings.</p>
<p>In the new system you are in charge of telling git which files you would like <code>CRLF</code> to <code>LF</code> replacement to be done on. This is done with a <code>text</code> attribute in your repository&#8217;s <code>.gitattributes</code> file. In this case the <a href="http://schacon.github.com/git/gitattributes.html">man page</a> is actually quite helpful. Here are some examples of using the <code>text</code> attribute:</p>
<ul>
<li>
<p><code>*.txt  text</code> &#8211; Set all files matching the filter *<em>.txt</em> to be text. This means that Git will run <code>CRLF</code> to <code>LF</code> replacement on these files every time they are written to the object database and the reverse replacement will be run when writing out to the working directory.</p>
</li>
<li>
<p><code>*.txt  -text</code> &#8211; Unset all files matching the filter. These files will never run through the <code>CRLF</code> to <code>LF</code> replacement.</p>
</li>
<li>
<p><code>*.txt  text=auto</code> &#8211; Set all files matching the filter to be converted (<code>CRLF</code> to <code>LF</code>) <strong>if</strong> those files are determined by Git to be text and not binary. This relies on Git&#8217;s built in binary detection heuristics. </p>
</li>
</ul>
<p>If a file is unspecified then Git falls back to the <code>core.autocrlf</code> setting and you are back in the old system. This is how backwards compatibility is maintained, but I would recommend (especially for Windows developers) that you explicitly create a <code>.gitattributes</code> file.</p>
<p>Here is an example you might use for a C# project:</p>
<p>
<pre><code># These files are text and should be normalized (convert crlf =&gt; lf)
*.cs      text diff=csharp
*.xaml    text
*.csproj  text
*.sln     text
*.tt      text
*.ps1     text
*.cmd     text
*.msbuild text
*.md      text

# Images should be treated as binary
# (binary is a macro for -text -diff)
*.png     binary
*.jepg    binary

*.sdf     binary
</code></pre>
</p>
<p>One final note that the <a href="http://schacon.github.com/git/gitattributes.html">man page for gitattributes</a> mentions is that you can tell git to detect <em>all</em> text files and automatically normalize them (convert <code>CRLF</code> to <code>LF</code>):</p>
<p><code>*       text=auto</code></p>
<p>This is certainly better than requiring everyone to be on the same global setting for <code>core.autocrlf</code>, but it means that you really trust Git to do binary detection properly. In my opinion it is better to explicitly specify your text files that you want normalized. Don&#8217;t forget if you are going to use this setting that it should be the first line in your .gitattributes file so that subsequent lines can override that setting.</p>
</article>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timclem.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timclem.wordpress.com/381/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=381&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://timclem.wordpress.com/2012/03/01/mind-the-end-of-your-line/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/2f4861b27dc35663ed271d39f5358261?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">timclem</media:title>
		</media:content>
	</item>
		<item>
		<title>Hardware Hacking in Vim</title>
		<link>http://timclem.wordpress.com/2011/10/10/hardware-hacking-in-vim/</link>
		<comments>http://timclem.wordpress.com/2011/10/10/hardware-hacking-in-vim/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 18:12:44 +0000</pubDate>
		<dc:creator>Tim Clem</dc:creator>
				<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://timclem.wordpress.com/?p=363</guid>
		<description><![CDATA[We love our hardware hacking here at GitHub and with the recent upgrade in space at the new office we&#8217;ve been holding weekly hardware hacking workshops with the illustrious Matt Ganucheau. In those sessions the crew has been messing with sensors and actuators, bots and quad copter drones, mesh networks and octocat powered kinects&#8230; We are [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=363&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>We love our hardware hacking here at GitHub and with the recent upgrade in space at the new office we&#8217;ve been holding weekly hardware hacking workshops with the illustrious <a href="https://github.com/mganucheau" target="_blank">Matt Ganucheau</a>. In those sessions the crew has been messing with sensors and actuators, bots and quad copter drones, mesh networks and octocat powered kinects&#8230;</p>
<p style="text-align:center;"><a href="http://timclem.files.wordpress.com/2011/10/img_0153.jpg"><img class="aligncenter size-full wp-image-364" title="Hardware Hacking" src="http://timclem.files.wordpress.com/2011/10/img_0153.jpg?w=700" alt=""   /></a></p>
<p>We are huge fans of the <a href="http://www.arduino.cc/" target="_blank">Arduino</a> stack which is hosted on <a href="https://github.com/arduino/Arduino" target="_blank">GitHub</a>, and there are dozens of Arduino <a href="http://www.sparkfun.com/products/9950" target="_blank">boards</a> running around the office. The beauty of writing code for the Arduino is that you rarely end up writing a lot of it and once you&#8217;ve written a sketch, it runs on a whole variety of compatible boards. Compared to how microcontroller prototyping was done 5 years ago, this is a serious breath of fresh air. There are some of us, however, who would rather continue to write code in vi (<a href="https://github.com/b4winckler/macvim" target="_blank">MacVim</a> in my case), so I came up with a nice hack&#8230;</p>
<p>Enter <a href="https://github.com/tclem/vim-arduino" target="_blank">vim-arduino</a>.</p>
<p>This is my first attempt at getting Arduino IDE functionality into MacVim. Right now you can compile, deploy and open a serial port. The board for deployment always defaults to &#8216;uno&#8217;, but you can override that by putting the name of the board  on the first line of your sketch like so (any board found in boards.txt is valid):</p>
<pre>// board: atmega328</pre>
<p><span class="Apple-style-span" style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;font-size:13px;line-height:19px;white-space:normal;">Compiling code can be done like so: </span>&lt;Leader&gt;ac</p>
<p><span class="Apple-style-span" style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;font-size:13px;line-height:19px;white-space:normal;">Compiling and the deploying is done like so: </span>&lt;Leader&gt;ad</p>
<p><span class="Apple-style-span" style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;font-size:13px;line-height:19px;white-space:normal;">You can also open a serial port for debugging like this: </span>&lt;Leader&gt;as</p>
<p>The goal here is to be 100% compatible with existing Arduino sketches and to take advantage of the rest of the Arduino environment. Your hardware hacking peers should never know you are secretly rocking vi.</p>
<p>Checkout the <a href="https://github.com/tclem/vim-arduino" target="_blank">README</a> to get things setup and bug me on <a href="http://twitter.com/#!/timothyclem" target="_blank">Twitter</a> if you find any of this useful.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timclem.wordpress.com/363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timclem.wordpress.com/363/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=363&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://timclem.wordpress.com/2011/10/10/hardware-hacking-in-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/2f4861b27dc35663ed271d39f5358261?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">timclem</media:title>
		</media:content>

		<media:content url="http://timclem.files.wordpress.com/2011/10/img_0153.jpg" medium="image">
			<media:title type="html">Hardware Hacking</media:title>
		</media:content>
	</item>
		<item>
		<title>Code First, Ask Questions Later</title>
		<link>http://timclem.wordpress.com/2011/09/09/code-first-ask-questions-later/</link>
		<comments>http://timclem.wordpress.com/2011/09/09/code-first-ask-questions-later/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 19:20:03 +0000</pubDate>
		<dc:creator>Tim Clem</dc:creator>
				<category><![CDATA[Talks]]></category>

		<guid isPermaLink="false">http://timclem.wordpress.com/?p=346</guid>
		<description><![CDATA[I gave this talk at Rocky Mountain Ruby in Boulder CO on Sept 1, 2011. Abstract Ever wonder how software is designed and developed at GitHub? Are you curious about how new features are deployed to the site? (Hint: ask the robot.) Want to know why we don&#8217;t have any managers and don&#8217;t track vacation days? This [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=346&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I gave this talk at <a href="http://rockymtnruby.com" target="_blank">Rocky Mountain Ruby</a> in Boulder CO on Sept 1, 2011.</p>
<h2>Abstract</h2>
<p>Ever wonder how software is designed and developed at GitHub? Are you curious about how new features are deployed to the site? (Hint: ask the robot.) Want to know why we don&#8217;t have any managers and don&#8217;t track vacation days?</p>
<p>This talk will explore running your company like an open source project and give some insight into how GitHub continues to leverage ruby and other open source tools to keep up with massive data loads and a growing community of users.</p>
<h2>Slides</h2>
<p><a href="http://speakerdeck.com/u/tclem/p/code-first-ask-questions-later">http://speakerdeck.com/u/tclem/p/code-first-ask-questions-later</a></p>
<p><span class="Apple-style-span" style="font-size:20px;font-weight:bold;">Video</span></p>
<p><del>I know there was AV taken at the conference and I will post a link once it is available.</del></p>
<p><del></del><a href="http://confreaks.net/videos/723-rockymtnruby2011-code-first-ask-questions-later">http://confreaks.net/videos/723-rockymtnruby2011-code-first-ask-questions-later</a></p>
<p><span class="Apple-style-span" style="font-size:20px;font-weight:bold;">Credits</span></p>
<p>The font in my presentation is called <a href="http://www.theleagueofmoveabletype.com/fonts/1-junction" target="_blank">Junction</a> and can be found on the <a href="http://www.theleagueofmoveabletype.com/" target="_blank">League of Movable Type</a>. Many of the photographs are my own or from the GitHub <a href="http://instagr.am/" target="_blank">Instagram</a> stream. A couple of them are from <a href="http://www.flickr.com/" target="_blank">flickr</a> under the creative commons license: <a href="http://www.flickr.com/photos/bravo213/376781221/" target="_blank">easy button</a>, <a href="http://www.flickr.com/photos/japokskee/4401869800" target="_blank">just do it</a>, <a href="http://www.flickr.com/photos/flysi/183272970/" target="_blank">robot</a>. The grainy robot attacking image is actually from <a href="http://www.hulu.com/watch/2340/saturday-night-live-old-glory" target="_blank">SNL</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timclem.wordpress.com/346/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timclem.wordpress.com/346/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=346&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://timclem.wordpress.com/2011/09/09/code-first-ask-questions-later/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/2f4861b27dc35663ed271d39f5358261?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">timclem</media:title>
		</media:content>
	</item>
		<item>
		<title>Explaining GitHub Part 2</title>
		<link>http://timclem.wordpress.com/2011/04/19/explaining-github-part-2/</link>
		<comments>http://timclem.wordpress.com/2011/04/19/explaining-github-part-2/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 15:50:48 +0000</pubDate>
		<dc:creator>Tim Clem</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://timclem.wordpress.com/?p=308</guid>
		<description><![CDATA[If you just tuned in, I&#8217;m attempting to explain Git and GitHub to the layman. The previous post was all about Git. This one focuses on what GitHub actually does. Part 2: GitHub Okay, now we can move on to GitHub. Unlike writing a paper, software developers rarely write code all by themselves in a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=308&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>If you just tuned in, I&#8217;m attempting to explain Git and GitHub to the layman. The <a title="Explaining GitHub" href="http://timclem.wordpress.com/2011/04/15/explaining-github/">previous post</a> was all about Git. This one focuses on what GitHub actually does.</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-327" title="Secure source code hosting and collaborative development - GitHub" src="http://timclem.files.wordpress.com/2011/04/secure-source-code-hosting-and-collaborative-development-github.jpg?w=700&#038;h=237" alt="" width="700" height="237" /></p>
<p><strong>Part 2: GitHub</strong></p>
<p>Okay, now we can move on to GitHub. Unlike writing a paper, software developers rarely write code all by themselves in a closet. Well, some <a href="http://msdn.microsoft.com/en-us/" target="_blank">do</a>&#8230; but most of us collaborate on our software projects. GitHub provides a meeting place for software developers to collaborate around code and the different versions of that code. It stretches the analogy, but imagine that your paper with all the different snapshots you took along the way was available for other people not just to read, but to derive new papers from. You would always be credited as the original author, but everyone can create derivative works and if someone added a really nice abstract you could pull just that change back into your version of the paper. GitHub acts like a digital room where everyone hangs out to share their projects, ideas, and most importantly their code. The same way that Facebook provides a medium for people to hang out digitally and share status, photos, notes, etc &#8211;GitHub provides a medium for programmers to share code.</p>
<p>Code is a very abstract notion to people who don&#8217;t program for a living, and this is where I think the idea of writing a paper as an analogy for writing code is very helpful. Just as you could have written your paper in Spanish or French or English, code can be written in any number of languages. The primary purpose of code is to communicate something to a computer. You can think of it like writing an instruction manual. In 3rd grade, I remember, we did an activity where we had to explicitly write out the instructions for making a peanut butter and jelly sandwich. The teacher then took our written instructions and followed them to a tee. If you wrote &#8220;Take two pieces of bread&#8221;, she would literally tear off two very small pieces of bread to start making the sandwich. If you didn&#8217;t explain how to open the jelly jar, there would be no jelly on your sandwich. If you didn&#8217;t explicitly say that the jelly and peanut butter sides of the bread should be touching in the middle, you would get a sandwich with jelly and peanut butter on the outside. This is what it is like when you have to communicate with a computer. At the lowest level, computers are really dumb; they can only do what they are told, so your instructions (code) must tell the machine exactly what you want it to do.</p>
<p>As you can probably imagine, writing all this code can get very unwieldy. Not only because of the sheer amount of code that it takes to develop a complex system like the <a href="https://github.com/android" target="_blank">Android operating system</a>, but because that code is written by a large number of programmers (think lots of people editing the same paper all at once). This is where GitHub really shines. GitHub provides the ability for developers to publish and share code, solicit collaboration from other programmers, gain reputation in the community and discover/contribute to other code projects of interest. In many ways it is a realization of the original intent of the internet. To throw out yet another metaphor, GitHub creates a framework for the evolutionary improvement of software in real time. Like the evolution of species, software is allowed to mutate and change over time creating new variants, symbiotic relationships (sometimes even parasitic ones!), and a dazzling array of constructs and programs. GitHub is like primordial soup in which all these software projects are interacting, growing and changing. And instead of eons, this all happens at the speed of the <a href="http://xkcd.com/181/" target="_blank">interwebs</a>.</p>
<p>If you want to learn more about GitHub, you know where to <a href="http://github.com" target="_blank">go</a>.</p>
<p>If things are still fuzzy, then all you need to know is that we run a web site&#8230;. And we sell these cute little creatures that are a cross between a cat and an octopus&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timclem.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timclem.wordpress.com/308/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=308&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://timclem.wordpress.com/2011/04/19/explaining-github-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/2f4861b27dc35663ed271d39f5358261?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">timclem</media:title>
		</media:content>

		<media:content url="http://timclem.files.wordpress.com/2011/04/secure-source-code-hosting-and-collaborative-development-github.jpg" medium="image">
			<media:title type="html">Secure source code hosting and collaborative development - GitHub</media:title>
		</media:content>
	</item>
		<item>
		<title>Explaining GitHub</title>
		<link>http://timclem.wordpress.com/2011/04/15/explaining-github/</link>
		<comments>http://timclem.wordpress.com/2011/04/15/explaining-github/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 15:10:31 +0000</pubDate>
		<dc:creator>Tim Clem</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://timclem.wordpress.com/?p=306</guid>
		<description><![CDATA[GitHub is well beyond being just another startup, but I still find myself explaining over and over again what it is that GitHub actually does. My brother posted this link on Facebook the other day with a comment that he still has no idea what we do, but has so far surmised that it has &#8220;something to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=306&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>GitHub is well beyond being just another startup, but I still find myself explaining over and over again what it is that GitHub actually does. My brother posted this <a href="http://gigaom.com/2011/04/09/githubs-sold-out-codeconf-could-be-first-of-many/" target="_blank">link</a> on Facebook the other day with a comment that he still has no idea what we do, but has so far surmised that it has &#8220;something to do with a cat and an octopus&#8221;.</p>
<p>So here, presented in two parts, is the crash course for the layman:</p>
<p><img class="aligncenter" title="Octobiwan" src="http://octodex.github.com/images/octobiwan.jpg" alt="" width="500" height="456" /></p>
<p><span class="Apple-style-span" style="font-size:15px;font-weight:bold;">Part 1: Git</span></p>
<p>We have to start with Git. Git and GitHub are two different things. Git is a <a href="http://en.wikipedia.org/wiki/Revision_control" target="_blank">version control</a> system. You don&#8217;t need to know anything about it other than it is amazing.</p>
<p>Okay, maybe I&#8217;ll tell you a little more than that. If you have ever typed a paper into a computer (or written one by hand) you have probably used a low fidelity form of version control. Say you are working on a big paper and at certain points you want to save off a version or draft. You might do this for many reasons. Maybe it is an important paper and you want to put a copy somewhere else safe. Maybe you add a `01` to the filename and later a `02` and so on (or you might use today&#8217;s date `ImportantPaper_4_13_2011.txt`). Maybe you need to turn in a draft or pass a draft off for editing. These activities are all analogous to creating a snapshot of what your paper looks like at a certain point in time and saving it off. Another good example of why having snapshots is important is if you are going to completely re-write your conclusion. Having a saved version of your old conclusion lets you go back to it at any time to see what you wrote or even to revert back because your new conclusion turned out to be a bad idea.</p>
<p>Software developers are usually focused on code instead of papers, but they have the same problems. You need to be able to quickly and easily take snapshots of the current state of your code base (along with some comments about that revision) and have the ability to come back to that point in history at any time. You might also want to compare the current state of your code with any previous state. Programmers call the solution to this problem version control. Just as you could write your paper in any number of document editing systems (Word, Pages, text files, Quark, LaTeX, etc) there are many different version control systems. Git is one of those systems. Developers write programs in a variety of computer languages and these programs are sort of like big papers, but vastly more complex. Having the ability to take snapshots frequently and travel back in history to see how a code file changed over time is an essential activity.</p>
<p>If you are really interested in learning more about Git you can download and learn about it <a href="http://git-scm.com/" target="_blank">here</a>. I would also highly recommend my friend Scott Chacon&#8217;s book <a href="http://progit.org/book/" target="_blank">Pro Git</a>.</p>
<p>If you have stuck around just for the Octocats, then I suggest you head over to the <a href="http://octodex.github.com/" target="_blank">octodex</a> until part 2 comes out.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timclem.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timclem.wordpress.com/306/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=306&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://timclem.wordpress.com/2011/04/15/explaining-github/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/2f4861b27dc35663ed271d39f5358261?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">timclem</media:title>
		</media:content>

		<media:content url="http://octodex.github.com/images/octobiwan.jpg" medium="image">
			<media:title type="html">Octobiwan</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello SF</title>
		<link>http://timclem.wordpress.com/2011/03/09/hello-sf/</link>
		<comments>http://timclem.wordpress.com/2011/03/09/hello-sf/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 17:03:41 +0000</pubDate>
		<dc:creator>Tim Clem</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://timclem.wordpress.com/?p=284</guid>
		<description><![CDATA[Well, it is official. I&#8217;m not sure the dust has really settled, and there are a few lurking boxes in the house and plenty more filling the garage -but we have made the move to San Francisco! The downsizing has been therapeutic (2500 sq. ft. to 1000 sq. ft.) and the adjustment to living in a big [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=284&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Well, it is official. I&#8217;m not sure the dust has really settled, and there are a few lurking boxes in the house and plenty more filling the garage -but we have made the move to San Francisco! The downsizing has been therapeutic (2500 sq. ft. to 1000 sq. ft.) and the adjustment to living in a big city as so far been very positive. Even the cat seems to have settled in and is friendlier and calmer than we remember her being in Colorado.</p>
<p>I took a new position as a developer at <a href="http://github.com" target="_blank">GitHub</a> working out of their main San Francisco office and couldn&#8217;t be more excited about it. The culture is ideal, my co-workers are some of the smartest people I have worked with yet, I&#8217;m learning a ton, and I have big plans for all the amazing things this company is going to do in the next few years. Ramping up in a new job is always exciting, with all the new things to learn and people to meet. Finding your way around a new city just adds to the excitement: where to live, where to eat, where to buy crap you need. I cannot speak more highly of the SF GitHub peeps who have gone out of their way to make my family and I feel welcome. From driving us around all weekend to find an apartment, to offering rides, to supplying blankets &amp; pillows &amp; air mattresses for sleeping in newly rented apartments, to dinner invites and insights about living in SF &#8211;we have been enthusiastically ushered into the community.</p>
<p>As far as what I&#8217;m working on at GitHub, here is just a taste (more to come later, I promise)&#8230;</p>
<p>Tom and I are working hard to extend the reach of our campfire robot (hubot) into the physical world. It still needs some <a href="http://instagr.am/p/B2TzO/" target="_blank">better packaging</a>, but version 1 of &#8220;Door Me&#8221; is up and running; allowing GitHub scros to never leave their seats to answer the door buzzer again.</p>
<p>I&#8217;m also jamming on <a href="http://libgit2.github.com/" target="_blank">libgit2</a> &#8211;building out <a href="https://github.com/libgit2/objective-git" target="_blank">objective-c bindings</a>, contributing to <a href="https://github.com/libgit2/rugged" target="_blank">rugged</a> and some of the other language bindings. If you aren&#8217;t familiar with the project, you should check it out. It is probably one of the best examples of TDD on a C project that I&#8217;ve seen recently.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timclem.wordpress.com/284/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timclem.wordpress.com/284/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=284&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://timclem.wordpress.com/2011/03/09/hello-sf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/2f4861b27dc35663ed271d39f5358261?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">timclem</media:title>
		</media:content>
	</item>
		<item>
		<title>$35 for Reflector</title>
		<link>http://timclem.wordpress.com/2011/02/02/35-for-reflector/</link>
		<comments>http://timclem.wordpress.com/2011/02/02/35-for-reflector/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 21:43:45 +0000</pubDate>
		<dc:creator>Tim Clem</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://timclem.wordpress.com/?p=275</guid>
		<description><![CDATA[In lieu of my past complaining about Reflector&#8217;s new owners you might expect some outrage about the announcement today that redgate will be charging $35 for this product starting in March. Your current free version will stop working shortly thereafter forcing you to buy the upgrade or find another tool. I can&#8217;t say, however, that I&#8217;m all that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=275&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In lieu of my past complaining about Reflector&#8217;s new owners you might expect some outrage about the <a href="http://www.red-gate.com/products/dotnet-development/reflector/announcement" target="_blank">announcement</a> today that redgate will be charging $35 for this product starting in March. Your current free version will stop working shortly thereafter forcing you to buy the upgrade or find another tool. I can&#8217;t say, however, that I&#8217;m all that surprised. The .net ecosystem is a place where tools cost money. Visual Studio costs money. SQL Server costs money. Sure there are ways to write C# code in notepad++ and run the compiler on the command line, but I don&#8217;t know too many developers who operate like that. And $35 is small fries compared to what I pay for a control set like DevExpress. I say vote with your wallet. If you find value in the tool at that price &#8211; great! Otherwise, find an alternative or build your own. As for me, I&#8217;m holding out for <a href="http://blogs.jetbrains.com/dotnet/2011/02/reflections-on-recent-news/" target="_blank">this</a> - especially since I&#8217;m already a customer and love what they put out.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timclem.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timclem.wordpress.com/275/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=275&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://timclem.wordpress.com/2011/02/02/35-for-reflector/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/2f4861b27dc35663ed271d39f5358261?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">timclem</media:title>
		</media:content>
	</item>
		<item>
		<title>Why programmers love to climb</title>
		<link>http://timclem.wordpress.com/2011/01/10/why-programmers-love-to-climb/</link>
		<comments>http://timclem.wordpress.com/2011/01/10/why-programmers-love-to-climb/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 17:09:07 +0000</pubDate>
		<dc:creator>Tim Clem</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://timclem.wordpress.com/?p=266</guid>
		<description><![CDATA[Why do programmers love to climb? Actually, I don&#8217;t think it is specifically constrained to programmers, but anyone in a math, science or engineering role. This is by no means a scientific survey but more just my personal observation of how a love for solving problems in the abstract relates to the skills and mentality [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=266&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Why do programmers love to climb? Actually, I don&#8217;t think it is specifically constrained to programmers, but anyone in a math, science or engineering role. This is by no means a scientific survey but more just my personal observation of how a love for solving problems in the abstract relates to the skills and mentality required to love climbing rocks.</p>
<p>Rock climbing (and especially <a href="http://en.wikipedia.org/wiki/Bouldering">bouldering</a> which is what I do the most of) involves solving problems and this, I think, is at the root of the correlation. You might think that at the end of a day of writing code, the last thing you&#8217;d want to be faced with is another set of problems to solve. But there is something very refreshing about the mental and physical challenges associated with climbing that compliment a day job lived in the abstract. The rock is real, the goal is fixed. You need a combination of mental awareness, physical strength, dexterity, technique and lots of plain old perseverance to get up a rock face. There is also a individual/collaborate dichotomy to climbing similar to the world of math, science, and programming. At the end of the day, it is you the individual that must solve the problem and climb the route. No one is there to help you and it comes down to how well you execute the sequence of movements required to accomplish the climb. However, in the background there is a constant community of collaboration going on. <a href="http://en.wikipedia.org/wiki/Beta_(climbing)">Beta</a> is exchanged. Technique is discussed. Methods of training or recovery debated. Different movements are tried over and over again with subtle variation and the results are communicated to the group.</p>
<blockquote><p>If you get your thumb fully engaged and pinch while you are crimping off the top of that left hand you can gain enough pull to make that high move. But you have to keep that right toe on or it is all over.</p></blockquote>
<p>Beta often doesn&#8217;t work for everyone though. Height, <a href="http://en.wikipedia.org/wiki/Ape_index">ape index</a> and a variety of other physical factors determine how you go about climbing a particular problem and in many cases a friend&#8217;s method will be of no help to you. One of my peers is tall enough that I almost always have to come up with a different set of beta for climbing the same problems because I just can&#8217;t reach the holds and keep my feet where he does. Another friend is so much stronger than I that he doesn&#8217;t worry about his feet too much and is very adept at jumping for holds and then catching and stabilizing his swing. I&#8217;m a much more cerebral and technique based climber. I&#8217;m not overly strong, so I rely on body position, using my feet, maximum efficiency of movement and subtle leverage points to get up the rock. One of things I&#8217;m trying to learn now as I have progressed to harder climbs is actually how to move very dynamically on the rock by jumping and <a href="http://vimeo.com/13752590">pogo</a>-ing to catch holds while using my core to contain swing and stay put after I come back in contact with the rock again.</p>
<p>As a developer moving from the abstract world of 1&#8242;s and 0&#8242;s to the physical world of rock, sweat and sometimes blood it seems there is endless entertainment in the realm of conquering boulders and cliffs. The same way I sometimes wake up in the morning with the solution to a programming challenge appearing in my head, I will often dream about a particular bouldering problem I&#8217;m working on. Or I&#8217;ll be driving to work, visualizing the movements in my head of a particularly hard climb, my hands sweating on the steering wheel. When I come back to that problem the next day things click that weren&#8217;t working the day before and I&#8217;ll find myself  sending what previously felt impossible.</p>
<p>I&#8217;ve taken a few of my fellow developers climbing and have been fascinated by the reaction to the sport. For someone who has never climbing before (and especially if they are particularly strong or adept at another sport) climbing for the first time can be a very frustrating activity. Traditional strength does you nothing in climbing until you learn how to use it. And often it is forearm and contact strength that matters way more than your ability to bench press. You legs also matter much more than your arms do and some of the most common climbing advise heard is to climb with your legs, not your arms. One of these developers in particular impressed me. Not necessarily with his climbing ability, but with his persistence in solving the problems. I think he spent the entire night on a single bouldering problem. He worked every move. He listened intently to any guidance that I offered and then was back at it with renewed vigor. And by the end of the night he made it all the way up! What is really interesting is that over the years of working with this guy, I&#8217;ve noticed that this is the same way he tackles programming problems: with quiet persistence and a never die attitude. I learned it is equally important to check in on him and make sure he has what he needs to be productive or give some piece of guidance, but at the end of the day he delivers.</p>
<p>I think software engineering is much like this situation where you are constantly being thrown at problems that you don&#8217;t know enough about. You are continually learning new things and being asked to communicate where you are in solving the problem and when it will be done. You need a combination of a love for what you are doing, maybe some base talent, the ability to learn new skills on the fly, and a whole lot of persistence. Your attitude as you approach the inevitable road blocks and set backs matters more than anything else. That is why programmers love climbing. Because they thrive off those situations of solving hard problems, dealing with set backs and ultimately accomplishing great things. It isn&#8217;t burdensome to us, it is drives us forward and onto the next challenge. We thrive off it.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timclem.wordpress.com/266/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timclem.wordpress.com/266/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=266&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://timclem.wordpress.com/2011/01/10/why-programmers-love-to-climb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/2f4861b27dc35663ed271d39f5358261?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">timclem</media:title>
		</media:content>
	</item>
		<item>
		<title>mobile 311</title>
		<link>http://timclem.wordpress.com/2010/12/14/mobile-311/</link>
		<comments>http://timclem.wordpress.com/2010/12/14/mobile-311/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 22:27:51 +0000</pubDate>
		<dc:creator>Tim Clem</dc:creator>
				<category><![CDATA[Mobility]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://timclem.wordpress.com/?p=258</guid>
		<description><![CDATA[I just finished releasing updates to the mobile 311 application into the iPhone App Store and Windows Phone Marketplace and felt inclined to write a bit about my experiences. To give some brief background: Advanced Mobile 311 is a new product for Blue Dot that is providing the ability for citizens to easily report issues [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=258&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I just finished releasing updates to the mobile 311 application into the iPhone App Store and Windows Phone Marketplace and felt inclined to write a bit about my experiences.</p>
<p>To give some brief background: Advanced Mobile 311 is a new product for Blue Dot that is providing the ability for citizens to easily report issues in their communities. 311 is a phone number set aside in the US for reporting non-emergency problems and our applications take this concept into the hands of smart phone users allowing them to mark the location of problems on a map (possibly using GPS), take a picture and submit a specific service request to their city or municipality. We certainly aren&#8217;t the only one doing this and some US cities like <a href="http://www.sf311.org/" target="_blank">San Fransisco</a> and <a title="NYC 311 iPhone App" href="http://itunes.apple.com/us/app/nyc-311/id324897619?mt=8" target="_blank">New York</a> have already implemented and been running crowd sourcing 311 solutions for a while now. <a href="http://www.citysourced.com/default.aspx" target="_blank">City Sourced</a> is working hard at this same problem with limited partnerships around the US. Much more can be said around the business models and players in the Gov 2.0 movement, but for now I&#8217;m more interested in the process of writing and delivering consumer applications which is something very new for me.</p>
<p>While it will take a week or so for the application updates I just submitted to make it through the review process in their respective store, you can check out the existing apps both in the iPhone <a href="http://itunes.apple.com/us/app/mobile-311/id377887590?mt=8" target="_blank">App Store</a> and the Windows <a href="http://social.zune.net/redirect?type=phoneApp&amp;id=fc4fb7b8-edda-df11-a844-00237de2db9e" target="_blank">Marketplace</a> (requires Zune unfortunately). Both are free of charge so feel free to try them out! By in large it has been a positive experience developing both applications.</p>
<p>Prior to this, I had no real experience developing applications on a mac, using Xcode or writing Objective-c. Once I got over the C# to Objective-c transition and understood the basic paradigms of the development framework I was quite productive in creating the iPhone version of the application. I have been a mac user for a long time (really since I was a kid) so the OS is familiar to me and I intuitively understand the UX. The API and maturity of the iOS SDK is really very impressive and the 311 application fit very well into what the platform was designed to do. I actually created the iPhone app first (as Windows Phone 7 was just a rumor at this time) so it was a good exercise to have to think in another language. I think the one thing that I struggled with the most was memory management specifically around the didReceiveMemoryWarning and viewDidUnload paradigm. Debugging programs and understanding errors in Xcode is kinda like taking a step back in time when you are used to Visual Studio and .net development. The maturity of the iOS platform also means that you have to deal with supporting multiple devices and multiple versions of the operating system along with new devices like the iPad which have a different form factor and require a different set of graphics. All that said, it was quite pleasurable developing on my mac and the speed of the iPhone simulator is a breath of fresh air after using the WM emulator. The tools felt lightweight, high performing and easy to work with. I even dove in and did some of the graphic design for the internal menu icons and status bubbles.</p>
<p>Submitting to the App Store was really no big deal. Instructions to properly build and sign your application were straightforward. The only thing that bites me each time is that I chose to have a space in my application&#8217;s name &#8220;Mobile 311&#8243; and this seems to be a continued source of  problems when uploading to the Store (there are workarounds &#8211; comment if you are interested).</p>
<p>On the Windows Phone side of things we were lucky enough to be on the white list for applications that came out with the release of the physical phone. The Microsoft stack is really where Blue Dot feels at home and the development experience on the Windows Phone was very impressive (especially since I was basically working on a pre-release tool set and a version 1.0 product with limited access to real devices and all the other interesting things that come with being an early adopter). I must say that Microsoft was very supportive in this process, even providing consulting resources when necessary (although most of my issues were resolved by waiting for the next release of the tools). Development for Windows Phone applications is done in Visual Studio 2010 and in C# &amp; Silverlight. I had never done any WPF or Silverlight development before, but the ramp up was pretty easy and I must say that it is a huge improvement over WinForms development. Visual Studio is a truly first class development environment and VS 2010 only raises the bar. The new wp7 emulator is fantastic (MS obviously took a page from Apple&#8217;s book here) &#8211; it loads very quickly and makes it easy to develop and debug your application. I struggled a little bit with things like the camera functionality (which does not work on the emulator) and understanding how the Task system works. It is really nice not to have to worry about memory management and the debugging tools are far superior to those in Xcode. Overall, it was very fun to re-create this application in another tool set/environment. I tried to make the app feel like a windows phone app and not an iPhone port and was pretty happy with how things turned out.</p>
<p>Submitting to the Marketplace was a very similar process to App Store submittal. The only thing that annoys me here is that the Marketplace holds all sorts of other stuff (not just phone apps) and you can only view things in the store you have Zune installed.</p>
<p>We are considering creating apps for the other leading smartphone operating systems, but until that happens I also created a <a href="http://mobile311.cloudapp.net/m" target="_blank">mobile optimized web site</a> that is reachable by any browser for submitting service request. Obviously there is no way to use things like GPS, but you can still submit requests to the system.</p>
<p>Finally, all of the server components are now up and running in <a href="http://www.microsoft.com/windowsazure/" target="_blank">Windows Azure</a>, which is Microsoft&#8217;s cloud OS. Our server is architect-ed in a way that it can run both in a traditional hosted model and on Azure. The difference between our 311 system and some of the other offerings right now is that we are pre-integrated into some of the major ERP systems that cities already use to mange service requests. And by having our infrastructure in Azure we can offer a data stream to anyone without them having to purchase and provision servers or worry about physically infrastructure.</p>
<p>Go check out the apps! <a href="http://itunes.apple.com/us/app/mobile-311/id377887590?mt=8" target="_blank">iPhone</a>, <a href="http://social.zune.net/redirect?type=phoneApp&amp;id=fc4fb7b8-edda-df11-a844-00237de2db9e" target="_blank">Windows Phone</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/timclem.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/timclem.wordpress.com/258/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=timclem.wordpress.com&#038;blog=8340878&#038;post=258&#038;subd=timclem&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://timclem.wordpress.com/2010/12/14/mobile-311/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/2f4861b27dc35663ed271d39f5358261?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">timclem</media:title>
		</media:content>
	</item>
	</channel>
</rss>
