<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Wandering Coder</title>
	<atom:link href="http://wanderingcoder.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://wanderingcoder.net</link>
	<description></description>
	<lastBuildDate>Wed, 23 May 2012 21:21:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='wanderingcoder.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/7c4a218678eb82593e123f827dd13807?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Wandering Coder</title>
		<link>http://wanderingcoder.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://wanderingcoder.net/osd.xml" title="Wandering Coder" />
	<atom:link rel='hub' href='http://wanderingcoder.net/?pushpress=hub'/>
		<item>
		<title>New favicon (and updates)</title>
		<link>http://wanderingcoder.net/2012/05/23/new-favicon-updates/</link>
		<comments>http://wanderingcoder.net/2012/05/23/new-favicon-updates/#comments</comments>
		<pubDate>Wed, 23 May 2012 21:10:53 +0000</pubDate>
		<dc:creator>Pierre Lebeaupin</dc:creator>
				<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">https://wanderingcoder.wordpress.com/?p=463</guid>
		<description><![CDATA[my Mac IIsi, running MacPaint 2.1 F Short of a Mac 128k running the original MacPaint, this is possibly the most authentic way to draw monochrome pixel art. In other news, I have made a number of updates to previous posts; most of those were to fix spelling mistakes, but I should mention a few [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=463&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img style="display:block;margin-left:auto;margin-right:auto;" src="http://wanderingcoder.files.wordpress.com/2012/05/img_0076.jpg?w=600&h=800" alt="Photo of an old Mac (screen, main unit, keyboard and mouse) displaying a picture editor program with the just completed site favicon (itself a monochrome pixel stick figure carrying a bundle)" title="IMG_0076.JPG" border="0" width="600" height="800" />
<div style="text-align:center;">
<p>my Mac IIsi, running MacPaint 2.1 F</p>
</div>
<p>Short of a Mac 128k running the original MacPaint, this is possibly the most authentic way to draw monochrome pixel art.</p>
<p>In other news, I have made a number of updates to previous posts; most of those were to fix spelling mistakes, but I should mention a few major corrections; for one, I realized that Skype very much is household-name commercial software distributed mostly digitally, so I amended <a href="http://wanderingcoder.net/2011/01/10/mac-app-store/">First Impressions of the Mac App Store</a> in consequence; another thing I realized is that I discovered the Iconfactory site in 1999, and not 1996; <a href="http://wanderingcoder.net/2011/06/02/lodsys-patent-defendants-support/">In support of the Lodsys patent lawsuit defendants</a> has been fixed as such. In <a href="http://wanderingcoder.net/2012/03/07/developer-id-restrictive/">Developer ID might not seem restrictive, but it is</a>, I implicitly assumed that if Apple was going to require code to be signed with a certificate it provides, developers were necessarily going to have to pay for that certificate, but I realized Apple was providing certificates for signing Safari extensions for free, so I adjusted my oath to specify that point. Lastly, the ARM architecture documentation PDF keeps moving in Xcode, so I again had to update <a href="http://wanderingcoder.net/2010/06/02/intro-neon/">Introduction to NEON on iPhone</a> with up-to-date instructions for locating it…</p>
<br />Filed under: <a href='http://wanderingcoder.net/category/meta/'>Meta</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wanderingcoder.wordpress.com/463/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wanderingcoder.wordpress.com/463/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wanderingcoder.wordpress.com/463/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wanderingcoder.wordpress.com/463/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wanderingcoder.wordpress.com/463/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wanderingcoder.wordpress.com/463/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wanderingcoder.wordpress.com/463/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wanderingcoder.wordpress.com/463/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wanderingcoder.wordpress.com/463/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wanderingcoder.wordpress.com/463/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wanderingcoder.wordpress.com/463/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wanderingcoder.wordpress.com/463/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wanderingcoder.wordpress.com/463/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wanderingcoder.wordpress.com/463/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=463&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wanderingcoder.net/2012/05/23/new-favicon-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74aa65bb65caff74266756ff9ca40192?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wandering coder</media:title>
		</media:content>

		<media:content url="http://wanderingcoder.files.wordpress.com/2012/05/img_0076.jpg" medium="image">
			<media:title type="html">IMG_0076.JPG</media:title>
		</media:content>
	</item>
		<item>
		<title>Beware of ARMv6-only iOS libraries</title>
		<link>http://wanderingcoder.net/2012/05/11/armv6-ios-libraries/</link>
		<comments>http://wanderingcoder.net/2012/05/11/armv6-ios-libraries/#comments</comments>
		<pubDate>Thu, 10 May 2012 23:13:13 +0000</pubDate>
		<dc:creator>Pierre Lebeaupin</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">https://wanderingcoder.wordpress.com/?p=409</guid>
		<description><![CDATA[“What the f…1 is going on?” There I was, one day at work, trying to figure out why this iOS project wouldn’t link, giving the error “Undefined symbols for architecture armv7:” with the missing symbols being the entry points of a third-party library that was just added. Which made no sense at all, as the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=409&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>“What the f…<sup><a name="fnr-armv6-ios-libraries-f-word"><a href="#fn-armv6-ios-libraries-f-word">1</a></a></sup> is going on?”</p>
<p>There I was, one day at work, trying to figure out why this iOS project wouldn’t link, giving the error “Undefined symbols for architecture armv7:” with the missing symbols being the entry points of a third-party library that was just added. Which made <em>no sense at all</em>, as the library did define these symbols (I checked using <code>otool -vS</code>), and the library was properly pulled in by a subproject, which was itself properly pulled in by the app (I checked with the log of commands executed by Xcode). I already tried cleaning all projects three times, nuking all the caches I could think of, and removing and reinserting the external library, to no avail. I was at a loss for ideas.</p>
<p>This is an actual issue that I want to warn you about because it could affect any iOS developer, so I’ll cut to the chase: the issue was that the third-party library was only built for ARMv6 (or only built for for the ARM_ALL subtype, the same issue occurs in the end) while I was trying to build an app with an ARMv7 slice.</p>
<p>This can happen with libraries that haven’t been updated recently, or that work fine in ARMv6 for most people (I’ll explain why in a minute) so are not built for both ARMv6 and ARMv7. If this happens to you (you can check with <code>otool -vhf &lt;library&gt; | less</code>; notice that in this context, “ALL” does NOT mean “both ARMv6 and ARMv7”), demand from the supplier of the library that you be provided a library that has both ARMv6 and ARMv7 slices; and if you have no choice but to take matters into your own hands (as I had to do), it’s possible to build a simple tool (everything you need is in <code>mach-o/loader.h</code> and <code>mach/machine.h</code>) that will manipulate the ARMv6 object files so that they become ARMv7 (the code in fact remains unchanged) so that you can craft a suitable library with both ARMv6 and ARMv7 slices.</p>
<p>What’s interesting is that the issue only becomes apparent in a specific configuration: if the external library is referenced not by the app target, but by a library target which is itself used by the app. iOS apps projects often have only one target, as iOS apps are generally simpler than Mac apps, but it’s not outlandish for more complex iOS projects to have multiple targets which depend on each other, in which case you could encounter the issue.</p>
<p>What is happening here is that ARMv6 and ARMv7 are treated separately enough by the iOS toolchain that they are in practice treated as different architectures altogether, a bit like x86 and ppc are when building Universal Binaries (and this is no fluke, there are plenty of ARM-specific patches in the <a href="http://opensource.apple.com/source/cctools/cctools-822/">source</a> to enforce this behavior). What this means among other things is that <code>libtool</code> (the tool which builds libraries) will refuse to mix together ARMv6 and ARMv7 object files; instead, it will combine them separately, then put the results side by side in a fat library.</p>
<p>So in our case what happens is that the object files from the third-party library, being ARMv6, are put together with the ARMv6 object files (of which there may be none, if you’re building ARMv7-only) in the ARMv6 slice of the library target, while the ARMv7 object files are put together in the ARMv7 slice, which therefore does not include anything from the third-party library. Then when the app target is built, more precisely when its ARMv7 slice is built, the linker will find the ARMv7 slice of the library from the target, and will not look in the ARMv6 slice (as it is expected to define the same symbols, so the linker would find duplicate definitions if it tried); so the third-party library object files are never found, referenced symbols are undefined, and you wonder what is going on.</p>
<p>This does not happen if the third-party library is referenced directly by the app target, as then the linker will find this library with only an ARMv6 slice, in which case there is an exception to the segregation rules: since there is no ARMv7 version, these ARMv6 object files will be searched for symbols and linked in to satisfy the dependencies instead, even though the linker is building for ARMv7; the linker is the only one allowed to mix together ARMv6 and ARMv7 object files. So the ARMv6-only library is working in this case, which may lead the supplier of the library to believe the library does not need to be updated to have an ARMv7 slice, while in fact it does need to, otherwise it will cause problems for people who have more complex project structures.</p>
<hr />
<ol>
<li id="fn-armv6-ios-libraries-f-word">
<p>do not think I am too prude to be spelling out the f-word here; I am just saving f-bombs on this blog for when they are really worth it<a href="#fnr-armv6-ios-libraries-f-word">&#8617;</a></p>
</li>
</ol>
<br />Filed under: <a href='http://wanderingcoder.net/category/programming/'>Programming</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wanderingcoder.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wanderingcoder.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wanderingcoder.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wanderingcoder.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wanderingcoder.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wanderingcoder.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wanderingcoder.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wanderingcoder.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wanderingcoder.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wanderingcoder.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wanderingcoder.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wanderingcoder.wordpress.com/409/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wanderingcoder.wordpress.com/409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wanderingcoder.wordpress.com/409/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=409&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wanderingcoder.net/2012/05/11/armv6-ios-libraries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74aa65bb65caff74266756ff9ca40192?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wandering coder</media:title>
		</media:content>
	</item>
		<item>
		<title>A few things I would have liked to read about in John Siracusa’s Lion review</title>
		<link>http://wanderingcoder.net/2012/04/02/complements-10-7-review/</link>
		<comments>http://wanderingcoder.net/2012/04/02/complements-10-7-review/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 21:47:20 +0000</pubDate>
		<dc:creator>Pierre Lebeaupin</dc:creator>
				<category><![CDATA[Mac Community]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">https://wanderingcoder.wordpress.com/?p=402</guid>
		<description><![CDATA[Yesterday we saw a few things that John Siracusa didn’t mention in his Snow Leopard review but that I think could have been in talked about in there. Today we will do the same with his Lion review. The same disclaimer applies: John can’t know everything or mention everything, so do not construe anything I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=402&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://wanderingcoder.net/2012/04/01/complements-10-6-review/">Yesterday</a> we saw a few things that John Siracusa didn’t mention in his Snow Leopard review but that I think could have been in talked about in there. Today we will do the same with his <a href="http://arstechnica.com/apple/reviews/2011/07/mac-os-x-10-7.ars">Lion review</a>.</p>
<p>The same disclaimer applies: John can’t know everything or mention everything, so do not construe anything I say here as being any sort of criticism of his work, much to the contrary in fact.</p>
<p>First, since Lion requires a 64-bit Mac, I was wondering whether built-in executables actually were 64-bit only, as it would cut short any attempt to run this release of Mac OS X on anything older than its baseline requirements (some earlier releases of Mac OS X could be massaged to do so, to an extent). As it turns out, most executables do have a 32-bit slice, with the exception however of the Finder, which therefore prevents Lion from meaningfully running on a 32-bit machine.</p>
<p>Then, the specific system requirements for AirDrop made me wonder what was the deal here, and whether there was any relationship with Wi-Fi Direct. Unfortunately, I do not know much here (besides that there is indeed a relation), so John covering this would have been all the more welcome. Ah well.</p>
<p>The addition of the AVFoundation APIs (originally released on iOS) to Mac OS X raises an important question that I haven’t seen addressed: what about QTKit? Does it turn out not to be the way forward (even though QTKit is pretty recent), or are they meant to integrate, or is QTKit more for a certain class of needs and AVFoundation for others, or something else altogether? I have no idea, and that’s one of the of the first things (admittedly, as an iOS multimedia app developer, I am a bit biased) I wanted to know. Maybe in the next review John will make a return to covering video technologies at length…</p>
<p>Lastly, I’ve been very intrigued by the rise of SSDs (though I don’t use one myself) and the impact on how storage devices are abstracted, and so a word about Lion support for <a href="http://www.anandtech.com/show/2738/10">TRIM</a> would have been nice. Apparently Apple is quietly and selectively enabling it for some drives, but this comes from sources which aren’t very authoritative, while on the other hand with John this would have been coming, not from the horse’s mouth, but pretty much the next best thing.</p>
<br />Filed under: <a href='http://wanderingcoder.net/category/mac-community/'>Mac Community</a>, <a href='http://wanderingcoder.net/category/programming/'>Programming</a>, <a href='http://wanderingcoder.net/category/technology/'>Technology</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wanderingcoder.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wanderingcoder.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wanderingcoder.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wanderingcoder.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wanderingcoder.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wanderingcoder.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wanderingcoder.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wanderingcoder.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wanderingcoder.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wanderingcoder.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wanderingcoder.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wanderingcoder.wordpress.com/402/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wanderingcoder.wordpress.com/402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wanderingcoder.wordpress.com/402/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=402&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wanderingcoder.net/2012/04/02/complements-10-7-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74aa65bb65caff74266756ff9ca40192?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wandering coder</media:title>
		</media:content>
	</item>
		<item>
		<title>Make your site shine in lynx (for some value of “shine”)</title>
		<link>http://wanderingcoder.net/2012/04/02/website-lynx/</link>
		<comments>http://wanderingcoder.net/2012/04/02/website-lynx/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 20:24:24 +0000</pubDate>
		<dc:creator>Pierre Lebeaupin</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">https://wanderingcoder.wordpress.com/?p=396</guid>
		<description><![CDATA[Yesterday I presented my findings about the Wii browser. Today we shall do the same with Lynx. Lynx is a text-mode browser which renders on terminals. While it will work on a VT-100, it will greatly benefit from a color terminal. I have found Lynx to be useful when browsing the web from low-bandwidth and/or [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=396&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://wanderingcoder.net/2012/04/01/website-wii/">Yesterday</a> I presented my findings about the Wii browser. Today we shall do the same with Lynx.</p>
<p><a href="http://freecode.com/projects/lynx">Lynx</a> is a text-mode browser which renders on terminals. While it will work on a VT-100, it will greatly benefit from a color terminal. I have found Lynx to be useful when browsing the web from low-bandwidth and/or high-latency settings. For instance, from my student room in a few occasions getting at the wider web would fail, but I could connect to school machines just fine, so I logged by ssh to my school account. Unfortunately, while I could tunnel an X window connection a graphical browser used in such a way was pretty much unusable, but Lynx worked very well.</p>
<p>At this point I need to note that I am not doing web design by any stretch, rather I try to make sure my writing can be read without hassle on such a target.</p>
<p>So first, Lynx has a number of limitations coming from the display device. For one, there is only one font, determined by the terminal or terminal emulator, and it’s not possible for Lynx to change it. Furthermore, font rendering is pretty primitive, don’t expect proportional text, varying font sizes or (God forbid) kerning or ligatures. There is no italics either, though Lynx will try and make sure italics and bold are highlighted in some way through the use of color, the same goes for &lt;code&gt;. The same way, in order to emphasize &lt;h#&gt;, Lynx renders them flush to the left, while paragraphs are indented.</p>
<p>Lynx is also Unicode-aware and will understand and convert between the different encodings and render to UTF-8 if the terminal supports it (which is common for terminal emulators nowadays). So don’t get the impression that text-mode and terminal mean straight quotes and simple hyphens. All in all, despite the limitations Lynx will render your text and at least the meaning of your text formatting as best as it can.</p>
<p>Besides your text itself, however, it is important to remember that Lynx is a text-mode browser. Besides no images (so don’t forget the alt text!), this means it will not attempt to interpret your site layout and try and render it with box drawing characters or anything of the sort; instead, your text will be rendered in the order it appears in the HTML source, so if you have a side column (like navigation) whose content is after the main writing in the HTML source, it will appear after your writing in Lynx (which may be what you want). This also means that you should avoid having too much navigation boilerplate at the top: what appears as an unobtrusive 30 pixel high row of buttons/menus in a graphical browser will show as a laundry list of links, with menus unrolled, that the user has to scroll through at the start of every single page.</p>
<p>Also, Lynx will render your content as white text on black, and will not try to apply your color scheme. Lynx seems to ignore any styling information, this means you need true separation of content and presentation; for instance the boxes I use around additions I make later on to a post do not render at all and this information is lost (it’s not too bad in this case), so try and avoid such constructs. Lynx does not support Javascript either.</p>
<p>The user interacts entirely with the keyboard; it’s pretty spartan, but efficient: base commands are space/b to scroll down/up a screenful of text from a page, up/down arrows to navigate links, right arrow to follow a link, left arrow for back (a development tip: you do ctrl-R to reload and refresh the page). Some site navigation options, especially if they are after the content, may not be as discoverable for the user as on a graphical browser, on the other hand users will gladly search, so make sure you have a search box at the top, clearly marked (with text!), they will take it from there.</p>
<p>In the end, don’t neglect Lynx, you might not think of it as useful, until the day you need to check the content a site serves when seen from a machine on which you happen to have a ssh account…</p>
<br />Filed under: <a href='http://wanderingcoder.net/category/technology/'>Technology</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wanderingcoder.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wanderingcoder.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wanderingcoder.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wanderingcoder.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wanderingcoder.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wanderingcoder.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wanderingcoder.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wanderingcoder.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wanderingcoder.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wanderingcoder.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wanderingcoder.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wanderingcoder.wordpress.com/396/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wanderingcoder.wordpress.com/396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wanderingcoder.wordpress.com/396/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=396&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wanderingcoder.net/2012/04/02/website-lynx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74aa65bb65caff74266756ff9ca40192?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wandering coder</media:title>
		</media:content>
	</item>
		<item>
		<title>A few complements to John Siracusa’s Snow Leopard review</title>
		<link>http://wanderingcoder.net/2012/04/01/complements-10-6-review/</link>
		<comments>http://wanderingcoder.net/2012/04/01/complements-10-6-review/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 14:23:48 +0000</pubDate>
		<dc:creator>Pierre Lebeaupin</dc:creator>
				<category><![CDATA[Mac Community]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">https://wanderingcoder.wordpress.com/?p=382</guid>
		<description><![CDATA[I always read John Siracusa’s review of the latest Mac OS X release with great interest, and he always delivers. Such is the case again with his review of Mac OS X Snow Leopard, which is of particular interest as for this release Apple teased only “one new feature” (Microsoft Exchange support), and John does [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=382&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I always read <a href="http://arstechnica.com/author/john-siracusa/">John Siracusa’s</a> review of the latest Mac OS X release with great interest, and he always delivers. Such is the case again <a href="http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars">with his review of Mac OS X Snow Leopard</a>, which is of particular interest as for this release Apple teased only “one new feature” (Microsoft Exchange support), and John does a bang up job showing the other, non-obvious new stuff in this release (as obviously the guys writing Mac OS X did not just stop working for nearly two years).</p>
<p>That being said, there are a few things that I either heard about before, or learned about afterwards, that I wish he would have covered in the review. This isn’t necessarily a reproof of his review, as he has to make choices as to what he covers, and he can’t be aware of everything anyway. Nevertheless, here are a few things I wish I could have read about in his review.</p>
<h3>QuickTime X</h3>
<p>John does of course <a href="http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/6">cover</a> QuickTime X, but there is some more interesting stuff I found out about it.</p>
<p>First, the offloading mechanism he describes, where videos that QuickTime X cannot handle are played in a QTKitServer process, is not sufficient for all cases: there are videos that the new QuickTime Player app cannot even handle and have to be opened by QuickTime Player 7. This is why, when you install QuickTime Player 7 (which is an optional install), video files become owned by a “QuickTime Player Launcher” app (which lives inside QuickTime Player 7), and whenever you open a video this app dispatches the video to the new QuickTime Player, or to QuickTime Player 7 if the former cannot handle it. It’s safe to say that Apple has you covered for this transition.</p>
<p>Second, another feature not supported by QuickTime X at this time is video orientation, which is surprising since it is used by the video recording feature of the iPhone 3GS; as a result, if you have videos recorded in tallscreen from your iPhone, the new QuickTime Player will play them rotated 90°.</p>
<p>Third, contrary to what he implies in <a href="http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/5">page 5</a>: “the most significant new 64-bit-only API is QuickTime X”, 32-bit apps can use the QuickTime X engine; indeed I know of a bug in the traditional QuickTime playback engine, which I can reproduce easily in QuickTime Player 7, but cannot with the new QuickTime Player, whether it is running in 32 or 64-bit mode.</p>
<h3>libcache</h3>
<p><a href="https://developer.apple.com/library/mac/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_6.html#//apple_ref/doc/uid/TP40008898-SW18">libcache</a> is an interesting new functionality from the lower levels of Mac OS X. Back in the days of classic MacOS, memory had to be much more explicitly managed, and one of the ways it was done was with purgeable memory buffers which could be freed by the operating system if it needed the memory; a common pattern was loading data from a file in such a buffer, if when coming back to it the application found the data still there, all the better, otherwise it would simply allocate the buffer again and reload the data from disk. The Mac OS X virtual memory system and memory-mapped files advantageously replace this pattern and purgeable buffers are never purged on Mac OS X. However, a use case for which there was no longer a solution is the following: what about data which is computed from other data and cheaper to recompute than to save then reload from disk? An application willing to cache this data either doesn’t, and wastes performance recomputing it each time, or keeps it in memory, and if this data gets paged out to disk when the application then tries to use it again the virtual memory system wastes time reloading it from the pagefile as the application could have recomputed it more quickly instead.</p>
<p>Enter libcache. With libcache programmers can attach data to a cache object and libcache will call a release callback on the data object if memory needs require it. This functionality is also available at the Foundation level, and Foundation also provides an equivalent of the purgeable buffers of old with <a href="https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSPurgeableData_Class/Reference/Reference.html">NSPurgeableData</a>.</p>
<p>This is not too frequent but still a pattern I see with Mac OS X: it generally introduced significantly easier ways of doing common operations, replacing mechanisms from classic MacOS which needed much more manual management, but some special use cases ended up not being well-served by the new Mac OS X way, and Mac OS X ends up rediscovering and supporting these some time later. Grand Central Dispatch, interestingly, is the exact converse: a massively simpler way to leverage functionality (here, multicore processing) that will ensure this functionality will end up being actually used in much more software, improving performance and user experience across the board.</p>
<p>Tomorrow, <a href="http://wanderingcoder.net/2012/04/02/complements-10-7-review/">we’ll see a few more things I wanted to read about in John Siracusa’s Lion review</a>.</p>
<br />Filed under: <a href='http://wanderingcoder.net/category/mac-community/'>Mac Community</a>, <a href='http://wanderingcoder.net/category/programming/'>Programming</a>, <a href='http://wanderingcoder.net/category/technology/'>Technology</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wanderingcoder.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wanderingcoder.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wanderingcoder.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wanderingcoder.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wanderingcoder.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wanderingcoder.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wanderingcoder.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wanderingcoder.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wanderingcoder.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wanderingcoder.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wanderingcoder.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wanderingcoder.wordpress.com/382/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wanderingcoder.wordpress.com/382/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wanderingcoder.wordpress.com/382/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=382&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wanderingcoder.net/2012/04/01/complements-10-6-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74aa65bb65caff74266756ff9ca40192?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wandering coder</media:title>
		</media:content>
	</item>
		<item>
		<title>Optimizing your website for the Wii</title>
		<link>http://wanderingcoder.net/2012/04/01/website-wii/</link>
		<comments>http://wanderingcoder.net/2012/04/01/website-wii/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 08:30:01 +0000</pubDate>
		<dc:creator>Pierre Lebeaupin</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">https://wanderingcoder.wordpress.com/?p=376</guid>
		<description><![CDATA[I got myself a Wii last year, and in the process of trying to optimize this blog for it (yes, the Wii has a browser), I learned a number of things that I think will be interesting to share with you… The Device I hardly need to introduce it, but here goes: the Wii is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=376&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I got myself a Wii last year, and in the process of trying to optimize this blog for it (yes, the Wii has a browser), I learned a number of things that I think will be interesting to share with you…</p>
<h3>The Device</h3>
<p>I hardly need to introduce it, but here goes: the Wii is a home game console from Nintendo whose main interaction mechanism is a combination gamepad, light gun and motion sensor called the Wiimote. A nice thing Nintendo has in common with Apple is that they are not afraid to try and experiment with new user interaction mechanisms, and besides these games where the Wiimote was very well used, it’s also a pretty good way to browse the web.</p>
<p>Don’t dismiss the Wii as a web machine. It has sold a ton of units and (more importantly) done so in plenty of non-techy homes where you couldn’t find a PC, Mac or iPad. That doesn’t necessarily translate into an audience, but that’s got to count for something, right?</p>
<h3>The Browser</h3>
<p>The Wii browser is “Opera-powered”, in other words it’s running some mobile/embedded version of <a href="http://www.opera.com/">Opera</a>. While Opera is a minor browser on the desktop, Opera is a major player in embedded and mobile, providing customized variants of its browser to be preinstalled in a number of devices; Opera is estimated to have its software preinstalled on more than a hundred million devices sold per year</p>
<p>The browser used be a (cheap) paying option, but it’s now free; the user just has to get it in the store for 0 points and it will install as a channel, directly available when the Wii is launched. As we’ll see, the Wii browser is quite good, with a few caveats. Note that the browser is not <a href="http://media.opera.com/media/b2b/Opera_Mini_PS.pdf">Opera Mini (PDF)</a> (I’ve always liked <a href="http://daringfireball.net/2008/11/opera_app_store">how John describes it</a>), as websites do see the IP of my router (and not that of the proxy).</p>
<h3>The Display</h3>
<p>While the Wii can display over a TV (or computer display as I do, thanks to the <a href="http://www.neoya.com/">Wii2HDMI</a>) of any size, at best the resolution will be 480p, and this has quite an impact, in particular on text legibility.</p>
<h3>The Outcome</h3>
<p>Before I go any further, let me add the caveat that what I do here is not so much web design as it is “making sure my writing displays correctly with a suitable user experience”. With that in mind, here is what I found out.</p>
<h4>Typefaces</h4>
<p>One of the “joys” of web design has always been the differing sets of typefaces available depending on the target OS; and while there are correspondences (like the usual Helvetica/Arial, Geneva/Verdana, etc.) some typefaces in Windows have no Mac equivalent, and the converse is true as well. But web designers have always been able to rely on the so-called “web safe fonts”, right? Well… Imagine a platform that would not have all these typefaces. No Helvetica, or anything of the sort; but it goes further, there is no Courier or equivalent, you read that right, no Courier. And I hear you thinking, that can’t be, this is pretty much the last resort typeface, but that’s right: there is no Times either.</p>
<p>The Wii browser only has one typeface, and it’s not any of the web safe ones.</p>
<p>This is disappointing, but understandable when you consider the Wii is pretty much an embedded device, with limited memory and permanent storage. Remember that moderns fonts, especially their cache, take quite a bit of memory; and add to this that the Wii has to also embed at least one Japanese/Chinese font. On the other hand, this means there is no need to worry about making sure to pick the right typeface or add it in the fallback list, as whatever you do that typeface will be used instead anyway. Well, I need to mention that image replacement does work, as well as fonts rendered with Flash (more on Flash later); web fonts do not work. Also, the Wii browser typeface does have bold, but <em>no italics</em>: yes, this means your &lt;em&gt; inflections are lost; to me this is a grave sin, much worse than the lack of alternative fonts. In a &lt;pre&gt; the spacing is adjusted so that the text is monospaced (though not in a &lt;code&gt;); it looks a bit funky, but e.g. structure of ASCII art is preserved.</p>
<p>This typeface is a pretty legible sans-serif screen font, nothing special. A particularly recognizable characteristic of this font is the not-quite-horizontal bar in the lowercase “e”.</p>
<h4>Legibility</h4>
<p>Given the resolution the Wii supports, when it shows a page at full width the text is pretty much illegible, so like the iPhone the Wii renders a page in a viewport (800 pixels wide for the Wii) and allows the user to zoom inside that area: the user does so by way of +/- buttons on the Wiimote; this is not as fun as pinch-to-zoom, but very easy and discoverable. The problem however is when text runs to the entire browser width, in which case the user has no choice but to pan left and right (which he does with the directional pad) because he can’t have the beginning and end of a line on screen at the same time (I’m looking at you, <a href="http://ocremix.org/remix/OCR02388/">OC ReMix</a>). Fortunately, having too long lines is a bad idea in the first place as it makes it difficult to find the beginning of the next line, so blog themes either have a fixed width with a reasonable width like 500 pixels maximum, or have one or two side columns which reduce the main column width to something that can comfortably be zoomed to, and are therefore already suitable. Still, something to keep in mind.</p>
<p>Some sites direct the Wii browser to their mobile version which is a bad idea (at least for the examples I’ve seen), as the viewport remains 800 pixels wide (I have not investigated to know whether it is actually possible for sites to change the viewport of the Wii browser), and as the text runs to the full width, this mobile site is less usable on the Wii than the full site.</p>
<p>Depending on the display, it may be more or less comfortable for the user to read text for a long time, but from a distance of 3 meters of the computer display the Wii was displaying to, I could read quite a bit without being tired.</p>
<h4>Layout</h4>
<p>The Wii browser support for CSS is very good; I’m no CSS buff, but every site I could come across rendered correctly (and it’s quite unlikely many of them took this particular browser into account), so CSS support must be at least on par with the current lowest common denominator, which is nothing to sneeze at on such a device. So everything should just work, and as far as I can tell in this area you shouldn’t need to worry about the Wii if you already take IE 6 or 7, Safari, Firefox, Chrome and Opera into account.</p>
<h4>Navigation</h4>
<p>In the Wii browser the user can click links by pointing the Wiimote at the screen like a light gun, where the location pointed to will be represented by a hand; so yes, in the Wii browser there is a pointer, and hover-based interaction will technically work. I say “technically” because the accuracy isn’t great and in particular the pointer shakes a lot, so the user can easily hover out and “lose” a menu he was trying to drill down into, so don’t rely on hover-based navigation.</p>
<p>Text can be input with an on-screen keyboard, though it is tedious and error-prone, due to the shaking. Users will find it easier to navigate in subcategories to find what they want rather than input a search term, and don’t expect them to ever leave a comment.</p>
<h4>Miscellanea</h4>
<p>The Wii browser has Flash support, including video and sound, interestingly enough. I hear it’s Flash Lite, and likely corresponds to some older version of Flash, but it works if you don’t ask too much of it. For one, in most sites which rely on Flash for everything including navigation, I quickly got “out of memory” errors (embedded device, remember), at which point you can only try and reload the page (which will result in the same error again), so these sites are literally unusable on the Wii. Second, while games do work, in a way, don’t think you can do an end run around Nintendo Wii certification/WiiWare with Flash games, as performance is horrible for anything moderately complex. All that said, it will render ads, YouTube videos, Twitter and other widgets, text for Flash text replacement, it will play simple games in real time, and you can watch <a href="http://homestarrunner.com/">Homestar Runner</a> to your heart’s content.</p>
<p>One can also connect a USB keyboard to the Wii and use it for text input in the browser; I can use my Apple keyboard on the Wii without problem. More interestingly, key press events do reach Flash and Javascript (which is more than I can say for the iPad, where you can use a Bluetooth keyboard but Javascript can’t get key press events, the keyboard is reserved for text input), for instance this allows playing <a href="http://www.poparcade.net/game/856/Light-Bot.html">Light Bot</a>, which is entirely pointer-based except you need to hit space between each level… This is only of limited interest, as users with access to a keyboard likely have access to a computer in the first place.</p>
<p>Since there is no filesystem, users won’t be able to download any file. The browser is not even capable of just playing an mp3 file put for download, so use Flash for audio and video media. The browser cannot read PDFs either; I don’t think it can load anything other than HTML pages and images files.</p>
<h3>So… is it worth it?</h3>
<p>Is the Wii browser worth taking into account? It has issues, but it is quite modern and capable by most aspects, so it’s at least worth checking if your site renders correctly in it and fixing any obvious problem. Then further work can be justified depending on your audience</p>
<p>Tomorrow, <a href="http://wanderingcoder.net/2012/04/02/website-lynx/">we’ll see how to make your site shine in Lynx</a>.</p>
<br />Filed under: <a href='http://wanderingcoder.net/category/technology/'>Technology</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wanderingcoder.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wanderingcoder.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wanderingcoder.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wanderingcoder.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wanderingcoder.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wanderingcoder.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wanderingcoder.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wanderingcoder.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wanderingcoder.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wanderingcoder.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wanderingcoder.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wanderingcoder.wordpress.com/376/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wanderingcoder.wordpress.com/376/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wanderingcoder.wordpress.com/376/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=376&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wanderingcoder.net/2012/04/01/website-wii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74aa65bb65caff74266756ff9ca40192?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wandering coder</media:title>
		</media:content>
	</item>
		<item>
		<title>Developer ID might not seem restrictive, but it is</title>
		<link>http://wanderingcoder.net/2012/03/07/developer-id-restrictive/</link>
		<comments>http://wanderingcoder.net/2012/03/07/developer-id-restrictive/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 02:04:47 +0000</pubDate>
		<dc:creator>Pierre Lebeaupin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">https://wanderingcoder.wordpress.com/?p=365</guid>
		<description><![CDATA[I need to talk about Gatekeeper and Developer ID. In short, I am very uncomfortable with this previewed security feature of Mountain Lion. Apple is trying to assure that users are only going to be safer and that developers are still going to be able to do business as usual, but the Mac ecosystem is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=365&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I need to talk about <a href="http://www.apple.com/macosx/mountain-lion/security.html">Gatekeeper and Developer ID</a>.</p>
<p>In short, I am very uncomfortable with this previewed security feature of Mountain Lion. Apple is trying to assure that users are only going to be safer and that developers are still going to be able to do business as usual, but the Mac ecosystem is not limited to these two parties and this ignores pretty much everyone else: for these people Gatekeeper is going to be a problem. Enough so to make me consider switching.</p>
<p>I don’t mean to say it’s all bad, as Apple is set to allow more at the same time as it allows less. Indeed, with Developer ID Apple is clearly undertaking better support of apps from outside the Mac App Store, if only because they will have to maintain this system going forward, and I can only hope this support will improve in other areas (such as distribution: disk images are long past cutting edge). But while Apple gives with one hand, it takes away with the other, as Mountain Lion will by default (at least as of the current betas, though that seems unlikely to change) reject unsigned apps and apps signed by certificates other than Mac App Store and Developer ID ones; of course most people will not change that default, and so you will have trouble getting these people to run your code unless you get at least a Developer ID from Apple, and while better than requiring you to go through the Mac App Store this requirement is quite restrictive too.</p>
<p>The matter is not that with Developer ID apps will now be exposed to being blacklisted by Apple; honestly, speaking as a developer I personally do not mind this bit of accountability. Maybe there are going to be issues with this power now entrusted to the hands of Apple, such as the possibility of authorities (through executive branch bullying, or with a proper court order) asking Apple to neutralize an app perceived as illegal, but if this ever happens I believe the first incidents will cause this eventuality to be properly restricted by law.</p>
<p>No, the matter, as I wrote to Wil Shipley in an email after <a href="http://blog.wilshipley.com/2011/11/real-security-in-mac-os-x-requires.html">his proposal</a>, is that many people who are important to the Mac platform are going to be inconvenienced with this, as getting a Developer ID requires a Mac Developer Program membership.</p>
<ul>
<li>
<p>Sysadmins/IT people, to begin with, often need to deploy scripts, and either those don’t need to be signed, and they become the new malware vectors, or they do (Apple could define an xattr that would store the signature for a script) and then any company deploying Macs needs to enter the Mac Developer Program and manage a Developer ID that IT needs to be able to access day to day (that is, not just for releases, like in a software company) and so could leak, just so that the company can service its own Macs internally.</p>
</li>
<li>
<p>Then we have people using open-source tools that Apple doesn’t provide, such as lynx, ffmpeg, httrack, mercurial, etc., and who likely get them from projects like MacPorts; maybe we have an exception for executables that were built on the same machine, but how is it enforced then?</p>
</li>
<li>
<p>Student developers have historically been very important to the Mac platform, if only because many current Mac developers started out as such. If entering the Mac Developer Program is required to distribute Mac apps in the future, it’s a threshold that many will not clear, and as a result they will not get precious feedback from other people using their code, or worse they will not choose Mac development as a career as they could have if they had been encouraged to do so by people using their software (for instance, <a href="http://www.spiderwebsoftware.com/misc/jvogel.html">Jeff Vogel</a> wasn’t planning on making Mac games as a career, but he quit grad school when Exile started becoming popular). At 99$ (per year), it seems silly to consider the cost of the Mac Developer Program as an obstacle, especially when compared to the cost of a Mac, but you have to consider the Mac likely benefitted from a student discount and was possibly entirely paid by the family; not so for the Mac Developer Program. Regardless, any extra expense will, rationally or not, cause it not to be taken by a significant portion of the people who would have otherwise tried it, even if it would have paid for itself eventually.</p>
</li>
<li>
<p>Many users will tinker with their apps for perfectly legitimate reasons, for instance in order to localize it and then submit the localization to the author, or in the case of games to create alternate scenarios or complete mods. It’s something that I am particularly sensitive to, as for a long time I have both enjoyed other’s people’s mods and conversely tinkered myself and shared with others: I have created mods, documented the formats to help others create mods, extracted data from the game files, gave tips and tricks and development feedback on other people’s in-progress mods, I was even at some point in charge of approving mods for a game to the official mods repository, and I created tools to help develop mods (more on that later). The user modding tradition is very strong in the <a href="http://www.ambrosiasw.com/">Ambrosia Software</a> games community, going back to Maelstrom nearly 20 years ago, and that’s merely the one community I am most familiar with. However, tinkering in such ways typically breaks the app signature; an app with an invalid signature will currently run on Lion (I know it if only because my Dock currently has an invalid signature), but it will likely change with Mountain Lion as otherwise Gatekeeper would be pointless (an important attack to protect against is legitimate apps that have been modified to insert a malicious payload and then redistributed). So we will have to rely on developers excluding files that could be desirable for users to tinker with from the signature seal… well, except that the developer will then need to make sure the app cannot be compromised if the files outside the seal are, and I’m pretty sure it’s impossible to do so for nibs for instance, so app developers will not be able to simply leave the nibs out of the seal so that users may localize them; they will need to roll out systems like <a href="http://blog.wilshipley.com/2009/10/pimp-my-code-part-17-lost-in.html">the one Wil Shipley developed for localizations</a>, completely out of the realm of Apple-provided tooling.</p>
</li>
<li>
<p>Power users/budding developers will often create small programs whose sole purpose is to help users of a main program (typically a game, but not always), for instance by interpreting some files and/or performing some useful calculations; they typically develop it for themselves, and share it for free with other users in the community of the main program. It’s something I have done myself, again for Ambrosia games, and it’s a very instructive experience: you start with an already determined problem, file format, etc., so you don’t have to invent everything from scratch which often intimidates budding developers. However, if it is required to register in the Mac Developer Program to distribute those then power users will keep those to themselves and they won’t benefit from the feedback, and other users won’t benefit from these tools.</p>
</li>
</ul>
<p>(Note that Gatekeeper is currently tied to the quarantine system, and so in that configuration some of the problems I mentioned do not currently apply, but let’s be realistic: it won’t remain the case forever, if only so that Apple can have the possibility of neutralizing rogue apps even after they have been launched once.)</p>
<p>In fact, a common theme here is that of future developers. Focusing solely on users and app developers ignores the fact that Mac application developers don’t become so overnight, but instead typically start experimenting on their spare time, in an important intermediate step before going fully professional; it <em>is</em> possible to become an app developer without this step, but then the developer won’t have had the practice he could have gotten by experimenting before he goes pro. Or worse, he will have experimented on Windows, Linux, or the web, and gotten exactly the wrong lessons for making Mac applications—if he decides he wants to target the Mac at all in the end.</p>
<p>Because of my history, I care a lot about this matter, especially the last two examples I gave, and so I swore that if Apple were to require code to be signed by an authority that ultimately derives from Apple in order to run on the Mac, such that one would have to pay Apple for the privilege to distribute one’s own Mac software (as would be the case with Developer ID), then I would switch away from the Mac. But here Apple threw me a curveball, as it is the case by default, but users can choose to allow everything, but should that matter, since the default is what most people will ever know? Argh! I don’t know what to think.</p>
<p>In fact, at the same time I am worrying about the security of the whole system and wish for it to be properly secure: I know that any system that allows unsigned code to run is subject to <a href="http://blogs.msdn.com/b/larryosterman/archive/2005/07/12/438284.aspx">the dancing bunnies problem</a>; and maybe the two are in fact irreconcilable and it is reality itself I am having a problem with. I don’t know. Maybe Apple could allow some unsigned apps to run by default, on condition they have practically all the sandboxing restrictions to limit their impact. The only thing is, in order to be able to do anything interesting, these apps would at least have to have access to files given to them, and even that, combined with some social engineering, would be enough for malware to do harm, as users likely won’t treat these unsigned apps differently from regular desktop apps, which they consider “safe”. Maybe the only viable solution for distribution of tinkerer apps are as web apps (I hear there is work going on to allow those to access user files); I don’t like that very much (e.g. JavaScript is not very good to parse arbitrary files), but at the same time users do tend to take web apps with more caution than they take desktop apps (at least as far as giving them files goes, I hope), and any alternate “hyper sandboxed” system that would be introduced would have to compensate the 15+ years head start the web has in setting user expectations.</p>
<p>The same way, the very same cost of the Mac Developer Program which is a problematic threshold for many is also the speed bump that will make it economically unviable for a malware distributor who just had its certificate revoked to get a new one again and again.</p>
<p>This is why, paradoxically, I wish for iOS to take over the desktop, as by then iOS will likely have gained the possibility to run unsigned apps, and users having had their expectations set by years of being able to use only (relatively) safe iOS App Store apps will see these unsigned apps differently than they do apps from the store.</p>
<p>Anyway, nothing that has been presented about Mountain Lion so far is final, and important details could change before release, so it’s no use getting too worked up based on the information we know today. But I am worried, very worried.</p>
<br />Filed under: <a href='http://wanderingcoder.net/category/programming/'>Programming</a>, <a href='http://wanderingcoder.net/category/technology/'>Technology</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wanderingcoder.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wanderingcoder.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wanderingcoder.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wanderingcoder.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wanderingcoder.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wanderingcoder.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wanderingcoder.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wanderingcoder.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wanderingcoder.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wanderingcoder.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wanderingcoder.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wanderingcoder.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wanderingcoder.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wanderingcoder.wordpress.com/365/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=365&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wanderingcoder.net/2012/03/07/developer-id-restrictive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74aa65bb65caff74266756ff9ca40192?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wandering coder</media:title>
		</media:content>
	</item>
		<item>
		<title>iOS lacks a document transfer system, as well</title>
		<link>http://wanderingcoder.net/2012/02/21/ios-document-transfer/</link>
		<comments>http://wanderingcoder.net/2012/02/21/ios-document-transfer/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 20:04:51 +0000</pubDate>
		<dc:creator>Pierre Lebeaupin</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">https://wanderingcoder.wordpress.com/?p=354</guid>
		<description><![CDATA[This is a follow-up of sorts to iOS lacks a document filing system, though it stands very well on its own. I’ve never bought into the Free Software movement premise that, if only for all software we used we had the freedom to get its source code, the freedom to modify it as much as [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=354&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>This is a follow-up of sorts to <a href="/2012/01/20/ios-document-filing/">iOS lacks a document filing system</a>, though it stands very well on its own.</em></p>
<p>I’ve never bought into the Free Software movement premise that, if only for all software we used we had the freedom to get its source code, the freedom to modify it as much as wanted, and the freedom to redistribute the modified version, then all would be good as we would be safe from investing in some system, then getting stuck with the vendor not providing the updates or bug fixes we want, without any recourse. I mean, this premise may be true, but in practice, while not always taken to these extremes this encourages software which is user-hostile and governed by the worst kind of meritocracies, so I am deeply skeptical the tradeoff is worth it for user-facing software.</p>
<p>However, I care a lot about a related matter, which is the transferability of documents (rather than source code). I consider it a fundamental freedom of the computer user that he be able to take the data he created out of the application he created it with, so that he may be able to use it with another application. This involves a number of things, in particular it’s better if the format is as simple as possible for the purpose, it’s better if it is documented, it’s better if the format has a clear steward for future evolutions, better yet if that steward is a standards body or consortium<sup><a name="fnr-ios-document-transfer-free-and-free"><a href="#fn-ios-document-transfer-free-and-free">1</a></a></sup>. But the most important capability the user needs to have is the ability to take the raw file out of the application that created it. It is necessary, none of the other capabilities make any sense without it, and even in the worst case (undocumented, overcomplicated format) it is often sufficient given enough developer effort, especially if the aim is to extract an important part of the data (e.g. text without the formatting). This is the freedom zero of user data. Plus, if the user has this last resort ability, the app will tend to make sure it is at least not too complicated to do so, so as to improve the experience.</p>
<p>But on iOS, the user may not have even that. An app is entirely free to never allow export of user data (and thanks to the sandbox, other apps are not even allowed to get at the internal storage as a last resort). Or it could only allow export of, say, the flattened image, while the working document with layers remains detained by the creating app. On the Mac, on the other hand, not only can the user get at the underlying storage, but if an app wants to allow its documents to be moved in space (to another machine), then it necessarily has to save them in files and therefore allow them to be moved to another universe (another app). Meanwhile, on iOS iCloud document storage actually makes the situation worse, because now an app can allow its documents to be moved in local space (another of the user’s devices) without exposing itself to having the documents moved to outer space (a device belonging to someone else) or to another universe.</p>
<p>The sandbox is bad enough already for document transferability; in order to compensate what Apple should have done from the moment the iPad was available is have a real system for an app to offer one of its documents for sharing, the system would then handle making an email out of it, offering it to another app, or putting it on iCloud, etc.; then Apple should have strongly recommended this system be used in place of any ad-hoc document sharing (e.g. the app manually creating an email with a document attached). You might say this is precisely the kind of generic cover-all solution Apple is trying to get rid of, but I never said it would have to be a user-visible system. Rather, there would be specific ways for the user to initiate the various transfers; then in order to get the document out of the app, the system would call a callback on the app for it to give the document file path, <em>without indicating what the system would be about to do with the document</em>. And the kicker: iCloud would exclusively rely on this callback for documents to be provided to it, without any other way for the app to take advantage of iCloud document storage. So to have the “iCloud” feature, the app would have to (truthfully) implement this callback, and therefore would have no choice but to also allow its documents to be shared or transferred in this case.</p>
<p>Ownership of your creations is one advantage native apps have and that Apple could play over web apps (where the situation is so appalling it’s not even funny), but Apple hasn’t made a good job in this area so far. I hope it will change, because it will only matter more and more going forward.</p>
<hr />
<ol>
<li id="fn-ios-document-transfer-free-and-free">
<p>The two (Free Software and Free Data) are not entirely unrelated, though they are not as related as open source advocates would like you to think: source code is often a poor documentation for the file format; conversely, some of the best formats by these criteria, such as the MPEG4 container format or PostScript, have come from the closed-source world.<a href="#fnr-ios-document-transfer-free-and-free">&#8617;</a></p>
</li>
</ol>
<br />Filed under: <a href='http://wanderingcoder.net/category/technology/'>Technology</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wanderingcoder.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wanderingcoder.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wanderingcoder.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wanderingcoder.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wanderingcoder.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wanderingcoder.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wanderingcoder.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wanderingcoder.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wanderingcoder.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wanderingcoder.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wanderingcoder.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wanderingcoder.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wanderingcoder.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wanderingcoder.wordpress.com/354/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=354&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wanderingcoder.net/2012/02/21/ios-document-transfer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74aa65bb65caff74266756ff9ca40192?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wandering coder</media:title>
		</media:content>
	</item>
		<item>
		<title>Goodbye, NXP Software</title>
		<link>http://wanderingcoder.net/2012/02/11/goodbye-nxp-software/</link>
		<comments>http://wanderingcoder.net/2012/02/11/goodbye-nxp-software/#comments</comments>
		<pubDate>Sat, 11 Feb 2012 00:05:12 +0000</pubDate>
		<dc:creator>Pierre Lebeaupin</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">https://wanderingcoder.wordpress.com/?p=342</guid>
		<description><![CDATA[For the last four years, starting before this blog even began, I have been working as a contractor programmer for NXP Software. Or rather had been, as the mission has now ended, effective 1st of January 2012. It was a difficult decision to take, and I will miss among other things the excellent office ambience, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=342&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For the last four years, starting before this blog even began, I have been working as a contractor programmer for <a href="http://software.nxp.com/">NXP Software</a>. Or rather had been, as the mission has now ended, effective 1st of January 2012. It was a difficult decision to take, and I will miss among other things the excellent office ambience, but I felt it was time for me to try other things, to see what’s out there, so to speak. After all, am I not the wandering coder?</p>
<p>I’ll always be thankful for everything I learned, and for the opportunities that have been offered to me while working there. Working at NXP Software was my first real job, and I couldn’t have asked for a better place to start at as people there have been understanding in the beginning when I clumsily transitioned to being a full-blown professional. I am also particularly thankful (among many other things) for the opportunity to go to WWDC 2010, where I learned a ton and which allowed me to meet people from the Apple community (not to mention visiting San Francisco and the bay area, even for a spell).</p>
<p>There are countless memories I’ll forever keep of the place, but the moment I’m most proud of would be the release of <a href="http://itunes.apple.com/fr/app/cinexplayer-best-way-to-enjoy/id384098375?mt=8">CineXplayer</a>, and in particular <a href="http://www.macworld.com/article/153251/2010/08/cinexplayer.html">its getting covered on Macworld</a>. Proud because it’s Macworld (and Dan Moren), of course, but also because of something unassumingly mentioned in the article. You see, in the CineXplayer project I was responsible for all engine development work (others handled the UI development), including a few things at the boundary such as video display and subtitle rendering; we did of course start out <a href="http://www.nxpsoftware.com/products/mediaplayer/">from an existing player engine</a>, and we got AVI/XviD support from ongoing development on that player (though we got a few finger cuts from that as we pretty much ended up doing the QA testing of the feature…), but interestingly when we started out this player engine had no support for scrubbing. None at all. It only supported asynchronous jumping, which couldn’t readily be used for scrubbing. And I thought: “This will not do.” and set out to implement scrubbing; some time later, it was done, and we shipped with it.</p>
<p>And so I am particularly proud of scrubbing in CineXplayer and its mention in Dan Moren’s article, not because it was particularly noticed but on the contrary because of the so modest mention it got: this means it did its job without being noticed. Indeed, rather than try and seek fifteen pixels of fame, programmers should take pride in doing things that Just Work™.</p>
<p>As I said, I wanted a change of scenery, and that is why I am still employed by <a href="http://www.groupe-sii.com/">SII</a> and I have started a new mission in <a href="http://www.cassidian.com">Cassidian</a> to work on developing professional mobile radio systems (think the kind of private mobile network used by public safety agencies like police and firefighters). Don’t worry, I am certainly not done developing for iOS or dispensing iOS knowledge and opinions here, as I will keep doing iOS stuff at home; I can’t promise anything will come out of it on the iOS App Store, but you’ll certainly be seeing blog posts about it.</p>
<p>And I know some people in NXP Software read this blog, so I say farewell to all my peeps at NXP Software, and don’t worry, I’ll drop by from time to time so you’ll be seeing me again, most likely…</p>
<br />Filed under: <a href='http://wanderingcoder.net/category/meta/'>Meta</a>, <a href='http://wanderingcoder.net/category/programming/'>Programming</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wanderingcoder.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wanderingcoder.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wanderingcoder.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wanderingcoder.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wanderingcoder.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wanderingcoder.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wanderingcoder.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wanderingcoder.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wanderingcoder.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wanderingcoder.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wanderingcoder.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wanderingcoder.wordpress.com/342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wanderingcoder.wordpress.com/342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wanderingcoder.wordpress.com/342/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=342&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wanderingcoder.net/2012/02/11/goodbye-nxp-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74aa65bb65caff74266756ff9ca40192?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wandering coder</media:title>
		</media:content>
	</item>
		<item>
		<title>iOS lacks a document filing system</title>
		<link>http://wanderingcoder.net/2012/01/20/ios-document-filing/</link>
		<comments>http://wanderingcoder.net/2012/01/20/ios-document-filing/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 22:37:55 +0000</pubDate>
		<dc:creator>Pierre Lebeaupin</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">https://wanderingcoder.wordpress.com/?p=332</guid>
		<description><![CDATA[Since the beginning of 2010 when the iPad was released, there has been no end of debates over whether it is suitable for creating content, or whether it is primarily a “content consumption” (ugh) device (as if the choices were thus limited…). I am resolutely of the opinion that the iPad is an easel that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=332&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Since the beginning of 2010 when the iPad was released, there has been no end of debates over whether it is suitable for creating content, or whether it is primarily a “content consumption” (ugh) device (as if the choices were thus limited…). I am resolutely of the opinion that the iPad is an easel that very much supports serious <a href="http://daringfireball.net/linked/2010/12/10/djay-for-ipad">creative endeavors</a> given the right environment.</p>
<p>I unfortunately had (as you may have noticed) to qualify that last statement. Besides a few colleagues at work, two examples of iPad-using people that I base this statement on are <a href="http://www.macworld.com/article/160610/2011/06/macalope_what_a_riot.html">the Macalope</a> and <a href="http://technologizer.com/2011/12/05/how-the-ipad-2-became-my-favorite-computer/">Harry McCracken</a>. And these examples have something in common: in all three cases, once the work is done, the documents are sent, handled, stored, etc. by either a corporate server, or a publishing CMS, or some other similar infrastructure. Here the iPad only needs to make a good job of storing the document for the time necessary to complete it; once done and sent, the document can even be removed from the device.</p>
<p>Let us contrast that with another situation. My father is a high school teacher; for the last 25+ years he has been working using computers, preparing teaching notes, transparent slides to project, diagrams, tests and their answers, student average note calculation documents, etc. on his Macs (and before that on an Apple ][e). He shares some of these with his colleagues (and back) and sometimes prints on school printers, so he is not working in complete isolation, but he cannot rely on a supporting infrastructure and has to ensure and organize storage of these teaching material documents himself. He will often need to update these when it’s time to teach the same subject one year later, because the test needs to be changed so that it’s not the exact same as last year, because the curriculum is changing this year, because the actual class experience of using them the previous year led him to think of improvements to make the explanation clearer, because this year he’s teaching a class with a different option so they have less hours of his course (but the same curriculum…), etc. Can you imagine him using solely an iPad, or even solely an imaginary iOS 5 notebook, to do so? I can’t. Let us enumerate the reasons:</p>
<ul>
<li>Sure, one can manage documents in, say, Pages. But can one manage hundreds of them? Even with search this is at best a chore, and it’s easy to feel lost as there is no spatial organization; and search could return irrelevant results and/or not find the intended document because of e.g. synonyms.</li>
<li>If one remembers a document, but not the app which was used to create it, it’s hard to find it again, as the system-wide search in iOS cannot search in third-party apps (at least it couldn’t when this feature was released in iPhone OS 3.0, and I am not aware of this having changed), so one has to search each and every app where this document could have been made.</li>
<li>In some cases, for a project for instance, it is necessary to group documents created by different apps: sometimes there is no single app that can manage all the different media for a single project. On iOS these documents can only exist segregated into their own apps with no way to logically group them.</li>
<li>If there is a screwup, as far as I am aware it is not possible to restore a single document from backup, in fact it does not seem possible to restore a single app from backup, only full device restores, which may not be practical as it likely means losing work done elsewhere.</li>
</ul>
<p>iOS needs a document filing system, badly.</p>
<p>The worst thing is, with the exception of file transfer in iTunes (which pretty much only shifts the issue to the computer, with some more overhead), the situation is the exact same as it was in iPhone OS 2.0 when third-party apps first became possible. iCloud solves exactly none of these problems: it is great to simplify working between your different devices, but it brings nothing to the single-device case. This has nothing to do with the hardware limitations of any iOS device, this is entirely the doing of the iOS software; in fact, while this is acceptable for the iPhone, I feel this gap already limits the potential of the iPad unnecessarily; and regardless of how you think it will happen (my take, which I will elaborate in a later post: Mac OS X is the new Classic), it is clear Apple has Big Plans for iOS, but it is hard to take iOS seriously for any device used for work if Apple hasn’t even shipped a first version of a document filing system, which is quite a design task and will require multiple iterations to get right for most people.</p>
<p>Now you may be wondering: does it really matter for working on iOS to depend a corporate, publishing, design studio, etc. infrastructure? Most people working on computers already work in the context of such an infrastructure. I think that yes, it does matter. Even if we admit that people working outside such an infrastructure are the exception rather than the rule, there are many of them, enough to prop up a competing platform (potentially the Mac) that would cater to their needs. Plus, sometimes such an infrastructure (e.g. in small businesses) may be unreliable, so it is a good idea to have a fallback. Moreover, it’s not really a good idea for Apple to make iOS dependent on such an infrastructure, as then Apple will not be able to control aspects of the experience it likely cares about, and will not be able to define, for instance, the modern notion of how to encapsulate user creations (I can imagine Apple getting past the concept of documents themselves and introducing something new), or how document typing information is represented. Whereas if iOS devices had a document filing system worthy of its name, but could also still be used in such an infrastructure as they can today, then Apple could define the rules and external infrastructure would follow the lead. Currently, iOS devices are more akin to terminals when it comes to working on them; not quite VT-100 or Chromebooks, but you get the idea.</p>
<p>When I see the absence of a user-visible traditional file system in iOS being lauded as some sort of brilliant new move, I’m scratching my head. It is a bold move, for sure, and not having something does represent accomplished work in the sense that it is a design decision, but honestly not having this feature is the easy part, creating a worthwhile replacement is the hard part, one that Apple has not shown even an interest in tackling. Moreover, the absence of a user-visible filesystem is nothing new. Indeed, back in the 80’s when computer GUIs were developed, two philosophies emerged for dealing with documents: a document-centric approach, where documents are at the center and applications are but tools which can each be used for a specific task on these documents, and an application-centric approach, where applications are the focus and documents only make sense within their context. The <a href="http://www.guidebookgallery.org/guis/lisa">Apple Lisa</a>, for instance, was document-centric: users would tear down from a stationery to create a document, which could then be operated on by tools. By contrast, the Macintosh (and everything it then inspired) was mostly application-centric. In this context, iOS merely is purely application-centric. Precedents of such systems exist, and include game consoles with memory cards for instance.</p>
<p>And was it really necessary to forego the filesystem in its entirety in the first place? Admittedly, it has become more and more complicated over the years, with documents being diluted by an ever increasing number of non-document files visible to the user, especially after the Internet and Web came to be. And, okay, even the Macintosh Finder at the origin did represent applications and system files along with user documents, and thus was not really a document filing system. However, was it really necessary to throw out the baby with the bathwater? It would have been feasible for iOS to feature a clean filesystem view with most everything invisible and various enhancements (like virtual folders and virtual filenames) so that it would only feature documents (in fact, I think the Mac OS X Finder in 2001 should have shown only the inside of the home folder, with applications launched from a Launchpad-like mechanism, but I guess a few things like the need to support Classic prevented that anyway). But maybe filesystems as users know them had truly become fatally tainted, and maybe it was indeed necessary to take a clean break from the past; in the end it doesn’t really matter either way, however it is not a good thing to forego something and put no successor for so long.</p>
<p>In the end, I am afraid Apple is not taking this aspect of the computing experience seriously, and is neglecting it. They ought to take it seriously, because it will matter, I think it will matter a lot in fact.</p>
<p>
<div style="border:1px solid black;width:90%;margin-left:auto;margin-right:auto;">
<div class="actasp" style="border:1px solid white;padding:1em;">I explored a related aspect of document management in a <a href="http://wanderingcoder.net/2012/02/21/ios-document-transfer/">followup</a> — February 21, 2012</div>
</div>
<div style="text-align:center;">
<h3>~ Reactions ~</h3>
</div>
<p><strong>Jesper</strong> (who, unbeknownst to me, had <a href="http://waffle.wootest.net/2010/11/18/redefinition/">already touched</a> some of these points, such as the specific notion of a document filing system) <a href="http://waffle.wootest.net/2012/01/22/ownership-and-access-control/">expands on the matter</a>, also theorizing why the iOS group makes iOS be that way.</p>
<p>Unfortunately my knowledge of Magyar is exactly zero (and Google Translate is a bit hit and miss), but I’m sure <strong>Benke Zsolt</strong> is saying <a href="http://wyctim.com/ios-fajlproblemak/">very interesting things</a>.</p>
<p>I am honored that <strong>Lukas Mathis</strong> would link to me, but if I am mentioning it as a reaction it is because of the <a href="http://ignorethecode.net/blog/2012/02/02/documents_in_ios/">slightly overstated, but pretty good comparison</a> he added.</p>
<br />Filed under: <a href='http://wanderingcoder.net/category/technology/'>Technology</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wanderingcoder.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wanderingcoder.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wanderingcoder.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wanderingcoder.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wanderingcoder.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wanderingcoder.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wanderingcoder.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wanderingcoder.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wanderingcoder.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wanderingcoder.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wanderingcoder.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wanderingcoder.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wanderingcoder.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wanderingcoder.wordpress.com/332/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wanderingcoder.net&#038;blog=12792354&#038;post=332&#038;subd=wanderingcoder&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wanderingcoder.net/2012/01/20/ios-document-filing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/74aa65bb65caff74266756ff9ca40192?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wandering coder</media:title>
		</media:content>
	</item>
	</channel>
</rss>
