PassMeIn is an open source password manager similar to LastPass. Since KeePass has no cloud functionality (most people store their database on Dropbox) and LastPass is closed source and a little clunky for my taste, I decided to write my own.
PassMeIn is written in Ruby on Rails and ReactJS, using the Stanford CryptoJS library for client-side encryption. Just like LastPass all the encryption is done client-side and the server never sees the userâs passwords in cleartext. Unlike LastPass it uses challenge-response authentication rather than storing a hash of the master password on the server.
Ruby on Rails (both code and deployment, PassMeIn is running on my own VPS rather than on Heroku or a similar rails-in-a-box service)
SubSync was my Masterâs thesis project. It is a long audio aligner, namely a program designed to align a recording of speech with a textual transcript. The name for the project comes from one of the main applications of long audio alignment: creating subtitles for a movie from a script.
The traditional approach to long audio alignment uses speech recognition. A first pass is done over the whole audio recording and segments that match the transcript perfectly are kept as anchors. Since the audio recording in between two anchors must match a part of the transcript between the same two anchors, the speech recognizerâs language model can be constrained, increasing speech recognition accuracy. This process is repeated recursively until most of the words have been anchored.
This approach is very weak to noise, and gets weaker and weaker as the recording gets longer, because the language model for the first pass gets increasingly large. Speech recognition also results in some very noisy segments never being aligned. If two anchors are 1 minute apart and nothing in between can be recognized, we end up with a 1 minute long subtitle for that audio segment.
The idea behind SubSync was to use Voice Activity Detection as a first and last pass. Because VAD is much more robust to noise, we can have a good idea of which segments of the audio contain human speech. We can also estimate the time each punctuation-delimited phrase in the transcript takes to pronounce by using a hyphenation dictionary to count syllables. The best alignment is trivially the one that maximizes overlap between spoken words in the transcript and spoken words in the audio.
The VAD approach was a huge success, as it was able to align entire feature film captions with no more than 1 minute maximum error. This makes the first pass using a speech recognizer incredibly easy, as the language model is restricted to ~3 minuteâs worth of subtitles.
However, the speech toolkit I used had much worse than expected performance on noisy audio and I was essentially unable to align anything but audiobooks with perfectly clean speech.
YouTubeâs caption aligner uses deep learning and googleâs huge labelled speech database, so its speech recognition is much more robust. Interestingly enough, the best possible captions were generated by combining the anchor points YouTube was able to find with a final VAD-based pass to align individual phrases more precisely in between distant anchor points. In short, SubSync was a mitigated success, but the use of VAD as an improvement to the current state-of-the-art was clearly demonstrated.
SubSync was written in Python using SciPy and the Kaldi speech recognition toolkit.
how to allocate tasks efficiently when working in a group (we agreed on interfaces in advance and worked in parallel with little time lost to the overhead of dividing tasks)
2D painting in Swing
a lot about OOP design and avoiding spaghetti code
I otten browse for music on Discogs as it lets me easily jump from an artist I like to his label, and then other artists relasing on the same label. The user ratings also usually align with my tastes.
I wrote a single page app using the Discogs API as a backend, to fix a few pain points I had when using the Discogs website. It's faster, it supports searching by rating, and it makes it easy to find a release's tracks on YouTube or SoundCloud without manually copy pasting.