Introducing Hideki’s Song List

I sing different kind of songs at karaoke, and sometimes it is hard to keep track of what I can sing. I used to keep the list of such song using Google Docs (I guess it is now called Google Drive)

About two weeks I go, I decided to make the new system instead of appending yet another entry into spreadsheet on Google Docs and that’s when Hideki’s Song List is born.

While what I’m trying to accomplish using this system very simple — to display the list of songs, however, I wanted to integrate unique features.

I decided to use PHP with MySQL for its backend. It allows very rapid development. While I am not very fluent in PHP in particular, I am required to maintain quite a bit of existing PHP codes at my day job, this is determined to be good project strengthen my skills in this field as well. (other languages I was looking at was Django and Ruby, however, they are determined to be bit slow, at least in where it is hosted. I can’t afford VPS for such personal project, so I have to resort to shared hosting, which PHP works decently.)

Another area of technology I wanted to experiment was Web Intents ever since Google announced it on their Chromium blog. Web Intents system allows you to implement rich web interaction between different web services. Using this structure, I have decided to integrate feature to look up information about each entry on external services. To accomplish data exchange between these services using Web Intents, I have developed text/songlist JSON format. Currently Web Intents is supported by Google Chrome, and the service need to implemented and added as an extension to Google Chrome, which means I had to develop Google Chrome Extension that can parse JSON format dispatched by Web Intents. YouTube and Last.fm support is available so far.

While only implementation of text/songlist is Hideki’s Song List as of writing this, but I am more than happy for someone else to take advantage of it. (and those extensions above should start working right away!) As the specification being development stage, you may see some revisions over time, but base shouldn’t change too much. If you are interested being part of finalizing specification, please let me know — with enough people participating, I will probably make Google Groups or something for it.

Hideki’s Song List exposes an API in text/songinfo as well. (this is mainly intended for Android app I want to implement, haven’t gotten around to do it, though.)

So there I have it, the simple yet decently powerful system that keeps track of songs I can sing. There certainly will be more features to come!

How Git is Saving My Project

Introduction

If you have been following me, I’ve mentioned numerous time about this software called Git.
You’ll find more information about what it is on their web page mentioned above or perhaps, you can checkout its Wikipedia article, if you prefer. Simply put, Git is distributed version control system.
From mid-2008, I have been using Git to manage my work related data. I’m being sole user of the repository I use and manage, but even with that application, I find this very useful.

Why Git is So Cool?

It’s Fast!

I have been using Git to manage anything ranging from 1KB of text data to couple-hundred megabytes of submitted video game build files, and it has been very reliable and fast. Subversion somewhat did this right, but this wasn’t scalable for my use (I will explain about its scalability later), and Mercurial just didn’t work very well when it comes to large file introduced on the repository. (at least on Windows.) Git would allow me to check in any of those files with ease.

It’s Reliable and Scalable!

I started using Git on a single machine, then eventually cloned repository for backup, then I also cloned it for off-site backup. With Git (and many of distributed version control system) one repository is not superior to other repository. If you clone the repository, the entire history of that repository will be copied locally as well. It just involves simple command and securely done over SSH as well. This is real beauty of distributed version control system, crash on any system participating is non-event. If I have to replace, say hard drive on one machine, I’d just replace the hard drive, clone from one of existing machine, and I’m back to to business. Because I work at home as well, I have at least four copies of repositories are available anytime, in which two are acting as “hub” repository, which makes it very reliable. (Not only data on four machines have to be destroyed, all backup of those repository, which is created routinely on each hub repository, need to be destroyed to me to lose data under this system.) Git also provides me high reliability in terms of data integrity. If data contained in repository is corrupted, I will know immediately as any data contained in the repository would be checked against SHA1. This characteristic, just like many version control systems, also helps save bandwidth, as anything that needs to be updated will be transferred.

Branches

Because I deal with different kind of data coming in from a lot of different places, I put each of those into its own branch. With this system, anything submitted externally are placed on its own branch, then merged to my personal branch. This way, I can keep healthy separation of my history and others. Since a lot of files are deal are binaries, merging rarely happens with me. But being able to deal with branch very casually (with many of other systems I’ve tried, including Subversion and CVS, branch is very messy process that I didn’t want to deal with…) makes me to organize great deal of information with ease. Today, I dealt with three different branches for example. Gitk program that comes with Git displays really nice and satisfying tree of my project, too. (it displays the graph resembling subway map; it is in the way, the subway map, leading to the same destination — each commit being the station.

And…

Well, so those are my rhetoric to Git, and for any one I’m looking for some solution to version control, I’d highly recommend Git. Even if you’d be sole user of the repository like me, it will be still useful. I have been losing quite a bit of data every time I have had problem and had to reinstall the OS, but since I have started using Git, I lost none of my work data across reconstruction of my working environment. It’s because Git makes checking into other machines (hence making backup) simple and flexible. (Recovery goes very quick, too; even with 5 months of mass data, it’s about 2.8GB — it is also possible to “shallow-copy” the repository, if quick access is needed.)