<?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; Cocoa</title>
	<atom:link href="http://fajkowski.com/blog/tag/cocoa/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>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>&#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:53:33 -->
