I began a new project last month, called Mĭjur, an Android client for Imgur. There’s quite a few around already, including the official one, but they’re all of varying quality; some are actively working on improving, like the official app (which I still think is just a wrapper around the mobile website) and Imgur-Holo which made a leap in its considerations toward design in the last few weeks or so. My version will exist for several purposes:

  • learning
  • customised to my needs
  • progressing the ImageLoader library

Learning is the main plan – I started at Novoda three months ago, and while I know a little bit about most parts of Android, I’d rather have a solid understanding about the whole application development lifecycle and a solid understanding in several core areas of Android. For this reason, development on the project might be pretty slow – I want to do this right.

It’ll be customised to my requirements for the client. “You are not your user” doesn’t apply here – I use Imgur a lot, and while I recognise I’m not every user, it means I can make a minimum viable product which is suitable for me, and expand from there.

I’ve become quite attached to Novoda’s ImageLoader library. It’s not extremely pleasant to use, but that’s a minor issue – can just write a wrapper around the library itself. Writing an app which is essentially an image viewer will mean that I’ll be able to deep-dive into the ImageLoader code and learn about the library in such a way as to make it easier to contribute fixes and features.


For the minimum viable product, from the user perspective the client must:

  • load the (most-viral newest-first) public gallery in a grid
  • show the image (or album of images) with caption, description(s) and details (votes, views, source)
  • allow horizontal paging for next and previous image/album
  • look as though it’s finished

So far

I’ve been working on a “core” module – no Android code is allowed in here; this makes it really easy to run tests for this module in the JVM. The core module interacts with the Imgur API though currently only access publicly available resources (nothing that requires user authentication). All the API calls are done on a single thread; handling multi-threading will be the responsibility of the caller (in the “Android” module).

Currently, I’m working with Etsy’s AndroidStaggeredGrid to display the gallery in a grid. I have a list of GalleryItems each of which contains a URL to the image or album cover image it represents.

To do

I want to complete the MVP by mid/end of January. Given as how half of Imgur is animated GIFs, I need to implement animated GIF support in ImageLoader. The short term plan is:

  • load GalleryItems using AsyncTaskLoaders in a GridView
  • load the URLs as can be best loaded using ImageLoader, with an error image for failures, and default image for still-loading
  • port to AndroidStaggeredGrid
  • reassess

That’s what I’m working on today! :)

Starting at Novoda

I started writing this in September but I haven’t had a chance to post it. It was too long so I cut it down!

Novoda logo

I started my new job as a Junior Software Craftsman at Novoda on Monday, a company I had my eye on for a few years when I first started Android development. A few months before the end of my MSc, I sought mentorship from an ex-Novodite, Gonçalo, who was extremely generous with his time and helped me get on track for an interview. Needless to say, I was all like

Kid saying oh boy

Novoda is a relatively small team of Android developers based in London and Berlin. They have a good reputation in the Android community (with regards to their collective expertise and attitude toward software craftsmanship) and they’re known for starting the Londroid Meetup in 2007 and also organising (along with WIP and SkillsMatter) Droidcon UK, an annual conference for Android developers from 2010 onwards.

I joined in the last few months of the Tesco Groceries project, which we worked on along with the launcher on the Tesco Hudl tablet. From Monday to Wednesday, I sat with almost all the devs in the London office; everyone’s pairing style was different, and it was interesting to see how they all approached tasks and problems – it’ll be even more interesting next year; I’m planning to pair a lot more and I’ll be able to see if their approach is different now that I’m a bit more caught up on working practices, and more familiar with everyone.

Thursday was spent looking at Novoda’s ImageLoader library, trying to familiarise myself with the project by looking to identify the cause of two bugs. Did I fix them? I can’t remember. One of the short-term goals I had when starting at Novoda was to get more involved in a couple of the open source libraries, and I think I’ve achieved that with my activity on ImageLoader. I’m working on a personal project (a client for the image hosting website Imgur) and this could be used to further iron-out some issues with the library. Sometimes when I’m reading it, I’m all

Confused child face

but recently, it’s been more like

Tyler Durden saying: I get it, that's very clever

I’m getting there. I think the basic idea is the same as in any environment:

  • be receptive to advice and critiques
  • ask for help when you need it
  • demonstrate your worth through active contributions
  • keep learning and practicing to get better

I’m not saying I’m the prime example for all of these, but I’m working on it. I came in with high expectations and I’ve not yet been disappointed. I’m getting paid to learn something I love learning about!