Hack

I love building things for fun and lately I’ve been thinking about building a text editor. I’ve used a lot of text editors and IDEs in the past. Here’s the list in a chronological order:

  • vi/vim: my very first code editor. Used it back in my earlier C/C++/Java days
  • Dreamweaver: started using it once I moved to web development for HTML, CSS & JS
  • Eclipse: IDE of choice for Java development later
  • Netbeans: switched to it when Eclipse started becoming a memory hog
  • Visual Studio: used it whenever I wrote C# code
  • Emacs: php/javascript development back in school
  • TextMate: started using it after moving to Ruby
  • Sublime Text: absolutely loved the perf, extensibility (plugins) and liked it better than TextMate. I even bought a license 🙂
  • Atom: liked the idea of an open source text editor built in JS/CS

Atom

Currently, I use Atom on a daily basis. I’ve been using it since the day GitHub started distributing it in invite-only private beta (before open souring it) mode. After 3+ years, I think I am done with Atom. I am tired of using an editor that feels slow even when typing. Since, Atom is an open source project, I can’t really complain. It’s a wonderful initiative and I really appreciate the idea and motivation behind the project. For now, I will switch to Sublime Text. If my text editor proves to be better than Sublime Text, I will switch to using my text editor full time.

Hacking on Hack

I am going to start working on a text editor and I’m calling it Hack 🎉.

It aims to be:

  • Fast
  • Light Weight
  • Easy to use

I’m going to start working on the project and my goal is to have fun and learn a lot while I hack on Hack 😜. As I progress with the project, I’ll try to talk about interesting aspects/problems that I come across, architectural decisions, design and implementation details.

This will be a very highly experimental project and chances are that Hack is not something for you. If you’re interested in tracking the progress of the project, you can follow along on GitHub at https://github.com/mohnish/hack.

Magic Compiler

Innovation in today’s technology is mostly around Artificial Intelligence (AI) and its sub topics such as Machine Learning (ML) and Natural Language Processing (NLP). There is a primary focus on NLP and ML among all the tech companies. This is for a good reason. Tech companies are using NLP and ML in various aspects of their offerings and trying to stay ahead of their respective competitors.

A Magic Compiler

With all of this going on, I feel like NLP & ML will greatly impact the future of programming and programming languages. It could be possible to create a programming language out of pure English (or any language for that matter) grammar. Alright, stay with me here for a second; the way it could work is:

  • The programmer would write what they want to achieve in EnglishStore user data such as name, age, sex, address and favorites in the database and create an endpoint that exposes this data securely
  • Using NLP, the compiler parses this information and creates or uses the existing User class and stores the user attributes such as name, age, sex, address and favorites
  • The compiler keeps correcting itself over the extended usage of the programming language using ML. The compiler figures out the datatype of the attribute. For ex: name is a String. age is an Integer. Since the attribute is named favorites, it figures that it’s a collection of Strings. Since the programmer instructed the compiler to expose an endpoint with the data securely, we get an https endpoint to access the resource.

The programmer can then do something like –
Every user has many photos. Store those photos in Amazon's S3 (maybe) bucket

A programming language like this could become a reality. Of course, this is a massive over-simplification of things, but, it could be possible. I mean, if human beings are capable of making computers perform intellectual tasks, this could totally be possible.

This can also be taken one step further and use speech to text conversion. Programmers can then just speak what they want to build and have the compiler write the code for them.

The advantage to creating something like this is extensibility. Imagine if every person who can speak a language can write code? Any person that can read/write a language, ends up being able to write plugins/extensions/modules in their language and contribute. There’s a lot of smart people out there and this programming model extends their creativity. Right now, it’s just a missed opportunity. It would be amazing to see what people do with their “newly acquired” skill.

Domain-specific languages (DSL)

Today, one can do something remotely similar by using Domain-specific languages (DSLs). But, DSLs are very restricted and don’t offer much in terms of flexibility in their usage. Hence, a proper implementation to support the above mentioned features would be required.

This would be a very interesting project to work on. I will continue research around this subject and see if I can come up with a trivial implementation of this.

Two Years on Chrome Webstore

Exactly 2 years ago (Mar 22nd, 2015), on a Sunday afternoon, I wrote and open sourced Rearrange Tabs. I use it every single day. I find it pretty useful.

The extension got featured on LifeHacker & Changelog 🎉

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:

Blog Changes

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.

URL

My blog URL has also changed. I’ve decided to use https://mt.cx for my blog and https://mohni.sh for my profile page. I’ve used mt.cx as my custom url shortener for the past couple of years.

Update: I’ve updated my blog URL to use https://iam.mt

Continue reading “Blog Changes”

Happy New Year 2017

""

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 —

January

  • Visited Birla Mandir in Hyderabad
  • Returned back to the United States from my India trip
  • Moved out of Fremont, CA

February

  • Visited Monterey Bay Aquarium
  • Took part in the Canvas & Cabernet event and ended up painting
  • Visited Safari West in Santa Rosa

March

  • Started reading a couple of books

April

  • Went hiking at Half Moon Bay
  • Went hiking at Purisima Creek
  • Visited my Sister and Brother-in-law in Los Angeles

May

  • 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)

June

  • Went hiking at Mt. Diablo

July

  • Flew down to Seattle for my friends’ bachelor party (1 party for 2 guys)

August

  • 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

September

  • Became a member of Top Golf
  • Went Indoor Sky Diving. It was fun

October

  • Celebrated Diwali
  • Successfully completed my first year at my current company

November

  • Went on a road trip to Las Vegas and made a profit playing Black Jack

December

  • 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.

Costa Rica

My wife and I chose to celebrate our first wedding anniversary in Costa Rica. I’ve refined and organized my notes from the trip and turned it into a blog post.

✈️ We flew from Los Angeles, USA to San José, Costa Rica

🚕We took a taxi from Juan Santamaría International Airport (SJO) to La Fortuna, a small town in Costa Rica, northwest of the capital, San José

🛌 We took an Airbnb in La Fortuna, since it is close to the Arenal volcano.

We spent the rest of the day exploring the downtown in La Fortuna.

After checking out the places in downtown, we found out that there are a lot of adventurous activities that we could do. My wife and I are both adventure lovers and naturally, we opted for the ones we found interesting.

Activities

We lined up a bunch of activities for the next 3 days around La Fortuna.

🤪 Zip lining

I’ve gone Zip Lining before, but, this was just next level. The views are amazing. We did it with Ecoglide. It includes Zip lining and the epic Tarzan swing.

🦸‍♂️Tarzan Swing

Tarzan Swing

🧗‍♂️ Waterfall Rappelling

The next day, we went Waterfall Rappelling. This was crazy. Rappelling down the waterfalls was intense, challenging, and extremely fun.

🌉 Hanging Bridges

The third day, we picked activities that were not as intense. This included checking out the hanging bridges and hiking the Arenal Volcano.

🌋 Hiking Arenal Volcano

This was an interesting experience. It was raining heavily and it was getting dark too. We got drenched during the hike. It was really fun.

Arenal Volcano

After the hike, we went back to our Airbnb, packed our stuff and set out to Baldi Hot Springs. We got a room at the Hotel Resort and stayed for the next day. I cannot recommend this enough. It is fantastic. After all the adventurous activities, we needed to calm down and relax. Baldi was perfect. We got lucky while we were at Baldi. It was raining. Now, imagine this – it’s raining and you’re in the hot springs. Yep, it was just perfect. 10/10 would recommend this place.

After spending the entire day and night at Baldi Hot Springs, the next day, we took a taxi back to San José. We reached our Airbnb in San Jose and just checked out the mall. I even got a haircut at the mall.

The next day, we checked out the city of San José. We visited the famous Market in city. We had fun walking around. At this point, we got tired and had dinner at a restaurant and left to our Airbnb.

The next morning, we left to the airport and flew back to the United States.

The whole trip was really fun and we enjoyed a lot. I would definitely recommend it. Pura Vida!

Happy New Year 2016

I haven’t yet wished you guys a Happy New Year since this is the first time I’m blogging this year. This is awkward. I’m going to go ahead and do it anyway –

Happy New Year 2016 🎉

""

Here’s a quick recap of what I did in 2015:

January, February

  • (Nothing interesting happened)

March

  • I feel like I coded a lot in March, last year.
  • Had a fun St. Paddy’s day at Work (I sprayed my hair Green)

April

  • Celebrated Holi at Stanford University with my buddies
  • Caught up with my friends in Vegas for my buddy’s bachelor party

May

June, July

  • (Nothing interesting happened)

August

  • Went hiking a couple of times

September

  • (Nothing interesting happened)

October

  • Attended a fun halloween party. I dressed up as Walter White from Breaking Bad
  • Quit my job ❤️

November

  • Started working at a new Startup 🎉
  • Had a fun bachelor party with my buddies at Lake Tahoe

December

  • Flew back to India after 2 years ❤️
  • Got hitched 💍 😀

Overall, it was a great year. Hope you guys had a great year too and hope you have a fun filled rest of the year!

Cheers!

Rearrange Tabs

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

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
    Windows: Shift+Alt+Left
    Mac: Ctrl+Shift+Left
    
  • To move a tab to its right
    Windows: Shift+Alt+Right
    Mac: Ctrl+Shift+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:

  1. Open your extensions page (or visit chrome://extensions from your URL bar)
  2. Scroll to the bottom
  3. Click on Keyboard Shortcuts
  4. Under the “Rearrange Tabs” section, you can configure whichever shortcut you want

Update: The extension got featured on Lifehacker & Changelog 🎉

Here’s how it looks like:

You can find it here.

Rearrange Tabs can

  • Move tabs around in a window using keyboard shortcuts
  • Duplicate current tab to a new window [this is WIP]
  • Separate active tab out from the current window into a new window using keyboard shortcuts [this is also WIP]

As always, I’ve open sourced Rearrange Tabs. ❤️

You can find it here https://github.com/mohnish/rearrange-tabs

Feel free to open an issue or a pull request 🙂

Money

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.

Introducing Money

🎉 💵 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.

Stack

Money is built using Ruby on Rails and BackboneJS. It uses Bootstrap for the UI.

Implementation details

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.

Thank you

Shoutout 🎉 to Sindhu Monica and Sandeep Appikonda for helping me test the app and improving the UX of the app.

Happy New Year 2015

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.

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).
  • Took a lot of photos on my Camera
  • Worked on a few side projects

Resolutions

#StayHealthy #StayPositive

Open Source

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.

Web development

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.

❤ 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.

Licensing

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

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.

5 years

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:

http://mohnish.net –> http://mohnish.in –> http://blog.mohnish.in –>
http://blog.mohni.sh –> http://mohni.sh/blog/ —> http://mohni.sh/

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 😜.

Here’s to more years of blogging…

/me raises a glass of champagne

Happy New Year 2014

Hello everyone! I know it’s February already but I never got to wish you guys a Happy New Year.

So, here you go:

""

Here’s a quick recap of what I did in 2013:

January

  • Created an open source component called “Hi5”.

February, March, April

  • (Nothing interesting happened)

May

  • Had a great vacation in Vegas with my childhood friends. Lost a lot of money at the casinos though.
Continue reading “Happy New Year 2014”

Hi5

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!

Continue reading “Hi5”

Happy New Year 2013

I know I am super late but I am going to go ahead and do it anyway,
Happy New Year 2013 everyone!

""

2012

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:

January

  • I got very sick and was bed ridden for 2 weeks. It was a depressing month.
Continue reading “Happy New Year 2013”

The Cloud & I

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.

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.

Continue reading “The Cloud & I”