<?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/"
	>

<channel>
	<title>MaTT&#039;s Blog &#187; Technical</title>
	<atom:link href="http://www.sep.com/mcterry/category/technical/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sep.com/mcterry</link>
	<description>...getting paid to be a nerd, and I&#039;m here to blog about it.</description>
	<lastBuildDate>Fri, 16 Dec 2011 04:18:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Product Engineering is like road construction&#8230;</title>
		<link>http://www.sep.com/mcterry/2011/12/08/product-engineering-is-like-road-construction/</link>
		<comments>http://www.sep.com/mcterry/2011/12/08/product-engineering-is-like-road-construction/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 04:18:58 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[SEP Engineering]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[desirable]]></category>
		<category><![CDATA[product engineering]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=275</guid>
		<description><![CDATA[Product Engineering is like road construction.  You have to satisfy the utility.  The utility of a road is pretty straight forward &#8211; I have to be able to drive my car from point A, to point B, without causing significant damage to my vehicle. Utility is your table stake. Without utility, you don&#8217;t have a product worth [...]]]></description>
			<content:encoded><![CDATA[<p>Product Engineering is like road construction.  You have to satisfy the utility.  The utility of a road is pretty straight forward &#8211; I have to be able to drive my car from point A, to point B, without causing significant damage to my vehicle.</p>
<h2>Utility is your table stake.</h2>
<p>Without utility, you don&#8217;t have a product worth using.  In addition to utility, there are things like usability and aesthetics.  I&#8217;m not going to cover those in detail in this post.  However, both usability and aesthetics can be summed up into one word &#8211; desirable.</p>
<p>Imagine driving on a road with the below sign&#8230;<br />
<a href="http://www.sep.com/mcterry/files/2011/12/confusing_road.jpg"><img class="aligncenter size-medium wp-image-306" src="http://www.sep.com/mcterry/files/2011/12/confusing_road-300x224.jpg" alt="" width="300" height="224" /></a></p>
<p>&#8230;probably not your favorite interchange, right?  What if it was someone&#8217;s first time driving in this area?  Or worse, what if the driver was a teenager who recently got their driver&#8217;s license?  This would be a nightmare.</p>
<p>Imagine driving on a road like this&#8230;</p>
<p><a href="http://www.sep.com/mcterry/files/2011/12/potholes.jpg"><img class="aligncenter size-medium wp-image-307" src="http://www.sep.com/mcterry/files/2011/12/potholes-300x231.jpg" alt="" width="300" height="231" /></a></p>
<p>&#8230;this road _barely_ has utility, if you ask me.  While you could drive on this road, you would have to slow way down and dodge this rough patch.</p>
<p>While both of these roads have utility (they are both passable), neither road is desirable for most drivers.</p>
<p>This picture of potholes is a good reminder that you can&#8217;t construct a road and then forget about it either, you have to maintain it.  Quick-dry patches over a long period of time result in a less-desirable road.  Ultimately, your users will find a different route.</p>
<h2>Product engineering is no different.</h2>
<p>Ultimately, you have to build a road that people want to drive on.  It has to be desirable!  Meaning, you have to build a product that people _want_ to use.</p>
<p>For example, this is the recently renovated Keystone Ave. here in Carmel, IN&#8230;</p>
<p><a href="http://www.sep.com/mcterry/files/2011/12/keystone.jpg"><img class="aligncenter size-medium wp-image-310" src="http://www.sep.com/mcterry/files/2011/12/keystone-300x197.jpg" alt="" width="300" height="197" /></a></p>
<p>&#8230;this is my preferred road for many reasons.</p>
<p>Just as drivers choose roads for their daily commutes, users choose products for their daily uses.  Make sure you&#8217;re building a product that people would find desirable, in addition to your table stakes.</p>
<p>Ask yourself &#8211; Is your product desirable?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2011/12/08/product-engineering-is-like-road-construction/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Git Extensions has some sweet new toys&#8230;</title>
		<link>http://www.sep.com/mcterry/2011/12/02/git-extensions-has-some-sweet-new-toys/</link>
		<comments>http://www.sep.com/mcterry/2011/12/02/git-extensions-has-some-sweet-new-toys/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 03:52:43 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[SEP Engineering]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[gitextensions]]></category>
		<category><![CDATA[jumplists]]></category>
		<category><![CDATA[windows7]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=294</guid>
		<description><![CDATA[I use Git Extensions on a daily basis.  It is a great git interface for a mouse-lover like myself. Well, it looks like Git Extensions grew some sweet new toys that take advantage of Windows 7. If you haven&#8217;t played around with some of the advanced features in Windows 7, I highly recommend it.  The JumpLists [...]]]></description>
			<content:encoded><![CDATA[<p>I use <a href="http://code.google.com/p/gitextensions/">Git Extensions</a> on a daily basis.  It is a great <a href="http://git-scm.com/" target="_blank">git</a> interface for a mouse-lover like myself.</p>
<p>Well, it looks like Git Extensions grew some sweet new toys that take advantage of Windows 7.</p>
<p>If you haven&#8217;t played around with some of the advanced <a href="http://en.wikipedia.org/wiki/Features_new_to_Windows_7" target="_blank">features in Windows 7</a>, I highly recommend it.  The <a href="http://windows.microsoft.com/en-US/windows7/products/features/jump-lists" target="_blank">JumpLists</a> are probably my favorite new feature.  There are 2 different JumpLists that I use on a regular basis &#8211; in the Start Menu, and on the Taskbar.  They reduce context switching, and allow me to do activities quickly.</p>
<p>Here is a snapshot of using the JumpList in the Start Menu&#8230;</p>
<p><a href="http://www.sep.com/mcterry/files/2011/12/jumplist_startmenu.png"><img class="aligncenter size-medium wp-image-298" src="http://www.sep.com/mcterry/files/2011/12/jumplist_startmenu-246x300.png" alt="" width="246" height="300" /></a>&#8230;it allows you to jump directly to a recently used repository.  Very handy!</p>
<p>&nbsp;</p>
<p>Here is a snapshot of using the JumpList in the taskbar&#8230;</p>
<p><a href="http://www.sep.com/mcterry/files/2011/12/jumplist_taskbar.png"><img class="aligncenter size-full wp-image-299" src="http://www.sep.com/mcterry/files/2011/12/jumplist_taskbar.png" alt="" width="239" height="238" /></a>&#8230;it allows me to commit, pull, and push from the taskbar.  This is extra awesome because now I don&#8217;t actually have to pull up Git Extensions.  Instead, I just keep it minimized now, and even _more_ out of the way.</p>
<p>Do any tools you use regularly have some cool/awesome/fun features that integrate with your OS?  If so, what feature and how does it impact how you use the tool?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2011/12/02/git-extensions-has-some-sweet-new-toys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Get a list of Months by Locale in Android&#8230;</title>
		<link>http://www.sep.com/mcterry/2011/10/05/get-a-list-of-months-by-locale-in-android/</link>
		<comments>http://www.sep.com/mcterry/2011/10/05/get-a-list-of-months-by-locale-in-android/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 19:43:10 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[SEP Engineering]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[localization]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=183</guid>
		<description><![CDATA[I was working with a client trying to decide on long and short DateFormats for an international mobile application.  (Yes, that&#8217;s a mouthful.) &#160; I wasn&#8217;t able to quickly find any documentation on the Java SimpleDateFormat strings by locale&#8230;so I did what any Passionate Programmer would do, and I wrote a method to do it [...]]]></description>
			<content:encoded><![CDATA[<p>I was working with a client trying to decide on long and short DateFormats for an international mobile application.  (Yes, that&#8217;s a mouthful.)</p>
<p>&nbsp;</p>
<p>I wasn&#8217;t able to quickly find any documentation on the Java SimpleDateFormat strings by locale&#8230;so I did what any <a href="http://pragprog.com/book/cfcar2/the-passionate-programmer">Passionate Programmer</a> would do, and I wrote a method to do it for me.</p>
<p>&nbsp;</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aoutputstreamwriter+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">OutputStreamWriter</span></a> out <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aoutputstreamwriter+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">OutputStreamWriter</span></a><span style="color: #009900;">&#40;</span>openFileOutput<span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;months-by-locale.txt&quot;</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocale+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Locale</span></a> l <span style="color: #339933;">:</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocale+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Locale</span></a>.<span style="color: #006633;">getAvailableLocales</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Locale = &quot;</span> <span style="color: #339933;">+</span> l.<span style="color: #006633;">getDisplayLanguage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;, &quot;</span> <span style="color: #339933;">+</span> l.<span style="color: #006633;">getDisplayCountry</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &nbsp; &nbsp;Long Months...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> months <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adateformatsymbols+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">DateFormatSymbols</span></a><span style="color: #009900;">&#40;</span>l<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getMonths</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> m <span style="color: #339933;">:</span> months<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span> <span style="color: #339933;">+</span> m<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &nbsp; &nbsp;Short Months...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> smonths <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adateformatsymbols+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">DateFormatSymbols</span></a><span style="color: #009900;">&#40;</span>l<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getShortMonths</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> m <span style="color: #339933;">:</span> smonths<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span> <span style="color: #339933;">+</span> m<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; out.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
out.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Then, I needed to get this file off of my emulator.  To do that, I opened the DDMS perspective, selected my emulator in the Devices tab (emulator-5554), and navigated to data\data\(applicaton name)\files\(file name).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2011/10/05/get-a-list-of-months-by-locale-in-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Handler, in a nutshell&#8230;</title>
		<link>http://www.sep.com/mcterry/2011/08/05/android-handler-in-a-nutshell/</link>
		<comments>http://www.sep.com/mcterry/2011/08/05/android-handler-in-a-nutshell/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 14:36:10 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[SEP Engineering]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[handler]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[thread]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=137</guid>
		<description><![CDATA[The most basic way to handle multiple threads is to use the standard Java threads.  I won&#8217;t cover those in detail in this series; however, there are some good docs and examples online to help with those. By default, Android apps run solely in a single thread &#8211; the UI Thread.  For most applications, this [...]]]></description>
			<content:encoded><![CDATA[<p>The most basic way to handle multiple threads is to use the standard Java threads.  I won&#8217;t cover those in detail in this series; however, there are some good <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html" target="_blank">docs</a> and <a href="http://www.vogella.de/articles/JavaConcurrency/article.html#threads" target="_blank">examples</a> online to help with those.</p>
<p>By default, Android apps run solely in a single thread &#8211; the UI Thread.  For most applications, this is perfectly fine.  There are, however, some good reasons that your application needs to be multithreaded.  For example -</p>
<ul>
<li>lots of data access &#8211; reading/writing to a database is slow</li>
<li>download information from the internet &#8211; mobile networks can be spotty, or slow</li>
<li>sync with other components &#8211; for example, performing Bluetooth pairing or communicating with a service</li>
</ul>
<p>If you want your thread to be able to interact with the UI and still perform operations in the background, then you&#8217;ll need to use some Android specific classes.  The simplest form in Android is the <a href="http://developer.android.com/reference/android/os/Handler.html" target="_blank">Handler</a>.  A Handler allows you to send/queue messages, execute <a href="http://developer.android.com/reference/java/lang/Runnable.html" target="_blank">Runnable objects</a>, and even perform some fine grained scheduling.</p>
<p>One of the best uses for a Handler is for displaying progress.  When communicating progress via a dialog, or progress bar, or whatever, it is good to use a Handler because the user can still interact with your UI.  For example, if the user decides they don&#8217;t want to wait, they could press the back button.  Or, perhaps the operation you&#8217;re doing doesn&#8217;t require the user to wait, they can continue to use your app while information gets updated asynchronously.</p>
<p>Thinking of the G+, FB, or TweetDeck apps that try to backfill your stream&#8230;if those apps blocked your UI, and made you wait, you&#8217;d most likely never use those apps again.  Or worse, you might go as far as leaving negative feedback in the app store!</p>
<p style="padding-left: 30px"><strong>So, MaTT, how do we do this?</strong></p>
<p>The example below uses a Handler to set the progress on the UI.  So while the Thread is doing some lengthy operation (mProgressStatus = doWork();), the Handler is able to update the UI by calling the Post method, and setting the progress.</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>pre<span style="color: #339933;">&gt;</span>         <span style="color: #666666; font-style: italic;">// Start lengthy operation in a background thread</span><br />
         <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Athread+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Thread</span></a><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Arunnable+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Runnable</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
             <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
                 <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>mProgressStatus <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
                     mProgressStatus <span style="color: #339933;">=</span> doWork<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
                     <span style="color: #666666; font-style: italic;">// Update the progress bar</span><br />
                     mHandler.<span style="color: #006633;">post</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Arunnable+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Runnable</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
                         <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
                             mProgress.<span style="color: #006633;">setProgress</span><span style="color: #009900;">&#40;</span>mProgressStatus<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
                         <span style="color: #009900;">&#125;</span><br />
                     <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
                 <span style="color: #009900;">&#125;</span><br />
             <span style="color: #009900;">&#125;</span><br />
         <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;&lt;/</span>pre<span style="color: #339933;">&gt;</span></div></div>
<p>The reason you NEED a Handler here, is because you can&#8217;t access the UI from the Thread object.  The Android UI toolkit is not threadsafe by default.  If you try to access the View to update it, there is a good chance you&#8217;ll get some amazing Null Reference exceptions.</p>
<p>Each Activity only needs one handler, so you can use that Handler for different tasks or for updating multiple UI components.</p>
<p style="padding-left: 30px"><strong>So, MaTT, when do we use this?</strong></p>
<p>This approach is great for simple, yet long, operations.  You are still able to show progress to your user and you don&#8217;t block the UI while it happens.  Using Handlers won&#8217;t give you 5 stars in the market, but it can help keep you from getting 1 star.  Handlers are ideal for one-off situations where you need to do something, but don&#8217;t want to interrupt the user.  The other beautiful part about using a Handler is, you don&#8217;t have to worry about creating some complex messaging architecture that takes a week to develop and test.</p>
<p>If you find yourself putting Handlers all over the place, consider using a more robust solution like AsyncTasks which I will cover in more detail in my next post.</p>
<p>&nbsp;</p>
<p>Android Thread Series:</p>
<ol>
<li><a title="Too many options for Android threads?  Let me help!" href="http://www.sep.com/mcterry/2011/07/28/too-many-options-for-android-threads-let-me-help/">Overview</a></li>
<li><a title="Android Handler, in a nutshell..." href="http://www.sep.com/mcterry/2011/08/05/android-handler-in-a-nutshell/" target="_blank">Handlers</a></li>
<li>AsyncTasks</li>
<li>Services and Messengers</li>
<li>Conclusion</li>
</ol>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2011/08/05/android-handler-in-a-nutshell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Too many options for Android threads?  Let me help!</title>
		<link>http://www.sep.com/mcterry/2011/07/28/too-many-options-for-android-threads-let-me-help/</link>
		<comments>http://www.sep.com/mcterry/2011/07/28/too-many-options-for-android-threads-let-me-help/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 16:18:00 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[SEP Engineering]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[thread]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=118</guid>
		<description><![CDATA[As smartphones continue to gain popularity, the demand for mobile applications also continues to grow.  The increase in usage of smartphones elevated the issue of &#8220;multitasking&#8221; on mobile devices.  (I&#8217;m not going to go into details of my opinions on the myth and illusion of multitasking.) Ultimately, users want to have multiple applications running, syncing [...]]]></description>
			<content:encoded><![CDATA[<p>As smartphones continue to <a title="Smartphone share" href="http://blog.nielsen.com/nielsenwire/online_mobile/in-us-smartphones-now-majority-of-new-cellphone-purchases/" target="_blank">gain popularity</a>, the demand for mobile applications also continues to grow.  The increase in usage of smartphones elevated the issue of &#8220;multitasking&#8221; on mobile devices.  (I&#8217;m not going to go into details of my opinions on the myth and illusion of multitasking.)</p>
<p>Ultimately, users want to have multiple applications running, syncing data, and connecting to the internet.</p>
<p>One solution to meet this demand is to block the UI and potentially display progress.  This can be a problem because users who perceive an application to be <a title="Design for responsiveness" href="http://developer.android.com/guide/practices/design/responsiveness.html" target="_blank">slow, sluggish, or non-responsive </a>will give your app poor reviews in the market.  A more ideal solution is to perform long running, slow, or blocking tasks in the background.  The same work is being done, but the UI is snappy, or responsive.  An added benefit is that you won&#8217;t end up having one of these gems while trying to get the latest news updates about the NFL Lockout&#8230; &lt;sigh/&gt;</p>
<p><a href="http://www.sep.com/mcterry/files/2011/07/anr.png"><img class="size-thumbnail wp-image-125 alignleft" src="http://www.sep.com/mcterry/files/2011/07/anr-150x150.png" alt="" width="150" height="150" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Android has many options for performing background tasks.  Specifically, Android gives you the opportunity to define what <a title="Processes and Threads" href="http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html" target="_blank">process</a> your component runs in, control threads, and communicate remotely with components and processes.  Great!  Let&#8217;s use this to make awesome applications.  What&#8217;s the name of this magical background task thingy?  Well, get ready, because there&#8217;s a list&#8230;</p>
<ul>
<li>Process</li>
<li>Thread</li>
<li>Synchronized</li>
<li>Handler</li>
<li>Messenger</li>
<li>AsyncTask</li>
<li>Service</li>
<li>BoundServices</li>
<li>IntentServices</li>
</ul>
<p>In theory, this is great!  However, there are so many options that it can be overwhelming.  And you can&#8217;t just start moving everything to a new thread, because multithreaded applications introduce new challenges, like&#8230;</p>
<ul>
<li>What about concurrency?  Is that a problem? (That&#8217;s a rhetorical question.  Of course concurrency is an issue!)</li>
<li>Deadlock, livelock, and  starvation (&#8220;Oh my!&#8221;)</li>
<li>What do my users expect?  If I do things in the background, does that break the communication loop?</li>
<li>I&#8217;ve heard lifecycle is important, what does this mean?</li>
</ul>
<p>In a series of posts, I&#8217;ll cover the options, explain possible approaches, and make recommendations on when to use which options.  I will even put up some sample code to help illustrate my points.  Along the way, I will answer the above questions and more.  After all, you want to be sure that you&#8217;re using the right tool for the job, right?</p>
<p>&nbsp;</p>
<p>Android Thread Series:</p>
<ol>
<li><a title="Too many options for Android threads?  Let me help!" href="http://www.sep.com/mcterry/2011/07/28/too-many-options-for-android-threads-let-me-help/">Overview</a></li>
<li><a title="Android Handler, in a nutshell..." href="http://www.sep.com/mcterry/2011/08/05/android-handler-in-a-nutshell/" target="_blank">Handlers</a></li>
<li>AsyncTasks</li>
<li>Services and Messengers</li>
<li>Conclusion</li>
</ol>
<p>&nbsp;</p>
<ol></ol>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2011/07/28/too-many-options-for-android-threads-let-me-help/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3Q Book Review: Persuasive Business Proposals</title>
		<link>http://www.sep.com/mcterry/2011/06/28/3q-book-review-persuasive-business-proposals/</link>
		<comments>http://www.sep.com/mcterry/2011/06/28/3q-book-review-persuasive-business-proposals/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 03:17:02 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[Book Review]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Persuasive Business Proposals]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=114</guid>
		<description><![CDATA[Persuasive Business Proposals by Dr. Tom Sant What’s the point? The point of this book is to write clearly and concisely, to differentiate yourself, and to better equip yourself with tools for writing persuasively.  Ultimately, this book is designed to help you and your company write winning proposals. How was it? Good.  I honestly felt [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/Persuasive-Business-Proposals-Customers-Contracts/dp/0814471536" target="_blank">Persuasive Business Proposals</a> by <a href="http://www.hydeparkpartnerscal.com/" target="_blank">Dr. Tom Sant</a></p>
<p><strong>What’s the point?</strong> The point of this book is to write clearly and concisely, to differentiate yourself, and to better equip yourself with tools for writing persuasively.  Ultimately, this book is designed to help you and your company write winning proposals.</p>
<p><strong>How was it?</strong> Good.  I honestly felt that this book was easy to read.  Many times, there is even some humor written into the book.  Two of the best tools that I took away from this book were NOSE (Needs, Outcomes, Solution, Evidence) and Cognitive Webbing.  These tools seemed to help structure my writing and organize my thoughts.</p>
<p><strong>Who should read it?</strong> Anyone who wants to be involved in writing proposals.  Anyone who is responsible for writing, reading, or approving proposals.  Anyone who is on a team that is involved with communicating about proposals.  Even if you don&#8217;t agree with everything Dr. Sant wrote, it gives us some common language to work from.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2011/06/28/3q-book-review-persuasive-business-proposals/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Today Mt. Hood Was Stolen!</title>
		<link>http://www.sep.com/mcterry/2011/05/03/today-mt-hood-was-stolen/</link>
		<comments>http://www.sep.com/mcterry/2011/05/03/today-mt-hood-was-stolen/#comments</comments>
		<pubDate>Wed, 04 May 2011 03:56:06 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[SEP Engineering]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Apprenticeship Pattern]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=106</guid>
		<description><![CDATA[Today is the day that I stopped thinking about doing something new, and started actually doing it.  I&#8217;m talking about Ruby on Rails. I wanted to learn something outside of my comfort zone (not too difficult for an embedded guy to get out of his comfort zone).  I tried to learn Ruby once before, but [...]]]></description>
			<content:encoded><![CDATA[<p>Today is the day that I stopped thinking about doing something new, and started actually doing it.  I&#8217;m talking about Ruby on Rails.</p>
<p>I wanted to learn something outside of my comfort zone (not too difficult for an embedded guy to get out of his comfort zone).  I tried to learn Ruby once before, but that was well before I knew how to learn.</p>
<p>Back then, I didn&#8217;t really know what being a software engineer was all about.  In the book, <a href="http://apprenticeship-patterns.labs.oreilly.com/" target="_blank">Apprenticeship Patterns</a>, there is a group of patterns called &#8220;<a href="http://apprenticeship-patterns.labs.oreilly.com/ch05.html" target="_blank">Perpetual Learning</a>&#8220;.  An apprentice needs to replace ignorance with concrete skills in order to continue to improve and get better, and ultimately, <a href="http://apprenticeship-patterns.labs.oreilly.com/ch03.html" target="_blank">Walk The Long Road</a>.</p>
<p>One way to replace ignorance is by expanding your bandwidth.  To me, this basically means &#8211; learn how to learn more (hence the name of the group of patterns is Perpetual Learning).</p>
<p>When I first tried to learn RoR, I didn&#8217;t know how to learn new things.  I didn&#8217;t know where to look for manuals and tutorials (short of going to Google and letting them guide me).  Now, a few years later, I feel like I am more resourceful, and my bandwidth is larger; therefore, allowing me to learn new things.</p>
<p><a href="http://twitter.com/#!/spraints" target="_blank">Burke</a> definitely gave me some nudges in the right direction, and over the last couple of days I have gotten completely set up with Ruby and Rails.  I&#8217;ve also completely exhausted <a href="http://tryruby.org/" target="_blank">TryRuby</a> and am actively working through <a href="http://railsforzombies.org" target="_blank">RailsForZombies</a>.  (Which are both pretty fun, I might add&#8230;yes, I said fun!)</p>
<p>If you have worked through the TryRuby guide, then you&#8217;ll understand the title of this blog.  This style of learning aligns well with many of the Apprenticeship Patterns.  I hope to continue learning, expanding my bandwidth, and practicing.</p>
<p>Today, Mt. Hood was stolen&#8230;tomorrow, I will aim a little higher.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2011/05/03/today-mt-hood-was-stolen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Variety is not an option&#8230;</title>
		<link>http://www.sep.com/mcterry/2011/03/11/variety-is-not-an-option/</link>
		<comments>http://www.sep.com/mcterry/2011/03/11/variety-is-not-an-option/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 14:11:47 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[SEP Engineering]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[LabView]]></category>
		<category><![CDATA[Matlab]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Variety]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=88</guid>
		<description><![CDATA[Many times I hear that people want a variety, and that variety is a good thing.  With everything &#8211; food, work, exercise, hobbies, etc. It dawned on me this morning that in the past year at work, I&#8217;ve worked on an embedded C project, dabbled in C# and .NET, done some LabView work, evaluated a [...]]]></description>
			<content:encoded><![CDATA[<p>Many times I hear that people want a variety, and that variety is a good thing.  With everything &#8211; food, work, exercise, hobbies, etc.</p>
<p>It dawned on me this morning that in the past year at work, I&#8217;ve worked on an embedded C project, dabbled in C# and .NET, done some LabView work, evaluated a Matlab project, built a prototype in WPF, and touched on multiple mobile platforms.</p>
<p>Wow!  And that&#8217;s only the technologies that I&#8217;ve worked in, that doesn&#8217;t include all the different and new processes I&#8217;ve been involved with.</p>
<p>One of our VP&#8217;s, <a title="Ohri" href="http://www.sep.com/ohri" target="_blank">Raman</a>, once said that variety is not an option, it&#8217;s a requirement at SEP.  I get what he means, now.  I also understand why it&#8217;s good for someone to get variety, continue to learn, and continue to do new things.</p>
<p>It is challenging, but exciting all at the same time.  I wouldn&#8217;t claim that I&#8217;m an expert in any of those areas, but I&#8217;m able to be on a team and be productive, and that&#8217;s the important part.  There have definitely been some late nights where I&#8217;m doing research on my own, but that&#8217;s what I have to do in order to keep up with my peers.</p>
<p>Do you get variety in your day to day?  What are some of the challenges of variety?  How do you overcome those challenges?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2011/03/11/variety-is-not-an-option/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Story first, then design&#8230;</title>
		<link>http://www.sep.com/mcterry/2010/07/13/story-first-then-design/</link>
		<comments>http://www.sep.com/mcterry/2010/07/13/story-first-then-design/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 14:37:55 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[SEP Engineering]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[discovery]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=84</guid>
		<description><![CDATA[I had my first opportunity to apply some of my recent training on discovery and usability.   I had a very short stint on an internal project, where I got the chance to perform some design work on a new calendar integration feature that was going to be implemented.  The feature was so new, and so undefined, [...]]]></description>
			<content:encoded><![CDATA[<p>I had my first opportunity to apply some of my <a title="Usability, and more..." href="http://www.sep.com/mcterry/2010/03/29/new-things-to-come/" target="_blank">recent training</a> on discovery and usability.   I had a very short stint on an internal project, where I got the chance to perform some design work on a new calendar integration feature that was going to be implemented.  The feature was so new, and so undefined, that I had no idea what to design!</p>
<p>When I finally took a step back from the problem, I remembered putting together some scenarios and stories during the <a href="http://agileproductdesign.com/jeff_patton.html" target="_blank">Jeff Patton</a> training.  I simply wrote a little paragraph about what &#8220;Tom the Time Keeper&#8221; (I&#8217;ve never claimed that creativity was one of my strong qualities, fyi) would do with this new calendar integration; and eventually, I even came up with some ideas about how Tom would configure the calendars.</p>
<p>This story then morphed into a set of use cases.  From these use cases, I could better determine what work actually needed to be done.</p>
<p>My lesson learned here is that if I write a story first, then try to design some new set of features&#8230;I can get a much better idea of what it was I needed to implement.  I can immediately see how this could also benefit some of the smaller estimation efforts I&#8217;ve taken on as well.  This is definitely an approach I will be repeating!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2010/07/13/story-first-then-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Are UX/UI &#8220;standards&#8221; lacking???</title>
		<link>http://www.sep.com/mcterry/2010/04/01/are-uxui-standards-lacking/</link>
		<comments>http://www.sep.com/mcterry/2010/04/01/are-uxui-standards-lacking/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 13:04:40 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[SEP Engineering]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=61</guid>
		<description><![CDATA[Jared Spool has reported that only about 10% of the user interface design questions raised by developers over the course of a typical project can be answered by reference to platform-based published guides. Does this mean that the standards are lacking? Or does this mean that we can&#8217;t categorize UX/UI (User Experience / User Interface) [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Jared Spool has reported that only about 10% of the user interface design questions raised by developers over the course of a typical project can be answered by reference to platform-based published guides.</p></blockquote>
<p style="padding-left: 30px">Does this mean that the standards are lacking?</p>
<p style="padding-left: 30px">Or does this mean that we can&#8217;t categorize UX/UI (User Experience / User Interface) design specific enough, and apply it to a platform?</p>
<p style="padding-left: 30px">Or worse, does this mean that the people who are responsible for defining and publishing these guides don&#8217;t know their users or know how their users actually use said platforms?</p>
<p>These are just a few of the questions that keep running through my head as I continue to explore usability and UX/UI design.  Hopefully I can find answers to some of these questions in the near future.</p>
<p>___</p>
<p>Currently reading:  <a href="http://www.amazon.com/Software-Use-Practical-Methods-Usage-Centered/dp/0201924781" target="_blank">&#8220;Software For Use &#8211; A Practical Guide to the Models and Methods of Usage-Centered Design&#8221;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2010/04/01/are-uxui-standards-lacking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

