A New Home!

I recently decided to try Amazon’s EC2 service. They have a free tier for one year that allows for more usage per month than I’ll likely ever exceed. So I decided to try it out. I got myself a shiny new Fedora 64-bit Micro instance and am now using that to host my homepage, blog, and git server. I’ve also migrated this blog there. So the new URL is:

I’ll be posting there from now on!

1 Comment

Posted by on December 17, 2011 in Uncategorized


Tags: , , , , , ,


It’s been many months since I’ve posted here, due mostly to an extreme influx of work from classes and my jobs. But that doesn’t mean I’ve given up on this blog! Rather, I have a huge number of updates, which I will only describe in short detail for now. In no particular order:

After working at the Summer School in Theoretical Computer Science at Princeton, I went to one more conference the week after the school closed out. It was the annual RANDOM/APPROX dual conference, also held at Princeton. It was extremely interesting, with riveting talks by a variety of excellent speakers. I particularly enjoyed the keynote address by David Williamson, who spoke of a new generation of approximation algorithms called “lightweight algorithms” that he believes should and will define the future of the field. I saw a lot of really interesting talks and having taken a graduate course on this last semester, I was able to at least follow a good portion of most talks.

Next, I have begun my fall semester (actually by this point, it’s more than half done..)! I ended up taking two grad courses: Advanced Complexity Theory with Sanjeev Arora and an Advanced Topics course (aka, new courses which may or may not be kept in future semesters) on Information Theory with new professor Mark Braverman. Both are extremely interesting and have gotten very challenging. I think however that complexity theory started off much harder for me since I haven’t taken the undergraduate version of this course first, but as we moved on to new material, I feel like I’m keeping up fairly well with the class. As for information theory, it started off introducing really cool ideas that were pretty straightforward to follow, but our most recent topic of communication complexity is extremely difficult for someone with no prior knowledge or experience with this. The class has a couple of PhD candidates who are very familiar with this material, so I guess that somewhat helps a bit. But it goes very fast and I need to constantly review my material. Nonetheless, it’s a ton of fun! I’m also an undergrad grader for COS 340, which is called Reasoning about Computation. It’s sort of an introduction to theoretical CS through a variety of topics including probability, hashing, algorithmic analysis, approximation algorithms, graph theory, and more. Lots of super interesting material. It’s by no means a trivial course (either to take or to grade..) but it’s an excellent jumping point for anyone interested in theory. I actually haven’t taken this course in the past due to scheduling issues, so I’m enjoying following the material as the class does it too.

We also had a Quantum Computing Day mini-workshop at Princeton. I’m hugely interested in this subj. ct although I have little formal background in it. Nonetheless, I decided to attend anyway. The keynote talk was by Scott Aaronson of MIT, a well-noted theorist in this field. The talk was, as you might expect, brilliant. I’m pretty intrigued by how matrix determinants and permanents keep popping up in so many different places. Aaronson showed the application of those concepts in dealing with fermions and bosons, which given my limited quantum physics knowledge was new to me. There was also another great talk by an IBM researcher; this one a more applied talk about actually building larger multi-qubit gates while dealing with the immensely complicated issues of maintaining the superposition. The talk was very positive and the speaker showed that IBM has made a lot of progress in pinning down some of the problems. Although many believe QC is just a fad and will never actually make it to utility, I’m optimistic to see and follow real progress being made. If for nothing else, for science.

Finally, one more big news. I was offered an internship at Google in NYC! I had interviewed with Google late last year and made it to the host matching round. However, since it was already so late, there weren’t any available projects for me. Luckily, working through a recruiter over a summer, I was able to get a headstart on the process this year and was also waived through the technical interviews since I had done them just a few months prior. I was paired up with a prospective host from the NYC office and that interview went well. Before I could hear back, I was also paired up with a host from the Mountain View office and had that interview as well. In the end, it turned out that both hosts’ reactions were positive, but I chose NYC for a variety of reasons, mostly convenience. I’m extremely excited about this opportunity and I’m eagerly waiting for the summer! The team I will be working on is Site Reliability Engineering (SRE) and my project is something to do with security.

So those are the big news items from the past few months. Hopefully, I will have time to keep this updated more regularly hereon.

EDIT: One more thing! The research that I worked on with a few other undergraduates and my professor from the summer of freshman year has finally been published and presented at IMC 2011 in Germany early in November! The paper is also now online here (I think this might be behind a paywall).

A direct link is also available here.


Posted by on November 23, 2011 in Uncategorized


Tags: , , , , , , , ,

LHC@home 2.0

I finally had a bit of spare time today, so I decided to join the LHC@home program. For those unfamiliar, it’s basically a way for the researchers at CERN’s Large Hadron Collider to utilize the processing capabilities of thousands of computers distributed across the globe to crunch out all the calculation that need to be done. As you might expect, each time beams are collided, there are several terabytes of data created per second and it is the main task of the physicists at CERN to sift through the endless volumes and look for evidence of a conjectured, yet not-yet-seen particle called the Higgs Boson. In addition, there are tons of other experiments and tests done simultaneously. So, although CERN does have the capacity of a few hundred servers dedicated to this task, it can do a great deal of good if they can utilize volunteers’ computers too.

LHC@home is similar to other programs such as SETI@home and Folding@home, which deal with the search for extraterrestrial life and do computations for protein folding, respectively. I think it’s obviously an extremely admirable task that the folks at CERN are doing and this is one (tiny) way that I’d like to pitch in.

It’s very simple to set up and use. In order to protect their data and the user’s data, all calculations are done inside a virtual machine. Although this does cause substantial slow-downs, it’s worth the risk, as corruption could create false positive (or worse, false negatives). The VM client used is VirtualBox, which is a free and very excellent. There’s a small client called BOINC that acts in facilitating the communication between the host computer and CERN’s servers, polling for new jobs, setting up the VM, running the computation, and sending back results, as well as doing host-side monitoring, etc. I’m running a laptop with two cores, so I’ve decided one core to this program, at most 90% of it, even when the computer is being used. I’ve also given it access to my GPU and at most 10GB of space on my HD. And believe me, it’s using every last bit of it. As of this writing, I’ve been running my current task for about 2.5 hrs and it’s roughly 10% done. The setup is very painless and you can just watch it go. All the information about this program (which, by the way, runs on Linux, Mac OS, and Windows) is available here.

One final note: as a volunteer, you can choose a team to work with on this. Go Team Carl Sagan!

I’ll leave you with a screenshot of how it looks on my laptop.

Look at it go!

Leave a comment

Posted by on August 10, 2011 in Uncategorized


Tags: , , , , , ,

Rdio Wins

And the winner is...

After playing with both for a week, Rdio wins for me, at least for the time being. The mobile app is very clean and sleek and does the job well. It does take a bit of getting used to figure out how to do everything, but I like it and it functions pretty well. Although I do wish that there was a lesser lag time between song changes, it’s something I can live with. The real deal breaker was of course the web interface, which makes my music collection and everything I want entirely accessible at any web browser on any computer. The AIR-based desktop apps are also very slick and well put together for Windows, although I’ve had much less success with the Linux client. Oh, well.

So that’s how it will be for me. Just signed up for an Rdio Unlimited subscription this evening. I hope it remains awesome!

Leave a comment

Posted by on August 1, 2011 in Uncategorized


Tags: , , , , ,

Rdio vs. Spotify (vs. etc.)

Only one will survive..

So I’ve recently been looking into a music service to better fit my needs. I’m a huge fan on Pandora and use it all the time. It usually is exactly what I want because I like turning the music on and forgetting about it while I work or do something. But sometimes I like a bit more customization than just accepting whatever Pandora decides to throw at me. And sometimes I really, really want to listen to that particular song or album and it’s not so possible with the Pandora model. On my laptop, sure I can use Grooveshark, but it’s really on my phone when I’m out that I want that sometimes. Further, I have a bunch of files from way back when which are somewhat incomplete and all over the place and I want to be able to listen to the whole album if I want to, even though I don’t have the files downloaded. So it just makes sense for me. And it has to work on both my iPhone and Droid (so, sadly Grooveshark is out for me.. I don’t really want to jailbreak).

So, I decided to take a look at Spotify after it was launched last week. I work on Linux almost exclusively, so immediately there were some disadvantages to Spotify. Sure, there’s a beta Linux client. However, it’s not open to the free accounts because they haven’t figured out how to implement ads correctly yet (it is beta after all, so it’s understandable), which is a shame. And the Windows client runs somewhat decently in Wine, although it’s nowhere as smooth as I wish it was. Also it crashed every time I tried to run it until I realized that it was the Facebook/People tab that was breaking. So, no social features as of yet on Linux it seems!

However, regarding the music itself, I’m fairly happy. However, it definitely is harder to extrapolate from a song or artist on Spotify unfortunately. Unless you know what  you’re looking for, you’ll probably be fairly lost I think. I like that I can just play the “radio” from an artist’s page, but it keeps randomly stopping after songs! Not sure if that’s just a bug in running the Windows client on a Linux box or what, but it’s annoying. The music quality is pretty nice, nothing much to complain about there. I haven’t been able to really test out the mobile app because I’m still on a free account, which is sad because that’s really going to be the breaking point for me.

At the same time, I’ve also started my 7-day free trial with Rdio. I immediately like that there’s a web interface! Awesome, I can control it from any computer, including my CR-48, which basically has no hope of running Spotify :(. The web interface takes some getting used to, but after a day or so, I think I’m getting the hang of it. I like that I don’t need to use Facebook in order to the get the social features. It’s pretty nice and I’ve been checking out some playlists from people on there, which is a pleasant experience. The player on the left sometimes shifts when I click on a link, which is annoying, but otherwise it’s pretty well put together. The only downside I see so far is that I wish it wouldn’t take so long between songs! I’m not sure if they do any kind of prefetching the next song, but that would be something I’d really appreciate. Not fun to wait sometimes 3-5 seconds or more between songs. I also wish I could shuffle across my entire queue; that is, shuffle in songs from Artist A’s radio with Artist B’s radio too. The mobile app is also very smooth and nice to use, although I really kinda miss not being able to get album information from the player by hitting the top right icon. Actually, it sometimes just brings up a blank screen if I’m in a radio! Which is boring. Also, there’s no way for me to add a song to my collection from the player either! (You can do it from going to the History and doing it, but that’s just lame and stuff..). I like that the audio stops when a call/notification comes and then continues afterwards. I wonder if they support stopping when you set an alarm to turn off the iPod after X minutes (I know Pandora does this). Anyway, apart from that, it’s going really well so far. I still have to keep trying it out, but I’m leaning towards Rdio at this point due mostly to the web interface and ease of use in the UI. Oh and I did get the Adobe Air desktop mini-app working in Linux too, but it doesn’t seem to work when the Rdio tab is closed..

Finally, I’d just like to say that I wish there were some notion of Genres, which I can’t seem to find in either of these services. Sometimes I just care about genre and not really about the artist as much and I wish I could use this to do that. Of course, I understand that this a better use-case for Pandora, but I prefer not switching between services as much. Or maybe I just want to see the hot artists in a particular genre instead of overall. Anyway, those are my initial impressions. After this week is up, I’ll probably make a decision as to which one to pursue a paid account with.



Posted by on July 26, 2011 in Uncategorized


Tags: , , , , , , , ,

Approximation Algorithms Workshop, Princeton 2011

These signs were all over the place!

This past week, I’ve been kept busy by attending a workshop on approximation algorithms, hosted by the Center for Computational Intractability at Princeton University. The particular workshop is this one, the purpose being to recap the last decade of advances in this field and to set the direction for the future. It was a five-day workshop with something like thirty speakers in total, with talks ranging from 35 minutes to an hour. It was my first major workshop that I have ever attended! It happened somewhat coincidentally, as I had emailed someone from the department for something totally irrelevant and got a reply regarding it from my professor for the approximation algorithms class I took last semester – he encouraged me to attend the workshop this week if I was attended and so I did. There were maybe three or four undergraduate students apart from me at the conference and it was pretty amusing to have every conversation start with “So which year of the PhD program are you at?”

There were some really quite amazing talks, such as one by Vijay Vazirani who did a overview of how much progress has been made on the twenty-one problems he predicted last decade would be the major ones in the field (at least 16 of them have either been conclusively solved or made substantial progress upon). It was a pretty exciting lecture and what was really cool was that the name “Vazirani” had come up again and again when we were studying approx. algorithms in class and it was pretty amazing to see him in person. He was also one of the three authors of the famous KVV Theorem (Karp-Vazirani-Vazirani) that gave an optimal result for any approximation algorithm for online bipartite matching. That theorem came up over and over again in other talks too.

Another cool talk was by Subhash Khot, inventor of the Unique Games Conjecture in his seminal paper, On the power of unique 2-prover 1-round Games. He reported on progress on the relations of UGC to other problems. Indeed this conjecture as well made its way into a good number of other talks. I had only very vaguely heard about UGC before this, but after hearing so much about how powerful it is, it’s pretty amazing. It ties in to a bunch of other theorems (If UGC is true, then …) and all of the results we’ve seen so far (that I’m aware of) derive reasonable conclusions with the assumption of UGC. It’s more evidence that it’s probably true and if it were ever proven to be so, it would represent a major step forward in this field (and as one speaker said, if it were false, we’d basically be back at square one).

My professor gave a talk on finding dense subgraphs inside graphs. He converted the problem into a decision problem of whether or not we can distinguish whether or not a graph has a dense k -subgraph (basically a set of k vertices with a lot of edges between them). It was mostly understandable because I have a tiny bit of background in graph theory, but nonetheless a very difficult problem indeed. The talk was really interesting and it was a shame it was so short.

There were other talks by people from Google Research, Microsoft Research Labs, Bell Labs, and several universities around the world. I really wish I could explain every single talk that was given over the five days, but unfortunately my memory does not serve so well. The take-home message for me was that this is a truly exciting field and one that is filled with many, many brilliant people (duh) and that is being so very actively developed upon. It was an overall awesome experience to be in the company of such great researchers. I just wish I knew more than I did so I could gain more from attending. But that’s what the future is for!

Leave a comment

Posted by on June 18, 2011 in Uncategorized


Tags: , , , , ,

My Favorite Vim Plugins

It’s been a long time since I wrote about Vim. In this post, I just wanted to give an example of the plugins which make me love Vim as much as I do. On a foreign machine, I certainly prefer Vim over any other command-line editor, but since I’m so used to my settings, I am usually pretty slow at getting (back) used to vanilla Vim. One of the greatest strengths of Vim is well known to be its extensibility. You can really do a lot to make your life easier with plugins. Below are a sample of the plugins that have come to quite strongly define my experience with Vim.



This is a pretty useful plugin but I really don’t put it to good enough use. Basically, the name describes a good deal of what the plugin does. It allows you to very quickly switch between open buffers. (Remember to turn on “hidden” so that when you close a file, you don’t actually kill the buffer, therefore allowing you to quickly open up the file with cursor position, folds, etc. still intact through the course of a session). I know the whole thing about using buffers over tabs and yeah yeah, okay, but I still use tabs. I think in my brain it makes more sense to me and I’m going to stick to it. However, whenever I do need to switch buffers, I can just do “:b” and let it auto-complete and switch to any buffer I want quickly. Has saved me time pretty often.

Conque Shell

Another one of my favorites but still pretty underused for me. This plugin fills in a huge need: the ability to open a shell session inside Vim. This can be invaluable for many things including checking on the progress on a task while working on another task or allowing you to edit, compile, and run the application in one window (although this can be accomplished with “:!” commands, this is more natural and allows you to see the code at the same time. I usually work in Gnome-Terminal so I use terminal tabs for this, but if you’re in a PuTTY or SSH session, this can be useful. Very straightforward to use and it works somewhat decently well, although not perfectly.


This is an extremely popular plugin from the NERD* family and I use it daily. This smart little plugin allows you to very quickly comment out a line of code or create a new one. The kicker is that its the same key binding regardless of what language you’re working in, which improves muscle memory and saves a ton of keystrokes (I’m looking at you, HTML). The built-in bindings seem random and difficult but I’m used to typing “,cA” (with <leader> mapped to “,”) that it’s second nature to me. If you code a lot, I can’t see why you wouldn’t use this plugin.


This is possibly the most famous Vim plugin of all time. For good reason: it’s very powerful and complete and does a lot to boost the built-in file explorer (:Explore). However, I do not put it to enough use because of my use of wildmenus, which I consider faster and more intuitive coming from Bash. However, there are times when the file I want to open is a few directories away and I’ll break open NERDTree in a split and find it manually. There are many, many plugins that do this, but NERDTree is very polished and nice. I like it a lot.

Obvious Mode

I can’t live without this thing. It’s a very simple plugin that changes the color of the bottom status bar to indicate when you’re in Insert Mode. I kept making the mistake of trying to edit the text of a file in Normal Mode (tsk tsk, n00b mistake) so this was extremely useful. I set the color to a bright orange so now I’m never confused. I guess it’s a crutch of sorts, but it improves my productivity so I like it. This is something which I think can be built into Vim seeing how useful it is (maybe there is, not sure). Note that you really don’t need this plugin if you customize your colorscheme file, but this is colorscheme-agnostic.


So this is a very popular port of TextMate’s code insertion feature and it’s very handy. I was recently writing some code and came across a TON of situations where I wanted to print a status string like this: fprintf(stderr, "Some text message.");. That gets annoying to type after a while, but with this plugin, I can just do fpr<TAB><TAB>Some text message. and I’m done. So very useful. And don’t get me started on for-loops. The very nice feature about this plugin is that tabbing allows you to move between “fields” that hold particular content. The annoying part of this is that it conflicts with the next plugin, which makes me sad :(. Thus, another great plugin that I fail to use enough.


This is THE most used plugin out of anything I could ever do in Vim. Basically since moving to this editor, I’d estimate that I actually type roughly HALF of the characters in a source file. It’s so, so much faster to just code-complete partial strings that I never make the mistake of misspelling a variable or function name and it saves a whole lot of time when you have long function names. It’s also pretty smart. Just a few days ago, I was writing code that used the AES encryption and decryption functions provided in OpenSSL. I just included the appropriate header file in my file and I was able to tab through completions of function names in OpenSSL! Awesome and so useful. To be clear, all of the functionality of this is available natively in Vim, except that this plugin seamlessly switches between different kinds of completions with ease and takes it out of your hair. The one disadvantage is that when you have a very large (a few thousand lines) files with a ton of header files that include a lot of standard library headers, kernel headers, etc., this can be pretty slow. Apart from that, I love this thing.


This final plugin is the newest one to my collection. I just got it a few weeks ago and I use it a lot already. Basically, it provides a common feature in GUI IDEs that lists all the function prototypes, global variables, etc. This is nice because it lets you very quickly switch to a different function in the same file. It also gives you the function prototypes at a glance so you can know exactly how to call the function. It’s also pretty smart – you should see it at work in a header file with structs, extern variables, function prototypes, macros, etc. Very cool. And it works in a ton of languages too which makes it very useful.


This is just a very small sample of the kind of power that Vim (and its third-party developers) has to offer. There are a few other very popular ones which I omitted here, like Pathogen. Surprising as it may be, I haven’t actually used that one. I guess I didn’t realize I had these many plugins that I actually actively use. Perhaps it’s time to look into that one too. I’m always looking to improve my workflow so if I add many new ones, I might another post about this in the future.

1 Comment

Posted by on June 3, 2011 in Uncategorized


Tags: , , , ,