My Journey with C* and UNIX

Turbo C in MS-DOS environment (Image source: turbo-c.soft32.com)

Internet browsers, email clients and chat applications/engines fascinate me. I had my side projects developing them. When I was studying +1, I joined CT&T Computer Centre in my hometown to learn MS-DOS. And, I used to practice C-language there after my class, in the evenings, on Borland C compiler. By the time I joined engineering I was good in C-lanuage and Pointers. In engineering, when I got access to our library, I explored TSR Programming. Once I got good hang of TSRs and some graphics programming, I started working on my side projects. I used to eagerly come home from college to work on my side projects on our Pentium 4 computer (256MB memory, 40Gig HDD).

  • GniS, a scientific calculator with ASCII characters UI,
  • A 16x16 ASCII char grid snake game (popular on Nokia phones)
  • Paper, a TSR notepad program
  • Ashta Chamma(Telugu: అష్టా-చమ్మా, Devnagari: चौका बारा) using Borland Graphics Interface
  • A car racing game, developed also using the Borland Graphics Interface

With Paper application, user can secure their file with a passcode. It has just one menu that appears in center with four menu items - Open, Save, About and Quit. It is a TSR based application. On pressing a hot key, the application opens on the right top corner and occupies 32x32 characters space. And, users can jot down quick thoughts. The extension of the file would be .ppr. If it was secured, the extension would be .spr.

The car racing game just had one level. The only configurable items were car color, accelerate and brake sensitivity. Good thing about the game is that for every round the track and traffic changes as the application generates them on the fly. So, the player feels everytime it is a new round. By the time I finished these two projects I reached third year of my engineering.

∘ ∘ ∘

In those days Yahoo! Messenger and its email service were popular. And, we had engineering subject - Computer Networks and Communications (CNC). I used to think a lot about that chat application and this CNC helped me to get interest to develop one MS-DOS based chat application. I developed it as a TSR program. With the help of our lab faculty I installed it on 4 computers. It did not have chat history. It has a database file to recognize who sent it. It was just kind of netsend command but with a wrapper. I wanted to learn much more about networking to make it a good application. We were approaching final year of engineering. Amidst project submission schedules, thesis development, printing the thesis and job interviews preparation etc., my chatting project was stalled. But, whenever I get to chat on any chat application I used to feel bad that I did not finish my small side project.

I should not have started the chat application in MS-DOS environment. At least I should have developed it in Java or .Net. But, even in the semester where we had to learn Java, I was exploring C and C++. That year, I got Microsoft Dev free subscription as Microsoft and my university collaborated on a student program. My elder sister was so good in Visual Basic. She was an MCA. We both should have started it in Visual Basic or there were my classmates/friends who were developing projects in Visual Basic, VB.net and ASP.net. Again, I was more interested in C, C++ in Linux or UNIX environments.

∘ ∘ ∘

After my engineering, I got job in 3Com, which was founded by Robert Metcalfe, the co-inventor of Ethernet. I got to work with some great minds who were working on VCX server, SIP and VoIP protocols. I got to work on NBX Server, VoIP applications. The development environment was in C, C++, Linux and VxWorks. I was very happy I got to work for a great tech company. My workstation was Windows but, my actual work is on Linux and C. And in my mind I had this love towards Windows and admiration towards CLI - UNIX and Linux.

3Com NBX VoIP Telephony System (Image source: InPath)

If anyone asks me what my favorite operating system was, I used to answer immediately it was UNIX. The first UNIX variant I worked in engineering was SCO UNIX. And, I used to practice UNIX from this book which I treasured - Advanced programming in the Unix Environment along with Kernighan and Ritchie’s The C Programming Language book. I once lost these books in Hyderabad while shifting my room. I bought those books again as I just felt it was right to have these books with me.

I had opportunity to work on applications using RTOS like WindRiver VxWorks. I used to have a photo of Opportunity Mars Rover at my work desk. It was the same VxWorks RTOS that Opportunity rovers runs on. In those times I wanted to study Operating Systems deeper and I thought it would be right to study at CDAC as my love towards C, C++, UNIX and Linux were ascending after seeing that work environment. ASIMO was another inspiration when I learnt it runs on VxWorks.

I appeared for CDAC entrance test and secured All India 3rd rank and got placed in Bangalore campus. I felt content studying in that campus where PARAM Padma supercomputer was designed and developed (by CDAC) under the funding of Government of India. The course curriculum was so intense and great. I actually felt like home there as coincidentally 80% of the students were from Andhra Pradesh. We used to work in the lab in the nights until 3 or 4 AM, and we used to sleep in the morning until 10:00 AM and then attend the classes. And my favorite subject was Operting Systems. We used to deal with Fedora Linux. That was the time I had full hands-on on internals of an operating system, practiced the theory part what I studied in engineering. Linux became my main operating system on my Dell Latitude Laptop in those days. Shell scripting was new awesome affair that quickly let me write beautiful tools/utilities, made me appreciate the simplicity of UNIX/Linux.

∘ ∘ ∘

Whenever I introspect, I cherish those times with so much love and inspiration - developing my side projects in the evenings in our home study room listening to Classical Carnatic Music, 3Com times, CDAC Bangalore center, the times we spent on assignments exploring Linux and internals. Wow. I miss those days.

∘ ∘ ∘

Later, I bought a MacBook Pro for the reasons that Mach was based on BSD UNIX. It was a beautiful UNIX with best ever Desktop Environment. I kept my Fedora Desktop aside. The system felt polished and friction-free at all levels - the UI, performance, hardware. I remember giving a talk in my class about Microsoft, Apple, Bill Gates and Steve Jobs. My friend Gopinath felt it was right if I talk about these companies and their Operating Systems. I used to learning C++ my uncle’s Macintosh DTP machine. After engineering (studying PowerPC architecture) it was that time again I am back to a Mac.

On my Mac, I learnt Cocoa and Carbon APIs for UI development. It was Mac OS X Snow Leopard. And, my side projects started again. That year, iPhone SDK was released and the API was intuitive as I had developed some Mac utilities and applications. Never realized UI applications excite me this much. One of the Mac projects I developed was a browser. I added tabs, bookmarks manager. Every new tab opens with a grid of some plugins - a tic-tac-toe game, a calculator and a notes taking space (remember my notes taking TSR program? Ha ha.).

Through out the browser development I had this Netscape vs. Internet Explorer issue running in back of my head. I thought a user should be able to do some other fun stuff in the browser other than just browsing. And, in my browser, you could “park” a tab if you are not using it anymore or want to visit later. All the parked tabs could be accessed from “Tab Park” menu. This feature saved so much space in the browser window on the tab bar and removed the clutter. I, having developed a browser, grew interest towards browsers. I see what new features are coming into browsers. And, I really love ChromeOS. I bought one just for the sake of it, to see how Google pushed a browser further. My Mac always have at any given point of time several browsers - Safari (of course), Opera, Firefox, Vivaldi, Brave and Chrome.

Another beautiful feature that I wanted to develop was native chatting. I got this idea as I wanted to distribute this browser by refering. Just like Chrome. And when you invite a friend over email, user would register and download this browser. But, definitely it needed web services and and some infrastructure. So, I did not build that feature.

I called my browser Cruise. A happy activity besides “surfing”.

The year of the iPhone came. Steve Jobs unveiled iPhone and opened SDK later that year. Madly fell in love with the device and wanted to develop iPhone OS (iOS) apps. I did not take much time to learn iOS programming as I already developed some side projects on OS X (macOS). The SDK felt familiar. And I have been developing mobile apps since then.

∘ ∘ ∘

Through out my career I have been developing solutions using C based programming languages on UNIX or Linux operating systems. I had satisfaction of training 75+ people on UNIX Shell Scripting when I was working for HCL Technologies. And the tens of projects were using the several Shell Script routines/schedulers/data-filters that I developed.

In this journey, with in the first 7 years of my technology career, I had worked in three countries - France, USA and UK for 4 years. Got chance to work with cross cultural teams. Later, again I started working full time in USA, the land of opportunities, on H1. How many ever products I worked on, always my dearest projects were my side projects. Howmuch ever small or big they were. Those projects were the ones that made me think outside of office work, work on an idea, sit straight for hours through nights and early mornings, made me forget weekends, made me show it to my friends and discuss.

These side projects inspired me to develop an ERP product. This should be another post, probably I will write little later.

And, you know what, I could sell only two copies of that ERP product. Just two copies - one for a grocery store and one for automobile repair parts store.