<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>MikeBobiney.com</title>
	
	<link>http://www.mikebobiney.com</link>
	<description>Tales from a Mac-toting software craftsman.</description>
	<lastBuildDate>Thu, 03 Jan 2013 03:25:16 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
<cloud domain="www.mikebobiney.com" port="80" path="/?rsscloud=notify" registerProcedure="" protocol="http-post" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mikebobiney" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="mikebobiney" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Getting started with UI Automation in Xcode 4</title>
		<link>http://www.mikebobiney.com/2012/06/12/getting-started-with-ui-automation-in-xcode-4/</link>
		<comments>http://www.mikebobiney.com/2012/06/12/getting-started-with-ui-automation-in-xcode-4/#comments</comments>
		<pubDate>Tue, 12 Jun 2012 14:09:38 +0000</pubDate>
		<dc:creator>Mike Bobiney</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[Instruments]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.mikebobiney.com/?p=802</guid>
		<description><![CDATA[Did you know that with a little patience and some knowledge of JavaScript you can write automated UI tests against your iOS applications? What&#8217;s even better is with Xcode 4.2 installed its as easy as clicking a record button and having Instruments generate the test scripts for you. For this tutorial I&#8217;m going to download [...]]]></description>
				<content:encoded><![CDATA[<p>Did you know that with a little patience and some knowledge of JavaScript you can write automated UI tests against your iOS applications? What&#8217;s even better is with Xcode 4.2 installed its as easy as clicking a record button and having Instruments generate the test scripts for you.</p>
<p>For this tutorial I&#8217;m going to download the <a href="http://developer.apple.com/library/ios/#samplecode/iPhoneCoreDataRecipes/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008913-Intro-DontLinkElementID_2">Core Data Recipes</a> application from Apple&#8217;s developer website. Once you&#8217;ve opened the app in Xcode go ahead and click on </br><strong>Product -&gt; Profile</strong> in the menu bar (<strong>command + I</strong> works just as well) to launch the Instruments tool that we&#8217;ll be using to run our tests with.</p>
<p><a href="http://www.mikebobiney.com/wp-content/uploads/2012/06/instruments-selection.jpg"><img src="http://www.mikebobiney.com/wp-content/uploads/2012/06/instruments-selection.jpg" alt="" title="instruments-selection" width="527" height="437" class="alignnone size-full wp-image-819" /></a></p>
<p>You should see your application launched in the simulator along with a running instruments profiler.  Form here you&#8217;re going to want to check that the Automation instrument has been created and then click on the <strong>Add</strong> button just below it to create a new Automator script.</p>
<p><a href="http://www.mikebobiney.com/wp-content/uploads/2012/06/instruments-add-script.jpg"><img src="http://www.mikebobiney.com/wp-content/uploads/2012/06/instruments-add-script.jpg" alt="" title="instruments-add-script" width="527" height="358" class="alignnone size-full wp-image-818" /></a></p>
<p>After clicking on <strong>Add -&gt; Create</strong> you will notice a record button looming towards the bottom that when clicked allows you to begin interacting with your application and generating the JavaScript necessary to automate the test.</p>
<p>Here&#8217;s a trivial example that I recorded using the sample application to demonstrate.</p>
<pre class="brush: jscript; title: ; notranslate">
var target = UIATarget.localTarget();

target.frontMostApp().mainWindow().tableViews()[&quot;Empty list&quot;].cells()[&quot;Chocolate cake with chocolate frosting, 1 hour, Chocolate Cake&quot;].tap();
target.frontMostApp().navigationBar().rightButton().tap();
target.frontMostApp().mainWindow().tableViews()[&quot;Empty list&quot;].cells()[&quot;Dessert&quot;].tap();
target.frontMostApp().mainWindow().tableViews()[&quot;Empty list&quot;].cells()[&quot;Snack&quot;].tap();
target.frontMostApp().navigationBar().leftButton().tap();
target.frontMostApp().mainWindow().tableViews()[&quot;Empty list&quot;].cells()[&quot;Snack&quot;].tap();
target.frontMostApp().mainWindow().tableViews()[&quot;Empty list&quot;].cells()[&quot;Dessert&quot;].tap();
target.frontMostApp().navigationBar().leftButton().tap();
target.frontMostApp().navigationBar().rightButton().tap();
target.frontMostApp().navigationBar().leftButton().tap();
</pre>
<p>Having Xcode generate the script for you can test your patience with how it tries to target certain elements incorrectly but often times it will at the very least get you a good base to work from if you&#8217;re just getting the hang of how to ineract with your app.</p>
<p>It&#8217;s worth mentioning that this script will run just fine if you are dealing with UI elements that stay the same across test runs or otherwise remain static.  If this isn&#8217;t the case then you may run into cases where elements have different attributes or no longer exist if you were to delete a row in a UITableView for example. This is where some knowledge of JavaScript (and the <a href="https://developer.apple.com/library/ios/#documentation/DeveloperTools/Reference/UIAutomationRef/_index.html">UI Automation Reference</a>) comes in handy to check the existence and state of elements.  This is beyond the scope of this article but one possible approach to this problem would be to restore your data prior to each test run.</p>
<p>You&#8217;ll notice that the third line has the cell contents hard coded into the script which is just another way of gaining access to it.</p>
<pre class="brush: jscript; title: ; notranslate">
target.frontMostApp().mainWindow().tableViews()[&quot;Empty list&quot;]
    .cells()[&quot;Chocolate cake with chocolate frosting, Chocolate Cake&quot;].tap();
</pre>
<p>Thankfully we have a couple of much better options to achieve the same result.  The first way is by using the element placement index inside of the cells array.</p>
<pre class="brush: jscript; title: ; notranslate">
target.frontMostApp().mainWindow().tableViews()[&quot;Empty list&quot;]
    .cells()[0].tap();
</pre>
<p>You can alternatively set the accessability label through Interface Builder.</p>
<p><a href="http://www.mikebobiney.com/wp-content/uploads/2012/06/accessability-field.jpg"><img src="http://www.mikebobiney.com/wp-content/uploads/2012/06/accessability-field.jpg" alt="" title="accessability-field" width="527" height="371" class="alignnone size-full wp-image-817" /></a></p>
<p>The <strong>accessibilityLabel</strong> property can also be set at runtime if you so choose, this is most useful for dynamic layouts.</p>
<pre class="brush: jscript; title: ; notranslate">
cell.isAccessibilityElement = YES;
cell.accessibilityLabel = @&quot;Cake&quot;;
</pre>
<p>Given the nature of the Core Data Recipes sample application our best approach would be to use the cell index or full cell label text for demonstration purposes. Ideally the accessibility text would be part of your data source in some fashion so in code we could iterate over the data while creating the table view cells.</p>
<p>Taking another look at the script you can see a lot of repetitive ways of accessing elements, we can pull out some common pieces and have cached versions to work with instead.  Not only does this make your script more readable but it will also help speed up the running times.</p>
<pre class="brush: jscript; title: ; notranslate">
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
var navBar = window.navigationBar();
</pre>
<p>We&#8217;ll also go ahead and change the hardcoded string key to access the cell to an ordinal index value here as well by updating <strong><code>tableViews()["Empty list"]</code></strong> to be </br><strong><code>tableViews()[0]</code></strong></p>
<p>Now what&#8217;s left is a script that is much more maintainable going forward.</p>
<pre class="brush: jscript; title: ; notranslate">
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
var navBar = window.navigationBar();

// Select Recipe
window.tableViews()[0].cells()[0].tap();

// Change Ingredient
navBar.rightButton().tap();
window.tableViews()[0].cells()[&quot;Dessert&quot;].tap();
window.tableViews()[0].cells()[&quot;Snack&quot;].tap();
navBar.leftButton().tap();

// Change Ingredient Again
window.tableViews()[0].cells()[&quot;Snack&quot;].tap();
window.tableViews()[0].cells()[&quot;Dessert&quot;].tap();
navBar.leftButton().tap();

// Done Editing
navBar.rightButton().tap();

// Back To Recipe List
navBar.leftButton().tap();
</pre>
<h2>Where to go from here?</h2>
<p>One aspect of the documentation that is worth exploring is the <a href="https://developer.apple.com/library/ios/#documentation/ToolsLanguages/Reference/UIALoggerClassReference/UIALogger/UIALogger.html#//apple_ref/doc/uid/TP40009906">UIALogger</a> class.  UIALogger gives you the ability to define a beginning and end of your test cases and not only provide a means of structuring tests but you can record pass or fail messages to give more context to the results.  These messages will get output in the Trace Log portion of the Instruments tool.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/mikebobiney?a=W41d_4mwF14:TaonMC1tMuI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=W41d_4mwF14:TaonMC1tMuI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=W41d_4mwF14:TaonMC1tMuI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=W41d_4mwF14:TaonMC1tMuI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=W41d_4mwF14:TaonMC1tMuI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=W41d_4mwF14:TaonMC1tMuI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=W41d_4mwF14:TaonMC1tMuI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=W41d_4mwF14:TaonMC1tMuI:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=W41d_4mwF14:TaonMC1tMuI:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=W41d_4mwF14:TaonMC1tMuI:qZ7jBH1wJJ8"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=qZ7jBH1wJJ8" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=W41d_4mwF14:TaonMC1tMuI:DN0H40_Ym5U"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=DN0H40_Ym5U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=W41d_4mwF14:TaonMC1tMuI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=W41d_4mwF14:TaonMC1tMuI:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.mikebobiney.com/2012/06/12/getting-started-with-ui-automation-in-xcode-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blocks save the day</title>
		<link>http://www.mikebobiney.com/2012/05/29/blocks-save-the-day/</link>
		<comments>http://www.mikebobiney.com/2012/05/29/blocks-save-the-day/#comments</comments>
		<pubDate>Wed, 30 May 2012 01:26:40 +0000</pubDate>
		<dc:creator>Mike Bobiney</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[blocks]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.mikebobiney.com/?p=781</guid>
		<description><![CDATA[I&#8217;m consistently amazed how useful blocks are in Objective-C. So much so that I&#8217;ll be attempting to document useful ways that blocks can make your life easier as an iOS developer. Here&#8217;s the first of (hopefully) many posts of its kind. Take this code It seems like this could be better by having the animation [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m consistently amazed how useful blocks are in Objective-C.  So much so that I&#8217;ll be attempting to document useful ways that blocks can make your life easier as an iOS developer. Here&#8217;s the first of (hopefully) many posts of its kind.</p>
<p>Take this code</p>
<pre class="brush: objc; title: ; notranslate">
- (void)viewDidAppear:(BOOL)animated {
{
    UIView *viewToAnimate = ...
    [self performSelector:@selector(animateIt:) withObject:viewToAnimate afterDelay:1.0f];
}

-(void)animateIt:(id)sender 
{
    // animate viewToAnimate
}
</pre>
<p>It seems like this could be better by having the animation code where you have your selector delay setup.  Well guess what? Blocks to the rescue!</p>
<pre class="brush: objc; title: ; notranslate">
@implementation NSObject (PerformBlockAfterDelay)

- (void)performBlock:(void (^)(void))block 
          afterDelay:(NSTimeInterval)delay 
{
    block = [[block copy] autorelease];
    [self performSelector:@selector(fireBlockAfterDelay:) 
               withObject:block 
               afterDelay:delay];
}

- (void)fireBlockAfterDelay:(void (^)(void))block 
{
    block();
}

@end
</pre>
<p>This snippet is using category that you can #import into your class. Using this in practice you get this.</p>
<pre class="brush: objc; title: ; notranslate">
- (void)viewDidAppear:(BOOL)animated {
{
    UIView *viewToAnimate = ...
    [self performBlock:^void() {
        // animate viewToAnimate
    } afterDelay:1.0f];
}
</pre>
<p>Credit goes out to <a href="http://stackoverflow.com/a/4007066/1382210">this StackOverflow thread</a> for the tip.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AP4h-4u_OEo:DlLBVlqB5G0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AP4h-4u_OEo:DlLBVlqB5G0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=AP4h-4u_OEo:DlLBVlqB5G0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AP4h-4u_OEo:DlLBVlqB5G0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=AP4h-4u_OEo:DlLBVlqB5G0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AP4h-4u_OEo:DlLBVlqB5G0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=AP4h-4u_OEo:DlLBVlqB5G0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AP4h-4u_OEo:DlLBVlqB5G0:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AP4h-4u_OEo:DlLBVlqB5G0:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AP4h-4u_OEo:DlLBVlqB5G0:qZ7jBH1wJJ8"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=qZ7jBH1wJJ8" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AP4h-4u_OEo:DlLBVlqB5G0:DN0H40_Ym5U"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=DN0H40_Ym5U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AP4h-4u_OEo:DlLBVlqB5G0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=AP4h-4u_OEo:DlLBVlqB5G0:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.mikebobiney.com/2012/05/29/blocks-save-the-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slides from 1DevDay Detroit</title>
		<link>http://www.mikebobiney.com/2011/11/10/slides-from-1devday-detroit/</link>
		<comments>http://www.mikebobiney.com/2011/11/10/slides-from-1devday-detroit/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 13:34:29 +0000</pubDate>
		<dc:creator>Mike Bobiney</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[detroit]]></category>
		<category><![CDATA[slides]]></category>

		<guid isPermaLink="false">http://www.mikebobiney.com/?p=742</guid>
		<description><![CDATA[Here are my 1DevDay Detroit slides from over the weekend. It was pretty cool to be a part of a developer event downtown with so much great content.]]></description>
				<content:encoded><![CDATA[<p>Here are my <a href="http://1devdaydetroit.com/">1DevDay Detroit</a> slides from over the weekend.  It was pretty cool to be a part of a developer event downtown with so much great content.</p>
<p><script src="http://speakerdeck.com/embed/4ebbc1cab916fd0054009c64.js"></script></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/mikebobiney?a=_HvFktkAQ-Y:OB0tjHcWkEg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=_HvFktkAQ-Y:OB0tjHcWkEg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=_HvFktkAQ-Y:OB0tjHcWkEg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=_HvFktkAQ-Y:OB0tjHcWkEg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=_HvFktkAQ-Y:OB0tjHcWkEg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=_HvFktkAQ-Y:OB0tjHcWkEg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=_HvFktkAQ-Y:OB0tjHcWkEg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=_HvFktkAQ-Y:OB0tjHcWkEg:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=_HvFktkAQ-Y:OB0tjHcWkEg:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=_HvFktkAQ-Y:OB0tjHcWkEg:qZ7jBH1wJJ8"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=qZ7jBH1wJJ8" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=_HvFktkAQ-Y:OB0tjHcWkEg:DN0H40_Ym5U"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=DN0H40_Ym5U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=_HvFktkAQ-Y:OB0tjHcWkEg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=_HvFktkAQ-Y:OB0tjHcWkEg:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.mikebobiney.com/2011/11/10/slides-from-1devday-detroit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Notes on Rework</title>
		<link>http://www.mikebobiney.com/2011/09/14/notes-on-rework/</link>
		<comments>http://www.mikebobiney.com/2011/09/14/notes-on-rework/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 01:20:10 +0000</pubDate>
		<dc:creator>Mike Bobiney</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Advice]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://www.mikebobiney.com/?p=715</guid>
		<description><![CDATA[Rework has been on my &#8220;things to read&#8221; list since it was published over a year and a half ago. I was surprised when I came across a copy at my local library and couldn&#8217;t pass it up. Rework is a book that is entirely made up of material from the signal vs noise blog [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.mikebobiney.com/wp-content/uploads/2011/09/rework.jpeg"><img src="http://www.mikebobiney.com/wp-content/uploads/2011/09/rework.jpeg" alt="" title="rework" width="146" height="220" class="alignright size-full wp-image-723" /></a></p>
<p><a href="http://37signals.com/rework/">Rework</a> has been on my &#8220;things to read&#8221; list since it was published over a year and a half ago.  I was surprised when I came across a copy at my local library and couldn&#8217;t pass it up.  Rework is a book that is entirely made up of material from the <a href="http://37signals.com/svn/">signal vs noise</a> blog from the founders of <a href="http://37signals.com/">37 signals</a>.  It contains quite a bit of unconventional advice about business related topics.  It was quite the fast read coming in at 288 pages with chapters only being a few pages long.  They actually point out that the original draft was double the size but they chose to weed out the parts that distracted from the flow of each of the chapters.  Or in their own words.. <strong>build half a product, not a half-assed product</strong>.</p>
<p>What follows are some of the more memorable take aways from this book..</p>
<hr/>
<p>By learning from other people&#8217;s mistakes you&#8217;ll be discouraged from trying to figure out a better, more successful solution to the problem at hand.</p>
<p><strong>Draw a line in the sand</strong>.  When it comes to developing software you will inevitably get requests from your audience for new features and things that you should be doing differently.  Keep in mind that these are simply suggestions and even though they may be valid suggestions that sometimes its not essential to be so accommodating and determine what the primary purpose of your application is.  </p>
<p>Just because your competition is adding feature X doesn&#8217;t mean that you should be chasing them to stay on par with their features.  Your software is unique and doing something extremely well says more than doing many different things that are half-assed.</p>
<p><strong>Make tiny decisions</strong>. Get into the rhythm of making decisions rather than postponing for the perfect solution.  If you don&#8217;t make the smaller decisions they&#8217;ll eventually pile up and be harder to tackle until they get tossed aside and never resolved.</p>
<p>Don&#8217;t be afraid to launch your product sooner than when you&#8217;re comfortable with, launching in an iterative approach lets you release the essentials first instead of spending the time on extras that aren&#8217;t necessary for day one.  Quick wins like these are important since <strong>momentum fuels motivation</strong>.</p>
<p>Teaching your customers can be just as effective if not more so than marketing to them.  By doing so you help your customers improve upon their skills and is a way of gaining their loyalty.  Think of how a cooking show teaches their audience to become better at preparing meals thus more inclined to buy products that they recommend.  Or how your local home improvement store holds do-it-yourself clinics throughout the year.</p>
<p>Things like answering the phones, your software&#8217;s error messages, or the after dinner mint are all forms of marketing.  Everyone should be involved.</p>
<p><strong>Own your bad news</strong> by being the first to tell your customers when things go wrong.  Better this than having it spread to other sources and become construed into something it isn&#8217;t.</p>
<p><strong>Be close to your customers</strong>.  By doing this you see first hand what others are saying about your products.  Just like how the bad news can become twisted around and unreliable, feedback from your customers can become the same way.</p>
<p><strong>Sound like you</strong>.  Avoid things like buzzwords and corporate speak, also write to be read, don&#8217;t write just to write.  Write like its just for one person so that you avoid generalities and awkwardness.</p>
<p><strong>Inspiration is perishable</strong>, so don&#8217;t put it off.  Set aside time in the near future and dive in and you&#8217;ll find that you can get much more done when you&#8217;re inspired then when you get around to doing it later on down the road.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AjP1RzAfy40:K9yRoEiLlMs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AjP1RzAfy40:K9yRoEiLlMs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=AjP1RzAfy40:K9yRoEiLlMs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AjP1RzAfy40:K9yRoEiLlMs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=AjP1RzAfy40:K9yRoEiLlMs:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AjP1RzAfy40:K9yRoEiLlMs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=AjP1RzAfy40:K9yRoEiLlMs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AjP1RzAfy40:K9yRoEiLlMs:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AjP1RzAfy40:K9yRoEiLlMs:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AjP1RzAfy40:K9yRoEiLlMs:qZ7jBH1wJJ8"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=qZ7jBH1wJJ8" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AjP1RzAfy40:K9yRoEiLlMs:DN0H40_Ym5U"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=DN0H40_Ym5U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=AjP1RzAfy40:K9yRoEiLlMs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=AjP1RzAfy40:K9yRoEiLlMs:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.mikebobiney.com/2011/09/14/notes-on-rework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cocoaconf 2011 Recap</title>
		<link>http://www.mikebobiney.com/2011/08/19/cocoaconf-2011-recap/</link>
		<comments>http://www.mikebobiney.com/2011/08/19/cocoaconf-2011-recap/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 17:15:24 +0000</pubDate>
		<dc:creator>Mike Bobiney</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Ohio]]></category>
		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://www.mikebobiney.com/?p=683</guid>
		<description><![CDATA[Cocoaconf actually took me by surprise as I just happened to hear about it from a tweet within a month of it taking place. It&#8217;s pretty rare to find developer events of this size so close by Detroit so I had to jump on the opportunity. Who would&#8217;ve thought that I would get so much [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.mikebobiney.com/wp-content/uploads/2011/08/cocoaconflogo.png"><img src="http://www.mikebobiney.com/wp-content/uploads/2011/08/cocoaconflogo.png" alt="Cocoaconf Logo" title="cocoaconf-logo" width="107" height="109" class="alignright size-full wp-image-701" /></a></p>
<p><a href="http://cocoaconf.com/">Cocoaconf</a> actually took me by surprise as I just happened to hear about it from a tweet within a month of it taking place. It&#8217;s pretty rare to find developer events of this size so close by Detroit so I had to jump on the opportunity.  Who would&#8217;ve thought that I would get so much out of spending a few days in Dublin, Ohio?</p>
<p>Cocoaconf is a brand new conference that&#8217;s geared towards a technical audience (eg: no vendors were present). There were sessions for many skill levels and even an all day &#8220;soup to nuts&#8221; workshop that created an iPhone app from scratch using many of the Cocoa API&#8217;s.  The sessions that I found most helpful were ones that I don&#8217;t normally see too much coverage of like <a href="http://developer.apple.com/library/ios/#documentation/DeveloperTools/Reference/UIAutomationRef/_index.html">UIAutomation</a> with <a href="https://github.com/alexvollmer/tuneup_js">tuneup_js</a> as well as unit testing with <a href="http://gabriel.github.com/gh-unit/">ghunit</a> and <a href="http://www.mulle-kybernetik.com/software/OCMock/">ocmock</a>.  I would say that the session that surprised me the most was on <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html">NSURLConnection</a> and the different networking protocols and technologies that are present in Cocoa.  Immediately I could see the benefit of things like <a href="http://www.apple.com/support/bonjour/">Bonjour</a> discovery and the <a href="https://github.com/gowalla/AFNetworking">AFNetworking</a> library. </p>
<p>One session that I thought was unique was the &#8220;We Made An App For That&#8221; talks where attendees had the opportunity to talk about their experiences in building their app and give a demonstration of how their apps function.  The apps ranged from one that had just been released within the last month and even one that had sold thirty thousand copies!  </p>
<p>To help give the speakers feedback there were cocoa bucks being rewarded for those folks who filled out the questioners.  These cocoa bucks were then entered in a drawing to win prizes at the end.  This was clearly an important part of the conference as they were being handed out at all of the doors, and from the looks of things they had a good amount of them turned in.  I actually didn&#8217;t realize at the time but quite a few of the books that were being given out were written by the <a href="http://cocoaconf.com/speakers">speakers</a> at Cocoaconf.  This goes to show you the quality that was put into their debut event and from the sound of things it&#8217;s only going to be getting better.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/mikebobiney?a=LJJl_oxC3cU:BloCjB_-nv8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=LJJl_oxC3cU:BloCjB_-nv8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=LJJl_oxC3cU:BloCjB_-nv8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=LJJl_oxC3cU:BloCjB_-nv8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=LJJl_oxC3cU:BloCjB_-nv8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=LJJl_oxC3cU:BloCjB_-nv8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=LJJl_oxC3cU:BloCjB_-nv8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=LJJl_oxC3cU:BloCjB_-nv8:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=LJJl_oxC3cU:BloCjB_-nv8:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=LJJl_oxC3cU:BloCjB_-nv8:qZ7jBH1wJJ8"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=qZ7jBH1wJJ8" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=LJJl_oxC3cU:BloCjB_-nv8:DN0H40_Ym5U"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=DN0H40_Ym5U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=LJJl_oxC3cU:BloCjB_-nv8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=LJJl_oxC3cU:BloCjB_-nv8:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.mikebobiney.com/2011/08/19/cocoaconf-2011-recap/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>So whats new?</title>
		<link>http://www.mikebobiney.com/2011/07/11/so-whats-new/</link>
		<comments>http://www.mikebobiney.com/2011/07/11/so-whats-new/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 12:35:31 +0000</pubDate>
		<dc:creator>Mike Bobiney</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.mikebobiney.com/?p=617</guid>
		<description><![CDATA[It&#8217;s a good feeling knowing that you&#8217;re getting things done. Doing all of those things that you&#8217;ve maybe thought about getting around to and then lost the sticky note that it was written down on. I&#8217;ve even been able to squeeze in a blog post, now that&#8217;s some serious GTD if you ask me! Where [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.mikebobiney.com/wp-content/uploads/2011/07/Checkmark.png"><img src="http://www.mikebobiney.com/wp-content/uploads/2011/07/Checkmark-150x150.png" alt="" title="Checkmark" width="150" height="150" class="alignright size-thumbnail wp-image-636" /></a><br />
It&#8217;s a good feeling knowing that you&#8217;re getting things done.  Doing all of those things that you&#8217;ve maybe thought about getting around to and then lost the sticky note that it was written down on.  I&#8217;ve even been able to squeeze in a blog post, now that&#8217;s some serious GTD if you ask me!</p>
<p>Where do I begin? Over the last month or so I&#8217;ve been rather busy with a few things, in no particular order..</p>
<ul>
<li>Ran a <a href="http://www.oakapplerun.org/pages/OARHome.asp">10k race</a> with only two weeks of training</li>
<li>Updated three rooms with new paint and carpet</li>
<li>Started my own LLC and designed it&#8217;s <a href="http://www.tapthroughapps.com">website</a></li>
<li>Updated my blog layout</li>
<li>Switched over all my content from my old Google account</li>
<li>Had a logo created for our <a href="http://www.meetup.com/detroitruby/">DetroitRuby</a> meetups, just in time for our fourth consecutive event</li>
<li>Learning about <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a></li>
<li>Better <a href="http://agilebits.com/products/1Password">password management</a> across websites</li>
<li>Brewed one hell of a <a href="http://www.homebrewing.org/Solsun_p_607.html">wheat beer</a></li>
<li>Spent my birthday touring <a href="http://www.bellsbeer.com/">Bell&#8217;s Brewery</a> and <a href="http://www.newhollandbrew.com">New Holland Brewing Company</a> facilities out in the western part of Michigan</li>
</ul>
<p>And last but not least we announced our new Quicken Loans mobile app.</p>
<p><iframe width="560" height="349" src="http://www.youtube.com/embed/KLDjlM1A4D4" frameborder="0" allowfullscreen></iframe></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/mikebobiney?a=9C3xw1eZPhI:sdkn8N46AXg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=9C3xw1eZPhI:sdkn8N46AXg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=9C3xw1eZPhI:sdkn8N46AXg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=9C3xw1eZPhI:sdkn8N46AXg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=9C3xw1eZPhI:sdkn8N46AXg:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=9C3xw1eZPhI:sdkn8N46AXg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=9C3xw1eZPhI:sdkn8N46AXg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=9C3xw1eZPhI:sdkn8N46AXg:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=9C3xw1eZPhI:sdkn8N46AXg:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=9C3xw1eZPhI:sdkn8N46AXg:qZ7jBH1wJJ8"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=qZ7jBH1wJJ8" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=9C3xw1eZPhI:sdkn8N46AXg:DN0H40_Ym5U"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=DN0H40_Ym5U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=9C3xw1eZPhI:sdkn8N46AXg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=9C3xw1eZPhI:sdkn8N46AXg:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.mikebobiney.com/2011/07/11/so-whats-new/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WindyCityGo Mobile Conference</title>
		<link>http://www.mikebobiney.com/2011/04/24/windycitygo-mobile-conference/</link>
		<comments>http://www.mikebobiney.com/2011/04/24/windycitygo-mobile-conference/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 12:12:37 +0000</pubDate>
		<dc:creator>Mike Bobiney</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://www.mikebobiney.com/?p=560</guid>
		<description><![CDATA[Earlier this month I had the opportunity to attend WindyCityGo in Chicago, IL with a few hundred fellow mobile developers. The two primary sponsors of the event were Groupon and ThoughtWorks who both have a strong presence within the city. A couple of my takeaways from the event were.. Boyd&#8217;s Law of Iteration: speed of [...]]]></description>
				<content:encoded><![CDATA[<p>Earlier this month I had the opportunity to attend <a href="http://windycitygo.org/">WindyCityGo</a> in Chicago, IL with a few hundred fellow mobile developers.  The two primary sponsors of the event were <a href="http://www.groupon.com">Groupon</a> and <a href="http://www.thoughtworks.com/">ThoughtWorks</a> who both have a strong presence within the city. A couple of my takeaways from the event were..</p>
<ul>
<li><a href="http://www.codinghorror.com/blog/2007/02/boyds-law-of-iteration.html">Boyd&#8217;s Law of Iteration</a>: speed of iteration beats quality of iteration.</li>
<li>
Mobile analytics tools like <a href="http://www.flurry.com">Flurry</a> are a great way to learn about your audience.. however they are under scrutiny from apple because of how they can potentially track new iPhone models before they&#8217;ve been announced.</li>
<li>Consider doing low tech prototypes of your app first by taking pictures of interface sketches and then flipping through them to get a feel for how your app will behave.</li>
<li>In some cases you can simply give your images a css width attribute of 100% to make them more responsive to mobile screen dimensions.</li>
<li>The LLVM compiler and LLDB come with XCode4, however you can&#8217;t use LLDB on iOS projects yet.</li>
</ul>
<p>Best of all, I was able to contribute on an open source project that allows for real time chat between an iPhone app and a Ruby on Rails website.  Go check out the <a href="https://github.com/groupon/chat">Groupon Chat</a> project up on GitHub.</p>
<table width="100%">
<tr>
<td align="center">
<a href="http://www.mikebobiney.com/wp-content/uploads/2011/04/pretty-happy-with-how-the-groupon-go-app-ende.jpeg"><img src="http://www.mikebobiney.com/wp-content/uploads/2011/04/pretty-happy-with-how-the-groupon-go-app-ende-200x300.jpg" alt="" title="GrouponGo-WindyCityGo" width="200" height="300" class="aligncenter size-medium wp-image-582" /></a>
</td>
<td align="center">
<a href="http://www.mikebobiney.com/wp-content/uploads/2011/04/chicago-boats.jpg"><img src="http://www.mikebobiney.com/wp-content/uploads/2011/04/chicago-boats-300x224.jpg" alt="" title="chicago-boats" width="300" height="224" class="alignnone size-medium wp-image-598" /></a>
</td>
</tr>
</table>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/mikebobiney?a=lNIBCLwzmjc:3D7BkOKyzEQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=lNIBCLwzmjc:3D7BkOKyzEQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=lNIBCLwzmjc:3D7BkOKyzEQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=lNIBCLwzmjc:3D7BkOKyzEQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=lNIBCLwzmjc:3D7BkOKyzEQ:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=lNIBCLwzmjc:3D7BkOKyzEQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=lNIBCLwzmjc:3D7BkOKyzEQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=lNIBCLwzmjc:3D7BkOKyzEQ:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=lNIBCLwzmjc:3D7BkOKyzEQ:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=lNIBCLwzmjc:3D7BkOKyzEQ:qZ7jBH1wJJ8"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=qZ7jBH1wJJ8" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=lNIBCLwzmjc:3D7BkOKyzEQ:DN0H40_Ym5U"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=DN0H40_Ym5U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=lNIBCLwzmjc:3D7BkOKyzEQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=lNIBCLwzmjc:3D7BkOKyzEQ:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.mikebobiney.com/2011/04/24/windycitygo-mobile-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Customizing your bash prompt with current git branch</title>
		<link>http://www.mikebobiney.com/2011/04/18/customizing-your-bash-prompt-with-current-git-branch/</link>
		<comments>http://www.mikebobiney.com/2011/04/18/customizing-your-bash-prompt-with-current-git-branch/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 16:26:23 +0000</pubDate>
		<dc:creator>Mike Bobiney</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://www.mikebobiney.com/?p=569</guid>
		<description><![CDATA[Just add this to your ~/.bashrc file or create it if one doesn&#8217;t exist. You&#8217;ll either need to close and reopen Terminal for the change to take effect or run this source ~/.bashrc]]></description>
				<content:encoded><![CDATA[<p>Just add this to your ~/.bashrc file or create it if one doesn&#8217;t exist.</p>
<p><script src="https://gist.github.com/925579.js"> </script></p>
<p>You&#8217;ll either need to close and reopen Terminal for the change to take effect or run this</p>
<p><code>source ~/.bashrc</code></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/mikebobiney?a=KIjkxVGjMr4:iGOzq9EJnLA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=KIjkxVGjMr4:iGOzq9EJnLA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=KIjkxVGjMr4:iGOzq9EJnLA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=KIjkxVGjMr4:iGOzq9EJnLA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=KIjkxVGjMr4:iGOzq9EJnLA:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=KIjkxVGjMr4:iGOzq9EJnLA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=KIjkxVGjMr4:iGOzq9EJnLA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=KIjkxVGjMr4:iGOzq9EJnLA:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=KIjkxVGjMr4:iGOzq9EJnLA:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=KIjkxVGjMr4:iGOzq9EJnLA:qZ7jBH1wJJ8"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=qZ7jBH1wJJ8" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=KIjkxVGjMr4:iGOzq9EJnLA:DN0H40_Ym5U"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=DN0H40_Ym5U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=KIjkxVGjMr4:iGOzq9EJnLA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=KIjkxVGjMr4:iGOzq9EJnLA:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.mikebobiney.com/2011/04/18/customizing-your-bash-prompt-with-current-git-branch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Output a list of git committers</title>
		<link>http://www.mikebobiney.com/2011/04/11/output-list-of-git-committers/</link>
		<comments>http://www.mikebobiney.com/2011/04/11/output-list-of-git-committers/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 12:45:45 +0000</pubDate>
		<dc:creator>Mike Bobiney</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://www.mikebobiney.com/?p=547</guid>
		<description><![CDATA[By using the git log command formatted and piped to sort -u (unique) you can pretty easily get a listing of who has ever contributed to a project which is under git source control. git log --pretty=format:"%an" &#124; sort -u Using this you’ll get an output that resembles something like this. Barry Sanders Grant Hill [...]]]></description>
				<content:encoded><![CDATA[<p>By using the git log command formatted and piped to sort -u (unique) you can pretty easily get a listing of who has ever contributed to a project which is under git source control. </p>
<p><code>git log --pretty=format:"%an" | sort -u</code></p>
<p>Using this you’ll get an output that resembles something like this.</p>
<p>Barry Sanders<br />
Grant Hill<br />
Joe Smith</p>
<p>As you can see, it sorts by the full name string which may not be ideal but I think that it does the job well enough for now.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/mikebobiney?a=J3RNZbj5CNQ:bt2Za4Ub62w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=J3RNZbj5CNQ:bt2Za4Ub62w:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=J3RNZbj5CNQ:bt2Za4Ub62w:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=J3RNZbj5CNQ:bt2Za4Ub62w:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=J3RNZbj5CNQ:bt2Za4Ub62w:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=J3RNZbj5CNQ:bt2Za4Ub62w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=J3RNZbj5CNQ:bt2Za4Ub62w:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=J3RNZbj5CNQ:bt2Za4Ub62w:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=J3RNZbj5CNQ:bt2Za4Ub62w:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=J3RNZbj5CNQ:bt2Za4Ub62w:qZ7jBH1wJJ8"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=qZ7jBH1wJJ8" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=J3RNZbj5CNQ:bt2Za4Ub62w:DN0H40_Ym5U"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=DN0H40_Ym5U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=J3RNZbj5CNQ:bt2Za4Ub62w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=J3RNZbj5CNQ:bt2Za4Ub62w:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.mikebobiney.com/2011/04/11/output-list-of-git-committers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome To CodeMash 2011</title>
		<link>http://www.mikebobiney.com/2011/01/17/welcome-to-codemash-2011/</link>
		<comments>http://www.mikebobiney.com/2011/01/17/welcome-to-codemash-2011/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 02:31:36 +0000</pubDate>
		<dc:creator>Mike Bobiney</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://www.mikebobiney.com/?p=544</guid>
		<description><![CDATA[This year marked the fifth year of the CodeMash open source developer conference. I now know why it only took a matter of hours for this one to completely sell out.&#160; During the three days in Sandusky, OH I attended quite a variety of sessions on topics that I wouldn’t normally spend time on such [...]]]></description>
				<content:encoded><![CDATA[<p>This year marked the fifth year of the CodeMash open source developer conference. I now know why it only took a matter of hours for this one to <u>completely</u> sell out.&#160; During the three days in Sandusky, OH I attended quite a variety of sessions on topics that I wouldn’t normally spend time on such as Ruby, VIM and F#. It was great to find the atmosphere being upbeat and open minded as well. To top it all off on Thursday evening the waterpark was open for just us conference attendees to enjoy.&#160; It was well worth the time and effort of driving through the blizzard of snowfall that arrived in Detroit just prior to leaving on Tuesday afternoon. Good times!</p>
<p><a href="http://www.mikebobiney.com/wp-content/uploads/2011/01/IMG_0064.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="IMG_0064" border="0" alt="IMG_0064" src="http://www.mikebobiney.com/wp-content/uploads/2011/01/IMG_0064_thumb.jpg" width="419" height="284" /></a></p>
<p>&#160;</p>
<p><a href="http://www.mikebobiney.com/wp-content/uploads/2011/01/IMG_0041.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="IMG_0041" border="0" alt="IMG_0041" src="http://www.mikebobiney.com/wp-content/uploads/2011/01/IMG_0041_thumb.jpg" width="420" height="316" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/mikebobiney?a=tYyClbFZa9E:le_Ma_GCF84:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=tYyClbFZa9E:le_Ma_GCF84:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=tYyClbFZa9E:le_Ma_GCF84:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=tYyClbFZa9E:le_Ma_GCF84:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=tYyClbFZa9E:le_Ma_GCF84:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=tYyClbFZa9E:le_Ma_GCF84:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=tYyClbFZa9E:le_Ma_GCF84:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=tYyClbFZa9E:le_Ma_GCF84:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=cGdyc7Q-1BI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=tYyClbFZa9E:le_Ma_GCF84:V-t1I-SPZMU"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=V-t1I-SPZMU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=tYyClbFZa9E:le_Ma_GCF84:qZ7jBH1wJJ8"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=qZ7jBH1wJJ8" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=tYyClbFZa9E:le_Ma_GCF84:DN0H40_Ym5U"><img src="http://feeds.feedburner.com/~ff/mikebobiney?d=DN0H40_Ym5U" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/mikebobiney?a=tYyClbFZa9E:le_Ma_GCF84:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/mikebobiney?i=tYyClbFZa9E:le_Ma_GCF84:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.mikebobiney.com/2011/01/17/welcome-to-codemash-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
