Graft

In recent weeks my work schedule has been full of Graft. With the internal deadline for submission being this Friday, we are in the midst of the final push for version one. So I thought I’d blog a bit about the project and what I’ve been doing on it.

Let’s start with a quick introduction to Graft. Graft is a social platform that’s primary focus is digital storytelling. It is comprised of a Ruby on Rails web-based authoring environment coupled with an iOS app for viewing content and social interactions.

Graft will allow users to create content rich Publications via the web interface. These Publications will appear in a users gallery when they log into the app.

This isn’t the first time that digital story telling has been done in a social format. Other apps such as Storehouse will be Grafts competition. However Zero believe that Graft will bring something new and interesting to the market which will set it apart from the rest.

 

Now that that’s out the way. Let me tell you that this product has evolved significantly since we first specced it out. In the early stages of the project, Graft was simply an InspectWISE clone. Repurposed to sync down a given users Publications and Chapters instead of sync Sites and Inspections. The intended use of this stage was to allow users to present their own stories on iPads.

Since then it has undergone many iterations. Loads of new features were added. Quite possibly the biggest of them all being the introduction of a social aspect to Graft instead of it serving only stories for the current user.

Due to the many changes in scope and the ageing codebase of InspectWISE, we decided to start from scratch. Not only for the iOS app, but also for the Ruby on Rails web app. This was greatly due to my influence and I am very glad we did so.

 

For the most part of the project I had been involved only with the web app. When I started working on it I had almost no Rails development experience. A fact which made this project pretty daunting as I was aware it was on a tight timeframe.

Before getting started on the project I decided to do a crash-course style learning of Ruby on Rails. To do so I followed this tutorial/book. I found the tutorial very helpful in getting a decent understanding of how Rails works. Or more how Rails is magic and you don’t need to know how it works.

Once I was more comfortable with Rails I created a new project and myself and another developer started working from there.

Some of the tasks I worked on specifically are:

  • Media Management interface including using Paperclip to handle the uploading and resizing of images to amazon S3.
  • setting up twitter bootstrap to be the base styles for the project.
  • user profile updating (including uploading of a media item to be used as a profile picture).
  • API authentication with devise token auth
  • Restful API implementation for all resources required by the iOS application.
  • writing many model and controller level test cases.

In these few weeks I have come to appreciate the magic of Ruby on Rails. But as well ad that, one of my favourite things in this project has been actually writing tests. There is nothing more satisfying than running a test suite and watching all those little passing dots being output as every assertion passes as expected. :)

 

In regards to the iOS app. Things haven’t quite gone as smoothly. Unforeseen issues have arisen which have left the app in a somewhat messy state. Not to mention, a much more incomplete state than what was expected.

Enter: myself and the other Graft web app developer.

The web app team, having all but completed the required web app functionality for version 1, have now been re-purposed to work on the iOS app. Coming into it so late in the project with almost no knowledge of how it has been written was not a particularly appealing thought. Especially with the deadline of this Friday in mind. Nonetheless, we are tackling it head on.

So far I’ve been involved in providing access to the API within the app. I had some good code to start with and managed to turn it into something I am quite proud of. I even got to write some iOS test cases as well. (I couldn’t resist the urge to test!)

Today (and tonight) I have also finished off the Facebook and Twitter login implementation. This was started by another developer but I ended up rewriting almost all of it.

 

Its now Monday night and we still have a lot of outstanding work to do before we reach the deadline. I’m not looking forward to the overtime. But I can only hope that we can manage to finish the week off with a half decent version one.

I feel as though this version of the product will have a lot of things missing. As we have had to cut out a lot of the features in order to meet the deadline. I’m a bit concerned by the fact that we will only be producing half the solution. But hopefully what we will have will be good enough to raise interest and allow Zero to continue working on it in the near future.