Life in the cloud

For day to day computing, my web browser is the only program I use. Email, documents, spreadsheets, calendar, photos, music, even LaTex documents; it’s all in the cloud these days. The advantages of this move to decentralized computing have been well documented and I won’t go into them here. However, what hasn’t evolved at the same rate is a method of keeping all these services accessible and organized.

Since 1993, bookmarks have been a feature of all major web browsers and the canonical way of keeping sites organized. This worked okay at a time when sites were static and could be easily categorized into subjects and folders. However, these days, one of the main issues I have is remembering what service I stored something on – ‘What was that cool new js library again? Did I star it on Github, or save it to Evernote or Pocket…’. ‘That online banking form we filled in for the club last year, did I save that to Dropbox, or is it loitering in my Gmail account somewhere? or was it my Uni email?’. I’m sure this sort of thought process must be familiar to anyone who is as immersed in web applications as I am, and bookmarks are no help for this sort of problem.

Luckily some other troubled souls realised this was a issue before I did and have created services to try and aggregate various cloud services:

  • Jolidrive – Jolicloud is the new computing platform built around your life in the cloud. Jolicloud is the home for your most precious content.
  • Kippt – Build your online library of amazing things.
  • IFTT – Put the Internet to work for you.
  • CloudKafe – Organize your cloud.
  • Cloud Magic – A better life with every search.

These services all take a slightly different approach to addressing the problem, and each is a step in the right direction. Sadly, my experiences so far have been that they essentially try and do the jobs of the services they are aggregating, just in a less intuitive way or with fewer options. They’re also all relatively young and don’t come without the confidence of a well established company such as Google. For many users it can therefore be a tough sell to learn a whole new way of accessing their content, only for that service to potentially disappear the next day. And then there are the obligatory privacy concerns in giving one company the keys to all of your online information…

At the moment the best solution I’ve found has been to carefully select and limit the number of cloud services I subscribe to. One simple and worthwhile aggregation is to choose one email provider (in my case Gmail) and use it to pull (via POP3), email from all your other email accounts. Then at least all your emails are in one place!

Meanwhile, my search for the perfect tool continues.

iTunes U – beware

I subscribed to iTunes Match when it was first released but it was only recently that I actually called on its backup functionality – and the results were a little unexpected.

As a quick summary for those unfamiliar with the service, iTunes U is Apple’s cloud music offering enabling users to have their music stored on Apple’s servers – backed up and accessible from anywhere. The main point of difference the service has with some of its competitors is that it will attempt to ‘match’ songs and just put a mark next to them song on Apple’s servers, acknowledging the user’s ownership (optimistically). This provides joint benefits for apple and the user:

  • Apple, in the best case need only store a single copy of each song, rather than a duplicate for every user.
  • There is essentially no upload when a song is matched, so user’s libraries can be backed up much more rapidly.

As a means of accessing songs on my iPad, the service works well. However, it was obviously no help for getting music onto my Android phone.

Recently, I wiped my computer whilst ‘upgrading’ the OS (for those contemplating the move from Windows 7 to 8, don’t!). Upon transferring music from my external hard drive back onto my laptop, I realised that I hadn’t backed up my last couple of month’s worth of new songs. No problem I thought, they’ll just download into iTunes once I’ve signed back into iTunes Match – and indeed they did.

However, they downloaded as AAC files (Apple’s proprietary music format), rather than the MP3 format of the original songs. Thinking about this, it makes sense, as the songs were ‘matched’ rather than uploaded but it is a side-affect I hadn’t considered. I had to convert all the songs back into MP3 format for compatibility with my Android phone (and consistency with the rest of my music library).

Whilst the service works as designed, and the matching performs well, the enforced ties to Apple’s devices and formats is a deal-breaker for me, and I’ve cancelled my iTunes Match subscription. Back to the manual external hard-drive backup for now!

Tech Environment

I’m sometimes asked which tools I use for a particular job, so here goes:

  • At home I work on a Dell XPS Laptop with a dual boot setup of Ubuntu 12.04 and Windows 8.1. When developing I usually hook-up a small external screen.
  • I use Eclipse, with the Aptana extension installed for Java and PHP programming. I like the fact that I can use the same editor on both Linux and Windows, and for C, Java, Python and Web development. I also use Microsoft Visual Studio for C#, and PyCharm for Python development. For smaller editing tasks I use Notepad++ on Windows and Vim on Ubuntu.
  • Chrome is my default browser (although I did use Firefox for a while). I especially like the developer tools.
  • I use Mercurial and Git, combined with Bitbucket and Github respectively, for version control. Currently I am most comfortable with Mercurial.
  • Just about everything that isn’t code related goes in my Dropbox folder, of which I’m a big fan.
  • I use cloud based tools, especially Google’s, for as much as possible. I like the portability they provide and in general trust ‘them’ to look after my data more than I trust myself!

Top 10 consumer software tools:

  1. Gmail
  2. Google Drive
  3. Dropbox
  4. LastPass
  5. Pocket (saving articles I come across on the web for reading on my iPad later)
  6. Evernote (longer notes, recipes etc.)
  7. Google Maps
  8. Feedly (RSS feeds)
  9. Goodreads
  10. Rotten Tomatoes

Other gear:

  • Google Nexus 4
  • Kindle Paperwhite
  • Panasonic Lumix FT4

Abstraction

It struck me, sitting in the Eng library, studiously studying (really, I was!) for my upcoming embedded systems exam that our generation has it harder. That probably sounds exactly the sort of pretentious statement you might expect from a college student of today; so allow me to explain a little further.

Computing knowledge and education is dependent on abstraction.  As one of my lecturers likes to say (on repeat), computers are very simple and also very complicated. What he means by this paradox is that any layer of a computing system looked at in isolation can be understood without too much trouble: arrange four MOSFETS correctly and you get a NAND gate, hook up a few ANDs, ORs and XORs and you’ve got a full-adder – easy. Similarly, for any budding programmer writing a script to pull some records from a database and display them to a user might seem a logical enough exercise.

The complexity is in trying to mentally link these two ends of the computing spectrum: the high level and low level. After three years of Computer Engineering courses I’m only just able to go from thinking about some high level bit of functionality and mentally traverse the various layers of abstractions and have some understanding of the machine level functions invoked.

One of the books I was studying from, Mano’s, Computer System Architecture, was published in 1983. It continues to remain relevant and useful in 2012. The topics of RISC architectures, control paths and pipelining have evolved only gradually in the intervening 30 odd years. What has evolved is layer upon layer of high level functionality. We’ve had the OO revolution, with many Computer Science students graduating with their lowest level understanding being how to implement quicksort in C#, Java or Python. There are now countless networking protocols, web frameworks, mobile devices, and embedded systems that are starting to look less and less like embedded systems.

A consequence of all of these extra layers of abstraction is that students can no longer be expected to learn and understand them all! In recognition of this, there has been a proliferation of new, more specific qualifications. Where we once had Electrical Engineering, we now have Computer Science (the first course was taught in 1953 at the University of Cambridge), Computer Engineering (1971), Software Engineering and Information Technology. Is there any other area of professional education that has seen such an expansion?

As a student studying in this new world, I’ve found myself somewhat frustrated that I’m largely expected to learn in detail some narrow area of knowledge. I’ve spent a large amount of my own time trying to understand as much as possible from the other areas of qualification. I’m very aware that to remain current with ever evolving levels of knowledge I will need to continue self-learning throughout my career.

So if my generation has it hard trying to make sense of the layers of computing abstractions, it’s both exciting and ominous to think of the complexity that will be encountered by the next generation of computing students.

XKCD – Abstraction