<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alex Fajkowski &#187; Software Development</title>
	<atom:link href="http://fajkowski.com/blog/category/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://fajkowski.com/blog</link>
	<description>Software and other interesting stuff…</description>
	<lastBuildDate>Fri, 23 Jul 2010 20:20:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Build an iPad Prototype</title>
		<link>http://fajkowski.com/blog/2010/01/28/build-an-ipad-prototype/</link>
		<comments>http://fajkowski.com/blog/2010/01/28/build-an-ipad-prototype/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 20:14:12 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://fajkowski.com/blog/?p=131</guid>
		<description><![CDATA[I realized something yesterday during Steve&#8217;s keynote. For the first time, Apple is expecting third party developers to write apps targeted to a device that they have never held. If this new product was a laptop or another iPhone, this wouldn&#8217;t be a big deal. We have reference points for those. However, several of the [...]]]></description>
			<content:encoded><![CDATA[<p>I realized something yesterday during Steve&#8217;s keynote. For the first time, Apple is expecting third party developers to write apps targeted to a device that they have never held. If this new product was a laptop or another iPhone, this wouldn&#8217;t be a big deal. We have reference points for those. However, several of the audience members who used an iPad after the presentation said that <a href="http://www.stephenfry.com/2010/01/28/ipad-about/">you just don&#8217;t get it until you hold the device in your hands</a>. <a href="http://daringfireball.net/2010/01/ipad_big_picture">It&#8217;s fast</a>. It&#8217;s not a laptop. And <a href="http://daringfireball.net/linked/2010/01/28/marco">it&#8217;s not just a big iPod touch</a>.</p>
<p>If I want an app in the store on launch day, I need to know what an iPad feels like. There are roughly 59 days left before the lines form in front of Apple&#8217;s retail stores. In a <a href="http://events.apple.com.edgesuite.net/1001q3f8hhr/event/index.html">video shown during the presentation</a>, Scott Forstall described Launch Day: &#8221;…there&#8217;s going to be a whole new gold rush for developers&#8221;.</p>
<p>Back in college, <a href="http://en.wikipedia.org/wiki/Jeff_Hawkins">Jeff Hawkins</a> (the founder of Palm and Handspring) gave a guest lecture to one of my engineering classes. One of the key points he stressed—that sticks with me a decade later—was the absolute importance of building prototypes. Hawkins carved wooden and styrofoam blocks representing what would later become the Palm Pilot. He took notes on it during meetings and answered phone calls on it.</p>
<p>On the iPhone, we have been living with the devices for two and a half years. We know what they feel like. Xcode&#8217;s simulator is great, but there&#8217;s nothing like building and debugging your software on iPhone hardware. During your design phase, the <a href="http://giveabrief.com/">Briefs project</a> from Rob Rhyne is invaluable. In addition if you haven&#8217;t watched it already, check out <a href="http://www.viddler.com/explore/rentzsch/videos/26/">Craig Hockenberry&#8217;s presentation from C4[2]</a>, describing what he learned by using his software in the real world.</p>
<p>How is the iPad going to be used? On the sofa? In a coffee shop, a cramped airplane seat, in bed, on the kitchen counter, commuting on the Metro, or even on the toilet?</p>
<p>I put together a very rough, very quick iPad template based on Apple&#8217;s technical specifications page. The 9.7&#8243; diameter screen translates to a 7.76&#8243; x 5.82&#8243; rectangle (1024 x 768 square pixels). <a href="http://apparentlogic.com/design/iPad/iPadPDFTemplate.pdf">Download the PDF</a>, print out a copy and build yourself a cardboard iPad prototype. Cut out 4 or 5 layers of cardboard from a shipping box and glue them together to make the prototype 0.5&#8243; thick. Use rubber cement to put the paper stencil on the top layer.</p>
<p>Once you have this constructed, you immediately see why there is such a large black bevel around the iPad&#8217;s screen.</p>
<p style="text-align: center;"><a href="http://fajkowski.com/blog/wp-content/uploads/2010/01/ipadPrototypeFront.jpg"><img class="size-medium wp-image-133 aligncenter" title="iPad Prototype Front" src="http://fajkowski.com/blog/wp-content/uploads/2010/01/P1010693-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p style="text-align: center;"><a href="http://fajkowski.com/blog/wp-content/uploads/2010/01/iPadPrototypeSide.jpg"><img class="alignnone size-thumbnail wp-image-134" title="iPad Prototype Side" src="http://fajkowski.com/blog/wp-content/uploads/2010/01/P1010695-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://fajkowski.com/blog/wp-content/uploads/2010/01/iPadPrototypeBack.jpg"><img class="alignnone size-thumbnail wp-image-135" title="iPad Prototype Back" src="http://fajkowski.com/blog/wp-content/uploads/2010/01/P1010696-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Good luck, happy designing &amp; see you in March!</p>
<p>Download the iPad template:<br />
<a href="http://apparentlogic.com/design/iPad/iPadPDFTemplate.pdf"> http://apparentlogic.com/design/iPad/iPadPDFTemplate.pdf</a></p>
<p>or as a PDF or OmniGraffle document:<br />
<a href="http://apparentlogic.com/design/iPad/iPadGraffleTemplate.zip"> http://apparentlogic.com/design/iPad/iPadGraffleTemplate.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://fajkowski.com/blog/2010/01/28/build-an-ipad-prototype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenFlow: a CoverFlow API replacement for the iPhone</title>
		<link>http://fajkowski.com/blog/2009/08/02/openflow-a-coverflow-api-replacement-for-the-iphone/</link>
		<comments>http://fajkowski.com/blog/2009/08/02/openflow-a-coverflow-api-replacement-for-the-iphone/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 19:47:52 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[coverflow]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[openflow]]></category>

		<guid isPermaLink="false">http://fajkowski.com/blog/?p=115</guid>
		<description><![CDATA[When I released my first iPhone app, Presenter, two months ago, Apple accused me of using their private iPhone CoverFlow API. After appealing to Apple &#038; writing a blog post about my roadblock, Apple reversed their decision. Today at iPhoneDevCamp, I am releasing OpenFlow&#8211;a free, open source replacement for Apple&#8217;s private CoverFlow API. The initial [...]]]></description>
			<content:encoded><![CDATA[<p>When I released my first iPhone app, Presenter, two months ago, <a href="http://fajkowski.com/blog/2009/05/21/clicker-app-rejected-for-coverflow-private-api-use/">Apple accused me of using their private iPhone CoverFlow API</a>. After appealing to Apple &#038; writing a blog post about my roadblock, Apple reversed their decision.</p>
<p>Today at <a href="http://www.iphonedevcamp.org/">iPhoneDevCamp</a>, I am releasing <a href="http://apparentlogic.com/openflow">OpenFlow</a>&#8211;a free, open source replacement for Apple&#8217;s private CoverFlow API. The initial release is simple, but it is also efficient and very fast, even on first generation iPhones.</p>
<p>Go get the code here:<br />
<a href="http://apparentlogic.com/openflow">http://apparentlogic.com/openflow</a></p>
<p>The API should be easy to include in your own program. The main class, <code>AFOpenFlowView</code>, is a subclass of <code>UIView</code>.<br />
To use this in your own project:</p>
<ul>
<li>Add the OpenFlow source code to your project. </li>
<li>Add the <code>QuartzCore</code> and <code>CoreGraphics</code> frameworks.</li>
<li>Import &#8220;<code>AFOpenFlowView.h</code>&#8221; &#038; interact with it as you would a normal <code>UIView</code>.</li>
<li>You should implement both the <code>AFOpenFlowViewDelegate</code> and <code>AFOpenFlowViewDataSource</code> protocols. </li>
</ul>
<p>Currently, the delegate protocol is used to let your code know when the user selected a new object. The datasource protocol is called when <code>AFOpenFlowView</code> needs a <code>UIImage</code> object. This method should be *fast*. Don&#8217;t do <code>NSURL</code> requests or even disk access in this method. See the AFOpenFlowDemo app I provided for an example how to load images from a remote server. The datasource also needs to provide a default <code>UIImage</code>.</p>
<p>At any point, you can set <code>UIImage</code>&#8216;s on your <code>AFOpenFlowView</code>. You don&#8217;t need to wait for the datasource protocol to ask you. Your <code>AFOpenFlowView</code> will start displaying images as soon as you call <code>setNumberOfImages</code>.</p>
<p><a href="http://fajkowski.com/blog/wp-content/uploads/2009/08/OpenFlowDemo.png"><img src="http://fajkowski.com/blog/wp-content/uploads/2009/08/OpenFlowDemo-300x161.png" alt="OpenFlow Demo" title="OpenFlow Demo" width="300" height="161" class="alignnone size-medium wp-image-120" /></a></p>
<p>This is an initial release of OpenFlow. I licensed it under the liberal MIT open source license.<br />
Please drop me a line to let me know what you think &#038; where you want the project to go from here.</p>
<p>The source code for both OpenFlow and the AFOpenFlowDemo project are currently available as a zip files, hosted locally. For the demo application, you will need to register for a Flickr API key and secret. If you try to compile the demo, you will quickly find the error message where your Key &#038; Secret should be added. </p>
<p>I will be moving this code to an online repository in the very near future.</p>
<p>Enjoy!<br />
-Alex</p>
]]></content:encoded>
			<wfw:commentRss>http://fajkowski.com/blog/2009/08/02/openflow-a-coverflow-api-replacement-for-the-iphone/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mac OS X FireWire Channel Changer for EyeTV</title>
		<link>http://fajkowski.com/blog/2009/07/16/mac-os-x-firewire-channel-changer-for-eyetv/</link>
		<comments>http://fajkowski.com/blog/2009/07/16/mac-os-x-firewire-channel-changer-for-eyetv/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 03:36:18 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Channel Changer]]></category>
		<category><![CDATA[EyeTV]]></category>
		<category><![CDATA[FireWire]]></category>

		<guid isPermaLink="false">http://fajkowski.com/blog/?p=97</guid>
		<description><![CDATA[EyeTV is a fantastic DVR for Mac OS X, but if you&#8217;re unlucky enough to need a set top box from your cable company, you&#8217;ll have to figure out how EyeTV is going to change channels when you&#8217;re not around. You could buy a separate infrared transmitter, but they are an additional cost &#38; don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>EyeTV is a fantastic DVR for Mac OS X, but if you&#8217;re unlucky enough to need a set top box from your cable company, you&#8217;ll have to figure out how EyeTV is going to change channels when you&#8217;re not around. You could buy a separate infrared transmitter, but they are an additional cost &amp; don&#8217;t always work properly.</p>
<p>Almost all digital cable boxes come with an active IEEE 1394 (FireWire) port. If your Mac also has FireWire, you&#8217;re in luck. I wrote a Mac OS X System Preference pane that listens to EyeTV channel change notifications and relays them to your cable box.</p>
<p>Download the free System Preference pane at: <a href="http://apparentlogic.com/channelchanger/download">http://apparentlogic.com/channelchanger/download</a><br />
This software has been working fine for me, but it still is brand new, so please use it at your own risk!<br />
Double click the .zip file to expand. Double click the &#8220;Channel Changer.prefPane&#8221; file to install.<br />
Channel Changer runs as a launchd service in the background, listening to EyeTV&#8217;s channel change commands.</p>
<p>It&#8217;s got all the normal good stuff like:</p>
<ul>
<li>Sparkle to keep your software up-to-date</li>
<li>Log view to see what the Channel Changer service is doing in the background</li>
<li>launchd to start automatically &#038; run in the background when you reboot your computer</li>
<li>An uninstall button in case you don&#8217;t need the software anymore</li>
</ul>
<p>So far, I can only confirm it works with my Comcast-issued Motorola DCX-3200. However, it should work for most FireWire enabled cable boxes. Please drop me a line if you have any problems. Also, please let me know the make &amp; model of your cable box if it works for you! Contact me at alex at fajkowski dotcom.</p>
<p><a href="http://apparentlogic.com/channelchanger/snapshotTrimmed.png"><img src="http://fajkowski.com/blog/wp-content/uploads/2009/07/disableDoubleChannelChange.png" alt="Disable Double Channel Change" title="Disable Double Channel Change" width="410" height="28" class="aligncenter size-full wp-image-108" /></a><br />
I added an option to that disables EyeTV from setting the same channel twice on your cable box. Depending on your cable company, sending the same channel change command may cause your box to toggle into a &#8220;Television Guide&#8221; mode that looks like this:<br />
<img src="http://fajkowski.com/blog/wp-content/uploads/2009/07/tvguide.png" alt="TV Guide" title="TV Guide" width="341" height="259" class="aligncenter size-full wp-image-102" /></p>
<p>Finally, for some acknowledgements about software libraries used in &#8220;Channel Changer&#8221;.<br />
Thanks to Andy Matuschak for Sparkle, a wonderful Mac OS X software update framework.<br />
<a href="http://sparkle.andymatuschak.org/">http://sparkle.andymatuschak.org/</a><br />
And thank you to Uli Kusterer for UKKQueue, a clean &amp; powerful Cocoa wrapper for kqueue file change notifications in OS X.<br />
<a href="http://zathras.de/">http://zathras.de/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://fajkowski.com/blog/2009/07/16/mac-os-x-firewire-channel-changer-for-eyetv/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8220;AFInformationView&#8221; Bubbles on the iPhone</title>
		<link>http://fajkowski.com/blog/2009/06/22/afinformationview-bubbles-on-the-iphone/</link>
		<comments>http://fajkowski.com/blog/2009/06/22/afinformationview-bubbles-on-the-iphone/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 20:17:29 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://fajkowski.com/blog/?p=76</guid>
		<description><![CDATA[My iPhone application, Presenter, lets the user choose whether they want to swipe, tap, or use buttons to change slides. The Settings panel contains a 3 button segmented control to customize this behavior on the fly. Instead of including a help screen or inserting a large UILabel underneath the segmented control, I wrote a class [...]]]></description>
			<content:encoded><![CDATA[<p>My iPhone application, <a href="http://presenterapp.net">Presenter</a>, lets the user choose whether they want to swipe, tap, or use buttons to change slides. The Settings panel contains a 3 button segmented control to customize this behavior on the fly. Instead of including a help screen or inserting a large UILabel underneath the segmented control, I wrote a class that displays a floating UILabel on top of each button when selected.</p>
<p><a href="http://fajkowski.com/blog/wp-content/uploads/2009/06/settings.png"><img class="aligncenter size-full wp-image-79" title="Information View" src="http://fajkowski.com/blog/wp-content/uploads/2009/06/informationview.png" alt="AFInformationView in action" width="320" height="179" /></a></p>
<p>Calling this helper class is very simple. Pass in the target view, location, label text and a few other parameters.</p>
<p><code>- (void)displayInView:(UIView *)theView withText:(NSString *)displayText atLocation:(CGPoint)location width:(CGFloat)width isTriangleOnTop:(Boolean)isTriangleOnTop triangleHorizontalLocation:(CGFloat)triangleHorizontalLocation forDuration:(NSTimeInterval)duration;</code></p>
<p><code>AFInformationView</code> will fade in a multi-line, semi-transparent, black label with rounded corners &amp; a target triangle. The label&#8217;s text will wrap and grow vertically, depending on its width. After a specified amount of time, the label again fades out. If the user taps on the label, it fades out immediately.</p>
<p>I have included a sample Xcode project demonstrating its use.</p>
<p><a href="http://fajkowski.com/code/AFInformationView/AFInformationView.zip">http://fajkowski.com/code/AFInformationView/AFInformationView.zip</a></p>
<p><a title="AFInformationView sample movie" href="http://fajkowski.com/video/AFInformationView.mov">Click here to see a short video</a> of the Xcode project in use.</p>
<p>I have released the code with an MIT license. Feel free to reuse it in any project you&#8217;d like.</p>
]]></content:encoded>
			<wfw:commentRss>http://fajkowski.com/blog/2009/06/22/afinformationview-bubbles-on-the-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://fajkowski.com/video/AFInformationView.mov" length="476288" type="video/quicktime" />
		</item>
		<item>
		<title>Presenter, On Sale!</title>
		<link>http://fajkowski.com/blog/2009/06/01/presenter-on-sale/</link>
		<comments>http://fajkowski.com/blog/2009/06/01/presenter-on-sale/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 14:15:08 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Clicker]]></category>
		<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://fajkowski.com/blog/?p=43</guid>
		<description><![CDATA[I&#8217;m very happy to announce that my first application is finally available on the iPhone App Store today! You can check out a description of Presenter at: http://presenterapp.net/features Presenter pairs with your Mac over WiFi to let you control Keynote &#38; PowerPoint presentations from your iPhone. Upright, view your speaker notes in Georgia 38pt, white-on-black (a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m very happy to announce that my first application is finally available <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=314496788&amp;mt=8">on the iPhone App Store</a> today!</p>
<p style="text-align: center;"><img class="size-full wp-image-51  aligncenter" title="iTunes Connect" src="http://fajkowski.com/blog/wp-content/uploads/2009/05/itunes-connect1.jpg" alt="iTunes Connect" width="440" height="112" /></p>
<p>You can check out a description of Presenter at: <a href="http://presenterapp.net/features">http://presenterapp.net/features</a></p>
<p>Presenter pairs with your Mac over WiFi to let you control Keynote &amp; PowerPoint presentations from your iPhone. Upright, view your speaker notes in <a href="http://fajkowski.com/blog/wp-content/uploads/2009/05/presenter_notes.png">Georgia 38pt, white-on-black</a> (a bit more attractive &amp; easier to read than <a href="http://fajkowski.com/blog/wp-content/uploads/2009/05/keynote_remote_notes.png">Helvetica 16pt, brown-on-yellow</a>, no?).</p>
<p style="text-align: center;"><a title="Click to view a short video of how this works." href="http://s3.amazonaws.com/clickerapp/ClickerFlow.mov"><img class="size-full wp-image-58 aligncenter" title="Click to view a short video of how this works." src="http://fajkowski.com/blog/wp-content/uploads/2009/05/image1.png" alt="image1" width="480" height="300" /></a></p>
<p style="text-align: left;">Turn your phone sideways, and you get a <a href="http://fajkowski.com/blog/2009/05/21/clicker-app-rejected-for-coverflow-private-api-use/">&#8216;Not Cover Flow&#8217; interface</a>, displaying high quality previews of all the slides in your stack. Flick through them to see what&#8217;s coming up, or double tap a slide to navigate to that position in your show. Check out this <a href="http://s3.amazonaws.com/clickerapp/ClickerFlow.mov">short video to see how it works.</a></p>
<p>The Mac server portion of Presenter installs as a System Preference pane. The Presenter Server runs in the background as a launchd process. Pairing is very familiar—Enter a 4 digit code from your iPhone into the Mac System Preference pane. The Presenter Server communicates with your iPhone over an SSL encrypted channel, generates strong passwords, and stores them in your Mac&#8217;s &amp; iPhone&#8217;s keychains. Once you are paired, authentication happens seamlessly to the user (thank you, Bonjour), and all communication back &amp; forth is secure. Big thanks to <a href="http://deusty.blogspot.com/">Deusty Designs</a> for the robust <a href="http://code.google.com/p/cocoaasyncsocket/">CocoaAsyncSocket</a> CFSocket &amp; CFStream wrapper library. For the Mac OS X Keychain interaction, ExtendMac has a <a href="http://extendmac.com/EMKeychain/">terrific Cocoa wrapper, EMKeychain</a>. Finally, I&#8217;m also using Andy Matuschak&#8217;s <a href="http://sparkle.andymatuschak.org/">wonderful Sparkle engine</a> to keep the System Preference pane up to date.</p>
<p>The Presenter Server talks with PowerPoint and Keynote over AppleScript. Oddly enough, generating high quality previews of each slide was one of my biggest challenges. I&#8217;ll write up a post about how I did this later, but you might notice that neither Keynote nor PowerPoint&#8217;s AppleScript libraries expose any easy-to-use slide preview generator. Some other remotes out there take screenshots of what is visible on the Mac&#8217;s screen, shrink it down, then send it to the iPhone. This isn&#8217;t good enough; it requires the user to flip through every slide on his computer before being able to see the images on the iPhone. Also unhelpful, Keynote embeds teeny-tiny, low resolution previews of its slides inside the file format. PowerPoint&#8217;s file format is&#8230;well, kind of awful.</p>
<p>Today, I&#8217;m just happy and relieved to finally have an application available on the iPhone App Store. I&#8217;m not expecting to get rich from this venture&#8230;I&#8217;m just pleased to finally be able to say that I write commercial Mac OS X software—and not a farting, tip calculator, flashlight, either. (Sorry to disappoint, Presenter does not contain <a href="http://www.atebits.com/pee/">PEE</a>, yet).</p>
]]></content:encoded>
			<wfw:commentRss>http://fajkowski.com/blog/2009/06/01/presenter-on-sale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://s3.amazonaws.com/clickerapp/ClickerFlow.mov" length="1987246" type="video/quicktime" />
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: fajkowski.com @ 2012-05-18 09:47:47 -->
