09 November 2008

GridGain - Yet another short blog on Grid Computing

Sometime back, I wrote a blog on Grid computing. I came across the definition of Grid Computing from Wikipedia and my knowledge on Grid computing is very negligible if not zero. The concept by itself is very interesting. One the reasons why Grid Computing did not find its place with enterprises is due lack of flexibility. I was chatting with my friend Veerabahu on Grid computing. We were talking about JPPF (Java Parallel Processing Framework).

Few days after that my friend sent a message about another Java based Grid Computing framework "Gridgain". I was very much impressed with documentation and tutorials. I am yet to try the software and probably it may take few minutes to complete a simple application that has some task running in a remote machine.

My first impression about GridGain is that it is simple to use.

Though the concept around grid computing was sound, it did not get enough respect due lack of flexibility and the authors of GridGain say that "GridGain" makes Grid computing much easier.

May in a week or so, I will be writing yet another blog on "GridGain" and share my experiences with GridGain.

04 November 2008

Mini Project #3 - Process Tree in Linux

Mini Project #3 - Process Tree in Linux

A process is a program in execution together with a state comprising of open files, environment variables and pending signal. In any operating system, a process is normally created by another process. And the process dies when it calls the system call "exit" explicitly or implicitly. Each process has relationships with other processes in the system. This mini project is to write a simple tool that dumps the process tree - how one process is related to other processes. The output can be text which can be parsed by other tools.

You have come up with the format and information that should be displayed which can be of use to the users of the tool. The information can be like state, total run time, files opened and pending signals. Here the key is the performance and hence implementing this kernel module or system call is recommended. Initially, the focus should be on getting the information not the formatting the data. Later, the output from the kernel module or system call can be read by parsers implemented in Java or other programming languages.

After implementing this mini projects, the team members will get a good understanding on Linux kernel, important data structures and they can continue to learn Linux on their own by just walking through Linux source code. If you are interested, please submit your intent through email.

All the mini-projects hosted here are open and free. Free to learn and free to be modified. This is a attempt to help students community. This mini project and all other mini projects help you understand the respective areas and gives you insight by doing it.

Two best books on Linux Kernel Internals

Linux is one of most popular kernels around and it will continue to be the darling till foreseeable future. Linux is not Unix. Though it has taken the best practices from Unix and it never pulled off in pushing back some of the concepts which were not good. Today, Linux is growing to be one of the best server operating systems, embedded operating systems and also powering super computers. Linux powers watches to super computers and over a period of time, it has become platform independent.

Over a period of time many Linux distributions evolved and many of the distributions are widely deployed. If you find any Linux geeks and find that they will already have a distribution on their own. Interesting the surprise is not so much for people who stop with user space. If Linux user space surprises you and it is good for you to stop there if you have a weak heart. The surprise will be more and excitement will be more when you start see what is inside, leave alone understanding it. When you start smelling the code, you start understanding it.

But for dull guys like me, having a book or two that explains about Linux kernel indeed help a lot. After hovering Internet for Linux kernel books, I found two books. FYI, this happened three years back. The first book that caught my eyes was "Linux Kernel Development" and the second one was "Understanding the Linux Kernel". I preferred to buy Linux Kernel Development simply because it was thin and I thought it would be easy read. I deferred buying the second book. By decision of buying Linux Kernel Development was right. This books teaches the readers about Linux kernel and importantly you do not need to be a kernel developer. If you have fair programming experience and logical reasoning, you will understand almost 95% of the book. The author, Robert Love explanations and commentary was so lucid and one can practically validate the learning by hacking Linux source code. If you are starting to learn Linux, I recommend you to soon come to kernel space and it will be great experience if you start your journey with this great book.

After reading the chapters on Process, scheduling and system calls in Linux kernel development, you will certainly get a burning desire to hack Linux. That is where the second book comes handy. The second book "Understanding the Linux Kernel" is an handbook with numerous pages with lot of details about the implementation and design decisions. You will find a lot of code taken from Linux source code and explained side by side. My recommendation would be read the chapters in the first book and follow it up with the corresponding chapters in the second book. Then first open the source code and validate what authors say. The learning and understanding will be effective if you complete at least one cycle - First book, second book and source code. You understanding will improve when you repeat the cycles number of times.

Be one of the many guys who smells what Linux kernel is, it is lifetime opportunity.

01 November 2008

Understanding the roots of ancient India

India in 20th and 21st century has undergone a lot of modernization. The early part of the last century and later part of 19th century was very crucial period where we lost all the treasures and best practices. We have lost the originality which differentiated our tradition from the rest of the world. The ancient India had great teachers and they imparted education to their disciples. The students were knowledgeable. Due to western influence, the ancient way of education is corrupted and we are so confused. When in India we crave for pizzas and burgers. When we go to foreign countries we want to taste Indian cuisine. We are so confused. This also applies to education, learning arts like music and dance. While in India, we have excellent gurus who can teach us but only when you go abroad, suddenly we get a feeling and want to connect to the roots. There is nothing wrong in it but it is always good know the roots.

I am not against modernization and I am not against change. However when modernization enters in to selfish society, it reaches to hell. On the way to hell, it makes everything as commodity. Once the education was rendered as service and today seeing an interest groups or institution without desire for money is very rare. There is nothing wrong in trying to change this world. Even modernization will bring good things. These days it is very uncommon to see persons rendering social work. Excuse me, if you think visiting old age home is social work, it is not.

According to the current scenario, there should be many number of engineers and many of us sitting in a hide out, imagining our own life and future. We never make conscious decisions to elevate the society and we never try to make knowledge based society. When we create knowledge based society all the current days shortcomings like poverty, terrorism, unemployment and unlawful activities will reduce to zero. So far, we are treating the symptoms rather than the disease. When Edison died, he left this earth making this planet a better place. When Einstein died, he left this planet a better place. There are very few individuals like Edison, Einstein and Gandhi server the mankind. We, like Edison and Gandhi, take freedom in our hands and make this place a better place.

Amidst our personal and professional life, we often forget our social responsibility. May be a Sunday evening to a slum to help first generation students on computers, may be a Friday night chatting with a college students and help him to find his way. These are simple things which won't much of our time. But the wonderful thing is that, these few minutes transforms the life of the person at other end. It is a paradigm shift for him and he is liberated from his complexes. He will stand up with a lot of hope, confidence and dream.

If you have read this far, you might be thinking in similar lines. I am ready to join hands with you and make a knowledge based society. Knowledge is the only thing that grows when you give. Dreaming to build a knowledge based society which is self guiding and self correcting. Once we do that, we will be reclaiming our roots.


31 October 2008

Next Technological Wave - Is it going to be distributed computing?

The late eighties and early nineties were the revolution of Internet which paved way for so many people to communicate with each other. Internet greatly reduced the cost of communication and today there are so many ways of getting in touch with closed ones. Needless to say, Internet has build a platform on which many network application can be deployed - may it be related to business, education, social networking. Now the networks have become more intelligent and sophisticated. They are not mere networks but they are platforms to host services and solutions.

The later part of nineties led to developments of network security, voice and video. Now, the entire network space is innovated enough as far as technology is concerned. Now, from here they is going to be a lot of innovation in using network as platform, network as solutions. For example, Telepresence is not only elegance of network but also innovative solution. It has the capability to bring people closer to each other. Another example is using networking as platform, Web 2.0 have evolved. Because of Web 2.0, there are so many business opportunities like online advertising and affiliate programs today. Truly, we see a lot innovation in providing a solution where networks plays a very critical role.

Few years back, Virtualization as a technology existed but for people who are crazy about technology. Virtualization was not offered as solution of business people. A gradual shift happened due to green technology, cost optimization and advancement in virtualization industry. Slowly, by the end of 2014/2015, Virtualization technology might get saturated.

From my point of view, the next wave and possibly a much bigger way will be seen in distributed, grid computing. When network become a platform and if the cost on infrastructure and services are reduced, there will be more systems connected to Internet. If the more and more systems are connected and roughly 50% of the resources will be idle at any given time. If there are one billion computer users, there will 0.5 billion users idling their resources. But the idle time of systems can be monetized by lending to Micro Computing providers who sell CPU cycles to people who are in need of CPU cycles. Mirco computing providers will be the agents who buy CPU cycles from idle computer users and sell it enterprises. Thought is it a wild imagination, it won't take much time to make it a reality. It is right time to think about a business model around "Grid Computing" as there are lot of opportunities lying there.

So, the next generation technology will Mobile Technology, Distributed/Grid Computing but still Network Technologies will be there. No technology gains momentum until one put up a business plan around the technology and market it. The key to any technology is right business model and right marketing.

30 October 2008

Mini Project #2 - Object Visualization

Mini-Project #2
Java Virtual Machine takes care of garbage collection. An implementation of garbage collector needs to have so many algorithms to reclaim the memory of unreferenced object. An important condition for garbage collection is reachability of objects and the objects have to be live. The objects that are reachable from root objects are said to be live and hence not eligible for garbage collection. The objects that are not reachable from root objects are said to be dead and thus can be garbage collected.

The idea is to implement a object visualization tool for JVM which gives a map of live objects, dead objects and various areas of JVM. One more requirement is to have a strong design that helps to build features at later point of time. If you already know Java, you can implement this tool in six months (and with two hours of work everyday) and if you need to learn Java, may be you need 7 months. But be ready for a strong learning curve. This project can be done group of 2-3 people.

If you are interested to do this mini-project, you can get the full details through email.


28 October 2008

Launching Mini-Projects with Project Specification

Mini Project #1

The latest and past few versions of Java supports "Hot swap". The host swap is nothing but a term usually refers to changing the components of the system without stopping system. Java Virtual Machine also allows to hot swap the loaded classes and the developers can modify the class and request of reload. This is particularly useful for developers when they are working on code. In order to implement this simple tool, we need to use Java Debug Interface.

Now, this requirement is for writing a simple tool using which one can connect to JVM running in a remote machine and load classes from the local machine. If you want to know more details, please do email. (This is an academic project and person who is new to Java can implement this within 3-4 months timeframe. Also, this gives an excellent exposure to many aspects of JVM which will make your understanding of JVM better).

27 October 2008

Is mediocre thinking sufficient in turbulent times?

This article is written by me, to me and for me. You find it useful, I am speechless. Your comments are welcome.

Recently, I happen to come across the website of Jim Collins and read his biography. I was very much impressed by the words "student and teacher". I found this striking similarity with all highly accomplished gurus. They always say "they are student" and their thoughts did not come from surface level. The thought of being a student is deep rooted into their subconscious, blood and cell. Once you want to be a determined and faithful student then nature (includes time) will give you strength to face the challenges and ultimately overcome the challenges like a cheetah. Every tough time has two sides. One side is real tough side and another side is opportunity. We get fear by seeing the single side of the coin and fail to appreciate the opportunity. Often, we tend to forget that the "tough side" is the gatekeeper. But this gatekeeper is honest, friendly, impartial and helpful. But for us, he seems to be a ugly, tough (really tough) and bad guy. He is there to give chances to deserving candidates who are patient, die hard fans of hard work, persistent and great attitude. But because of our very nature of neglecting the doors of opportunity, we tend to get away from the "tough side" as quickly as possible.

In fact I m not the first person to say this and I have read few books and all the great authors are expressing the same. So many of us are afraid of pain. If you ask an athlete he will tell you how good the pain is. The pain due to hard work has to be celebrated. The pain due to experience has to be rejoiced. The pain due to extra mile has to appreciated. Because, you are working, you are living and you are trying to leave a legacy when you depart from here. And leaving a legacy is a great thing and this world will celebrate thanking you.

Didn't Gandhi have tough time? Didn't Nelson Mandela have tough time? Didn't Martin Luther King have tough time? Every human being is engineered for success but success through failures. The man is not only-success machine and he is quite different from real machine, much more capable. The difference between an ordinary guy and great guy is fighting. Not giving an inch, not fearing about the failures, not worrying about the little pain. We are in tough time and may be toughest in our lifetime. I have few questions and probably some answers why I enjoy this tough time. These are only my point of view and as you know, the perspective vary. Having said that, I am ready change the stance if it sounds logical and reasonable. So your comments are valuable and welcome.

Why should I leave a legacy?
There is an interesting study where leadership gurus and management folks are learning insects those born, mature, spawn and die in single day. These insects were able to "do and die" in just one day. These insects are now leaving a legacy and we human beings are learning from them the management concepts. So we when leave, we should leave a legacy at least for our close ones. Leaving legacy is all about living fully and enjoying every bit of your life. By enjoying, I do not mean "Western type" enjoy. I am talking about spiritual joy of complete surrender and learn from the time with lot of faith. Then automatically, because of our innate nature we will get into cycles of living fully.

How can I make myself strong in human qualities, technically related to my work and leadership qualities?
The tough times, is a great master and he is a dictator. He never likes the word "No", and "Impossible". When you completely surrender and follow it faithfully, the great master will teach you human qualities, technical competency and leadership skills without any tuition fees. He will be your guru but a tough guru. He teaches giving you lot of pain. Over a period of time, the pain manifests itself as stamina and mingles with you and becomes your nature. So, it is complete surrender and faith gives us everything needed for the rest of your life (and also pays for your future generation). But he will not send you paycheck of million dollars ;-)

How can find a strategy to come out successfully?
The strategy is simple yet powerful. Complete surrender with faith.

What is in store for us?
This is one of the silly (probably most silly) questions. When you surrender, the expectations vanishes. When you expect, it becomes your goal not passion, it becomes part of your life not way of your life. This is something like seeing God in you rather than going to temple to visit God. Just rethink twice and convince yourself. But, my guru tells me out of his experience that the outcome cannot be quantified. He just used the word "abundance".

How can I increase my mileage?
BTW, you are not a machine like Honda City. But, you have to remember that you are going to work hard and try so many things. If you be obedient student, the nature will be loyal master and Mother Nature will teach you everything. Peace is assured. If you are looking for an improvement in your mileage, then be assured, you will have tremendous mileage.


Students Corner - Projects for You

My thought on improving knowledge is to learn and share. By learning one gets theoretical and practical knowledge. This is the first level of knowledge. But this knowledge might not give enough insights and deeper understanding of the subject. Only when we share and discuss with like minded people, my brain stretches itself for a deeper understanding. This is one of the reasons why I share write articles and speak at conferences. In that way, I am purely selfish.

I m so much excited to talk with students, work with them and help them to build their career. In this section, I am planning to roll out few mini-projects. These mini-projects are nothing big. They are pretty much easier to do and these projects will help you to understand a specific area such as Computer Networks, Operating Systems, Network Security, Java, Algorithms and etc. Since the tools/projects are simple, it can easily be done forming a small group with your friends (and of course I shall help you through email). Remember simple things leads to extraordinary things.

If you are interested in taking of any of the projects, please do write to me (My Email).

26 October 2008

Virtualization - Cost effective and Environment friendly

In the last few years, the hardware industry and its technological advancements are on par with software technologies. To be precise and honest, the hardware industry in fact outperformed the software industry by introducing so many features. In the past, particularly the processor manufacturers were focussed on increasing the clock frequency of the processors. The clock frequency saturation forced the processor designer to focus on other aspects to increase the processing power. The processor vendors used variety of other techniques such as hyper-threading to improve upon the processing power.

The recent day computers/hardware devices have more processing power and the hard truth is that less than 50% percent of the hardware resources are used on an average basis. In a normal day, the hardware irrespective of whether it is a desktop system, servers or servers in data center, all the resources are under utilized.

The pace of hardware advancement also forces organizations to spend considerable money on upgradation. But the worst part in upgrading is it that it soon becomes outdated within few months after the upgrade. The organizations spend hefty sum on upgrades. Particularly, the hardware upgradation may not be considered as investment but as running cost to maintain the existing services. By and large, there is no ROI for the upgrade. Also, after the upgrade there is greater possibility of throwing the old and outdated hardware. Having a lot of physical resources directly affects the manageability such as security and regularly maintaining the resources.

The next problem and most important one is energy. There has been consistent appeal from the entire humanity of conserving power. Not only that it leads to depletion of energy but also increases the operating cost. The fuel and energy prices are increasing day by day and the organizations are looking out opportunities to reduce cost on energy. The conservation of energy has twin advantages. First it reduces the operating cost and secondly it leads to Green revolution. But the more the hardware, the more it consumes power directly affecting the operating cost. Secondly, because of the large number of physical hardware, a lot of heat is generated and which once again increases the energy demand (spend time and effort to improve infrastructure for quick heat dissipation). The over consumption of energy is recurrent problem. To summarize, there are three main issues - low resource utilization, higher maintenance cost and higher energy consumption.

Considering all the above facts, Virtualization as a technology offers a lot edge. Virtualization is software abstraction layer allowing us to run multiple virtual operating systems in parallel. With virtualization one can run multiple virtual machines simultaneously and thus improving the resource utilization of physical resources. Since these virtual machine run on single physical server, it leads to energy conservation. Also, it reduces the hardware upgradation cost to a larger extent.

Apart from the main advantages, being a software layer, virtualization offers lot of features which increases the productivity. The entire virtual machine is stored as single file leading to easy archival. An important feature that must be mentioned is "Isolation". Each virtual machine is isolated (sandbox) and even the virtual machines running on the same machine need to communication through virtual network. This particular feature boosts the security of the virtual machines.

Virtualization is used in many areas such as storage virtualization, server virtualization, virtualizing application and also in software development lifecycle. Based on the research by Gartner, the virtualization market is expected to grow exponentially and there will be lot of organization showing interest for adopting virtualization.

Hope this article would have given an overview about virtualization. In the upcoming articles, we will discuss more on various virtualization products.

Please do share your feedback/comments.

Design Pattern - Introduction

If you are a software developer, your responsibilities include design, implementation and unit testing the software. Once the software released, the whole bunch of new issues suddenly creeps into your code and then on you will be running after each bug and trying to chase it down to death. In most of the cases, the bug wins and the developers lose. Sometimes, I used to think that there is an egoistic clash between bugs and developers both of them willing to fight till the last breadth. Irrespective of the honest effort, the bugs manifest in multiple forms - usability, functionality, performance, scalability and so many jargons. With current time to market pressures, the software community is pro-actively by changing the software development models - Agile, Iterative, Test Driven Development. These software development models give a framework to tackle the changes in requirements. These days it has become unwritten law to change the requirements, quite often. Even though, we have software development models that offer flexibility, doing the fundamental right will give you a lot more flexibility. Design Pattern is one such tool that helps by providing conceptual solution to common problems and thus decreasing the software development time. 

Design patterns are solutions to common problems. It is not a software tool, framework or library. Design Patterns are simple and effective ideas for common/repeated problems.  Since it is a concept, it can be reused anywhere in software design. The concept of design pattern must have be adopted by software development community taking an inspiration from architecture of buildings or civil engineering. The fundamental concepts and theories of building various types of buildings such as houses, roads, flyovers, auditoriums, cinema halls, communities and etc are same. For example, there are blueprints available to make various types of buildings based on the land terrain, climatic conditions and so many factors. But given a set of requirements, any experienced architect or civil engineer will be able to give you the plan for the building and when followed with fundamental concepts, the building will be made. So, the developers in software community also thought in similar lines and came out with classical ways of solving design problems. Hence, Design Patterns are solutions of common problem.

Like a blueprint, Design Patterns are template for complex problems. Once again going back to the example, the architect or civil engineer will know how to build buildings and what needs to be done. In similar way, Design Patterns are just ideas/concepts. They are not specific to a platform, programming language or an operating system. Design Patterns might have been used atleast millions of times by software developers and the concepts, principles are time tested. Hence most of the Design Patterns states which problem that it is trying to solve and of course the solution. In order to make things clear, apart from the intent and associated text, the design patterns are explained with the help of UML class diagrams.

Design Pattern makes our life easier. Say for example, someone comes to you and asks for "Can you tell the place where people go from one city to another, purchasing tickets. They will also wait on a platform for the vehicle containing a series of boogies pulled by an engine powered by electricity or diesel?" Won't you run from him?. The job would be much easier the person asks for the way to railway station. In software development, without design patterns, the developers need to beat around the bush to express what is there in their mind and Design Patterns makes communication fast, crisp and clear. So, Design Patterns are communication tool.

Having discussed about the design patterns, the rest of the article discusses various types of design patterns. Based on the applicability, the design patterns can be categorized into three main types. They are

1. Creational Patterns which primarily deal with how the objects are created and how to create objects based on a specific situation. The examples of creational patterns are Singleton, Factory, Prototype.


2. Behavioral Patterns identifies common communication patterns between objects and offers flexibility in performing the communication. The examples are State, Strategy, Observer, Chain of Responsibility.


3. Structural Patterns deals with realization of relationships among objects. Decorator, Adapter and Flyweight patterns are examples of structural patterns.

In this blog, we saw the basics of design pattern and its types. In upcoming blogs we shall see about specific design pattern with real world examples, class diagrams and how to apply these concepts into software development.

Summary:
1. Design Patterns are solution to common and repeated problems
2. Design Patterns are not library, API or framework or source code
3. Design Patterns help developers to communicate fast and to the point.
4. Creational, Structural and Behavioral are three types of Design Patterns