Monday, 7 July 2014

New blog address

I have shifted my blog to Github pages. The new blog can be found at

The new blog is hosted on Github and is set up using Jekyll. All the previous posts have been moved to the new blog. Unfortunately, the comments could not be moved as they are linked with G+ accounts.

You can add RSS Feed for the new blog @

-The Guy Who Read Little

Monday, 11 November 2013

NoSQL Systems

MongoDB or Hbase or Cassandra or any NoSQL systems are quite different from the RDBMS (Relational Database Management Systems) and NoSQL system is a paradigm shift in how we store and retrieve data. The trend of developing NoSQL system was started at Google with the introduction of MapReduce technology for the Google Maps.

The name NoSQL means in general that “This not only supports SQL” storage, but other kinds of storage too, like :
  • Graph Stores - Social Connections as graphs, Networks
  • Wide Column Storage - Data stored as wide columns instead of rows
  • Key-value Stores - Every single item in the database is stored as attribute name
  • Document Databases

The key benefit of using NoSQL systems is the scalability and high performance on high amount of load. The problem with RDBMS is that scaling means getting more computing power in a single box with higher processors and more memory. NoSQL systems are distributed in nature, hence a cluster of machines can be made to work with NoSQL and can be scaled to 1000 of computers. With the evolution of cloud computing, NoSQL systems came into widespread use. The advantages of cloud computing is it provides computer on the go, and the famous “Pay as you go” model proved very successful for both the cloud providers and cloud consumers. There is no upfront cost involved, hence a lot of Startups can use it with minimalistic cost, and the big organisations need not spend money on getting complicated servers, instead use a model of Hybrid Cloud to meet the demands of their customers.

Now, after introducing NoSQL system, let’s look in to the main aspects of NoSQL Systems. The CAP theorem which states that it is impossible for a distributed computer system to simultaneously provide all three of the following:
  1. Consistency - All nodes see the same data at the same time
  2. Availability - All database clients are able to access some version of data
  3. Partition Tolerance - The ability to split the database on multiple servers

The above diagram describes various NoSQL systems and shows the CAP Theorem. According to CAP Theorem, it is only possible to achieve any two at a given point of time. The most highly used combination for social/networking sites is Availability with Partition Tolerance, somehow for Social networking Consistency is not a big issue, and hence comes the idea of Eventually Consistent. Eventually Consistent says that, a distributed database, will not be consistent immediately, but eventually.

The high availability can be only achieved with a loose coupled approach to getting data, and performing the least computations. This is exactly what NoSQL systems provide. The get and set mechanisms in NoSQL systems take advantage of no strict schema applied with redundant data to achieve availability. Since in today’s world, memory is no longer a constraint, so increasing redundancy to achieve good performance is not a big problem. In RDBMS the schema is very strict with highly normalised tables to store data. The key idea behind Normalisation is to reduce redundancy in the data. Sometimes to fetch data in RDBMS with high number of tables, the query becomes quite computation intensive which leads to slow processing of the request. Slow processing of requests is not something which is desired in this fast paced world, and hence the NoSQL systems fill in that gap of providing fast request processing with highly redundant data often leading to simple queries.

So Partition tolerance was mentioned above, but not explained. So with RDBMS, the database tier in the application is quite restricted. Often a single server with high processors and memory is used. The problem arises in scaling up, as in to scale the DB layer, more number of costly servers with high processors must be added. Adding servers to existing stack is a problem in itself, plus the cost shoots to the sky. NoSQL systems offer a different approach, which emerged from Google’s MapReduce. NoSQL databases provide a mechanism to use multiple machines/nodes for the database tier, and hence partitioning the database into multiple machines.This functionality is known as Partition tolerance, to be able to save the database into multiple nodes functioning as a system. Hadoop is one of the technologies used for creating clusters of computers. Note : These cluster computers are not server level computers, but normal desktop computers put together to form a cluster. The cluster functions as a high performing server while providing a cheaper and better way to manage data.

Sunday, 5 May 2013

Summer Diaries 2013 - May 5

"If you can get your dev environment set up, the rest is easy to get through"
I read the above quote while learning Ruby on Rails, and well its true. Setting up the development environment is the toughest job while developing something. Always one or the other library is missing, and the usual routine follows -

aptitude search <missing library>
aptitude install <missing library>

If you are Linux user, then aptitude is a must have package for managing other packages. It makes life easy, you can search, install, remove and do everything possible you can think of related to packages and libraries. Its been a week or two since my holidays started and finally I have set up my machine (the beast, oh yes!) for development of projects that follow the Summer 2013.

If you are reading this, and are really bored for the summer, i.e. don't have anything productive to do, I suggest you to learn some things from Coursera. They have courses from all domains which includes but not restricted to Computer Science, History, Medicine, Maths and Music too. A course is being offered to learn Guitar, now how cool is that! Learn Guitar for free from worlds best teachers. Not only that, it offers you a certification of completion/distinction on successfully completing the course.

I was really happy today, as I have set up my machine for development, and thought it deserved a blog post! I am posting a picture of my Workstation, oh yes! It is awesome, and hopefully it will help me generate loads and loads of code over this summer.

Do let me know, which courses you plan to take on Coursera, and there are many sites out there for learning. If you want to learn to code, be sure to check Codecademy, they have good introductory courses.


Saturday, 4 May 2013

GNOME Diaries - v.0.0.1

I have been home from past 1.5 weeks, and from the day I have reached home, I became busy with making my Google Summer of Code Proposals. It had been a tiring time, looking around for more projects, trying to tailor the Proposal as much as possible, taking help from mentors and other senior people in the industry. Truth being told, I loved the workflow last week, and I am looking forward to this summer and contributing code to open source :D

So now coming to the projects I have applied to, here are my proposals (You can go through them, and if interested give me some feedback on them):

1. Implementing Custom Functions in Calculator
2. Integrating Cydin with Banshee

My last blog post, gave a little insights to my first project. The second project deals with Integrating an open source module called Cydin with Banshee. Banshee, is an open source Music Player, written in C#. Banshee happens to be packaged with all leading Linux Distributions and is one of the most widely used Music Player.

My project with Banshee, deals with integrating Cydin, an open source library to manage Plugins in any Mono.Addins Project. Currently the problem faced with Banshee is that the external plugins which are developed are mostly hosted at github by concerned developers. Due to this, the user-base of the plugins go low. The only way, the plugins reach the Linux users is when a distribution plans to package it with Banshee (which happens very rarely). To overcome this problem, the project of integrating Cydin comes in to play. Cydin provides a platform for managing plugins without any problems.

More details will follow through, as I learn about Cydin and hack a little of Banshee in the coming weeks. If you have not tried Banshee yet, do download and try it out. The detailed installation of Banshee is provided here.


Saturday, 13 April 2013

GNOME Diary - v.0.0.0

It's been a while since I have posted, and no one is to be blamed but me. Academics and College life kept me busy all this while. My second year at college comes to an end on 22nd April. I can't actually believe that I have completed 2 years at college, now the way is down hill. 2 years more! and I will be graduate! :D

Summer 2013 : Plans
Some weeks back, I was looking through 2012's Google Summer of Code projects and stumbled upon GNOME. For people who are reading this and don't know what gnome is, you can have a look here. Gnome is a desktop environment used by many Linux Distributions. Fedora 19 (Spherical Cow) uses Gnome 3.8, the interface is smooth and offers wide range of tools for making your life easier. One such tool is the Calculator, which I hopefully will be contributing to this summer. There are 2 project ideas under the calculator, and I am looking at adding custom functions to the calculator.

The custom functions will allow more flexibility to the users, and is targeted at the people who are in universities and schools. I am still working on the detail, on what all it's going to support. But be sure to check it out after Summer, probably around September. Once selected, I will create a public repository on Github, and you can download and try out the code on your machine. The application for Google Summer of Code 2013 goes live on 22nd April and closes on 3rd May. The results of the accepted projects comes out on 22nd May and the coding begins on June 17. More details on the Google Summer of Code can be found on : Summer of Code

Any suggestions on what all to include in the custom functions are welcome either as comments here or email. I can be reached at rashood dot khan at gmail dot com

Summer is fast approaching, and hence drink loads and loads of water! and do leave some water out for thirsty animals and birds :)

Till the next post (which is supposedly happening soon) ;)

The Guy Who Read Little

Friday, 26 October 2012

Hello Android!

 Planning to work on Android Development? Few tips which might come in handy!

Setting up your machine for Android Development is a major project before you set up with making your app. Problems Problems and more of problems keep coming on and on! Solution - if you are lucky you might find one! or else keep looking. Well worry not, all your prayers will be heard!

Today, I sat down to set my machine up for Android Development. It so turned out that Android SDK was not able to recognize the JDK and JRE on my computer. Even after, several uninstallation and installation it din't work.

Finally I found a very easy way to set up your machine for development. Single Download of 400Mb and that's it. The Nvidia Tegra Android Development Kit - has everything you would need for making your Android App!

Download the tegra-dev-pack 1.0 for windows. I have just tried for Windows and works perfectly! The package includes the following :
  • Android SDK r18
  • Android NDK r8
  • JDK 6u24
  • Cygwin 1.7
  • Eclipse 3.7.1
  • CDT 8.0.0
  • ADT 15.0.0
  • Apache Ant 1.8.2
  • NVIDIA Debug Manager for Eclipse 12.0.0
  • Tegra Sample Code
The package is available for OSX, Windows ( 32 / 64 bit ) & Ubuntu (32 / 64 bit)

This seems the best solution to get you started with Android Development Setup! Once you install the package, upgrade it.

-The Guy Who Read Little

Saturday, 13 October 2012

Windows installation over Linux

If you are running a Linux OS, and want to install a Windows OS over it then you have landed at the right place. This post guides you for successful installation of Windows over your Linux OS.

First of all, if you have not yet partitioned your Hard Drive properly its a bit of problem. If you have your Linux on ext format then installing windows is not possible, Windows does not recognize the ext file system. Windows works perfectly on NTFS system. To do so follow the steps:

  1. Make a Live OS Disk of any Linux Distro ( I had used Linux Mint 13 - KDE), and boot it up with the Live OS.
  2. Once the Live OS is running, go to Applications > Disk Manager
  3. Here you will see all your hard-drives with the space allocated and un-partitioned space.
  4. Create a NTFS partition, with desired space for installation of Windows.
Now you have set your machine with NTFS partition for Installation of Windows. Reboot your PC with Windows Disk/USB. The partition you created, would show up with the space you allocated. Install Windows with the settings you want.

The problem arises now, Windows when installed over Linux, removes GRUB. GRUB stands for GRand Unified Bootloader. You don't have to know much about it. It is responsible for booting your Linux Distro. Once this is removed, you will not be able to access your Linux. There are many ways to install the GRUB again. I give you a very easy way to install GRUB, its all GUI based, and hence no commands are involved. Here it goes:
  1. Download the Boot-Repair Disk,depending upon your machine (32/42 bits) from the following link:
  2. Install it on a USB using
  3. Reboot your PC using the USB. Ubuntu must boot from the USB.
  4. Click on Boot Repair, Located on the left side Applications Panel. Click yes when it asks for Update. Click on the Recommended Repair, once it opens, and there you go! Your GRUB is back, which gives you access to your Linux and Windows.

- The Guy Who Read Little