How to get Github Vanity url through

If your Github user name is already taken by somebody (I typically choose thiru, but taken by somebody, so I had to choose ithiru). But if you want to share the url with others and still want to use thiru, you can do it through Github url shortener

Use the following command and you should be able to get it. Please do not try the web version @, it will auto generate and if you try to do it again through command line it will return the same shortened url.

-F "code=vanity"

will make sure you get the custom url rather than generated one.

$ curl -i -F "url=" -F "code=thiru"
HTTP/1.1 100 Continue

HTTP/1.1 201 Created
Server: Cowboy
Connection: keep-alive
Date: Thu, 22 Sep 2016 05:05:35 GMT
Status: 201 Created
Content-Type: text/html;charset=utf-8
Content-Length: 25
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Runtime: 0.256529
X-Node: 27a81f0a-cb95-4f6d-94d6-0c9891e3714b
X-Revision: 4fdc60de6311e6a3aa31e19bc7b3aad7e85d33a6
Strict-Transport-Security: max-age=31536000; includeSubDomains
Via: 1.1 vegur

In case you by mistake tried @ via Browser, you can try the anchor trick to fool that the url is unique.

$ curl -i -F "url=" -F "code=thiru"
HTTP/1.1 100 Continue

HTTP/1.1 201 Created
Server: Cowboy
Connection: keep-alive
Date: Thu, 22 Sep 2016 05:12:47 GMT
Status: 201 Created
Content-Type: text/html;charset=utf-8
Content-Length: 42
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Runtime: 0.255721
X-Node: 722fe806-9844-4265-9a8f-c51d2c170cf7
X-Revision: 4fdc60de6311e6a3aa31e19bc7b3aad7e85d33a6
Strict-Transport-Security: max-age=31536000; includeSubDomains
Via: 1.1 vegur

via Github Blog

Jeyamohan’s Creations – Web App

Writer Jeyamohan’s is a famour writer in Tamil Nadu, India. Bio at Wikipedia
When I started reading his book(s) on the Indian Epic Mahabharata named ‘Venmurasu’ (வெண்முரசு), I was drawn towards it more deeply due to its artistic description of the events.

But he was releasing one chapter each day and it was difficult for me to follow, I need to read the whole book in one stretch, that’s how I am wired. So I stopped reading and waited till he completes each book. Then I would read them all.

While reading I found that the Venmurasu Website was based on wordpress blog and it was really not a good way to present a Novel, it just displays the chapter in reverse chronological order rather than the typical chapter flow of a book.

I started thinking about screen scraping the content and present in Responsive Web Design, so it would easier for me to read on my Phone, Tablet or Desktop wherever I am.

App Development

Sep 2014 I had started doing screen scraping with Node.js app and UI using Node Express module.

Screen Scraping

  • Navigating through the url
  • Extract the content using XPath with cheeio package
  • Extracted the chapter art image url, download and create create thumbnail and the full image after downloading
  • Persist the data into the tables by Book, Volume, Chapters

UI Design

As I wanted to read through various devices I wanted to use Responsive Web Design. Even though Twitter Bootstrap is very popular I went for Zurb Foundation as it just gives barebones and allows you to customize using the SASS variables. That also gives complete control over the design.

But during designing the app, I didn’t customize the Zurb Foundation, just used it as it is by downloading the css/js files and put them under public and started designing the UI by hand coding the html and checking them on the browser.

Only later I started using all the productivity tools like Gulp, Twig, SASS customizing, Browser Sync and others.

Infinte Scroll

I did the infinite scroll for two reasons, I can just hit the bottom of the each chapter to load the content of the next chapter few times which would cache the chapters on the browser so I can read them even if I am offline. And the other one to avoid number of clicks/taps the user needs to do to navigate and read, the chapters should load and ready for them to continue instead of they click/tap on the next link, wait for the page to load, that would distract the reading flow.


Get the Files

Gitub Project

git [email protected]:ithiru/jemo.git


Before running the application, the website needs to be scrapped and loaded to database.

Please load the data using the SQL available in the data folder.

mysql -h <host> -u <user> -p <database> < data.sql


Please create .env file under node-app folder with the following values to connect to MySQL instance where the data has been loaded.


How to Run the application

git clone [email protected]:ithiru/jemo.git
cd jemo/Docker
docker build -t jemo .
cd ..
docker run -it --rm -v $HOME/jemo/node-app:/app --link mysql:mysql -p


iPhone 5


iPhone 6


iPhone 6+




Mac Book Pro


App Demo

New UI


Digital Ocean Setup with Dockers

Digital Ocean Setup


Digital Ocean setup using Dockers and Nginx to run my Blog and my friend’s and Ponniyin Selvan Community

The day Dockers announced the Release Candidate and after reading about the application virutalization I could immediately sense the advantages related to isolating different applications and upgrade them without affecting other applications/components. Started experimenting it on Digital Ocean on May 26th 2014 and never looked back since then.

Some of the advantages I found during my experiments

  • I am able to hide application instances to the public internet. For example, mysql is accessible only by the other Docker Containers
  • I have a wordpress blog which is bit old due to plugin dependency and doesn’t work properly in new PHP 5.4.x, so I had to use both old PHP and PHP 5.4+ at the same time. Docker allows me to create and run both without having to worry about conflicting dependency components and upgrades. I proxy to respective PHP Fast CGI docker instance based on the domain/blog.
  • I was able to switch from MySQL to MariaDB silently without even worrying as everything else including the Docker name is same (mysql!) but internally it is running MariaDB.
  • Able to run different Linux distributions on top of Ubuntu due to dependency of the component. Without dockers then I would have to provision another Digital Ocean droplet and install that particular OS.
  • Able to run multiple instances of the same Docker Image, upgrade and test and make sure the newer version of the application works before switching over to production mode.
  • Portable, when I upgraded from Ubuntu 14.04 to Ubuntu 15.10, I ran into some issues on the same Digital Ocean Droplet. I just created a new droplet with 15.10, exported the Docker Image from 14.04 Droplet and imported to the new Droplet. No need to go through all installation procedures again.
  • Can create multiple versions of the Image and switch between them.
  • Light weight/Less Memory/Cheaper than creating new VPS.

Dockers Running


Docker Images


Dockers running At Work


Dockers Images At Work



When I started setting public websites with Dreamhost on 7th Dec 2006 they offered cheap hosting for $2 a month, it was shared hosting where you don’t get to run lot of apps due to memory/cpu restrictions. My websites were served using Apache Web Sever

After my websites started creating some traffic, Dreamhost on 26th Dec 2008 sent a nice email stating that my websites consuming lot of CPU/RAM and better move to private server with some promotion. I took it and started using Lighttpd with some Lua scripting for couple of years.

Finally moved to Nginx on 26th Jan 2010 and never looked at any other web server since then. Nginx is fast, consumes less memory and able to customize easily than Apache.

When I was doing a POC for work to convert an existing Web application to Hybrid application, I had to use some Lua scripting at the Nginx layer to do Single Sign On. After that I started using Nginx from OpenRestry distribution which allows to have Lua scripting which allows me to do much more than just static configurations.

Backup and alerts using IFTTT and Pushbullet

Instead of sending/checking email to ensure that my backups are running, when does it start and ends. I am using IFTTT Maker Channel which in turn push the data to Pushbullet and PushBullet App on Android Phone shows Notification that it completed.

I am creating daily Incremental backup with Day Name and Full Monthly backup with Month Name and Weekly back with Week number of the month. This will allow me to control how many backup file I create and don’t have to go and remove older backups.

curl -X POST -H "Content-Type: application/json" -d '{"value1":"Starte","value2":"test","value3":"test"}'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd /data
sudo tar -czvf backups/$(date '+%A').tar.gz .  --exclude=swap4G.swap --exclude=backups --listed-incremental=backups/data.snar
sudo mv -f backups/$(date '+%A').tar.gz /backups/daily/
curl -X POST -H "Content-Type: application/json" -d '{"value1":"Completed","value2":"test","value3":"test"}'



Going from Google Phones to Lenovo

nexus-oneI am fan of Pure Google Android experience and hate any Android Phones with its own Manufactures bloats and UI customization (TouchWiz by Samsung is an example of extreme UI which I can’t stand).

google-nexus4Since Nexus One introduced I have been Google Phone fan (Ok, just two of them). I bought Nexus One in Year (9999) and then Nexus 4 when it was released. It was bit expensive at the time but I went with it the following reasons. I asked my friend in US to buy them and send it to India as they were either not available or too expensive after the currency conversion.

  • Pure Google, no bloatware
  • Google UI Experience
  • New OS released pushed to the device as soon the OS is in Beta or GA.
  • Google Brand

But as new devices released in India by Lenovo, Micromax MI and other companies are cheaper with good looking UI, and also the the hardware specification become obsolete every 2 years, I didn’t see any justification to spend lot of money every 2 years.

lenovo-smartphone-vibe-p1-front-backvibe-p1-mainI went with Lenovo Vibe P1 for the following reasons.

  • Cost Effective (not very cheap but moderate)
  • Pure Google UI Experience
  • Fingerprint scanner – Wanted to secure my Phone and didn’t want to key in the PIN every time!
  • Dual SIM
  • Battery Juice – Tired of charging every day !
  • Bigger Display

I have been using this device for over an year and quite happy with it. I need charge the phone once in 2 days only with full 4G usage, if I dont use the 4G it would come for 3-4 days. The charger is Turbo Charge which just takes 30 mins to charge to 100%.

Overall I am happy that I made the switch to Lenovo, I was concerned that they wouldn’t release new OS and patches but they released all of them within 3 months of the releases.

Would definitely recommend.

How to find Detailed Java API changes by version?

Have you wondered how to find what API changes were introduced in a particular Java version of whenever a new Java version is released. I can hear you saying nothing is earth shaking since Java 1.5.

I am sure the Java 1.8 new features are definitely going to change the way we write code in Java

Two of the videos by Arvind Venkatraman would be definitely worth viewing.

Java 8 Language Capabilities, What’s in it for you?

Transforming Code to Java 8

Now, back to finding version specific changes in Java API. I use the following Google search query to do that

Show Java 1.8 API Changes This will give both new classes/Interfaces introduced and existing classes/interfaces but a new method/property has been added.


Java 1.7 API Changes

Java 1.6 API Changes

Java 1.5 API Changes

If there is a better way, please let me know in the comments.

Google Inbox !

I am a TODO junky and have been doing since 1999. I used to have a small packet book then and used to write the tasks for the day, strike them once complete. Move the tasks not done to the next day.

I have used lot of tools since then via Online, the following list of apps/sites, may be more but I don’t remember.

  • Google Tasks
  • Gmail with Labels
  • Google Spreadsheet
  • Trello
  • Any.Do
  • Google Keep
  • Remember the Milk
  • Wunderlist
  • Outlook Tasks
  • Google Calendar
  • Astrid

Finally when Google introduced Inbox, it was a shock as I couldn’t understand how it can be used to have your email as Tasks. Snoozed, Inbox, Done labels were confusing. Once I figured it out there is no looking back. I am also fan of Zero Inbox.

google-inboxI have the Inbox app on my Android Phone and also have shortcut to Add a New Reminder. Whenever I wanted to do something and would like to note down, no need to open Inbox App and tap on add and then Reminder. Just tap on the Add Reminder shortcut, type what I wanted to do, just save it if I don’t know when to do or schedule if I know when I should do.

Merging my email and then the tasks is an innovation and Google did the right think with Inbox. I am sure I would be sticking with it for a while unless some thing else comes up and disrupt it, as always 🙂

Warning ! Cloudflare free SSL Certificate Reveals Other User’s Domains

Cloudflare free SSL users are grouped together and shares the same SSL certificate. Looking at the details of the SSL certificates reveals other user domains.

Cloudflare provided SSL support in their offerings which has free SSL Certificate option as well. I am sure you would have jumped right away to have your website with SSL support. If you haven’t, you better do it to increase site ranking as google started ranking sites with https higher.

But there is a small issue. The SSL certificate Cloudflare generates for your site is not just for the site you enabled SSL, it is the same certificate for all the other websites you have in your account.

I would have been little happier if that was the case, but looks like they use the same certificate for other users as well. The good thing is, it is not everybody using free account @ Cloudflare. It seems few users are grouped and share the same SSL certificate.

When you check your SSL certificate of your domain using the SSL check tools it reveals the domain details.

In this case I checked for my domain

Cloudflare free SSL shows other user's domain
free SSL Certificate details reveals other free user’s domains

If you have a problem with this, you better have your own SSL certificate !

Update Oct 18/2014: Please also check the discussions @ Reddit. As per this stackoverflow post, Cloudflare SSL breaks the trust doing this Free Flexible SSL.

Browser trust the SSL certificate assuming it is secured end-to-end, but in this case it it secured only from Browser to Cloudflare, from Cloudflare to Host is not secured which breaks the trust.

To overcome we can configure Self Signed Certificate using full SSL (no Strict) which would make the Cloudflare to Host also secured.