<?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>Bryan Denny</title>
	<atom:link href="http://www.bryandenny.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bryandenny.com</link>
	<description>The Life of a Programmer</description>
	<lastBuildDate>Fri, 27 Aug 2010 01:02:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>BOWMAN GRAY STADIUM RADIO FREQUENCIES FOR DRIVERS</title>
		<link>http://www.bryandenny.com/index.php/2010/08/26/bowman-gray-stadium-radio-frequencies-for-drivers/</link>
		<comments>http://www.bryandenny.com/index.php/2010/08/26/bowman-gray-stadium-radio-frequencies-for-drivers/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 01:01:26 +0000</pubDate>
		<dc:creator>mandlar</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.bryandenny.com/?p=1070</guid>
		<description><![CDATA[My brother, his wife and I have been going to a lot of Bowman Gray Races this year.  Towards the end of the season, he started using his scanner to pick up on the chatter that the drivers and their spotters were having during the races.  So I ordered myself a scanner too, a Uniden [...]]]></description>
			<content:encoded><![CDATA[<p>My brother, his wife and I have been going to a lot of <a href="http://www.bowmangrayracing.com/">Bowman Gray Races</a> this year.  Towards the end of the season, he started using his scanner to pick up on the chatter that the drivers and their spotters were having during the races.  So I ordered myself a scanner too, a <a href="http://www.amazon.com/Uniden-BC72XLT-Handheld-Scanner-Black/dp/B0002QIBNK/ref=cm_cr_pr_product_top">Uniden BC72XLT</a>, which has an awesome close call capture feature that will pick up radio frequencies within about line of sight distance.  That feature alone beats scanning a frequency range if you are close enough to the action.</p>
<p>We&#8217;ve started compiling a list of drivers and their frequencies in a Google document that you can find here: <a href="http://www.bowmangrayfrequencies.com ">http://www.bowmangrayfrequencies.com</a> which is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License</a>.  That means you can use it, share it, do whatever you want with it so long as you attribute Scott Denny and don&#8217;t sell it.</p>
<p>You can also find my bank setup for my scanner here: <a href="http://bit.ly/BryansScanner">http://bit.ly/BryansScanner</a> which includes local radio frequencies for Stokes, Surry and Forsyth county, as well as the frequencies of the  Bowman Gray drivers broken down by both banks and sorted by driver number.  The spread sheet document is separated into three separate sheets called Local (banks for Stokes, Surry and Forsyth), Bowman Gray (banks for Officials, Stadium Stock, Street Stock, Sportsman, my favorites, and Modifieds) and Drivers (list of drivers and their frequencies sort by their car number for quick look-ups at the track).  My spread sheet document is also licensed under the same <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons license</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandenny.com/index.php/2010/08/26/bowman-gray-stadium-radio-frequencies-for-drivers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOW TO NOT HANDLE EXCEPTIONS: GDI+ GENERIC EXCEPTION</title>
		<link>http://www.bryandenny.com/index.php/2010/06/09/how-to-not-handle-exceptions-gdi-generic-exception/</link>
		<comments>http://www.bryandenny.com/index.php/2010/06/09/how-to-not-handle-exceptions-gdi-generic-exception/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 18:13:21 +0000</pubDate>
		<dc:creator>mandlar</dc:creator>
				<category><![CDATA[computers]]></category>

		<guid isPermaLink="false">http://www.bryandenny.com/index.php/2010/06/09/how-to-not-handle-exceptions-gdi-generic-exception/</guid>
		<description><![CDATA[A few months ago at work, I came across the worst possible exception I have ever seen thrown by a program:

A generic error occurred in GDI+

For those who don&#8217;t know, GDI+ is the graphics library for Windows that  is supported in .NET via the System.Drawing namespace.
So, what is so bad about this?  It doesn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago at work, I came across the worst possible exception I have ever seen thrown by a program:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">A generic error occurred in GDI<span style="color: #339933;">+</span></pre></div></div>

<p>For those who don&#8217;t know, GDI+ is the graphics library for Windows that  is supported in .NET via the <em>System.Drawing </em>namespace.</p>
<p>So, what is so bad about this?  <strong>It doesn&#8217;t tell me why this error occurred!</strong>  There is no inner exception passed along.  If I don&#8217;t know the source of the problem that is causing the exception, then how can I prevent the exception from being thrown?  Heck, how can I even catch this exception and know what to do with it? Did the memory get full?  Was a file not found? Is a file being used by another process? Did the world blow up?  WHAT THE HELL HAPPENED?</p>
<p>After a <a href="http://stackoverflow.com/search?q=generic+excpetion+occurred+gdi">quick search</a> on <a href="http://stackoverflow.com/">StackOverflow</a> I came up with a number of <em>possible</em> sources of the problem, but at best <strong>we are guessing</strong> because the exception tell us <strong>absolutely nothing!</strong></p>
<ul>
<li><a href="http://stackoverflow.com/questions/1772083/when-drawing-an-image-system-runtime-interopservices-externalexception-a-generi">The stream or file used for the image or bitmap cannot be closed before the image or bitmap is closed</a> due to a <a href="http://support.microsoft.com/Default.aspx?id=814675">dependency between the image/bitmap and the stream/file that it was constructed from</a></li>
<li><a href="http://stackoverflow.com/questions/2259958/please-help-me-find-a-solution-for-a-generic-error-occurred-in-gdi">There could be a read/write permission failure on the directory that you saving the image to </a></li>
<li><a href="http://stackoverflow.com/questions/997902/a-generic-error-occurred-in-gdi-when-saving-bitmap-object-as-jpeg-c">Bitmap doesn&#8217;t support 8-bit grayscale</a></li>
<li><a href="http://stackoverflow.com/questions/1044085/a-generic-error-occurred-in-gdi">It could be some sort of File IO underlying exception being thrown</a></li>
</ul>
<p>And the list goes on and on with further suggestions.  The thing that baffled me is that my GDI+ exception occurs <em>randomly</em>.  It doesn&#8217;t happen every single time I run my GDI+ functions.  I <strong>think</strong> it has to do with some sort of file lock going on, but honestly, <strong>I have no idea because the GDI+ generic exception is a worthless piece of information.</strong>  I re-wrote my code to ensure that all file handles are closed after being used.  I even tried copying the bitmap created from a file into a <strong>NEW </strong>bitmap to remove the dependency between the bitmap and the original file.  Nothing.</p>
<p>Personally, I would love to meet the developer who thought swallowing up the inner exceptions was a fabulous idea and reprimand the hell out of him or her. And why hasn&#8217;t Microsoft updated the library with better exceptions?</p>
<p>So, the moral of the story folks is to don&#8217;t write code like this:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">try</span>
<span style="color: #009900;">&#123;</span>
     <span style="color: #666666; font-style: italic;">// one or a million lines of code</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
     <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;A generic error occured in [program name]!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.bryandenny.com/index.php/2010/06/09/how-to-not-handle-exceptions-gdi-generic-exception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WHAT I LEARNED FROM WRITING MY FIRST ANDROID APPLICATION</title>
		<link>http://www.bryandenny.com/index.php/2010/05/25/what-i-learned-from-writing-my-first-android-application/</link>
		<comments>http://www.bryandenny.com/index.php/2010/05/25/what-i-learned-from-writing-my-first-android-application/#comments</comments>
		<pubDate>Tue, 25 May 2010 06:48:24 +0000</pubDate>
		<dc:creator>mandlar</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://www.bryandenny.com/index.php/2010/05/25/what-i-learned-from-writing-my-first-android-application/</guid>
		<description><![CDATA[I just recently released my first Android application, Tippy Tipper, a tipping calculator.  From writing this app I learned a number of things as a new Android developer and decided that I should write down and share some of these tips and tricks for other new Android developers who might come across them.  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.bryandenny.com/index.php/2010/05/24/tippy-tipper-the-tip-calculator-released/">I just recently released my first Android application</a>, Tippy Tipper, a tipping calculator.  From writing this app I learned a number of things as a new Android developer and decided that I should write down and share some of these tips and tricks for other new Android developers who might come across them.  My application is open source and you can find the source code at its Google Code project site <a href="http://code.google.com/p/tippytipper/">here</a>.  My hope is that someone else can benefit and learn from what I have gone through these past couple of months.</p>
<p><strong>Choosing an application to build<br />
</strong></p>
<p>What should you write?  Well, that is up to you, but if this is your first Android application then my recommendation is to choose something <strong>simple</strong>. You may know Java, but you do not know the Android framework.  Gently ease yourself into the Android framework instead of creating a lot of frustration and headaches as you attempt to do something overly complex when you do not even grasp how layouts work.  I recommend creating an application that you should be able to complete within a month or two at most, because once you complete this simple application you will have a sense of accomplishment which will encourage you to build something even more difficult and challenging.  This positive reinforcement will keep you from burning out early in frustration. You essentially want to aim your application a couple of notches beyond the <a href="http://developer.android.com/guide/tutorials/hello-world.html">Hello World app</a>.</p>
<p>Personally, I chose a tip calculator for a few key reasons:</p>
<ul>
<li>Tip calculators are common, so there are a lot of examples out there.  I can learn from other people&#8217;s UIs and see how I can make mine <em>better</em></li>
<li>I wasn&#8217;t happy with any of the available tip calculators on the market</li>
<li>I can use it, nearly every day.  Therefore, I can <a href="http://www.joelonsoftware.com/articles/fog0000000012.html">dog food</a> my app</li>
<li>It is <strong>simple</strong> and covers most of the Android basics: 20 buttons (event handling), preference, multiple activities, etc.</li>
</ul>
<p><strong>How I designed my application</strong></p>
<p>My approach to my Android app was to try and fit it into a MVC (Model-View-Controller) design pattern. In Android, the <strong>Activity </strong>classes act as both the View and the Controller.  It behaves as a View because it renders the layouts to the screen and it behaves as a Controller by adding event handlers (onClick(), etc.) to objects in the View.  The last piece is the Model, which in my case is a completely independent service (not an Android service, I simply am calling it a service in general) that provides functions to access and manipulate data (calculate tip, get the tip amount, split the bill, etc.).  My service is stand alone and therefore easily unit tested by <a href="http://www.junit.org/">JUnit</a>.  For the most part, the UI of my app simply calls functions found in my service and then updates the View with new information from my service.</p>
<p><strong>MVC Example</strong></p>
<p>On the first main activity of the application (the keypad screen) we have an EditBox that shows the current entered BillAmount and some buttons (0-9) to append to the BillAmount, delete the last digit of the BillAmount, or to continue to the next Activity.</p>
<p><img src="http://sphotos.ak.fbcdn.net/hphotos-ak-ash1/hs529.ash1/31063_811375040778_2717476_46077650_2014248_n.jpg" alt="" height="360" width="202"/></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">...
<span style="color: #339933;">&lt;</span>EditText
     android<span style="color: #339933;">:</span>id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;@+id/txt_amount&quot;</span>
     style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;@style/BillAmountEditText&quot;</span><span style="color: #339933;">/&gt;</span>
...
<span style="color: #339933;">&lt;</span>Button
     android<span style="color: #339933;">:</span>id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;@+id/btn_five&quot;</span>
     style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;@style/CalculatorButton&quot;</span>
     android<span style="color: #339933;">:</span>text<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;5&quot;</span> <span style="color: #339933;">/&gt;</span>
...</pre></td></tr></table></div>

<p>When you click the &#8220;5&#8243; button, the following event handler is called:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onCreate<span style="color: #009900;">&#40;</span>Bundle savedInstanceState<span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
...
     <span style="color: #003399;">View</span> btn_five <span style="color: #339933;">=</span> findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">btn_five</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     btn_five.<span style="color: #006633;">setOnClickListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> OnClickListener<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
     <span style="color: #009900;">&#123;</span>
          <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span><span style="color: #003399;">View</span> v<span style="color: #009900;">&#41;</span>
          <span style="color: #009900;">&#123;</span>
               AddBillAmount<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;5&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
     <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
...
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> AddBillAmount<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> number<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
     TippyTipperApplication appState <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>TippyTipperApplication<span style="color: #009900;">&#41;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getApplication</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
     appState.<span style="color: #006633;">service</span>.<span style="color: #006633;">AppendNumberToBillAmount</span><span style="color: #009900;">&#40;</span>number<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
     BindData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>The AddBillAmount gets the instance of the service (more about this below, see <strong>Global Singleton</strong>) and calls the service&#8217;s AppendNumberToBillAmount():</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> AppendNumberToBillAmount<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> number<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
     <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>BillEntry.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span>
     <span style="color: #009900;">&#123;</span>
          BillEntry <span style="color: #339933;">=</span> BillEntry <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;&quot;</span> <span style="color: #339933;">+</span> number<span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
     <span style="color: #000066; font-weight: bold;">double</span> amount <span style="color: #339933;">=</span> <span style="color: #003399;">Double</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>BillEntry<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     amount <span style="color: #339933;">=</span> amount <span style="color: #339933;">/</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
&nbsp;
     BillAmount <span style="color: #339933;">=</span> amount<span style="color: #339933;">;</span>
     BillAmountBeforeTax <span style="color: #339933;">=</span> BillAmount<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Which appends the number to the end of our service&#8217;s BillEntry string and then converts it into a double amount which is saved to BillAmount and BillAmountBeforeTax.  Now the Controller will call BindData (ASP.NET term; I&#8217;m a C#/ASP.NET developer by day) which will refresh our View with the service&#8217;s updated BillAmount:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> BindData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
      TippyTipperApplication appState <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>TippyTipperApplication<span style="color: #009900;">&#41;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getApplication</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      EditText txt_amount <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>EditText<span style="color: #009900;">&#41;</span>findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">txt_amount</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      txt_amount.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>appState.<span style="color: #006633;">service</span>.<span style="color: #006633;">GetBillAmount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Viola! A simple MVC pattern put to good use.  Now we can easily take out Model/service and apply unit testing to it:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">@Test <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> AppendNumberToBillAmount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
     TipCalculatorService service <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TipCalculatorService<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     service.<span style="color: #006633;">AppendNumberToBillAmount</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     assertTrue<span style="color: #009900;">&#40;</span>service.<span style="color: #006633;">GetBillAmount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;$0.01&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>Global Singleton</strong></p>
<p>One of the first problems I had with my Model was always having a singleton of it available.  An important thing to note with Activities is that <strong>they are destroyed and re-created </strong>whenever the user rotates their phone from vertical to landscape or vice-versa.  Therefore, if you declare a singleton inside of you Activity, then it will be gone when the Activity is re-created. The workaround for this is to instead create the singleton at the Application layer, making it globally accessible to ALL activities.</p>
<p>First you have to create a class that extends Application and contains your singleton:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TippyTipperApplication <span style="color: #000000; font-weight: bold;">extends</span> Application 
<span style="color: #009900;">&#123;</span>     
      <span style="color: #000000; font-weight: bold;">public</span> TipCalculatorService service <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TipCalculatorService<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>As seen earlier, you now simply have to get an instance of the Application in order to access your service:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">TippyTipperApplication appState <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>TippyTipperApplication<span style="color: #009900;">&#41;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getApplication</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
appState.<span style="color: #006633;">service</span>.<span style="color: #006633;">AppendNumberToBillAmount</span><span style="color: #009900;">&#40;</span>number<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>Using Preferences</strong></p>
<p>Creating the preference activity is perhaps one of the easiest things to do in Android.  You simply have to create a <a href="http://code.google.com/p/tippytipper/source/browse/trunk/Tippy%20Tipper/res/xml/settings.xml">layout</a> and attach the Layout to a class that extends PreferenceActivity:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Settings <span style="color: #000000; font-weight: bold;">extends</span> PreferenceActivity
<span style="color: #009900;">&#123;</span>
     @Override
     <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> onCreate<span style="color: #009900;">&#40;</span>Bundle savedInstanceState<span style="color: #009900;">&#41;</span>
     <span style="color: #009900;">&#123;</span>
          <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">onCreate</span><span style="color: #009900;">&#40;</span>savedInstanceState<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          addPreferencesFromResource<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">xml</span>.<span style="color: #006633;">settings</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
&nbsp;
     <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> getDefaultTipPercentage<span style="color: #009900;">&#40;</span><span style="color: #003399;">Context</span> context<span style="color: #009900;">&#41;</span>
     <span style="color: #009900;">&#123;</span>
          <span style="color: #000000; font-weight: bold;">return</span> PreferenceManager.<span style="color: #006633;">getDefaultSharedPreferences</span><span style="color: #009900;">&#40;</span>context<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;default_tip_percentage&quot;</span>, <span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
....
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>So long as you don&#8217;t need a custom dialog, then Android handles the saving/loading of dialog values for you in the background.  In order to retrieve the preference value:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">double</span> defaultTipPercentage <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">double</span><span style="color: #009900;">&#41;</span>Settings.<span style="color: #006633;">getDefaultTipPercentage</span><span style="color: #009900;">&#40;</span>getBaseContext<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>But what if you do need to have a custom preference dialog?</p>
<p><strong>Creating and using a custom preference dialog</strong></p>
<p>For setting the default tip percentage values, I wanted to use the SeekBar similar to how it is done on the Activity in which you choose a tip percentage:  </p>
<p><img src="http://sphotos.ak.fbcdn.net/hphotos-ak-ash1/hs529.ash1/31063_811375050758_2717476_46077652_2033629_n.jpg" alt="" height="360" width="202" /></p>
<p>No such thing exists in the Android SDK so I either had to create my own or see if someone had already made their own.  Thankfully, <a href="http://android.hlidskialf.com/blog/code/android-seekbar-preference">someone had already made a SeekBar preference</a>.</p>
<p>The key important thing to rolling your own custom preference dialog is knowing how to get your stored value:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>shouldPersist<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
     mValue <span style="color: #339933;">=</span> getPersistedInt<span style="color: #009900;">&#40;</span>mDefault<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>And updating your stored value:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>shouldPersist<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
      persistInt<span style="color: #009900;">&#40;</span>value <span style="color: #339933;">+</span> mMin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>Extending preference with min value (How to add attributes to your widgets)</strong></p>
<p>When I originally used the SeekBarPreference, I was also using it for the preference dialog of setting the default number of people to split the bill by. This means that the SeekBar has to go from 2 to max_value, instead of 0 to max_value. So I had to extend the SeekBarPreference to allow this.  My first problem was that the Android name space does not have an android:min defined, only an android:max.</p>
<p>I have to create a min attribute in a res/values/attr.xml file:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>resources<span style="color: #339933;">&gt;</span>
     <span style="color: #339933;">&lt;</span>declare<span style="color: #339933;">-</span>styleable name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;SeekBarPreference&quot;</span><span style="color: #339933;">&gt;</span>
          <span style="color: #339933;">&lt;</span>attr name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;min&quot;</span> format<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;string&quot;</span> <span style="color: #339933;">&gt;</span>
     <span style="color: #339933;">&lt;/</span>declare<span style="color: #339933;">-</span>styleable<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>resources<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Then I have to reference the namespace in the Preference layout:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>PreferenceScreenxmlns<span style="color: #339933;">:</span>android<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://schemas.android.com/apk/res/android&quot;</span>
xmlns<span style="color: #339933;">:</span>app<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://schemas.android.com/apk/res/net.mandaria.tippytipper&quot;</span><span style="color: #339933;">&gt;</span>
     <span style="color: #339933;">&lt;</span>PreferenceCategory android<span style="color: #339933;">:</span>title<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Tipping Options&quot;</span><span style="color: #339933;">&gt;</span>
          <span style="color: #339933;">&lt;</span>net.<span style="color: #006633;">mandaria</span>.<span style="color: #006633;">tippytipper</span>.<span style="color: #006633;">preferences</span>.<span style="color: #006633;">SeekBarPreference</span>
          android<span style="color: #339933;">:</span>key<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;default_tip_percentage&quot;</span>
          android<span style="color: #339933;">:</span>title<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Default Tip Percentage&quot;</span>
          android<span style="color: #339933;">:</span>summary<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Percentage to tip by default&quot;</span>
          android<span style="color: #339933;">:</span>dialogMessage<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Percentage to tip by default&quot;</span>
          android<span style="color: #339933;">:</span>defaultValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;15&quot;</span>
          android<span style="color: #339933;">:</span>text<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;%&quot;</span>
          android<span style="color: #339933;">:</span>max<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;40&quot;</span>
          app<span style="color: #339933;">:</span>min<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;0&quot;</span>
     <span style="color: #339933;">/&gt;</span>
...</pre></td></tr></table></div>

<p>Finally, to get the min value programmatically:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> appns<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://schemas.android.com/apk/res/net.mandaria.tippytipper&quot;</span><span style="color: #339933;">;</span>
TypedArray a <span style="color: #339933;">=</span> context.<span style="color: #006633;">obtainStyledAttributes</span><span style="color: #009900;">&#40;</span>attrs, R.<span style="color: #006633;">styleable</span>.<span style="color: #006633;">SeekBarPreference</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
mMin <span style="color: #339933;">=</span> a.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">styleable</span>.<span style="color: #006633;">SeekBarPreference_min</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Note the usage of the TypedArray against the attrs.xml file created above.  This is different than grabbing android:max programmatically (I could simply be missing something above, but it works):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> androidns<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;http://schemas.android.com/apk/res/android&quot;</span><span style="color: #339933;">;</span>
mMax <span style="color: #339933;">=</span> attrs.<span style="color: #006633;">getAttributeIntValue</span><span style="color: #009900;">&#40;</span>androidns,<span style="color: #0000ff;">&quot;max&quot;</span>, <span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>Android is missing the NumberPicker widget in the SDK</strong></p>
<p>For whatever reason, the NumberPicker widget is not publicly available to developers.  It is there, but it is hidden in the internals of Android and I didn&#8217;t want to access private APIs by finding it by reflection.  Instead I found it in the Android source code and was about to pull it out when I found that <a href="http://www.quietlycoding.com/?p=5">someone else had already beat me to it</a>.</p>
<p>I really do not understand why this widget is not publicly available, because forcing a user to only select an integer value is very nice (with the ability to enter the integer with the +/- buttons or typing it in).</p>
<p>I used the NumberPicker in my own custom dialog preference called <a href="http://code.google.com/p/tippytipper/source/browse/trunk/Tippy%20Tipper/src/net/mandaria/tippytipper/preferences/DecimalPreference.java">DecimalPreference</a>:</p>
<p><img src="http://sphotos.ak.fbcdn.net/hphotos-ak-snc3/hs589.snc3/31063_812098451058_2717476_46111927_877009_n.jpg" /></p>
<p><strong>Using LDPI, MDPI, and HDPI with Android 1.5+ (How to set a min API and have a higher target API)</strong></p>
<p>In order to get my app&#8217;s launcher icon to work with multiple DPIs (LDPI, MDPI, and HDPI), a feature of Android 1.6+, and to have my app still work on Android 1.5 phones, I had to set the app&#8217;s minSDK value to 1.5 and set the targetSDK to 1.6:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>uses<span style="color: #339933;">-</span>sdk android<span style="color: #339933;">:</span>minSdkVersion<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;3&quot;</span>  android<span style="color: #339933;">:</span>targetSdkVersion<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;4&quot;</span> <span style="color: #339933;">/&gt;</span></pre></td></tr></table></div>

<p><strong><br />
Applications with multiple versions (free / paid / donate)</strong></p>
<p>If you plan on having more than one version of your app, then it must be noted that they MUST have different package names on the Android Market.  I did not realize this until I was ready to release and had to spend about an hour or so creating a Donate branch in my SVN and renaming the package references everywhere from &#8220;net.mandaria.*&#8221; to &#8220;net.mandaria.tippytipper.*&#8221; and &#8220;net.mandaria.tippytipperdonate.*&#8221;</p>
<p>I feel like my Donate branch isn&#8217;t the best idea.  For every release I will have to merge the trunk into the Donate branch and rename the package from &#8220;net.mandaria.tippytipper.*&#8221; to &#8220;net.mandaria.tippytipperdonate.*&#8221; and I cannot think of a better way to do it.  Any suggestions?</p>
<p><strong>Reporting error handling</strong></p>
<p>One thing I have yet to implement is reporting any errors thrown in the app by users to me.  The <a href="http://code.google.com/p/android-remote-stacktrace/">Android Remote Stacktrace</a> project looks promising, but I would have to enable internet privileges in my app when it does not need them otherwise (how acceptable is that?).  Or I could create an e-mail intent on errors (but that is less anonymous and they may be less willing to submit the report).  Any thoughts on this?</p>
<p><strong>PayPal API == Better way to donate?</strong></p>
<p>PayPal just recently <a href="https://www.x.com/community/ppx/xspaces/mobile/mep">released</a> an Android API for making PayPal transactions inside of apps.  This could be an alternative way to collect donations for an open source app instead of (or in addition to) dealing with a second donate version of the app.  But it could also potentially break the Developer&#8217;s Distribution Agreement:</p>
<blockquote><p>3.3  You may also choose to distribute Products for free.  If the  Product is free, you will not be charged a Transaction Fee.  You may not  collect future charges from users for copies of the Products that those  users were initially allowed to download for free.  This is not  intended to prevent distribution of free trial versions of the Product  with an “upsell” option to obtain the full version of the Product:  Such  free trials for Products are encouraged.  However, if you want to  collect fees after the free trial expires, <strong>you must collect all fees for  the full version of the Product through the Payment Processor on the  Market</strong>.  In this Agreement, “free” means there are no charges or fees of  any kind for use of the Product.   All fees received by Developers for  Products distributed via the Market must be processed by the Market’s  Payment Processor.</p></blockquote>
<p>Technically, the donation is not required for use of the Product as it is still provided 100% free.  But it isn&#8217;t being processed by Google&#8217;s Payment Processor.  So I do not know whether or not to explore this route.</p>
<p><strong>Conclusion</strong></p>
<p>I&#8217;m very excited about Android.  I&#8217;m very happy to now be a part of its developer community.  I&#8217;m still very new at it and am learning something new every day.  I hope that these comments of mine help someone else, or if any of them are totally wrong, please feel free to correct me.  I appreciate all the constructive criticism I can get to improve both my application and myself as a developer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandenny.com/index.php/2010/05/25/what-i-learned-from-writing-my-first-android-application/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>TIPPY TIPPER: THE TIP CALCULATOR RELEASED</title>
		<link>http://www.bryandenny.com/index.php/2010/05/24/tippy-tipper-the-tip-calculator-released/</link>
		<comments>http://www.bryandenny.com/index.php/2010/05/24/tippy-tipper-the-tip-calculator-released/#comments</comments>
		<pubDate>Tue, 25 May 2010 01:01:23 +0000</pubDate>
		<dc:creator>mandlar</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://www.bryandenny.com/index.php/2010/05/24/tippy-tipper-the-tip-calculator-released/</guid>
		<description><![CDATA[After a couple of months of diving into the programming world of Android, I have finally released my first Android phone application! Tippy Tipper is a simple and open source Android Tipping Calculator. It is the result of my first experience with learning Android and I have made it an open source project so that [...]]]></description>
			<content:encoded><![CDATA[<p>After a couple of months of diving into the programming world of Android, I have finally released my first Android phone application! Tippy Tipper is a simple and <strong>open source </strong>Android Tipping Calculator. It is the result of my first experience with learning Android and I have made it an open source project so that hopefully other new Android programmers can use it as an example application to learn from. Since it is open source, it is completely <strong>free </strong>(no ads) and donations are always welcome (although I honestly do not expect many).</p>
<p>Some <strong>features </strong>of Tippy Tipper include:</p>
<ul>
<li>Enter bill via custom keypad</li>
<li>Select tip by slider or  three configurable buttons</li>
<li>Real time calculations</li>
<li>Round  up or down by tip or total</li>
<li>Can split the bill</li>
<li>Can  optionally exclude a tax rate from the bill</li>
</ul>
<p>I still have a <a href="http://code.google.com/p/tippytipper/issues/list">list of things to do</a> with the app, so I will continue to work on it as time allows (but I am planning on starting another app soon, most likely a game).  I am also open for any new feature requests and I am sure there will also be bug reports.</p>
<p><strong>Supported:</strong> The app is built against the 1.6 API, but should run on any phone with Android 1.5 or greater.  I primarily tested the app on my Motorola Droid, but I also tested it against other resolutions and DPIs using the Android emulator.</p>
<p><strong>Why:</strong> I made this app because I did not want to get in over my head with an impossible first project while learning Android. I wanted something simple that I know I could do in my spare time.  That and I thought I could make a better tipping calculator than the other ones on the Android Market.  Plus, I plan on using it when I go out to eat. <a href="http://www.joelonsoftware.com/articles/fog0000000012.html">Dog fooding</a> at its finest!</p>
<p><strong>Download: </strong>You can find the app in the market by scanning the following QR code or you can obtain the source code from the <a href="http://code.google.com/p/tippytipper/">project&#8217;s Google Code site</a>.</p>
<p><img src="http://sphotos.ak.fbcdn.net/hphotos-ak-snc3/hs569.snc3/31063_811446901768_2717476_46081594_613147_n.jpg" /></p>
<p><strong>Screenshots:</strong></p>
<p>Vertical layouts:</p>
<p><img src="http://sphotos.ak.fbcdn.net/hphotos-ak-ash1/hs529.ash1/31063_811375040778_2717476_46077650_2014248_n.jpg" height="360" width="202" /> <img src="http://sphotos.ak.fbcdn.net/hphotos-ak-ash1/hs529.ash1/31063_811375050758_2717476_46077652_2033629_n.jpg" height="360" width="202" /> <img src="http://hphotos-snc3.fbcdn.net/hs569.snc3/31063_811375065728_2717476_46077654_4298708_n.jpg" height="360" width="202" /> <img src="http://hphotos-snc3.fbcdn.net/hs589.snc3/31063_811375070718_2717476_46077655_2076851_n.jpg" height="360" width="202" /></p>
<p>Horizontal layouts:</p>
<p><img src="http://sphotos.ak.fbcdn.net/hphotos-ak-ash1/hs529.ash1/31063_811375035788_2717476_46077649_3715423_n.jpg" height="202" width="360" /> <img src="http://sphotos.ak.fbcdn.net/hphotos-ak-snc3/hs589.snc3/31063_811375045768_2717476_46077651_3200234_n.jpg" height="202" width="360" /> <img src="http://sphotos.ak.fbcdn.net/hphotos-ak-ash1/hs529.ash1/31063_811375055748_2717476_46077653_2449769_n.jpg" height="202" width="360" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandenny.com/index.php/2010/05/24/tippy-tipper-the-tip-calculator-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MY DROID EXPERIENCE: SIX MONTHS LATER</title>
		<link>http://www.bryandenny.com/index.php/2010/05/01/my-droid-experience-six-months-later/</link>
		<comments>http://www.bryandenny.com/index.php/2010/05/01/my-droid-experience-six-months-later/#comments</comments>
		<pubDate>Sat, 01 May 2010 21:00:19 +0000</pubDate>
		<dc:creator>mandlar</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://www.bryandenny.com/index.php/2010/05/01/my-droid-experience-six-months-later/</guid>
		<description><![CDATA[So back in November, I bought the new Motorola Droid about a week after it was released.  I&#8217;ve never owned a smart phone before, much less an Android platform device.  The closest thing I had was an iPod Touch, which is essentially an iPhone minus the phone. Little did I know what I was getting [...]]]></description>
			<content:encoded><![CDATA[<p>So back in November, I bought the new Motorola Droid about a week after it was released.  I&#8217;ve never owned a smart phone before, much less an Android platform device.  The closest thing I had was an iPod Touch, which is essentially an iPhone minus the phone. Little did I know what I was getting myself into!</p>
<p>When I originally received the device, I knew absolutely nothing about Android except that it was an open source OS created by Google and that the phone would be heavily tied in to my Gmail/Google account, which was a good thing because I absolutely love the services Google provides and I use most of them every day (Gmail, Calendar, Reader, Voice, Picasa, etc.).  I came in knowing that the App Market would not nearly be as strong as Apple&#8217;s App Store, but I did know that programming for Android was done in Java and that there was no &#8220;walled garden&#8221; preventing me from writing and immediately releasing an application without having to jump through a series of policies, rules, or waiting for approval.  I was excited and looking forward to trying my hand at Android development since I already had Java experience from college.</p>
<p>The original 2.0.0 OS loaded onto the Droid was quite remarkable, but somewhat buggy. My biggest problem was with a weird bug with folders.  Being used to the iTouch&#8217;s multiple-screen layout and organizing my apps by screen, I instantly started organizing my apps on my Droid into folders such as &#8220;Social&#8221;, &#8220;Music&#8221;, &#8220;Games&#8221;, etc.  However, sometimes these folders simply wouldn&#8217;t open when I tapped on them unless the Android.Home process was restarted (or the phone was rebooted, which would essentially restart the Android.Home process). The release of the 2.0.1 update, for the most part, fixed this slight annoyance with increased OS stability and sped up performance tremendously. I was quite satisfied with my initial user experience with the phone and the quick patch response time to these minor quirks.  The 2.1 OS update provided even more features, such as Picasa integration, live wallpapers, multitouch in Google apps, voice input on any input field, etc. But it left me hungering for more as the stock Droid has only 3 screens, even with Android 2.1 (on the plus side, a Home replacement app called Helixlauncher has resolved this problem for now).</p>
<p><strong>Things that I love about Android:</strong></p>
<ul>
<li><strong>Application integration:</strong> I love the model of how apps work on the Android system.  If you are not happy with the stock browser, then simply replace the entire app with another browser, such as Dolphin.  And this replacement happens across the board.  Whenever any other app requests for a web browser app to open, you can choose which browser app (stock or <a href="http://www.appbrain.com/app/com.mgeek.android.DolphinBrowser.Browser">Dolphin</a>) you want it to open and you can even set the Dolphin browser as the default (meaning you&#8217;ll never see the stock browser app again unless you explicitly run it).  This model also makes it incredibly easy for apps to integrate with each other.  If your app needs to pull up the camera and take a picture, you can call the camera app, take a picture, and then pass the data back to the original app.  Or similarly, if you want to share a piece of information (a url, email, whatever) to different social networks, then each social network app just needs to have a hook/listener for a share event.</li>
<li><strong>Application development:</strong> Integration with the Eclipse IDE is awesome. Setting up the environment doesn&#8217;t take that long and is not that difficult. I&#8217;m still learning how to program for my phone, but the advantages of an open-policy App Market just can&#8217;t be beat.</li>
<li><strong>Multitasking</strong>: Once you start multitasking, you can&#8217;t easily go back to a non-multitasking device (like the iTouch or iPhone).  Never again does Pandora have to stop playing music because I wanted to check my email or Facebook. The pull-down taskbar at the top of the Android&#8217;s OS and long press on the home button (an alt-tab like effect) makes multitasking between programs a snap.</li>
<li><strong>Navigation:</strong> I&#8217;ve never owned a GPS device before. And now I still don&#8217;t need to own a GPS device with Google&#8217;s <strong>FREE</strong> Navigation app.</li>
<li><strong>Google integration</strong>: The Gmail and Google Calendar apps sync up very nicely to the cloud, along with Google Voice and Picasa.</li>
<li><strong>Physical keyboard:</strong> Some people don&#8217;t like the physical keyboard.  But I never had a QWERTY keyboard before on my old phones and therefore I love it. I usually do text input via the physical keyboard instead of the virtual keyboard. I wish the physical keyboard would allow you to use auto-correct like the virtual keyboard because the auto-correct on Android is very nicely done. You are given a list of words that you can choose as you type. I was often frustrated with Apple&#8217;s auto-correct on my iTouch, especially because of the lack of options (or to cancel auto-correct you had to go so far away from the virtual keyboard). Aside from the stock virtual keyboard, <a href="http://www.swypeinc.com/">Swype</a> is an amazing replacement.  The idea is that you simply slide your finger across the letters to &#8220;type&#8221; the word and the application also provides autocorrection and improves its guessing as you keep using it.</li>
<li><strong>Social integration:</strong> The Facebook app pulls in statuses and profile pictures of contacts from Facebook into the contact directory on the phone. I thought that was a nice integration.  It also pulls in Google profile picture / gTalk statuses into contact information.  And the recent official <a href="http://blog.twitter.com/2010/04/twitter-for-android-robots-like-to.html">Twitter for Android</a> app also pulls in contact information and status updates.</li>
<li><strong>Widgets:</strong> Interacting with apps without launching apps! Plus, <a href="http://levelupstudio.com/widgets/weather">Beautiful Widgets</a> is&#8230; well&#8230;. a beautiful widget! These can be resource hogs, but their benefits (hopefully) outweigh that.</li>
<li><strong>Google Voice:</strong> This application alone receives its own bullet because I love it so much.  The phone and Google Voice integrate together extremely well.  When you make a call you can have the application completely take over and send your calls through your Google Voice number, or you can have it present you an option to choose to send the call via Google Voice or your actual number. This has been immensely helpful for me because for some reason I cannot connect to my girlfriend&#8217;s phone via Verizon in Mount Airy (an area without Verizon cell towers or 3G), but the call will connect through Google Voice.  This puzzles me because Google Voice doesn&#8217;t work through your data plan, it still uses cell towers to connect the call and it will still use up my minutes. Despite the fact that Google Voice uses minutes, you can set it up as a Verizon friends and family number and <strong>save minutes </strong>when talking to a non-Verizon number.  The unlimited texting through Google Voice is also wonderful and you will receive text messages instantly.  With Google Voice on an Android device, you can easily abandon your mobile carrier&#8217;s number and embrace your Google Voice number fully and take advantage of all of its features (transcribed voicemail, record calls,  screen callers leaving voicemails, etc.) so long as you force everyone else to call your Google Voice number instead of your carrier&#8217;s number.</li>
</ul>
<p><strong>Things that I dislike about Android:</strong></p>
<ul>
<li><strong>Battery life:</strong> This really goes for any smart phone device, but the Droid seems to drain the battery quite a bit.  Really this depends on what all sorts of apps, notifications, widgets, etc. are running, but I can hardly get through a day without having to charge my battery. One of the first accessories I purchased was a spare battery for my phone.  I highly recommend one (along with a car charger and dock).</li>
<li><strong>Application updates</strong>:<strong> </strong>Apple blows this out of the water.  Android can only update one app at a time, with up to two concurrently.  There is no update all button.  Because of this, I often have 10-20+ apps always needing updating.  I feel like I&#8217;m playing whack-a-mole 24/7.</li>
<li><strong>Contact management:</strong> Google could have done a better job at this. The web interface for contacts in Gmail just isn&#8217;t that great.  But it sure as hell beats typing in contacts on the phone only. It also does quirky things like merging contacts who share first names, even though you might have two separate entries.  The quick fix is to make sure you include their first AND last name.</li>
<li><strong>Facebook app:</strong> Compared to iTouch/iPhone it is incredibly lacking, despite the nice social integration features into contacts.</li>
<li><strong>The lack of screens:</strong> three screens is all you have to play with. This makes it difficult in deciding what apps, folders, shortcuts, and widgets to place on your home screen. Or if I want to check out a new widget and all three of my home screens are full, then I have to shuffle things around.  But I have alleviated this problem with <a href="http://www.appbrain.com/app/com.helixproject.launcher">Helixlauncher</a>.</li>
<li><strong>Stability</strong>: Sometimes the OS/Android.Home can be completely unresponsive for rather long periods of time (30 seconds or so).  It&#8217;s usually fine if you are patient, but occasionally you just have to re-start the Android.Home process. Again, though, stability depends on what apps and widgets are running, so your mileage may vary.</li>
<li><strong>The Nexus One/OS updates</strong>: After the hype-machine built up the Motorola Droid, hardly a couple of months later the Nexus One makes it&#8217;s debut. Google showers it with their love and affection of Android 2.1, neglecting the fact that the Droid just came out running Android 2.0 (not to mention other devices still chugging along on Android 1.5/1.6). We&#8217;re still waiting on the &#8220;catch up&#8221; game from Motorola and although I know that yes, the Droid will eventually get the 2.1 update, I still feel that the Google exclusivity over their new phone is going to cause some unrest from Droid and other Android device users.  <em>Update</em>: the Droid finally received the 2.1 update, but it lacks some of the features that the Nexus One received (more homescreens, the new app drawer) and it took awhile for Motorola to get it out.</li>
<li><strong>Fragmentation:</strong>Application development is difficult because you have to support Android 1.5/1.6/2.0/2.1 if you want to reach the entire Android market, therefore limiting your apps to the 1.5 API. Hopefully a lot of the older Android devices will get the boost up to Android 2.0/2.1 this year to help alleviate these problems.</li>
<li><strong>Lack of Flash:</strong> Not really that big of a gripe, but watching videos besides Youtube would be nice (hello Hulu?).  Supposedly we&#8217;re getting Flash sometime this year.</li>
<li><strong>Music app:</strong> The stock music app is incredibly lacking. I&#8217;m quite surprised few developers have really tried to take a stab at replacing it (or I haven&#8217;t looked hard enough)</li>
</ul>
<p>I&#8217;ve actually been meaning for quite some time to put my thoughts down on the Motorola Droid.  I hope to continue to write about my experiences with Android and thoughts on apps that I really enjoy (a list can be found <a href="http://www.forceclose.com/questions/1/what-are-your-favorite-android-apps/635#635">here</a>).</p>
<p>Plus, I will have plenty to write about the first application I currently am developing: <a href="http://code.google.com/p/tippytipper/">TippyTipper</a>, a tipping calculator. So stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandenny.com/index.php/2010/05/01/my-droid-experience-six-months-later/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SHOOTING RAW: THE IMPORTANTANCE OF WHITE BALANCE (POST PROCESSING FTW)</title>
		<link>http://www.bryandenny.com/index.php/2010/03/09/shooting-raw-the-importantance-of-white-balance-post-processing-ftw/</link>
		<comments>http://www.bryandenny.com/index.php/2010/03/09/shooting-raw-the-importantance-of-white-balance-post-processing-ftw/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 05:26:50 +0000</pubDate>
		<dc:creator>mandlar</dc:creator>
				<category><![CDATA[camera]]></category>

		<guid isPermaLink="false">http://www.bryandenny.com/index.php/2010/03/09/shooting-raw-the-importantance-of-white-balance-post-processing-ftw/</guid>
		<description><![CDATA[The number one reason you should shoot RAW is that it allows you to adjust your white balance during post processing.  Here is an example of what I&#8217;m talking about:

The shot&#8217;s original white balance is on the right, and the adjusted white balance is on the left.  No more ugly amber light from the street [...]]]></description>
			<content:encoded><![CDATA[<p>The number one reason you should shoot RAW is that it allows you to adjust your white balance during post processing.  Here is an example of what I&#8217;m talking about:</p>
<p><a href="http://www.facebook.com/photo.php?pid=45178494&amp;id=2717476" class="tt-facebook-photo"><img src="http://photos-a.ak.fbcdn.net/hphotos-ak-ash1/hs449.ash1/24743_785178853148_2717476_45178494_7390267_n.jpg" alt="Hot damn, a white balance card makes the world of a difference" border="0" /></a></p>
<p>The shot&#8217;s original white balance is on the right, and the adjusted white balance is on the left.  No more ugly amber light from the street lights of downtown Winston-Salem!</p>
<p>One of the first things I bought for my <a href="http://www.bryandenny.com/index.php/2010/03/02/new-toy-nikon-d5000/">Nikon D5000</a> was a <a href="http://www.amazon.com/WhiBal-White-Balance-Reference-Card/dp/B000ARHJPW/">WhiBal white balance card</a> (a gray card), a must-have if you&#8217;re going to be shooting RAW and want to make these post processing adjustments easily. It&#8217;s usually as simple as click an eye drop tool and clicking on the card (in Lightroom or Aperture).  There really is no good reason to not shoot in RAW.  You&#8217;re given up few megabytes per picture to retain<strong> all</strong> of the shot&#8217;s information, which gives you better options and freedom to work with the picture after it was taken.  Sure, you have to spend a little extra time with your pictures to make them better, but you might be able to make decent shots into great shots! Just remember: once you take that photo in JPEG, that&#8217;s it- it&#8217;s done and baked in (and compressed!).</p>
<p>If you do have a white balance card, remember to use it! And don&#8217;t forget to take another picture of the card (at the subject, unless lighting is constant) whenever the lighting/exposure changes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandenny.com/index.php/2010/03/09/shooting-raw-the-importantance-of-white-balance-post-processing-ftw/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SHOOTING RAW: REMOVING HOT PIXELS</title>
		<link>http://www.bryandenny.com/index.php/2010/03/07/shooting-raw-removing-hot-pixels/</link>
		<comments>http://www.bryandenny.com/index.php/2010/03/07/shooting-raw-removing-hot-pixels/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 13:43:43 +0000</pubDate>
		<dc:creator>mandlar</dc:creator>
				<category><![CDATA[camera]]></category>

		<guid isPermaLink="false">http://www.bryandenny.com/index.php/2010/03/07/shooting-raw-removing-hot-pixels/</guid>
		<description><![CDATA[After shooting in JPEG for a couple of weeks on my new Nikon D5000, I quickly noticed a tiny, pixel-sized bright red spot showing up at the same place in most of pictures.  This was especially noticeable when the red spot was surrounded by darker colors.  At first I thought it might have had to [...]]]></description>
			<content:encoded><![CDATA[<p>After shooting in JPEG for a couple of weeks on my <a href="http://www.bryandenny.com/index.php/2010/03/02/new-toy-nikon-d5000/">new Nikon D5000</a>, I quickly noticed a tiny, pixel-sized bright red spot showing up at the same place in most of pictures.  This was especially noticeable when the red spot was surrounded by darker colors.  At first I thought it might have had to do with a certain condition I was shooting the camera under (high ISO, certain aperture or shutter speed, etc.) but I soon realized it was happening pretty much regardless of any specific condition, so I ruled dust out as the source of the problem.  I wasn&#8217;t too worried about the spots as I could easily and quickly batch-remove them in Lightroom, but it was still annoying and an extra time consuming step in my post-processing work flow.  I showed my brother the following 100% zoom of a picture of <a href="http://picasaweb.google.com/mandlar/2010221SammyPictures50mm#">Sammy</a> to see if he had any ideas on what this might be:</p>
<p><a href="http://www.facebook.com/photo.php?pid=45127214&amp;id=2717476" class="tt-facebook-photo"><img src="http://photos-e.ak.fbcdn.net/hphotos-ak-snc3/hs428.snc3/24682_783427512848_2717476_45127214_2977973_n.jpg" border="0" /></a></p>
<p>He had no idea because he never saw anything like it before in any of his photos. I did some quick Googling to see if anyone else had this issue&#8230;. and low and behold I found out what my problem was: I had a stuck &#8220;hot&#8221; pixel.  &#8220;Hot&#8221; pixels are dead pixels picked up by the camera&#8217;s sensor and are most likely red, green, blue or white.  Already, on a brand new Nikon camera, I had a &#8220;hot&#8221; pixel!  But apparently this is a rather common problem with Nikon cameras.  Unfortunately the only way to remove these &#8220;hot&#8221; pixels is by pixel mapping (which requires shipping your camera to a Nikon repair center for a few weeks) or exchanging your camera (and risking getting more &#8220;hot&#8221; pixels on your replacement). What a sad choice of options.  You would think Nikon would build in pixel mapping into the firmware of the camera.</p>
<p><strong>However, not all is lost!</strong> I discovered that if you shoot in RAW, then &#8220;hot&#8221; pixels will automatically be &#8220;fixed&#8221; for you when you import your pictures into an application like Lightroom without having to perform any of your own spot removals. <em>But the hot pixels are still there</em>.  The software simply automatically compensates for them via algorithms during the conversion process.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandenny.com/index.php/2010/03/07/shooting-raw-removing-hot-pixels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NEW TOY: DELL STUDIO XPS 16</title>
		<link>http://www.bryandenny.com/index.php/2010/03/04/new-toy-dell-studio-xps-16/</link>
		<comments>http://www.bryandenny.com/index.php/2010/03/04/new-toy-dell-studio-xps-16/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 00:41:51 +0000</pubDate>
		<dc:creator>mandlar</dc:creator>
				<category><![CDATA[computers]]></category>

		<guid isPermaLink="false">http://www.bryandenny.com/index.php/2010/03/04/new-toy-dell-studio-xps-16/</guid>
		<description><![CDATA[Another new toy I recently splurged on was a new laptop!  My poor IBM Thinkbad R52 from college is starting to reach the end of its days and my ancient desktop is fairing no better.  I heavily considered getting another IBM Thinkpad because of how well my R52 has held together being thrown around everywhere [...]]]></description>
			<content:encoded><![CDATA[<p>Another new toy I recently splurged on was a new laptop!  My poor <a href="http://www-307.ibm.com/pc/support/site.wss/MIGR-58832.html">IBM Thinkbad R52</a> from college is starting to reach the end of its days and my ancient desktop is fairing no better.  I heavily considered getting another IBM Thinkpad because of how well my R52 has held together being thrown around everywhere in a book bag at college.  But I found their laptops to be extremely expensive to get similar specs (or better) specs from a Dell laptop.  And I&#8217;ve had decent experience with Dells in the past (both as a computer technician and user) so I decided to stick with what I know best (rather than HP or any other well known brand).</p>
<p>So what did I get? A <a href="http://www.dell.com/content/products/productdetails.aspx/laptop-studio-xps-16?c=us&amp;cs=19&amp;l=en&amp;s=dhs">Dell Studio XPS 16</a>.  Even <a href="http://twit.tv/">Leo Laporte</a> <a href="http://techguylabs.com/radio/ShowNotes/Show641#toc19">uses one of these</a>! The specs on mine are as follows:</p>
<ul>
<li>Intel Core i7 720QM 1.6GHz (2.8 GHz Turbo Mode, 6MB Cache)</li>
<li>4GB, DDR3</li>
<li>15.6 inch Wide Screen 16:9    1080p Full HD WLED LCD</li>
<li>Built in webcam with facial recognition</li>
<li>ATI Mobility RADEON HD 4670 1GB</li>
<li>500GB 7200RPM HDD</li>
<li>8X DVD+/-RW</li>
<li>Bluetooth</li>
<li>9 cell battery!</li>
<li>Windows 7 Home Premium 64bit</li>
</ul>
<p>This laptop runs circles around my desktop.  The i7 processor is a QUAD CORE.  Processing pictures in Lightroom on my desktop took <em>forever</em>, but on my laptop it is incredibly snappy! (For reference, my desktop is running an old AMD Athlon single core processor with 2GB of memory.)  The screen is amazingly beautiful, whether looking at my pictures or watching a movie. Unfortunately there was no Blu-ray drive option when I built the laptop, so I&#8217;m not able to fully take advantage of a HD screen unless I&#8217;m streaming HD videos (but neither do I own any Blu-ray DVDs). The 9 cell battery lasts for hours and hours and hours and hours (at least 3+ if it is not processor intensive). I also love, love, love Windows 7.  I was the guinea pig for Windows 7 at work and it is the best thing to happen to Windows since XP.  Vista doesn&#8217;t exist in my mind. I haven&#8217;t gotten around to testing out the video card with any games since I don&#8217;t play many PC games anymore (hello Xbox 360!), but it should be a decent gaming card (not an Alienware, for sure).  My primary intended use of the laptop is for programming and photo processing. Also, a weird side note: the laptop doesn&#8217;t have a numpad (not even a function key enabled one).</p>
<p>The only thing I was upset about with the laptop and Dell was the fact that it took nearly a month to receive the laptop.  I ordered it at the beginning of February and did not receive it until the end of February (including one delay in the shipping of the laptop).</p>
<p>Overall, I&#8217;m quite excited to finally have this blazingly fast laptop in my hands and it has so far met or exceeded all of my expectations!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandenny.com/index.php/2010/03/04/new-toy-dell-studio-xps-16/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>NEW TOY: NIKON D5000</title>
		<link>http://www.bryandenny.com/index.php/2010/03/02/new-toy-nikon-d5000/</link>
		<comments>http://www.bryandenny.com/index.php/2010/03/02/new-toy-nikon-d5000/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 02:04:42 +0000</pubDate>
		<dc:creator>mandlar</dc:creator>
				<category><![CDATA[camera]]></category>

		<guid isPermaLink="false">http://www.bryandenny.com/index.php/2010/03/02/new-toy-nikon-d5000/</guid>
		<description><![CDATA[After receiving a nice tax refund this year, I decided to splurge on something that I have been wanting for quite some time: a DSLR camera!  I ended up purchasing the Nikon D5000, mainly because my brother, my brother-in-law and my uncle all shoot Nikon (and therefore I can share lenses or experiences with them).  [...]]]></description>
			<content:encoded><![CDATA[<p>After receiving a nice tax refund this year, I decided to splurge on something that I have been wanting for quite some time: a DSLR camera!  I ended up purchasing the <a href="http://www.amazon.com/Nikon-D5000-18-55mm-3-5-5-6G-Vari-angle/dp/B00267S7TQ/">Nikon D5000</a>, mainly because <a href="http://picasaweb.google.com/scootinater">my brother</a>, my brother-in-law and <a href="http://donniemh.smugmug.com/">my uncle</a> all shoot Nikon (and therefore I can share lenses or experiences with them).  The usual rule of thumb with purchasing DSLRs is that you either buy based off of equipment you already have, or if this is your first DSLR, then you buy what your friends and family have (for borrowing lenses and equipment).</p>
<p><a href="http://www.facebook.com/photo.php?pid=44959917&amp;id=2717476" class="tt-facebook-photo"><img src="http://photos-f.ak.fbcdn.net/hphotos-ak-snc3/hs152.snc3/17957_777542251958_2717476_44959917_5145974_n.jpg" alt="Say hello to my Nikon D5000!" border="0" /></a></p>
<p><em>The  Nikon D5000 with the kit 18-55mm lens attached</em></p>
<p><strong>Body:</strong> The D5000 is a pretty nice entry-level DSLR.  It has the ability to take short 5 min HD videos (and 20 minute non-HD videos) and has a nifty articulating LCD viewscreen, which combined with LiveView enables some interesting self shots (or angles above your head or at the floor).  Unfortunately the auto focus in LiveView is INCREDIBLY slow (3-5x slower than via the viewfinder).  Don&#8217;t bother using it if timing is a necessity of your shot. However, I found it easier to manually focus shots in LiveView, but there is still an additional shutter delay that can throw off timing. Pictures also look pretty decent when the ISO bumped up to 3200 and above.  There are plenty of other features to discuss, but I&#8217;m still getting familiar with them. I&#8217;ve mainly been shooting in JPEG, but plan on shooting RAW from now on (for the post-processing benefits).</p>
<p><strong>Lenses: </strong>The camera came with a kit lens: a <a href="http://www.amazon.com/Nikon-18-55mm-3-5-5-6G-AF-S-Nikkor/dp/B000ZMCILW/ref=sr_1_2?ie=UTF8&amp;s=electronics&amp;qid=1267302923&amp;sr=1-2">Nikkor 18-55mm F/3.5-5.6 VR</a>.  The lens is a great starter lens, but I have quickly found myself in situations not ideal to this lens.  The first situation is taking pictures of landscapes and wild life beyond my range.  The 18-55mm just does not reach far enough when I tried <a href="http://picasaweb.google.com/mandlar/21310StokesCounty#">shooting at ducks at the pond in King&#8217;s central park</a> or at <a href="http://picasaweb.google.com/mandlar/21410CarliSBabyshowerShannonSHouse#">the lake behind Shannon&#8217;s house</a>.  You can only get so close to the ducks before you exceed their comfort zone or come to the water&#8217;s edge. Therefore I need a telescopic lens! I&#8217;ve considered adding the <a href="http://www.amazon.com/Nikon-55-200mm-4-5-6G-Vibration-Reduction/dp/B000O161X0/">Nikkor 55-200mm F/4-5.6 VR</a> to my bag to supplement the 18-55mm, but I&#8217;m heavily weighing the <a href="http://www.amazon.com/Nikon-VR-II-Telephoto-DX-Format/dp/B002JCSV8A/">Nikkor 18-200mm F/3.5-5.6 VR</a>  option to completely replace the 18-55mm as a very versatile lens for any situation.  The best benefit is not needing to swap lenses (or miss any shots because the wrong lens is on!), yet that comes at the price of a heavier/longer lens and higher cost. I&#8217;m thinking that the pro is outweighing the cons, but I am going to wait a bit before making a purchasing decision.</p>
<p>The other situation I&#8217;ve had problems in is low lit indoor lighting, specifically, but not limited to, <a href="http://picasaweb.google.com/mandlar/21610Audrina#">my sister&#8217;s house</a>. Flash can overcome these lighting problems but I much prefer the natural lighting look (and no red eyes!  Especially with Audrina&#8217;s (or Landyn&#8217;s) beautiful blue eyes). Since the 18-55mm only allows the aperture to open up to F/3.5, I&#8217;ve decided that I need to invest in some &#8220;fast glass.&#8221; I&#8217;m currently borrowing (and plan on buying) a <a href="http://www.amazon.com/Nikon-50mm-Nikkor-Digital-Cameras/dp/B00005LEN4">Nikkor 50mm F/1.8</a> from my brother which works great for these low light situations&#8230;. except that this lens does not auto focus on my camera.  After using it for a few times (and getting slightly better at manually focusing), I&#8217;ve decided that I&#8217;d like another fast, but wider lens that can also auto focus on my camera.  <a href="http://picasaweb.google.com/mandlar/2010223Audrina#">Shooting Audrina in her house was difficult with the 50mm</a> because of the distance I needed to be <strong>away</strong> from her (and good luck with that with her curiosity!), but the 50mm was about the right distance for <a href="http://picasaweb.google.com/mandlar/2010222WSHSBasketballTorunament#">indoor basketball</a>.  So, here comes into play the <a href="http://www.amazon.com/Nikon-35mm-AF-S-Digital-Cameras/dp/B001S2PPT0/">Nikkor 30mm F/1.8</a> that I just purchased this week. I&#8217;ve already used it once <a href="http://picasaweb.google.com/mandlar/2010226LaurenAndDavis#">with the kids that Shannon babysits</a> and am very happy with the results!  I can&#8217;t wait to try it out on Audrina and Landyn!</p>
<p><strong>Other gear:</strong> I went ahead and snagged a nice camera sling bag (<a href="http://www.amazon.com/Lowepro-SlingShot-All-Weather-Digital-Backpack/dp/B000BAX50G">Lowepro  SlingShot 100</a>) and <a href="http://www.amazon.com/WhiBal-White-Balance-Reference-Card/dp/B000ARHJPW">white  balance card</a> (as I begin to switch from shooting JPEG to RAW). I  foresee a speed flash in the future, but not anytime soon.  And I really  need to invest in a tripod.</p>
<p><strong>Resources:</strong> Since I have jumped right into a field that I don&#8217;t know a whole lot about (beyond basic physics and point and shoot cameras, plus the Konica Minolta I was using before), I have quickly found podcasts to listen/watch and have been absorbing a ridiculous amount of information in the past couple of weeks.  If you are a Nikon shooter, I can highly recommend the short 10-15 minute video episodes of <a href="http://kelbytv.com/dtowntv/">D-Town</a> starring <a href="http://www.scottkelby.com/">Scott Kelby</a> and others. The first &#8220;season&#8221; is exclusively Nikon talk, but they have opened up more in their second &#8220;season.&#8221;  I also can recommend the podcast <a href="http://photofocus.com/">PhotoFocus</a>, which follows a quick and easy reader Q&amp;A session run by <a href="http://scottbourne.com/">Scott Bourne</a> and a weekly guest host and is not specific to any brand of equipment.</p>
<p><strong>Pictures: </strong>Here is a sampling of some photos and albums I have taken so far with the Nikon D5000.  <strong>Please feel free to comment</strong>, constructive criticism is more than welcome!</p>
<p><strong>Stokes County</strong></p>
<p><a href="http://www.facebook.com/photo.php?pid=44988084&amp;id=2717476" class="tt-facebook-photo"><img src="http://photos-f.ak.fbcdn.net/hphotos-ak-ash1/hs261.ash1/18857_778482537618_2717476_44988084_1933323_n.jpg" border="0" /></a></p>
<p><a href="http://www.facebook.com/album.php?aid=2432192&amp;id=2717476&amp;l=f1077a9223">Facebook album</a> | <a href="http://picasaweb.google.com/mandlar/21310StokesCounty#">Picasaweb (all pictures at full resolution)</a></p>
<p>I drove around Stokes County snapping some pictures of Pilot Mountain, King, and Central Park with the 18-55mm. I quickly learned about dust appearing in photos shot at F/11 and above (small aperture).  The small aperture also allows for the star-like effect in bright lights like in the shot above.</p>
<p><strong>Carli&#8217;s Babyshower and Shannon&#8217;s house and lake</strong></p>
<p><a href="http://www.facebook.com/photo.php?pid=45001537&amp;id=2717476" class="tt-facebook-photo"><img src="http://photos-a.ak.fbcdn.net/hphotos-ak-snc3/hs161.snc3/18857_778861153868_2717476_45001537_4591519_n.jpg" alt="Hello Mr. Duck.  We meet again" border="0" /></a></p>
<p><a href="http://www.facebook.com/album.php?aid=2432697&amp;id=2717476&amp;l=5f3eb83cf4">Facebook album</a> | <a href="http://picasaweb.google.com/mandlar/21410CarliSBabyshowerShannonSHouse#">Picasaweb (all pictures at full resolution)</a></p>
<p>Again shot with the 18-55mm. The ducks were much more friendly allowing for closer shots, but I still wished I had a telescopic lens.  The above picture is actually a cropped photo.</p>
<p><strong>Audrina</strong></p>
<p><a href="http://www.facebook.com/photo.php?pid=45016504&amp;id=2717476" class="tt-facebook-photo"><img src="http://photos-a.ak.fbcdn.net/hphotos-ak-snc3/hs177.snc3/20457_779395273488_2717476_45016504_283128_n.jpg" border="0" /></a></p>
<p><a href="http://www.facebook.com/album.php?aid=2433097&amp;id=2717476&amp;l=e712fd5836">Facebook album</a> | <a href="http://picasaweb.google.com/mandlar/21610Audrina#">Picasaweb (all pictures at full resolution)</a></p>
<p>My first set of Audrina! Since I was using the 18-55mm indoors I had to resort to flash&#8230;.  which resulted in a lot of redeye from those beautiful blue eyes!</p>
<p><strong>Landyn</strong></p>
<p><a href="http://www.facebook.com/photo.php?pid=45080946&amp;id=2717476" class="tt-facebook-photo"><img src="http://hphotos-snc3.fbcdn.net/hs401.snc3/24317_781867823478_2717476_45080946_2726967_n.jpg" border="0" /></a></p>
<p><a href="http://www.facebook.com/album.php?aid=2434634&amp;id=2717476&amp;l=061e5367da">Facebook album</a> | <a href="http://picasaweb.google.com/mandlar/2010221LandynAtScottSHouse#">Picasaweb (all pictures at full resolution)</a></p>
<p>I went to visit my brother to pick up the 50mm lens.  I snapped most of these with the 18-55mm.</p>
<p><strong>Sammy</strong></p>
<p><a href="http://www.facebook.com/photo.php?pid=45080981&amp;id=2717476" class="tt-facebook-photo"><img src="http://hphotos-snc3.fbcdn.net/hs401.snc3/24317_781868996128_2717476_45080981_1038858_n.jpg" border="0" /></a></p>
<p><a href="http://www.facebook.com/album.php?aid=2434636&amp;id=2717476&amp;l=95b72cf2c4">Facebook album</a> | <a href="http://picasaweb.google.com/mandlar/2010221SammyPictures50mm#">Picasaweb (all pictures at full resolution)</a></p>
<p>I practiced using the manual focus on the 50mm on our black cat, Sammy.  Focusing wasn&#8217;t too difficult since she didn&#8217;t move around too much.</p>
<p><strong>WSHS Basketball vs. Bunker Hill<br />
</strong></p>
<p><a href="http://www.facebook.com/photo.php?pid=45081017&amp;id=2717476" class="tt-facebook-photo"><img src="http://hphotos-snc3.fbcdn.net/hs421.snc3/24317_781870188738_2717476_45081017_1992217_n.jpg" border="0" /></a></p>
<p><em>Luke Hunter going for two points. </em></p>
<p><a href="http://www.facebook.com/album.php?aid=2434637&amp;id=2717476&amp;l=3e1f6ee187">Facebook album</a> | <a href="http://picasaweb.google.com/mandlar/2010222WSHSBasketballTorunament#">Picasaweb (all pictures at full resolution)</a></p>
<p>At this basketball game I experimented with the 50mm which was perfect for the lighting&#8230;.  but I simply couldn&#8217;t keep up with the players with the manual focus, so I resorted back to the 18-55mm and flash.  I&#8217;d love to try this again with the 35mm, but their season is now over.</p>
<p><strong>Audrina (take two)</strong></p>
<p><a href="http://www.facebook.com/photo.php?pid=45081227&amp;id=2717476" class="tt-facebook-photo"><img src="http://photos-f.ak.fbcdn.net/hphotos-ak-snc3/hs401.snc3/24317_781873951198_2717476_45081227_1334465_n.jpg" alt="I love this picture!" border="0" /></a></p>
<p><a href="http://www.facebook.com/album.php?aid=2434640&amp;id=2717476&amp;l=92a67e16dc">Facebook album</a> | <a href="http://picasaweb.google.com/mandlar/2010223Audrina#">Picasaweb (all pictures at full resolution)</a></p>
<p>I (almost) exclusively shot with the 50mm in these pictures.  Audrina moves quick and I was still having difficulty focusing, but I managed to pull out quite a few good pictures.  I also didn&#8217;t like having to be so far away from her (meaning up against a wall or the other side of the room).</p>
<p><strong>Lauren and Davis</strong></p>
<p><a href="http://www.facebook.com/photo.php?pid=45090873&amp;id=2717476" class="tt-facebook-photo"><img src="http://photos-c.ak.fbcdn.net/hphotos-ak-ash1/hs469.ash1/25719_782231824018_2717476_45090873_2211247_n.jpg" border="0" /></a></p>
<p><a href="http://www.facebook.com/album.php?aid=2434838&amp;id=2717476&amp;l=804b5d5890">Facebook album</a> | <a href="http://picasaweb.google.com/mandlar/2010226LaurenAndDavis#">Picasaweb (all pictures at full resolution)</a></p>
<p>Lauren and Davis are Shannon&#8217;s next door neighbors that she occasionally babysits.  A lot of new things are going on in this album: I just bought the 35mm lens and this is my first time using it (and it was the only lens I used that night). I also switched to shooting in RAW (and used the WhiBal gray card to help adjust the white balance in the pictures).</p>
<p><strong>Video:</strong> Here is a quick video I took of the West Stokes Cheerleaders at the basketball game vs. Bunker Hill.  The video was taken in HD, so be sure to bump the quality up to 480p.</p>
<p><object height="505" width="640"><param name="movie" value="http://www.youtube.com/v/dZlfk0L1rBA&amp;hl=en_US&amp;fs=1&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/dZlfk0L1rBA&amp;hl=en_US&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="505" width="640"></embed><a href="http://www.youtube.com/v/dZlfk0L1rBA&amp;hl=en_US&amp;fs=1&amp;rel=0" class="iaswkdgyboiurelqqmma"></a><a href="http://www.youtube.com/v/dZlfk0L1rBA&amp;hl=en_US&amp;fs=1&amp;rel=0" class="iaswkdgyboiurelqqmma"></a><a href="http://www.bryandenny.com/wp-admin/" class="iaswkdgyboiurelqqmma"></a><a href="http://www.bryandenny.com/wp-admin/" class="iaswkdgyboiurelqqmma"></a></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandenny.com/index.php/2010/03/02/new-toy-nikon-d5000/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A NEW CHAPTER</title>
		<link>http://www.bryandenny.com/index.php/2010/02/06/a-new-chapter/</link>
		<comments>http://www.bryandenny.com/index.php/2010/02/06/a-new-chapter/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 16:59:48 +0000</pubDate>
		<dc:creator>mandlar</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.bryandenny.com/index.php/2010/02/06/a-new-chapter/</guid>
		<description><![CDATA[The past five months for myself have been not quite what I would have predicted when I graduated from college in May.  I never would have expected the unexpected nor would I have ever imagined I would be where I am right now. Roads diverge apart, converge with new ones, and sometimes simply cross with [...]]]></description>
			<content:encoded><![CDATA[<p>The past five months for myself have been not quite what I would have predicted when I graduated from college in May.  I never would have expected the unexpected nor would I have ever imagined I would be where I am right now. Roads diverge apart, converge with new ones, and sometimes simply cross with others briefly in this life of complexities that we live in.</p>
<p>The beginning of adulthood is also a challenging endeavor. In society today we are pampered up to and through high school all the way to college and beyond. College teaches you partial freedom in that you are living on your own with your own responsibilities, but you are still tucked safely under the wings of your parents if things get too tough. And post-college it is difficult to leave that sanctuary. When do you take the first big step in the direction of your own choosing? It is a question I often ponder but am not nearly ready to answer. I do not know what to expect or to do next as I have already established a good foundation of a college degree and stable job. I am also steadily approaching my one year goal of paying off my college debt (or at least the part that is in my name; my parents also share a fair amount).  What goals in life do I want?</p>
<p><strong>Stability and happiness</strong>.  Those are good goals, right?</p>
<p>But sometimes those goals are challenged by difficulties. <a href="http://www.bryandenny.com/index.php/2009/09/20/i-lost-my-priceless-gem/">And September was quite a difficult month for me</a>. And it felt like it was never ending (<a href="http://www.azlyrics.com/lyrics/greenday/wakemeupwhenseptemberends.html">wake me up when September ends</a>). I will not say much here other than Rebekah and I went our separate ways and the rest is water under the bridge. I hope she finds what she is looking for.</p>
<p>Despite going through life&#8217;s difficulties, I know that giving up on life is never the answer. Everything happens for some reason or other. I will continue onward and learn from it, hence my mantra &#8220;We learn from our past in order to be better prepared for our future.&#8221; Throwing it all away is a waste when it can be resolved through time and understanding. There is so much to learn about life, so many questions to ask and even more answers yet to be discovered.</p>
<p>The spontaneity of life is also amazing. Through it I have met Shannon and we both cannot describe exactly how we have become &#8220;stuck&#8221; together. I have known about Shannon for quite some time as she was the ever elusive friend of Steven that I always heard about but never knew much about. We started randomly talking in December and one thing led to another and now here we are. I never would have been able to predict this, but I would not have it changed in the slightest.</p>
<p>I was not happy five months ago, but I am happy now. I do not know where this road is going, but when have I ever known that?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryandenny.com/index.php/2010/02/06/a-new-chapter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
