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 life (14)

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.

Saturday
Dec032011

Well, it's just ineffable.

In support of the men's testicle charity Movember I embarked in the last month on the fine and noble quest of growing not just a moustache that could frighten small children, but a full beard to prove just how manly I can be and to raise awareness for said charity. I'm not really sure how much benefit to the world my single beard brought, but the guys at work raised over £6,000 by selling a limited edition whisky, so lets call it a rounding success.

Growing a beard was an interesting experience. Certainly the worst part was how incredibly itchy is became about a week in, but once that was over it was smooth sailing. Because I only had the fella for a month there was no need to maintain or shape it, so it was actually less work than the regular shaving I normally do. I certainly got some comments that I should have only grown a moustache as per the "rules" of the charity, but as was proven in the photo I took during the shave down, it was probably for the best that I didn't.

Unless you're my Dad, moustaches are a stupid concept. Very few people pull them off, and I have proven not to be one of them. As requested, I also took a photo of the obligatory moustache before it went completely.

I was certainly of two minds about shaving it off at the end, with opinion divided between whether I looked good with a beard or not. In the end I opted to axe the beard because of the maintenance it would require in the future and because I look much younger without it. It's certainly good to know I can pull one off though, and might reconsider in the future.

You can see daily photos of the beard's progression and ultimate death over here.

In other news, I was on another episode of Downloadable Content in which we had an open discussion about anything and everything video games. I don't really recall what I talked about, but I'm sure it was all podcasting gold. You can subscribe to the show in iTunes or download the episode directly via this linkage.

Sunday
Oct302011

What are you, nuts?

I've been using this profile picture about the place for a month or so with no real explanation for why I have an appallingly fake beard and an incredibly ugly hat. As it turns out, I wasn't trying to get arrested for looking like a child molester, it was for a Movember photo shoot.

Movember is one of those charity things, where you do something effortless and stupid and people give you money to make themselves feel better about their life. This particular one is for men's balls, so as a man who has a reproductive system and the offending gland, I must profess some self-interest in supporting this one over starving Africans. To offset this selfish behaviour I did donate to other charities during the year, so I feel pretty good about this.

So Movember is where you grow a mustachio in November (M-ovember. Get it? I thought it was clever to). In support of this charity my day job has released a charity bottling every year, and this years one (in partnership with Glenfarclas) features a photo of all the men in the company looking incredibly stupid.

I actually thought it came out quite well. As the company gets behind this charity every year I thought I would attempt to participate (after avoiding it two years running), by growing some facial hair. I'm going to bend the rules though by not just growing a mustachio, but a full beard, as young people with mustachios simply look like pedophiles. I'm sorry, its just a fact. It's on the Internet, so it must be true. I've never truly attempted the whole facial hair thing (beyond laziness which always stops at the point that it gets itchy), so I'm interested to see how this turns out.

If this post has convinced you to donate to saving my balls, and you like whisky, you can buy a bottle here starting November 1st. If you want to save my balls, and don't like whisky, you can donate directly over here.

In other news, I've started hosting a new blog by my friend and co-worker Michael. He writes funny stuff, so I urge you to go read him, as I'm not funny at all.

Disclaimer: In case it wasn't clear, I don't have prostate cancer (yet), so think of this as saving my future balls. Not my present ones. Those are just fine.

Thursday
Sep292011

Fuck you! And your eyebrows!

So I've been at home sick all day. That's been just great.

In other news, today (it's nearly 2am as I write this) is my birthday. I'm 23, whatever that means. Birthdays are an interesting thing once all those important early "mile stones" have passed and you have enough money to buy all the things you would normally await birthdays so eagerly for. Sure I will get gifts, but nothing I couldn't have paid for myself. A lot of people seem to get depressed over this fact, but honestly I find it kinda cool. Gifts are such a material thing. What birthdays should truly be about is appreciating that you've been on this world another year and celebrating that fact with the friends and family that care about you. Its also a great time to consider where you are in life and where it is heading. Getting older is certainly a good way to appreciate that everyones time is limited and none of it should be wasted. 

As mentioned in an earlier post, we adopted kittens! Polly and Alice are great, but Sybil (our older cat) isn't very fond of them yet. There have been a lot of standoffs where she runs into them and stands her ground, hissing and growling. The little buggers don't get put of though, as the moment she turns and walks away they immediately follow her. I'm sure they will be a happy family eventually or there will be a violent battle for cat supremacy. Lets hope for the former.

At work we launched a couple neat features that I worked on. The first is a simply awesome dedicated page to our new Christmas Bitters, featuring corny JavaScript snow, looping Christmas music and a "live" webcam feed. In combination with that page you should also read this hilarious blog post, in which Mike truly outdid himself. The second feature I contributed to is a page where folk can create their own whisky. I encourage you to click the "make me a case" button to see my favourite addition to the page.

I also got my own PC! It's an Intel i5 machine with a honking 12GB of RAM and a AM Radeon HD 6700 graphics card with dual 22 inch Samsung monitors. Unfortunately some genius thought it would be a good idea to RAID 0 two 60GB SSD's to give me 120GB of space and absolutely no redundancy. I already lost one SSD, so thats been great. Except for fearing the machine isn't going to work every time it boots though, its been wonderful. Its certainly the fastest Windows PC I've ever used. And look at how professional my monitor stands are! No expense was spared.

It also occurred to me that I forgot to plug the episode of Downloadable Content I was on that was posted over a month ago where we talked about the Supreme Court ruling, which is a nice follow up to this post. You can subscribe to the show in iTunes or download the episode directly over this way.

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.

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.

Thursday
Jan202011

Marigold with blue, are you crazy!?

The only productive thing I did today was clean my desk, which had become quite a wasteland of crap. I suddenly have so much space now. My MacMini also returned to me yesterday, now with the added feature of actually working!

Sunday
Jan022011

Smoke me a kipper

The lights have flickered a few times and now my router is very upset and wont give me internets. So instead of a real post about iPhone development, here is a picture of a ferret posted from my phone.