Here are a few interesting stats about the project:
Active Users: 1000+
No. of Reviews on Chrome Webstore: 28
Rating on Chrome Wesbtore: 5 stars
Stars on GitHub: 39
Forks on GitHub: 10
Clearly, these are not mind blowing. But they’re not bad either. Also, this is my first project where the code written by my contributors is more than the code I’d initially written. I hope more people use it and find it useful. :cheers:
This year, I’ve decided to make a few changes to my blog and following are the changes –
SSL enabled site-wide
As you might’ve already noticed, my blog is now served over SSL. I’ve enabled SSL site wide here (mt.cx) & on my mohni.sh domain. You can too, if you’re using GitHub to host your blog. The whole setup is very simple, quick and free.
After I moved away from Tumblr, I started using GitHub Pages to host my blog. I found a script online to convert my Tumblr blogs into Jekyll supported markdown files. Once I had my markdown files, it was just a matter of pushing them to my homepage repository on GitHub. Ever since the move, my blog has had the same design. It’s time for a change. Over the coming 3-4 months, I will be updating my blog design in increments. These are some of the changes I’m planning on making to my blog this year.
Last year, I, royally screwed up the timing of my year in review post by posting it in July.
I know, July is not really the best time to wish someone a Happy New Year, but, unfortunately, that was when I snapped out of my laziness to write a blog post. I didn’t want to miss my year in review blog and so I did it anyway…in July.
This year, I don’t want to be lazy and so, here it is, on the 2nd of January (I had friends come over on the 1st and so, I couldn’t find time to blog).
I had a fun 2016. It basically included traveling, adventures, reading, a lot of video gaming and tiny traces of fitness.
Here are the highlights —
Visited Birla Mandir in Hyderabad
Returned back to the United States from my India trip
Moved out of Fremont, CA
Visited Monterey Bay Aquarium
Took part in the Canvas & Cabernet event and ended up painting
Visited Safari West in Santa Rosa
Started reading a couple of books
Went hiking at Half Moon Bay
Went hiking at Purisima Creek
Visited my Sister and Brother-in-law in Los Angeles
Ran my first ever non-stop 5k. It was on a treadmill though. I ended up running 42 miles in 2016, 16 of which were in May.
Went hiking at Sequoia National Park
Visited Grizzly falls and Three Rivers (CA)
Went hiking at Mt. Diablo
Flew down to Seattle for my friends’ bachelor party (1 party for 2 guys)
Almost all of my friends here have their birthdays in July and August (incl. my wife) and so I ended up being busy organizing/attending these “surprise” parties
Became a member of Top Golf
Went Indoor Sky Diving. It was fun
Successfully completed my first year at my current company
Went on a road trip to Las Vegas and made a profit playing Black Jack
Visited my Sister and Brother-in-law during my flight’s layover in Los Angeles
Celebrated my 1st Wedding Anniversary by visiting Costa Rica. It was a fantastic & adventurous trip. Our activities included Canyoneering, Zip lining, Hiking the majestic Arenal Volcano in the rainforest and hiking around the hanging bridges
My buddy, Sravan, visited CA and we ended up driving down to Mt. Diablo and Napa valley
Had a nice NYE in San Francisco. Watched the fireworks
A few years ago, I gave up on the concept of New Year’s Resolutions, since, I never ended up keeping them. This has always been the case with me and now I want to change that. I want to challenge myself. I want to become a better version of me. I have a couple of ideas that would help me achieve my goals. I will share them soon in a separate blog post.
And with that, I’ll wrap up my post.
I wish you all a fun-filled, wonderful & prosperous New Year.
OCD is weird. It makes a person do weird things. For instance, I find it annoying to have tabs not grouped by their purpose. When I’m working, I usually have the documentation opened in one tab (which usually is the left tab) and the tab to its right, absolutely, has to be the tab that’s running my local copy of the app that I’m currently working on.
I’m used to using the mouse to rearrange my tabs all the time. Sometimes, I have multiple windows open (if I’m at work, since I have a dual-monitor setup) at the same time. I’ve always wanted to have keyboard shortcuts that did all this. That’s the reason I wrote a new Google Chrome Extension called Rearrange Tabs.
Rearrange Tabs is a tiny Google Chrome Extension that you can install right now to use keyboard shortcuts to move your tabs around in your Google Chrome browser.
To move a tab to its left
To move a tab to its right
Edit: Previously the shortcut to move the tab on Mac was Alt+Shift+<Arrow>. I had to update this since it was overriding the word highlight shortcut and made it hard to edit text inside the browser. That is fixed now.
Edit 2: You can now customize your keyboard shortcuts to move the tabs.
To customize your keyboard shortcut by following these steps:
Open your extensions page (or visit chrome://extensions from your URL bar)
Scroll to the bottom
Click on Keyboard Shortcuts
Under the “Rearrange Tabs” section, you can configure whichever shortcut you want
A year ago, I was trying to organize my bank accounts and found that it was really hard for me to understand where I was spending most of my money. So I started doing some research in order to find a good tool/application which would do this for me.
Mint, of course, was my first tool of choice. Mint is a pretty good application, but not the right one for me. I’ve been a Mint user since a long time and never found it to be really helpful for me in organizing and understanding my expenditures. Every single time I logged in to Mint, it complained about Bank Account Authentication Failures™. I’ve tried re-connecting my bank accounts over a 100 times and it still never works. Moreover, I’m not really comfortable letting a 3rd party access my bank details anymore. Also, it’s not that great at auto-categorizing my bills/expenses anyway and it still lacks some of the features that I thought would be cool and helpful for me.
So I moved on to a few other solutions and tried them. Some needed me to sell one of my kidneys to buy the app, while others just lacked features. Almost every single time, I ended up having a 50% positive impression of the apps. None of them were feature rich or flexible enough for me to find them actually useful.
I was frustrated and gave up on the search. The only thing that was left for me to do was to write an app that would basically have all the features I wished to have.
🎉 💵 Money is a simple web application that helps you keep track of your expenses/bills and gives you insights on where your money went. Currently, the app is under active development and lacks features. But the idea is to eventually have all the awesome features I’ve dreamt of, implemented in the application.
Money is built using Ruby on Rails and BackboneJS. It uses Bootstrap for the UI.
My initial goal was to have a native mobile app (and eventually that’s what I want to do). Since I don’t have the time to do that, I chose to go ahead and implement a web app with mobile-first approach. The current app itself is a JSON API, which is consumed by the Backbone frontend (that ships with the app) client using the OAuth2 client credentials flow. The API can be used to build native clients on various platforms.
The best part about Money app is that it’s open source ❤️ and licensed under the awesome MIT License. It is available at https://github.com/mohnish/money. Feel free to fork it or deploy your own instance or build your own features or extend it to whatever the way you want it to be or build your own client or file issues. I already have an instance deployed and running.
I will keep you guys posted about the updates. Current version of Money app is 1.7.1.
Shoutout 🎉 to Sindhu Monica and Sandeep Appikonda for helping me test the app and improving the UX of the app.
March, not really the time of the year to wish someone a Happy New Year. I know, I usually have this post ready within the first two weeks of January (with an exception of last year). I have been
extremely busy with work and my side projects over the past few months and I could not really find time to blog. I hope I don’t write next year’s HNY blog post in April 😉
Without further ado, let me jump into last year’s highlights.
Started going to the gym in January, for reals. (I’ve been a paying member for over 2 years though :P). Lost 22 lbs by the end of May
Pretty much utilized all of the 3-day weekends for fun stuff in 2014
My friends and I, flew down to West Virginia for the 4th of July weekend. We went mountain biking and white water rafting
My family was in San Francisco in September and it was fun
In November, my friends flew in to SF for the Thanksgiving weekend and that was fun too. We went snorkeling and drove down to Napa Valley
and tasted some wines.
I started this thing where I create a new playlist for each month on Spotify (starting from March 2014).
Up until a few years ago, I never really understood the value of Open Source Software (OSS). I used to think of it as something really lame because the quality that comes out of such software is usually “low”. Now why was I under such an impression? Linux. As a Windows user, I’ve always loved the OS for its ease of use and support for games. I found Linux to be a half-assed OS just because it didn’t support the games I played and it was relatively “difficult” to use. I couldn’t wrap my head around why Linux was such a big deal.
I started web development using WYSIWYG tools like Adobe Dreamweaver. I loved Dreamweaver. It was fantastic. It had every single feature that I wanted and more. I was happy.
Soon, I had to move from static HTML web sites to dynamic content serving websites using PHP. I thought PHP was awesome and powerful. I got serious with PHP development and started using software like Apache, MySQL etc. WAMP was pretty much my setup to start working on any new web app. I slowly switched to Eclipse for PHP (I was already an Eclipse for Java user). There were many tools that I needed which worked only on Linux. As a result, I had to “compromise” and switch to LAMP as my default development stack. At this point, everything I was using was OSS.
After a while, I moved on to Ruby. Moving to Ruby from Java/PHP was delightful. Ruby makes programming fun. My love for ruby got me thinking about how awesome open source is. The very concept of someone writing a beautiful programming language and giving it away for free was something that I couldn’t comprehend. Also, by this point of time, I started liking Linux. Linux felt powerful and easy to use especially for development.
It felt really good using Linux. If you’re a ruby developer and you’re into web development, you’re bound to use Sinatra or Rails at some point. It was when I started using Rails I understood the true value of OSS. I was making money by using tools that were written by others and given away for free.
<3 Open Source
Linux, Ruby and Rails convinced me as a developer that open source is really cool. There are many other pieces of OSS such as jQuery, NodeJS etc that contributed to it.
The most important aspect of an open source project is the license under which it’s being distributed. A license grants/restricts usage rights to an open source project. A good open source license gives its users the flexibility to use/modify/distribute it. Hence, having a license in an open source project is very important.
For this very purpose I’ve created a ruby gem called “opensource”.
opensource is a ruby gem that you can install and use to add a license to your open source project. You can install it by running the following command (assuming you have ruby 2.0+ installed)
gem install opensource
Once you have it installed, you can setup your credentials and start using the gem to create licenses.
The gem is open sourced under MIT license and you can find the source code at https://github.com/mohnish/opensource. You can find more information about the usage of the gem there. Please feel free to contribute back to the project. Contributions are always welcome <3.
I encourage each and everyone of you to contribute to open source software. It’s wonderful and satisfying.
Today marks the 5th year of my blog’s existence! 😎
My first post was about how I setup the first version
of my blog using WordPress. Since then, my blog underwent a few changes. For instance, I moved away from WordPress to Tumblr and then to Jekyll. This basically meant moving my blog over from my own personal web server to Tumblr’s servers and finally to GitHub’s servers. Even my blog URL underwent the following changes:
Although I don’t blog much, I’ve always liked the idea of having a blog to express myself, describe my experiences and showcase my projects. I also like posting random stuff.
Following is a graph I made, showing the number of posts per year (2 so far, in 2014):
It’s funny how I wrote 15 posts in 2012 and 2 posts, the following year. This year, however, I plan on posting photos on my blog. It’d either be that or have a separate custom app to showcase my photography (I’m still a noob photog). But for sure, this year I’ll be blogging more than twice 😜.
Went out fishing, for the first time, with my colleagues.
(Nothing interesting happened)
This was the most exciting part of 2013. I flew back to India after 3 years for my sister’s wedding. Had a wonderful time there with family and friends.
Got back to the United States after a wonderful vacation.
Attended a fun company sponsored Holiday Lunch. This year we were each given an Apple TV as a holiday gift.
Got shitfaced on NYE!
Last year, I only had one resolution; Be more positive. I like to think I did keep that resolution. This year, however, I don’t have any resolutions. That’s pretty much the New Year related part of this post.
I didn’t blog much last year. I wrote only two posts in 2013. I spent more time away from my computer, which, in a way, is a really good thing for me. I took better care of my health. I also developed an interest in photography and learned the basics of using a DSLR camera in Manual mode (thanks to my friends Andrew & Winnie).
I wish to take even more photos this year and hope even you guys are up to something interesting this year. Have another awesome 11 months!
The first thing I do every morning immediately after I wake up is, check my mobile for any emails/messages/updates etc. Today was no different. I was skimming through the updates and found an interesting blog post. I was impressed by the post and started scrolling the page to find the usual Like/G+/Save-to-my-swiss-bank-account buttons. That’s when I realized that there was no existing solution that was efficient and needed no authentication.
Dustin Curtis solved this problem by implementing the “kudos” feature in Svbtle. Unfortunately, Svbtle is not Open Source. So I decided to implement the feature myself and make it available as a reusable component that anybody could use by including the corresponding code. As a result, I created hi5!
“hi5” is a component that adds a hi5 button to your web page/blog. You should be able to see the circular button floating on the right side of this page. Yeah, that’s the hi5 button.
Note: The hi5 button is not mobile compatible yet. So I had to disable it on mobile till I fix it. I’ve opened an issue on GitHub about this specific requirement. Also, it’s not exactly a button. It’s a div element faked to appear like a button by means of CSS.
How it works
When the user hovers over the hi5 button and holds the mouse on the hi5 button for one full second, a callback is fired which increments the hi5 count exactly by 1 on the persistence layer. This update is now “pushed” to all the other open instances of the page. The count is updated on all the open instances in realtime.
Video showing the updates
In the above video, I have Chrome and Firefox browsers open and you can see how the count is incremented in realtime.
What was hi5 built with?
I know I am super late but I am going to go ahead and do it anyway, Happy New Year 2013 everyone!
Hope you all had a wonderful 2012. I myself had a few eye-opening experiences (personally and professionally) and was in a miserable situation for the most part of 2012 but I have no regrets. I’ve learnt a lot last year and I’m proud of it. Let me share my experiences in 2012 with you all:
I got very sick and was bed ridden for 2 weeks. It was a depressing month.
In an attempt to keep up one of my resolutions for 2012, I joined the gym. And you know how it goes in the first few months, right?
I quit going to the gym (but I never stopped paying).
In the later part of March, I crashed and burned.
Gave my sister a surprise visit for her birthday and fell sick at her place. She ended up taking care of me. I bet she did get surprised, although I am not sure what surprised her more, my sickness or my visit.
Went back to Bowling Green, KY, after 6 months for my friends’ graduation. Had a good time there.
I have zero memory of what I did in June.
Sis visited my place.
Had fun exploring California.
My friends (Anurag anna & Macha) came down to my place (from Bowling Green) and we had a great time.
Bought a car.
Just when I thought 2012 was getting better, my good friend, Anurag anna passed away in a car accident :(. It was shocking.
I was heart broken and had to visit Bowling Green only to make myself feel even more worse.
Jumped off a plane from an altitude of 18,000 ft. It was a great experience. I think it was the adrenaline rush that sort of reset my thoughts. It was memorable.
Nothing interesting happened.
Had an awesome Thanksgiving vacation with my friends in Florida.
Successfully completed my first year at BillFloat.
Got very busy at work. We released code 2-3 times a week in December.
Had a great NYE party with friends in San Francisco!
I did contribute to a few Open Source apps in 2012. This year however, I intend to contribute even more.
Last year’s resolutions:
[✔] Be productive
[✔] Donate money
[✔] Complete what I started
[✔] Be less selfish
[-] Be cool
[↓] Lose weight in a healthy way and work out at least 18 days a month. (The arrow pointing downwards indicates that I did the opposite by gaining weight. Oh and BTW my overall number of visits to the gym in 2012 was not even 18)
This year’s resolutions:
I only have one resolution for this year. Be more positive. These two blog posts, Chase Happiness and Lokaah Samastaah Sukhino Bhavantu, changed the way I think. They’re pretty impressive and have a fair amount of influence on me. I think you should definitely check them out.
I would like to conclude this post by saying, be more positive and be happy. Hope you all have a great year ahead!
It was 1:30 AM yesterday night and I couldn’t sleep. I was trying really hard to sleep but I couldn’t. I gave up after a while and started to think about random stuff and thus, I ended up thinking about the Cloud.
Cloud storage has been one of the best technological innovations in the past few years. Several companies ranging from existing technology leaders to startups, seem to be interested in this field. Companies like Apple, Google, Microsoft, Dropbox etc really excel in this field. Each of these companies offer amazing services. These companies seem to be concentrating on making its users rely more on the cloud.
I personally use all of these services to manage my digital life based on the category.
I use Spotify a lot to listen to music both on my computer and my iPhone. It has the offline playlists feature which makes my train commute a lot better. But sadly, I often end up not finding the music I want to listen to on Spotify. As a result I tend to fallback to my Google Music account which has almost all the songs I’ve always had on my hard disk drive. The only downside to it is its streaming on mobile. It sucks big time. I do sometimes end up using Grooveshark or Last.fm if I don’t find the music I want on Spotify or my Google Music account.
After two of my external HDDs bailed on me, making me lose all my photos, I realized that photos are precious. So I use Flickr, Dropbox, SkyDrive and iCloud to store/backup my photos. Most of them are redundant but it’s worth storing copies of them on different servers.
I use Evernote to store my notes. Whenever I get any idea, I make a note in Evernote to make sure that I don’t forget it. I sometimes even use it to save my car parking location along with a picture.
All of my source code is stored on GitHub. I use it every single day. I use it at work and I use it for my personal projects too. Before GitHub, I used to use Google Code and Microsoft Codeplex.
I use Pocket to mark articles for reading later and to store some interesting bookmarks.
This is a more generic category. I use Dropbox and Box to store all my ebooks, docs and other random files.
That pretty much sums up how much I rely on the cloud.
First and foremost, create a new Rails application by using the command rails new app_name.
Once the app is created, navigate into the app folder cd app_name.
Integrating HTML5 Boilerplate
Now let’s first start with HTML5 Boilerplate. Open the downloaded H5BP zip file.
Navigate into the css directory in the zip file. Copy the style.css file into app/assets/stylesheets of the Rails application that you just created.
Next, from the H5BP zip archive, copy the files highlighted in the image below into the public directory of your Rails application.
Next, copy the left out index.html from your H5BP zip archive into the app/views/layouts directory of your Rails app.
Delete the file named application.html.erb (if you’re using ERB) from the app/views/layouts directory of your Rails app and rename your index.html file existing in that directory to application.html.erb. We’ll get back to this file after setting up Twitter Bootstrap.
With that, you can get rid of your H5BP zip archive. Next step would be integrating Twitter Bootstrap into the application.
Integrating Twitter Bootstrap
Open the downloaded Twitter Bootstrap zip archive and navigate to the css directory in the zip archive. You’ll find the bootstrap.css and bootstrap-responsive.css files along with their corresponding minified versions. Based on your requirements, copy the needed files into the app/assets/stylesheets directory of your Rails application.
Now, navigate into the img/ directory in the Twitter Bootstrap zip archive and copy the **glyphicons **files into the app/assets/images directory.
And you’re done with the Twitter Bootstrap zip archive.
You’ve now successfully placed all the required files in the right places of your Rails application. The next part would be tweaking the Rails application a bit and modifying the default layout.
Changing the Directives
Next, change the contents of your app/assets/stylesheets/application.css file with the contents of this:
Change the contents of your app/views/layouts/application.html.erb file with the contents of this:
Also, the reason we are manually “requiring” the files is to maintain the required order of the files. This also prevents overriding of the styles and functionality.
That’s it. You’re done setting up your Rails application with the power of HTML5 Boilerplate and Twitter Bootstrap (Rails BootPlate). Now the rest is in your hands.
If you find anything wrong with the setup, please do let me know in the comments section below. I will make changes and update this post. If you’re interested, you may fork the project at: https://github.com/mohnish/rails-bootplate
**Update: **To make the glyphicons work properly, you need to change the path of the icon files in the bootstrap.css file at Line 1174 and Line 1183 to /assets/glyphicons-halflings.png and /assets/glyphicons-halflings-white.png correspondingly.