Friday, February 4, 2011

Recap

It's a bit late to recap the year of 2010, but since I mentally make milestones from birthday-to-birthday instead of arbitrary Dec 31-to-Dec 31, I suppose I am actually in the middle of the year I am going to recap.  The next one will in fact be in May 2012 :)

So, what did I do in 2010?  I studied a handful of books:
  • XMPP: The definitive guide
  • C# in Depth
  • F# For Scientists
  • Expert F# and
  • Beginning Blackberry Development
I experimented with these in various ways.  I made a small Blackberry app, which I had grand visions for; but I abandoned this when I realized that RIM was going to dump the O/S in favor of a new one.  At the time, I also wanted to get into Android development as well, so it meant that although I was still going to work in Java, I was working on a better platform (that can actually use generics, among other things).

I worked through quite a few Project Euler problems, and then grew a bit weary of F# in general.  I just didn't have any interesting projects that would make use of it.  I would still be very open to anything that came up, but overall, I think that I won't be pursuing functional programming right now.  I suppose this will change next year, after I have experimented with other things that I will write about towards the end of this post.

C# in Depth was quite a good book to read.  I was often confused about the different versions, and the book not only points out what changed, it actually takes you through different techniques and examples, showing you what it looked like in the different versions.  Version 4 came out after I read this, and it is actually quite powerful.  I suppose you don't really need F# if you have C#, but there are some really good things about F# that make programming in it much more pleasant.  There are a lot of things to like about F#: computational expressions, active patterns, even the syntax itself looks very pleasant (if you don't mind whitespace instead of braces).

XMPP was the most interesting thing I delved into last year.  I had dabbled in some Jabber implementation very early in my career, but didn't pursue it at all.  When I read through the book and went through the docs online, I saw that it was actually being used everywhere I looked.  Later on in the year, I found out even Facebook chat was XMPP-based (as is Google talk and Wave [RIP]).  I was quite excited by it and ran an ejabberd server for a bit while I tried to figure out some server components to add in.  It was difficult to start programming for XMPP though, with a lot of big players in the market.  Since I was trying to use F# in those days, I wanted to use C# libraries, which are all closed-source and needed licensing.

Setting up XMPP is not easy.  The servers are fine, but adding in TLS and trying to program for it seems to be very difficult to get into.  I was able to get TLS working on ejabberd, and was able to chat using Trillian with Google talk accounts.  However, I didn't enjoy wrestling with all the different libraries to try and extend either servers or clients.  I later discovered that there are better implementations, but they haven't been around as long and decided to wait it out.  I am talking about telehash (which is gaining a lot of traction these days), and also STOMP.  Anyway, I am now looking into node.js for similar functionality.

With respect to work, I mainly spent the time working with Sharepoint, and have reached a stage where I think I am content with moving on.  There isn't much left to work on, and I think I will not move on to Sharepoint 2010 as I had planned.  I successfully managed to implement a "minimal master page" and managed an HTML5 boilerplate-style reset, which is actually a lot harder than it would seem.  I had to get rid of Windows on my server though, to start experimenting with node.js.  The reset was actually quite stimulating, and if Silverlight wasn't all over 2010, I think Microsoft would have had a lot more success with it.  If I had continued with my experimentation, I would have sought to completely replace Silverlight with HTML and javascript, making it a completely HTML5 (now just HTML) solution with a minimal master page (FTW).

I was approached to work on a Drupal site for a large company here, but after a bit of soul searching, I think I've come to the conclusion that I am not content with CMS development.  I think I've done this kind of thing for 5 years now, and I am discovering a lot more new stuff now that excites me.  I'm going to let it plateau for a bit as I explore the following technologies:
  • Neo4j - a graph database, which allows you to query large amounts of relationship data.  You can think of it a bit like LinkedIn, which is their showcase example.  Think of the query which lets you display the connections withing 5 hops of you in some kind of field like "programmer".  Doing this in a relational database wouldn't perform very well with a large data set.  I am quite excited to be working on a test neo4j database, trying to work out how to solve these kinds of problems, because these kinds of problems are actually quite common-place.
  • CouchDB - this is a document-based noSQL solution, which is great for storing and retrieving data that doesn't have set form.  What I mean by this is that whereas you would hard-wire relationships between entities in a relational database, in Couchdb, you generally "shard" them into "databases" and then code the relationships in your code itself.  This way, you are able to store a piece of information, along with all of its related info in one place, and slice it up as you want using code (in this case, map-reduce in javascript).  The data is all stored as JSON, and you can attach arbitrary binary data as well (though retrieving these is slow).  I see it as being great to store things like blog posts, comments, etc., but it has quite a few applications.  I will be using it a fair bit this year, I think,
  • Node.js - This basically allows you to process a lot of simultaneous client connections on the server, where you run javascript.  It basically can accomplish most things that XMPP would be able to.  Chat, games, presence info, etc. can all be programmed in, and it can connect to couchDB for added javascript goodness.
  • GWT - I am quite happy with how GWT is performing.  I have a unique need for it, as I am working towards an app for educational institutions, which has a dependence on Google Apps for Educational institutions, Google APIs, and Neo4j; and needs a web front-end.  This fit the bill nicely.
  • HTML(5), javascript, CSS3 - The cornerstones of what I do will not be neglected this year.  I think out of the three, javascript is going to be in everything I work on, but I will still keep my eye out as IE9 pops out and the browser wars continue.  Let's hope that IE6 dies a slow quick death this year.  I am also going to be taking a closer look at user interface this year.  There are a lot of problems that I'm working on that actually translate into how well you can get the user to enter in what they want.  The interface solves a lot of challenges that you can't possibly account for in the back-end, and instead of second-guessing, just make it so the user can tell you what they want, using the broadest toolset, which needs to be as broad as it is abstract, without alienating the user and having the shallowest learning curve possible.  It's actually a huge problem, but I'm hoping to come up with some solutions that can be used as a base in future work.
I suppose that covers the gist of what I am interested in these days.  I am always on the lookout for interesting projects, but I think I have my hands full with my own ones right now.  The best part of that is that the things I am working on are translatable to things others are also looking for, so I'm hoping this pays off down the road.

Labels: , , ,