<?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>Zac&#039;s Weblog &#187; software</title>
	<atom:link href="http://www.zacwhite.com/blog/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zacwhite.com/blog</link>
	<description></description>
	<lastBuildDate>Fri, 22 Apr 2011 06:01:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>What if Adobe generated code?</title>
		<link>http://www.zacwhite.com/blog/2010/05/27/what-if-adobe-generated-code/</link>
		<comments>http://www.zacwhite.com/blog/2010/05/27/what-if-adobe-generated-code/#comments</comments>
		<pubDate>Thu, 27 May 2010 08:01:42 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.zacwhite.com/blog/?p=246</guid>
		<description><![CDATA[Wil Shipley had an idea for Adobe: If Adobe were smart, they’d modify their Flash &#x25B6; iPhone code to just output Obj-C source code. Not much Apple could do.&#8221; I&#8217;m sure Adobe is smart. And that&#8217;s why they aren&#8217;t getting into a battle they can&#8217;t possibly win. Let&#8217;s explore a what-if scenario of Adobe going [...]]]></description>
			<content:encoded><![CDATA[<p>Wil Shipley had an idea for Adobe:</p>
<blockquote><p>If Adobe were smart, they’d modify their Flash &#x25B6; iPhone code to just output Obj-C source code. Not much Apple could do.&#8221;</p></blockquote>
<p>I&#8217;m sure Adobe is smart. And that&#8217;s why they aren&#8217;t getting into a battle they can&#8217;t possibly win. Let&#8217;s explore a what-if scenario of Adobe going down this path. How would Apple react in this cat and mouse game? Could they create a tool to automatically filter Flash created apps without the sourcecode to your program?
</p>
<h2>Step 1: Class dump executable.</h2>
<p>
For those of you that don&#8217;t know, you can get all Objective-C symbols out of a Mach-O binary with a wonderful tool called <a href="http://www.codethecode.com/projects/class-dump/" onclick="pageTracker._trackPageview('/outgoing/www.codethecode.com/projects/class-dump/?referer=');">class-dump</a>. If they aren&#8217;t there, you&#8217;ve already detected it&#8217;s a possible obfuscated build.
</p>
<h2>Step 2: Search class-dump output.</h2>
<p>
Look for suspicious symbols. Because anything outputted by a source generating engine is um, source, you can see exactly what pops out of a typical compile. It isn&#8217;t as though Apple can&#8217;t afford a copy of CS5. You can search for &#8220;CS5FlashView&#8221;<a href="#foot1" id="refFoot1"><sup>1</sup></a> or any myriad of classes/symbols that would be put into the boilerplate output. This necessitates something way more devious as suggested by <a href="http://twitter.com/rentzsch/status/14812033481" onclick="pageTracker._trackPageview('/outgoing/twitter.com/rentzsch/status/14812033481?referer=');">rentzsch</a>: <a href="http://en.wikipedia.org/wiki/Polymorphic_code" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Polymorphic_code?referer=');">polymorphic code</a>.
</p>
<h2>Step 3: Search for patterns.</h2>
<p>
After Adobe had spent a good chunk of time creating an Objective-C polymorphic coder, Adobe could now distribute a code generation engine that produces binaries that looks like it&#8217;s a home-made animation and application framework. But wait, if all the binaries produce the same obfuscated code, that is trivial to detect. Just look for &#8220;ER0GlashView.&#8221; This necessitates a nondeterministic Objective-C polymorphic coder. A perfect Ph.D topic, but nothing that&#8217;s been done to my knowledge. If it existed, <a href="http://www.ioccc.org/" onclick="pageTracker._trackPageview('/outgoing/www.ioccc.org/?referer=');">this contest</a> would be utterly pointless.
</p>
<p>
And you&#8217;re not just dealing with hiding a 200 line C function. Imagine randomizing the following:</p>
<ul>
<li>
<h4>Class Names</h4>
<p>If you produce class names like &#8220;QTi3uigejr&#8221; dictionary attacks can trivially red flag programs.</p>
</li>
<li>
<h4>Symbols</h4>
<p>It isn&#8217;t enough to generate random symbol names. You have to randomize the structure of your classes so signatures of symbols don&#8217;t resemble the original versions. It would be fairly easy to create a JavaScript like obfuscater which converted your classnames/symbols to meaningless letter combinations. Now imagine running that on two trees of headers outputted from class-dump. One from a known Flash generated app and the other from an unknown. A significant chunk would turn out to be the exact same as the headers would be distilled into their underlying structure.
</p>
</li>
<li>
<h4>Class hierarchy</h4>
<p>Ok, so now you use perfectly hidden class names, but every class hierarchy produces a recognizable fingerprint for a library. Without knowing anything about the classes, you can see relative relationships between them. The bigger the code-base, the easier this is. I&#8217;d assume the flash support structure is fairly large and its interdependency very complicated.
</p>
</li>
</ul>
<h2>Prohibitively hard.</h2>
</p>
<p>Let&#8217;s say you find an awesome little UIView subclass, but Apple has banned anyone from using it on the store. It wouldn&#8217;t be too hard to get around. Copy/paste, rename some methods, change a few method names around, etc. You then would have plausible deniability and you could say it wasn&#8217;t the banned UIView.
</p>
<p>Imagine me asking you to incorporate <a href="http://github.com/facebook/three20" onclick="pageTracker._trackPageview('/outgoing/github.com/facebook/three20?referer=');">three20</a> into your app and obfuscate it in a way where I couldn&#8217;t tell you were using it. And assuming the code-generator produces deterministic output, access to all your source code.<a href="#foot2" id="refFoot2"><sup>2</sup></a> How hard would that be? You aren&#8217;t just dealing with changing the names of things. You are tasked with changing the fundamental structure of internal APIs and preserving assumptions that were undoubtedly made when making the code work with itself.
</p>
<p>Now imagine making a program that could produce unique obfuscations of <a href="http://github.com/facebook/three20" onclick="pageTracker._trackPageview('/outgoing/github.com/facebook/three20?referer=');">three20</a> and in a way that made it look from the outside like it was redesigned and rewritten from scratch by a human.<a href="#foot3" id="refFoot3"><sup>3</sup></a> Brain. Explode.</p>
<h2>Consequences.</h2>
<p>What if Adobe successfully can hide its entire Flash subsystem and so it debuts CS5.1 with the feature turned back on? Hundreds of apps get onto the store by tricking Apple gatekeepers. What do you think will happen when Apple figures out a way to detect with 99% accuracy that an app was generated with Flash?<a href="#foot4" id="refFoot4"><sup>4</sup></a> Yep, they&#8217;ll pull those apps faster than Brian J. Hogan picked up that phone.
</p>
<p>The point is, there is no reason for Adobe to take that chance with their customers.</p>
</p>
<div style="border-left: 1px solid #353535">
<ol>
<li id="foot1">This class name is just an example. It&#8217;s anyone&#8217;s guess as to how Adobe would need to implement this.<a href="#refFoot1">&#x261D;</a>
<li id="foot2">One could just generate a &#8216;Hello World&#8217; program and see that all Flash views inherit from some base class for example.<a href="#refFoot2">&#x261D;</a>
<li id="foot3">Not to mention you couldn&#8217;t use any shared resources (images, plists, etc.) without obfuscating those.<a href="#refFoot3">&#x261D;</a>
<li id="foot4">And for all the examples given, the detection takes a fraction of the engineering effort of the obfuscation. It&#8217;s only reasonable to assume that detection will take less effort than generation. <a href="#refFoot4">&#x261D;</a>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zacwhite.com/blog/2010/05/27/what-if-adobe-generated-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting User Data From a Lite to a Paid App</title>
		<link>http://www.zacwhite.com/blog/2009/10/15/getting-user-data-from-a-lite-to-a-paid-app/</link>
		<comments>http://www.zacwhite.com/blog/2009/10/15/getting-user-data-from-a-lite-to-a-paid-app/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 01:20:18 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.zacwhite.com/blog/?p=182</guid>
		<description><![CDATA[It&#8217;s a common problem now on the App Store. User buys Lite version. User likes lite version. User buys the paid version and loses all of her/his data. Not a very good experience. How can we fix this? UIPasteboard of course! Apple introduced an excellent and oft overlooked addition to the iPhone SDK when it [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s a common problem now on the App Store. User buys Lite version. User likes lite version. User buys the paid version and loses all of her/his data. Not a very good experience.</p>
<p>How can we fix this?</p>
<p>UIPasteboard of course!</p>
<p>Apple introduced an excellent and oft overlooked addition to the iPhone SDK when it gave developers the same power that they have on the desktop for sharing large chunks of data between applications. But Zac, you say, you of all people should know you can&#8217;t <i>share</i> data between apps&#8230;they&#8217;re sandboxed! Not true! Think of UIPasteboard as those little paper airplanes you used to send notes in back in school. No sandbox can hold UIPasteboard&#8230;</p>
<h3>Method 1</h3>
<p>This first method is fairly straightforward and easy for small data sets: Keep custom pasteboard filled with data you&#8217;d want users to import into your paid app.</p>
<pre class="prettyprint">UIPasteboard *sharedPasteboard = [UIPasteboard pasteboardWithName:@"com.mydomain.myapplite.sharedpasteboard" create:YES];
sharedPasteboard.persistent = YES;</pre>
<p>By executing that on launch and keeping your sharedPasteboard up to date, you&#8217;ll always be able to request that from your paid app and auto-discover data from the lite version. The nicest thing about this method is most people <i>won&#8217;t notice</i> you did anything. Maybe you want users to notice your work&#8230;but sometimes the best features are the ones users don&#8217;t notice.</p>
<h3>Method 2</h3>
<p>This is for apps that have lots of content to put on the pasteboard and updating it all the time wouldn&#8217;t necessarily be so great. It&#8217;s a little weird but bear with me.</p>
<p>First, make sure you app can respond to the MyAppLite-export:// scheme. The parameters to this don&#8217;t really matter, but you could use them to specify some subset of data to export. You could also make this a little more generic and perhaps a little more secure by specifying a pasteboard name to the URL.</p>
<p>When MyAppLite is launched using this scheme, the users is presented with an &#8220;Exporting&#8230;&#8221; screen or something of the sort while MyAppLite puts everything requested on a special, one time use, pasteboard. After the pasteboard has been filled, MyAppLite opens MyApp-import://NAME_OF_PASTEBOARD. Now the paid app knows where to look to get all the necessary MyAppLite data off of the temporary pasteboard.</p>
<h3>Security Concerns</h3>
<p>Method 2 definitely has some security risks which possibly could be worked around. For one, if someone finds out your schemes they can read users data from a lite version and overwrite data in the paid version. With some obfuscated keys, this might not be much of an issue. Also, you wouldn&#8217;t want to send passwords or sensitive data using this method. That kind of data should be stored in the keychain anyway that is already available across your apps.</p>
<p>I hope this gives you some ideas on how to transfer data with UIPasteboard. I&#8217;ll try and post some sample code illustrating some of these concepts soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zacwhite.com/blog/2009/10/15/getting-user-data-from-a-lite-to-a-paid-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Site!!</title>
		<link>http://www.zacwhite.com/blog/2009/03/01/new-site/</link>
		<comments>http://www.zacwhite.com/blog/2009/03/01/new-site/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 22:06:28 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[random]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://zacwhite.com/blog/?p=174</guid>
		<description><![CDATA[http://thatswh.at/ It&#8217;s juvenile and hilarious. My two favorite things. It looks at every tweet on Twitter and finds tweets that tell other people &#8220;That&#8217;s what she said.&#8221; It then finds the tweet that was in response to and puts it on a list. This produces some of the following gems: &#8220;my hands smell like meat&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p></p>
<h2><a href="http://thatswh.at/" onclick="pageTracker._trackPageview('/outgoing/thatswh.at/?referer=');">http://thatswh.at/</a></h2>
<p></p>
<p>It&#8217;s juvenile and hilarious. My two favorite things. It looks at every tweet on <a href="http://twitter.com/" onclick="pageTracker._trackPageview('/outgoing/twitter.com/?referer=');">Twitter</a> and finds tweets that tell other people &#8220;That&#8217;s what she said.&#8221; It then finds the tweet that was in response to and puts it on a list.</p>
<p>This produces some of the following gems:</p>
<blockquote><p>&#8220;my hands smell like meat&#8221;</p></blockquote>
<p>and</p>
<blockquote><p>&#8220;@mikejarrell @Jabrown85 Haha, thanks. I think he&#8217;s a little crooked but it was hard since he is the same height as me.&#8221;</p></blockquote>
<p>Classics.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zacwhite.com/blog/2009/03/01/new-site/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Free Software!!!</title>
		<link>http://www.zacwhite.com/blog/2009/02/24/free-software/</link>
		<comments>http://www.zacwhite.com/blog/2009/02/24/free-software/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 05:03:58 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[mine]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://zacwhite.com/blog/?p=170</guid>
		<description><![CDATA[I made a little app for my personal use the other day and thought I would share it. It basically keeps a window that is globally accessible through a keyboard command (cmd+shift+m by default). It lets you jot down any notes and use them in any other app. Simi-useful but more importantly&#8230;free! Download Memo 1.0]]></description>
			<content:encoded><![CDATA[<p>I made a little app for my personal use the other day and thought I would share it. It basically keeps a window that is globally accessible through a keyboard command (cmd+shift+m by default). It lets you jot down any notes and use them in any other app.
</p>
<p>Simi-useful but more importantly&#8230;free!</p>
<p class="download"><a href="http://zacwhite.com/software/files/Memo.app.zip" onclick="pageTracker._trackPageview('/outgoing/zacwhite.com/software/files/Memo.app.zip?referer=');">Download Memo 1.0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zacwhite.com/blog/2009/02/24/free-software/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Exciting News</title>
		<link>http://www.zacwhite.com/blog/2008/09/02/exciting-news/</link>
		<comments>http://www.zacwhite.com/blog/2008/09/02/exciting-news/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 01:33:22 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[mine]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://zacwhite.com/blog/?p=166</guid>
		<description><![CDATA[So I&#8217;ve put my pet project, Searcher, on Cydia (under Utilities). Searcher is an easy way to search your entire iPhone. SMS, Contacts, Notes, Events, Safari Bookmarks and Safari History are a single tap away. Check out the website for Positron Software to find out more. I will have some more news on OpenClip in [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve put my pet project, <a href="http://positronsoftware.com/" onclick="pageTracker._trackPageview('/outgoing/positronsoftware.com/?referer=');">Searcher</a>, on Cydia (under Utilities). Searcher is an easy way to search your entire iPhone. SMS, Contacts, Notes, Events, Safari Bookmarks and Safari History are a single tap away. Check out the website for <a href="http://positronsoftware.com/" onclick="pageTracker._trackPageview('/outgoing/positronsoftware.com/?referer=');">Positron Software</a> to find out more.</p>
<p>I will have some more news on <a href="http://openclip.org/" class="broken_link" onclick="pageTracker._trackPageview('/outgoing/openclip.org/?referer=');">OpenClip</a> in the next couple days. I will also be traveling to Chicago for <a href="http://rentzsch.com/c4/twoOpen/" class="broken_link" onclick="pageTracker._trackPageview('/outgoing/rentzsch.com/c4/twoOpen/?referer=');">C4[2]</a>, so drop me a line if you would like to meet up.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zacwhite.com/blog/2008/09/02/exciting-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenClip Concerns</title>
		<link>http://www.zacwhite.com/blog/2008/08/20/openclip-concerns/</link>
		<comments>http://www.zacwhite.com/blog/2008/08/20/openclip-concerns/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 00:33:57 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[mine]]></category>
		<category><![CDATA[openclip]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://zacwhite.com/blog/?p=158</guid>
		<description><![CDATA[Note: This is also mirrored on openclip.org. Let me first explain how OpenClip works: How it works is relatively simple and doesn&#8217;t break the SDK agreement. OpenClip works by looking into the Documents folder of other applications to get their pastes. Applications are allowed to write all they want to their own Documents directory (for [...]]]></description>
			<content:encoded><![CDATA[<p class="note"><strong>Note:</strong> This is also mirrored on <a href="http://openclip.org/main.php" class="broken_link" onclick="pageTracker._trackPageview('/outgoing/openclip.org/main.php?referer=');">openclip.org</a>.</p>
<p>Let me first explain how OpenClip works:</p>
<p>How it works is relatively simple and doesn&#8217;t break the SDK agreement. OpenClip works by looking into the Documents folder of other applications to get their pastes. Applications are allowed to write all they want to their own Documents directory (for copy), so no foul there.<br />
Applications are also allowed to read outside their sandbox into the Documents directories for other apps (for paste), so no foul there.</p>
<p><strong>How could that ever go wrong? What&#8217;s the problem?</strong></p>
<p>The problem is Apple is probably going to shut down reading into other application&#8217;s boxes. I&#8217;m all for that as long as one of two things happens before:</p>
<ul>
<li>Apple ports NSPasteboard to the iPhone SDK (radar://6158362)</li>
</ul>
<p>NSPasteboard is what I modeled OpenClip after. It allows copy and paste between applications, but more than that, it adds <em>communication</em> between applications. Porting NSPasteboard would make OpenClip moot and developers could easily respond by changing all references to OCPasteboard to NSPasteboard. Easy for everyone involved.</p>
<ul>
<li>Apple shuts down sandbox reading but creates a public folder for apps to write to. (radar://6156881)</li>
</ul>
<p>If Apple does this, inter-app communication would still be possible through OpenClip or some other file communication method.</p>
<p>Applications need to work together. That&#8217;s the Apple Way®. I don&#8217;t know what you think, but to me the smaller and simpler an app is on the iPhone, the better it is. To make apps that are simple but powerful, developers need to make applications that can communicate.</p>
<p><strong>What happens if Apple shuts it down?</strong></p>
<p>Here&#8217;s what happens if a new version of the iPhone OS comes out and OpenClip can&#8217;t communicate anymore:</p>
<ul>
<li>Developers who implement OpenClip to either *only* copy or *only* paste can easily check if that will work before displaying any UI. If it breaks, those options just disappear.</li>
<li>Developers who implement to do both copy and paste retain copy and paste within their application. That means that when and if the next update breaks OpenClip, applications won&#8217;t stop launching, they won&#8217;t crash when you try and copy and they won&#8217;t get garbage data. All that will happen is the app will only be able to copy and paste in the application. Not a horrible way to degrade if you ask me.</li>
</ul>
<p><strong>What about the UI? There are going to be like 20 implementations for copy/paste!</strong></p>
<p>UI is a hard problem to solve. One of OpenClips goals is to provide examples of UIs for copy and paste. But to be honest, the best thing you can do with OpenClip is use it only for simple data. Only copy interesting data that a user would want to copy and present UI similar to Apple&#8217;s push to save image UI. Doing what MagicPad does and providing a whole way to select text is not what 90% of apps need. Look at what Twittelator did with copy in the video on GeekBrief.tv (http://www.geekbrief.tv/copy-and-paste-for-iphone). Press and hold needs to be the way most apps utilize copy and paste.</p>
<p>You can check out Proximi&#8217;s MagicPad UI proposal video <a href="http://magicpad.proximi.com/video.php" class="broken_link" onclick="pageTracker._trackPageview('/outgoing/magicpad.proximi.com/video.php?referer=');">here</a>. It&#8217;s worth a look.</p>
<p>Lets face it. Hardly anyone is not buying an iPhone because it doesn&#8217;t copy and paste. It&#8217;s useful, but not necessary. Apple knows this so they put it at the bottom of their to-do list. If Apple were to implement NSPasteboard, however, 90% of apps could gain some really great functionality. Until then, maybe OpenClip can serve as a sneak peek to Apple, developers and users that this kind of framework would benefit the iPhone greatly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zacwhite.com/blog/2008/08/20/openclip-concerns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Copy/Paste</title>
		<link>http://www.zacwhite.com/blog/2008/08/02/iphone-copypaste/</link>
		<comments>http://www.zacwhite.com/blog/2008/08/02/iphone-copypaste/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 04:55:12 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[mine]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://zacwhite.com/blog/?p=141</guid>
		<description><![CDATA[I created an open source project for iPhoneDevCamp 2. It allows cross application copy and paste. Basically, all you have to do to get the benefits is include a few classes and use the very simple API to copy data or paste data. The special part is cross application. Copy a cocktail in Cocktails and [...]]]></description>
			<content:encoded><![CDATA[<p>I created an open source project for <a href="http://iphonedevcamp.org/" onclick="pageTracker._trackPageview('/outgoing/iphonedevcamp.org/?referer=');">iPhoneDevCamp 2</a>. It allows <em>cross application copy and paste</em>.</p>
<p>Basically, all you have to do to get the benefits is include a few classes and use the very simple API to copy data or paste data. The special part is cross application. Copy a cocktail in <a href="http://cocktails.cocktaildb.com/" class="broken_link" onclick="pageTracker._trackPageview('/outgoing/cocktails.cocktaildb.com/?referer=');">Cocktails</a> and paste it into <a href="http://magicpad.proximi.com/" class="broken_link" onclick="pageTracker._trackPageview('/outgoing/magicpad.proximi.com/?referer=');">MagicPad</a> (<a href="http://www.viddler.com/explore/mager/videos/36/" onclick="pageTracker._trackPageview('/outgoing/www.viddler.com/explore/mager/videos/36/?referer=');">Video</a> of this in action).</p>
<p>There are some limitations. This <em>technically complies with all Apple agreements</em>. It is completely possible that apps that use this wouldn&#8217;t get on the App Store. Not for any real reason other than it will eventually step on Apple&#8217;s toes. It is also conceivable that the technology this is built on will break in the future. The hope is that the update that breaks this also brings copy and paste support. <img src='/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strike>
<p>If you are interested in looking at some code, send me an email to <a href="mailto:zacwhite+copypaste@@at@@gmail..dot..com">zacwhite+copypaste@@at@@gmail..dot..com</a>.</p>
<p><strong>Update: </strong>Ok people. Go download the code at <a href="http://code.google.com/p/touchclipboard/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/touchclipboard/?referer=');">http://code.google.com/p/touchclipboard/</a>. Willing to hear name ideas <img src='/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Update 2: </strong>Video: <a href="http://www.viddler.com/explore/mager/videos/36/" onclick="pageTracker._trackPageview('/outgoing/www.viddler.com/explore/mager/videos/36/?referer=');">http://www.viddler.com/explore/mager/videos/36/</a>.</p>
<p></strike></p>
<p>Ignore all that.</p>
<p><strong>Update 3: </strong>Site is up. Check out <a href="http://openclip.org/" class="broken_link" onclick="pageTracker._trackPageview('/outgoing/openclip.org/?referer=');">OpenClip.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zacwhite.com/blog/2008/08/02/iphone-copypaste/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>iPhone SDK</title>
		<link>http://www.zacwhite.com/blog/2008/03/03/iphone-sdk/</link>
		<comments>http://www.zacwhite.com/blog/2008/03/03/iphone-sdk/#comments</comments>
		<pubDate>Mon, 03 Mar 2008 18:42:07 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[mine]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://zacwhite.com/blog/?p=106</guid>
		<description><![CDATA[Who&#8217;s ready for the iPhone SDK? Me. In preparation, I&#8217;ve been working on a project I&#8217;m code-naming Engineer. That might change, but the app is a search application. At the moment, it searches SMS, Notes, and Contacts and it is pretty easy to add support for just about anything. I plan to add iTunes, Mail, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/images/ss.png"><img width="100" style="float:left;padding-right:10px" src="/images/ss.png" /></a>Who&#8217;s ready for the iPhone SDK? Me. In preparation, I&#8217;ve been working on a project I&#8217;m code-naming Engineer. That might change, but the app is a search application. At the moment, it searches SMS, Notes, and Contacts and it is pretty easy to add support for just about anything. I plan to add iTunes, Mail, Photos (if the computer&#8217;s metadata transfers over), and Events. For 1.0, expect a subset of those and for 1.5, expect all. I&#8217;m also designing it with plugins in mind, so anyone can write a plugin for their special data format.</p>
<p>I&#8217;m aware that this probably will get replace by Apple at some point. Duh, people need to search for stuff on their phone. But until then, I&#8217;ll get some iPhone practice.</p>
<p>Email me if you would like to know when it gets released: <a href="mailto:zacwhite[a T] gmail [dottt] com">Zac White</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zacwhite.com/blog/2008/03/03/iphone-sdk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Iron Coder Live</title>
		<link>http://www.zacwhite.com/blog/2007/08/12/iron-coder-live/</link>
		<comments>http://www.zacwhite.com/blog/2007/08/12/iron-coder-live/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 04:40:44 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[mine]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://zacwhite.com/blog/?p=74</guid>
		<description><![CDATA[I finally entered an Iron Coder! The theme this year was &#8220;Conspiracy&#8221; and the API was &#8220;iPhone&#8221;. Which is a little funny considering there is no real API for the iPhone. Basically what I did was write a little cocoa app that lives up in your menu bar and takes a shot with the iSight [...]]]></description>
			<content:encoded><![CDATA[<p>I finally entered an <a href="http://rentzsch.com/c4/ironCoderLive" class="broken_link" onclick="pageTracker._trackPageview('/outgoing/rentzsch.com/c4/ironCoderLive?referer=');">Iron Coder</a>! The theme this year was &#8220;Conspiracy&#8221; and the API was &#8220;iPhone&#8221;. Which is a little funny considering there is no real API for the iPhone.</p>
<p>Basically what I did was write a little cocoa app that lives up in your menu bar and takes a shot with the iSight ever 5 minutes.</p>
<p>The reasoning being that if you are the victim of conspiracy the best way to uncover it all is to set up this &#8220;nanny cam&#8221; type thing. Basically the built in web server serves up an iPhone specific web page with all the images on it. Check it out:</p>
<p><a href="http://homepage.mac.com/zacwhite/files/SpiPhone.app.zip" onclick="pageTracker._trackPageview('/outgoing/homepage.mac.com/zacwhite/files/SpiPhone.app.zip?referer=');">SpiPhone</a></p>
<p>Just run it, make sure your isight&#8217;s plugged in, and then go to http://localhost:9138/ and test it out.</p>
<p>If you want to check out how I wrote it (it isn&#8217;t anything super special), the source is <a href="http://homepage.mac.com/zacwhite/files/SpiPhone_source.zip" onclick="pageTracker._trackPageview('/outgoing/homepage.mac.com/zacwhite/files/SpiPhone_source.zip?referer=');">here</a>.</p>
<p>I unfortunately didn&#8217;t win (my presentation lacked flash and generally sucked), but I did get 4 votes and I didn&#8217;t even vote for myself&#8230;</p>
<p>By the way, C4[1] was amazing. I will blog about it shortly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zacwhite.com/blog/2007/08/12/iron-coder-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GVoicemail?</title>
		<link>http://www.zacwhite.com/blog/2007/04/26/gvoicemail/</link>
		<comments>http://www.zacwhite.com/blog/2007/04/26/gvoicemail/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 14:06:36 +0000</pubDate>
		<dc:creator>Zac White</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://zacwhite.com/blog/?p=70</guid>
		<description><![CDATA[I am currently trying Callwave. The main reason I&#8217;m trying it out is I want to get voicemail to my email. So I was setting up a GMail filter to deal with it. When I try and add a &#8220;Voicemail&#8221; label to GMail, it won&#8217;t let me&#8230; Interesting&#8230;]]></description>
			<content:encoded><![CDATA[<p>I am currently trying <a href="http://www.callwave.com/" onclick="pageTracker._trackPageview('/outgoing/www.callwave.com/?referer=');">Callwave</a>. The main reason I&#8217;m trying it out is I want to get voicemail to my email. So I was setting up a GMail filter to deal with it.</p>
<p>When I try and add a &#8220;Voicemail&#8221; label to GMail, it won&#8217;t let me&#8230;</p>
<p><img src="http://zacwhite.com/images/voicemail.png"></img></p>
<p><img src="http://zacwhite.com/images/system.png"></img></p>
<p>Interesting&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zacwhite.com/blog/2007/04/26/gvoicemail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
