Ouvert

(ouvert means open in French)

Last week I contributed a small feature to clize. As before, I discovered this project on the GitHub page for trending Python repositories. The author had a list of open issues for the repository which made it easy to see what needed to be worked on and I picked one that caught my fancy.

Once I knew what needed to be done I had to figure out how to implement it. The first thing I did was see how the existing code handled unknown command line arguments. “Oh look, it printed ‘Unknown option’! That seems like a good place to start.” I ran an ack for the phrase “Unknown option” and found the relevant source code files. The next step was to figure out from where the parsed arguments lived inside the program. A well placed print statement that I added quickly solved that mystery.

With this knowledge in hand I began writing some code. The basic algorithm was pretty simple – in case the user enters a command line argument that is not one of the parsed arguments compute the Levenshtein distance between what the user entered and the known arguments and suggest one that has the lowest distance. This was more or less the initial pull request that I submitted. The author provided excellent feedback on my code and after a couple of iterations my commit was merged into the master branch.

Things I learnt along the way –

 

AOSA: The NoSQL Ecosystem Review

(this is a review of the chapter on The NoSQL Ecosystem in the Architecture of Open Source Applications)

Unlike the other chapters in the book (and as stated in the introduction to the chapter), this portion of the book doesn’t dive deep into the internals of one particular project. Rather, it gives readers an overview of the various algorithms and concepts that serve as the building blocks for NoSQL systems like Voldemort, Cassandra, HBase, etc. I think it does a great job at explaining what is out there once one moves away from the traditional relational model and SQL world. It also references several seminal papers, like the Google BigTable and Amazon Dynamo papers, which I urge people to read if they are interested in understanding more about the topics covered in this chapter.

Speaking as someone who has read numerous papers on distributed and NoSQL systems (as well as studied them in several courses at UIUC) I feel like I didn’t gain a whole lot from reading this chapter. It was still a very enjoyable read and I really liked the sections that talked about fsync, read repair, hinted handoff, and anti-entropy. The section on the differences between range-based and hash-based partitioning was excellent as well. One thing I particularly liked was the author’s use of examples to explain concepts like the relational model, range-based partitioning, hash rings, etc.

If you have zero or very little background in NoSQL systems I would highly recommend reading this chapter.

AOSA: Eclipse Review

(this is a review of the chapter on Eclipse in the Architecture of Open Source Applications)

Eclipse was the second IDE (the first was Turbo C++) I was ever introduced to. We used it during our first undergraduate computer science course to code in Java. I remember being blown away by how powerful it was, and how easy it made learning a new language. Even though I’ve switched to using IntelliJ IDEA for Java/Scala now, Eclipse still holds a special place in my heart.

The chapter on Eclipse is very well written and offers readers a glimpse into why Eclipse is the way it is, and why certain design decisions (like writing their own Java compiler) were made. The component and plugin based architecture used by Eclipse seems to be extremely flexible and easy to add new features to. The compatibility layer provided by the team for each new major release of Eclipse (so that plugins written against the older versions still work in the new version) is a great move by the team to iterate on the internals (and externals in the case of public APIs) while preserving the ecosystem of plugins that already exist. I particularly enjoyed the section on “Rich Client Platform (RCP)” that talks about how people used portions of Eclipse to build other, non-IDE, applications. Incremental builds is one of my favorite features of Eclipse and learning how that worked was quite satisfying as well.

Things I learned about –

  • OSGi
  • Native and emulated widget toolkits

Key takeaways –

  • Having a good API is paramount in others adopting or contributing to your software
  • Components are very powerful

Goal Tracking: April Edition

At the beginning of the year I published a post outlining what some of my goals for the year were. In the spirit of being transparent, here is the progress I made on them over the course of April –

  1. 0 hours of volunteering. I’m disappointed in myself about this since it seemed like I’d finally gained some momentum by volunteering last month. Oh well.
  2. Zilch shyness.
  3. 1 book read – Me Before You. I think this was a departure from most books I’ve read in the past, but I did enjoy it.
  4. 0 research papers. I’ll try to read 4 over May to make up.
  5. 6 blog posts.
  6. I’m quite pleased that I finally managed to do one muscle up this month. My next goal is to be able to do two muscle ups, since after the one I wasn’t able to do any more over the course of April haha.

Coachella

I spent the past weekend at Coachella Weekend 1. I don’t think words can describe how sublime the experience was.

As I’ve stated elsewhere, I love music. Despite that I was reluctant to attend Coachella because I was not too happy about camping. I’ll be honest – I love sleeping on a real bed and using a real bathroom and shower.

However, seeing the incredible lineup and hearing nothing but good things from my friends (who went last year) I started leaning more towards going than not. All it took was a little more cajoling from my friends for me to decide to step outside my comfort zone and join them for Coachella 2015 Weekend 1. I’m so happy that I made that decision.

Each performance that I went to was phenomenal. I got to see so many bands that I like, and also discovered some great new music.  The quality of music at Coachella surpassed all my expectations.

The AC/DC performance was by far my favorite one of the entire festival. Watching their performance was almost an emotional experience since I grew up listening to their music. They were also one of the bands that inspired me to learn how to play the guitar.

I even enjoyed camping at Coachella! I’ve been told that this wasn’t “real camping” but it was still quite a lot of fun (though I did appreciate my apartment a lot more once I got back). It did shed some of my initial “fears” of camping which I’m quite happy about.

All in all, Coachella was stellar. I can’t wait to go back next year.

Documentation

I recently received a feature request for http://linkedin.github.io – one should be able to link to an external website hosting documentation for the project directly from the home page. I had some time tonight so I implemented this feature. It wasn’t hard to add at all, and it gave me a chance to exercise my Javascript muscles which have been dormant for some time now. I also identified sections in the codebase that I would like to refactor, and hope to get to doing that sometime within the next 2-3 months.