The following are some of my Personal Projects.




This project starts with the fact that I am not so talented with music. That I cannot really play songs by ear, but I would like to play some music I listened.

I understand that the technologies in music transcription is still under research and development. There are some success with single instrument and monophony music. However, to write one which transcribe a full pop song today will be very ambitious.

Nonetheless I think it will still be useful to have a spectogram like chart in which translate sound frequences into music notes/pitches.

It could also be useful to just show the more prominent peaks of the wave spectrum. Therefore, I have deployed some heuristics in an attempt to achieve this as well.

This is the general process:

  • Read a wave file
  • divide wave signal into slices by time
  • for each slice of wave signal perform Fast Fourier Transform to get the wave spectrum
  • calculate the corresponding pitch number of those frequencies
  • (optional: apply heuristic to select more prominent pitch signals)
  • visualise the result

Technology Used: Numpy/Scipy, Flask, Javascript, D3, Bootstrap, HTML/CSS

Source Code in GitHub

Small Batch SQL Executor



Imagine, you need to run a group by query on a big tables. While it could just be a simple SQL, you don’t want to hit it in production where it will soak up all the memory and impact your customer. Also, depending on where your indexes are on the table, and the efficiency of the query optimizing engine, it could also be doing a lot of sorting, which does not grow linearly with data size. Also, usually there is no indication how much longer the query going to take.

This utility is created to help running relational database sql queries in batches, typically group-by queries, with the aim to:

  • reduce memory requirement to run the query and hopefully improve efficiency
  • to have steady feedback of the progress of the query task

Technology Used: Java, Maven

Source Code in GitHub

Heuristic Views on Random Topics