<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US">
  <id>tag:deallocatedobjects.com,2005:/posts</id>
  <link rel="alternate" type="text/html" href="http://deallocatedobjects.com" />
  
  <title type="text">Deallocated Objects</title>
  <updated>2012-02-15T22:26:00-06:00</updated>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/deallocatedobjects" /><feedburner:info uri="deallocatedobjects" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><subtitle type="html">iOS, Mac OS X and Web application development, interface and interaction design with code snippets  and tips and tricks on building awesome stuff by Jake Marsh.</subtitle><entry>
    <id>tag:deallocatedobjects.com,2005:Post/44</id>
    <published>2012-02-15T22:26:00-06:00</published>
    <updated>2012-02-15T22:26:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/i5fyp7nidJ8/protect-your-users-privacy-with-dtshashedcontacts" />
    <title>Protect Your Users' Privacy With DTSHashedContacts</title>
    <content type="html">&lt;p&gt;As I'm sure many readers have heard, there has been &lt;a href="http://mclov.in/2012/02/08/path-uploads-your-entire-address-book-to-their-servers.html"&gt;some&lt;/a&gt; &lt;a href="http://blog.path.com/post/17274932484/we-are-sorry"&gt;public&lt;/a&gt; &lt;a href="http://www.macrumors.com/2012/02/15/congress-weighs-in-on-ios-apps-collecting-address-book-and-other-personal-data/"&gt;outcry&lt;/a&gt; lately on the subject of iOS apps accessing the Address Book contacts of a their users and then sending the whole lot of them off to their servers, to accomplish their "friend matching" features.&lt;/p&gt;&lt;p&gt;Many companies have &lt;a href="http://blog.path.com/post/17274932484/we-are-sorry"&gt;already&lt;/a&gt; &lt;a href="http://www.pcmag.com/article2/0,2817,2400154,00.asp"&gt;corrected&lt;/a&gt; the error in their ways, (partially), and &lt;a href="http://www.macrumors.com/2012/02/15/apple-to-require-explicit-permission-for-ios-apps-accessing-address-book-data/"&gt;even Apple has stated&lt;/a&gt; that a future iOS release will lock down Address Book access, in the same way that permission is required to access a user's geographic location now.&lt;/p&gt;&lt;p&gt;In the meantime however, if you'd like a quick, easy and safe way to build a "find my friends" type of feature into your app, I'd recommend looking at &lt;a href="https://github.com/crossforward/HashedContacts"&gt;&lt;code&gt;DTSHashedContacts&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;It's is a drop-in iOS library that provides a wrapper around the Address Book frameworks designed to ensure the privacy of user data. Before access is ever made to the Address Book the user will first be prompted for permission with a customizable &lt;code&gt;UIAlertView&lt;/code&gt; prompt. Once access is granted the library returns hashed tokens representing the user's private data rather than the data itself.&lt;/p&gt;&lt;p&gt;Here's what it looks like to use it:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;hashedContactsProvider&lt;/span&gt; &lt;span class="nl"&gt;emailTokensWithConfirmation:&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NSArray&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="c1"&gt;//When permission given&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nl"&gt;whenDeclined:&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="c1"&gt;//When permission denied&lt;/span&gt;
&lt;span class="p"&gt;}];&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://github.com/crossforward/HashedContacts"&gt;Read more about &lt;code&gt;DTSHashedContacts&lt;/code&gt; on Github&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/i5fyp7nidJ8" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/protect-your-users-privacy-with-dtshashedcontacts</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/43</id>
    <published>2012-02-11T13:24:00-06:00</published>
    <updated>2012-02-11T13:24:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/TLE8Apzs3vI/building-xcode-projects-from-the-command-line" />
    <title>Building Xcode Projects from the Command Line</title>
    <content type="html">&lt;p&gt;Building iOS and Mac projects from the command-line could be a lot easier to work with.&lt;/p&gt;&lt;p&gt;Hopefully this post will give you a couple ways to make that happen.&lt;/p&gt;&lt;p&gt;I wanna talk about two different little tools that help ease the process of scripting or working with Xcode projects from the command line.&lt;/p&gt;&lt;h3&gt;xcodebuild-rb&lt;/h3&gt;&lt;p&gt;&lt;a href="https://github.com/lukeredpath/xcodebuild-rb%5D"&gt;&lt;code&gt;xcodebuild-rb&lt;/code&gt;&lt;/a&gt; is a neat little ruby gem that lets you create a &lt;code&gt;Rakefile&lt;/code&gt; inside the root of your Xcode project's folder that looks like this:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'rubygems'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'xcodebuild'&lt;/span&gt;

&lt;span class="no"&gt;XcodeBuild&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Tasks&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;BuildTask&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What does that get you?&lt;/p&gt;&lt;p&gt;Well, after creating that &lt;code&gt;Rakefile&lt;/code&gt;, running a quick &lt;code&gt;rake -T&lt;/code&gt; (which will list all available &lt;code&gt;rake&lt;/code&gt; tasks) will output something like this:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;rake xcode:build       &lt;span class="c"&gt;# Builds the specified target(s).&lt;/span&gt;
rake xcode:clean       &lt;span class="c"&gt;# Cleans the build using the same build settings.&lt;/span&gt;
rake xcode:cleanbuild  &lt;span class="c"&gt;# Builds the specified target(s) from a clean slate.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;One of the coolest features of &lt;code&gt;xcodebuild-rb&lt;/code&gt; is it's use of "formatters". One of my favorite formatters is called "progress". You can enable it like this:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="no"&gt;XcodeBuild&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Tasks&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;BuildTask&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;formatter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;XcodeBuild&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Formatters&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ProgressFormatter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then when you build using &lt;code&gt;xcodebuild-rb&lt;/code&gt;, your output will look something like this:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;Building target: ExampleProject &lt;span class="o"&gt;(&lt;/span&gt;in ExampleProject.xcproject&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;=============================================================&lt;/span&gt;

Configuration: Release
..............

Finished in 2.226883 seconds.
Build succeeded.
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://github.com/lukeredpath/xcodebuild-rb"&gt;Read more about &lt;code&gt;xcodebuild-rb&lt;/code&gt; on Github&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;xcodearchive&lt;/h3&gt;&lt;p&gt;Apple ships Xcode with a command line tool called &lt;code&gt;xcodebuild&lt;/code&gt;, which as the name suggests, builds an Xcode project. One drawback about the built-in &lt;code&gt;xcodebuild&lt;/code&gt; tool is that it can't create &lt;code&gt;.ipa&lt;/code&gt; archive files. &lt;/p&gt;&lt;p&gt;Well, enter &lt;a href="https://github.com/gcerquant/xcodearchive/blob/master/xcodearchive.rb"&gt;&lt;code&gt;xcodearchive&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Unlike &lt;code&gt;xcodebuild-rb&lt;/code&gt;, &lt;code&gt;xcodearchive&lt;/code&gt; isn't a ruby gem. It is just a &lt;code&gt;.rb&lt;/code&gt; file that you can put anywhere you'd like and run.&lt;/p&gt;&lt;p&gt;&lt;code&gt;xcodearchive&lt;/code&gt; has a ton of great features, check out the USAGE output:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;Usage: xcodearchive &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS&lt;span class="o"&gt;]&lt;/span&gt;
        --version
                                     Show version number
    -v, --verbose                    Output more information
    -g, --growl                      Show growl alerts to inform about progress of the build
    -n, --do_not_keep_dsym_symbols   Do not keep the dSYM symbols
    -s, --show                       Show archive in Finder once created
    -c, --clean                      Do a clean before building the Xcode project
    -o, --ipa_export_path FOLDER     Set the path of the folder where the ipa will be saved. Default is &lt;span class="s1"&gt;'~/Desktop'&lt;/span&gt;
    -i DEVELOPPER_IDENTITY,          Force the developper identity value
        --developper_identity
    -p, --project PROJECT            Specifiy xcode project
    -h, --help                       Display this screen
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://github.com/gcerquant/xcodearchive/blob/master/xcodearchive.rb"&gt;Read more about &lt;code&gt;xcodearchive&lt;/code&gt; on Github&lt;/a&gt;&lt;/p&gt;&lt;p&gt;If you aren't already automating the tedious parts of your build and release processes, you are missing out. As any iOS developer knows, building and releasing can become some of the most monotonous and annoying parts of our jobs, hopefully these little tools will inspire you to start scripting your way to a smoother build/release cycle.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/TLE8Apzs3vI" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/building-xcode-projects-from-the-command-line</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/42</id>
    <published>2012-02-11T13:19:00-06:00</published>
    <updated>2012-02-11T13:19:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/av8Rfa_Mfgw/phantom-buttons-on-the-ipad's-split-keyboard" />
    <title>Phantom Buttons on the iPad's Split Keyboard</title>
    <content type="html">&lt;p&gt;Yet another example of details that 99.9% of users would never notice but use constantly.&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;The iPad’s split keyboard has phantom buttons. If you’re used to typing Y with your left hand, you can.&lt;/p&gt;

&lt;p&gt;To enable this keyboard, tap-hold on the “toggle keyboard” button in the lower right to get a menu, or tap-hold on it and drag upwards. Reverse that to reunite the two halves back to normal at the bottom.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;img src="http://cl.ly/E7UY/Screen%20Shot%202012-02-11%20at%201.20.07%20PM.png" alt="Screenshot"&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;I love discovering little tid bits like this. Apple (among others) manage to sprinkle them in the strangest and most obvious places. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/av8Rfa_Mfgw" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/phantom-buttons-on-the-ipad's-split-keyboard</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/41</id>
    <published>2012-02-11T13:12:00-06:00</published>
    <updated>2012-02-11T13:12:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/DWzMF1yMHFA/the-apple-voice" />
    <title>The Apple Voice</title>
    <content type="html">&lt;p&gt;&lt;a href="https://twitter.com/#!/holman"&gt;Zach Holman&lt;/a&gt; does a great job of succinctly describing something that I've been having trouble  quantifying into words for a while now.&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;Apple commands their words exceedingly well. They aren’t the originator — or even the owner — of their particular voice, but they are the most visible.&lt;/p&gt;

&lt;p&gt;Mechanically, The Apple Voice is characterized by short, declarative sentences that are informally and personally delivered to you with a hint of smugness.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;The Apple "voice", as Zach names it, is probably one of the most underrated parts of Apple's success. &lt;/p&gt;&lt;p&gt;Zach goes on to talk about how you can shape and choose your company or product's "voice". &lt;/p&gt;&lt;p&gt;&lt;strong&gt;The upshot:&lt;/strong&gt; You need to do this. &lt;em&gt;This matters&lt;/em&gt;, a lot.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/DWzMF1yMHFA" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/the-apple-voice</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/40</id>
    <published>2012-01-22T14:39:00-06:00</published>
    <updated>2012-01-22T14:39:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/fMc0rWIhY7s/parse-json-directly-into-nsmanagedobjects" />
    <title>Parse JSON Directly into NSManagedObjects</title>
    <content type="html">&lt;p&gt;&lt;a href="https://twitter.com/#!/atomicbird"&gt;Tom Harrington&lt;/a&gt; brings us another insanely valuable little bit of code that does some simple, yet awesome things with a parsed NSDictionary of JSON content:&lt;/p&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Provide a safe, generic alternative to Cocoa’s -setValuesForKeysWithDictionary: for use with NSManagedObject and its subclasses&lt;/li&gt;
&lt;li&gt;Handle cases where JSON data didn’t match up with what the managed objects expected. Getting a string where you expect a numeric value, or vice versa, for example, or getting a string representation of a date when you want a real NSDate object.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;p&gt;Basically Tom is examining his managed object's defined properties, and then looking into the NSDictionary he got when he parsed some JSON, and if any of the property key names exist in both structures, he sets the value.&lt;/p&gt;&lt;p&gt;The end result is being able to do something like this:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;myObj&lt;/span&gt; &lt;span class="nl"&gt;setValuesForKeysWithDictionary:&lt;/span&gt;&lt;span class="n"&gt;jsonDict&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I love little tools and case studies like this as they always help to enlighten more of us to the awesomeness that is the Objective-C runtime.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/fMc0rWIhY7s" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/parse-json-directly-into-nsmanagedobjects</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/39</id>
    <published>2012-01-22T14:30:00-06:00</published>
    <updated>2012-01-22T14:30:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/80KsrSFkF4I/quicklook-plugin-for-mobile-provision-files" />
    <title>QuickLook Plugin for Mobile Provision Files</title>
    <content type="html">&lt;p&gt;How many times has this happened to you?&lt;/p&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;I received the new mobileprovision file.&lt;/li&gt;
&lt;li&gt;Great.&lt;/li&gt;
&lt;li&gt;No.&lt;/li&gt;
&lt;li&gt;What?&lt;/li&gt;
&lt;li&gt;You still haven’t added my UDID in it.&lt;/li&gt;
&lt;li&gt;I have.&lt;/li&gt;
&lt;li&gt;No you have not.&lt;/li&gt;
&lt;li&gt;Yes I have.&lt;/li&gt;
&lt;li&gt;No you haven’t.&lt;/li&gt;
&lt;li&gt;Yes.&lt;/li&gt;
&lt;li&gt;No! Why don’t you just… &lt;loosing patience but trying to stay polite&gt;&lt;/loosing&gt;
&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;li&gt;Look, I’m sure. Can you generate it again?&lt;/li&gt;
&lt;li&gt;Ok, I will. Wait… ok, it’s done.&lt;/li&gt;
&lt;li&gt;Let me check. No, sorry, still not ok.&lt;/li&gt;
&lt;li&gt;Are you sure?
[END OF CHAT CONVERSATION CENSORED]&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;p&gt;MacMotion brings something to relieve the pain (slightly) of dealing with Apple Provisioning Profiles, and it uses one of my favorite OS X features, QuickLook.&lt;/p&gt;&lt;p&gt;After &lt;a href="http://www.macmation.com/blog/2011/10/quicklook-plugin-for-mobile-provision-files/"&gt;installing MacMotion's new QuickLook plugin&lt;/a&gt; Simply press the spacebar on any &lt;code&gt;.mobileprovision&lt;/code&gt; file in the finder and instead of some boring 1 line summary, you'll get something like this:&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.macmation.com/blog/wp-content/uploads/2011/09/QuickLook_mobileprovision_plugin_view.png" alt="Screenshot"&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;It also has some great enhancements to Finder icons to quickly tell you if a profile is valid or not.&lt;/p&gt;&lt;p&gt;You can &lt;a href="http://www.macmation.com/blog/2011/10/quicklook-plugin-for-mobile-provision-files/"&gt;download the plugin here&lt;/a&gt; (at the bottom of the post).&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/80KsrSFkF4I" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/quicklook-plugin-for-mobile-provision-files</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/38</id>
    <published>2012-01-22T14:17:00-06:00</published>
    <updated>2012-01-22T14:17:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/8s-w40t84-c/ipad-retina-images-found-in-itunes-u-and-ibooks-2-files" />
    <title>iPad Retina Images Found in iTunes U and iBooks 2 Files</title>
    <content type="html">&lt;p&gt;This one is sort of a given these days, but appears we now have even stronger evidence that the almost-certainly forthcoming iPad 3 will have a &lt;em&gt;Retina&lt;/em&gt; class screen.&lt;/p&gt;&lt;p&gt;Shown here is an iPad bookmark image resource with an &lt;em&gt;@2x&lt;/em&gt; version:&lt;/p&gt;&lt;p&gt;&lt;img src="http://cdn.thenextweb.com/wp-content/blogs.dir/1/files/2012/01/screen-shot-2012-01-19-at-6-11-35-pm-520x184.png" alt="iBooks 2 Retina Image Resource Screenshot"&gt;&lt;br&gt;&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;We have been finding references to 2X iPad images for &lt;a href="http://9to5mac.com/2011/06/14/ios-5-sdk-includes-retina-display-graphics-for-next-generation-ipad/"&gt;well over a year&lt;/a&gt; (including iBooks 1.2), (...)&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;I'm posting about this as a &lt;em&gt;nudge-nudge&lt;/em&gt; to my fellow iOS developers to keep this in mind if you are starting out on any new iPad projects, you'll need to whip up a new &lt;em&gt;2048×1536&lt;/em&gt; resolution Photoshop document.&lt;/p&gt;&lt;p&gt;Should make designing iPad apps a little more &lt;em&gt;interesting&lt;/em&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/8s-w40t84-c" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/ipad-retina-images-found-in-itunes-u-and-ibooks-2-files</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/37</id>
    <published>2012-01-02T14:59:00-06:00</published>
    <updated>2012-01-02T14:59:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/YrH-W1Nns5U/misconceptions-about-ios-multitasking" />
    <title>Misconceptions About iOS Multitasking</title>
    <content type="html">&lt;p&gt;Fantastic writeup from &lt;a href="https://twitter.com/fraserspeirs"&gt;Fraser Speirs&lt;/a&gt; about iOS's multitasking capabilities and behavior. He goes into great detail about the ins and outs of things and covers all the different scenarios really well.&lt;/p&gt;&lt;p&gt;The problem is this:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;If someone tells you that all the apps in the multitasking bar are running, using up memory or sucking power, they are wrong.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;I too have heard the "advice" quite a bit recently that users should "clear out" their multitasking tray to "free up" memory and improve performance. This would be bad enough coming from "your buddy who read it on some forum", but apparently there are &lt;a href="https://twitter.com/#!/edfladung/status/153918479915950080"&gt;reports&lt;/a&gt; of Apple Genius Bar employees feeding this crap out to members of the unknowing public.&lt;/p&gt;&lt;p&gt;For the last time, (Fraser puts it perfectly): &lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;The iOS multitasking bar does not contain "a list of all running apps". It contains "a list of recently used apps". The user never has to manage background tasks on iOS.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Most iOS developers know this stuff like the back of our hands, but it's important to remember that most of your users have no idea how any of this stuff is "supposed" to work.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/YrH-W1Nns5U" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/misconceptions-about-ios-multitasking</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/36</id>
    <published>2011-12-23T11:47:00-06:00</published>
    <updated>2011-12-23T11:47:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/Bm13Bi4Cggs/zucchini-visual-ios-testing-written-in-coffeescript" />
    <title>Zucchini: iOS Testing Written in Ruby &amp; CoffeeScript</title>
    <content type="html">&lt;p&gt;&lt;a href="http://www.zucchiniframework.org/"&gt;Zucchini&lt;/a&gt; is an awesome &lt;a href="http://cukes.info/"&gt;cucumber&lt;/a&gt;-like visual testing framework for iOS. It works in a pretty awesome way by compiling &lt;a href="http://coffeescript.org/"&gt;CoffeeScript&lt;/a&gt; down to &lt;a href="http://developer.apple.com/library/ios/#documentation/DeveloperTools/Reference/UIAutomationRef/_index.html"&gt;UIAutomation&lt;/a&gt;-compliant Javascript, and then running the test with Instruments.app's command-line tool.&lt;/p&gt;&lt;p&gt;Also, As their site describes further, the whole system works very much like &lt;a href="http://cukes.info/"&gt;Cucumber&lt;/a&gt;, the popular ruby/rails testing gem:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;A Zucchini feature file consists of sections bound to contexts of different application screens. Every screen you proceed to needs to be backed up by a CoffeeScript class describing all UI elements you want Zucchini to interact with as well as custom actions you feel like performing on that screen.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Here's an example of one such class:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;PostScreen&lt;/span&gt; &lt;span class="k"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Screen&lt;/span&gt;
  &lt;span class="nv"&gt;anchor: &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;navigationBars&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s2"&gt;"Post"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

  &lt;span class="nv"&gt;constructor: &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt; &lt;span class="s1"&gt;'post'&lt;/span&gt;

    &lt;span class="nx"&gt;extend&lt;/span&gt; &lt;span class="nx"&gt;@elements&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'Post'&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;navigationBars&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s2"&gt;"Post"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;buttons&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s2"&gt;"Post"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="nx"&gt;extend&lt;/span&gt; &lt;span class="nx"&gt;@actions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'Type "([^"]*)"$'&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;(text) -&amp;gt;&lt;/span&gt;
      &lt;span class="nv"&gt;messageArea = &lt;/span&gt;&lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="s1"&gt;'Message Text Area'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="nx"&gt;messageArea&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setValue&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Zucchini has an impressive set of features including:&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Using a natural language for interaction scenarios, such as &lt;code&gt;Then on the "Menu" screen:&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;The ability test/compare against screenshots.&lt;/li&gt;
&lt;li&gt;Integration with Jenkins for full-on regression testing.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Zucchini only runs on Mac OS X 10.6 and 10.7 and requires XCode 4.2 as well as Ruby (at least 1.8.7).&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://www.zucchiniframework.org/"&gt;The Zucchini site&lt;/a&gt; is full of really helpful links and installation instructions, so check it out, you can also find &lt;a href="https://github.com/playup/zucchini"&gt;the Zucchini project on Github here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/Bm13Bi4Cggs" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/zucchini-visual-ios-testing-written-in-coffeescript</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/35</id>
    <published>2011-12-15T21:34:00-06:00</published>
    <updated>2011-12-15T21:34:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/taeWP46xqoM/creating-the-ios-5-uitableview-bevel-effect" />
    <title>Creating the iOS 5 UITableView Bevel Effect</title>
    <content type="html">&lt;p&gt;Oh man, I wish I had found &lt;a href="https://twitter.com/#!/Tim0liver"&gt;Tim Oliver&lt;/a&gt;'s &lt;a href="http://www.tim-oliver.com/2011/10/23/creating-the-uitableview-bevel-effect-in-coregraphics/"&gt;writeup about this&lt;/a&gt; sooner (includes diagrams and sample code).&lt;/p&gt;&lt;p&gt;I just wrote all of this code myself, and had to do all of my own research. Serves me right for not properly Googling.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Pro Tip&lt;/em&gt;: Google everything before you begin coding a solution for a problem you assume everyone in your field must have.&lt;/p&gt;&lt;p&gt;You see, in iOS 5, Apple refreshed the look of a standard &lt;code&gt;UITableViewStyleGrouped&lt;/code&gt; style &lt;code&gt;UITableView&lt;/code&gt;. (You know, the ones with the rounded corners). &lt;/p&gt;&lt;p&gt;No longer were they actually white (like &lt;code&gt;255, 255, 255&lt;/code&gt; or &lt;code&gt;#FFFFFF&lt;/code&gt;). They were now a refreshing shade of &lt;code&gt;255, 255, 255, 0.8&lt;/code&gt;. That's still pure white, but with an opacity of &lt;em&gt;80%&lt;/em&gt;. Also, they added a 1 point tall drop shadow, as well as a 1 point tall inner shadow to each &lt;code&gt;UITableViewCell&lt;/code&gt;. They've also still got a 1 point border around them.&lt;/p&gt;&lt;p&gt;I actually think the new cells looks &lt;em&gt;much&lt;/em&gt; better, but they definitely break any custom code anyone had written to make their own custom UI or buttons match &lt;code&gt;UIKit&lt;/code&gt;'s.&lt;/p&gt;&lt;p&gt;I can't tell you how often I need to replicate this look and feel. Glad someone put together &lt;a href="http://www.tim-oliver.com/2011/10/23/creating-the-uitableview-bevel-effect-in-coregraphics/"&gt;a comprehensive article about the topic&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Pro Tip #2&lt;/em&gt;: This is a pretty small detail, and sure, most people probably won't even notice. However, in my own anecdotal side-by-side tests, I was able to get an &lt;i&gt;Oh this looks much better!&lt;/i&gt; reaction out of people by simply making my custom drawn stuff correctly match the system drawn bits.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/taeWP46xqoM" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/creating-the-ios-5-uitableview-bevel-effect</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/34</id>
    <published>2011-12-13T14:03:00-06:00</published>
    <updated>2011-12-13T14:03:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/5EZshZTLUzU/connect-discover-edit-inspect-customize" />
    <title>Connect, Discover, Edit, Inspect, Customize</title>
    <content type="html">&lt;p&gt;A brilliant article by my buddy &lt;a href="https://twitter.com/#!/tedchoward"&gt;Ted Howard&lt;/a&gt; on the trials and tribulations of properly naming pieces of your user interface.&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;We needed a name for the button that brought up the stack editor. We wanted to convey to the user that launching the editor was a safe operation, that any changes they made would not be applied to the stack they were viewing. For that reason, we didn’t want to use ‘Edit’, because ‘Edit’ made it sound like you could modify something that someone else had made. We had many long conversations and debates about what to call the button. The thesaurus was consulted. Finally we chose a word: ‘Customize this stack’.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;A good user interface can be killed by forgetting to think about these crucial details. Kudos to Ted for reminding us.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/5EZshZTLUzU" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/connect-discover-edit-inspect-customize</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/33</id>
    <published>2011-12-11T01:52:00-06:00</published>
    <updated>2011-12-11T01:52:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/IINdT1Zy86g/using-blocks-for-drawing" />
    <title>Using Blocks for Drawing</title>
    <content type="html">&lt;p&gt;I'm absolutely in love with the technique &lt;a href="https://twitter.com/#!/davidhamrick"&gt;David Hamrick&lt;/a&gt; lays out in this post.&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;Instead of subclassing UIView every time we need to draw something what if we were to have one subclass that allowed us to pass in a block that performed the drawing code. So I’ve created a class called DrawView that does exactly that. It also passes itself and the graphics context since that was going to be needed in every block’s implementation so including them as parameters reduced the amount of boiler plate code needed.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;It's a pretty simple idea: you shouldn't need to subclass just to do a tiny bit of custom drawing. Now you don't have to. With David's simple &lt;code&gt;DrawView&lt;/code&gt; class, you can do your drawing like this:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;DrawView&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;drawableView&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[[&lt;/span&gt;&lt;span class="n"&gt;DrawView&lt;/span&gt; &lt;span class="n"&gt;alloc&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nl"&gt;initWithFrame:&lt;/span&gt;&lt;span class="n"&gt;CGRectMake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;320.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;50.0&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="n"&gt;autorelease&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="n"&gt;drawableView&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drawBlock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UIView&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;CGContextRef&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;CGPoint&lt;/span&gt; &lt;span class="n"&gt;startPoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CGPointMake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;CGPoint&lt;/span&gt; &lt;span class="n"&gt;endPoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CGPointMake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bounds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;CGContextSetStrokeColorWithColor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;UIColor&lt;/span&gt; &lt;span class="n"&gt;grayColor&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;CGColor&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;CGContextSetLineWidth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;CGContextMoveToPoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;startPoint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;startPoint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;CGContextAddLineToPoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;endPoint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;endPoint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;CGContextStrokePath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;view&lt;/span&gt; &lt;span class="nl"&gt;addSubview:&lt;/span&gt;&lt;span class="n"&gt;drawableView&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I wouldn't be surprised to see something like this show up in a future update to &lt;code&gt;UIKit&lt;/code&gt;. Apple is starting to use blocks everywhere. This is just good sense.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/IINdT1Zy86g" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/using-blocks-for-drawing</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/32</id>
    <published>2011-12-11T01:31:00-06:00</published>
    <updated>2011-12-11T01:31:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/SwKN_MFXJYg/attaching-a-uiview-to-the-uiscrollviewindicator" />
    <title>Attaching a UIView to the UIScrollViewIndicator</title>
    <content type="html">&lt;p&gt;Here's a neat little write up (sample code included) from &lt;a href="https://twitter.com/#!/FlorianMielke/"&gt;Florian Mielke&lt;/a&gt; of how to replicate &lt;a href="https://path.com/"&gt;Path 2.0&lt;/a&gt;'s neat behavior of "attaching" a timestamp indicator that follows iOS's built-in scroll indicator as you scroll.&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;The basic idea is to add the info panel’s root layer as a sublayer to the indicator’s root layer. With that, the info panel scrolls smoothly and stays in parallel to the indicator automatically. In the case were the scroll view hit the edges, we want the info panel to stay visible at the top or bottom of the screen, so we need to do some extra calculation to let it stay centered.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;center&gt;
&lt;img src="http://f.cl.ly/items/0y103O2K0E0Q3m3G1m2v/tumblr_lvzgtccQG51qbj1h6o1_500.png" alt="Screenshot"&gt;&lt;br&gt;
&lt;/center&gt;&lt;p&gt;Love the technique, can't wait to see something like this start showing up in more apps. I think anything that intuitively allows developers and designers a way to remove ugly information like timestamps from rows of data is awesome.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: Here's a &lt;a href="http://jsfiddle.net/michaelhue/7NAvm/7/light/"&gt;web-based implementation of the same effect&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/SwKN_MFXJYg" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/attaching-a-uiview-to-the-uiscrollviewindicator</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/31</id>
    <published>2011-12-06T20:33:00-06:00</published>
    <updated>2011-12-06T20:33:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/R6XpZsKAEUc/remote-debugging-uiwebview" />
    <title>Remote Debugging UIWebView</title>
    <content type="html">&lt;p&gt;&lt;a href="https://twitter.com/#!/hiediutley/"&gt;Hiedi Utley&lt;/a&gt; has completely brought the awesome with a way to use desktop Safari's WebKit inspector to debug iOS &lt;code&gt;UIWebView&lt;/code&gt; objects:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;Wow! What a day! While researching debugging techniques for an upcoming training class I am teaching on PhoneGap, I stumbled over a couple of blogs about a private API in iOS5 that will allow you to debug your UIWebViews right inside desktop Safari using the Web Inspector!&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Enabling the trick requires part of a private API in iOS 5, so don't ship it. It does seem to work great though, and it's pretty simple:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;BOOL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;application:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UIApplication&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;application&lt;/span&gt; &lt;span class="nf"&gt;didFinishLaunchingWithOptions:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NSDictionary&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;launchOptions&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Uncomment to enable remote debugging&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSClassFromString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@"WebView"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;_enableRemoteInspector&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then open up desktop Safari and head over to &lt;a href="http://localhost:9999"&gt;http://localhost:9999&lt;/a&gt;. It requires that you be running iOS 5 and running inside the iOS Simulator, but still, what a HUGE help.&lt;/p&gt;&lt;p&gt;(via &lt;a href="https://twitter.com/flyosity"&gt;Mike Rundle&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; Turns out &lt;a href="https://twitter.com/#!/atnan"&gt;Nathan de Vries&lt;/a&gt; did a lot of the original research and discovery on this one, here's his original (and in-depth) write up of it: &lt;a href="http://atnan.com/blog/2011/11/17/enabling-remote-debugging-via-private-apis-in-mobile-safari/"&gt;Enabling Remote Debugging via Private APIs in Mobile Safari&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/R6XpZsKAEUc" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/remote-debugging-uiwebview</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/30</id>
    <published>2011-12-06T19:54:00-06:00</published>
    <updated>2011-12-06T19:54:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/kuN7aq4e23A/android-graphics-truth-facts" />
    <title>Android Graphics Truth Facts</title>
    <content type="html">&lt;p&gt;&lt;a href="https://twitter.com/#!/andrewmunn"&gt;Andrew Munn&lt;/a&gt; points out a simple truth about Android vs. iOS graphics rendering:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;It’s because on iOS all UI rendering occurs in a dedicated UI thread with real-time priority.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;He also clarifies:&lt;/p&gt;&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Compositing and previously set-up animations—all the stuff that involves the Core Animation rendering layer tree—do indeed happen on a background thread. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Drawing new content into Core Animation layers and setting up their animations happens on the main thread. This is the same thread that user interface actions occur on.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In naively written code, all developer-written code would occur on the main thread. However, Apple provides very easy APIs (Grand Central Dispatch and &lt;code&gt;NSOperation&lt;/code&gt;) to move things into system-managed background threads. In iOS 5, you can even declare that a Core Data (object-relational database) context cannot be used directly on the main thread.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;&lt;p&gt;I love that we're finally starting to see some in-depth writing about the meat of these issues. &lt;/p&gt;&lt;p&gt;Pretty much everyone I speak to on a regular basis tells me "Android just feels laggy" or something of that nature. I can't speak to the specific causes of Android's hiccups in this department, but Andrew's post sounds pretty accurate to me in regards to Core Animation and UIKit rendering behavior.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/kuN7aq4e23A" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/android-graphics-truth-facts</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/29</id>
    <published>2011-12-01T09:05:00-06:00</published>
    <updated>2011-12-01T09:05:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/1FaeqHuMO50/gradient-app" />
    <title>Gradient.app</title>
    <content type="html">&lt;p&gt;A fantastic little OS X app here for configuring CSS gradients. The interface of Gradient is really fantastic and pretty close to perfect of this simple task.&lt;/p&gt;&lt;p&gt;&lt;img src="http://f.cl.ly/items/0L3F2y2O0f0U290m2t25/Image%202011.12.01%209:06:06%20AM.png" alt="Screenshot"&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;You simply choose your color, and generate the CSS. It has all sorts of configuration options to support every modern browser.&lt;/p&gt;&lt;p&gt;&lt;img src="http://f.cl.ly/items/0D2P400g2I2A000r271l/Image%202011.12.01%209:06:40%20AM.png" alt="Screenshot 2"&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Love little tools like this. It's $4.99 in the app store, &lt;a href="http://itunes.apple.com/us/app/gradient/id481981128?ls=1&amp;amp;mt=12"&gt;grab it here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/1FaeqHuMO50" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/gradient-app</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/28</id>
    <published>2011-11-27T16:31:00-06:00</published>
    <updated>2011-11-27T16:31:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/tHhaXsOq7Go/compiling-doom-3-in-xcode-4" />
    <title>Compiling Doom 3 in Xcode 4</title>
    <content type="html">&lt;p&gt;&lt;a href="http://twitter.com/#!/fabynou"&gt;Fabien Sanglard&lt;/a&gt; brings us an extremely comprehensive guide to getting the &lt;a href="http://www.engadget.com/2011/11/23/doom-3-source-code-available-now-gory-customizations-welcomed/"&gt;recently&lt;/a&gt; open-sourced &lt;a href="https://github.com/TTimo/doom3.gpl"&gt;Doom 3 source code&lt;/a&gt; up and running on OS X using Xcode 4.&lt;/p&gt;&lt;p&gt;Love it:&lt;/p&gt;&lt;p&gt;&lt;img src="http://f.cl.ly/items/2j473S0L1h2W3k2i3a09/step13.png" alt="Doom 3 Screenshot"&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/tHhaXsOq7Go" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/compiling-doom-3-in-xcode-4</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/27</id>
    <published>2011-11-27T16:18:00-06:00</published>
    <updated>2011-11-27T16:18:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/stcwSJp0Gsk/snrfetchedresultscontroller" />
    <title>SNRFetchedResultsController</title>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;SNRFetchedResultsController&lt;/code&gt; is a "port" (not exactly) of &lt;code&gt;NSFetchedResultsController&lt;/code&gt; from iOS to OS X. It is not a drop in replacement for &lt;code&gt;NSFetchedResultsController&lt;/code&gt;, but performs many of the same tasks in relation to managing results from a Core Data fetch and notifying a delegate when objects are inserted, deleted, updated, or moved in order to update the UI.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;As someone who is primarily an iOS guy, having this class around makes the thought of doing some larger Mac OS X and AppKit-based stuff much more inviting.&lt;/p&gt;&lt;p&gt;Implementing it is this easy:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;NSFetchRequest&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="n"&gt;NSFetchRequest&lt;/span&gt; &lt;span class="n"&gt;alloc&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;entity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSEntityDescription&lt;/span&gt; &lt;span class="nl"&gt;entityForName:&lt;/span&gt;&lt;span class="s"&gt;@"Car"&lt;/span&gt; &lt;span class="nl"&gt;inManagedObjectContext:&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sortDescriptors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSArray&lt;/span&gt; &lt;span class="nl"&gt;arrayWithObjects:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSSortDescriptor&lt;/span&gt; &lt;span class="nl"&gt;sortDescriptorWithKey:&lt;/span&gt;&lt;span class="s"&gt;@"year"&lt;/span&gt; &lt;span class="nl"&gt;ascending:&lt;/span&gt;&lt;span class="n"&gt;YES&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nb"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;predicate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSPredicate&lt;/span&gt; &lt;span class="nl"&gt;predicateWithFormat:&lt;/span&gt;&lt;span class="s"&gt;@"wheels.@count != 0"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchBatchSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchedResultsController&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="n"&gt;SNRFetchedResultsController&lt;/span&gt; &lt;span class="n"&gt;alloc&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nl"&gt;initWithManagedObjectContext:&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="nl"&gt;fetchRequest:&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchedResultsController&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;delegate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;NSError&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchedResultsController&lt;/span&gt; &lt;span class="nl"&gt;performFetch:&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;NSLog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@"Unresolved error: %@ %@"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt; &lt;span class="n"&gt;userInfo&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NSInteger&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;numberOfRowsInTableView:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NSTableView&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;aTableView&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchedResultsController&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;tableView:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NSTableView&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;aTableView&lt;/span&gt; &lt;span class="nf"&gt;objectValueForTableColumn:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NSTableColumn&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;aTableColumn&lt;/span&gt; &lt;span class="nf"&gt;row:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NSInteger&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;rowIndex&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fetchedResultsController&lt;/span&gt; &lt;span class="nl"&gt;objectAtIndex:&lt;/span&gt;&lt;span class="n"&gt;rowIndex&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;controller:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SNRFetchedResultsController&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;controller&lt;/span&gt; &lt;span class="nf"&gt;didChangeObject:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;anObject&lt;/span&gt; &lt;span class="nf"&gt;atIndex:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NSUInteger&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;index&lt;/span&gt; &lt;span class="nf"&gt;forChangeType:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SNRFetchedResultsChangeType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;type&lt;/span&gt; &lt;span class="nf"&gt;newIndex:&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NSUInteger&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;newIndex&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nl"&gt;SNRFetchedResultsChangeDelete:&lt;/span&gt;
            &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tableView&lt;/span&gt; &lt;span class="nl"&gt;removeRowsAtIndexes:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSIndexSet&lt;/span&gt; &lt;span class="nl"&gt;indexSetWithIndex:&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nl"&gt;withAnimation:&lt;/span&gt;&lt;span class="n"&gt;NSTableViewAnimationSlideLeft&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nl"&gt;SNRFetchedResultsChangeInsert:&lt;/span&gt;
            &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tableView&lt;/span&gt; &lt;span class="nl"&gt;insertRowsAtIndexes:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSIndexSet&lt;/span&gt; &lt;span class="nl"&gt;indexSetWithIndex:&lt;/span&gt;&lt;span class="n"&gt;newIndex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nl"&gt;withAnimation:&lt;/span&gt;&lt;span class="n"&gt;NSTableViewAnimationSlideDown&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nl"&gt;SNRFetchedResultsChangeUpdate:&lt;/span&gt;
            &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tableView&lt;/span&gt; &lt;span class="nl"&gt;reloadDataForRowIndexes:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSIndexSet&lt;/span&gt; &lt;span class="nl"&gt;indexSetWithIndex:&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nl"&gt;columnIndexes:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSIndexSet&lt;/span&gt; &lt;span class="nl"&gt;indexSetWithIndex:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nl"&gt;SNRFetchedResultsChangeMove:&lt;/span&gt;
            &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tableView&lt;/span&gt; &lt;span class="nl"&gt;removeRowsAtIndexes:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSIndexSet&lt;/span&gt; &lt;span class="nl"&gt;indexSetWithIndex:&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nl"&gt;withAnimation:&lt;/span&gt;&lt;span class="n"&gt;NSTableViewAnimationSlideLeft&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tableView&lt;/span&gt; &lt;span class="nl"&gt;insertRowsAtIndexes:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;NSIndexSet&lt;/span&gt; &lt;span class="nl"&gt;indexSetWithIndex:&lt;/span&gt;&lt;span class="n"&gt;newIndex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nl"&gt;withAnimation:&lt;/span&gt;&lt;span class="n"&gt;NSTableViewAnimationSlideDown&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;SNRFetchedResultsController&lt;/code&gt; is created by &lt;a href="http://twitter.com/#!/indragie"&gt;Indragie Karunaratne&lt;/a&gt;. He has been rocking the Mac OS X open source stuff lately and this latest one doesn't disappoint.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/stcwSJp0Gsk" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/snrfetchedresultscontroller</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/25</id>
    <published>2011-11-18T19:12:00-06:00</published>
    <updated>2011-11-18T19:12:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/1zFAQPLVRSg/ios-settings-shortcuts" />
    <title>iOS Settings Shortcuts</title>
    <content type="html">&lt;p&gt;&lt;img src="http://cl.ly/Byfs/photo.png" alt="iOS Settings Shortcuts"&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;From the uber-talented &lt;a href="http://twitter.com/brdrck"&gt;Jeff Broderick&lt;/a&gt; comes &lt;a href="http://brdrck.me/settings/"&gt;this beautiful and awesome collection of iOS homescreen shortcuts&lt;/a&gt; to the major parts of iOS's settings app. Finally, you can have beautiful, quick ways to get to the parts of Settings.app you use the most.&lt;/p&gt;&lt;p&gt;Also make sure to check out &lt;a href="http://dribbble.com/brdrck"&gt;Jeff on Dribbble&lt;/a&gt;, his work is awesome!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/1zFAQPLVRSg" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/ios-settings-shortcuts</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/24</id>
    <published>2011-11-18T14:20:00-06:00</published>
    <updated>2011-11-18T14:20:00-06:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/5gNC8E6QFdQ/scrapbook-of-an-advanced-core-animation-view" />
    <title>Scrapbook of an Advanced Core Animation View</title>
    <content type="html">&lt;p&gt;Found this article that &lt;a href="https://twitter.com/#!/drewmccormack"&gt;Drew McCormack&lt;/a&gt; put together while searching around for some CoreAnimation techniques this afternoon. &lt;/p&gt;&lt;p&gt;It basically covers the process of conceptualizing, imagining, wire framing, designing, implemented, performance tuning and testing a really awesome CoreAnimation interface.&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.macresearch.org/files/cocoa_tut34/Timeline8.png" alt="Screenshot"&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;These type of complete, comprehensive guides are quite rare in the Mac/iOS world and Drew really brings the awesome with it. I highly suggest you &lt;a href="http://www.macresearch.org/cocoa-scientists-xxxiv-scrapbook-advanced-core-animation-view"&gt;check it out&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/5gNC8E6QFdQ" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/scrapbook-of-an-advanced-core-animation-view</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/23</id>
    <published>2011-11-03T21:37:00-05:00</published>
    <updated>2011-11-03T21:37:00-05:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/tmgayq7_7JM/on-skeuomorphism" />
    <title>On Skeuomorphism</title>
    <content type="html">&lt;p&gt;&lt;/p&gt;
&lt;center&gt;
&lt;img src="http://f.cl.ly/items/2H2S2s3q0R34032d3a1M/apple-calendar-ipad-2.jpeg" alt="iPad Calendar &amp;amp; Contacts"&gt;&lt;br&gt;
&lt;/center&gt;&lt;p&gt;Skeuomorphism is a fantastic technique and I couldn't be happier with how it is used in the design of some applications. When used both properly and effectively, I believe it can lead to some of the best user interfaces the world has seen.&lt;/p&gt;&lt;p&gt;The "official" definition:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;A skeuomorph or skeuomorphism is a derivative object that retains ornamental design cues to a structure that was necessary in the original.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;In our world it's actually something a little more specific. I think my buddy &lt;a href="https://twitter.com/#!/flyosity"&gt;Mike Rundle&lt;/a&gt; summed it up best in his &lt;a href="http://news.ycombinator.com/item?id=3193103"&gt;post on Hacker News&lt;/a&gt; today:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;There's a difference between "looking like something I'm familiar with" and "working like something I'm familiar with". The problem with bad skeuomorphic design is when it looks familiar but doesn't act like the thing it's mimicking.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;I couldn't agree more.&lt;/p&gt;&lt;p&gt;I would take it a step further and say that the interactions of such an interface need to be intuitive and discoverable on the platform. Take this app:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;center&gt;
&lt;img src="http://f.cl.ly/items/3x2W2h2Z2f0b0q3b2p1U/Korg_iELECTRIBE_Gorillaz_Front.jpeg" alt="Korg iELECTRIBE"&gt;&lt;br&gt;
&lt;/center&gt;&lt;p&gt;Yes, it does &lt;em&gt;somewhat&lt;/em&gt; resemble a real world object. But, putting aside my own personal disdain for how hideous it looks, it has a major flaw: &lt;em&gt;It is not usable&lt;/em&gt;. The minimum usable height for tap targets on iOS is &lt;em&gt;44 points&lt;/em&gt;. Take &lt;code&gt;UIBarButtonItem&lt;/code&gt; for example, here's one:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;center&gt;
&lt;img src="http://f.cl.ly/items/442p1p1R2N0C1b2N213J/Screen%20Shot%202011-11-03%20at%208.26.55%20PM.png" alt="UIBarButtonSystemItemAction" title="UIBarButtonSystemItemAction"&gt;&lt;br&gt;
&lt;/center&gt;&lt;p&gt;The good folks over at Korg completely ignore this fact. They have many buttons that are only 20 points tall. This not only makes the buttons hard to tap, but their placement makes the virtual "knobs" quite difficult to interact with. Also, given the large and clumsy nature of our pointing devices (otherwise known as "fingers"), turning virtual knobs  is a very non-intuitive method of choosing a value from a range of values on a digital screen. A better way of handling this type of interaction could be something like the iOS movie player, which allows you to intuitively scrub through the timeline of the movie at high and slow speeds depending on the vertical position of your finger after beginning your action.&lt;/p&gt;&lt;p&gt;My point is that an app doesn't have to completely replicate the real-world interface to which it's referring. You merely have to remind the user with subtle but recognizable visual cues, then embrace the platform. &lt;/p&gt;&lt;p&gt;&lt;a href="http://itunes.apple.com/sv/app/the-early-edition-2/id471813327?mt=8"&gt;The Early Edition 2&lt;/a&gt; for iPad does a pretty great job of this:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;center&gt;
&lt;img src="http://f.cl.ly/items/0K0d0Z3O2c3c1G3w3p1C/tee2-screen1c-s.png" alt="The Early Edition 2"&gt;&lt;br&gt;
&lt;/center&gt;&lt;p&gt;&lt;/p&gt;
&lt;center&gt;
&lt;img src="http://f.cl.ly/items/023B0r050q3z1G1B332z/tee2-screen4-s.jpeg" alt="The Early Edition 2 Sharing Screen"&gt;&lt;br&gt;
&lt;/center&gt;&lt;p&gt;Their story-sharing screen is one of my favorites in any app, you really have to see the animations and interactions to truly appreciate it. They remind the user of a newspaper, even allow you to pull down the corner of the page and turn to the next, but they don't go too far. They don't make you un-fold the paper, shake to make the ads fall out, or (an unrelated rant) throw in full page ads in between the content you're trying to read. Their sharing screen is so elegant. It sort of mentally nudges you into understanding what's going on by emulating a manila envelope, even taping it closed for you.&lt;/p&gt;&lt;p&gt;Then we come to this little bastard:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;center&gt;
&lt;img src="http://f.cl.ly/items/032V2j2S2K082b3T1i07/find-my-friends-ipad-screenshot-001.jpeg" alt="Find My Friends"&gt;&lt;br&gt;
&lt;/center&gt;&lt;p&gt;It resembles no actual recognizable interface or object (other than maybe a super shiny baseball glove or a native american friend-finding dreamcatcher). It is themed, at least it would seem, for the sake of being themed. At a glance, it doesn't necessarily look bad, it just doesn't make much sense. Apple has top-notch designers. I almost feel bad bringing Find My Friends up as it has been sort of hammered to death recently. However, I couldn't finish out this post without mentioning it.&lt;/p&gt;&lt;p&gt;If you aren't going to make a &lt;em&gt;truly&lt;/em&gt; skeuomorphic interface, but are just going for a good looking app, then use textures and patterns with extreme care. Your users, and hyper critical bloggers like myself, will thank you.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/tmgayq7_7JM" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/on-skeuomorphism</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/22</id>
    <published>2011-10-31T08:28:00-05:00</published>
    <updated>2011-10-31T08:28:00-05:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/r4PboMk3Qe0/slide-design-for-developers" />
    <title>Slide Design for Developers</title>
    <content type="html">&lt;p&gt;Great slides make for great presentations. But more than that, great slides really help people understand the information you're trying to present to them. &lt;a href="https://twitter.com/#!/holman"&gt;Zach Holman&lt;/a&gt; outlines the finer points of this in a post on slide design targeted towards developers.&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;My slides are not designed for people who didn’t see the talk in person. They’re designed to support my words, not some online audience. What’s more, many commented that they found the &lt;em&gt;design of the slides&lt;/em&gt; to be noteworthy. I’m expressly &lt;em&gt;not&lt;/em&gt; a designer.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;You really have to give Zach's post a read, there's a ton of great information in it, and to be honest, I'm loving the design of his slides, the typography really shines.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/r4PboMk3Qe0" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/slide-design-for-developers</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/21</id>
    <published>2011-10-28T22:03:00-05:00</published>
    <updated>2011-10-28T22:03:00-05:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/f5tpYgdWLLs/linens-n-things" />
    <title>Linens 'n Things</title>
    <content type="html">&lt;p&gt;If you'll indulge me, I'd like to take a minute to talk about this little bastard:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;center&gt;
&lt;img src="http://f.cl.ly/items/120l1O1b0e0L1D0v3B3Z/Untitled-2.png" alt="Linen"&gt;&lt;br&gt;
&lt;/center&gt;&lt;p&gt;In recent months, the conversation amongst many of my designer friends has often drifted to something like this:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;What the hell is with all the crazy textures and patterns in Apple's user interfaces lately?&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;I personally don't really mind all the texture, it's usually used fairly tastefully, and doesn't bother me at all.&lt;/p&gt;&lt;p&gt;I gained some insight into Apple's use of texture by reading &lt;a href="http://mrgan.tumblr.com/post/11090229578/steve"&gt;this post&lt;/a&gt; by &lt;a href="https://twitter.com/#!/mrgan"&gt;Nevan Mrgan&lt;/a&gt;. Perhaps we can attribute everything back to the horizontal stripes of OS X's Aqua or the vertical pinstripes of iOS's &lt;code&gt;UITableView&lt;/code&gt; to Steve.&lt;/p&gt;&lt;p&gt;However, ever since I first saw Notification Center, something didn't quite make sense to me. First, a couple of important user interface metaphors in iOS:&lt;/p&gt;&lt;h3&gt;Notification Center&lt;/h3&gt;&lt;p&gt;The metaphor of the main Notification Center panel is that it slides down over whatever content is currently on your device's screen.&lt;/p&gt;&lt;h3&gt;Multitasking Tray&lt;/h3&gt;&lt;p&gt;Here there's a similar interfacing layering metaphor going on. No matter what part of the OS you're in, double-tapping the home button causes whatever content is on your screen to slide up, revealing a "tray" containing icons of your most recently used applications.&lt;/p&gt;&lt;p&gt;Both of these interfaces have our friendly neighborhood linen as their background texture. On their own, this wouldn't be too much of an issue but consider what Apple's goals are with the linen texture. I would argue it is to establish a clear &lt;em&gt;hierarchy&lt;/em&gt; of content and controls, from &lt;em&gt;back&lt;/em&gt; to &lt;em&gt;front&lt;/em&gt;. The linen was used early on as the "underneath" texture of &lt;code&gt;UIScrollViews&lt;/code&gt; and &lt;code&gt;UIWebViews&lt;/code&gt;. &lt;/p&gt;&lt;p&gt;Assuming these goals, take a look at what's really going on here:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;center&gt;
&lt;img src="http://f.cl.ly/items/2v2Q262E1P371x1a2T2H/Untitled-3.png" alt="Strange Z-Order"&gt;&lt;br&gt;
&lt;/center&gt;&lt;p&gt;The linen texture now shows up at &lt;em&gt;multiple&lt;/em&gt; points in the hierarchy. This completely destroys the illusion of seeing &lt;em&gt;behind&lt;/em&gt; or &lt;em&gt;underneath&lt;/em&gt; the layers of the user interface.&lt;/p&gt;&lt;p&gt;I'd love to see Apple remedy this and assign clear layers to the different pieces of the interface.&lt;/p&gt;&lt;p&gt;It could be as simple as revising Notification Center to have a simple black background with beveled section headers, similar to what the fantastic &lt;a href="https://twitter.com/#!/icontwist"&gt;Nik Radjenovic&lt;/a&gt; mocked up and posted &lt;a href="http://dribbble.com/shots/304014-Notification-Center"&gt;on Dribbble&lt;/a&gt;. Shown here:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;center&gt;
&lt;img src="http://f.cl.ly/items/3c0l0p100d232f1a0M1x/Untitled-1.png" alt="MoreSensible Notification Center"&gt;&lt;br&gt;
&lt;/center&gt;&lt;p&gt;Something like what Nik has mocked up would easily establish a &lt;em&gt;top&lt;/em&gt; position for Notification Center, thus restoring balance and order to the force.&lt;/p&gt;&lt;p&gt;Apple designers: please let the reign of the dark lords of linen end soon.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/f5tpYgdWLLs" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/linens-n-things</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/20</id>
    <published>2011-10-28T20:03:00-05:00</published>
    <updated>2011-10-28T20:03:00-05:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/QbLaZmyfi-w/subtle-design-changes-in-ios-5" />
    <title>Subtle Design Changes in iOS 5</title>
    <content type="html">&lt;p&gt;I always find it fun to try to spot all the tiny design differences in Apple's user interfaces whenever a new update comes out.&lt;/p&gt;&lt;p&gt;A blog called &lt;a href="http://stam-design-stam.blogspot.com/"&gt;Design Archive&lt;/a&gt; has put together some comparison shots of iOS 4 and iOS 5 highlighting some of the more fun differences. Normally I would quote the site I'm linking to, but this one is in Japanese, and Google Translate doesn't exactly offer grammatically readable sentences either, so here's a few of the fun ones they found:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;center&gt;

&lt;p&gt;&lt;img src="http://f.cl.ly/items/3d1S3E1S3S1X3A1Q0A31/vm_01_iconbadge.jpeg" alt="Badge Shadow"&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://f.cl.ly/items/3R421G1g1c230g0L3h3p/vm_05_homeicon2.jpeg" alt="Home Icon Space"&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
&lt;/center&gt;&lt;p&gt;I love that Apple's designers revisit things like this so often.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/QbLaZmyfi-w" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/subtle-design-changes-in-ios-5</feedburner:origLink></entry>
  <entry>
    <id>tag:deallocatedobjects.com,2005:Post/19</id>
    <published>2011-10-27T20:07:00-05:00</published>
    <updated>2011-10-27T20:07:00-05:00</updated>
    <link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/deallocatedobjects/~3/dLy17KF524w/css4-selectors" />
    <title>CSS4 Selectors</title>
    <content type="html">&lt;p&gt;Looks like the &lt;a href="http://www.w3.org/Style/CSS/members"&gt;CSS Working Group&lt;/a&gt; has published their &lt;a href="http://www.w3.org/News/2011#entry-9219"&gt;first working draft&lt;/a&gt; of how they'd like CSS4 selectors to work.&lt;/p&gt;&lt;p&gt;Here are some of the highlights:&lt;/p&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"#foo"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// returns first element with ID of foo&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;bar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;":scope &amp;gt; p"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// returns equivalent of "#foo &amp;gt; p"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:matches&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;:link&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;:hover&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;:visited&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:local-link&lt;/span&gt; &lt;span class="c"&gt;/* Matches anything that links to the current page */&lt;/span&gt;
&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:local-link&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="c"&gt;/* Matches any link that is the same domain */&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There's tons more and &lt;a href="http://about.me/dstorey"&gt;David Storey&lt;/a&gt; does a great job of explaining stuff in &lt;a href="http://dstorey.tumblr.com/post/10865123182/selectors4"&gt;his blog post&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/deallocatedobjects/~4/dLy17KF524w" height="1" width="1"/&gt;</content>
    <author>
      <name>Jake Marsh</name>
    </author>
  <feedburner:origLink>http://deallocatedobjects.com/posts/css4-selectors</feedburner:origLink></entry>
</feed>

