<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>Jonathan Saggau&apos;s Blog</title>
      <link>http://www.jonathansaggau.com/blog/</link>
      <description>This Vehicle Powered by 100% Pure Clean-Burning Caffeine</description>
      <language>en</language>
      <copyright>Copyright 2010</copyright>
      <lastBuildDate>Tue, 12 Jan 2010 16:35:18 -0500</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=3.2</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>360idev v3.0</title>
         <description><![CDATA[I'm giving two talks this time!  One on using open source UI that closely resembles those of Apple's private API and another on Augmented Reality with Jonathan Blocksom.  This will make it three in a row for me speaking at this conference and it's gonna be awesome again.  Clear your calendar for April 11-14 and head on over to <a href="http://www.360idev.com/">360idev.com</a> and register.
<br /><br />

o There are fewer than 20 early (Cheap) tickets left for 360|iDev. Register now, save $100 and get the same awesome content for a little less coin. Act fast, these last tickets won't last. When they're gone, the regular price of $599 kicks in.
<br /><br />
o We've got some awesome keynoters lined up (Mike Lee and David Whatley to name two), they'll be worth the price of admission alone!
<br /><br />
o Don't miss sessions from community leaders like Marcus Zarra, Brent Simmons, Joe Pezzillo, and Henry Balanon to name a few. You're not going to find this many awesome speakers under one roof anywhere!
<br /><br />
o Don't miss the parties! Get your room at the Marriott San Jose (bit.ly/360idevhotel) before they're gone! The parties WILL be there after we leave Ebay! 
<br /><br />
o Check out the Schedule, subscribe in iCal to stay up to date!!  http://360idev.com/schedule]]></description>
         <link>http://www.jonathansaggau.com/blog/2010/01/360idev_v30.html</link>
         <guid>http://www.jonathansaggau.com/blog/2010/01/360idev_v30.html</guid>
         <category></category>
         <pubDate>Tue, 12 Jan 2010 16:35:18 -0500</pubDate>
      </item>
            <item>
         <title>They tell me the book is out</title>
         <description><![CDATA[I have never walked into a book store and been able to pick up a book with my name on it.  Pretty soon, though...  There is lots of awesomeness in this book and 1/12 of it is from me.  

<br />
<br />

<iframe src="http://rcm.amazon.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=jonathansagga-20&o=1&p=8&l=as1&m=amazon&f=ifr&md=10FE9736YVPPT7A0FBG2&asins=1430224037" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>


]]></description>
         <link>http://www.jonathansaggau.com/blog/2009/11/they_tell_me_the_book_is_out.html</link>
         <guid>http://www.jonathansaggau.com/blog/2009/11/they_tell_me_the_book_is_out.html</guid>
         <category></category>
         <pubDate>Thu, 12 Nov 2009 18:55:49 -0500</pubDate>
      </item>
            <item>
         <title>My Deck for 360idev</title>
         <description><![CDATA[Thanks to all who attended my talk at <a href="http://www.360idev.com/">360idev</a>.  I think it went rather well and I am grateful to all who attended; the audience makes the talk.  <a href="http://jonathansaggau.com/Saggau360Presentation.zip">Here</a> are the slides and the sample code as promised.  Please read the readme file.
<br />
<br />
I'll also take some time on the plane home tomorrow night to make versions of this sample code without blocks for those who like to kick it old school.  I'll post those here as soon as I can.
<br />
<br />
UPDATE: I've changed the last example to remove the blocks requirement for those who wish to avoid them.  Same download location <a href="http://jonathansaggau.com/Saggau360Presentation.zip">here</a> as before.
<br />
<br />
Note: Be aware that the slides are on a pretty slow internet connection.
<br />
]]></description>
         <link>http://www.jonathansaggau.com/blog/2009/09/my_deck_for_360idev.html</link>
         <guid>http://www.jonathansaggau.com/blog/2009/09/my_deck_for_360idev.html</guid>
         <category>Technology Love</category>
         <pubDate>Wed, 30 Sep 2009 00:20:54 -0500</pubDate>
      </item>
            <item>
         <title>360iDev v. 2.0</title>
         <description><![CDATA[
I am speaking at <a href="http://www.360idev.com/">360iDev</a> again!  Last time in San Diego was a blast.  These guys are really good at putting on a conference where everybody talks to everybody else.  It's all about the after parties, man.  Rock Band, which I'm terrible at despite (because of?) music degrees, is great for bringing peeps together.  
<br />
<br />
I'll be talking about making your iPhone application seem fast even when it's maybe kind of not so fast under the covers.  But wait, there's more (Ron Popeil is my hero).  Besides the expected boatload of awesome speakers and lots of iPhone nerds being in attendance at the actual conference, Mobile Orchard and Noel Llopis are doing a 2 day OpenGL ES class just before the conference.  If you're not going to C4 (two conferences back - to back!) like I am, you should totally get the combo discount and go to the class and then the conference.  <a href="http://360idev-blogpost.eventbrite.com/">Register here</a>.  The price goes up by a hundred clams tomorrow night!
<br />
<br />
<a href='#eventvue' onclick='EV.show()'><img src='http://widgets.eventvue.com/discover/badges/attending_360idevdenver_large.png' border='0' /></a><script type='text/javascript' src='http://widgets.eventvue.com/discover/discover.js?event_id=121&role=attending&size=large' id='eventvue_src'></script><noscript>
<br />
<br />
Powered by <a href='http://www.eventvue.com'>EventVue</a></noscript>
]]></description>
         <link>http://www.jonathansaggau.com/blog/2009/08/360idev_v_20.html</link>
         <guid>http://www.jonathansaggau.com/blog/2009/08/360idev_v_20.html</guid>
         <category></category>
         <pubDate>Sat, 29 Aug 2009 14:33:07 -0500</pubDate>
      </item>
            <item>
         <title>iPhone code signing and multiple clients</title>
         <description>If you have to make a certificate request for a new client or &quot;Team,&quot; avoid making your name the same as your current certificate.  If you have more than one &quot;iPhone Developer: Jonathan Saggau&quot; on your keychain, Xcode doesn&apos;t know which to use for code signing.  I used to swap certs in the keychain when switching between clients, but that proved confusing.  Better to use &quot;Jonathan Saggau (BigCO inc)&quot; or some such when making your cert request.  What you&apos;ll see when you do that is a pseudo-random string appendage to your name that allows certificates from different companies or &quot;Teams&quot; to coexist.  While I&apos;m not sure if this is just a change on Apple&apos;s part (maybe they always add the pseudo-random string now; I dunno) or if the (BigCO inc) string brings the magic.  What I do know is that I no longer have to rejigger my keychain every time I want to build an app for client X after working on the app for client Y.  </description>
         <link>http://www.jonathansaggau.com/blog/2009/08/iphone_code_signing_and_multip.html</link>
         <guid>http://www.jonathansaggau.com/blog/2009/08/iphone_code_signing_and_multip.html</guid>
         <category></category>
         <pubDate>Fri, 28 Aug 2009 19:29:17 -0500</pubDate>
      </item>
            <item>
         <title>Stars, man.  Stars.</title>
         <description><![CDATA[<a href="http://videolicious.tv/2009/06/creation-from-destruction/">This</a> reminds me of my favorite final exam question from University. Paraphrased: Trace the calcium in your teeth from the big bang to the end of the universe.  I took some cool classes.  ]]></description>
         <link>http://www.jonathansaggau.com/blog/2009/06/stars_man_stars.html</link>
         <guid>http://www.jonathansaggau.com/blog/2009/06/stars_man_stars.html</guid>
         <category></category>
         <pubDate>Wed, 24 Jun 2009 16:17:24 -0500</pubDate>
      </item>
            <item>
         <title>He&apos;s baaaaaack</title>
         <description><![CDATA[Daniel Lyons appears to have resurrected fake Steve.  Perhaps it's the new liver, maybe it's the new book.  Either way...

<a href="http://fakesteve.blogspot.com/">He's back, bitches</a>.]]></description>
         <link>http://www.jonathansaggau.com/blog/2009/06/hes_baaaaaack.html</link>
         <guid>http://www.jonathansaggau.com/blog/2009/06/hes_baaaaaack.html</guid>
         <category></category>
         <pubDate>Tue, 23 Jun 2009 12:07:09 -0500</pubDate>
      </item>
            <item>
         <title>Useful bash foo with subversion</title>
         <description><![CDATA[<p>I've been a command-line user of <a href="http://subversion.tigris.org/">subversion</a> (svn) for some time and have long enjoyed these little bits of bash foo.  </p>

<h1>Stripping .svn directories</h1>
I often start one-off little test projects in my private slush svn repository and then move them into their own repository for further development as (or if) they grow up.  Sometimes you'll want to get rid of svn's footprints in a working directory.  
<pre>
rm -rfv `find . -name *\.svn`
</pre>
The <em>find . -name *\.svn</em> finds all of the <em>.svn</em> folders that svn uses to track the repository and with the help of those handy back-tics, <em>rm -rv</em> does the recursive removal of svn tracking directories.

<h1>Adding new files</h1>
During that early "making lots of new stuff" phase,  I often generate quite a number of files that need to be added to svn at once.  This is one of those times where having (say) class files in their own subdirectory is nice.  Running this command will <em>svn add</em> every file that isn't currently being tracked by svn in the current directory.
<pre>
svn add `svn stat |grep \? |awk '{print $2}'`
</pre>
Grep finds every <em>svn stat</em> output line that includes a question mark (meaning the item is not currently under version control) and pipes it through <em>awk '{print $2}'</em>, which shows only the text (the filename) from the second column of the svn stat output.  The back-tics and svn add finish the magic.

<h1>Using a Mulligan</h1>
I'll use something similar to the above along with svn revert to rollback a working copy "all the way."  Say you're experimenting in your working directory; you've added a few files, hit a dead end, and want to revert the whole tree as well as delete anything you've added.  In other words, you're looking for a full-on "do over."  Using <em>svn revert --recursive</em> will revert any files that svn is tracking, but will leave anything svn is not tracking alone, so we have to also remove those files.
<pre>
svn revert --recursive && rm -rf `svn stat |grep \? |awk '{print $2}'`
</pre>

<p>As with any other nerd foo, make sure that you really want to do what you're asking for when you use these commands.  These make my life with svn just a little easier.<br />
</p>]]></description>
         <link>http://www.jonathansaggau.com/blog/2009/02/useful_bash_foo_with_subversio.html</link>
         <guid>http://www.jonathansaggau.com/blog/2009/02/useful_bash_foo_with_subversio.html</guid>
         <category>Notes to self</category>
         <pubDate>Tue, 24 Feb 2009 16:31:56 -0500</pubDate>
      </item>
            <item>
         <title>Brain clarity through body hacking and distractions</title>
         <description><![CDATA[<p>or... how I make my brain work more gooder*.  </p>

<p>I've been known to fight foggy brain from time to time.  You know what I mean?  That decidedly uncool feeling of "can't do crap, too tired and dumb" that only seems to creep in when the to do list is longer than my ... um ... arm.  Lately, though that feeling has struck me less and less often and I think I know why.  I've lately zeroed - in on the right set of habits for me.  Every now and again, I'll pick one of the topics below and write a short post expanding the topic.  For now, though, just a list of things that work for me.<br />
</p>]]></description>
         <link>http://www.jonathansaggau.com/blog/2009/02/brain_clarity_through_body_hac.html</link>
         <guid>http://www.jonathansaggau.com/blog/2009/02/brain_clarity_through_body_hac.html</guid>
         <category>Introspection</category>
         <pubDate>Thu, 19 Feb 2009 18:49:52 -0500</pubDate>
      </item>
            <item>
         <title>iPhone responsiveness and memory usage</title>
         <description><![CDATA[I recently answered a question on a private mailing list about how to make a network - based (XML parsing and such) iPhone application more responsive.  I've been encouraged to post it here by a few folks (Thanks, guys!  You know who you are.).  So, I figure "why not?"  Here you go.  (Slightly modified)
<br /><br />
The original question (paraphrased):  I have an iPhone application that downloads XML data from the web, parses it, and loads it all into memory.  I notice that my app is a little sluggish and that it crashes as odd times, probably due to having too much information in memory.  There are other apps that do this kind of thing on the app store and I notice that many of them are more responsive than mine.  How does one make one's "network cloud-based" app more responsive?
<br /><br />
My Answer
<br /><br />
You're running into a few of the more common problems with embedded
programming.  Here are a few little tricks that have helped me in
general (done a little embedded Linux programming, too) and on the
iPhone.
<br /><br />
<h1>Regarding bandwith / data size / responsiveness as a result of downloading data</h1>
You'll be surprised that the actual downloading of anything but pretty
large amounts of data is pretty fast by itself.  The part that is slow
is the stuff that happens before the download even starts.  Edge / 3G
latency sucks and even DNS lookup is really really really (really?)
slow on the iPhone in almost all circumstances AFAICT.  I've found
that strategies that download more data at a time while discarding
unneeded data that you're getting on the fly, rather than making
multiple requests for specific small chunks of data has been a
performance win.  That's a little counter intuitive.
<br /><br />
<h1>Regarding memory</h1>
There is a reason the NSXMLDocument doesn't exist on the iPhone.  You
can get away with throwing a smallish XML tree into memory and go
ahead and do it if it simplifies your life for small data sets, but
the combination of larger XML trees in memory and whatever else
(including UI) you have cached in memory can cause you to hit the
memory ceiling at weird times; that's probably what's happening when
your app crashes.  The app will get terminated if you don't release
memory when you get these memory warnings.  Take a look at apples
"Books" SQLite example.  They're not doing exactly what you're looking
for there (no network code), but the handling of memory works as
they're doing it.  They load data from a SQLite database lazily, but
keep that data in memory until the application closes, until the
owning object is deallocated, or when memory gets scarce.  When the
app gets those fun memory warnings, they save any changed data and
release everything that they can get back out of the database later.
This is similar in theory to the lazy loading of views we've all grown
accustomed to (and that is partly handled for you).  When a view
controller gets a memory warning, its views are released by default if
they don't have a superview, which is why you have to figure out if
the view is still there every time you (re)load it.  Doing something
similar with your XML data by saving it somewhere when you get a
memory warning and releasing the associated data structure, reloading
it piecemeal from disk as needed (be it an SQLite database or
what-have-you) works pretty well and appears to be the recommended
approach.  Ultimately, figuring out how much and which data to put on
"disk" and/or in memory (and when) is the biggest PITA in embedded
programming, but it's also the place where you're going to get the
responsiveness you're looking for.
<a href="http://furbo.org/2008/08/27/dealing-with-memory-loss-the-cleanup/">http://furbo.org/2008/08/27/dealing-with-memory-loss-the-cleanup/</a>
<br /><br />
<h1>Regarding UI responsiveness</h1>
Don't use a lot of subviews and avoid opacity.  Instead draw the views
yourself...  Draw once, if possible.  (
<a href="http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/">http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/</a>
)
<br /><br />
<h1>Other tricks</h1>
Use Instruments and Shark with the code running ON THE DEVICE to see
how much memory you're using, how much disk access you're doing, and
what is actually going on timing-wise.  Optimize those specific areas
profiling the simulator (faster edit, compile, test cycle).  Rinse (on
the device) and repeat.
<br /><br />
Put breakpoints in memory warning methods and figure out when (and
why) it's happening (again, on the device).  Is it when you download
data, load view A, then view B?  Can you release view A's data when it
goes off the screen to keep the memory footprint from growing?  Do you
need the whole tree for view B?  Can you download it all, dump to
disk, and load lazily?  Blah blah blah.  This stuff can get tricky,
but try the obvious things first.  Find out what is causing the memory
ceiling problem and you're well on your way.  :)
<br /><br />
Using the <a href="http://clang.llvm.org/StaticAnalysis.html">LLVM/Clang static analyzer</a> has saved me a lot of headaches as
well.  It's easy to forget that you have a web view somewhere with a
bunch of cached data floating off screen causing the device to go bork
bork...
<br /><br />
Cache yesterday's data, load, and display it before going out to the
network for today's data.  Use a progress indicator and some other UI
indicator to let the user know that you're updating from the network
and that they're looking at what may be old data.  Do this
asynchronously.  When it comes to displaying data from the network,
sometimes you have to fake it 'til you make it.  You don't have to
rewrite Google gears or anything, just throw everything you need from
the server onto disk and reload it when the app launches.
<br /><br />
<a href="http://gusmueller.com/blog/archives/2008/03/fmdb_for_iPhone.html">Gus Mueller's FMDB rocks</a> for SQLite work.  I have a version with
embedded Dtrace probes if anybody wants it.  (This will have to be the subject of a later article after I find some time to update my version to Gus' latest version and to send it to him to look at / integrate if he wishes first...)]]></description>
         <link>http://www.jonathansaggau.com/blog/2009/01/iphone_responsiveness_and_memo.html</link>
         <guid>http://www.jonathansaggau.com/blog/2009/01/iphone_responsiveness_and_memo.html</guid>
         <category>Cocoa</category>
         <pubDate>Sat, 03 Jan 2009 15:30:42 -0500</pubDate>
      </item>
            <item>
         <title>Enumerating and visualizing all fonts on iPhone</title>
         <description><![CDATA[When you're designing custom views or otherwise theming your iPhone application, it's nice to be able to see all of the available fonts.  I couldn't find anything online that showed them, so I made my own little application.  You can get it at <a href="http://jonathansaggau.com/FontListViz.tgz">FontListViz.tgz</a>.
<br /><br /><br /><br />
<img src="http://www.jonathansaggau.com/blog/images/Screenshot 2008.12.04 01.27.59.jpg" alt="Screenshot 2008.12.04 01.27.59.jpg" border="0" width="320" height="480" />
<br /><br /><br /><br />
It's pretty well dirt simple.  Get all font family names, then get all of the font names in each family and store them in an array, then put each font name's text in a table view cell and set the table view cell's font using <em>-[UIFont fontWithName:size:]</em> and, well, Bob's your uncle -- instant very simple font viewer.  
<pre>

- (void)viewDidLoad 
{
    [super viewDidLoad];
    self.fontNames = [NSMutableArray array];
    NSArray *fontFamilyNames = [UIFont familyNames];
    for (NSString *familyName in fontFamilyNames) {
        NSLog(@"familyName = %@", familyName);
        NSArray *names = [UIFont fontNamesForFamilyName:familyName];
        NSLog(@"FontNames = %@", fontNames);
        [self.fontNames addObjectsFromArray:names];
    }
}
.
.
.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    
    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }
    
    NSString *name = [self.fontNames objectAtIndex:indexPath.row];
    cell.text = name;
    cell.font = [UIFont fontWithName:name size:14];
    return cell;
}

</pre>

]]></description>
         <link>http://www.jonathansaggau.com/blog/2008/12/enumerating_and_visualizing_al.html</link>
         <guid>http://www.jonathansaggau.com/blog/2008/12/enumerating_and_visualizing_al.html</guid>
         <category>Cocoa</category>
         <pubDate>Thu, 04 Dec 2008 01:37:00 -0500</pubDate>
      </item>
            <item>
         <title>Microsoft Office Formats won&apos;t load on the iPhone simulator</title>
         <description><![CDATA[Just an FYI: 
<br /><br />
The UIWebView in the simulator remains blank when loading MS office formats like word (.doc), excel (.xls), powerpoint (.ppt) (and possibly iWork formats as well -- Go Go Gadget Google indexer), but it does work on the device itself.  Caveat coder.  Don't pull your hair out for too long wondering why your files don't show up on the simulator.  They will once you compile and install on the phone.

<pre>
    NSString *filePath = @"pathToAnExcelDocument.xls";
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath] == YES) 
    {
        NSLog(@"Loading %@", filePath);
        NSURL *pathURL = [NSURL fileURLWithPath:filePath];
        //Warning: this doesn't load into the view on the simulator
        NSURLRequest *pathURLRequest = [NSURLRequest requestWithURL:pathURL];
        [someWebView loadRequest:pathURLRequest];
    }
</pre>

radar://6417654

]]></description>
         <link>http://www.jonathansaggau.com/blog/2008/12/microsoft_office_formats_wont.html</link>
         <guid>http://www.jonathansaggau.com/blog/2008/12/microsoft_office_formats_wont.html</guid>
         <category></category>
         <pubDate>Thu, 04 Dec 2008 01:14:18 -0500</pubDate>
      </item>
            <item>
         <title>touchengine -- iPhone Google App Engine communication</title>
         <description><![CDATA[My friend <a href="http://noahgift.com/">Noah Gift</a>, an awesome python programmer who wrote the very popular book <a href="http://www.amazon.com/gp/product/0596515820?ie=UTF8&tag=jonathansagga-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0596515820">Python for Unix and Linux System Administration</a><img src="http://www.assoc-amazon.com/e/ir?t=jonathansagga-20&l=as2&o=1&a=0596515820" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
 and I are working on a new open source framework that aims to facilitate communication between the <a href="http://developer.apple.com/iphone/">iPhone SDK</a> and <a href="http://appengine.google.com/">Google App engine</a>.  In the spirit of the open source mantra, "release early, release often," we've made it available <a href="http://code.google.com/p/touchengine/">here on Google Code</a> and is <a href="http://www.opensource.org/licenses/mit-license.php">MIT licensed</a>.  We're also working on a couple of apps that use the framework; we plan to eat our own dogfood so-to-speak.

<h1>Current features</h1>
<ul>
<li>Includes a slightly modified version of the <a href="http://docs.python.org/dev/library/plistlib.html">python plist library</a> to allow syndication of data from Google App Engine to the iPhone via xml plists. </li>
<li>Includes a generically useful caching plist <a href="http://code.google.com/p/touchengine/source/browse/#svn/trunk/iPhone/PlistLoader">downloader library</a> for the iPhone SDK that keeps the user in sync with Google App Engine data and allows offline access to that data.</li>
</ul>

<h1>Example Code</h1>
<ul>
<li><a href="http://code.google.com/p/touchengine/source/browse/#svn/trunk/GAE/isonnet"><em>isonnet</em></a>, a Google App Engine application that syndicates Shakespeare's Sonnets in plist form for consumption by the iPhone app.
<li><a href="http://code.google.com/p/touchengine/source/browse/#svn/trunk/iPhone/Sonnet"><em>Sonnet</em></a>, a viewer application for the iPhone, which we're going to release soon for free on the app store, that connects to our Google App Engine site to download, cache, and display Shakespeare's Sonnets.</li>
</ul>

<h1>Future Features / Informal Roadmap</h1>
<ul>
<li>Authentication with Google App Engine with the user's Google ID </li>
<li>Two-way communication and data sync between app engine and the iPhone SDK</li>
<li>Integration and automatic plist syndication of underlying Google App Engine Data Storage and objects </li>
<li>Support for Application skinning through plist syndication </li>
<li>Support for storage of the iPhone user's application preferences on Google App Engine.</li>
</ul>
Look for our article on <a href="http://www.ibm.com/developerworks/">IBM DeveloperWorks</a> coming soon.
<br/><br/>
If you have any questions or comments for us, please feel free to contact me at jonathan ((at)) thisdomainyou'reonrightnow ((dot com)).
<script type="text/javascript" src="http://www.assoc-amazon.com/s/link-enhancer?tag=jonathansagga-20&o=1">
</script>
<noscript>
    <img src="http://www.assoc-amazon.com/s/noscript?tag=jonathansagga-20" alt="" />
</noscript>

]]></description>
         <link>http://www.jonathansaggau.com/blog/2008/11/touchengine_iphone_google_app.html</link>
         <guid>http://www.jonathansaggau.com/blog/2008/11/touchengine_iphone_google_app.html</guid>
         <category>Python</category>
         <pubDate>Sat, 15 Nov 2008 14:53:48 -0500</pubDate>
      </item>
            <item>
         <title>Reverse DNS on the iPhone</title>
         <description><![CDATA[Reverse DNS via the usual OS X means doesn't seem to work on the iPhone.  It looks like this is a known bug/limitation. <a href="https://devforums.apple.com/message/7534#7534">The new apple developer forums</a> (login required) have a thread that's dedicated to the problem.  (rdar://problem/5929766 is mentioned there).  Apple seems to have used the eraser on some other of their DNS code on the iPhone. <a href="http://www.saurik.com/id/3">Saurik</a> has an interesting hack to work - around a perhaps related change in DNS behavior. 
<br /><br />
You can actually get reverse DNS lookup on the iPhone to work using <a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/res_query.3.html">res_query</a> (which is in libresolv, so make sure you link against <em>libresolv.dylib</em>) to query DNS and <em>dns_parse_packet</em>, which you'll find in dns_utils.h, to do the work of parsing out the DNS server reply works rather well.  I could not get the recommended tools in <em>dns.h</em> to work, but I did discover that <em>res_query</em> returns the same raw reply from the DNS Server that <em>dns_parse_packet</em> expects from the utilities in <em>dns.h</em>. The code:
]]></description>
         <link>http://www.jonathansaggau.com/blog/2008/11/reverse_dns_on_the_iphone.html</link>
         <guid>http://www.jonathansaggau.com/blog/2008/11/reverse_dns_on_the_iphone.html</guid>
         <category>Cocoa</category>
         <pubDate>Fri, 14 Nov 2008 18:43:59 -0500</pubDate>
      </item>
            <item>
         <title>iPhone Live!!!</title>
         <description><![CDATA[I'm speaking at the <a href="http://en.oreilly.com/iphonelive2008">iPhone Live</a> conference with my friend Noah Gift.  I'm happy to announce that Aaron Hillegass from the <a href="http://www.bignerdranch.com/">Big Nerd Ranch</a> has just agreed to sponsor the talk.  Thanks Aaron!
<br /><br />
Today is the last day for attendees to save $125 off registration. 
Additionally, people who register can save an extra 20% by entering ip08gd20 at checkout - bringing the early reg total to a cool and reasonable $500.
<br /><br />
iPhoneLive
San Jose, CA -- November 18, 2008
Redefining Mobile Computing
<br /><br />]]></description>
         <link>http://www.jonathansaggau.com/blog/2008/10/iphone_live.html</link>
         <guid>http://www.jonathansaggau.com/blog/2008/10/iphone_live.html</guid>
         <category></category>
         <pubDate>Wed, 15 Oct 2008 17:01:17 -0500</pubDate>
      </item>
      
   </channel>
</rss>
