<?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>David Beck&#039;s Blog</title>
	<atom:link href="http://davidbeckblog.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://davidbeckblog.com</link>
	<description>The ramblings of an obsessed programmer</description>
	<lastBuildDate>Mon, 22 Feb 2010 06:38:15 +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>Correct Paging</title>
		<link>http://davidbeckblog.com/2009/11/correct-paging/</link>
		<comments>http://davidbeckblog.com/2009/11/correct-paging/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 20:59:49 +0000</pubDate>
		<dc:creator>David Beck</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://davidbeckblog.com/?p=168</guid>
		<description><![CDATA[Paging is separating out content to multiple pages, and it is a really common task for websites. The problem is that like oh so many things on the web, it is rarely done well. Come with me on this journey (rant?) on the correct way to implement paging.
Each page should have a &#8220;Next&#8221; and &#8220;Previous&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Paging is separating out content to multiple pages, and it is a really common task for websites. The problem is that like oh so many things on the web, it is rarely done well. Come with me on this journey (rant?) on the correct way to implement paging.</p>
<p>Each page should have a &#8220;Next&#8221; and &#8220;Previous&#8221; button. If you are referring to chronological content, such as blog posts, use &#8220;Newer&#8221; and &#8220;Older&#8221; to be more specific. They should be the most prominent part of the paging area, since anyone interacting with that area of the page will most likely be going back and forth through the results.</p>
<p>There should also be a list of the pages in between the next/previous button.</p>
<p>Here is an example from <a href="http://bubble.davidbeckblog.com" onclick="pageTracker._trackPageview('/outgoing/bubble.davidbeckblog.com?referer=');">Bubble Burster website</a>:</p>
<div id="attachment_169" class="wp-caption aligncenter" style="width: 356px"><img class="size-full wp-image-169 " title="Newer and Previous" src="http://davidbeckblog.com/wp-content/uploads/Screen-shot-2009-11-17-at-12.31.33-PM.png" alt="An example of using Newer and Previous buttons" width="346" height="53" /><p class="wp-caption-text">An example of using Newer and Previous buttons</p></div>
<p><span id="more-168"></span></p>
<p>Here I am using <a href="http://wordpress.org/extend/plugins/wp-page-numbers/" onclick="pageTracker._trackPageview('/outgoing/wordpress.org/extend/plugins/wp-page-numbers/?referer=');">WP Page Numbers</a>.</p>
<p>When the page is at the beginning or the end, leave the Next/Previous buttons in place, but disable the one that is no longer valid.</p>
<div id="attachment_171" class="wp-caption aligncenter" style="width: 322px"><img class="size-full wp-image-171 " title="Disable Previous" src="http://davidbeckblog.com/wp-content/uploads/Screen-shot-2009-11-17-at-12.32.38-PM.png" alt="Example of a disabled Newer button" width="312" height="55" /><p class="wp-caption-text">Example of a disabled Newer button</p></div>
<p>&#8220;First&#8221; and &#8220;Last&#8221; buttons should be 1&#8230; and &#8230;(last page number) because they are smaller than the entire word and more obvious than a symbol. This is best described by a picture:</p>
<div id="attachment_173" class="wp-caption aligncenter" style="width: 442px"><img class="size-full wp-image-173  " title="First and Last Example" src="http://davidbeckblog.com/wp-content/uploads/Screen-shot-2009-11-17-at-12.34.00-PM.png" alt="An example of using the first and last page number for first and last" width="432" height="56" /><p class="wp-caption-text">An example of using the first and last page number for first and last</p></div>
<p>Here you see that the first and last page numbers are present, even when they are many pages away from the current page. This replaces the need for first and last buttons and is a bit more obvious what they do. Clicking 1 goes to page 1. Just like clicking page 3 goes to page 3. You may not think about these kinds of things but every user has to learn how to user your interface and even if it only takes 10 seconds to understand what clicking &#8220;First&#8221; does, it is one more thing that makes your interface easier to use.</p>
<p>Also, it is more common for a user to want to go back or forward than to the first page. This is because they will only go to page 1 once (that is unless you have some really addictive content on page one that people keep trying to stop looking at but just can&#8217;t resist). If they were to go through your content page by page though, they would be hitting the &#8220;Next&#8221; button every page.</p>
<p>Finally, put a little padding on the numbers. This example is a little big and bubbly (for a <a href="http://bubble.davidbeckblog.com" onclick="pageTracker._trackPageview('/outgoing/bubble.davidbeckblog.com?referer=');">big and bubbly site</a>) but realize that you are putting a dozen links right next to each other. And while I&#8217;m at it, put a little effort into the appearance. Don&#8217;t just through raw links on a page, that&#8217;s ugly.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbeckblog.com/2009/11/correct-paging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Video Screen Capture</title>
		<link>http://davidbeckblog.com/2009/10/iphone-screen-capture/</link>
		<comments>http://davidbeckblog.com/2009/10/iphone-screen-capture/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 03:54:57 +0000</pubDate>
		<dc:creator>David Beck</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Apple Developer Tools]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Screencast]]></category>
		<category><![CDATA[SIMBL]]></category>

		<guid isPermaLink="false">http://davidbeckblog.com/?p=146</guid>
		<description><![CDATA[
I recently had the misfortune of having to make a video to showcase Bubble Burster. The results were not pretty. I was literally laughed at by friends when they saw it. The problem is that while you can take screenshots of the iPhone screen, there is no way to capture video. I could have used a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://davidbeckblog.com/media/Screen-shot-2009-10-24-at-6.44.04-PM.png"><img class="alignleft size-medium wp-image-232" title="iPhone Screen Capture screen shot" src="http://davidbeckblog.com/media/Screen-shot-2009-10-24-at-6.44.04-PM-222x300.png" alt="iPhone Screen Capture recording video" width="222" height="300" /></a></p>
<p>I recently had the misfortune of having to make a video to showcase <a href="http://bubble.davidbeckblog.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/bubble.davidbeckblog.com/?referer=');">Bubble Burster</a>. <a href="http://bubble.davidbeckblog.com/2009/09/new-youtube-video/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/bubble.davidbeckblog.com/2009/09/new-youtube-video/?referer=');">The results</a> were not pretty. I was literally laughed at by friends when they saw it. The problem is that while you can take screenshots of the iPhone screen, there is no way to capture video. I could have used a screen capture program but those cost around $100 (yes I am very cheap). The best solution I could come up with was to use the built in iSight on my MacBook to show the app.</p>
<p>Looking around for a better alternative I ran across <a href="http://news.atebits.com/post/197564349/not-your-average-iphone-screencast" target="_blank" onclick="pageTracker._trackPageview('/outgoing/news.atebits.com/post/197564349/not-your-average-iphone-screencast?referer=');">this post</a> from <a href="http://www.atebits.com/tweetie-iphone/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.atebits.com/tweetie-iphone/?referer=');">Tweetie</a> creator, <a href="http://www.atebits.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.atebits.com/?referer=');">atebits</a>. Basically what he did was create an app that set some settings on the iPhone simulator to look more like the real thing and then overlaid a circle for the pointer and a glare for the screen. You still need a screen capture program, but it looks much better. This got me thinking of what I could do.</p>
<p><span id="more-146"></span></p>
<p>I came up with a <a href="http://www.culater.net/software/SIMBL/SIMBL.php" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.culater.net/software/SIMBL/SIMBL.php?referer=');">SIMBL</a> plugin for the simulator. Basically it captures a screenshot every frame and then saves it to video. It overlays a circle for the pointer and a gloss iPhone frame (thanks atebits for &#8220;allowing&#8221; me to steal your artwork).</p>
<p>You can see a <a href="http://davidbeckblog.com/content/media/2009/10/Demo.mov">Demo</a> of it to get a feeling for what the recording looks like.</p>
<p>I am not quite finished with it. It doesn&#8217;t record the audio and I would like to add in the functionality from the thankfully open source atebits SimFinger like installing default applications and setting carrier display name. I would also like to make the pointer fade to transparent when you leave the frame.</p>
<p>The video quality leaves something to be desired in my opinion and it already takes forever to export the video.</p>
<p>To install the plugin, place it in &#8220;~/Library/Application Support/SIMBL/Plugins&#8221;. create it if it doesn&#8217;t already exist. You will need to install SIMBL as well. Right now it is only for Snow Leopard but there isn&#8217;t anything major that is keeping it from working on Leopard other than some convenience methods.</p>
<p>If you end up using this plugin, please let me know in the <a href="#comments">comments</a>.</p>
<p><a class="button" href="http://davidbeckblog.com/wp-content/uploads/iPhone-Capture.zip">Download</a></p>
<p>Update: I uploaded the <a href="http://www.youtube.com/watch?v=JwwcQSUgVWA" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.youtube.com/watch?v=JwwcQSUgVWA&amp;referer=');">demo video</a> I made for <a href="http://bubble.davidbeckblog.com" onclick="pageTracker._trackPageview('/outgoing/bubble.davidbeckblog.com?referer=');">Bubble Burster</a>. I used a custom build that ignores the accelerometer. I then used <a href="http://www.amazon.com/gp/product/B001EUDKT8?ie=UTF8&amp;tag=dabesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001EUDKT8" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/gp/product/B001EUDKT8?ie=UTF8_amp_tag=dabesbl-20_amp_linkCode=as2_amp_camp=1789_amp_creative=390957_amp_creativeASIN=B001EUDKT8&amp;referer=');">After Effects</a> to rotate the video to match my actions. I think I should have paused a little though, because in parts it looks unnaturally fast.</p>
<p>Update: SDK 3.2 breaks compatibility with this plugin. I will be working on a possible fix.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbeckblog.com/2009/10/iphone-screen-capture/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
<enclosure url="http://davidbeckblog.com/content/media/2009/10/Demo.mov" length="45346408" type="video/quicktime" />
		</item>
		<item>
		<title>AVR and Xcode</title>
		<link>http://davidbeckblog.com/2009/10/avr-and-xcode/</link>
		<comments>http://davidbeckblog.com/2009/10/avr-and-xcode/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 23:05:31 +0000</pubDate>
		<dc:creator>David Beck</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[Microcontroller]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://davidbeckblog.com/?p=130</guid>
		<description><![CDATA[I recently purchased the beginning embedded electronics kit from SparkFun Electronics. It is a kit that include everything to start programming AVR microcontrollers. A microcontroller lets you control the most simple, physical things, like an LED or a motor. Given my lust for control, you can see why this has quickly become my latest obsessive [...]]]></description>
			<content:encoded><![CDATA[<p>I recently purchased the <a href="http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=57" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=57&amp;referer=');">beginning embedded electronics</a> kit from <a href="http://sparkfun.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/sparkfun.com?referer=');">SparkFun Electronics</a>. It is a kit that include everything to start programming AVR microcontrollers. A microcontroller lets you control the most simple, physical things, like an LED or a motor. Given my lust for control, you can see why this has quickly become my latest obsessive hobby.</p>
<p>The problem is that I want to be able to program the micro with my Mac, which presented a few problems. Here is how I got it working with Xcode on my Mac.<br />
<span id="more-130"></span><br />
The first step was getting the programmer to work.</p>
<p>The only problem? The kit screams Windows. By default it includes a <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=13" onclick="pageTracker._trackPageview('/outgoing/www.sparkfun.com/commerce/product_info.php?products_id=13&amp;referer=');">parallel programer</a>. The last time I had a computer with a parallel port was&#8230; well it was when I had a PC. Not only that but SparkFun only carries Windows compatible <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8702" onclick="pageTracker._trackPageview('/outgoing/www.sparkfun.com/commerce/product_info.php?products_id=8702&amp;referer=');">USB programmers</a> (a programmer in this case is a device that transfers your code to the chip, not the skinny kid from high school with a Redbull IV in him). In fact, there are almost no AVR programmers that are Mac compatible.</p>
<p>Not knowing the days of frustration that I was getting myself into, I bought the <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8702" onclick="pageTracker._trackPageview('/outgoing/www.sparkfun.com/commerce/product_info.php?products_id=8702&amp;referer=');">STK500 USB programmer</a>. Other options would be the now discontinued <a href="http://www.pololu.com/catalog/product/740" onclick="pageTracker._trackPageview('/outgoing/www.pololu.com/catalog/product/740?referer=');">Pololu programmer</a>, or build it yourself.</p>
<p>Luckily, <a href="http://www.olimex.com/" onclick="pageTracker._trackPageview('/outgoing/www.olimex.com/?referer=');">Olimex</a>, the company that made the STK500 USB programmer, has released an <a href="http://www.olimex.com/dev/soft/avr/AVR-ISP500/AvrIspFwUpdate_1_0_0_8.zip" onclick="pageTracker._trackPageview('/outgoing/www.olimex.com/dev/soft/avr/AVR-ISP500/AvrIspFwUpdate_1_0_0_8.zip?referer=');">update</a> that makes it Mac compatible. You can find info and instructions on how to install it on <a href="http://www.olimex.com/dev/avr-isp500.html" onclick="pageTracker._trackPageview('/outgoing/www.olimex.com/dev/avr-isp500.html?referer=');">their product page</a>. Be sure to follow the instructions <em>exactly</em>. You will need a Windows computer to do the upgrade. It worked fine in <a href="http://www.amazon.com/gp/product/B002Q72JB8?ie=UTF8&amp;tag=dabesbl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002Q72JB8" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/gp/product/B002Q72JB8?ie=UTF8_amp_tag=dabesbl-20_amp_linkCode=as2_amp_camp=1789_amp_creative=390957_amp_creativeASIN=B002Q72JB8&amp;referer=');">VMWare Fusion</a>.</p>
<p>The next step was to get the build tools woking in Mac OS X. These are the programs that will compile your code and transfer it to the microcontroller.</p>
<p>The easiest way to get the tools needed is to get <a href="http://www.obdev.at/products/crosspack/index.html" onclick="pageTracker._trackPageview('/outgoing/www.obdev.at/products/crosspack/index.html?referer=');">CrossPack</a>. CrossPack includes all the tools necessary to build and upload your projects. This also includes some tools to generate Xcode templates.</p>
<p>Basically, the Xcode templates create a project with an external build target. So in the background all that is happening is make is being called. I found two problems with the default templates. One is that you have to use the command line to generate your templates. That isn&#8217;t really necessary since Xcode has a built in template architecture. Basically place any templates you wan to show up in the new file window in &#8220;/Developer/Library/Xcode/Project Templates&#8221;. Just make sure to create a sub folder there to create the section. I called mine AVR.</p>
<p>The second problem I had was that there is no way to upload the code to the chip. Luckily there is an easy fix. Right click on executables and select &#8220;Add: New Custom Executable&#8221;. Use /usr/bin/make as the path. Under arguments, add &#8220;flash&#8221;. This will call make, just like the target does, but it will make for flash instead of compile. Now you can select Build and Go and it will upload the program to the connected microcontroller.</p>
<p>To get going, you need to edit the makefile in the project. Select your microcontroller, for DEVICE. Input the correct value for CLOCK. I also had to add a variable for the location of the tools. I called it TOOLS</p>
<pre>DEVICE     = atmega168
CLOCK      = 8000000
PROGRAMMER = -c stk500v2 -P /dev/tty.usbmodem*
OBJECTS    = main.o
FUSES      = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m

TOOLS      = /usr/local/CrossPack-AVR/bin/

AVRDUDE = $(TOOLS)avrdude $(PROGRAMMER) -p $(DEVICE)
COMPILE = $(TOOLS)avr-gcc -std=c99 -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)</pre>
<p>In the PROGRAMMER line you will notice I used an asterisk (*) to select any connected programmer. I did this because the number changed on me a few times and I didn&#8217;t want to have to edit the makefile every time I plugged it in.</p>
<p>You should be good to go now. You can download <a title="Xcode AVR template" href="/wp-content/uploads/2009/10/Firmware.zip">my template</a>, but you will still need the CrossPack tools.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbeckblog.com/2009/10/avr-and-xcode/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Lunarpages Review</title>
		<link>http://davidbeckblog.com/2009/10/lunarpages-review/</link>
		<comments>http://davidbeckblog.com/2009/10/lunarpages-review/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 20:00:44 +0000</pubDate>
		<dc:creator>David Beck</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Lunarpages]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://davidbeckblog.com/?p=114</guid>
		<description><![CDATA[I have been using Lunarpages for over a year now and I really love it. I first started using it for work, and then for my personal sites like this one. I have really enjoyed it and will definitely be using it for a long time to come. It is what I recommend to anyone [...]]]></description>
			<content:encoded><![CDATA[<p>I have been using <a href="http://www.lunarpages.com/id/davbeck" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.lunarpages.com/id/davbeck?referer=');">Lunarpages</a> for over a year now and I really love it. I first started using it for work, and then for my personal sites like this one. I have really enjoyed it and will definitely be using it for a long time to come. It is what I recommend to anyone that dare ask my opinion.</p>
<p><span id="more-114"></span></p>
<p>The reason I first was attracted to <a href="http://www.lunarpages.com/id/davbeck" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.lunarpages.com/id/davbeck?referer=');">Lunarpages</a> is their cheap unlimited plan. For $5/month, you can get their basic hosting plan that includes <em>unlimited</em> storage space, bandwidth, email accounts, databases, add-on domains, sub-domains and ftp accounts. Basically, I don&#8217;t need to worry about any of that stuff. Even if I didn&#8217;t reach the limits of some more stingy providers, I would no doubt keep myself awake at night worrying about the possibility of one of my sites not appearing tomorrow because the bandwidth limit was reached.</p>
<p>The other reason I chose to risk a 2 year contract with yet another company is the long list of supported technologies. PHP in particular, and all of it&#8217;s libraries and extensions. Being that PHP is my language of choice when creating a site, it was a must. But they don&#8217;t stop at the bare minimum. Pretty much whatever your platform desires be, they have it.</p>
<p>Lunarpages also has many technologies that are a relief when dealing with a company. For instance their support for unlimited email storage (see above) combined with their support for IMAP and webmail make giving companies their own email address rather than that hobo looking Gmail account they have been printing on their business cards, a treat rather than a hassle. They also support forwarding to any other email address, so no one has to have several different email addresses and passwords and log in pages and and etc. This in particular has been a relief for me given that I maintain several dozen email addresses.</p>
<p>The uptime on the server is pretty good given the price of the service. I would be lying through my teeth if I told you I have never had a few hours of downtime. Luckily, when I do have a problem, I can call their customer support and get through in less than 15 minutes and usually they are already aware of the problem and on their way to fixing it.</p>
<p>Ever since I first saw <a href="http://www.lunarpages.com/id/davbeck" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.lunarpages.com/id/davbeck?referer=');">Lunarpages</a> I have been asking myself, &#8220;What&#8217;s the catch&#8221;. After a year of using them every day, I have yet to find one. The price really is that low. The space really is unlimited. They really are that good. I was even presently surprised the other day when they extended their free Facebook advertising promotion to current customers, otherwise known as me.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbeckblog.com/2009/10/lunarpages-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Early iPhone App Sales</title>
		<link>http://davidbeckblog.com/2009/10/early-iphone-app-sales/</link>
		<comments>http://davidbeckblog.com/2009/10/early-iphone-app-sales/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 16:33:55 +0000</pubDate>
		<dc:creator>David Beck</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Bubble Burster]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Marketing]]></category>

		<guid isPermaLink="false">http://davidbeckblog.com/?p=104</guid>
		<description><![CDATA[It has been about a month now since Bubble Burster was released to the App Store and early sales are not promising. Before I launched Bubble Burster, I did a lot of research into marketing and sales of iPhone Apps and I found very little information. Most of what is available in terms of sales [...]]]></description>
			<content:encoded><![CDATA[<p>It has been about a month now since <a href="http://bubble.davidbeckblog.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/bubble.davidbeckblog.com/?referer=');">Bubble Burster</a> was released to the App Store and early sales are not promising. Before I launched Bubble Burster, I did a lot of research into marketing and sales of iPhone Apps and I found very little information. Most of what is available in terms of sales numbers is from big companies with apps in the top 100, and almost no data from your average app developer.<br />
<span id="more-104"></span><br />
The hard truth is that in it&#8217;s first month, Bubble Burster sold only 6 copies. 2 were to my friends. At $.99 that means I earned $4.20 after Apple&#8217;s cut. Pretty bad for something that took me months to develop. Especially when you consider I spent $99 on the developer program to publish it in the first place. In other words, I am not quitting my day job.</p>
<p>I can&#8217;t say I am too surprised by the low turn out. My low end estimate was a little higher though, at $20 in the first month. I knew going in that there were 75,000 apps (well 80,000 by the time it actually released) on the store already, and that because the only ones visible to most people were the ones in the top 20 and you couldn&#8217;t get there unless you sold a lot of copies and you couldn&#8217;t sell very many unless you were in the top 20.</p>
<p>To combat the problem of visibility I used some advertising promotions I had been saving. Google gave me $100 ad credit to sign up for AdWords and my hosting company, <a href="http://www.lunarpages.com/id/davbeck" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.lunarpages.com/id/davbeck?referer=');">LunarPages</a>, gave me a $25 credit for FaceBook. Unfortunately, those have not been very successful and I think I will pull them when the promotions run out.</p>
<p>One thing that is often suggested is to make a &#8220;lite&#8221; version of your app for free. I am working on this right now. It is difficult for me as a programmer to create a lite version because it means taking functions out that I have spent a lot of time putting in. When it is finished, the lite version will have all the functionality of the full version but will cut the player off when they score more than 50 points. A score that takes a while to accomplish.</p>
<p>The other suggestion is to get blogs like <a href="http://toucharcade.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/toucharcade.com/?referer=');">Touch Arcade</a> to review your app. I plan to do this once I have released the lite version. Even still, most people don&#8217;t read these specialized blogs.</p>
<p>The original plan was to introduce what I had for $.99 and then, once I had updated the game with more features like saving score and games, I would raise the price to $1.99. I advertised that it was $.99 for &#8220;a limited time&#8221;. Well a few days ago I upped the price as planed when Apple approved version 1.2. So far no one has made a purchase at the new price, but that is not necessarily any different from when it was at $.99. We will se if I can make 3 sales next month to match the income (if you can call it that) of the app at $.99.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbeckblog.com/2009/10/early-iphone-app-sales/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bubble Burster website now live</title>
		<link>http://davidbeckblog.com/2009/09/bubble-burster-website-now-live/</link>
		<comments>http://davidbeckblog.com/2009/09/bubble-burster-website-now-live/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 21:33:58 +0000</pubDate>
		<dc:creator>David Beck</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Bubble Burster]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://davidbeckblog.com/?p=98</guid>
		<description><![CDATA[I finished up the Bubble Burster website today. You can find it at bubble.davidbeckblog.com. I built it with WordPress (same as this site) but I made the theme myself and wrote and edited several plugins to get it just right.

I use to make sites by hand using PHP. I always figured any prebuilt package would take [...]]]></description>
			<content:encoded><![CDATA[<p>I finished up the Bubble Burster website today. You can find it at <a href="http://bubble.davidbeckblog.com" onclick="pageTracker._trackPageview('/outgoing/bubble.davidbeckblog.com?referer=');">bubble.davidbeckblog.com</a>. I built it with WordPress (same as this site) but I made the theme myself and wrote and edited several plugins to get it just right.<br />
<span id="more-98"></span><br />
I use to make sites by hand using PHP. I always figured any prebuilt package would take you longer to learn the custom weirdness of the system that it would be quicker to do it yourself. But with wordpress, it is done so well that that isn&#8217;t really the truth. I plan to make all my sites with it from now on.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbeckblog.com/2009/09/bubble-burster-website-now-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>That pesky white space</title>
		<link>http://davidbeckblog.com/2009/09/that-pesky-white-space/</link>
		<comments>http://davidbeckblog.com/2009/09/that-pesky-white-space/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 16:10:02 +0000</pubDate>
		<dc:creator>David Beck</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://davidbeckblog.com/?p=87</guid>
		<description><![CDATA[If your OCD like myself, and also suffer from the need to make websites, you may have run into this pesky problem when you lay out images and what not on a page. The problem comes when you try to mathematically determine the exact right padding so that all the objects are laid out evenly [...]]]></description>
			<content:encoded><![CDATA[<p>If your OCD like myself, and also suffer from the need to make websites, you may have run into this pesky problem when you lay out images and what not on a page. The problem comes when you try to mathematically determine the exact right padding so that all the objects are laid out evenly only to find that the last one falls off the end to the next line.<br />
<span id="more-87"></span><br />
What&#8217;s happening? You forgot about html white space. If you put any kind of space, tab or line break between elements, it ads a space. Even worse, you may try to adjust the padding so that it looks correct in your browser, and you go to a different computer and it is a completely different distance. This is because different browsers may have different font rendering.</p>
<p>The solution? Remove the white space.</p>
<pre>&lt;img src="first.png" /&gt;&lt;img src="second.png" /&gt;</pre>
<p>Make sure not to put any space in between.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbeckblog.com/2009/09/that-pesky-white-space/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CGInsetRect</title>
		<link>http://davidbeckblog.com/2009/09/cginsetrect/</link>
		<comments>http://davidbeckblog.com/2009/09/cginsetrect/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 16:03:57 +0000</pubDate>
		<dc:creator>David Beck</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://davidbeckblog.com/?p=82</guid>
		<description><![CDATA[I titled this post as such because I am hoping to help others that are in the situation I was in. Go ahead and Google &#8220;CGInsetRect&#8221;. When I did, I got 0 results. Not a single page has anything on it. The reason? While on Mac OS X you would call NSInsetRect, on iPhone you [...]]]></description>
			<content:encoded><![CDATA[<p>I titled this post as such because I am hoping to help others that are in the situation I was in. Go ahead and Google &#8220;CGInsetRect&#8221;. When I did, I got 0 results. Not a single page has anything on it. The reason? While on Mac OS X you would call NSInsetRect, on iPhone you use CGRects. They are almost identical including having the same function set. The catch? NSRects functions all use the naming convention NSFunctionRect. CGRects on the other hand, as I forgot, use CGRectFunction.<br />
<span id="more-82"></span> For everyone looking for the function above, use CGRectInset.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbeckblog.com/2009/09/cginsetrect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NSTableView, NSArrayController and editing new rows</title>
		<link>http://davidbeckblog.com/2009/05/nstableview-nsarraycontroller-and-editing-new-rows/</link>
		<comments>http://davidbeckblog.com/2009/05/nstableview-nsarraycontroller-and-editing-new-rows/#comments</comments>
		<pubDate>Mon, 11 May 2009 06:42:59 +0000</pubDate>
		<dc:creator>David Beck</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Bindings]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Objective C]]></category>

		<guid isPermaLink="false">http://davidbeckblog.com/?p=29</guid>
		<description><![CDATA[This is the only solution I could find that would allow you to automatically edit newly added rows when using bindings with an NSArrayController and an NSTableView.]]></description>
			<content:encoded><![CDATA[<p>Figured out a very nice solution to automatically edit new rows added by NSArrayControllers via bindings! I searched for a while and didn&#8217;t find any correct solutions, so I made my own.<br />
<span id="more-29"></span><br />
The problem is that any catch that you would normally use, including subclassing, wont work because NSArrayController defers changes until the next run loop.</p>
<p>I have a table which my object is the delegate of. The table is bound to the array controller. The array of the array controller is filled with <strong>NSMutableDictionarys</strong>.</p>
<p>So I have</p>
<p>Here&#8217;s what I did:</p>
<pre>- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
	if([[[data objectAtIndex:[table selectedRow]] allKeys] count] == 0)
		[table editColumn:0 row:[table selectedRow] withEvent:nil select:YES];
}</pre>
<p>First we become the delegate of the table and implement the tableViewSelectionDidChange: method which is sent <em>after </em>the selection is changed. Then we check if the object (an NSMutableDictionary) has any keys set. If no keys are set, we assume that the row is new. This is different than if the keys were set to empty strings. editColumn:row:withEvent:select: scrolls to the row and column and starts editing the cell.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidbeckblog.com/2009/05/nstableview-nsarraycontroller-and-editing-new-rows/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Working on &#8220;Robot Building for Beginners&#8221;</title>
		<link>http://davidbeckblog.com/2009/04/working-on-robot-building-for-beginners/</link>
		<comments>http://davidbeckblog.com/2009/04/working-on-robot-building-for-beginners/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 17:49:21 +0000</pubDate>
		<dc:creator>David Beck</dc:creator>
				<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Robots]]></category>

		<guid isPermaLink="false">http://davidbeckblog.com/?p=24</guid>
		<description><![CDATA[Wednesday I picked up a copy of &#8220;Robot Building for Beginners&#8221; from the library and am now almost done with it. I have read several other books on robots and electronics, but this is the first that isn&#8217;t a complete waste of paper.

I have built the circuit on a solderless breadboard without the motors and [...]]]></description>
			<content:encoded><![CDATA[<p>Wednesday I picked up a copy of &#8220;Robot Building for Beginners&#8221; from the library and am now almost done with it. I have read several other books on robots and electronics, but this is the first that isn&#8217;t a complete waste of paper.<br />
<span id="more-24"></span><br />
I have built the circuit on a solderless breadboard without the motors and using a wall wart instead of a 9V battery. It works quite nicely.</p>
<p>There is however a wall I have hit. Motors cost like $50 for gear heads. So I suppose the robot will be put on hold until then.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Y3m8lvIL9dc&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/Y3m8lvIL9dc&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://davidbeckblog.com/2009/04/working-on-robot-building-for-beginners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
