<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5255028626698774175</id><updated>2011-12-30T15:35:29.270-08:00</updated><category term='User Interface Design'/><category term='NC-17'/><category term='Moving'/><category term='Hockey'/><category term='Social Media'/><category term='Twitter'/><category term='iPhone'/><category term='PlayBook'/><category term='HockeyTweet'/><category term='First App'/><category term='Arduino'/><category term='OAuth'/><category term='sales'/><category term='TextMate'/><category term='UX'/><category term='design'/><category term='App Store'/><category term='Ben Gottlieb'/><category term='UI'/><category term='Lockernine'/><category term='MGTwitterEngine'/><title type='text'>droolfactory</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-9105739630173688844</id><published>2011-12-30T15:35:00.001-08:00</published><updated>2011-12-30T15:35:29.323-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>Setting the Serial Port of a OSEPP Uno On Mac OS X Lion</title><content type='html'>I am new to Arduino hacking and as such I installed the latest Arduino software that comes without the need to install separate USB drivers, ie. the FTDIUSBSerialDriver_10_4_10_5_10_6.mpkg file with older Arduino software installs for Mac.&lt;br /&gt;&lt;br /&gt;I am on Mac OS X 10.7 (Lion) as well.&lt;br /&gt;&lt;br /&gt;So, when I hooked up a second Arduino board I bought yesterday, an OSEPP Uno Rev 1.1, I could not load sketches onto it.&lt;br /&gt;&lt;br /&gt;I went to the &lt;a href="http://osepp.com/learning-centre/start-here/osepp-uno-arduino-compatible/"&gt;getting started website for the OSEPP Uno&lt;/a&gt;, which suggested setting the board to an “Arduino Duemilanove or Nano w/ ATmega328″ to get it to work.  Still nothing.&lt;br /&gt;&lt;br /&gt;I looked at the Serial Ports but there were no usbserial ports listed.  So, start debugging.  I opened the Console and tried unplugging/plugging in the board, sure enough there was an error: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;kernel: 0        0 AppleUSBCDC: start - initDevice failed&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So, rereading the getting started site, I released that since this board was a little older I might just need to the older drivers.&lt;br /&gt;&lt;br /&gt;I downloaded the &lt;a href="http://www.arduino.cc/en/Main/Software"&gt;Arduino 0023 drivers from the Arduino Software page&lt;/a&gt; for Mac OS X.  I installed just the FTDIUSBSerialDriver_10_4_10_5_10_6.mpkg file.&lt;br /&gt;&lt;br /&gt;Restart the Arduino IDE and voila, there should not be a /dev/tty.usbserial-* device that will be the OSEPP Uno board.  You can then load your programs.&lt;br /&gt;&lt;br /&gt;Hope that helps.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-9105739630173688844?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/9105739630173688844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=9105739630173688844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/9105739630173688844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/9105739630173688844'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2011/12/setting-serial-port-of-osepp-uno-on-mac.html' title='Setting the Serial Port of a OSEPP Uno On Mac OS X Lion'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-2498295707814236141</id><published>2011-11-18T21:58:00.000-08:00</published><updated>2011-11-18T21:58:43.882-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='PlayBook'/><title type='text'>Configuring the liboauth C Library for PlayBook</title><content type='html'>&lt;h1&gt;Overview&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;You've decided to write a PlayBook App with the NDK (Native Development Kit).  That's awesome, let's learn how to port an OSS library you want to use in your new app.&lt;br /&gt;&lt;br /&gt;For those of you who are ./configure experts, please point out anything I have wrong or maybe could do differently which might make this easier.&lt;br /&gt;&lt;br /&gt;Ok so first off, I am not a ./configure expert but I am perfectly willing to beat my head against the compiling and linking wall until I get something that works.&lt;br /&gt;&lt;br /&gt;Some prerequisites:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I am on a Mac, switching between a Snow Leopard and a Lion box.  So this should work for either.  If you are on Windows, please feel free to fork my post and write up how you did this on Windows.  If you do, then please refer back here for the Mac Devs who find your site.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I expect that you have installed the BlackBerry Tablet OS NDK in the default locations.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I am using 2 PlayBooks for testing.  One running 1.0.7 and one running 2.0.  You can expect this to work for either, if not let me know and I will verify that it is working no the latest OS.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; You know what the Terminal.app is and aren't afraid to use it.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Let's get started.  &lt;br /&gt;&lt;h2&gt;Porting liboauth (&lt;a href="http://liboauth.sourceforge.net/"&gt;http://liboauth.sourceforge.net/&lt;/a&gt;)&lt;/h2&gt;I choose liboauth since it involved the least amount of work for the library's I have been working with.  I built liboath-0.9.4 for PlayBook.  I only built the device (arm) version since I am not using the simulator; I like to test on the metal; but with some minor variations to the options it should not be hard to get a simulator compatible version built.  &lt;br /&gt;&lt;h3&gt;First: Set the environment for building&lt;/h3&gt;To do this source the NDK included environment script: &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;source /Developer/SDKs/bbndk-1.0/bbndk-env.sh&lt;/pre&gt;&lt;/blockquote&gt;This should setup your environment for the QNX compiler so we can build for the PlayBook.  Here is what that looks like (at time of writing): &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;QNX_TARGET="/Developer/SDKs/bbndk-1.0/target/qnx6"&lt;br /&gt;QNX_HOST="/Developer/SDKs/bbndk-1.0/host/macosx/x86"&lt;br /&gt;QNX_CONFIGURATION="/Users/YOUR_USERNAME_HERE/Applications/Library/Research In Motion/BlackBerry Native SDK"&lt;br /&gt;MAKEFLAGS="-I$QNX_TARGET/usr/include"&lt;br /&gt;DYLD_LIBRARY_PATH="/Developer/SDKs/bbndk-1.0/host/macosx/x86/usr/lib:$DYLD_LIBRARY_PATH"&lt;br /&gt;PATH="$QNX_HOST/usr/bin:$QNX_HOST/usr/qde/eclipse/jre/bin:$PATH"&lt;br /&gt;export QNX_TARGET QNX_HOST QNX_CONFIGURATION MAKEFLAGS DYLD_LIBRARY_PATH PATH&lt;/pre&gt;&lt;/blockquote&gt;&lt;h3&gt;Second: Modify the config.sub to include the CPU instruction set for ARMv7&lt;/h3&gt;When we set the target and host in the ./configure command we will be using the PlayBook CPU type of armv7, we will need to add that to the config.sub since it is missing from liboauth's config.sub.  I did this by searching for armv, where you will find and switch out the line shown in the following diff, notice I just added 7 into the armv[2345] statement:  &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;diff --git a/config.sub b/config.sub&lt;br /&gt;index c2d1257..dd4ef08 100755&lt;br /&gt;--- a/config.sub&lt;br /&gt;+++ b/config.sub&lt;br /&gt;@@ -249,7 +249,7 @@ case $basic_machine in&lt;br /&gt;| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \&lt;br /&gt;| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \&lt;br /&gt;| am33_2.0 \&lt;br /&gt;-       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \&lt;br /&gt;+       | arc | arm | arm[bl]e | arme[lb] | armv[23457] | armv[345][lb] | avr | avr32 \&lt;br /&gt;| bfin \&lt;br /&gt;| c4x | clipper \&lt;br /&gt;| d10v | d30v | dlx | dsp16xx \&lt;/pre&gt;&lt;/blockquote&gt;&lt;h5&gt;Sidetrack: If you want to look at some more details on the CPU, check out &lt;a href="http://en.wikipedia.org/wiki/Texas_Instruments_OMAP"&gt;http://en.wikipedia.org/wiki/Texas_Instruments_OMAP&lt;/a&gt;&lt;/h5&gt;&lt;h3&gt;Third: Run ./configure with some options&lt;/h3&gt;Here is the ./configure I used.  I included the OpenSSL and the Curl libraries.  &lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;./configure CXX="QCC -V4.4.2,gcc_ntoarmv7le_cpp" CC="qcc -V4.4.2,gcc_ntoarmv7le" --prefix=$PWD/playbook NM=ntoarmv7-nm RANLIB=ntoarmv7-ranlib STRIP=ntoarmv7-strip AR=ntoarmv7-ar LD=ntoarmv7-ld LDFLAGS="-L/Developer/SDKs/bbndk-1.0/target/qnx6/armle-v7/usr/lib/" CURL_CFLAGS="-DFD_SETSIZE=64 -g -O2" CURL_LIBS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections" --build=i386-apple-darwin11.2.0  INCLUDES="/Developer/SDKs/bbndk-1.0/target/qnx6/armle-v7/usr/include" --target=armv7-nto --host=armv7-nto&lt;/b&gt;&lt;/blockquote&gt;If the above worked then great, you can now run make, else, you will need to try to debug the problem with your environment/configuration.  &lt;br /&gt;&lt;h3&gt;Fourth: Run make&lt;/h3&gt;Run make and then make install to install into the path we chose in our configure statement which was set with the --prefix=$PWD/playbook.    What is $PWD, it is the environment variable for the directory you are building the library within.    Basically, the make install will make a new directory called playbook and place all the built artifacts into that directory.  &lt;br /&gt;&lt;h3&gt;Lastly: Pull liboauth into your project&lt;/h3&gt;I'll leave that for the user to work out but here is a sample &lt;a href="https://github.com/mthistle/liboauth-for-BlackBerry-PlayBook"&gt;liboauth on BlackBerry PlayBook qde project&lt;/a&gt; on github that has the built library and the test/selftest_wiki.c file renamed to main.c included to verify that the library is working.  &lt;br /&gt;&lt;h2&gt;Finishing&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;With a little tweaking of the ./configure, porting an OSS project to the PlayBook is not to hard.  When you run into compiler issues the story can be a little different (read, lots of hair pulling) but is not insurmountable.&lt;br /&gt;&lt;br /&gt;Good luck with your app!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-2498295707814236141?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/2498295707814236141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=2498295707814236141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2498295707814236141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2498295707814236141'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2011/11/configuring-liboauth-c-library-for.html' title='Configuring the liboauth C Library for PlayBook'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-2033111346454298485</id><published>2011-08-19T09:19:00.000-07:00</published><updated>2011-08-19T09:19:27.783-07:00</updated><title type='text'>OCMock observerMock and unrecognized selector</title><content type='html'>&lt;br /&gt;&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;I've been writing lots of unit tests for some new classes that use process wide NSNotifications.  I wanted to test these since I have not written NSNotification code often and this is a base class that a lot of future code is going to be built upon.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;A handy way to test these are to use OCUnit with OCMock to create mock observers to verify that your notifications are being called.  Many others have talked about how to setup OCUnit, OCMock, and do Unit Testing in Xcode so I won't go there.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;One article that did help me out with the OCMock observerMock usage was Alex Vollmer's &lt;a href="http://alexvollmer.com/posts/2010/06/28/making-fun-of-things-with-ocmock/"&gt;Making Fun of Things with OCMock&lt;/a&gt;.  I used his example to build upon to write my mock observer tests.&lt;/span&gt;&lt;/pre&gt;&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;I did run into a problem though while testing.  A test for a notification, let's call it MyCoolNotification, would pass and then a second test that tested this notification would fail.  The weird thing if I would see failures like:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;[NSCFString handleNotification:]: unrecognized selector ... &lt;/li&gt;&lt;br /&gt;&lt;li&gt;[NSCFNumber handleNotification:]: unrecognized selector ... &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;These failures would be for the same call, same line of the test, but on different runs I would get different classes throwing exceptions due to the unrecognized selector.  What to do?&lt;/span&gt;&lt;/pre&gt;&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;I put it together when I noticed the pattern, that the first test of usage of MyCoolNotification would pass but the second and remaining would fail.&lt;br /&gt;&lt;br /&gt;The examples of the usage of [OCMockObject observerMock] left out one important NSNotification item.  &lt;span class="Apple-style-span" style="color: yellow;"&gt;&lt;span class="Apple-style-span" style="background-color: black;"&gt;Once you finish your test, don't forget to remove your mock from observing the notification.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;Here is a more complete example of that I am talking about:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/pre&gt;&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;- (void)test_MyCoolNotification {&lt;br /&gt;  id mock = [OCMockObject observerMock];&lt;br /&gt;  [[NSNotificationCenter defaultCenter] addMockObserver:mock&lt;br /&gt;                                                   name:MyCoolNotification&lt;br /&gt;                                                 object:nil];&lt;br /&gt;                                               &lt;br /&gt;  [[mock expect] notificationWithName:MyCoolNotification object:[OCMArg any] userInfo:[OCMArg any]];&lt;br /&gt;&lt;br /&gt;  MyCoolClass *coolio = [MyCoolClass create];&lt;br /&gt;  [coolio someMethodThatFiresMyCoolNotification];&lt;br /&gt;&lt;br /&gt;  [[NSNotificationCenter defaultCenter] removeObserver:mock];&lt;br /&gt;  [mock verify];&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;By adding the removal of the object from the NSNotificationCenter you can now test the notification multiple times in multiple tests.&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-2033111346454298485?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/2033111346454298485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=2033111346454298485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2033111346454298485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2033111346454298485'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2011/08/ocmock-observermock-and-unrecognized.html' title='OCMock observerMock and unrecognized selector'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-1400395707860698015</id><published>2011-03-05T14:29:00.001-08:00</published><updated>2011-03-05T14:29:46.987-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TextMate'/><title type='text'>TextMate</title><content type='html'>Holy Preview Update Batman!!&lt;br /&gt;&lt;br /&gt;I have new respect for TextMate.  I had the web preview open and I made a change to some javascript (switching the username from a sample user to my username) and the preview updated immediately to show me the changes.&lt;br /&gt;&lt;br /&gt;Slick and very handy for editing this web app.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-1400395707860698015?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/1400395707860698015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=1400395707860698015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1400395707860698015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1400395707860698015'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2011/03/textmate.html' title='TextMate'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-4440905626283275315</id><published>2011-03-03T21:41:00.001-08:00</published><updated>2011-03-03T21:41:59.995-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PlayBook'/><title type='text'>PlayBook App</title><content type='html'>Well, my first PlayBook app is in development.  I am going to write it using the BlackBerry WebWorks SDK which boils down to; I am writing a web app.  I don't know the latest web technologies to save my life so this should be a good experiment to see how easy it is to develop something.&lt;br /&gt;&lt;br /&gt;I've found two Javascript libraries to help me along the way and handle a large portion of the work I need for this app.  Now I just need to do the gluing and get to work on getting something running in two weeks.&lt;br /&gt;&lt;br /&gt;I will be doing a PlayBook Hackathon in 2 weeks and I want to be able to demo the app at the end of the event so I am taking my experience from my last Hackathon and going into this one with the basics of the app laid out.  Then at the Hackathon I can get some advice on any areas that are giving me trouble.&lt;br /&gt;&lt;br /&gt;Expect some further posts as I progress and once I get the demo completed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-4440905626283275315?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/4440905626283275315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=4440905626283275315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4440905626283275315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4440905626283275315'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2011/03/playbook-app.html' title='PlayBook App'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-8672394465039273626</id><published>2011-02-20T21:17:00.001-08:00</published><updated>2011-02-20T21:17:11.722-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Moving'/><title type='text'>Preparing For Sale</title><content type='html'>Been a crazy weekend.  In the last 24hrs I have been violently ill with food poisoning, picked up paint supplies for our painter that start yesterday, and filled one side of my garage with stuff to give away or throw out.&lt;br /&gt;&lt;br /&gt;Just another fun filled day getting ready to leave my frozen homeland for milder climes in Washington state.&lt;br /&gt;&lt;br /&gt;The house prep work is going well.  Selling a house is probably easier in a sense when you are also moving to a new city, country, job (for my wife), and need to down size what you are taking with you.&lt;br /&gt;&lt;br /&gt;Part of our big move is that we must inventory everything we own and assign a replacement value to it.  This is for insurance purposes.  Hence, you can tell that we are motivated to count less and throw out more.  I mean really, if I have not used some of this stuff since we moved in here 6 years ago, is there really a chance I am going to be needing it when we settle in our new home?  Nope, thought not.&lt;br /&gt;&lt;br /&gt;Our first house showing to a prospective buyer is tomorrow.  This came about due to word of mouth which is cool.  Let's hope the fact our house is in a shambles since half of it is in a state of being painted, just painted, or about to be painted.&lt;br /&gt;&lt;br /&gt;At least the house is clean and less cluttered by the minute.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-8672394465039273626?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/8672394465039273626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=8672394465039273626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/8672394465039273626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/8672394465039273626'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2011/02/preparing-for-sale.html' title='Preparing For Sale'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-9172189674186650539</id><published>2011-01-21T20:59:00.001-08:00</published><updated>2011-01-21T20:59:31.582-08:00</updated><title type='text'>HackOTT: A BlackBerry PlayBook App</title><content type='html'>&lt;h2&gt;What is HackOTT?&lt;/h2&gt;&lt;br /&gt;Hack Ottawa = HackOTT is part of the HackDays across Canada.  Here's how it works:&lt;br&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Gather developers&lt;br /&gt;&lt;li&gt;Provide food, space to work, and APIs (Application Programming Interfaces, the building blocks for applications that programmers use to like you know, build stuff)&lt;br /&gt;&lt;li&gt;Let them code for 8 hours.&lt;br /&gt;&lt;li&gt;Judge the results&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Read more here: &lt;a href="http://hackdays.ca/2011/01/hack-ottawa-is-here/"&gt;http://hackdays.ca/2011/01/hack-ottawa-is-here/&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Register Here: &lt;a href="http://guestlistapp.com/events/42672"&gt;http://guestlistapp.com/events/42672&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I've signed up for the event here in Ottawa and am starting to prep for the event.  So, let's get down to the title tagline of this post: A BlackBerry PlayBook App.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;If you don't know, I work for Research In Motion, better known as RIM.  The RIM tablet offering is the PlayBook and it's coming soon.  Being a geek, lover of new tech, and always in pursuit of a challenge; I've decided I'll design my app to run on the PlayBook.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;h2&gt;Dude a PlayBook, Like Let Me See It&lt;/h2&gt;&lt;br /&gt;"Cool, Mark, you've got a PlayBook to use already?  They aren't even for sale yet," you say.  Well, the truth is I don't have a PlayBook and if I did I would not be bringing it out to play.  So, don't expect me to be toting one around to show you and demo.  I have to wait for them to be available for sale like everyone else.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Well then how am I going to develop for the PlayBook?  With the dev tools including the BlackBerry Tablet SDK and the BlackBerry Tablet Simulator for VMware Fusion; on my Mac Book Pro of course.  All further discussion is specific to programming on the Mac.  If you are a Windows dev, sorry, this might be of little use to you.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;h2&gt;Setting Up A New Project&lt;/h2&gt;&lt;br /&gt;Let's jump in and get started.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Setup a code repository with your favourite hosted repository site.  In my case I am using &lt;a href="http://bitbucket.org"&gt;http://bitbucket.org&lt;/a&gt; for hosting my code.  Private for now but the project may go public once complete.&lt;br /&gt;&lt;li&gt;Review the steps in the dev guide for the dev environment you want to develop your app in.  Those would be the &lt;a href="http://docs.blackberry.com/en/developers/deliverables/23978/"&gt;BlackBerry WebWorks SDK: Getting Started Guide for Mac Developers&lt;/a&gt; or the &lt;a href="http://docs.blackberry.com/en/developers/deliverables/21878/"&gt;BlackBerry Tablet OS SDK for Adobe AIR: Getting Started Guide for Mac Developers&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Download VMware Fusion: Note, if you have a copy of Parallels on your Mac you can upgrade to VMware Fusion (until March 15, 2011) for $20 USD.  Go here to take advantage of the offer: &lt;a href="http://www.vmware.com/vmwarestore/fusion_upgrade_promo.html"&gt;http://www.vmware.com/vmwarestore/fusion_upgrade_promo.html&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Download the &lt;a href="https://www.blackberry.com/Downloads/contactFormPreload.do?code=DC727151E5D55DDE1E950767CF861CA5&amp;dl=81E360527A99E1CEF642DFA07364ACBC"&gt;BlackBerry Tablet OS Simulator ISO for Mac&lt;/a&gt; from the &lt;a href="http://us.blackberry.com/developers/tablet/adobe.jsp"&gt;BlackBerry Tablet OS SDK for Adobe AIR&lt;/a&gt; page.  You'll need to sign up as a dev to get the ISO.  During the install of the ISO in VMware Fusion you'll get prompted to delete contents of /dev/hd0 in the sim, hit y and return to continue:&lt;img src="http://lh3.ggpht.com/__ACR8NBMIeo/TTpKrhi2emI/AAAAAAAABRE/8znYuIbuUMo/Screen%20shot%202011-01-21%20at%2010.09.18%20PM.png?imgmax=800" alt="Screen shot 2011-01-21 at 10.09.18 PM.png" border="0" width="721" height="258" /&gt;&lt;br /&gt;&lt;li&gt;Download and install the &lt;a href="http://www.adobe.com/go/getairsdk"&gt;Adobe AIR SDK 2.5&lt;/a&gt; &lt;br /&gt;&lt;li&gt;Download and install the appropriate BlackBerry SDK for Adobe AIR.  here are the two of them for Mac: &lt;a href="https://www.blackberry.com/Downloads/contactFormPreload.do?code=DC727151E5D55DDE1E950767CF861CA5&amp;dl=78786EAE265728E8E609462A06EDA6C8"&gt;BlackBerry WebWorks SDK for Tablet OS Beta for Mac&lt;/a&gt; and of course the &lt;a href="https://www.blackberry.com/Downloads/contactFormPreload.do?code=DC727151E5D55DDE1E950767CF861CA5&amp;dl=D94E6718F7D44F7351B1FB1EC9427291"&gt;BlackBerry Tablet OS SDK Beta3 for Adobe AIR for Mac&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;WARNING: The download links will probably update frequently as new releases are made.  These are valid as of January 21, 2011.  Check the BlackBerry Tablet OS website for the latest versions.&lt;/i&gt;&lt;br /&gt;&lt;li&gt;&lt;i&gt;A note about installing.  I ran into trouble when I installed the Adobe AIR SDK into a folder that had a space in it's path.  If you installed the Adobe AIR SDK 2.5 (or the latest required) and the BlackBerry SDK installer tells you it can not find Adobe Air SDK then make sure there are no spaces in the path that you installed Adobe Air SDK into.  For example this path is bad "/Users/snoopy/My Projects" but this path is fine "/Users/snoopy/MyProjects".  I opened a Developer Issue Tracker for this bug.&lt;/i&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;BlackBerry PlayBook Resources&lt;/h2&gt;&lt;br /&gt;Ok, got that done?  Good.  Let's drop a couple links to resources to help you along the way of coding up your BlackBerry PlayBook App.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://devblog.blackberry.com/?CPID=OTC-DEVBLOG&amp;cp=OTC-DEVBLOG"&gt;BlackBerry Developer's Blog&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://supportforums.blackberry.com/rim/?category.id=BlackBerryDevelopment"&gt;BlackBerry Development Forums&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://us.blackberry.com/developers/resources/issuetracker/"&gt;Developer Issue Tracker&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://github.com/blackberry/WebWorks"&gt;BlackBerry WebWorks on github&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Ok, that's all for tonight.  Next, I'll be reading up on the WebWorks SDK and the Adobe AIR SDK to see which one I'd like to use for the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-9172189674186650539?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/9172189674186650539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=9172189674186650539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/9172189674186650539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/9172189674186650539'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2011/01/hackott-blackberry-playbook-app.html' title='HackOTT: A BlackBerry PlayBook App'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/__ACR8NBMIeo/TTpKrhi2emI/AAAAAAAABRE/8znYuIbuUMo/s72-c/Screen%20shot%202011-01-21%20at%2010.09.18%20PM.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-2840349156829814413</id><published>2010-06-18T19:39:00.000-07:00</published><updated>2010-06-18T19:39:34.606-07:00</updated><title type='text'>Nintendo Jumps the Shark?</title><content type='html'>If you don't know by now, Nintendo made the surprise announcement of a new Goldeneye game rebooted (as they call it) for the Wii.  Since it is 2010 and Pierce Brosnan is no longer James Bond, they have redone the game with Daniel Craig.&lt;br /&gt;&lt;br /&gt;Now don't get me wrong.  I love James Bond.  I think Daniel Craig is an excellent Bond.&lt;br /&gt;&lt;br /&gt;But Nintendo, how bad are things when you have to reboot not the franchise but one of the best first person party shooters of all-Nintendo time?&lt;br /&gt;&lt;br /&gt;I look forward to seeing and playing the game but Nintendo you have big shoes to fill rebooting Goldeneye.  If you can pull it off excellent.  If it is a dud, has Nintendo jumped the shark?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-2840349156829814413?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/2840349156829814413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=2840349156829814413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2840349156829814413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2840349156829814413'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2010/06/nintendo-jumps-shark.html' title='Nintendo Jumps the Shark?'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-5566886686839015803</id><published>2010-02-07T19:49:00.001-08:00</published><updated>2010-02-07T19:49:12.292-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='HockeyTweet'/><title type='text'>HockeyTweet 1.2 Now Available in the App Store</title><content type='html'>&lt;a href="http://itunes.apple.com/ca/app/hockeytweet/id342981558?mt=8"&gt;HockeyTweet&lt;/a&gt; version 1.2 is now available in the Apple App Store.  This is a minor release which fixes a change to Twitter's OAuth system used for user authentication.&lt;br /&gt;&lt;br /&gt;You can download the upload today if you are already a user.  Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-5566886686839015803?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/5566886686839015803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=5566886686839015803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/5566886686839015803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/5566886686839015803'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2010/02/hockeytweet-12-now-available-in-app.html' title='HockeyTweet 1.2 Now Available in the App Store'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-2924661926385461270</id><published>2010-02-03T21:44:00.001-08:00</published><updated>2010-02-03T21:44:21.333-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Social Media'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='HockeyTweet'/><title type='text'>Fix for Twitter-OAuth-iPhone Due to Twitter Mobile OAuth Update</title><content type='html'>Today at 6pm EST Twitter pushed a new OAuth update for the mobile web page that users use to authorize an application to send tweets on their behave.  This is great since they made the user experience on mobile devices and specifically the iPhone better.&lt;br /&gt;&lt;br /&gt;I am using &lt;a href="http://github.com/bengottlieb/Twitter-OAuth-iPhone"&gt;Ben Gottlieb's Twitter-OAuth-iPhone&lt;/a&gt; library to handle the retrieving of the pin that Twitter assigns to the an app for the requesting user.  Ben's library is great and makes it very easy for a dev to drop OAuth support into a Twitter enabled application, like &lt;a href="http://lockernine.com/HockeyTweet.html"&gt;HockeyTweet&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There was a small problem with this mobile update.  The web page element that contains the oauth pin was changed from oauth_pin to oauth-pin.  This broke any app using the Twitter-OAuth-iPhone library.&lt;br /&gt;&lt;br /&gt;The fix is simple.  Go into your code and so a search for oauth_pin and change that to oauth-pin.  Here are the files from Ben's library that are impacted by today's change:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Libraries &amp; Headers/jQueryInject.txt&lt;br /&gt;&lt;li&gt;SAOAuthTwitterEngine/SA_OAuthTwitterController.m&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Make the change, recompile, and retest your app.  You should be sending tweets again in no time.&lt;br /&gt;&lt;br /&gt;HockeyTweet was updated (submitted to Apple for review) to version 1.2 tonight as part of this fix.  I'll send an update when the fix is pushed to the App Store.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-2924661926385461270?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/2924661926385461270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=2924661926385461270' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2924661926385461270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2924661926385461270'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2010/02/fix-for-twitter-oauth-iphone-due-to.html' title='Fix for Twitter-OAuth-iPhone Due to Twitter Mobile OAuth Update'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-9041831151107767383</id><published>2010-01-21T10:13:00.000-08:00</published><updated>2010-01-21T18:24:00.319-08:00</updated><title type='text'>Ottawa Based Mac Programmer Collective...coming soon</title><content type='html'>We will code in the coffee shops, at home and in our car...&lt;br /&gt;&lt;br /&gt;We will code as a group or alone....&lt;br /&gt;&lt;br /&gt;We will ship in 3 weeks....&lt;br /&gt;&lt;br /&gt;Yes, I am working on a new iPhone App as part of the launch of a new Programmer Collective that is launching in Ottawa, Ontario (Canada).  The name of the collective will be released soon, as will our new app.&lt;br /&gt;&lt;br /&gt;Some details about the collective:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;We are a group of local Ottawa devs that are coming together under a common banner.&lt;br /&gt;&lt;li&gt;We will continue to release software as individuals and the occasional group effort.&lt;br /&gt;&lt;li&gt;We code for the Mac, iPhone and are Cocoaheads.&lt;br /&gt;&lt;li&gt;We share resources (books, web hosting, blog hosting, code hosting, etc).&lt;br /&gt;&lt;li&gt;We share code, ideas, advice, and moral support.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Keep your eyes peeled, the curtain will be raised soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-9041831151107767383?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/9041831151107767383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=9041831151107767383' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/9041831151107767383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/9041831151107767383'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2010/01/ottawa-based-mac-programmer.html' title='Ottawa Based Mac Programmer Collective...coming soon'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-1287205684639457117</id><published>2010-01-03T17:44:00.000-08:00</published><updated>2010-01-04T17:31:16.797-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lockernine'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Hockey'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='sales'/><category scheme='http://www.blogger.com/atom/ns#' term='HockeyTweet'/><title type='text'>HockeyTweet Breaks into the US App Store</title><content type='html'>I made my first sale in the US App Store yesterday for &lt;a href="http://itunes.com/apps/lockernine"&gt;HockeyTweet&lt;/a&gt;.  It's a small start and encouraging to see the app selling outside Canada.&lt;br /&gt;&lt;br /&gt;I also updated the &lt;a href="http://lockernine.com"&gt;Lockernine&lt;/a&gt; website based on feedback from a user.  There is now a direct link to the App Store for the apps for sale by Lockernine (Lockernine being me and apps being yes there are more in the works).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-1287205684639457117?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/1287205684639457117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=1287205684639457117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1287205684639457117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1287205684639457117'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2010/01/hockeytweet-breaks-into-us-app-store.html' title='HockeyTweet Breaks into the US App Store'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-338281792054909221</id><published>2010-01-02T11:41:00.000-08:00</published><updated>2010-01-02T11:54:35.132-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lockernine'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Social Media'/><category scheme='http://www.blogger.com/atom/ns#' term='Hockey'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='HockeyTweet'/><title type='text'>Steve Ballmer Scoops HockeyTweet</title><content type='html'>Steve Ballmer announced the future of Hockey viewing on CBC's The Hour with George Stroumboulopoulos. Steve knows that part of watching hockey is yelling  at your TV and sharing with your friends and driving the other fans crazy.  He scooped &lt;a href="http://itunes.com/apps/lockernine"&gt;HockeyTweet&lt;/a&gt; on the show and talked about how you should be able to immediately tell your friend about a fantastic goal -- no matter whether your friend is next to you on the couch, at the bar or at the game.  &lt;br /&gt;&lt;br /&gt;Steve's vision of the future didn't take long to realize.  &lt;a href="http://itunes.com/apps/lockernine"&gt;HockeyTweet&lt;/a&gt; is now available in the Apple App Store.  After you've downloaded a copy, take a minute to check out Steve Ballmer''s interview.&lt;br /&gt;&lt;br /&gt;Steve -- just visit the iTunes store to get your copy.  Better yet, send me an e-mail and I'll send you a promo code.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--QT_WritePoster_XHTML('Click to Play', 'http://lockernine.com/Media/Steve-Ballmer-poster.jpg','http://lockernine.com/Media/Steve-Ballmer.mov','640', '496', '','controller', 'true','autoplay', 'true','bgcolor', 'black','scale', 'aspect');//--&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-338281792054909221?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/338281792054909221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=338281792054909221' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/338281792054909221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/338281792054909221'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2010/01/steve-ballmer-scoops-hockeytweet.html' title='Steve Ballmer Scoops HockeyTweet'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-8733425553392968477</id><published>2009-12-26T08:04:00.000-08:00</published><updated>2010-01-04T17:32:01.703-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Hockey'/><category scheme='http://www.blogger.com/atom/ns#' term='App Store'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='NC-17'/><category scheme='http://www.blogger.com/atom/ns#' term='HockeyTweet'/><title type='text'>NC-17 Rated Hockey Twitter App on the iPhone</title><content type='html'>I've gotten feedback about &lt;a href="http://itunes.apple.com/us/app/hockeytweet/id342981558?mt=8"&gt;HockeyTweet&lt;/a&gt; that goes along the lines:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;An NC-17 Hockey app for the iPhone, that is my kind of hockey.&lt;/li&gt;&lt;li&gt;Hey, where are the girls in this app?&lt;/li&gt;&lt;li&gt;What no porn?&lt;/li&gt;&lt;/ul&gt;Kidding aside, why would I launch HockeyTweet with an NC-17 rating?  It clearly is just a Twitter client for sending tweets about Hockey.&lt;br /&gt;&lt;br /&gt;For most developers and those that follow the App Store saga, the reason is probably clear.  For those that don't know let me explain.  There is what is called a UIWebView, for non-programmers, this means a web browser view/window in my app.  That UIWebView has access to Twitter so users can authenticate and if required to create a new Twitter account.  There is a loop-hole in that UIWebView when you are on Twitter that means you could go out onto the Internet at large and view "objectionable material."&lt;br /&gt;&lt;br /&gt;Since I allow the user to be able to navigate through Twitter to the internet they could view something that is objectionable.  This sounds ridiculous and it is but the point here is that some apps have been rejected due to this and chose the route of least friction in the app review process.&lt;br /&gt;&lt;br /&gt;So, yes, the app is rated NC-17.  Does it have objectionable material in it?  No.  Should it be rated lower?  Yes, but why would I go the route that has lead other devs to have their apps rejected?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-8733425553392968477?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/8733425553392968477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=8733425553392968477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/8733425553392968477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/8733425553392968477'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/12/nc-17-rated-hockey-twitter-app-on.html' title='NC-17 Rated Hockey Twitter App on the iPhone'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-1015739123720781295</id><published>2009-12-24T02:31:00.000-08:00</published><updated>2010-01-04T17:33:58.704-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='User Interface Design'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='UX'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='HockeyTweet'/><title type='text'>Designing HockeyTweet</title><content type='html'>It's been a long road, longer than I thought it would take but then aren't many things?  How did &lt;a href="http://itunes.apple.com/us/app/hockeytweet/id342981558?mt=8"&gt;HockeyTweet&lt;/a&gt; begin?&lt;br /&gt;&lt;br /&gt;The main design goal of &lt;a href="http://itunes.apple.com/us/app/hockeytweet/id342981558?mt=8"&gt;HockeyTweet&lt;/a&gt; was to create a fast Tweet creation interface for Hockey, specifically the NHL.  This was born from the desire to allow people to quickly tweet their thoughts about the game without missing the action.&lt;br /&gt;&lt;br /&gt;This desire stems from my youth, watching Hockey with my Dad.  When there was a play we did not agree with we shouted out our protests.  When there was an awesome save, there were shouts of joy.&lt;br /&gt;&lt;br /&gt;So how do you bring this experience to the iPhone?&lt;br /&gt;&lt;br /&gt;First I thought about how to speed up tweet entry.  To do that let's save the user time by giving them the list of teams, players, penalties, and games.  What did I need to consider for each?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__ACR8NBMIeo/SzNxYI1PdyI/AAAAAAAABFw/3aP5uAJeJwg/s1600-h/Screenshot+2009.10.22+16.40.29.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 222px; height: 320px;" src="http://1.bp.blogspot.com/__ACR8NBMIeo/SzNxYI1PdyI/AAAAAAAABFw/3aP5uAJeJwg/s320/Screenshot+2009.10.22+16.40.29.jpg" alt="" id="BLOGGER_PHOTO_ID_5418799436158433058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Teams&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Full name or abbreviation?  Abbreviation wins out by far, we are only working with 140 characters in a tweet afterall.&lt;/li&gt;&lt;li&gt;Do we need to update this?  Not if we limit our scope to the NHL (teams are pretty static, name changes are not common.)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Players&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Full name or abbreviated?  After some testing and consideration for length, I went with full last name and first initial.&lt;/li&gt;&lt;li&gt;Numbers?  Extraneous info, if you are a not a big fan you know the star's names but not necessarily their numbers.  No numbers.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Do we need to update this?  Yes, team rosters change often due to injuries, trades, retirement, new players, etc.  This will need to updated regularly - need to consider this in how to perform updates.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Penalties&lt;ul&gt;&lt;li&gt;Full name of abbreviated?  For clarity and since I expect some of the long ones will not be used often I went with full name for each.  Where the penalty had a common name that was shorter I used that.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Do these change often?  No, no need to build in updating for penalties.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Game Schedule&lt;ul&gt;&lt;li&gt;How to handle showing a game?  Use abbreviated team name with vs.&lt;/li&gt;&lt;li&gt;Games change often so this definitely needs to be updated on a regular basis.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Do we need time of the game?  No, this app is for tweeting about the game while it is happening.  Also, want to consider the day before and after since people may want to tweet about an upcoming game or yesterdays game.  Time can be dropped.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ok, we are showing yesterday, today and tomorrow.  How are we showing that?  I went with the 3 letter month and the date only.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Why no year?  Don't need it, we are only showing current games, not previous years.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Numeric month would be shorter, why not use numerical month?  You save 1 character for less clarity.  Then you have to decide on a format MM/DD or DD/MM.  I feel the 3 letter month provides more clarity, another decision done.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;Handling Updates&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;During my design I identified that players and schedules had to be updated regularly.  How to handle that?  This was something new for me since I had to figure out how to do regular updates to my app without impacting the user experience in a negative way.&lt;br /&gt;&lt;br /&gt;After some research I settled on web services as the solution.  I first designed a web service with Perl SOAP::XML.  What did I learn besides new tech (I had never programmed a web service before so this was all new)?&lt;ul&gt;&lt;li&gt;I know Perl well so writing the prototype web service took about 1.5 hours.  Good references through The Perl Bookshelf and Google certainly helped.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Integrating the web service using asynchronous URL requests with asynchronous XML parsing was a mess.  There was a lot of code to handle what was a simply a problem of go get some data and populate this array for display in the UIPicker.  Trust me, the first pass of this code was ugly and hairy.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Where would I host this?   My home system was out of bounds, I did not want to re-enter the world of IT and server maintenance to host my own web service.  A hosted solution would work but that would cost money for an app that would likely have a limited customer base (iPhone Fans who are Hockey fans, that watch the NHL, and use Twitter).  The total earnings for the app would probably not cover the cost of one year of hosting, so I needed something free.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How will this web service scale?  Not sure, probably not well without lots or testing and more research to make sure I wrote a good web service.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How would I cache the web service data?  In memory?  On disk?  If on disk how would I do that on the hosting service?  What about Perl version?  Which would the hosting service support?  Could I install my own custom Perl modules?  Many questions here to answer.&lt;/li&gt;&lt;/ul&gt;At the same time, hosting became an issue I had to solve.  There were a lot of questions to answer for what appears on the surface to be a simple app.  I had lots of tech to piece together so what next?  Research!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Google App Engine&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I started researching hosting solutions that offered the ability to run my own Perl services.  All the hosting services seemed more expensive than I wanted to pay.  Through the searching &lt;a href="http://www.readwriteweb.com/archives/google_cloud_control.php"&gt;I kept coming back to Google App Engine&lt;/a&gt;.  The pricing model is generous and I use lots of Google services which I find sometimes limited but get the job done 90% of the time.&lt;br /&gt;&lt;br /&gt;How does &lt;a href="https://appengine.google.com/"&gt;Google App Engine&lt;/a&gt; work when hosting from it?  My summary would be, unless you write something that is very successful, it's free.  Once it starts to cost money (nothing for me yet) you should be already monetizing your product.  If you are not making enough money to pay the &lt;a href="http://www.readwriteweb.com/archives/google_app_engine_announcements.php"&gt;generous hosting with Google App Engine&lt;/a&gt; then why are you offering the product?&lt;br /&gt;&lt;br /&gt;Google App Engine had a kink though, I had to convert the already written (though prototype) service in Python or Java.  Python was just poking it's head up at my day job so I figured why not go that route.  At this time I enlisted a friend who was interested in the project.  He signed on to rewrite the prototype Perl SOAP::XML web service using &lt;a href="https://appengine.google.com/"&gt;Google's App Engine and in Python&lt;/a&gt;.  This relieved me of some work so I could concentrate on the app.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;JSON 2.2 Framework for iPhone&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Around the same time, I came across &lt;a href="http://www.24100.net/2009/06/json-framework-22-for-iphone-and-cocoa-released/"&gt;JSON 2.2 Framework for iPhone&lt;/a&gt;.  Let me just say, that this is an awesome framework.  It let me remove a lot of the hairy XML parsing code from my app and replace it with a clean implementation that effectively lets me pass Python Dictionaries of arbitrary complexity from the Python web service to HockeyTweet where the JSON string is cast to a Cocoa NSDictionary.  The ease of using this library can not be said enough.&lt;br /&gt;&lt;br /&gt;If you need to write a web service to work with the iPhone, look at &lt;a href="https://appengine.google.com/"&gt;Google App Engine&lt;/a&gt;, use Python, and the &lt;a href="http://www.24100.net/2009/06/json-framework-22-for-iphone-and-cocoa-released/"&gt;JSON 2.2 Framework for iPhone&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ok, so time passed, my partner came and went; he had other pressing projects to work on.  I finally finished version 1.0 of the app near the end of November.  I submitted the app about November 28, 2009.  Then it was time to wait.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;iPhone Tech Talk Toronto&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A week later I was off to &lt;a href="http://developer.apple.com/events/iphone/techtalks/"&gt;Toronto for the iPhone Tech Talk World Tour&lt;/a&gt;.  This is a one day conference where Apple Evangelists run 1 hour sessions (courses/tech previews/tech tricks) and provide services such as UX (User Experience) reviews.  It is effectively a pep rally + course + feedback + networking session with Apple's face to the development community.&lt;br /&gt;&lt;br /&gt;It was AWESOME!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The UX Review and The Redesign&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At the Tech Talk, as soon as I heard that there would be UX reviews I signed up for one.  The review went well.  I received valuable feedback from the Apple team which resulted in 10 new features they felt would polish the app and give it a Wow factor.&lt;br /&gt;&lt;br /&gt;So began The Redesign.  The list of features were:&lt;ol&gt;&lt;li&gt;Improve the Info button (it was not very responsive)&lt;/li&gt;&lt;li&gt;Change the text buttons to icons&lt;/li&gt;&lt;li&gt;Add Arenas to the pre-loaded UIPickers&lt;/li&gt;&lt;li&gt;Add a UIPicker for pre-loaded Hockey Phrases to give the app a more positive spin (the app had a negative spin with just the Penalties that could be combined with Players or Games)&lt;/li&gt;&lt;li&gt;Make the Hockey Phrases user customizable&lt;/li&gt;&lt;li&gt;Change the colour of the Add button from white to the same colour as the other buttons on the main view (the one different button made the view look unfinished)&lt;/li&gt;&lt;li&gt;Indicate using colour (red) to the user when they typed a Tweet over the 140 character limit for a Tweet&lt;/li&gt;&lt;li&gt;Make the fact that a Tweet was successfully sent clearer&lt;/li&gt;&lt;li&gt;The buttons on the flipside view (Settings) could be retouched to make the app look finished&lt;/li&gt;&lt;li&gt;(My own) Add pre-loaded Team rosters and Schedules so that if the user bought the app and ran it without an internet connection, there was data in the app from day one.  The original design was to get the first load of data from the web service.&lt;/li&gt;&lt;/ol&gt;I worked almost every night for a week and I was ready to launch again.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__ACR8NBMIeo/SzNxwWZZGyI/AAAAAAAABF4/zvDBEOiyRtE/s1600-h/Picture+10.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 172px; height: 320px;" src="http://4.bp.blogspot.com/__ACR8NBMIeo/SzNxwWZZGyI/AAAAAAAABF4/zvDBEOiyRtE/s320/Picture+10.png" alt="" id="BLOGGER_PHOTO_ID_5418799852116581154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Not so Fast&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But first, I got feedback that the icons could use more polish.  Eck!  I hired a graphic designer online and he went to work on new icons.  I received 5 of the 7 icons and had good ideas on the other two which I implemented in the tight deadline I gave him.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__ACR8NBMIeo/SzNyk9c9EtI/AAAAAAAABGA/G3rbsBRsFbU/s1600-h/Picture+23.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 172px; height: 320px;" src="http://2.bp.blogspot.com/__ACR8NBMIeo/SzNyk9c9EtI/AAAAAAAABGA/G3rbsBRsFbU/s320/Picture+23.png" alt="" id="BLOGGER_PHOTO_ID_5418800755953701586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Phew!  Now it was time to ship.&lt;br /&gt;&lt;br /&gt;I uploaded again and on Monday&lt;a href="http://itunes.apple.com/us/app/hockeytweet/id342981558?mt=8"&gt; HockeyTweet hit the App Store&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;What would I do differently?&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Hire graphic help earlier in the process.  Work with them to turn my paper/sketch prototypes into the UI which I code on the back end.&lt;/li&gt;&lt;li&gt;Work longer on pinning down the design and the requirements before I start.  I let feature creep push the app in a direction I had to reverse early in the process.&lt;/li&gt;&lt;li&gt;Solicit more early UI design feedback.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-1015739123720781295?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/1015739123720781295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=1015739123720781295' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1015739123720781295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1015739123720781295'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/12/designing-hockeytweet.html' title='Designing HockeyTweet'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__ACR8NBMIeo/SzNxYI1PdyI/AAAAAAAABFw/3aP5uAJeJwg/s72-c/Screenshot+2009.10.22+16.40.29.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-244484707818348476</id><published>2009-12-23T18:17:00.000-08:00</published><updated>2010-01-04T17:34:43.656-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OAuth'/><category scheme='http://www.blogger.com/atom/ns#' term='Ben Gottlieb'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='MGTwitterEngine'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='HockeyTweet'/><title type='text'>Adding Twitter + OAuth to an iPhone App</title><content type='html'>First you will want a way to use the Twitter API.  Go get &lt;a href="http://mattgemmell.com/2008/02/22/mgtwitterengine-twitter-from-cocoa"&gt;MGTwitterEngine&lt;/a&gt; for that (I won't talk about that here since lots of people have explained it well).  Get that and install it and play with it.  You should be posting tweets very quickly from your app with Basic Auth.&lt;br /&gt;&lt;br /&gt;Ok, once you get tweets sending and can retrieve tweets with Matt's code (MGTwitterEngine) you might want to start posting your tweets with your own app name and website.  To do this you will need to use OAuth.  See the &lt;a href="http://apiwiki.twitter.com/OAuth-FAQ"&gt;Twitter API FAQ&lt;/a&gt; about OAuth and Twitter.&lt;br /&gt;&lt;br /&gt;The best way to get this working on the iPhone is to use Ben Gottlieb's &lt;a href="http://github.com/bengottlieb/Twitter-OAuth-iPhone"&gt;Twitter-OAuth-iPhone&lt;/a&gt;.  This is a awesome piece of work by Ben, piecing together several examples, frameworks, and the OAuth process to make using OAuth from the iPhone a piece of cake.&lt;br /&gt;&lt;br /&gt;Follow Ben's readme and sample project and you will be up and running with application branded tweets in no time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-244484707818348476?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/244484707818348476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=244484707818348476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/244484707818348476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/244484707818348476'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/10/adding-twitter-oauth-to-iphone-app.html' title='Adding Twitter + OAuth to an iPhone App'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-4789004714081813566</id><published>2009-12-22T19:37:00.000-08:00</published><updated>2010-01-04T17:35:13.027-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Hockey'/><category scheme='http://www.blogger.com/atom/ns#' term='First App'/><category scheme='http://www.blogger.com/atom/ns#' term='App Store'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='HockeyTweet'/><title type='text'>First iPhone App: HockeyTweet has Launched</title><content type='html'>HockeyTweet is my first foray into the Apple App Store.  HockeyTweet is a Twitter client which makes it fast to send Twitter updates about hockey games in real-time.&lt;br /&gt;&lt;br /&gt;HockeyTweet is purpose built for the NHL.  But enough of repeating the product page in the App Store, check out &lt;a href="http://itunes.apple.com/us/app/hockeytweet/id342981558?mt=8"&gt;HockeyTweet&lt;/a&gt; in the App Store.&lt;br /&gt;&lt;br /&gt;Here are some of the questions I've gotten about developing for the iPhone and what my next plans are:&lt;br /&gt;&lt;br /&gt;Does it cost money to develop for the iPhone?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Short answer no, for the majority of people though the long answer is yes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;No, if you 1. Own a Mac, 2. Only want to write and test apps on your Mac.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Yes, if you 1. Don't own a Mac, 2. Want to run the app on your own device, 3. You want to post the app to the App Store.&lt;/li&gt;&lt;/ul&gt;Ok, how much does it cost?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;$99/year (before taxes) for the iPhone Developer license.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;$$$$ for your Mac&lt;/li&gt;&lt;li&gt;$219 CAN (before taxes) for the 8GB iPod Touch to approximately $1200/year for an iPhone&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Does it cost any more?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Well yes, what is your time worth?  If you are like me and you love to try new things, love to play with different programming languages and create, then this is not a real cost.  If you add that time into your costs, it starts to skyrocket, but hey we are here to have fun and design cool apps that solve problems for people.&lt;/li&gt;&lt;/ul&gt;What are the tools like?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In a word, AWESOME.  I love Xcode (the Apple provider IDE) and the toolset that it comes with.  Basically everything I've used to write, debug, run, test software is available.  The list of features is long but you won't be disappointed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;NOTE: Your mileage may vary if you don't accept the tools and learn them.  I love vi, the editor is not vi.  I decided with Xcode to not fight the tools and try to use replacements.  This is paying off as I learn more shortcuts and they start to sink in.&lt;/li&gt;&lt;/ul&gt;What is next for me and HockeyTweet?&lt;ul&gt;&lt;li&gt;I plan to market HockeyTweet using several tactics with minimum cash.  I'll write about how each of these pans out as I try them.&lt;/li&gt;&lt;li&gt;I will be working on the next version.  The app is designed to allow me to quickly integrate other sports.  I will be improving the design as I work on the second sport and seeing how I can improve the design to let me integrate other niches quickly.&lt;/li&gt;&lt;li&gt;I will be adding localization to the app for French.&lt;/li&gt;&lt;li&gt;I will be monitoring user input for future features and working on any issues that arise.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;What did you learn technology wise?  I've gotten to learn the following (or at least scratch the surface):&lt;ul&gt;&lt;li&gt;UI design&lt;/li&gt;&lt;li&gt;Objective-C&lt;/li&gt;&lt;li&gt;The Cocoa Touch framework - the SDK you build iPhone apps in&lt;/li&gt;&lt;li&gt;Web Services using Google AppEngine&lt;/li&gt;&lt;li&gt;Python for the Web Services&lt;/li&gt;&lt;li&gt;Dealing with performance and responsiveness in a constrained environment&lt;/li&gt;&lt;li&gt;Integrating open source frameworks into code&lt;/li&gt;&lt;li&gt;Managing deadlines with team members&lt;/li&gt;&lt;li&gt;Learning when to stop implementing and ship it ;-)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Is it hard to write an app?&lt;ul&gt;&lt;li&gt;Are you a programmer?  Do you have passion?  Are you ready to learn?  If so, no it is not hard.  Again, back to the time issue.  If you have it and are willing to do a lot of self learning then it is fairly easy.&lt;/li&gt;&lt;/ul&gt;Do I have a website?&lt;ul&gt;&lt;li&gt;Yes, I am currently building &lt;a href="http://lockernine.com/"&gt;Lockernine&lt;/a&gt; as my (planned) various apps home on the internet.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Have I had sales?&lt;ul&gt;&lt;li&gt;Yes, though does my wife and friends count?&lt;/li&gt;&lt;li&gt;I will post an update on sales numbers later once I have something interesting to report, be it good sales, or poor sales.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-4789004714081813566?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/4789004714081813566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=4789004714081813566' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4789004714081813566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4789004714081813566'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/12/first-iphone-app-hockeytweet-has.html' title='First iPhone App: HockeyTweet has Launched'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-2488569653548780177</id><published>2009-12-02T20:54:00.000-08:00</published><updated>2009-12-03T04:17:36.257-08:00</updated><title type='text'>The Eve of iPhone Tech Talk Toronto</title><content type='html'>Phil Casgrain and I arrived today in Toronto via Porter.  That was a great decision, Phil got to head into his companies Toronto office for some work and I planted myself at a Starbucks where I did work.&lt;br /&gt;&lt;br /&gt;Tonight, thanks to Twitter, we saw that some iPhone Devs from Montreal were in the bar of the Hyatt (where the iPhone Tech Talk is being held Dec 3, 2009) and we headed over to meet some fellow devs.  This networking was great, we got to trade some dev war stories, joke about the next great app (can you say a $69.99 web flashlight app?  ok just kidding), and talk about many of the topics that have been floating about the internet with regards to iPhone development.&lt;br /&gt;&lt;br /&gt;We also got to meet some of the Apple evangelists who will be leading the sessions tomorrow.&lt;br /&gt;&lt;br /&gt;Some of the topics we covered included, but were not limited to, how app reviews are handled, the use of static analysis, strategies for releasing an app (be early with just enough or wait for more features and risk being beat out by another app), Square and it's new iPhone dongle payment system, how micro-payments are changing the landscape of the app store market, and more.  As you can tell this was a lively discussion since Phil and I were there for only about 2.5 hours.&lt;br /&gt;&lt;br /&gt;As a developer this type of socializing was a great experience.  It is seldom, since University, that I have been in an environment where everyone is so into programming and are all floating about the same wavelength.&lt;br /&gt;&lt;br /&gt;It's fun to roam among your own kind.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-2488569653548780177?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/2488569653548780177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=2488569653548780177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2488569653548780177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2488569653548780177'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/12/eve-of-iphone-tech-talk-toronto.html' title='The Eve of iPhone Tech Talk Toronto'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-1798478061084335443</id><published>2009-11-26T20:07:00.000-08:00</published><updated>2009-11-26T20:17:43.899-08:00</updated><title type='text'>My First iPhone App Submission</title><content type='html'>I just completed my first iPhone App for the App Store.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's a Hockey Twitter app for tweeting about Hockey, specifically the NHL teams and games.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll post more info on the app later but for now I am going to cover tonight's submission process.  The submission took about 3 hours.  This was time spent reading Apple docs, filling out App submission paper work, reworking my icon (I had it in jpg not png), reworking my App Store icon (it was a little blurry so I sharpened it up), and redoing multiple builds.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To build I needed a Distribution certificate which I could have done before and saved some time tonight (lesson learned).  The artwork is now solid (I hope) so I won't need to do that for this app again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Overall the submission went fairly smoothly; I did get annoyed by a quirk in the submission pages which kept sending me back a page and losing data I had typed.  This was very frustrating but once I figured out the issue I made it through without losing data.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm taking a couple days break before I jump back in and get back to work.  I'll be recording a preview video, redoing the website, and posting a followup when I get through the review process.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I also have an article on the decisions I made during the app and how I choose various features and approached the design.  That one is still cooking and will come later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next week is a big week as well, I am off to Toronto for the iPhone Tech Talk.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Did I mention?  I just submitted my first iPhone App?  (Me -&gt; nervous, excited, tired...)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-1798478061084335443?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/1798478061084335443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=1798478061084335443' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1798478061084335443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1798478061084335443'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/11/my-first-iphone-app-submission.html' title='My First iPhone App Submission'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-4620249241137510647</id><published>2009-11-21T10:18:00.001-08:00</published><updated>2009-11-21T10:24:07.336-08:00</updated><title type='text'>Indie Software Development - You Need A Process</title><content type='html'>Process sucks.  It slows you down.&lt;br /&gt;Process rocks.  It speeds up development.&lt;br /&gt;&lt;br /&gt;It's a problem developers face all the time; how much process is enough?  As a full-time industry developer working on large software systems with teams ranging from 10-500, process is important.  Process helps you:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;communicate&lt;br /&gt;&lt;/li&gt;&lt;li&gt;plan&lt;br /&gt;&lt;/li&gt;&lt;li&gt;deliver quality software&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;As an indie developer though, how does process help?  First off perform the &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;Joel Test: 12 Steps to Better Code&lt;/a&gt;.  Joel's test is as important to any indie developer, even a one man shop, as it is to a large organization.&lt;br /&gt;&lt;br /&gt;Crazy you say!  One developer does not need a process!&lt;br /&gt;&lt;br /&gt;Do you want to ship?&lt;br /&gt;&lt;br /&gt;If the answer is yes, then you need a process.&lt;br /&gt;&lt;br /&gt;I use process to help me:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;keep track of what I need to do&lt;br /&gt;&lt;/li&gt;&lt;li&gt;tell me when I am done (when my original list of features is done)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;help me deliver quality code&lt;br /&gt;&lt;/li&gt;&lt;li&gt;help me estimate future projects better&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;As a one man shop, I sometimes skipped process and it bites me.  I then end up wasting time on rethinking what I have to get done.&lt;br /&gt;&lt;br /&gt;On the other hand, when I follow my process I quickly know what I need to do.  That said, I have adapted my process as I've learnt what works best.  Here is what works best for me:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Source Control: &lt;a href="http://git-scm.com/"&gt;git&lt;/a&gt;, it's free, it's easy, it's fast, I like it.  I've heard complaints but so far it has served me well.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Specs: What am I building?  I write Use Cases, sketch UI mockups, write a feature list, and I work out how the system will be implemented (web services, data structures, and data interfaces).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bug Tracking: I use &lt;a href="http://www.fogcreek.com/FogBugz/"&gt;FogBugz&lt;/a&gt;; if you are a student or startup (2 people or less, like me) then you can use &lt;a href="http://www.fogcreek.com/FogBugz/StudentAndStartup.html"&gt;FogBugz for Free&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Schedule: See previous for FogBugz&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Functional Testing: I do it myself with a mix of unit testing, frequent code+test iterations of each new feature, and I solicit Beta-Testers to get feedback on devices/OS configurations I do not have.  This is something I want to spend more time on to get a better balance of unit tests to ad-hoc testing.  Currently I am doing more ad-hoc than unit tests and it bites me with wasted time.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Usability Testing: I show the app to lots of people, iPhone/Touch owners and non owners to get feedback on the UI.  Is it intuitive?  Is it fast?  Does anything jump out at the user as bad/ugly/hard to use?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bugs: Log them when I find them and fix them ASAP.  I log them so that I can review what I have in my bug list before I move onto other code.  I try to keep true to the rules of "Fix the First Problem First" and "Fix It When You Find It".  This helps me stay focused on my task so I am not trying to work around things I know are broken.  This wastes brain power.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;That's my main process for a one man shop.  It is how I keep things straight with only 1-3 hours/day to work on my projects.  Working in small units of time means being efficient and coming up with ways to keep track of tasks that are usually in a mid-completed state.&lt;br /&gt;&lt;br /&gt;As for how I manage to complete features that are larger than 1-3hrs, I use the tried and true technique of breaking the problem down.  Basically:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Break features into smaller features.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Work on one feature at a time.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Test when feature is implemented.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Commit feature.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rinse and repeat.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;This works for me and let's me work on something that might take 10-15 hours of research, design, code, and test over several days.  Without the frequent code/test/commit cycle I run into trouble trying to implement multiple features at one time, or trying to implement one large feature that could have been broken into many smaller features.&lt;br /&gt;&lt;br /&gt;KISS (Keep It Simple Stupid) works for software development as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-4620249241137510647?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/4620249241137510647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=4620249241137510647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4620249241137510647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4620249241137510647'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/11/indie-software-development-you-need_21.html' title='Indie Software Development - You Need A Process'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-880873842099023323</id><published>2009-11-19T19:24:00.000-08:00</published><updated>2009-11-19T19:38:18.328-08:00</updated><title type='text'>iPhone User Experience + UIWebView</title><content type='html'>Beta and UX testing has given me a couple things to work on:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bugs&lt;/li&gt;&lt;li&gt;UX&lt;/li&gt;&lt;li&gt;More bugs&lt;/li&gt;&lt;/ul&gt;Ok, the bugs are mostly found by me.  The UX issues are things that people have mentioned when the use the app (UX=User Experience).&lt;br /&gt;&lt;br /&gt;The first thing I do when I show someone the app for the first time is ask them to tell me the first things that come to mind about the usability.  So far I've gotten 3 biggies that are worth investigating:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Live feeds of information pertaining to the app so the user can drop that information into a tweet instantly without having to look it up or type it.  Good one and something I will consider for a future release since sourcing the life feeds I would need will take time to build since I have not found anything with the information that the user thought would be most valuable.&lt;/li&gt;&lt;li&gt;Customized tweet strings or tweet templates we will call it.  Great idea and good for a future release.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Last but not least; one tester pointed out I should really make signup for a Twitter account as easy as possible for a user that does not have an account.  Good point, this should go into release 1 I think.&lt;/li&gt;&lt;/ol&gt;So, I thought let's add a UIWebView for the Twitter signup page.  Adding the UIWebView was easy so I dropped it in immediately so the user can navigate to the Twitter Signup page within my app and quickly create an account.&lt;br /&gt;&lt;br /&gt;Now, if I could just nail down the last of those bugs.  Currently I have some unhappy plists which I am using to store cached webservice data between runs of the app.  Off to track those down now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-880873842099023323?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/880873842099023323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=880873842099023323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/880873842099023323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/880873842099023323'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/11/iphone-user-experience-uiwebview.html' title='iPhone User Experience + UIWebView'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-2949550609654892418</id><published>2009-10-15T21:16:00.001-07:00</published><updated>2009-10-15T21:16:29.608-07:00</updated><title type='text'>My Review of Programming the iPhone User Experience</title><content type='html'>&lt;div class="hreview"&gt;&lt;div class="item"&gt;&lt;p&gt;&lt;a href="http://oreilly.com/catalog/9780596155476"&gt;Originally submitted at O'Reilly&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;img src="http://images.powerreviews.com/images_products/10/00/5397104_100.jpg" class="photo" align="left" style="margin: 0 0.5em 0 0"&gt;&lt;p style="margin-top:0"&gt;This practical book provides you with a hands-on, example-driven tour of Apple&amp;#39;s user interface toolkit, UIKit, and some common design patterns for creating gestural interfaces and multi-touch navigation for the iPhone and iPod Touch. You&amp;#39;ll learn how to build applications with Apple&amp;#39;s ...                            &lt;/p&gt;&lt;/div&gt;&lt;a href="http://oreilly.com/catalog/9780596155476" style="display: none;" class="url fn"&gt;&lt;span class="fn"&gt;Programming the iPhone User Experience&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;br clear="left"&gt;&lt;p&gt;&lt;strong class="summary"&gt;Lief Motif: Think Design First&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;By &lt;strong&gt;mthistle&lt;/strong&gt; from &lt;strong&gt;Ottawa, ON, Canada&lt;/strong&gt; on &lt;strong&gt;&lt;abbr title="20091015T1200-0800" class="dtreviewed" style="border: none; text-decoration: none;"&gt;10/15/2009&lt;/abbr&gt;&lt;/strong&gt;&lt;/div&gt;&lt;p&gt;&lt;div style="margin: 0.5em 0; height: 15px; width: 83px; background-image: url(http://images.powerreviews.com/images/stars_small.gif); background-position: 0px -144px;" class="prStars prStarsSmall"&gt;&amp;nbsp;&lt;/div&gt;&lt;/p&gt;&lt;div style="display: none"&gt;&lt;span class="rating"&gt;4&lt;/span&gt;out of 5&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Pros: &lt;/strong&gt;Good for beginners, Accurate, Easy to understand, Helpful examples&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Cons: &lt;/strong&gt;Lots of beginner info&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Best Uses: &lt;/strong&gt;Student, Intermediate, Novice&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Describe Yourself: &lt;/strong&gt;Designer, Maker, Developer&lt;/p&gt;&lt;p style="margin-top:1em" class="description"&gt;Summary of my favorite chapters in order of most useful:&lt;br xmlns:pr="xalan://com.pufferfish.core.beans.xmlbuilders.xsl.Functions"&gt;&lt;br&gt;Chapter 9: UX Anti-Patterns - the first chapter I read and the best one for a lot of good tips on how not to develop your UX. Every iPhone developer should read this chapter. I will reread this chapter occasionally to keep UX issues fresh in my mind.&lt;br&gt;Chapter 5: Cooperative Single-Tasking - for someone coming from an enterprise and server applications UNIX background, this chapter was an excellent discussion on how the iPhone environment is akin to a web based environment where each app is like a web-page. You can even (as most devs would know) pass control between apps using the iPhone SDK's Custom URLs. This also had a good discussion on launching quickly, handling standard interruptions, etc. I will revisit this chapter.&lt;br&gt;Chapter 8: Progressive Enhancement - This is a good overview of some of the sexier features you might want to drop into an app. Sound, location awareness, networking, etc. The coverage raises lots of questions for you to think about and has some good lists of things to think about like how will your app handle a lack of location awareness if the user has turned off location awareness or says no to the prompt to use location awareness in your app? How will you handle sound and sound effects in your app if you use them? How will you deal with incoming calls and sound? Lots of good things to think about if you touch on any of these features in your app.&lt;/p&gt;&lt;p style="margin-top:0.5em"&gt;(&lt;a href="http://www.powerreviews.com/legal/terms_of_use.html" rel="license"&gt;legalese&lt;/a&gt;)&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-2949550609654892418?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/2949550609654892418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=2949550609654892418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2949550609654892418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2949550609654892418'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/10/my-review-of-programming-iphone-user.html' title='My Review of Programming the iPhone User Experience'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-3771413838622950805</id><published>2009-10-07T18:27:00.000-07:00</published><updated>2009-10-08T17:35:09.881-07:00</updated><title type='text'>Book Report: Programming the iPhone User Experience</title><content type='html'>Publisher: O'Reilly&lt;br /&gt;Author: Toby Boudreaux&lt;br /&gt;&lt;br /&gt;Title: Programming the iPhone User Experience&lt;br /&gt;Tagline: Developing and Designing Cocoa Touch Applications&lt;br /&gt;&lt;br /&gt;Overall&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The book had a nice lief motif throughout which was to think about design first.  I felt the discussions framed in this way were very helpful in eliciting thought about how can I do better with my app design?  Have I thought various aspects of the design through enough?  Or, I have not thought of that, what should I be doing about that aspect in my app?&lt;/li&gt;&lt;li&gt;As someone that has read most of Apple's iPhone introduction guides for programmers, the book could have been shorter as I felt there was a lot of rehashing of the basics.  Like application templates and controls.  I am sure that if I had done anything outside of the basic touch actions then I would have covered most of the touch chapter as well.  That said, if you are new to iPhone programming or you have not read the programming intro docs from Apple, then by all means this is a short book with lots of overview.  You will want more details than contained here but this will give you a good overview of the iPhone features you'll want to think about while designing your app.&lt;/li&gt;&lt;li&gt;The best chapter by far and the reason to buy this book in my opinion is chapter 9 on UX Anti-Patterns.  Once you read this (and if you have used a reasonable number of apps) you will be saying, ya that is a bad design.  If you've wondered what it was about such and such an app that made it not feel right then this chapter probably has a clue.  Read this chapter to keep in mind UX designs to avoid without great thought.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Chapters In Order of Most Interest to Me&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Chapter 9: UX Anti-Patterns - the first chapter I read and the best one for a lot of good tips on how not to develop your UX.  Every iPhone developer should read this chapter.  I will reread this chapter occasionally to keep UX issues fresh in my mind.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Chapter 5: Cooperative Single-Tasking - for someone coming from an enterprise and server applications UNIX background, this chapter was an excellent discussion on how the iPhone environment is akin to a web based environment where each app is like a web-page.  You can even (as most devs would know) pass control between apps using the iPhone SDK's Custom URLs.  This also had a good discussion on launching quickly, handling standard interruptions, etc.  I will revisit this chapter.&lt;/li&gt;&lt;li&gt;Chapter 8: Progressive Enhancement - This is a good overview of some of the sexier features you might want to drop into an app.  Sound, location awareness, networking, etc.  The coverage raises lots of questions for you to think about and has some good lists of things to think about like how will your app handle a lack of location awareness if the user has turned off location awareness or says no to the prompt to use location awareness in your app?  How will you handle sound and sound effects in your app if you use them?  How will you deal with incoming calls and sound?  Lots of good things to think about if you touch on any of these features in your app.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Chapter 4: Choosing an Application Template - this was a bit fluffy (see next point about things covered in the basic iPhone dev docs) but it did have a good discussion around identifying a problem to solve, thinking about how to solve it, and keeping your app focused.  If your app's feature list and views are getting a little unwieldy then think about breaking it into different apps that are focused on solving only one of those features well.  I thought this was a good idea and with the use of Custom URLs you could design a series of apps that work together collaboratively but would allow the user to purchase only the pieces they require.  There are already devs out there that are opening their Custom URLs to others such as &lt;a href="http://birdfeed.tumblr.com/post/172994970/url-scheme"&gt;BirdFeed's Custom URLs from developer Buzz Andersen&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Chapter 6: Touch Patterns - good discussion about how to handle touches, touch accuracy (which lots of apps ignore with tiny buttons that are almost impossible to click), and a good overview of how to interact with touchable views.  Worth reading for the discussion about view touch accuracy alone.&lt;/li&gt;&lt;li&gt;Chapter 7: Interaction Patterns and Controls - I found this rehashed a lot of the iPhone developer documents again so it would be good for beginners but if you have touched most of the controls in here then maybe the patterns will be of interest but the controls discussion was skip-able.&lt;/li&gt;&lt;li&gt;Chapter 1 to Chapter 3 had too much fluff which was good for those that have not read the Apple iPhone development documents but in general if you have read the iPhone Application Guide and the Mobile HIG then you can skip these.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Ok, so the FTC just passed laws about disclosing how a reviewer/blogger/etc benefited or whatever for posting a review.  So how did I benefit?  Well first, the book was free to me.  The CocoaHeads group I belong too has an O'Reilly User Group membership.  We get free books to review as a group every so often.  This book came in and I got to review it for the group.  I had the book for a month and it goes back to the group tomorrow night when someone else gets to take it and review it for a month.&lt;br /&gt;&lt;br /&gt;Would I buy the book?  Yes, I found I ran out of time to implement some of the code ideas in the book and I'd like to take some time to sit down and work through the samples.  First I want to go and read Coders at Work though, so that will be the next purchase.&lt;br /&gt;&lt;br /&gt;If you want to join in our monthly discussions and are an &lt;a href="http://cocoaheads.org/ca/OttawaGatineauOntario/index.html"&gt;iPhone Dev in Ottawa, Canada then check out our CocoaHeads meetings.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-3771413838622950805?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/3771413838622950805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=3771413838622950805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/3771413838622950805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/3771413838622950805'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/10/book-report-programming-iphone-user.html' title='Book Report: Programming the iPhone User Experience'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-1364917361309182690</id><published>2009-09-23T18:53:00.000-07:00</published><updated>2009-09-23T18:54:32.972-07:00</updated><title type='text'>iPhone Memory Management Tips</title><content type='html'>Found this great article on iPhone Memory Management.  &lt;a href="http://kosmaczewski.net/2009/01/28/10-iphone-memory-management-tips/"&gt;http://kosmaczewski.net/2009/01/28/10-iphone-memory-management-tips/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Worth a read and something I keep handy to refresh myself occasionally.&lt;br /&gt;&lt;br /&gt;MT&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-1364917361309182690?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/1364917361309182690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=1364917361309182690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1364917361309182690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1364917361309182690'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/09/iphone-memory-management-tips.html' title='iPhone Memory Management Tips'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-881359095947702671</id><published>2009-09-02T06:41:00.000-07:00</published><updated>2009-09-02T06:42:19.556-07:00</updated><title type='text'>XCode 3.2 Shortcuts</title><content type='html'>Cocoa Samurai has created a cheat sheet of XCode 3.2 shortcuts.  Get it here: &lt;a href="http://cocoasamurai.blogspot.com/2009/08/xcode-shortcuts-updated-for-xcode-32-on.html"&gt;http://cocoasamurai.blogspot.com/2009/08/xcode-shortcuts-updated-for-xcode-32-on.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-881359095947702671?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/881359095947702671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=881359095947702671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/881359095947702671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/881359095947702671'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/09/xcode-32-shortcuts.html' title='XCode 3.2 Shortcuts'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-6401699253818081921</id><published>2009-08-12T18:42:00.000-07:00</published><updated>2009-08-12T18:50:50.723-07:00</updated><title type='text'>Getting Started With iPhone Programming</title><content type='html'>A couple friends have asked about iPhone programming since I yammer on about it all the time.  They were wondering if they could get a taste for what the language (Objective-C), frameworks (iPhone SDK) and API (Cocoa Touch) would be like to use.  So here is a short answer to that:&lt;br /&gt;&lt;br /&gt;If you are a C/C++ programmer, you should have no trouble moving to Objective-C once you understand the messaging scheme they use.  Print out a copy and review the definitive guide to &lt;a href="http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html"&gt;Objective-C 2.0&lt;/a&gt; (latest version).  I've found that reading lots of code examples (Apple's and those supplied by others online) has helped me understand Objective-C better.&lt;br /&gt;&lt;br /&gt;I think it would be helpful to start digging into some of the general documentation regarding the fundamental design patterns used throughout Cocoa and iPhone programming.  Cocoa Touch being the OO API for the iPhone and Touch.&lt;br /&gt;&lt;br /&gt;Wiki might be a good start for an overview (&lt;a href="http://en.wikipedia.org/wiki/Cocoa_%28API%29"&gt;http://en.wikipedia.org/wiki/Cocoa_(API)&lt;/a&gt;) and then I would definitely dive into the getting started docs on &lt;a href="http://developer.apple.com/iphone/"&gt;http://developer.apple.com/iphone/&lt;/a&gt;  Starting with the &lt;a href="http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html"&gt;Cocoa Fundamentals Guide&lt;/a&gt; and moving onward from there will give you a good understanding of how applications run on the iPhone.  Many of the Apple guides have references to other prerequisite whitepapers, tutorials, and guides to read first or to continue learning in a particular area.  These have been a ton of help to get me immersed in iPhone development.&lt;br /&gt;&lt;br /&gt;As well, I would say take a look at the &lt;a href="http://mattgemmell.com/2009/07/14/iphone-development-emergency-guide"&gt;Matt Gemmell's iPhone Development Emergency Guide&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hope that helps you get up and running.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-6401699253818081921?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/6401699253818081921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=6401699253818081921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/6401699253818081921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/6401699253818081921'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/08/getting-started-with-iphone-programming.html' title='Getting Started With iPhone Programming'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-6988341081590130675</id><published>2009-07-23T07:33:00.000-07:00</published><updated>2009-07-23T07:33:00.563-07:00</updated><title type='text'>Project Management for Small Teams</title><content type='html'>Ok, well the team here at the DroolFactory is one for now but we can dream.  That said, even with a small team, with a feature rich application on a new platform in a new language and new SDK, needs to perform some project management. &lt;br /&gt;&lt;br /&gt;Am I overkilling this obsession to write my own code in my limited spare time?  Probably, but here is how I am handling it and why.&lt;br /&gt;&lt;br /&gt;I'm a reader of &lt;a href="http://www.joelonsoftware.com/"&gt;Joel on Software&lt;/a&gt; (if you don't read it and you code or work in a software design shop then you should try it out; take a min and head on over and sign up for his RSS feed, don't worry I'll wait) and some time ago Joel annouced that his company &lt;a href="http://www.fogcreek.com/"&gt;Fog Creek Software&lt;/a&gt; was releasing a new product; &lt;a href="http://www.fogcreek.com/FogBugz/"&gt;FogBugz&lt;/a&gt; for software tracking.&lt;br /&gt;&lt;br /&gt;The best part is that they also provide a version they host on their servers called &lt;a href="http://www.fogcreek.com/FogBugz/IntrotoOnDemand.html"&gt;FogBugz On Demand&lt;/a&gt; which is &lt;a href="http://www.fogcreek.com/FogBugz/StudentAndStartup.html"&gt;free for students and startups (1-2 users)&lt;/a&gt;.  I fall under the startups of 1 to...ya right just 1 user, so I decided to bring it up and try it out to track the work on my current project. &lt;br /&gt;&lt;br /&gt;I am really impressed with FogBugz.  It is serving my purposes and allowing me to perform estimates without a lot of Excel wizardry which is giving me an idea of what features are going to cost.  For a Dad of two, working a day job, limited time comes in about 1-3 hours per night of coding which is way too much and I need to cut back, but don't we all?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-6988341081590130675?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/6988341081590130675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=6988341081590130675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/6988341081590130675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/6988341081590130675'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/07/project-management-for-small-teams.html' title='Project Management for Small Teams'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-5468065871812838328</id><published>2009-07-22T03:09:00.000-07:00</published><updated>2009-07-22T05:46:11.063-07:00</updated><title type='text'>Deciding on an iPhone App's Layout Using Paper Prototyping</title><content type='html'>Coding has been moving along on my current iPhone app.  I've got some of the basics working, have a list of TODOs (ie. bugs or features) to move the app forward with the back-end components but I am about to turn a corner.  I need to start laying out the UI.&lt;br /&gt;&lt;br /&gt;I am designing an app that uses Twitter heavily.  I don't want to write yet another Twitter application for the iPhone so there are features I do not need.  That said, it will have to be snappy (I've read about issues, and have seen them, regarding scroll speed for twitter updates using tableviews) and have some of the nice features of full Twitter clients to make it attractive to end users.&lt;br /&gt;&lt;br /&gt;So I am now presented with how to lay out the app to make it intuitive to use in a limited time.  I want the user to be able to quickly send a tweet without have to do a lot of typing.  That means I can preload options that the user can choose from.  To do that I can use a multitude of options but I am leaning towards UIPickers and Segments but I could do it with TableViews as well.  How to choose without jumping in and creating something that users hate or less than optimal?&lt;br /&gt;&lt;br /&gt;I've already sketched some ideas so I was heading in this route when I came across Paper Prototyping as a means of UI design.  The first article is a good overview of how to use paper prototyping at &lt;a href="http://www.alistapart.com/articles/paperprototyping"&gt;A List Apart: Articles: Paper Prototyping&lt;/a&gt;.  The second resource I found which had lots of great ideas on how to use paper prototyping as on &lt;a href="http://en.wikipedia.org/wiki/Paper_prototyping"&gt;Wikipedia:Paper_prototyping&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I enjoyed the A List Apart article for it's chatty style which had some good examples of using this technique.  I found the Wikipedia entry had some great ideas on how to handle scrolling items (something I need to tackle) and how to present the paper prototype when handling various UI actions (clicking a link or a drop down box).&lt;br /&gt;&lt;br /&gt;Paper prototyping provides the ability to get early feedback from users before code is written about what functionality makes sense (rapid prototyping), usability testing (is the UI usable and easy to navigate), and the apps Information Architecture (can users understand where and how to find info they need).  These were some timely articles to come across and I will be working this into my schedule before I start to make decisions about my UI.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-5468065871812838328?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/5468065871812838328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=5468065871812838328' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/5468065871812838328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/5468065871812838328'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/07/deciding-on-iphone-apps-layout-using.html' title='Deciding on an iPhone App&apos;s Layout Using Paper Prototyping'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-4896681954548269038</id><published>2009-07-21T05:44:00.000-07:00</published><updated>2009-07-21T06:00:30.206-07:00</updated><title type='text'>Useful Resources for iPhone Dev</title><content type='html'>While working on my current app I have had to do a lot of research to get up to speed with Objective-C, Cocoa Touch, and many of the Xcode tools.  Here are some of the resources I use when I am trying to find an answer:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Research Assistant within Xcode: provides context sensitive help for the iPhone SDK.  Move your mouse over something from the framework (ie. UITextField) and see the accessors, mutators, protocols, etc. associated with that datatype.&lt;/li&gt;&lt;li&gt;Stack Overflow: a question and answer site for programmers by programmers.  If you don't know of it and you program you need to know of it.  Check out this Q&amp;amp;A for a list of top blogs/sites about iPhone Development: &lt;a href="http://stackoverflow.com/questions/232570/what-are-the-best-cocoa-touch-iphone-programming-blogs"&gt;http://stackoverflow.com/questions/232570/what-are-the-best-cocoa-touch-iphone-programming-blogs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/iphone"&gt;Apple Developer Connection iPhone&lt;/a&gt;: of course going to the source is one of the top choices.   Check it often for updated docs.&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/iphone"&gt;Apple Developer Forums (Beta)&lt;/a&gt;: another great resource in line with Stack Overflow, ask your question and get an answer.  But remember, try to figure it out yourself first, if you don't know this you will find out the hard way.&lt;/li&gt;&lt;li&gt;Standford University's iPhone Application Programming: mentioned in previous post, this is another great resource for sample code and explainations &lt;a href="http://www.stanford.edu/class/cs193p/cgi-bin/index.php"&gt;Standford University's CS193P iPhone Application Programming&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.appsamuck.com/blog/"&gt;Apps Amuck Blog&lt;/a&gt;: Not bad if you are just starting out and want to learn how someone else wrote some apps which are in the AppStore.  Check their &lt;a href="http://appsamuck.com/blog/index.php/2008/11/01/full-list-of-31-days-of-iphone-sdk-apps/"&gt;31 Days of iPhone SDK Apps&lt;/a&gt; for lots of sample code.&lt;/li&gt;&lt;/ul&gt;Good Luck.&lt;br /&gt;&lt;br /&gt;Do you have a site that you find useful in day to day iPhone programming?  A great repository of sample code?  A write-up on how someone else wrote their program and got it launched?  If so drop a comment, I'd love to hear about others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-4896681954548269038?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/4896681954548269038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=4896681954548269038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4896681954548269038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4896681954548269038'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/07/useful-resources-for-iphone-dev.html' title='Useful Resources for iPhone Dev'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-2222978877139155076</id><published>2009-07-05T06:42:00.000-07:00</published><updated>2009-07-05T06:42:00.555-07:00</updated><title type='text'>Stanford University iPhone Course Online</title><content type='html'>Ahh, morning classes, big cups of coffee, the pursuit of knowledge, and a heavy book laden backpack; well that's how I remember university (and maybe just a little Magic the Gathering and Arcade).  In case you are yearning for some educating on how to program one of those there iPhone thingamabobs then check out &lt;a href="http://www.stanford.edu/class/cs193p/cgi-bin/index.php"&gt;Standford University's CS193P iPhone Application Programming&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-2222978877139155076?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/2222978877139155076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=2222978877139155076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2222978877139155076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2222978877139155076'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/07/stanford-university-iphone-course.html' title='Stanford University iPhone Course Online'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-9014170351558456727</id><published>2009-07-04T08:06:00.000-07:00</published><updated>2009-07-03T20:13:06.986-07:00</updated><title type='text'>Building Boost 1.39.0 for iPhoneOS 3.0</title><content type='html'>As part of my latest iPhone project I am going to sue Boost.  I wanted to make sure I could do something as basic as build the Boost libraries (most are just header files you include but I wanted to make sure I could get a build working in case I needed any of the libraries that must be compiled).&lt;br /&gt;&lt;br /&gt;So the search began, the Boost docs did not have details for darwin/iPhoneOS 3.0 so to google.  I found the following links of order of helping.  You may need to modify some of the actual compiler versions depending on when you read this but hopefully these links will help you raise the power of the compiler gods to allow you to build Boost for the iPhone:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.nabble.com/building-boost-1.39-on-iphone-os3.0-td23613664.html"&gt;Boost Mailing List: Building Boost 1.39 for iPhone os3.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mani.de/backstage/?p=159"&gt;Backstage: Building Boost for the iPhone&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.uwe-arzt.de/node/40"&gt;Uwes Homepage: boost 1.49 for iPhone 3.0&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Good luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-9014170351558456727?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/9014170351558456727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=9014170351558456727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/9014170351558456727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/9014170351558456727'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/07/building-boost-1390-for-iphoneos-30.html' title='Building Boost 1.39.0 for iPhoneOS 3.0'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-4059843428201434446</id><published>2009-07-03T18:57:00.000-07:00</published><updated>2009-07-03T19:04:40.683-07:00</updated><title type='text'>An App For The Masses</title><content type='html'>Well, after much debate, note taking, idea jotting, use case outlines, and driving my friends and family mad, I have something that is non-game related and would be really useful.  I don't want to release the idea since I take so long to get coding done but needless to say it is an any-person app.&lt;br /&gt;&lt;br /&gt;So what am I doing to move forward?  I've downloaded the latest OS updates, downloaded and played with the unit testing example (I am a strong believer in TDD, Test Driven Development), and tonight I am attempting to get Boost 1.39 compiled for iPhoneOS 3.0.&lt;br /&gt;&lt;br /&gt;Why use Boost?  It is a C++ library which one can think of as extending the C++ STL with lots of really useful data structures and algorithms.  I plan to use some of Boost heavily and want to design much of the engine (for lack of a better term) for my app on something that has a better chance of being portable to over platforms.  This way, if the app takes off it will be easier to extend it to over mobile platforms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-4059843428201434446?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/4059843428201434446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=4059843428201434446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4059843428201434446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4059843428201434446'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/07/app-for-masses.html' title='An App For The Masses'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-8382279066278404968</id><published>2009-06-05T06:35:00.000-07:00</published><updated>2009-06-05T06:39:49.823-07:00</updated><title type='text'>Google MapViewController</title><content type='html'>There is a project running, hosted on Google Code, which provides Cocoa Touch wrappers for Google Maps.  Find it at &lt;a href="http://code.google.com/p/iphone-google-maps-component/"&gt;iphone-google-maps-component&lt;/a&gt;.  There is also a newsgroup for discussion on it here at &lt;a href="http://groups.google.com/group/iphone-map-view" rel="nofollow"&gt;iPhone MapView Discussion Group.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Take a look if you are looking to add map support to your iPhone app.  The project is attempting to wrap the Google Maps Javascript API in a Cocoa shell.  It is something I will be revisiting with a future project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-8382279066278404968?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/8382279066278404968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=8382279066278404968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/8382279066278404968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/8382279066278404968'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/06/google-mapviewcontroller.html' title='Google MapViewController'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-2584999811063515869</id><published>2009-06-01T15:23:00.000-07:00</published><updated>2009-06-01T19:32:02.657-07:00</updated><title type='text'>What Goes Into A GUI Software App</title><content type='html'>Ok, besides planning, coding, testing?  Like, GUI things perhaps (oh ya, you know this is going to be a long battle for me to get something up and running, but one can try).&lt;br /&gt;&lt;br /&gt;While planning a non-iPhone project (ok, well non-iPhone application project) I wanted some artwork but said to myself, "Self, this is something that would eat up hours as you try to recreate the wheel to make some iPod icons, let's search the net."  Google...iPod icons...searching...bing!&lt;br /&gt;&lt;br /&gt;I turned up some good sites, but in particular I liked &lt;a href="http://www.iconarchive.com"&gt;IconArchive&lt;/a&gt;.  I will be revisiting this site often as I need icons and sprites for some of my projects.  The site had a good selection of iPod icons which fit the bill for my other project and there are a large selection of icons I can use for some other iPhone apps if they get out of my brain and into something working and ready for beta.  Bonus here is that some of the icons are available free for non-commercial projects so you can give them a try before you buy the license if your project gets off the ground and is ready for the App Store.&lt;br /&gt;&lt;br /&gt;Being a T-Shirt Junkie, I was thrilled today to get an email from &lt;a href="http://threadless.com"&gt;Threadless&lt;/a&gt; that said they were having a $5 Tees sale.  Sweet!!  Ok, what does that have to do with content for an app?  Well, the Type Tees (t-shirt with just text on it) have a link to the font used for the T.  Bingo!!  If you want to polish your app, how about a little custom font work?  This will come in handy for several of my projects (a board game and the main iPhone app I am working on).  The two sites which had fonts I can use at a reasonable price are &lt;a href="http://www.blambot.com/fonts.shtml"&gt;Blambot&lt;/a&gt; and &lt;a href="http://www.t26.com/fonts"&gt;T.26&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Another set of mostly Freeware fonts I found which have a couple I am interested in are at &lt;a href="http://www222.pair.com/sjohn/fonts.htm"&gt;The Cumberland Fontworks&lt;/a&gt;.  There are lots of interesting fonts here what would be useful for several genres of games.&lt;br /&gt;&lt;br /&gt;As the work on multiple projects unfolds and learn more and more about the items required to build a physical board game, design an engaging website, and make an iPhone game.  Artwork in the form of fonts, icons, and sprites, just being a few.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-2584999811063515869?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/2584999811063515869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=2584999811063515869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2584999811063515869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2584999811063515869'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/06/what-goes-into-gui-software-app.html' title='What Goes Into A GUI Software App'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-1843565731711222232</id><published>2009-03-25T19:30:00.001-07:00</published><updated>2009-03-25T19:46:37.852-07:00</updated><title type='text'>Planning an iPhone Application</title><content type='html'>My first few attempts at iPhone apps kind of went like this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Had great (to me at least) idea.&lt;/li&gt;&lt;li&gt;Fleshed out maybe a page worth of notes on it.&lt;/li&gt;&lt;li&gt;Started coding so I could learn Cocoa Touch, Objective-C and XCode.&lt;/li&gt;&lt;li&gt;Got some stuff working well, some stuff not working so well, and some stuff just plan not working.&lt;/li&gt;&lt;li&gt;Got to a point where I needed to drop in a lot of artwork and then the project stalled.&lt;/li&gt;&lt;/ul&gt;So, I still have those projects ready for another day when I sit down to plan them out a little more.  With new ideas I am starting to put more thought (there's a novel idea) into the design of the application before I write any code.  This time I have pages and pages of notes for the ideas including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What purpose does it solve for the user?&lt;/li&gt;&lt;li&gt;For games, how do I build a sense of community around the game?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rough sketches of the screen layout (this has helped me realize some of the layout ideas are bad and hence I am working that out on paper first instead of coding stuff that I then go and say, man that sucks, end up depressed at the lack of progress, and then the project stalls).&lt;/li&gt;&lt;li&gt;How would I test this?  How can I break this into manageable chunks that allow me to a) learn the APIs, b) unit test the code?&lt;/li&gt;&lt;li&gt;Writing down features including a Narrative or Use Case for that feature.  This has helped a ton to point out ideas that might need more thinking or maybe should just be dropped.&lt;/li&gt;&lt;li&gt;Figuring out feature sets for releases.  Once I have Narratives for a feature this helps me see which Narratives group together into a useful set of features for a release.  Some of the features, though sounding cool, are also more difficult to develop and test, so I want to group those into future releases which I would implement if the initial application does well.  No sense in trying to build a city if all people wanted was a rest-stop on the side of the highway.&lt;/li&gt;&lt;li&gt;Allows me to keep track of ideas that might need more work but at least it is on paper so I can go back later and resurrect the idea if it has merit.&lt;/li&gt;&lt;/ul&gt;So, the work continues.  What am I working on now?  Like everyone and their dog, I have some game ideas.  One of those I am actively working on (pen and papering it to work out the design) and it was something that would not have been possible (ok not easy) before the iPhone OS 3.0 release.  Hence, with the release of the new OS in mid-summer and this idea having floated around for a while I am actively working on it so that I might be able to get something working for shortly after the 3.0 release.&lt;br /&gt;&lt;br /&gt;The work continues...the learning continues...the journey continues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-1843565731711222232?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/1843565731711222232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=1843565731711222232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1843565731711222232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/1843565731711222232'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2009/03/planning-iphone-application.html' title='Planning an iPhone Application'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-7827984610674026251</id><published>2008-10-26T12:08:00.000-07:00</published><updated>2008-10-26T12:14:46.298-07:00</updated><title type='text'>Creative Beats</title><content type='html'>Each time I run, I listen to tunes.  This combination seems to send my mind into a creative groove (no tunes I am usually thinking about what body part aches today) where it keeps coming up with ideas.&lt;br /&gt;&lt;br /&gt;Today's run gave rise to 2 more iPhone app ideas and some TDD (test driven development) ideas for work.  Needless to say, I am not short of ideas for the iPhone or any other mobile platforms but I will stick with working on the iPhone since the distribution model offers a low cost of entry to the market place. &lt;br /&gt;&lt;br /&gt;I had one idea which requires the application to be always running in the background.  This one would not work on the iPhone unless the user checked the program repeatedly.  This would ruin the whole idea behind this idea.  So, this is an idea that would work better on the Andriod platform. &lt;br /&gt;&lt;br /&gt;I'll just have to write that one down for a later time.  Now back to work, gotta log a couple hours this weekend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-7827984610674026251?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/7827984610674026251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=7827984610674026251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/7827984610674026251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/7827984610674026251'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2008/10/creative-beats.html' title='Creative Beats'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-8506302765316769364</id><published>2008-10-17T19:41:00.000-07:00</published><updated>2009-07-03T20:06:32.999-07:00</updated><title type='text'>Test Driven iPhone Development</title><content type='html'>Ok, Test Driven iPhone Development.  First off, I am not doing it, yet.  Do I want to?  Yes.  But how?&lt;br /&gt;&lt;br /&gt;What is Test Driven Development (TDD)?  Well you can go wiki it, but in general it comes down to "write tests first, write code second, when tests pass, code is done, rinse and repeat" until project is complete.&lt;br /&gt;&lt;br /&gt;Do I have experience with TDD?  Yes, I have used utlPLSQL to perform TDD during the development of a Data Warehouse PL/SQL back-end API for a php written front-end to said Data Warehouse.  I've also used CppUnit after the fact on an existing code-base.&lt;br /&gt;&lt;br /&gt;As well, I am currently working on putting CppUnit into place for a new project at work.  The good, this will be for a system we will be refactoring from Ada into C++.  The bad, I'll admit it, I was a bad programmer and I extended CppUnit so that I could pass a void * into the TestFixture::setUp routine (that run's before each test case) so that I could run the tests inside a client that has a lot of setup which includes the ability to override the execution loop.  That execution loop is where I put the test cases, but I had to get the pointers created during setup of the app into the test code so I could use their callbacks.&lt;br /&gt;&lt;br /&gt;Needless to say, I feel embrassed I had to extend the code with what amounts to a blank check for programmers using the "extended" CppUnit to pass whatever they want into the test code.  Why is this bad?  Well, Unit Testing in the vein of CppUnit is about testing individual classes.  What I am doing is bastardizing CppUnit so I can perform unit testing of two seperate processes implementing a Proxy/Service pattern.&lt;br /&gt;&lt;br /&gt;The great thing is that I can run both of these in the same executible and inject messages into the Service which then passes them to the Proxy which passes them up to a Client which uses the Proxy.  By making the changes I have to CppUnit, I can now run a Client, Proxy, and Service in one process and run tests against the three of them at the same time.  This makes coding the test cases easier than having to implement TCL (or my favorite, Perl Expect) scripts to try and run the Client (with Proxy) and Service in different processes and then build something on top of that which is easy for other devs to use.&lt;br /&gt;&lt;br /&gt;So, all that to say, I love TDD, I want to use it all the time, but getting into it I find takes understanding the arena you are working in.  Being a newbie to Objective-C, Cocoa, XCode, and the iPhone OS I am finding it hard to figure out how to get TDD working for my projects yet.  That said, I can see how it would work for some simple classes, but for the Model View Controller (MVC) pattern, I am still thinking about that.&lt;br /&gt;&lt;br /&gt;Prehaps I will login to &lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt; and ask that question.  It would be a good one.&lt;br /&gt;&lt;br /&gt;--Update (10 minutes later):&lt;br /&gt; Ask and you shall receive.  Stack Overflow led me to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/tools/unittest.html"&gt;http://developer.apple.com/tools/unittest.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting"&gt;http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-8506302765316769364?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/8506302765316769364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=8506302765316769364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/8506302765316769364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/8506302765316769364'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2008/10/test-driven-iphone-development.html' title='Test Driven iPhone Development'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-4151661820167061490</id><published>2008-10-17T19:20:00.000-07:00</published><updated>2008-10-17T19:25:41.202-07:00</updated><title type='text'>Hooking GUI Elements</title><content type='html'>With iPhone development you can create your GUI via hard work (ie. coding by hand) or you can do it with little effort (caveat being you need to know how to do that little effort) and some hand coding.  I finally figured out the little effort part.&lt;br /&gt;&lt;br /&gt;After lots of reading and playing with layouts and test code, I have figured out the secrets to hooking buttons with the appropriate actions.  It's not straight forward, there is a little duplication of effort in the Interface Builder (the GUI layout tool) and your hand written code.  But once you know how, it is quick and easy to get your GUI hooked up for user interaction.&lt;br /&gt;&lt;br /&gt;So far my first app is coming along and I have shown it to some people.  I've gotten some good user feedback which I will be trying to incorporate into the design.  Nothing too hard I am sure; once I figure out how to implement those ideas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-4151661820167061490?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/4151661820167061490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=4151661820167061490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4151661820167061490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/4151661820167061490'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2008/10/hooking-gui-elements.html' title='Hooking GUI Elements'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5255028626698774175.post-2311157936372261791</id><published>2008-10-12T06:50:00.000-07:00</published><updated>2008-10-12T06:59:46.164-07:00</updated><title type='text'>(YAIDB) Yet Another iPhone Development Blog</title><content type='html'>Yes, I am yet another developer who has decided to develop new apps for the iPhone.  Here's where I stand currently with my work:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Downloaded the iPhone SDK - months ago&lt;/li&gt;&lt;li&gt;Watched the iPhone Development videos on iTunes&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Played with some tutorials and sample code&lt;/li&gt;&lt;li&gt;Registered as an official developer with iPhone Developer Program&lt;/li&gt;&lt;li&gt;Started development of 3 programs; 1 nearing completion, 2 only in the prototype stages&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bought an iPod Touch for hardware testing - Yes I have my first app running on the Touch&lt;/li&gt;&lt;li&gt;Read a lot of iPhone programming and Objective-C programming documents&lt;/li&gt;&lt;/ul&gt;As I complete apps and they move out of the NDA envelope, I will post screen shots here, along with video demos of the apps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5255028626698774175-2311157936372261791?l=droolfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://droolfactory.blogspot.com/feeds/2311157936372261791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5255028626698774175&amp;postID=2311157936372261791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2311157936372261791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5255028626698774175/posts/default/2311157936372261791'/><link rel='alternate' type='text/html' href='http://droolfactory.blogspot.com/2008/10/yaidb-yet-another-iphone-development.html' title='(YAIDB) Yet Another iPhone Development Blog'/><author><name>Mark</name><uri>http://www.blogger.com/profile/04626457572719333386</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/__ACR8NBMIeo/SkBJgJFdVFI/AAAAAAAABC8/N0LB5YCoQgA/S220/mark_profile_photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
