<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>I write software to make lazy people lazier.



  var _gaq = _gaq || [];
  _gaq.push([‘_setAccount’, ‘UA-104776-13’]);
  _gaq.push([‘_trackPageview’]);

  (function() {
    var ga = document.createElement(‘script’); ga.type = ‘text/javascript’; ga.async = true;
    ga.src = (‘https:’ == document.location.protocol ? ‘https://ssl’ : ‘http://www’) + ‘.google-analytics.com/ga.js’;
    var s = document.getElementsByTagName(‘script’)[0]; s.parentNode.insertBefore(ga, s);
  })();</description><title>Hi, I'm Jeremy Foo.</title><generator>Tumblr (3.0; @ornyx)</generator><link>http://the.ornyx.net/</link><item><title>Code-fu mantra</title><description>&lt;p&gt;Lately, I&amp;#8217;ve been living by some mantras when it comes to dealing with code and large code bases. Not sure if its for everyone, but it works for me.&lt;/p&gt;
&lt;p&gt;This mantras of course pertain to Objective-C and the Mac in general.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Subclass as little as possible, composition is better.&lt;/li&gt;
&lt;li&gt;Keep implementation files around 500 lines of actual real code, beyond that, you might want to think of refactoring into logical components.&lt;/li&gt;
&lt;li&gt;Group logical components by systems.&lt;/li&gt;
&lt;li&gt;Readability trumps &amp;#8220;generalization&amp;#8221;.&lt;/li&gt;
&lt;li&gt;Curly brackets are okay if code blocks are greater than 1 single line of code.&lt;/li&gt;
&lt;li&gt;Return as early as possible (&lt;a href="http://www.wilshipley.com/blog/2005/08/pimp-my-code-part-4-returning-late-to.html"&gt;Wil Shipley&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Companion to returning as early as possible, try not to nest code blocks 3 levels deep.&lt;/li&gt;
&lt;li&gt;Async is not always the best solution (refer to mantra #7).&lt;/li&gt;
&lt;li&gt;Design for self containment, but more importantly, in areas of responsibility.&lt;/li&gt;
&lt;li&gt;Designing public APIs (things that will not change) will probably give you decoupled objects.&lt;/li&gt;
&lt;li&gt;Retain/Release is better than autorelease (until ARC of course).&lt;/li&gt;
&lt;li&gt;Protocols are awesome.&lt;/li&gt;
&lt;li&gt;Composition of data structures at the expense of space might save you time.&lt;/li&gt;
&lt;li&gt;Less objects more primitive types.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Thoughts comments? Eager to hear about yours.&lt;/p&gt;</description><link>http://the.ornyx.net/post/23534285786</link><guid>http://the.ornyx.net/post/23534285786</guid><pubDate>Tue, 22 May 2012 15:25:00 +0800</pubDate><category>code</category><category>mantra</category><category>philisophy</category><category>object</category><category>systems design</category><category>api design</category><category>api</category><dc:creator>andthirdly</dc:creator></item><item><title>libspatialite for iOS</title><description>&lt;a href="https://github.com/echoz/xlibspatialite"&gt;libspatialite for iOS&lt;/a&gt;: &lt;p&gt;Made a static library project over the weekend to build libspatialite for iOS. Includes GEOS and PROJ though they have to be actually linked into and set not to be omitted to get those into the libspatialite target.&lt;/p&gt;</description><link>http://the.ornyx.net/post/23341342276</link><guid>http://the.ornyx.net/post/23341342276</guid><pubDate>Sat, 19 May 2012 17:28:02 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>10.8: Objective-C Enhancements</title><description>&lt;p&gt;&lt;a class="tumblr_blog" href="http://cocoaheads.tumblr.com/post/17719985728/10-8-objective-c-enhancements"&gt;cocoaheads&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;h3 class="jump"&gt;Objective-C Enhancements&lt;/h3&gt;
&lt;p&gt;OS X v10.8 includes the following enhancements to Objective-C:&lt;/p&gt;
&lt;ul class="ul"&gt;&lt;li class="li"&gt;
&lt;p&gt;Default synthesis of accessor methods for declared properties&lt;/p&gt;
&lt;/li&gt;
&lt;li class="li"&gt;
&lt;p&gt;Type-safe enums&lt;/p&gt;
&lt;/li&gt;
&lt;li class="li"&gt;
&lt;p&gt;New Core Foundation attributes that allow you to specify custom retain semantics&lt;/p&gt;
&lt;/li&gt;
&lt;li class="li"&gt;
&lt;p&gt;Object literals for &lt;code&gt;NSArray&lt;/code&gt;, &lt;code&gt;NSDictionary&lt;/code&gt;, and &lt;code&gt;NSNumber&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li class="li"&gt;
&lt;p&gt;Streamlined object subscripting&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="importantbox clear"&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt; Beginning in OS X v10.8, garbage collection is deprecated.&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;Can&amp;#8217;t help be reblog this. Bloody marvelous. &lt;/p&gt;</description><link>http://the.ornyx.net/post/17751660589</link><guid>http://the.ornyx.net/post/17751660589</guid><pubDate>Fri, 17 Feb 2012 12:34:56 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>MNCoder</title><description>&lt;p align="center"&gt;&lt;img src="http://media.tumblr.com/tumblr_ly92uhARAx1qa4brm.png"/&gt;&lt;/p&gt;
&lt;p&gt;Its been about 3 weeks, but I&amp;#8217;m finally done with a piece of work that will be used (hopefully) in the iCloud capable version of &lt;a href="http://www.mindnode.com"&gt;Mindnode&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://github.com/echoz/mncoder"&gt;MNCoder&lt;/a&gt; is what I&amp;#8217;d call a clever hack using NSKeyedArchiver and NSKeyedUnarchiver to help with portability of certain Apple classes between iOS and the Mac. If you worked on both platforms, you&amp;#8217;d know that iOS has its own implementation for colors and fonts. With iOS 4 this has been extended to NSAttributedStrings that take Core Text attributes instead of the nicer AppKit additions to NSAttributedStrings.&lt;/p&gt;
&lt;p&gt;While I&amp;#8217;d admit this is a somewhat complicated way of going about things, 2KSLOC to be exact, I figured this was the most straightforward and intuitive way to help people understand and possibly contribute additional code in the future.&lt;/p&gt;
&lt;p&gt;What MNCoder does is that it uses a neutral platform independent NSCoding compliant object to store the base attributes that is needed to reconstruct an equivalent on either platform. Using #ifs, the object will give you the appropriate object. Adding to the system is NSCoder which helps with the finding and replacement of objects at runtime when doing serialization.&lt;/p&gt;
&lt;p&gt;Its pretty much like old school language translation. Translate your source language into a intermediate version and then translate that to the target language. Nothing too fancy and easily understood.&lt;/p&gt;
&lt;p&gt;The work is released under a BSD license which Markus has nicely given his approval of so here&amp;#8217;s hoping it&amp;#8217;ll have more contributors as it goes along.&lt;/p&gt;
&lt;p&gt;Nice side effect of this is that I&amp;#8217;ve had extensive time with Core Text and I&amp;#8217;d say its pretty fun.&lt;/p&gt;</description><link>http://the.ornyx.net/post/16345535268</link><guid>http://the.ornyx.net/post/16345535268</guid><pubDate>Mon, 23 Jan 2012 20:11:00 +0800</pubDate><category>mncoder</category><category>portability</category><category>ios</category><category>mac</category><category>classes</category><category>objects</category><category>translation</category><category>interoperability</category><category>nscolor</category><category>uicolor</category><category>nsfont</category><category>uifont</category><category>nsattributedstring</category><dc:creator>andthirdly</dc:creator></item><item><title>Befriending Core Text</title><description>&lt;a href="http://www.cocoanetics.com/2011/01/befriending-core-text/"&gt;Befriending Core Text&lt;/a&gt;</description><link>http://the.ornyx.net/post/15890211525</link><guid>http://the.ornyx.net/post/15890211525</guid><pubDate>Mon, 16 Jan 2012 00:52:57 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>The Word of Notch: Coding skill and the decline of stagnation</title><description>&lt;a href="http://notch.tumblr.com/post/15782716917/coding-skill-and-the-decline-of-stagnation"&gt;The Word of Notch: Coding skill and the decline of stagnation&lt;/a&gt;: &lt;p&gt;&lt;a class="tumblr_blog" href="http://notch.tumblr.com/post/15782716917/coding-skill-and-the-decline-of-stagnation"&gt;notch&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I am a decent programmer. I know a decent amount of computer science theory, I can type correct code fairly easy. I don’t let my classes expand too much. But I still struggle some with math, and I have a tendency to have too many cross-dependencies in my code.&lt;/p&gt;
&lt;p&gt;I used to think I was an awesome…&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://the.ornyx.net/post/15819947803</link><guid>http://the.ornyx.net/post/15819947803</guid><pubDate>Sat, 14 Jan 2012 16:41:38 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>Avoiding duplicate symbol errors during linking by removing classes from static libraries</title><description>&lt;a href="http://atnan.com/blog/2012/01/12/avoiding-duplicate-symbol-errors-during-linking-by-removing-classes-from-static-libraries/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed: atnan-articles (Atnan)"&gt;Avoiding duplicate symbol errors during linking by removing classes from static libraries&lt;/a&gt;: &lt;p&gt;Oh this is a gem!&lt;/p&gt;</description><link>http://the.ornyx.net/post/15727597313</link><guid>http://the.ornyx.net/post/15727597313</guid><pubDate>Fri, 13 Jan 2012 01:22:21 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>A little advice to companies</title><description>&lt;p&gt;Before you engage a developer to build a mobile app for you, consider the following points,&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Are you shoving your web page into an app?&lt;/li&gt;
&lt;li&gt;Are you providing a catalogue of products/services/etc. with no useful way to purchase them beyond being just a showcase?&lt;/li&gt;
&lt;li&gt;Are you adding a “game” so that people will actually use your app?&lt;/li&gt;
&lt;li&gt;Are you using the app as nothing more than a marketing effort?&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;If you have answered yes to the above, here’s some cost saving advice.&lt;/p&gt;
&lt;ol&gt;&lt;/ol&gt;&lt;p&gt;Don’t do it.&lt;/p&gt;</description><link>http://the.ornyx.net/post/15493394600</link><guid>http://the.ornyx.net/post/15493394600</guid><pubDate>Mon, 09 Jan 2012 11:34:23 +0800</pubDate><category>freelance</category><category>work</category><category>advice</category><category>companies</category><category>SMEs</category><category>not to do</category><dc:creator>andthirdly</dc:creator></item><item><title>The iPhone Tab Bar</title><description>&lt;a href="http://www.significantpixels.com/2011/04/04/the-iphone-tab-bar/"&gt;The iPhone Tab Bar&lt;/a&gt;: &lt;p&gt;When designers get bored. Or a more sane way to do tab bars.&lt;/p&gt;</description><link>http://the.ornyx.net/post/15493759565</link><guid>http://the.ornyx.net/post/15493759565</guid><pubDate>Sun, 08 Jan 2012 13:16:38 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>Mobile Progressive playback: An atom story.</title><description>&lt;a href="http://fabiensanglard.net/mobile_progressive_playback/index.php"&gt;Mobile Progressive playback: An atom story.&lt;/a&gt;: &lt;p&gt;For the people working with code that has to do with video.&lt;/p&gt;</description><link>http://the.ornyx.net/post/15380699009</link><guid>http://the.ornyx.net/post/15380699009</guid><pubDate>Fri, 06 Jan 2012 11:30:34 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>Don't be STUPID: GRASP SOLID!</title><description>&lt;a href="http://nikic.github.com/2011/12/27/Dont-be-STUPID-GRASP-SOLID.html"&gt;Don't be STUPID: GRASP SOLID!&lt;/a&gt;</description><link>http://the.ornyx.net/post/15354643610</link><guid>http://the.ornyx.net/post/15354643610</guid><pubDate>Fri, 06 Jan 2012 03:13:22 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>iOS and Mac Development Link Roundup: December 2011 – Ole Begemann</title><description>&lt;a href="http://oleb.net/blog/2012/01/ios-and-mac-development-link-roundup-december-2011/"&gt;iOS and Mac Development Link Roundup: December 2011 – Ole Begemann&lt;/a&gt;: &lt;p&gt;Such a gem.&lt;/p&gt;</description><link>http://the.ornyx.net/post/15133342447</link><guid>http://the.ornyx.net/post/15133342447</guid><pubDate>Mon, 02 Jan 2012 02:31:49 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>A Core Data Primer</title><description>&lt;p&gt;Everyone’s first encounter with Core Data would be through books and the occasional glance at the documentation. No one tells you what are the base tips in bullet points that you need to know. Having worked on Core Data for the past 9 months, I thought it’ll be a service to the community to at least commit something to Google’s memory.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Everything except NSManagedObjectContext is thread safe.&lt;/li&gt;
&lt;li&gt;Create NSManagedObjectContext in new threads prior to using them. Pass them the NSPersistentStoreCoordinator of any NSManagedObjects across threads is fine.&lt;/li&gt;
&lt;li&gt;NSManagedObjectID is your friend. Always use it if you are doing threading.&lt;/li&gt;
&lt;li&gt;NSManagedObjectID is sometimes temporary. Use obtainPermanentObjectIDs to ensure that they are permanent. &lt;/li&gt;
&lt;li&gt;Getting a permanent ID might cost disk access so use wisely.&lt;/li&gt;
&lt;li&gt;Process cross context saving on the thread that the NSManagedObjectContext was created.&lt;/li&gt;
&lt;li&gt;Instrument’s time profiler is your friend to find where Core Data calls are taking a long time.&lt;/li&gt;
&lt;li&gt;Additionally, you can also get SQL statements that are generated as debug messages in console by turning on a flag.&lt;/li&gt;
&lt;li&gt;Use as little relationships as possible when fetching objects. Easier to fetch criteria based on the actual operating object and have the fetch also fetch all relationships.&lt;/li&gt;
&lt;li&gt;Sometimes it is easier to spin off a thread to fetch results and process them before calling the completion block with results.&lt;/li&gt;
&lt;li&gt;Have a manager to handle all Core Data fetching of objects instead of being smart and trying to have individual managed object subclasses handle everything.&lt;/li&gt;
&lt;li&gt;NSFetchedResultsController is sometimes a bitch when sending notifications of changed content. Don’t use UITableView’s reloadSectionsWithAnimation and its siblings when crashy happens.&lt;/li&gt;
&lt;li&gt;Don’t look into [NSManagedObjectContext registeredObjects] to get objects back. They might already have been deleted but still cached. &lt;a href="http://the.ornyx.net/post/4413076718/checkregisteredobjectsbefore?40aa0600"&gt;Stupid stupid me&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Always test Core Data performance on device.&lt;/li&gt;
&lt;li&gt;Always do fetches on entities that you are filtering criteria for then use inverse relationships that are prefetched to get the data you really want (Basically think topsy turvy; less database joins the better because this is an object graph).&lt;/li&gt;
&lt;/ul&gt;</description><link>http://the.ornyx.net/post/13490832872</link><guid>http://the.ornyx.net/post/13490832872</guid><pubDate>Tue, 29 Nov 2011 13:57:00 +0800</pubDate><category>core data</category><category>primer</category><category>ios</category><category>mac</category><category>development</category><category>programming</category><category>tips</category><dc:creator>andthirdly</dc:creator></item><item><title>Check registeredObjects before excuteFetchRequest:Error:</title><description>&lt;p&gt;Not too sure if this is the right way of doing this, or if anyone has even tried, but be sure to check the registeredObjects NSArray of the NSManagedContext prior to fetching stuff. This of course only applies to SQLite backed stores, and this is done to reduce SQLite queries and inevitably disk I/O.&lt;/p&gt;
&lt;p&gt;You can effectively query the registeredObjects using almost the same predicate as your subclassed NSManagedObjects in order to ensure that the NSManagedObject you want is the same.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;Here’s some code to describe what I’m talking about.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;+(ManagedLocation *)locationWithCoord:(CLLocationCoordinate2D)coord 
                       managedContext:(NSManagedObjectContext *)moc {

    // loop through registered objects for the type 
    // you want and if they match your criteria

    // blocks rock!

    NSSet *result = [[moc registeredObjects] objectsPassingTest:^BOOL(id obj, BOOL *stop) {
        if ([obj isKindOfClass:[ManagedLocation class]]) {
            if ((((ManagedLocation *)obj).latValue == coord.latitude) &amp;amp;&amp;amp; 
                (((ManagedLocation *)obj).lngValue == coord.longitude)) {
                return YES;
            }
        }
        return NO;
    }];

    // so if it doesn't exist. i guess we will have
    // to fetch off the sqlite store

    if ([result count] == 0) {
        result = [moc fetchObjectsForEntityName:[ManagedLocation entityName] 
                                  withPredicate:@"(lat == %lf) &amp;amp;&amp;amp; (lng == %lf)", coord.latitude, coord.longitude];
    }

    // final check for existence.
    //
    // if it doesn't exist, create a new ManagedObject
    //  and return it for population of values.

    if ([result count] == 1) {
        return [result anyObject];
    } else {
        NSEntityDescription *locEntity = [NSEntityDescription entityForName:[ManagedLocation entityName] 
                                                     inManagedObjectContext:moc];

        ManagedLocation *loc = [[[ManagedLocation alloc] initWithEntity:locEntity
                                         insertIntoManagedObjectContext:moc] autorelease];

        loc.latValue = coord.latitude;
        loc.lngValue = coord.longitude;

        return loc;
    }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So yeah. I was able to reduce by an order of magnitude, the time spent creating stuff.&lt;/p&gt;</description><link>http://the.ornyx.net/post/4413076718</link><guid>http://the.ornyx.net/post/4413076718</guid><pubDate>Thu, 07 Apr 2011 18:07:00 +0800</pubDate><category>core data</category><category>ios</category><category>mac</category><category>object graph</category><category>persistence</category><category>nsfetchrequest</category><category>nsmanagedobjectcontext</category><category>nsmanagedobject</category><dc:creator>andthirdly</dc:creator></item><item><title>fork();</title><description>&lt;p&gt;Some exciting things are happening and I&amp;#8217;m at the brunt of it. Will reveal more when I can. All signs point to yes at this present moment and I&amp;#8217;m really excited for the days to come.&lt;/p&gt;</description><link>http://the.ornyx.net/post/4340393285</link><guid>http://the.ornyx.net/post/4340393285</guid><pubDate>Mon, 04 Apr 2011 23:37:34 +0800</pubDate><category>fork</category><dc:creator>andthirdly</dc:creator></item><item><title>Event-ed NSURLRequest</title><description>&lt;p&gt;Have been very much inspired by the work on &lt;a href="http://www.nodejs.org"&gt;nodejs&lt;/a&gt;. For those of you who don’t know, nodejs is a basically a system to do Evented I/O using Google’s V8 Javascript engine.&lt;/p&gt;
&lt;p&gt;One such application of nodejs is the development of servers both HTTP or socket based that doesn’t require the spinning up of threads to handle connections and/or network events. Callbacks are assigned to events and when those events happen, the callbacks are ran. No threads, easy peasey, low overheads, etc.&lt;/p&gt;
&lt;p&gt;Currently there are 2 ways to do NSURLRequests. You can either wrap it around a thread and execute the operation synchronously or implement its delegate methods and have it run within the runloop.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/echoz/EdventurousFramework/tree/master/Classes/JONetwork"&gt;JOURLRequest&lt;/a&gt; is an encapsulation of the NSURLRequest and its delegate methods to provide for a way to easily implement run loop based event-ed NSURLRequests. &lt;!-- more --&gt; In addition to handling the delegate methods and providing its own, it also implements a blocks based system on top of the delegate methods to make development easier for developers who already know blocks.&lt;/p&gt;
&lt;p&gt;The class also takes into account authentication via blocks or delegate methods to provide the right response to such situations. So its kinda event-ed in its own right.&lt;/p&gt;
&lt;p&gt;If deployed on an iOS project, it also handles situations where network reachability is dropped as well as handle when apps go into background or return from foreground and return statuses accordingly.&lt;/p&gt;
&lt;p&gt;It also provides static methods to create NSURLRequests based upon a dictionary of POST values. By default, if it detects a NSData within the dictionary, it’ll assume its a file upload and prepare the URLRequests accordingly. If not, it will use the less network intensive &lt;em&gt;x-www-form-urlencoded&lt;/em&gt; method.&lt;/p&gt;
&lt;p&gt;I’ve started using it for projects and the experience thus far is one of more responsive applications with lesser pains when it comes to dealing with events. (Blocks for the win!)&lt;/p&gt;
&lt;p&gt;Its still very much a work in progress, but the bulk of it is there and working. Using it is simply including the files in your project and including the headers where you want to use this class.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Todo:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Further parallel between delegate methods and blocks&lt;/li&gt;
&lt;li&gt;NSStream for data downloaded for large files&lt;/li&gt;
&lt;li&gt;Suggestions?&lt;/li&gt;
&lt;/ul&gt;</description><link>http://the.ornyx.net/post/4303897986</link><guid>http://the.ornyx.net/post/4303897986</guid><pubDate>Sun, 03 Apr 2011 13:38:58 +0800</pubDate><category>ios</category><category>development</category><category>mac</category><category>osx</category><category>xcode</category><category>network</category><category>nsurlrequest</category><category>evented</category><dc:creator>andthirdly</dc:creator></item><item><title>Not that available </title><description>&lt;p&gt;By a stroke of luck or fate, I&amp;#8217;m doing lots of work for a startup on their iOS app. Pretty ambitious goals they have for what they want to accomplish and I&amp;#8217;m pretty much on the same page with them to see this well executed.&lt;/p&gt;

&lt;p&gt;As such, I won&amp;#8217;t be that available for additional work. Still, contact me if you think I can help.&lt;/p&gt;</description><link>http://the.ornyx.net/post/2812440921</link><guid>http://the.ornyx.net/post/2812440921</guid><pubDate>Wed, 19 Jan 2011 00:37:36 +0800</pubDate><category>work</category><category>freelance</category><category>parttime</category><category>lobangclub</category><dc:creator>andthirdly</dc:creator></item><item><title>"Typical developer. Listened to what the customer wants and did what they want anyway."</title><description>“Typical developer. Listened to what the customer wants and did what they want anyway.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;Scott Stevenson (NSConf 2009)&lt;/em&gt;</description><link>http://the.ornyx.net/post/2302230349</link><guid>http://the.ornyx.net/post/2302230349</guid><pubDate>Tue, 14 Dec 2010 01:51:53 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>Advanced iPhone Development Course on iTunes University</title><description>&lt;a href="http://iphonedevelopment.blogspot.com/2010/11/opengl-es-course-on-itunes-university.html"&gt;Advanced iPhone Development Course on iTunes University&lt;/a&gt;: &lt;p&gt;Should be a good follow up after finishing CS193P&lt;/p&gt;</description><link>http://the.ornyx.net/post/1619710324</link><guid>http://the.ornyx.net/post/1619710324</guid><pubDate>Sat, 20 Nov 2010 01:26:51 +0800</pubDate><dc:creator>andthirdly</dc:creator></item><item><title>How to be a Successful Software Engineer</title><description>&lt;a href="http://blog.darkhax.com/2010/11/16/how-to-be-a-successful-software-engineer"&gt;How to be a Successful Software Engineer&lt;/a&gt;: &lt;p&gt;Pretty much everything I see as essential&lt;/p&gt;</description><link>http://the.ornyx.net/post/1597564465</link><guid>http://the.ornyx.net/post/1597564465</guid><pubDate>Wed, 17 Nov 2010 12:56:02 +0800</pubDate><dc:creator>andthirdly</dc:creator></item></channel></rss>

