Hello World!
I'm a Developer at Master of Malt, a University of Brighton graduate, a 1st Kyu in Kyokushinkai Karate, a video gamer and technology enthusiast. Read more about me over here.
CloudANDTidus
Search
Games


Entries in university (11)

Monday
Jan022012

I’ve done everything the Bible says - even the stuff that contradicts the other stuff!

Happy new year everyone, unless you don't believe in new year, in which case insert politicly correct good wishes for getting round the sun once more, with no offence intended to you or your friends and loved ones.

2011 was certainly a year, thats for sure. In my final semester of University I helped create a pretty awesome multiplayer flash game, I learned Object-C and created an iPhone app for my final year project and I graduated from the course with first class honours (go me!). I also got a little full-time job with some folk who sell fermented vegetable drinks online and was tricked into doing terrible things to my facial hair

It wasn't all sunshine and victory laps though. It rained a lot for one and the final few months of University were some of the most stressful of my life. It didn't help that at the same time as trying to complete my final year project and maintain a part-time job, I had the consecutive loss of both Tabby and Hamish, two long-term members of the family. They say a dog is for life, but you forget that it's their life, not yours. His death hit everyone hard, but my mum most of all, who became physically ill for over a week and caught an eye infection that could have made her blind (fortunately she fully recovered). On a more up beat note we also got a couple new members of the family in ones of the most unexpected ways (my older sister nearly tripped over a stray cat giving birth on her doorstep). 

The last month has also been "an experience". Working for an online e-commerce company means everything is about Christmas, and this one was the busiest yet. On one day in December the website took more orders than the entirety of 2008, so to help support the team and fix any issues that arose we had to move from our nice warm office to a very cold warehouse. Christmas was a success though, mostly because it didn't snow and we made order processing much more efficient, so yay us and all that. Next year our systems will be so efficient the whisky will be picked and packed by little robots and I can spend the last two weeks of December in Malaga instead of High Brooms, aka the coldest place in Britain.

Christmas wasn't all cold warehouses though, as for a person who doesn't drink very much, I did a lot of drinking. This included a surprise party in London for an old college and uni friend and consecutive days of going to work and hitting the pubs in the evening, which I'm positive did wonders for my programming. It was great to see a lot of people again and we defeantly need to do it more often.

I also learned in 2011 that I am terrible at ice skating. So there is that.

Sunday
Aug072011

You'll have to forgive him. He's from Barcelona. 

As predicted in my previous post a full work week resulted in my failure of the Tales of Symphonia Challenge. I managed just over 25 hours in eight days, getting to Gaoracchia Forest, before I had a full week of work in which I wasn't able to keep up my original pace. I then only had the weekend to play the game before two more days of work and the graduation deadline. Alas, no £40 for me, although it did achieve Dave's goal of getting me to play the damn game. I haven't gone back to it yet, but I certainly plan to at a more leisurely pace now that I've invested time into it. I would certainly recommend trying to get hold of a copy if you have an itch for a good JRPG.

Speaking of graduation, I'm now a graduate! The event was held at the Brighton Dome and while entirely too long, with chairs that absolutely sucked and much more clapping than I could really deal with, it was mostly enjoyable. Some of the students even made mockery of the whole formal procedure, which was taken in good humour and brought some life to the event. Overall it was mostly just a good excuse to see some folks from Uni and go out for drinks and food afterwards.

I wasn't particularly a fan of the getup they made you wear, especially when the robe people told me I had a large and awkward sized head. Some photos of said outfit can be seen over yonder.

So with graduation behind me I'm now officially a real boy and this week I started my first week of full time employment. To be honest I've not really accepted this yet, as working for the same company I've been at for two years makes it feel like nothing has changed, but at some point it will certainly hit me that this is it, and I'm not going back to education in October.

Speaking of work, this week we released a pretty major revision to the site with an entirely new navigation structure. The old nav was structured entirely around whisky, which made it almost impossible to find the many other drinks the company has expanded into. Hopefully this new nav will do a much better job.

In animal news, we're adopting two kittens! My older sister practically tripped over a stray cat giving birth to a litter of five outside her house, so we took them to the RSPCA Cattery my younger sister volunteers at, and rather inevitably we've ended up adopting two of them. My younger sister has already named them Alice and Polly (the latter following the Fawlty Towers theme our remaining cat Sybil started), and we should be taking them home in a couple weeks.

I also appeared on another episode of the Downloadable Content podcast which went up a couple weeks ago. In this one we discuss the advent of downloadable add-on content in console games and whether they are good for gamers or designed simply to drive up prices. As before, you can subscribe to the show in iTunes or download the episode directly over this way.

Saturday
Jul092011

Hi, folks. I hope I didn't crash-land on anybody. 

So this Friday everyone at the office went out for lunch (we ate delicious pizza) to welcome the new employees we have, including new placement students (remember when I was one of those?). The following picture, taken as we returned from lunch, demonstrates the continued professionalism of the operation as much of the office walked down the street eating ice creams.

I approve of everything about this image.

 

Today I received the fabled results letter from University that would declare whether I had succeeded in becoming a real boy or if I had just wasted four years of my life. The good news is I passed! The more shocking news is I got a 1st, which this wikipedia article will tell you is the highest level of degree I could have got. How I managed that, I have no idea. Here are my actual results my module:

- Placement Learning: A-
- Individual Project: A
- Advanced Internet Application Development: A
- Internet Gaming Design and Development: A
- Data Management: C-
- Managing the E-Enterprise: A-

As this picture shows, I got a honours degree in internet computing with sandwich (means I took a placement year). I sure hope its delicious!

 

I was also reminded today that I have a long running bet (for about a year now) that I can't complete Tales of Symphonia before I graduate. If I achieve this goal I will win back a delightful £40 that I lost in a previous bet. Something about not being able to complete games or something. Fortunately I have a whole eighteen days left before graduation, unfortunately I'm informed the game is over seventy hours long, so I better get my finger out.

I will keep this blog updated with how I progress in the Symphonia Challenge (TM). So far I'm about three hours into it and the game seems pretty cool. Wish me luck!

 

Saturday
Jun112011

The first commercial airline flight took to the air in 1914. Everyone involved screamed the entire way.

On Monday and Tuesday I had two exams, both three hours in length, involving questions about .NET architecture (three tiers, web services and AJAX) and database theory (transaction processing, object-relational databases, business intelligence and data warehousing). The best part of the whole thing was having to hand write the answers (on this antiquated technology called paper) which has the delightful result of making the exams much more difficult to do for someone (like the kind of person that would take a computing course…) who types all day. It also makes life much more difficult for the examiner, as my hand writing is teeeeerrible. I felt the .NET exam went pretty well, but I left the database one feeling my attempt at answering questions about business intelligence and data warehousing didn't go down so well, so we will have to wait and see what sort of final grade I get.

These exams mark the completion of my university degree. After twelve years in compulsory education, two years at college and four years at university I'm officially out of the education system. A real boy you might say. It's kinda scary to think I won't have to do pointless coursework, listen to lectures about subjects I really don't give a shit about or take exams ever again. At the same time its very awesome the freedom that provides. I'm now completely free to work on the projects I want, as long as I have some sort of income at the same time. I do have to pay of that student loan at some point…

Happening at the same time as my exams was WWDC and E3. Apples announcements at WWDC were interesting, with the improvements in Lion and iOS 5 being very much desired, even if most of the later were lifted from Android, Windows Phone 7, third party apps and jailbreaks. Whatever the source of these ideas, as an iOS user I don't really have any complaints. Companies should always be matching features at the same time as innovating, and much of the feature set of iOS 5 seems designed to remove a lot of the arguments (beyond the whole open debate) Android fan boys have. For me personally, wireless sync, better notifications and tabbed browsing are the primary features I'm excited for. Its also nice to see them finally allow you to set the thing up on the device, as requiring a computer to activate an iPad kinda destroys the whole "post pc" spiel they are trying to sell you. 

The iCloud stuff is also interesting, as if nothing else it makes MobileMe free. It also adds universal syncing between your devices, so if I download a song, app or book on one device, it syncs to the others. The same is true for documents made in iWork and photos taken with an iPhone camera, which will automatically sync with iPhoto on my mac. The iTunes portion of it is what everyone is making the biggest deal out of, and they certainly have an interesting offering (for $25 any song in your library will be upgraded to a high quality iTunes version and they will upload anything they don't have), particularly because they are basically providing an amnesty for any pirated music as long as you pay the yearly fee. What sucks is no streaming option, and the fact it wont be coming to the UK any time soon. That makes all three cloud music solutions (Google, Amazon and Apple) US only for now…

Of the E3 presentations, Nintendo was certainly the most interesting. They have Kid Icarus, Luigi's Mansion 2, Star Fox 64, Mario Kart and Super Mario coming to 3DS, which alongside the soon to be released Zelda remake almost makes me want to get a 3DS. Unfortunately the machine is kinda bulky and the battery lasts four hours, so I think I will hold out for a revision, as I was pretty badly burnt by the DS Lite (which came out a couple months after I purchased a DS Phat).

The Wii U announcement obviously gained the most attention and aside from its horrific name the concept is interesting. I played Zelda Four Swords and Crystal Chronicles on GameCube using GBA's and the experience was actually pretty fun, so I can see how the new controller could be used. Its just a shame Nintendo once again opted for a cheap single touch capacitive screen. I think the Wii U will have a pretty successful launch, and will use the fact its in line with current hardware specs to its advantage to get 3rd party support, but I can see problems one or two years in when Sony and Microsoft's next machines are released and leave the Wii U behind. You have to give Nintendo credit though, for once again trying to innovate while Microsoft and Sony are still demoing their wiimote ripoffs. Motion control is so last year dude.

Speaking of Sony, aside from some impressive looking PS3 games (Uncharted 3, Resistance 3, inFamous 2, Dust 514 and Starhawk), multi platform titles (BioShock Infinite) and some terrible move games (NBA on the Move and Medieval Moves: Deadmund's Quest), their big announcement was the PlayStation Vita, another God awful product name. The Vita looked nice and all and the price point was right for once, but I feel Sony is really making a mistake here. Everything they showed for the PSV was a big, epic, cinematic, console experience on a handheld platform. They sold this exact concept when the PSP was released six years ago and guess what, no one (outside of the Japanese who love monster hunter) play their PSP. Why? Because you can't play epic console experiences on the bus. The end result of this is you play these portable games at home, on a tiny screen, with shitty controls, when your TV and console is sitting right next to you. Some of these games even let you transfer the experience between the console and handheld, which kinda proves my entire point.

Speaking of transferring, perhaps my favourite part of E3 was this video from Konami (starts 35 minutes 10 seconds in)…

The PSP was released before the iPhone and Android devices took over the handheld market. These days if you want a quick, portable game you buy one for a very low price on your smart phone. Nintendo may still have some chance because they make unique games that will never come to smart phones and because they actually make games suited for portable play. Sony however, is trying to sell you a portable PS3, and no one wants that…

As for Microsoft, their presentation was probably the most disappointing. Beyond another dashboard update, Gears of War 3, Halos and some multi platform franchise like Call of Duty and Tomb Raider, all they showed was Kinect bullshit. This demo of Ubisoft playing a Tom Clancy game where you shoot by doing jazz hands describes how I feel about the whole thing (starts 1 minutes 30 seconds in).

And while we're on the subject of Ubisoft, their press conference is probably the winner of the most bizarre award. The guys at Giant Bomb probably explain it best (starts 8 minutes 35 seconds in).

So yeah, a week of highs and lows to say the least.

Monday
May302011

At some point in their lives 1 out of 6 children will be abducted by the Dutch.

Instead of doing the sensible thing and actually revise for my exams, I've been working on my little side project the last couple days. As I mentioned in an earlier post, the imaginatively named "my e-penis.com" is a database for tracking game collections and progression. As it stands a user can register for an account, login, search for games and provide basic information about the status of each game, such as ownership (whether you have the game, had the game or want the game), completion progress (if you completed it, gave up on it or if the game is uncompletable in the case of an MMO or puzzle game), completion date and how many hours have been played.

Technology wise, I'm using a combination of PHP and jQuery on the front end and a MySQL database on the back end. I've had very little practical experience with jQuery despite being aware of it for a while now, so the whole thing has been a learning experience. Its also been quite a while since I last designed a site from scratch, so I've had to come up with a fresh design that feels more modern than the last site I built. And yes, I'm making a green website. You have a problem with that?

The internet doesn't have enough green if you ask me.

The site uses Giant Bomb's API (which was a nice crash course in JSON) to provide the game database. Back in the FWXD days one of the major issues with the site was trying to get users to enter game information into the database. Using an external wiki that is always growing and correcting itself is certainly the better solution, especially as the site is really only designed for myself. I would love for others to get some use out of it, however I don't really intend for it to gain traction. If I did, I would have chosen a more politically correct name...

The site is currently in alpha, but if you want to play with it and give me feedback, you can check it out here.

In other news, on Thursday I was offered full time employment at my day job. This July will mark two years with the company. I joined them for my placement year and stayed on part time (currently only a day a week) during my final year of University. This offer marks the first time I will be "employed for reals", and includes the obvious benefit of a pay rise, as well as the promise of 20% time to work on personal side projects that can benefit the company. 

I had done a lot of thinking leading up to this week as to what I wanted to do once I graduated. Should I do a masters degree? Look at what other job opportunities are available? Or maybe live up to my threat and go back to college and do an art degree? After the last year it didn't take me long to decide that I had had enough of the education system, and frankly I don't know how well I would fit in with a more "professional" company. 

Despite the fact they claim to be getting more "proper" (with a real office and everything), you gotta love the idea that your company is making its millions on porn star rum.

So I accepted. If nothing else, I feel more comfortable graduating with a secure job, which will allow me to more casually monitor other opportunities than if I had graduated unemployed. Not that I expect to be leaving them any time soon. They tried and failed to find a replacement for me, so I must be doing something right.

I wont be joining them full time until after graduation at the end of July, so I have some time before then.

On another topic entirely, SEO is a funny thing. I use quotes from TV shows and video games for the title of all my posts. This has resulted in my blog ranking highly in a Google search for "Do you know who I am? I'm the man who's going to burn your house down", which is just wonderful. I found this out when looking at the referrals this site has been getting. Some of the more interesting (and non-SEO abusing) referrals have been for searches such as "nsurl asynchronous download image progress", "uisearchdisplaycontroller coredata" and "iphone development sqlite or core data". I don't claim to be an expert in any of these subjects, but I'm thinking of writing a few posts on how I did a few things in my project to help people searching for these subjects. There was a lot of work involved in understanding some of this stuff, so maybe I can give developers taking on the insane task of learning object-c in the future a hand.

Tuesday
May102011

Do you know who I am? I'm the man who's gonna burn your house down! With the lemons!

What's up world?

As I showed in the previous post, I completed the documentation for my project, an epic tome of a report. The last month has been a fairly stressful period in which I spent consecutive days in the same room typing away, while being constantly concerned that all the work simply wasn't going to get done. It was certainly close, but I can now happily say it is done. For those interested in reading more about my project than was represented on this blog, you can check out the two main portions of my report in delightful PDF form.

The Exaiminers Report - This is a short report designed to give a complete overview of the project, aimed at the non-technical reader.

The Product Report - This is a more in-depth report designed to explain, in unnecessary detail, how each individual component of the app works.

This Friday is Poster Day, where we get to show of the final product and get questioned about the project. That will draw a close to my final year project as a whole.

In this glorious post-project world we now live in, I'm moving focus to the last waining weeks of the semester. Last week I had to (quickly) complete two more essays for deadlines, and next week I have a presentation and a multiplayer flash game to hand in. The flash game is a team project and has been quite enjoyable after all this essay writing. Our game is going to be a turn based tank game where you play as either Maria Sharapova on the Soviets team or Sarah Palin on the Republican team.

This screenshot shows the development of the game itself. Ignore the rather unsightly grid, that is there for development purposes only. Currently each client can control their own tank (move forward, backward, rotate the tank and rotate the turret), and the movements of your tank is reflected on your opponents screen. The rocks littering the play field are also randomly positioned when the game begins.

Between all this I've also begun working on a little personal side project in the last couple weeks to get away from all this work. It's a website that allows you to build a list of the games you own and track your progression in them, how long you've played them, if you completed it, etc. It's using Giant Bomb's API so that I don't have to build my own game's database and is coming along nicely. I don't intend to really promote or pimp the final product, its really much more for my own OCD, but I will add sign up functionality should anyone else like to use it. If nothing else, its a fun way to get back into PHP and learn some jQuery. I asked Sputin on MSN for a name that I could get the domain for, and after batting ideas back and forth I eventually settled on "My e-penis.com". If you don't get the joke, its the fact gamer's have refereed to achievements and gamer score as your "e-penis". Its hilarious I know...

Speaking of video games, I really want to blog about them some more now that I'm starting to have some time. I finished Portal 2 (twice!) in breaks from writing my project documentation and this weekend I returned to Assassin's Creed: Brotherhood after a long break. Man is that game fun.

Of course, exams are just over three weeks away, so I'm not off the hook yet.

Friday
Apr012011

You've been seeing parts of the life of a barber in Indiana for seven years, and you never mentioned it?

Alo world! 

So I've been silent on here for about a month now. The last month or so has been pretty hard on me emotionally, with the loss of Tabby the cat on Februrary 24th and Hamish, my family dog, on 14th March. 

Tabby was very old for a cat at 19, and she had been increasingly "loosing it", so her eventual death was to be expected, whether I wanted to accept it or not. I think the thing that truly effected me most with Tabby was the fact she had always been there. Being 22 I don't really recall a time when Tabby wasn't around, and as she got older she eventually confined herself to my bedroom, which made us much closer.  

Hamish was a lot less expected. I knew he was old, sure, but up until about a week before his death he seemed perfectly fine and happy. Unfortunately it seems his breed isn't particularly well designed, because they tend to suffer from incredibly itchy skin that causes them to bite and rip at their hair until it bleeds. To stop this he's been on medication for a very long time. He also had arthritis, ear infections and once nearly went blind in one eye from an infection. Eventually it was the medication that simply became to much for his system and his kidneys began to fail. He stopped eating, and the time came when we had to make the decision. Loosing him upset everyone in the family greatly, including my mum who made herself physically ill for over a week and managed to get an eye infection brought on by stress that could have made her blind. 

 

Add having to deal with work and university onto this and well… I wouldn't say I have been exactly on my game recently. 

As for my final year project, I didn't get every feature I wanted in the app, however with the deadline just a month away, I had to draw a line and start on the laborious documentation process. Its obviously not feature complete and ready for the app store, but that was never the goal of my project. What I've produced allows you to browse a massive collection of whiskies, whether or not your online, add them to one of four lists (wish list, basket, collection or empties) and then proceed into a checkout when you want to buy something.

What the app doesn't currently do is send the order to the server for processing (not within the scope of my app), allow you to add tasting notes, image caching on the local device for when you are offline, or sync the product data after the initial download. The last three are all things I will discuss in my documentation and are things the final product will do, but I simply didn't have the time when developing my project.

So what have I done to the app since I last talked about it? One of the most obvious changes was improving the product list views. Before you couldn't even read the full product name. Now the full name is readable on two lines, and a small third line provides extra information such as ABV, volume, age and price. At some point it would be neat to get images into list views (they would have to be place holders that change into images as they are downloaded to not affect performance), but I don't have this yet.

On the product "page" I replaced the no image image that was displayed before the product image downloaded with a loading indicator as everyone I showed this to was confused with why the no image image switched to a real image. The loading indicator makes much more sense here, telling the user that the image is loading. 

I also added a couple features to the social card on the product page. This is where you will eventually be able to add tasting notes. For now you have a more clear button that adds the product to a list (for people who miss the + button in the top right), as well as a share with friends and email friends option. The share with friends button gives you the ability to share the product on either Facebook or Twitter. This is done by launching the selected website in mobile Safari with the product's URL pre-populated. One day this might be better implemented by using the services API's to keep you inside the app. The other option, email friends, launches an email form with URL pre-populated.

One other small change, the add to list screen now gives a clear indication to the user when a product is out of stock by making the basket button red, however they still have the option to add it to their basket if they wish.

With the small changes covered, we move on to the lists screen, which is where the majority of my time has been consumed. To be honest, this feature took much longer than I had originally anticipated. The list screen was originally four separate instances of the same view accessible in the tab bar along the bottom of the screen, however the client suggested it would be better to consolidate these into one screen to give them the ability to have other options in the tab bar later. I achieved this using a segment control. When you select one of the lists in the segment control, the table view bellow is refreshed with different data.

You can click on an item in a list, which spins the screen to reveal the ability to adjust quantity. I imagine in the future that this screen would also be where you would add accessories or a gift message to a product. When you try to save the quantity the app does a call to the server if the current list is the basket. If the server responds with the product is currently out of stock, the quantity of the product is set to zero and the user is told to remove it from their basket. If the user requests more bottles than we currently have they are alerted of the current stock level and asked to select a different quantity. If there is no internet connection the app will accept whatever quantity the user asks for, and will instead alert the user of any issues with their basket when they try to go to checkout.  

The list view allows you to delete a product by swiping and clicking the delete button, or by clicking edit, the red circle, and then the delete button. By clicking edit they can also re-order the list using the little icon to the right of every item. To achieve this I had to add a rank field to the database that indicates the order of the items in the list. Every time a product is delete or moved, the ranking order has to be re-assigned for the entire list. Add a product simply requires adding one to the current total of list items.

Clicking the checkout button takes you to the checkout. If you are offline you are stopped immediately, as the checkout requires a connection to the server. If your basket has issues (such as an out of stock product or a larger quantity than we can provide), an error message is displayed and the user is required to go and correct it. If everything is successful the server responds with a set of delivery options.

I had a meeting with my client to spec how the delivery options would work. Their currently delivery algorithm is over complicated and in need of a re-write, so I was asked to write a simple algorithm for the iPhone app (which only needs to concern itself with UK orders) until the new one is built.

The business rules for the delivery algorithm I built are:

If all the stock required is available at the local warehouse offer:

  1. next day (two day if after 3pm) for £6.95
  2. three day for £5.95
  3. five day for £4.95 (£3.95 if the order has one bottle)

If some of the stock is only available from the supplier in Scotland offer:

1. Ship each item as it is ready for £13.90 (two deliveries of £6.95)

  • the local stock will be delivered next day or two day if after 3pm
  • the supplier stock will be delivered in four days

2. One Delivery (saves money)

  1. four day for £6.95
  2. six day for £5.95
  3. eight day for £4.95

If all the stock is only available from the supplier in Scotland offer: 

  1. four day for £6.95
  2. six day for £5.95
  3. eight day for £4.95

I used the UIPicker control to offer these options in the checkout. This particular control caused a lot of problems, mostly due to my inexperience with how it worked. 

If you try to submit the order without providing your details, you will be rejected. The user has the ability to add a delivery address, billing address and payment method to the order. The app keeps a list of every address and payment method added, allowing the user to simply select an existing one if it has already been entered (e.g. from a previous order or if the billing address is the same as the delivery). The screens where these details are entered are probably the least polished part of the app as it stands today, with little validation or enhancements, such as a UIPicker for selecting title and card expiry dates. You also have to click into the address/payment method to have it "selected" for the order. A better way to do with would be having clicking the item in the list select it (with some sort of indicator that it is selected, like a check mark), and the user having to enter an edit mode to have clicking the item take you to the edit screen.

Finally when the completed order is submitted, a confirmation is provided, although as I mentioned before, the order is not sent to the server. For poster day I would like to have a very basic implementation of sending the order to a temp table on the server's database and displaying that on a grid view so I can demo the phone sending the order and the site receiving it just to prove it works (although no processing or charging will have taken place obviously), however I have yet to do this. 

So thats an update. From here on its documentation time.

Sunday
Jan092011

Time is an illusion. Lunchtime doubly so

Don't panic.Salut world!

Wow, my last post was on Monday, sorry about that. This Tuesday was the first day back at Uni and Karate, and Wednesday was the first day back at work for the new year. When I wasn't doing one of those three things I was busy rushing to get the documentation for my Flash assignment done before the deadline on Thursday. The week in general has been a pretty draining experience as I tell my body I can't follow the daily cycle I had over the Christmas break.

While I've not produced a lot more planning documentation for my project this week, I have made some great progress. While at work on Wednesday I had a meeting with my client where we discussed how the app should work and went over my interface designs. The feedback to the designs was very positive and he signed off on them. There were only a couple of suggestions for changes, which were:

  • Make the app UK only initially (and for the duration of my project) to remove shipping complexity.
  • Change the way accessories work to a screen where you add accessories to a product (rather than select accessories in a drill down menu for each product).
  • I hadn't planned how to handle user login. For now we will keep this the same as how the current website works and have the user create a login after submitting an order. This also removes some complexity.

The rest of my time has been spent filling in the last few holes in my Object-C / iPhone programming knowledge. There is no doubt much I still need to learn and many things I will discover as I develop the app, but I'm trying to hit the key things I know I will need before development begins.

Two of the things I've been reading about that are crucial to the app are web services and data storage. Many of the apps I've looked at that contain vast information about whisky have no backend support. When you download the app its a massive 400-500MB file full of data and images, and if they update it to add new items you have to re-download the whole thing.

One of the neat things about the app I plan to develop is it will have the full support of the current websites backbone, including the massive database of products. I'm going to use a web service at the initial launch of the app to download the simplest version of the product range (name, price, ABV and image url most likely) for the list views and then request more information on a particular product when the user selects it. On future loads of the app I can then do a similar call to sync any changes, such as a product being removed.

The good news is it seems very easy to call and parse data in Object-C, so long as I keep to single level XML. For some reason there is no tree-based XML parser in the iPhone SDK, and I don't intend to spend my time implementing my own. Following the book I've produced a simple app that pulls the top ten songs in iTunes from a RSS feed. My next step here will be to put up my own web service and try retrieving data from it. I need to decide if I should use a SOAP or RESTful service, as the SDK supports both.

The other thing I've been reading about today is data storage. The iPhone actually has four options here:

Technique Pros Cons
Archiving Allows ordered relationships (arrays, not sets). Easy to deal with versioning. Reads all the objects in (no faulting). No incremental updates.
Web Service Makes it easy to share data to other devices and applications. Requires a server and a connection to the internet.
SQLite Can fetch lazily. Incremental updates. Full power of SQL. Requires more code than archiving or Core Data. No real ordered relationships.
Core Data Lazy fetches by default. Incremental updates. Versioning is awkward (but can certainly be done using a NSModelMapping). No real ordered relationships. Much of the power of SQL is inaccessible.

Credit: iPhone Programming: The Big Nerd Ranch Guide By Joe Conway & Aaron Hillegass


Obviously I'm going to use a web service for syncing data with the mother ship, but I don't plan to rely on it the whole time. Archiving involves saving out my objects to a file in the app's sandbox. As it says above, this doesn't allow you to update individual records and is certainly not suitable for a database with over 4000+ products. So my choice really comes down to SQLite and Core Data. So far I've covered SQLite which seems pretty great, but I will withhold judgement until I have seen how restrictive Core Data really is.

So thats a project update. In other news I took my first run of the year with a couple guys from karate. I intended to make this a weekly thing near the start of last year but didn't have much luck at doing it more than once a month. Hopefully this year I can really keep it up. This, along with karate three times a week, should hopefully get me a bit fitter. I was particularly happy with this run as it's the first 3+ miles run I've done in a long time without stopping. Lets hope this keeps up.

Oh, and my MacMini died Friday…

It had been booting slower and slower (12+ minutes) and became quite crashy over the last week or so. I even got my first kernel panic. I tried all the usual things like fixing permissions, checking the disk, resetting PRAM and initially they seemed to help, but it eventually got too much and I decided to try a re-instal. That got very close to finishing before displaying a massive yellow warning triangle telling me the instal had failed and asked to restart the machine. When it did the instal disk could no longer see the hard drive, so I believe the technical description for where I am I completely fucked. Fortunately its under a year old and is covered by Apple, but for some reason their support line closes at 7:45 on a Friday and doesn't re-open till Monday.

So I got that going for me...