Posts Tagged‘xcode’

Lobaco 1.0: iPhone Testers Required!

It’s been a long 7 months since I first laid eyes on Xcode and the iOS SDK all that time ago and I’ve had quite the love/hate relationship with it. There were times when I could spend only a couple hours coding and blast through features barely breaking a sweat, and others when I’d spend multipleĀ torturous hours figuring out why something just wasn’t working the way I thought it should. The last couple months have been quite successful as my code base has grown large enough to cover most of the rudimentary functions I use constantly and my muscle memory with certain functions is approaching a usable level. Last weekend it all came to head after I polished off the last of my TODO list and sank back into my chair.

Then it hit me, this was a feature complete 1.0 release.

Apart from the achievements (which are barely implemented in the web client) you can do everything on the iPhone client that you could do with the full web client. I’ve taken design cues from many iPhone applications that I’ve been using and I feel its quite usable, especially if you’re familiar with the myriad of Twitter clients out there. I’ve been fiddling with it over the past few days and it seems to be stable enough for me to unleash on others to see how it goes and that’s where you, my faithful readers, come into play.

I’m looking for people to beta test this application pending a full release of it to the app store. If you’re interested in testing out the application and have any 3G and up iPhone (2G might work, but it would be dreadfully slow) hit me up on my gmail [email protected] and we’ll take it from there. I haven’t really experimented with Apple’s beta testing yet so the first lot of you are more than likely to be in for a fun ride as I stumble my way through deploying the application to you, but this is all part of the fun of being a very, very early adopter šŸ™‚

Despite all the trials and tribulations that developing this client has brought me the experience is proving to be invaluable as it’s helped me refine the idea down to the core ideal I started with almost 2 years ago: getting people communicating around a location. It’s also been the first new language I’ve learned in almost 5 years and it has reminded me just how much fun it was learning and creating in a completely new environment, so much so that I’m almost completely sold on the idea of recoding the web client in Ruby on Rails. Still that’s all pie in the sky stuff for now as the next big improvement to Lobaco is moving the entire service off my poor VPS and into the wonderful world of the cloud, most likely Windows Azure. I hope you’ll jump on board with me for testing Lobaco and hopefully in the future this will grow into something much more than my pet project.

Take Off The Blinkers.

Look I’m not going to say that I’m above rabid fan boy-ism. In fact there are multipleĀ occasionsĀ where I’ve made up excuses for some of my companies of choice (notably Bioware and Sony) but I usually at least take the time to find out all the facts before disregarding them completely. Mostly I do this so I can use my opponent’s position against them, much like I’m doing in a fledgling tweet battle with one of my friends, but if I come across a hard line fact that I can’t get across I’ll do the requisite back flip and change my position on the matter. Like I did when the iPad sold like hot cakes.

However the latest storm comes from none other than the fan boys of that company. A couple days ago Apple released their latest version of their Integrated Development Environment (IDE) Xcode 4. Personally I wasn’t excited about the release since if I had my way I’d do everything in Visual Studio (and it means yet another 4GB download, eurrgh) but some of the features piqued my interest. The integration of Interface Builder into the core Xcode application is a welcome change as well as the improvements to the debugger and an intelligent error detection engine. I haven’t yet had a go with it but the reviews I had read so far are positive so I’m sure it will make my iPhone coding life a little easier.

However Apple made the controversial move of charging $4.99 for it through the Mac App store (it’s still free to developers who are paying $99/year). Whilst the barrier to entry for Xcode is well above that thanks to the Apple hardware tax it still pissed a good number of enthusiasts off since Apple doesn’t ship a compiler with OS X, leaving many to either go without or go the dark route of installing GCC themselves. Personally I didn’t care either way since I’m already well over $4000 in the hole just for the privilege of developing for iOS but what got my goad up was when people started comparing it to Visual Studio’s pricing.

Now since Visual Studio is aimed at corporations its pricing is, how would you say, corporately priced. The cheapest version you can find on the site is $549 a whopping 110 times the price of Apple’s offering. Now whilst I could argue that the value of Visual Studio is well worth the price of admission (and it is, even if it’s just for the debugger) you’d have to be a loon to pay that price if you just wanted to develop apps for a single platform. The reason behind this is because Microsoft offers up special platform specific versions of Visual Studio for free under the Express line of their products. There are 4 different versions on there currently and combined they cover pretty much all types of development on the Windows platform. Apple does not offer Xcode free in any form anymore so realistically the comparison to Visual Studio is apples to oranges, as one is either 110 times the cost or reversed its infinitely more expensive (literally).

Perhaps I’m getting too worked up over an issue that in reality means nothing, since most people who are retweeting this nonsense are probably not developers. But still when people show a blatant disregard for simple facts (hell even a simple Google search) it gets me all kinds of angry. Couple that with a complete lack of other inspiration for today’s post and you get this ranty, nigh on pointless post about Apple fan boys. I probably shouldn’t be so angry at those people who are simply retweeting the nonsense but it’s this exact kind of me-tooism that causes the kind of zero-value blogging that’s reducing the signal on the Internet to be nigh on indistinguishable from the noise.

 

Absence Makes The Heart Grow Fonder (or Not).

My time spent developing my passion project hasn’t been continuous since the time I first started working on it. The first iteration lasted about a month and was a mad rush to cobble something together to mark theĀ momentous “milestone” of 100 blog posts. I then spent the next couple months experimenting with Silverlight managing to replicate and extend the base feature set out to a point where I felt I was making progress. I then went on a 6 week hiatus from developing Geon to work onĀ The Plan which, whilst making me a decent sized profit, never turned out to be the ticket to freedom I had hoped it would be. After taking a month off after that and coming back to look at Geon I couldn’t help but think that I was going about things in all the wrong ways, and came up with a completely new design.

This, I’ve found, is a common trend for me. Unless I continually work on a project I’ll always end up questioning the idea until I end up wondering what the point of doing it in the first place was. Initially this was quite good as whilst the first few iterations of Geon showed solid progress they were in all honesty horrid applications. However it was devastating for overall progress as the paradigm shifts I underwent during these times of developmental absence meant that the new vision was wholly incompatible with the old and I could see no way other than starting anew to get them back in line again. This is why the first2 iterations didn’t have any form of user logins and the third was such a horrible process that I don’t blame anyone for signing up for it.

I had thought that short breaks were immune to this idea as I had often taken a weekend or two off when a family event called or I was starting to feel burned out. However I hadn’t had the chance to do much work on Lobaco over the past 2 weeks thanks to me being otherwise occupied and those little tendrils of other worldly perspective started to creep in. Maybe it was the booze fueled weekend where I had a list of 5 other potentially marketable ideas or maybe it was just me pining for another break but suddenly I felt like there was so many other things I should be doing than pursuing my almost 2 year old idea. I let myself think that I could take part of the weekend off to work on one of those ideas but for some reason I just kept working on Lobaco.

I’m not sure if it was my persistence or hitting the submit on my application to Y-Combinator that did it but instead of pursuing those ideas that had tempted me all week long I just fired up Xcode and started plugging away. Whilst not my most productive weekend ever I did manage to tick off 2 more features for the iPhone client, leaving about 3 to go before my deadline of the end of March. I think the combination of a solid code base (that has all those rudimentary things done so I don’t have to spend time researching them) and almost half a year of iOS development under my belt is enough to keep the momentum going, making sure I don’t give up on this version until it reaches 1.0.

I used to think that time away from coding was just as valuable as time spent in code but that doesn’t seem to be holding as true as it used to be. Sure my first breaks led to radical changes in my vision for the end product (and is responsible for the Lobaco that exists today) but once you hit that sweet spot time away can be quite destructive, especially if you’re as prone as I am to distraction by new ideas. Thankfully the last 6 months of momentum aren’t lost on me and 2 weeks away wasn’t enough to distract me from my end goal. It would have been to easy to startĀ procrastinating again withoutĀ realizingĀ it.

Fast Scrolling UITableView: Updates for iOS 4.2.

I’ll be honest and say that most of the programs I’ve built have never really been that resource intensive so optimising them for performance really hadn’t been much of a priority. Sure there were the occasional thing that I’d catch and try to improve, like when an early copy of Geon had a dropped shadow around the map that inexplicably made it run like a dog, but for the most part I’d just code them up and leave it at that. Coding for the iPhone and other resource poor systems however does not afford me such luxuries and performance tuning the app has taken up a considerable amount of my development time, but the pay offs have been quite great.

After getting my first shot at the Lobaco app up and running I noticed there was considerable slow down when scrolling through the main list of items. Since I’m a big fan of the official Twitter app I knew that it was possible to have quite smooth scrolling even when you had multiple images and gobs of text on the screen. As it turns out I wasn’t alone with this performance problem with UITableViews (the class used for that main list display) and the developers behind it posted up some code to demonstrate how they achieved such fast scrolling.

If you follow that link you’ll notice that that particular blog post is now over 2 years old, back when the iPhone 3G was still the top offering from Apple. Whilst the code given in that blog post still functions I ran into a couple of issues implementing it in the latest SDK (4.2). The first issue you’ll hit when trying to use this code is the initWithFrame function, which is used to create your cell, is now deprecated. Whilst it should still function I could not get my code to work until I made the following change in ABTableViewCell.m:

// Copyright (c) 2008 Loren Brichter
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
//  ABTableViewCell.m
//
//  Created by Loren Brichter
//  Copyright 2008 Loren Brichter. All rights reserved.
//

#import "ABTableViewCell.h"

@interface ABTableViewCellView : UIView
@end

@implementation ABTableViewCellView

- (void)drawRect:(CGRect)r
{
	[(ABTableViewCell *)[self superview] drawContentView:r];
}

@end

@implementation ABTableViewCell

/*- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier
{
    if(self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier])
	{
		contentView = [[ABTableViewCellView alloc] initWithFrame:CGRectZero];
		contentView.opaque = YES;
		[self addSubview:contentView];
		[contentView release];
    }
    return self;
}*/

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
	if(self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])
	{
		contentView = [[ABTableViewCellView alloc] initWithFrame:CGRectZero];
		contentView.opaque = YES;
		contentView.backgroundColor = [UIColor whiteColor];
		[self addSubview:contentView];
		[contentView release];
    }
    return self;
}

- (void)dealloc
{
	[super dealloc];
}

- (void)setFrame:(CGRect)f
{
	[super setFrame:f];
	CGRect b = [self bounds];
	b.size.height -= 1; // leave room for the seperator line
	[contentView setFrame:b];
}

- (void)setNeedsDisplay
{
	[super setNeedsDisplay];
	[contentView setNeedsDisplay];
}

- (void)drawContentView:(CGRect)r
{
	// subclasses should implement this
}

@end

The main change is to replace the old initWithFrame with the new initWithStyle. This also requires changing the super call to the UITableViewCell class we’re subclassing, but apart from that everything else remains the same. Once I had that problem out of the way my custom cells were now drawing properly and appeared to be scrolling much more smoothly than they were before. However I was noticing another strange issue with my cells, they seemed to be displaying data at random from my data array. Try as I might to find the solution to this problem I couldn’t, until went back to the fundamentals of the UITableView.

You see creating cells with a UITableView is a pretty expensive process, just as it is for any system when creating new objects. This is even more pronounced with the resource limitations of the iPhone and so the iOS SDK employs a simple trick to work around this. Instead of creating and deleting a new cell every time one is needed it will instead reuse a cell that’s no longer in use, I.E. one that’s scrolled off screen. Since the cell will usually have new data in it at this point when it comes back on screen it should redraw itself to reflect this. However it seems that the ABTableViewCell class wasn’t doing this and the only way I could get it to update the data was by clicking on the cell, which caused a refresh.

If you’re not using this class then you’ll probably never encounter this issue and I believe this is because of the way ABTableViewCell does it’s drawing. You see in order to get the performance improvement you’re basically bypassing the regular way of drawing the cell and doing it yourself. This has enormous performance benefits since you’re not doing any unnecessary drawing, but it appears that the UITableViewCell class doesn’t call the drawContentView function as part of its normal drawing routine anymore. Thankfully this can be solved with a one liner in your UITableView controller class by letting the cell know it needs to redraw itself with setNeedsDisplay:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
	int nodeCount = [displayItems count];

    LobacoTableCell *cell = (LobacoTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        //cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
		cell = [[[LobacoTableCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell...

	if (nodeCount > 0)
	{
		Post *post = [displayItems objectAtIndex:indexPath.row];
		cell.post = post;
		if (!post.profileImage)
		{
			if (self.tableView.dragging == NO && self.tableView.decelerating == NO)
			{
				[self startImageDownload:post forIndexPath:indexPath];
			}

			cell.image = [UIImage imageNamed:@"Placeholder.png"];

		}
		else
		{
			cell.image = post.profileImage;
		}
	}
	[cell setNeedsDisplay];
    return cell;
}

I do this after I’ve done all the reconfiguration of the cell so that it’s drawn with all the correct information. The image code in this part will also trigger a redraw of the cell when it’s finished downloading the image (in this case the user’s profile picture) ensuring that it’s displayed immediately rather than when the drops out and comes back into view again. With all these fixes in place my new custom UITableViewCell works perfectly and the scrolling performance is glassy smooth.

All of the above issues I encountered after I upgraded my Xcode installation to iOS 4.2 and despite my intense Googling I couldn’t find any real solutions to these problems. If you’re a budding iPhone developer like me struggling to figure out why some things just aren’t working the way they should I hope this post gives you a little insight into what was going wrong and ultimately how to fix it. It’s these kinds of curious problems that frustrate the hell out of me when I’m in them but they’re always quite satisfying once you’ve managed to knock them over.

Procrastination Takes Many Forms.

I really can be my own worst enemy sometimes. It’s been almost a month since I got back from the USA and despite the best of intentions I haven’t really done that much work on Lobaco apart from a little work on the API and web UI. Whilst I was pretty sure I wasn’t going to hit the code hard immediately after touching back down in Australia I still thought that after maybe a week or two of lazing about the coding bug which had firmly bitten me before I left would take a hold once again, pushing me to build on the momentum I had set up. Sadly it wasn’t to be and instead I just resided myself to feeling guilty about what I should’ve been doing and pulling the meter tall weeds that had grown in our front yard.

Partly to blame is that sense of perspective I get whenever I take time away from a project to work on something else or to just have a break. Usually the first thing that pops into my head is “why the hell should I bother” and I’ll spend a good chunk of time focusing on the negative aspects of whatever I’m doing. After a while though I’ll just try to do a feel small things, a few quick wins to get me back into the mindset of getting things done. After that it’s usually pretty easy going (this usually takes about 2 weeks) until I hit a wall again or I feel like getting my weekends back for a while so I can relax and get my head back together. The last few iterations of this cycle are what lead to the 3 major revisions of what is now Lobaco.

This time however was different. After being back for 2 weeks and being firmly thrust back into the world that had barely changed since I had left (even though I expected it to be wildly different,Ā  for some reason) I still really couldn’t get into coding without feeling like I should be doing something else. My usual routine of getting a couple quick wins with the API and web UI didn’t translate into jumping back onto my MacBook and smashing out some iPhone code. Instead I started wondering whether or not a native client was the way to go and the possibility of doing a web based client for the phone itself. I had been down this road before and ultimately found that whilst iPhone programming was a world away from I’d done before the progress I had made with only a couple weeks of effort was far more encouraging than the same amount of time spent trying to wrangle HTML5 and Javascript into something workable.

Then along came Sencha.

I was going through my 700+ post backlog of Techcrunch articles when I came across this one about Sencha, a web startup that just released their Touch framework which provides the basis for building native looking applications in HTML5 and Javascript. Thinking this might be my salvation to writing native clients for all handsets I quickly downloaded the framework and started hacking around to get something workable. I was able to get the example running in one weekend and made a few modifications but I didn’t get into the real meat of it until last Friday night. After managing to replicate the UI I had built in objective-c within the Sencha framework I uploaded it to my web server to see what it would look like on the iPhone and instantly I realised what was wrong.

This client was just an elaborate way of procrastinating.

Now whilst the client looked decent and didn’t take too much to set up it didn’t look anywhere near as good as my native app nor could it hold a candle to its performance. Sure my hack job probably ensured that the performance wasn’t as good as it could be but in comparison to the native client hack job I did it was pretty stunning. After coming to that realisation I booted up my MacBook to start getting acquainted with Xcode again and spent last weekend coding up some performance improvementsĀ¹ for it which I had put off before I left for the USA. I’m sure this won’t stop me from looking at going down that path in the future but I can at least rest easier now that I’m feeling the urge to program once again.

It’s been a weird learning experience for me since I’m usually pretty good at knowing when I’m procrastinating. Usually I have a good reason for it (like having 1 bit of work to do and not doing it since it’s not due for months) but this is the first time I caught myself doing something I thought was useful when really I was just making excuses for doing the work I knew needed to be done. With a good week of holidays coming up over the Christmas/New Year period this realisation couldn’t have come at a better time and I’m looking forward to making the most of my time off with the hope that the momentum will carry me on into the new year.

Ā¹I’m going to do a big post about this hopefully tomorrow. I hit some really, really esoteric problems getting everything to work but I have and the results are, to put it bluntly, bloody amazing.

Mac OS X: A Veteran Windows User’s Perspective.

I’ve been using the Windows line of operating systems for nigh on 2 decades now for my own personal PC and apart from the occasional tinkering I haven’t bothered trying anything else. My professional life is a different story as with VMware being a heavily modified version of Red Hat Enterprise Linux I’ve had to become more familiar with the open source alternative so that I can troubleshoot the more esoteric problems that it might throw at me. Additionally I had the (mis)fortune of managing one of Apple’s token stab at the enterprise market the Xserve which, whilst didn’t give me any large amount of grief, had its own way of doing things that made most trivial tasks take hours. That was probably the most experience I had had with an Apple OS up until I took my shiny new MacBook Pro (separate review coming soon) with me on my trip around America where I decided I would thoroughly test Mac OS X as my primary operating system.

The initial experience of starting up OS X for the first time is a world away from what I’m used to with Windows installs. You’re greeted with a short video presentation showing the various aspects of the OS which is then followed by the sign up process. I do remember it asking me for my iTunes account name and password during part of this which I thought was a no-no ever since Microsoft got into trouble for trying to get everyone to have a MSN accountĀ¹. Less than 5 minutes later I was ready to start bumbling my way through a new OS, and bumble I did.

My first initial task was to install Windows 7 on it since I know OS X wouldn’t be able to run everything I wanted it to. Getting bootcamp configured was pretty painless with the help of the guide Apple provides so there’s some big props for them there. About 20 minutes later I had a full Windows 7 installation running with all the drivers I needed, although I did update the video card with NVIDIA’s latest offerings. Satisfied that everything was fine on the Windows side I flipped back over to OS X to give it the initial shakedown.

First I tried browsing the web using the inbuilt browser, Safari. It opened up in a not-so-fullscreen manner so I hit what I thought was the maximise button to get it to fill the screen. It didn’t do anything and after researching around a bit I found that OS X doesn’t really have a concept of fullscreen and that button really only serves to switch between window sizes. I could get a close approximation to the maximise button by stretching everything out but that could also end up a window bigger than the screen it was on, especially with the lack of precision granted by the trackpad I was using.

Here is where I feel Apple is let down by its community. Whilst I’m not an easily offended person my searches for a solution to the fullscreen problem brought me to this forum thread in which it takes no less than a single post for a OS X user to abuse someone for trying to find a feature similar to Windows. I’d love to say that it was an isolated incident but time after time when I found myself looking for the answer to some problem I could easily solve in Windows this kind of elitism seems to follow quite closely. Granted I’m not saying all OS X users are like this but there’s enough of them to do a royal disservice to those of us who aren’t complete novices when it comes to computers but are unfamiliar with the world of OS X.

Undeterred from those experiences I went ahead and signed up for the Apple Developer Program and downloaded the latest version of Xcode. Installation was pretty easy and I was able to build a simple program about 10 minutes later with little hassles. Regular readers will know of the trials and tribulations I’ve been through since then but overall I’d count Xcode as a decent IDE but still needing some work to be up to the standard I’ve come to expect. Thankfully most of my questions regarding the IDE (such as deploying code to a real iPhone) were already answered in the online documentation which goes a long way to bridging the gaps.

Not long after using the laptop as a development machine I packed it up and took it with me on a trip around the USA and Canada. Here OS X started to show some of it’s convenience features that I really started to appreciate. The first was it opening up iPhoto when I plugged in my camera, where upon it began walking me through creating events and some of the other features it has. Unfortunately it didn’t like the way my camera stores movies (and iMovie doesn’t like the format) so they had to remain on the camera. Still it was nice to be able to load all the photos on the laptop at the end of the day and have them nicely arranged in a bunch of tiles.

The fun really started when I began trying to do things I had never attempted in another operating system before. Mostly this was troubleshooting things like why my camera wasn’t showing up (needed a reboot) or when I was trying to spoof my MAC address so that I didn’t have to pay the exorbitant price for the hotel Internet connection (why a $50/night place gives me Internet for free and a $400/night place doesn’t is beyond me). It seems in these areas of esoteric OS X issues and chicanery the community is much better than what I had initially encountered with me being able to Google up several solutions without any high and mighty Apple attitudes creeping in.

All the rudimentary programs (Finder, TextEditor, StickyNotes) function as expected and are pretty much identical to their counterparts on Windows. The same can be said for the system settings as once you click on it you’ve basically got a Windows control panel staring back at you. So whilst the visuals might be different the administration of OS X settings isn’t too far removed from what many of us long time Windowers are used to. Of course a bit of familiarity with the *nix terminal won’t go astray when you’re trying to do something really out of left field, but if you’ve used the command prompt or written a script in windows I don’t think you’d have too much trouble.

Overall I found OS X to be quite satisfactory as a desktop OS as it provided all the functionality I required of it whilst providing some value add that I wasn’t expecting. Still the experience wasn’t exactly mind blowing and there are many differences that are there just for differences sake (using the command key instead of control, close/minimise/maximise buttons on wrong side) that don’t do them any favours. I won’t be removing OS X completely as it works extremely well for what I use it for but I won’t be replacing Windows 7 as my current default OS. Would I recommend it for others? Hard to tell and it’s something that I’ll probably explore in a future post.

Ā¹I did this set up over 2 months ago now so I might just be remembering this incorrectly but I did give up my iTunes account info well before I saw the desktop. It may not be required to use OS X but I wouldn’t have put it in unless I thought it was required.

There’s No Substitute For Fundamentals.

When I look back at those 4 long years I spent at university I always feel a wide range of conflicting emotions. Initially it was one of bewilderment as I was amongst some of the smartest people I’d ever met and they were all passionate about what they were studying. During my second year it turned to one of pride as I began to find my university legs and excelled at my chosen specialities. However the last 2 years of university saw me turn on the career I had once been so enamoured with, questioning why I should bother to languish in lecture halls when all of what I learnt would be irrelevant upon completion. Still 4 years on from that glorious day when I walked out of parliament house with my degree in one hand I still value my time there and I couldn’t be sure if I had the chance again would I do it any differently.

Unfortunately for me my predictions of most of the knowledge being irrelevant outside of university did ring true. Whilst many of the skills and concepts I learnt still stick with me today many of the hours spent deep in things like electronic circuits and various mathematical concepts haven’t found their way into my everyday work life. I wholly lay the blame for this at myself however as straight out of university the most lucrative career I could land was in IT support, not computer engineering. This is probably due to the engineering industry in Canberra being none too hot thanks to the low population and high public service employment rate but even those who’ve managed to find jobs in the industry quickly learned that their theoretical university experiences were nothing compared to the real world.

What university did grant me was the ability to work well from a fundamental base of knowledge in order to branch out into other areas. Every year without fail I found myself trying to build some kind of system or program that would see me dive back into my engineering roots to look for a solution. Most recently it has been with Lobaco as I’d barely touched any kind of web programming and had only limited experience in working with real 3 tiered systems. Still my base training at university allowed me to ask the right questions and find the right sources of information to be able to become proficient in a very short space of time.

Flush with success from coding and deploying a working system on the wider Internet my sights turned to something I had only a cursory experience with before: mobile handsets. A long time ago I had tried to code up a simple application on Windows Mobile only to have the program crash the simulator repeatedly and fail to work in anything meaningful way. Still being an iPhone user and having downloaded some applications of questionable quality I thought it couldn’t be too hard to pick up the basics and give it the old college try. Those of you following me on Twitter would have noticed how there was only one tweet on iPhone applications before I mentioned HTML5 as the potential direction for the mobile client, signalling that I might have bitten off more than I could chew.

Indeed this was what happened. Attempting to stumble my way through the other world that is Objective-C and Xcode was met with frustration on a scale I hadn’t felt in quite a while. Whilst the code shares a base in a language I know and understand many things are different in ways I just hadn’t fathomed and the resources online just weren’t the same as what I was used to. I managed to get a few things working but doing simple things like say incorporating the pull to refresh code into my own application proved to be next to impossible and still elude me. After a while though I began to think that I was missing the fundamentals that I had had when developing for other platforms and dreaded the idea of having to drudge through one of the millions of iPhone programming books.

Right in the depth of my plight I came across this Slashdot article on someone asking which mobile platform they should develop for. Amongst the various responses was this little gem that pointed me to something I had heard of but never looked at, iTunesU. I had known for a while that various universities had been offering up their lecture material online for free but I hadn’t known that Apple had integrated it into their iTunes catalogue. Searching for the lecture series in question I was then presented with 20 lectures and accompanying slides totalling several hours of online content. With the price being right (free) I thought nothing of downloading the first lecture to see if there was anything to gain from this, and boy was there ever.

Whilst the first 30 minutes or so were general housekeeping for the course itself the last 20 minutes proved to be quite insightful. Instantly I knew that the way I was approaching the problem wouldn’t work in Apple’s world and I needed to develop a fundamental base of knowledge before I could make any meaningful progress. These lectures have proved to be an invaluable source of knowledge and proved to be instantly valuable, helping me develop a base application that resembles what I hope to one day release to the world.

It’s this kind of knowledge dissemination that will disrupt the traditional education frameworks. The amount of information available to anyone with an Internet connection is unfathomable and those with a desire to learn about a particular subject are able to do so without any limitations. Back when I started at university anyone wanting to attend the lectures had no choice but to be physically present at each lecture. Sure you could probably grab the lecture notes but they’re a poor substitution for actually being there, especially when the classes are as useful as the ones provided by Stanford. They won’t make you an iPhone programming genius on their own but if you’ve done any sort of programming before you’ll quickly find yourself becoming vastly more proficient than you would bumbling around blindly in the Xcode IDE as I did.

In the end I realised there’s really no substitute for starting with the fundamentals and working your way from there. I had assumed that based on my extensive past programming experience that learning an new language and IDE would be a walk in the park. It took me several days of frustration to realise that I was using my Microsoft hammer to bash in Apple nails and that wasn’t getting me anywhere fast. Just an hour spent watching a very basic lecture proved to be more insightful than the hundreds of Google searches I had done previously. It’s still early days for me as an iPhone programmer but I’ve got a feeling that the next few weeks spent coding will be much easier than the week that has led up to it.