Wednesday, April 2, 2014

Presentation on Linux basics

Sharing my presentation slides on Introduction to GNU/Linux. This would be useful for Windows users who are starting to learn GNU/Linux or even UNIX. The basic ideas and concepts remain same in GNU/Linux and UNIX. Click here to see the presentation.

Sunday, July 15, 2012

Developer Openings in Pune, India

Company name, a music portal based out of Pune.

Please send resumes to
Positions open
Android Developer
Web Developer
Platform Engineer
Linux Systems Administrator
Android Developer: 
  • You will be creating mobile applications from start to finish and apart of the full lifecycle
  • The ideal candidate is someone who has technically strong Android expertise (with 2 to 3 years of Android and more than 5 years of software engineering experience) and have completed several Android applications.
  • He/she must have deep architectural and software design skills, well-versed in algorithms and data structures, and can write clean, maintainable code.
  • He should also have experience leading and collaborating with offshore teams.
  • You will get to work with super smart team: x-Yahoo, x-Google, x-Microsoft and x-Gracenote colleagues.

Desired Skills & Experience 

  • 5+ years hands-on Java development experience in a commercial software development environment.
  • Must have 2+ year strong development experience on the Android mobile platform
  • Experience in programming dynamic and advanced media mobile applications a plus
  • Strong experience in the design and development (full lifecycle) of mobile applications (Android)
  • Strong with an Eclipse Environment (Android)
  • Strong UI Design/Development
  • Experience with Multi-threaded applications
  • Strong understanding of interactive application development paradigms, memory management, file I/O, network & socket programming, concurrency and multi-threading
  • Demonstrated experience in a development leadership role
  • Object-Oriented design methodology
  • Bachelor’s Degree in Computer Science, Engineering, or equivalent.

Web Developer

You will be responsible for front end/UI development of India's most visited music destination currently used by 3 million+ active users every month.
  • The ideal candidate must have 3+ years of solid Front/End UI development expertise
  • Speed, Performance and stability will be your #1 priority
  • You should be forward thinking and making sure we are using the latest browser technologies and standards to keep our web products top-notch and world class
  • You should have deep architectural and software design skills, well-versed in algorithms and data structures, and can write clean, maintainable code
  • You should also have experience leading and collaborating with offshore teams
  • You will get to work with super smart team: x-Yahoo, x-Google, x-Microsoft and x-Gracenote colleagues
Desired Skills & Experience
  • 3+ years of browser-side client technologies including AJAX, HTML/HTML5, CSS, and object-oriented Javascript
  • Experience with javascript framework such as YUI(preferred), Prototype JS, Dojo, jQuery
  • Experience building scalable, high capacity, highly available web sites
  • Be passionate for building high-quality products
  • Strong problem solving and analytical skills
  • Must follow performance practices for browser-based development
  • Good understanding of browser security concerns, internationalization and its implications on javascript development.
  • MS/BS in Computer Science (or equivalent experience)
  • Excellent communication skills

Platform Engineer

Help scale our increasingly complicated backend & recommendation platforms. You should have a passion for building highly performant, responsive recommendation engines powered by social graphs in the form of APIs that will be used by millions of people from different platforms

Role & Responsibilities

  • Participate in the development of the next generation music streaming platform
  • Design and build fault-tolerant, high-performance, scalable systems
  • Design and maintain the core software components that support our platform
  • Improve the scalability, resilience, observability, and efficiency of our core systems
  • Code using primarily PHP, MySQL, No-SQL and Amazon stack
  • Knowledgeable about the different cloud caching technologies
  • Analyze bottlenecks and single points of failure of the whole system and improve performance
  • Ensure that new features will readily scale
  • Work closely with, and incorporate feedback from, product management and front-end engineers
  • Rapidly fix bugs and solve problems
  • Pro-actively look for ways to make Dhingana better
  • Speed, Speed, Speed - must be a performance freak!
  • Play a key role in product development, help shape direction of dhingana feature set


  • Bachelor's degree in Computer Science or equivalent. Masters in CS a plus
  • 2-4 years of commercial software development experience
  • You have built some impressive, non-trivial web applications by hand
  • Excellent programming skills in PHP or Java
  • Disciplined approach to testing and quality assurance
  • Good understanding of web technologies (HTTP, Apache) and familiarity with Unix/Linux
  • Solid understanding of data structures, algorithms and design patterns
  • Great written communication and documentation abilities
  • Comfortable in a small, intense and high-growth start-up environment
  • You know and can admit when something is not great. You can recognize that something you've done needs improvement

Linux Systems Administrator

You will be responsible for administration and monitoring of India's most visited music destination currently used by millions of users every month.
  • The ideal candidate must have 2+ years of unix/linux system administration experience
  • Writing bash scripts and chaining commands together should be second nature to you.
  • you must be able to analyze various system parameters.
  • You should be familiar with web 2.0 multi tier systems.
  • You should also have experience collaborating with offshore teams. Written and oral communication should be one of your strong qualities.
  • You will get to work with super smart team: ex-Yahoo, ex-Google, ex-Microsoft and ex-Gracenote colleagues
Desired Skills & Experience
  • 2+ years of hands on experience in unix/linux administration.
  • Hands on experience with installation, configuration and management of linux and LAMP stack is a must. Ability to bring up a server from scratch is a big plus.
  • Hands on experience with at least one and preferably more than one scripting languages such as bash, python, php is a must.
  • Ability to quickly identify and fix systems under heavy load.
  • Experience with server monitoring frameworks such as Munin, Nagios.
  • Hands on experience with performance and load testing is a must. Familiarity with tools such as apache bench, siege, loadrunner is highly desirable.
  • Experience with cloud based systems and relational as well as nosql is highly desirable and a big plus.
  • Be passionate for building high-quality products
  • Good understanding of browser security concerns, internationalization and accessibility.
  • Excellent communication skills.


You will be responsible for the end to end testing of India's most visited music destination currently used by 11 million+ visitors every month.
  • The ideal candidate must have 2+ years of QA and test automation experience.
  • You should be familiar with various QA methodologies and practices.
  • You should be able to create test cases by exploring existing products and asking right questions to the right people.
  • You should be familiar with various test automation tools.
  • You should also have experience collaborating with offshore teams. Written and oral communication should be one of your strong qualities.
  • Experience in mobile testing is a plus.
  • You will get to work with super smart team: ex-Yahoo, ex-Google, ex-Microsoft and ex-Zynga colleagues
Desired Skills & Experience
  • 2+ years of hands on experience in quality assurance and test automation.
  • Experience with test automation frameworks such as SilkTest, Watir, Selenium
  • Experience writing detailed test cases covering all functional aspects of a product.
  • Be passionate for building high-quality products
  • Strong problem solving and analytical skills
  • Experience with performance and load testing is a plus
  • Good understanding of browser security concerns, internationalization and accessibility.
  • Excellent communication skills

Thursday, January 7, 2010

My very own Linux ISP Programmer software!!

Last evening I was successful in flash programming a NXP P89V51RD2 microcontroller using an ISP Download software that I have written in C. It runs over a standard Serial port, without any extra hardware in between. It is very basic, like it erases only 1st two sectors of the block 0 of the flash and sometimes it gets stuck after getting into the ISP mode. But it WORKS (mostly)!!!

This was a result of about 5 days of serious but part-time programming effort. Having worked on Flash programming tools long back, it was much easier that what I had imagined it to be. In fact, the first assignment (at my first job) in Midas, I had to fix bugs in a software that created various formats of HEX files, like Intel and Motorola S formats. Incidentally Keil generate Intel HEX format. So, familiarity breeds quicker software development.

My primary motivation behind doing this software was to enable a student trainee of mine to work on Linux desktop for compilation and downloading of HEX files into the 8051 hardware kit she has to work on. She has a PIII system and its not too friendly with Windows XP (not sure why and didn't debug it too much). I decided that she should not spend any money (and big money) to buy a new PC only because FlashMagic is not available in Linux version.

But now I realize that this could also help lots of other 8051 learners and programmers who have only Linux PCs or wish that if the entire 8051 development cycle could be done on Linux desktops.

Today, we have the ASEM-51 Macro Assembler for assembling MCS-51 assembly code, an Open Source initiative. We also have Small Device C Compiler project that provides Open Source C cross compilers for several microcontroller architectures, including 8051, PIC 14 and PIC16. We also have MCU 8051 IDE, an integrated development enviroment for microcontrollers based on 8051, that supports assembly and C programming. So, the only software missing in the chain of fully Linux based software development (at least for NXP P89V51Rx2 series) was the ISP Download software. So, I decided to take up this as a personal initiative to provide this link in the chain. I am still wondering how the world missed out on creating such a product for Linux based developers.

My project will be open sourced soon. It still needs some work to convert into a generic and bug-free software. Also I need to add some features like reading the Device ID and Manufacturer ID. I have to try with the other microcontrollers in the P89V51 series. Add some standard timeouts to terminate the programming in case of failed ACKs. First release should be console based as I do not know any GUI programming at this point of time. Who knows maybe this work may lead me to learn GUI development. Maybe someone will design the GUI for this based on my work. Maybe others will add more microcontroller architectures to this software. There are no limits in Open Source!

Say, in about 2 months I should be releasing the initial version on SourceForge. I have enough (other) work on my hand at present and this initiative will remain as a part-time initiative.

Tuesday, August 25, 2009

Embedded Linux - Pre-requisites

Lately I have been talking to people who are interested in learning Embedded Linux. Most of them are application developers or embedded software developers. Mostly this query is related to the fact that Embedded Linux professionals are in high demand in the market now and are also paid very well. So they want to learn Embedded Linux and upgrade themselves in the job market.

So, one of the basic questions that I am asked is: What is Embedded Linux? There can be several answers to this question but the simplest one is: Embedded Linux is a customised Linux kernel with minimal file system, applications, tools and utilities which is to run on an proprietary Embedded hardware. The Embedded hardware is typically designed for specific purpose like routers, ethernet switches, set-top boxes, mobile handsets, PDAs, etc. The aim of Embedded Linux is to run on the given hardware with maximum possible efficiency and stability, and minimum failures or faults.

If you have worked with any Linux distribution, say Fedora, Debian, Ubuntu, Suse, Mandriva or anything else, you may have noticed that each distribution offers you numerous application, tools and features to give you the best possible desktop working environment. Hence it inflates the size of the installation done on your h/disk, which goes easily beyond 4 GB for the most generic installation without special features enabled.

Now, if you know something about Embedded Systems, there are two things about it. One, its normally not generic and other is that you always have constraints on the memory - RAM and other non-volatile memory. The hardware used in Embedded Systems is also not generic, so you need specific changes done to your Operating System (OS) to work on the Embedded hardware. Also you need to tweak the OS to make it work within the RAM and non-volatile storage in the hardware. Lastly you need to leave out all the unnecessary applications and features of desktop that are not required by the end system.

Embedded Linux development should take care of the above three points.

1) Make the OS portable for the new hardware, including the bootloader software.

2) Optimise the size of the OS w.r.t to features and applications, and also device drivers.

3) Test the optimised OS for functionality and stability, just like any other OS.

Another variable is that several processors other than Intel x86 family are used in h/w design, so there is ample work done to port the Linux OS and device drivers to work with the other processors.

Like any other advanced skill set, Embedded Linux also has some pre-requisites that must be satisfied by the learners to understand it much better. In fact the list is quite long. Here goes:

. Bootloaders - U-Boot for example
. Excellent knowledge of C programming, shell script and Makefile, including C libraries
. In depth knowledge of Linux OS, including the Linux filesystem, tools, applications and various libraries that Linux uses
. Device driver development knowledge
. Sound knowledge on Data structures and Operating System (Schedulers and Processes). If possible Real-Time Operating Systems
. Software development processes and methodologies
. Familiarity with different processor architectures and their assembly instruction sets - x86, ARM9, ARM11, PowerPC, MIPS, Motorola
. Knowledge of compilers and cross-compilers and using them - GCC Tool-chain is mostly used
. Working with open-source code - understand, modify and compile
. System design and system knowledge to define what you need to have in your system

Last but not the least, you need a never-say-die attitude to work with Embedded Linux. Without that not much will be achieved.

So, general advice is that unless you are fluent with the above, you may face lots of hinderances in your learning process. You may be able to find solutions and resolutions on the Internet forums, but not always.

Its tough but not impossible. Its seems crazy at times but its possible to make good sense out of it. Its not for everyone but many have succeeded. So, take a shot at Embedded Linux and see what you are able to achieve.

Monday, August 17, 2009

Blogging Hiatus over

This blog has had a slow progress. In fact I observe that its exactly 11 months ago that I had posted my last Linux related mutterings. But as the previous blogs had mentioned, I am doing exactly that, earning my bread through Linux and related stuff. Butter is yet to show up.

Its been a tough year and I still haven't started looking out for a job. So, the initial hiccups are over and now I am in the process of stabilising my freelance career. I have had a good patch with corporate trainings, a bad patch with illness and then another good patch with my association with IIT Madras that is still running. I have had a bad patch with corporate trainings, thanks to the world-wide recession and short-sighted managers who think that saving on training expenses will 'actually' be good for their company. But I am still in the business of Linux based training and development which was my intention last year, first post. I wouldn't say that I have achieved success yet but I am progressing.

One of the best things that happened in last 11 months was that I got associated with IIT Madras for developing a Linux based DSP Training Program. I am working on a Embedded Linux platform based on Analog Devices' Blackfin DSP processor. I have contributed to the U-Boot and Device Driver (Audio codec AC'97) development of the training board Linux software. Now working on some DSP experiments on the Linux platform for signal processing.

In last few months several people have been enquiring about Linux based trainings, especially Embedded Linux. More on that in my next post. It will happen soon.

Friday, September 19, 2008

Why Linux?

The next big question that you would ask me is why Linux is for all? And why all should be for Linux? For one answer, the combined effort of several million similarly thinking people cannot be for a wrong reason. The number of developers who are today working on Linux based development is too high to ignore. The vision with which these people are working is quite clear, stop paying for something which you can use for free. Just look at the number of Linux distributions that are available today, totally free of cost.

Well, the free and freedom of Linux comes at a cost of relearning a few things. For one, the Linux desktop would be a puzzle to anyone who has used a Win**** based desktop for even a week. But then who ever said that free things are as good as the ones you pay for? Trade off convenience for relearning and pretty soon you should be sailing smoothly with Linux. Yes, even now the amount of support that Linux provides for the peripherals that you connect to the PC is low. But that is because the manufacturers of the peripherals are not willing to invest in writing software/drivers for Linux also along with Win**** drivers. In fact most manufacturers do not even provide information to the open source developers so that the Linux equivalent can be developed without adding cost to the manufacturer. Till this changes, using Linux as a simple plug-and-play desktop would be little difficult.

So this is where the more experienced and mature Linux users have to pitch in to spread the word about Linux and also teach as many people as possible on how to use Linux without fear. Yes, fear is the key that keeps away people from several things like sky-diving, bungee-jumping and Linux. But once the initial fears are gone, you enjoy to the core. Reminds me of a old rock song by the group Queen, "I want to break free...". But not while bungee-jumping!

So, face your fears and take the initial steps. I'm sure you would walk and talk Linux sooner than later.

Monday, August 11, 2008

Post zero


Welcome to my world of Linux!

Linux is going to be my bread and butter, inspiration and aspiration from this point onwards. Well, actually it has been my bread and butter for quite some time (almost 2 years) but then I realised that the cheese and cake from my share was being siphoned off by someone else. So, I quit my job some time back and have decided that even I get only bread using Linux, SO LET IT BE!

As for my relation with Linux, it started as early as 1994 when I entered college and we were exposed to a lab that was running on Linux stations (working as distributed servers). User login was common for all the stations, so it was quite convenient. But using Linux at that point remained only for doing assignments of programming and browsing the Internet using Netscape Navigator or even text-based browser Lynx (
), just for fun. Linux was just an OS for me and I never bothered to learn what actually Linux does during my college lab days. Things have not gone beyond this stage for a majority of computer users that I have seen till date only difference being that they are used to W******.

Next level of Linux encounters happened when I started working on my first job at Midas Communications. Here I was expected to port certain system software written for MSDOS into Linux. This was the first time I looked beyond the desktop or the standard shell commands of Linux. I used cc, gcc, Makefile and Shell scripts to compile the C programs that I wrote and others wrote. Little later I got the chance to work at device drivers for serial and parallel ports in Linux for standard and proprietary hardware interfacing software. All this was great and looking good for me. I started with SlackWare Linux, then moved on to RedHat 6.2 and then on to RedHat 7.2. I was asked to write Shell scripts to install applications and servers and other scripts too. Using the Dialog tool I created GUIs (well in those days text based GUI was also appreciated alot!) for several projects.

After this for a few years my focus shifted fully to Assembly based firmware development and Linux remained in my work only for use of Shell scripts and an occasional C app for random work. Then came a big opportunity where a new board was to be ported to Linux. We chose a commercial version of Linux and started the work. This was probably my first exposure to Embedded Linux. I worked a little on Das U-Boot for the bootloader to recognise the Flash EEPROM on our board. Then again I moved on porting Assembly code to C code for porting into Linux. Worked on integration of the applications into the Linux filesystem and wrote scripts to auto-run the applications on boot. Testing was a standard thing that we were always doing. After about 6-7 months of work I moved out of this project and again away from Linux based development and for most part of my remaining stay in Midas, things stayed this way.

All this changed when I moved to BroVis Wireless Networks. My first work was to take over the existing WiFi products that were running with VxWorks. I was new to VxWorks and I learned enough to understand, teach and fix bugs in the existing stack of code. Then the BIG opportunity came to port the boards from VxWorks to Linux. I was back in the Linux loop and for good this time. I got opportnity to work on the RedBoot bootloader for modifications for our hardware board and it was a good learning for me. Now that I was the Team Lead, my work was not only to learn but also teach what I learn to others. So, training others on Linux became regular part of my work. I worked with kernel version 2.4.25 initially with RedHat 9 as the host development environment. While porting the boards to Linux, I got to work on kernel optimization and root file system (RFS) development as there were lots of applications to be integrated for the porting to be complete. MadWiFi drivers were used for the wireless interface drivers. I used BusyBox for integrating the usual utilities into a single executable. For CLI the BusyBox shell was used to integrate all the functionalities. I integrated Thttpd web server for setting up the web based configuration GUI. Played with lots of Shell scripts, JavaScript, CGI and C programming to create the full GUI interface. One of the major work that I did was Web-based software upgrade in which the kernel and RFS would be upgraded without changing the configurations present on the system. Later I also integrated the udhcpd for setting up the DHCP server on board as the BusyBox dhcpd was not working as per our expectations. This project was successfully completed and tested in field for improved performance in packet and network handling. After this I handled several Linux based Embedded products in WiFi domain and it was a pleasure to see Linux making them work so beautifully!

Soon (after 2 years in BroVis) I decided to move out of BroVis and go freelance. This was something I had been thinking for quite sometime and I felt that NOW I could do it. So, I did it and here I am writing a blog on my encounters with Linux over the last nine and half years. I am sure that Linux will be there with me for a long long time to come. Hopefully I would be able to do what I have thought i.e. to see Linux everywhere.

I will keep writing on Linux, hopefully more regularly than my other personal blog.

See you in my next blog.