Alt-Tab Extension Hack on Cinnamon Window Manager

I can’t stand Unity (Ubuntu’s default Window Manager) anymore. I’ve decided to switch to Cinnamon. So far, I’ve found it less buggy and more reliable, but there’s one thing that really bothers me. You can only alt-tab inside the current workspace.

Thankfully, there are extensions that tried to address this issue. First, I tried CoverFlow. Even though it, too, can only alt-tab inside the current workspace, it does allow you to alt-ctrl-tab to switch among all apps across all workspaces. But seriously, I don’t want to press the ctrl key.  After some time poking around its source, I came up with a quick hack to achieve what I wanted. Unfortunately, Cinnamon was now crashing and restarting every so often. Thinking that my changes were the culprit, I reverted back to the original state, but the problem persisted. Apparently (according to some comments online), I’m not the only one; the plugin is a bit buggy.

That brings me to Win7 Alt-Tab 1.8. It’s not as slick as CoverFlow, but all I wanted was a very simple app switcher. This seemed to fit the bill.  Just like CoverFlow, it alt-tabs within the current workspace… and after some snooping around the code, I found a quick hack to alt-tab across all apps. But it didn’t remember the most recent alt-tabbed app, so I couldn’t switch back and forth between 2 applications.

Finally, I went back to CoverFlow’s source to see how it retrieves a list of available windows and then ported it over to Win7.  Now it’s able to alt tab intelligently between the most recent apps.

You can check out my code on github:

By the way, I’m working on my own gig now.  Check out and let me know what you think.


How to get rid of the default shared folder in Vagrant?

Vagrant is awesome. However, there’s one thing that really annoys me. Why in the world does it set up a default shared folder when no one asks it to. After some googling, I found out that all you have to do is to add the following line in your Vagrant file.

Vagrant.actions[:start].delete(Vagrant::Action::VM::ShareFolders) # <--add this line do |config|

Unfortunately, there’s one more gotcha. The first time I ran vagrant up, it crapped out on me and spilled out the following stacktrace.

/opt/vagrant/embedded/gems/gems/vagrant-1.0.6/lib/vagrant/action/builder.rb:87:in `delete_at': no implicit conversion from nil to integer (TypeError)
from /opt/vagrant/embedded/gems/gems/vagrant-1.0.6/lib/vagrant/action/builder.rb:87:in `delete'
from /home/lih/.vagrant.d/boxes/lucid32/include/_Vagrantfile:6:in `<top (required)>'
from /home/lih/.vagrant.d/boxes/lucid32/Vagrantfile:11:in `load

I sidestepped the above issue by surrounding it with begin and rescue.

  print "Trying to get rid of the default shared folder. It's normal that this fails the first time when the vm is booted up. Ignore and proceed."

Hopefully, you’ll find this helpful. Enjoy.

Good Bye Kontagent. Hello PackerShack.

As the second engineer at Kontagent,  I have seen a lot of changes and been through a fair amount of ups and downs in the company. Whatever the challenge was, we always faced it head on and steadily inched forward. It was my pleasure to work with a such persistent and talented team.  In the past 5 years, I was exposed to myriad aspects of the business, not just coding: integrating our tracking library with our customers’ products; customer onboarding; troubleshooting customer issues; and js/django/python, C/C++, hadoop/cascading development.

Last Friday marks the end of my 5.3 year tenure at Kontagent. I’ve always wanted to work on my own project and see what will become of it. I made myself a promise a year ago to embark on this journey, and now’s the time to pull the trigger.  Admittedly, it is scary, but it’s also exciting at the same time. The saddest thing for me was to leave a group of great people. It felt as if I was breaking up with them.  Kontagent, I’m going to miss all those interesting discussions during lunch, throwing (not a typo, I really mean throwing) nerf darts at people across the room when I was stuck on something, having darts thrown at me usually as a form of retaliation, mini-basketball shooting, foosball, ping pong, late night games of Catan (a sheep for a brick, anyone?).  Aside from all the “normal” startup perks,  Kontagent has always been more than accommodating when I was going through some of the most challenging times in my personal life.  For that, I will always be grateful.

Now the dice have been cast, and my wife and I are working on our own gig with cautious optimism.  For the time being, we are going to focus all our attention on PackerShack, our new hostel comparison/booking service. Even though it’s up and running, and I haven’t rebooted the server for months now, there’s still a lot of work left to be done. I’m glad that Jenny is working along side me. Wish us luck.