Public Clouds, Private Clouds, Hybrid Clouds

Tuesday, September 29, 2009

A company may chose to use a service provider's cloud or build its own.

Public clouds are run by third parties, and jobs from many different customers may be mixed together on the servers, storage systems, and other infrastructure within the cloud. End users don't know who else's job may be running on the same server, network, or disk as their job runs.



Private clouds are built within an enterprise for their proprietary use. Private clouds are good for companies dealing with data protection and service level issues. Private clouds are on-demand infrastructure built and managed by single customer who controls which applications run, and where. They own the server, the network and disk and can decide which users are allowed to use the infrastructure.

Though initially enterprises start with their own private cloud by adding a layer of new technologies to their existing data-center systems and processes, in a long run they will likely want to run applications both in privately owned infrastructure and in the public cloud space as well. Thus we have the third model of clouds.

Hybrid clouds combine the public and private cloud models. Enterprises will own parts, and share other parts, though in a controlled way. Hybrid clouds offer the promise of on-demand, externally provisioned scale, but add the complexity of determining how to distribute applications across these different environments.

Money - Learn to save it

Friday, September 25, 2009

Money, the man made thing, I'd say, MONEY is the next big thing to GOD [OMG, Don't curse me now, if you're an atheist, call it as the next big thing to something you would fall back in case of a crisis].

Why MONEY is not 'the BIG' thing? Well, because of only one reason, Money is STILL not omnipotent. I can very well be a devil's advocate here, but the truth is, we, human beings still have a long way to go both scientifically and psychologically to make money omnipotent. In this 21st century, money has a very big say in everything. Money can easily solve majority of the problems of any common man anywhere in the world. You've got enough money, and still if you're not happy, I think, something somewhere went terribly wrong.

I need not emphasize the importance of money, it's one of the well understood concepts. We all know money is more important, and we are very privileged to live in the prime period of the information industry. Connectivity is never been like this before. The birth of the internet gave us a real virtual space to connect with everyone else in this world. And that, presents us with enormous opportunities and at the same time, we can easily get into a trap if we're not very careful.

There are ways to spend every single penny you earn, there are people out there to lure you to splurge. If you are not careful and educated enough [financial education], you'll have to dust up your resume when you're actually retired.

Don't be a miser, I'm telling you to be money conscious. Don't be an extravagant spendthrift [unless you are already a billionaire and you want to die as a common man], live frugally. Now-a-days, spending money on liabilities is a hundred and one times easier than earning that money.

Next time, think before you spend your hard-earned money on that extravagant watch, the nice leather hand bag you saw on a sitcom advertisement and more importantly, when you buy something in an offer. Everyone out there is waiting to become a billionaire on your expense. Be wise.

Evolution of the Cloud

Tuesday, September 22, 2009

Cloud computing is not made up of a single technology, it is the evolution of various different technologies in their best of forms. It takes the best of a number of related technologies to provide a new style of programming. The Cloud computing model we visualize today is the cognitive diffusion of many radical technologies we already use or we already know of. Some of them are:

1) Traditional grid computing
Job scheduling across many machines for computational applications.
2) Virtualization
Virtual machines decouple operating systems from hardware.
3) Hosting
Computational infrastructure available for rent.
4) Software-as-a-service
Application availability through the cloud.
5) Utility computing
Packaged computing, application and storage as a service.

All of these technologies try to achieve various unique aspects with a single common base connecting them, they all presume the service based model. But, these technologies have their inherent disadvantages or rather, I'd say, shortcomings. For instance, if you take the traditional way of grid computing, it is very difficult to administer; Also, it lacks agility and robustness.

Because, cloud computing is at the convergence of many independent computing trends, any attempt to define cloud computing is relatively based on these existing technologies. To better understand the cloud, its characteristics and the expected behaviors, it is helpful to examine these technologies. While these technologies have contributed to the development of the cloud, they also fall short of the ultimate promise of cloud computing because of their inherent shortcomings.

We will discuss about all of these related technologies in detail.

The Race

Monday, September 21, 2009

Run, run. Run my boy. Don't give it up on me now, you got to make it. I pushed myself as hard as I possibly could. I'm just a few yards away, two more minutes. Though, I could not see the finish line properly, I knew I'm gonna make it. Two more steps, I fell down flat, heaving and panting. I had a weird sensation, it was like a flashback or something. Train of thoughts. I was standing amongst a group of people, and I'm not aware whether all of them are gonna run with me in the race or even worst, I did not know if it's the beginning of a race. Because there were no formal lanes and some of the people were already worn out.

No clue of what's gonna happen next. Suddenly, there was an outburst, everybody started running, not necessarily in any order or following any rules. I felt like running in a race, only the race I'm in, was very uncivilized. No rules, every man is for himself, all you have to do is to out run someone else. I never thought I'd do something like that, true, I did not want to do it even now. Do I have any choice? I still remember running in that crowd like a mad man, not knowing where am going, not knowing whom I'm competing with, worst of all, not knowing whether I'm in a race actually.

I don't know how long I've been lying like that. When I opened my eyes, reality caught me. I saw that most of the people has started running already. I caught my breath, started running, shouting aloud, "Hell, I'm running in a never ending race". I woke up in my bed, sweating to the core in my real cold room and the darkness seems to eat me alive. I drank some water, tried to relax and I'm asleep even before I knew.

I woke up in the morning with a splitting head ache, mostly the adverse effect of a restless night. I wished I could go back to sleep in a blink of my eye, but I've a long day before me. I thought about the dream, only this time it doesn't feel like a dream. It is legible, and I could feel it like a memory. The crowd, the running, the effort, everything felt very real. I have no time to think about it dearly, has to get along with the routine. So, I followed my routine and got ready to go to the office. I thought about the dream on my way to office and I had to push it to the back burner once I reached the office.

I always have a bad day whenever I have scarce sleep and the day is no different. I felt really relieved when the clock struck six in the evening, I packed up everything and left the office. Strangely, I thought about the dream when I traveled back home, but this time I forced myself to look at it in the third person's view.

Suddenly, it dawned on me. Everything fell in place. The dream, of course, it is not a dream at all. It is the plight of my life's condition right now. The race I was in my dream, is actually my life, a haphazard race. Without even knowing, I've started running in a never ending race in my life. I'm running behind money, social status, good job, good life partner and what not. When did I become part of this race? Is it when I took up my first job? or when I completed my under graduation? or when I finished my higher secondary? I don't know. Hell, I really do not know.

All I know is one thing, I just cannot quit now and even trying to do that would cost me dearly. I've to keep running, but what for and to what extent? It seemed to be a larger than life question.

Now, I started to see everything in a new shower of light. Civilization, if not anything, has taught people to compete. Everyone out there, are competing with everyone else out there and at times, all of us trying to out run our own selves. In our quest to win the never ending race, we forget to take some time for ourselves and our dear ones.

We fill the jar initially with sand leaving no space for anything else. We should learn to prioritize and live. Anyway, we can never say, "I quit from the race". And it is a never ending race, the only advantage is even when you come back from a short break you will not be alone. You will still be in the race, but you might have to run with a different set of people. And if you have the enough courage, still you can make it to the league.

I was happy when I understood my dream, more than that I understood how my life works and what does it take to live my life. I just remembered the Red queen paradox, "It takes all the running you can do, to keep yourself in the same place".

I'm prepared for my next race, only this time I'm ready to take a break whenever I want. How about you?

Clean Identity

What am I really made of? This is one of the questions in my holster, I should say that this question is really peculiar and very intriguing. What am I really made up of? I believe, this question questions more of my basic belief system rather than the basic building blocks of my body. We human beings, according to me, are all same and incredulously different at the same time. If we consider the outward physical appearance, apart from the obvious difference, fundamentally all of us are made up of same building blocks. The main difference lies in our basic belief system and the virtues we hold. Yes, what we have isn't important, what do we manage to do with what we got is important.

Every individual in this earth is different, no one is like the other. Most of the times, the difference is very obvious and at times, very subtle. I'm cynical, and I believe that it takes time to spot those subtle differences. Our virtues and beliefs are not the product of a brainstorming session. It is the product of the collective experience we gain all throughout our life. Since I said it as a collective experience, the environment and people the play a vital role in the process of building our belief system. Sure, they play an important role but they are not the deciding factors. Every human being has his/her unique identity, most of the times their belief system is built on top of these identity with inputs from the environment and people.

Most of the time we develop our belief system without actually knowing it. There are three different perspectives available for every human being:
1) What do I think of myself?
2) What others think of myself?
3) What am I actually are?

The first two perspectives are merely based on the past experiences. The third perspective comes as a surprise package and most of the times, these ah-hah moments reflects our actual identity. Our actual identity helps us in solving every moral dilemma we face, every contradiction we chose over. Of course, our decision might be a little skewed towards one end if our belief systems directs us that way. Most of us, allow our belief system or our basic set of characteristics to guide us in making our decisions in our childhood. As we grow up, we tend to see the situations in a different light and then on, its a different ball game altogether. We start taking cues more from our environment, people and our past experiences rather than letting our belief system to guide us.

We become very vulnerable over time, we allow every Tom, Dick and Harry to influence our actions and reactions. We shouldn't allow our external environment to take a toll on our unique identity. Our identity lies in what we really are, our core beliefs and virtues. There will be mishaps every now and then. There will be burglary, murders, irresponsible people every where. There will be psychopaths, murderers, terrorists amongst our own neighbors. But, Keep it in your mind, you're what you chose to be. You're what your belief system is. You're made up of your virtues. Don't allow anybody else to decide what you do. Keep your belief system clean, have good virtues, don't destroy your identity. Your identity is not what you own, it is what you are made of.

Remember, do not lose your identity and keep it as clean as possible.

Cloud computing - Benefits & Barriers

Thursday, September 17, 2009

In today's article we will discuss about the benefits of adopting the cloud way and the transitional barriers we face.

Benefits:
1) Economy of Scale
With infrastructure and platform as services, enterprises need not worry about building their own infrastructure anymore. The cloud will be able to provide the necessary resources on need basis without any hassles and the whole process will be very seamless. Also, actual provisioning of resources will not be a time consuming activity.

2) Pay per use
Utility charging is another important advantage of using the cloud infrastructure. The enterprises need not provision for the peak usages, rather they can consume all the necessary resources on need basis, and more importantly, pay-only-per-use. This would result in enormous cost savings for huge enterprises.

3) Speed to market
As we discussed earlier, the rate of evolution of a system solely depends on the rate of evolution of its sub systems. Immediate access to enough and stable resources will reduce the development time.

4) Focus on core activity
This is another fringe benefit of going the cloud way. I guess, there is no need to reiterate the reasons behind this benefit.

5) Efficient supply/demand balance
By using the cloud infrastructure, the enterprises need not worry about the supply/demand cycle and the necessary resources. Because, the cloud is capable of providing you the necessary resources on need basis and this allows rapid expansion.

These benefits are very lucrative, and we already have many mainstream service providers. For example, Amazon provides infrastructure clouds, Google provides their application engine as a platform cloud, etc,. Still, I'd say that cloud computing is an emerging technology and it has its own inherent risks.

Risks:
The major risk in using the services offered by cloud providers is the amount of uncertainty it brings along. Cloud computing is a relatively new technology and there are no standard policies yet. You're bound to take up the service continuously once you start mainly because of the different standards followed by different vendors.

Another key aspect is the traditional way of product selection based on features is not relevant here. If the features of a particular service [at least the infrastructure and platform layers] is not standardized, the consumers are left with no other choice. They are bound to use the same service, and mainly they do not have any backup since they cannot switch over to another service so easily because of the different features.

Once when we have standardized features across services, the consumers will have more independence and certainty, and they can select the service purely based on price and quality of service. Basically, we should take the clouds in to operational competition rather than feature competition. With this said, the following are the inherent risks associated with clouds.

1) Management

2) Trust in vendors

3) Transparency
3.1. Multiple relationships
Cloud computing in action might involve multiple providers than one might actually know. This essentially develops a pyramid of suppliers and consumers built on top of each other. A top level consumer will know only about his provider, he will not have any idea about the other providers who provide services consumed by his direct provider. So, he may not exactly know the involved parties or cannot exhibit any sort of control over them. The problem with any provider in the pyramid will impact all others sitting on top of that provider and our top level consumer will have no idea about the actual problem.

4) Transition
4.1. Security of supply
If a provider leaves the business, then all of the consumers of that provider will also get affected. Transition between providers is not so easy because of the obvious reasons we discussed earlier.

5) General risks in outsourcing
On top of these risks, all the consumers face the generic risks we all face whenever we outsource a subsystem.
5.1. Suitability
5.2. Pricing
5.3. Backup / switching facility
5.4. Lock-in

All of these risks are transitional barriers in the cloud computing industry.

Cloud Computing - A paradigm shift

Wednesday, September 16, 2009

Every industry goes through the commoditization phase. Every new innovation resulting in any new product, finally ends up as a commodity. Main reason being, any successful innovation always gets copied by all the competitors or all the providers in the business. Lets say, if an innovation leads to a new product, within no time of releasing the product, all the other competitors will also have such a product in their product stack.

In the initial stages, features provided in the product plays an important role in product differentiation and even manufacturers mainly market their products on the basis of the provided features. But, in due course, when the product gets matured and if there is nothing more to add to the product, the product becomes a commodity. Once a product becomes a commodity, feature becomes irrelevant and customers chose the products purely based on price and quality of service. We can see this life cycle in almost every different manufacturing industry.

Now we are going through a commoditization phase in our IT industry. Of course, not all products of the IT industry are mature enough in-order to sell as a commodity, at the same time, we just cannot deny the fact that some of the IT activities have become more common. These IT activities are ready to be served as commodities or services rather than products. This is what exactly cloud computing is about.

Cloud computing is not a thing. As we discussed earlier, cloud computing is a paradigm, a paradigm shift of providing these IT activities as a service over internet. As of now, we have clouds providing following IT services:

1) Infrastructure as a service (IaaS)
2) Platform as a service (PaaS)
3) Application as a service (SaaS)

We just can't shun ourselves from this paradigm shift, we just can't continue with our traditional way of innovation and productization cycle when the whole industry is following a new approach. If we don't make ourselves ready for the change, we're clearly staying away from the competition.

Now we know what cloud computing means and where is it taking us to. So, it is time we think about the actual impact of this shift in the IT industry.

How does this impact IT?

1) Disruption
I strongly believe that cloud computing will be a hugely disruptive trend for the entire enterprise information technology market. With Infrastructure, platform and application as a service, the current trend of trade in information technology is surely going to get disrupted.

2) Accelerates development time
When any enterprise can readily get stable infrastructure, platform or any essential subsystem in a need basis, the development time of their product will drastically reduce. Enterprises no longer need to provision for peak times, rather they can consume all the services on pay-as-you-use basis. Hence, they get to scale their computing power up or down as needs dictate. More than that, all they need to worry about is their actual product. Because of this commoditization, they need not worry about the necessary infrastructure or the platform.

"The rate of evolution of a system solely depends on the rate of evolution of its subsystem".

3) Relationship between the business actors
The total business model gets impacted because of this paradigm shift. currently, enterprises have their own Infrastructure, platform and applications. Most of the time we outsource some part of the application subsystem to a third party and the communication required is very minimum. Whereas now, the enterprise can outsource the total infrastructure, along with the platform and the application subsystem to some one else . This approach takes the relationship between the vendors to a whole new platform. In SaaS world, an enterprise can outsource the application to the SaaS provider. Most probably, the SaaS provider would have outsourced their platform to a PaaS provider and in turn, the PaaS provider can outsource their infrastructure to an IaaS provider. This model introduces a whole lot of new dependencies and opaque relationships.

4) Choice
Actually no choice. Do we have any choice to not to get into this model? No. As I said earlier, we just have to make ourselves ready for the happening change in order to maintain our fitness relative to others in our information technology market.

Now, What is cloud computing?
With all these new light, I'd say that, "Cloud computing is not a thing... it is a term used to describe the disruptive shift from the product to commodity world... a move towards a service based IT economy..."

The benefits one can reap from cloud computing is really worth the change, but we'll have to consider the other side of the coin as well. We'll discuss about the benefits of cloud computing and the inherent risks, in my next article.

SOA Interoperobility

Tuesday, September 15, 2009

SOA Definition

A service-oriented architecture is essentially a collection of services. These services communicate with each other. The communication can involve either simple data passing or it could involve two or more services coordinating some activity. Some means of connecting services to each other is needed. Service oriented architectures define three important characteristics.

1) Loose coupling
2) Services
3) High interoperability

This article discusses about interoperability of distributed services over a service infrastructure.

Motivation for a service bus:

When we have more different actors or modules in a system at one point of time central management becomes near to impossible.That is where we need a service bus. Let all the individual actor connect to a common bus, thus providing central management.

Enterprise service bus (ESB)

ESB is the infrastructure that allows high interoperability in a distributed environment.

ESB Provides:
1) Connectivity
2) Data transformation
3) routing
4) Monitoring and logging
and optional value-added services.

ESB Approaches:
There are two main approaches followed in building a ESB infrastructure:
1) Providers and consumers take care for intelligence
2) The network or the bus has the intelligence

Normally the second approach is more viable and efficient. Also, it provides a very good amount of abstraction to the end user by acting as a black box between the consumers and service providers. Web services are the ideal candidate for developing individual services.

Web Services

W3C defines web service as "a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP-messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards.

Core:
WSDL - Web Services Description Language
Describes the interface of the service.

SOAP - Simple Object Access Protocol
Protocol via which we interact with the user.

Problems with web services:

1) Its a collection of multiple standards. So, the consumers came up with WS-I [web services interoperability standards] to standardize the standards to provide interoperability. Use profile - Basic Profile 1.1 standard if you want your web service to be interoperable.

2) Native WSDL
The WSDL description file can be divided into three parts and visualised like:
2.1. What - provides the technical interface for operations and the used data types.
2.2. How - Technical protocol used for communication.
2.3. Where - Hardware IP Address where the service is available.

Normally these data come from different teams.
1. Design team specifies the technical interface.
2. Infrastructure team specifies the protocol details.
3. Operation team specifies the location where the service has to deployed.

So, when you start with a WSDL file, you just don't fill in every details. You will work on a "abstract" WSDL file and during deployment we will fill in all the necessary details and make it a "concrete" WSDL file

Service contract is more or less a formal description of a service between a specific provider and a specific service consumer. A service contract includes the following:

1) the semantics
2) the interface
3) the quality

WSDL doesn't provide OOTB feature to include the semantic and service level agreement information in it. And WSDL is continuously changing. One thing to consider is provide a service repository which takes all these information and means to automatically generate the WSDL interface or any such interface files. Normally web service is end-to-end. The IP address that we provide in the WSDL file at the time of deployment ties the service with the actual service. Now, What about load balancing and fail-over recovery?

For this, we can use some thing called a load balancer and publish the load balancer's IP address as the service's IP address. The load balancer will take the incoming service requests and pass on to the appropriate services while balancing the load.

But, this doesn't provide much intelligence. The ESB doesn't have intelligence to monitor, log or control the traffic. What we need is more intelligence in the service bus. The black box [inherent intelligence in the ESB] should take care of routing, monitoring, security etc. The black box is a piece of software or hardware which provides you all these facilities. In one case, the black box can be an app-server and internally you can use any messaging technology like MQ, JMS etc, to interact with the other app-servers.

Putting it all together:

1) We still need to specify a protocol like SOAP
2) The consumer and provider has to register with the ESB.
3) A central registry has to be maintained with the deployment information of the actual services and the mapping provided to the consumer.

WSDL files should normally derived from the information stored in a central repository, rather than created. The central repository can also store the contracts, collect traffic information for analysis etc,.

If you want to include an external webservice in your internal ESB infrastructure, you need to import the external WSDL file in a way your internal consumers and infrastructure can understand. And provide another mechanism to map the internal WSDL to the actual external provider.

Do we need this kind of an intelligence in the very beginning? No. We can develop this kind of an infrastructure when we grow overtime.

Should we use Web Services at all?

1) As of now we do not have much other options.
2) May be go for a proprietary solution.

Web services are the best candidates when we want interoperability with other infrastructures. But, keep in mind the various standards and build your web service appropriately.

Design Patterns - Categories

Monday, September 14, 2009

The Gang of Four have documented very generic patterns that are applicable for Object-Oriented design. These patterns doesn't correspond to any domain in specific, they give you a design strategy most viable to solve a recurring problem. These patterns are basically grouped on their purpose. Patterns can have either creational, structural, or behavioral purpose.

1) Creational patterns concern the process of object creation.
2) Structural patterns deal with the composition of classes and objects.
3) Behavioral patterns characterize the way classes or objects interact and distribute responsibility.

Categorized pattern list:
Creational patterns:
1) Factory method
2) Abstract Factory
3) Builder
4) Prototype
5) Singleton

Structural patterns:
1) Adapter
2) Bridge
3) Composite
4) Decorator
5) Facade
6) Proxy

Behavioral patterns:
1) Interpreter
2) Template method
3) Chain of responsibility
4) Command
5) Iterator
6) Mediator
7) Memento
8) Flyweight
9) Observer
10) State
11) Strategy
12) Visitor

Creational patterns defer part of object creation to either sub-classes or some other objects. The Structural patterns use inheritance to compose classes and describes ways to assemble objects. The Behavioral patterns use inheritance to describe algorithms and flow of control, and can also describe how objects interact with each other to complete a task that no single object can carry on by itself.

Cloud Computing - What is it?

Cloud computing is the next big thing in the information industry. The term cloud computing has very quickly grown from a little known buzz word into one of the hottest topics of the information industry. In June 2009, a study conducted by VersionOne found that 41% senior IT professionals actually don't know what cloud computing means and two-thirds of senior financial professionals are confused by the very young technology, highlighting the nature of the technology.

I should say, I'm quite a bit attracted towards cloud computing. The concept of cloud computing is very promising and it really seems to be the next big thing. So, I've decided to dedicate a chunk of my blogging time to write articles on cloud computing. You will see more of cloud computing when compared to other streams.

Today lets talk about what cloud computing really is.

According to me, cloud computing as a jargon is very new to the information industry whereas the concept behind cloud computing is always present here. In its raw form cloud computing can be understood as a way of "Abstraction", abstraction of resources, infrastructure, platform.

This perception of abstraction isn't new to us, we've abstraction through out the network via the TCP/IP concept. We never cared about where or how the data flow via the internet, the TCP/IP abstraction took care of that. So, I would say that TCP/IP abstraction is the first kind of cloud we've around networking. Second, the WWW [World Wide Web] provides a clean and clear abstraction over documents. Now, we're ready to take the abstraction to the next level thus connecting billions of people and their resources together via clouds.

What does the emerging clouds primarily abstract?

The emerging clouds abstracts infrastructure complexities of servers, applications, data and heterogeneous platforms.

What is cloud computing anyway?

Cloud computing is a computing paradigm based on the use of shared IT resources, dynamically allocated to specific users and tasks and accessed as a service via an application programming interface (API). Cloud computing enables convenient, on-demand network access to a shared pool of configurable computing resources [the resource may be networks, servers, storage, applications, and services], along with rapid provisioning capability. The resources can also be released with minimal management effort or service provider interaction.

Cloud computing, works on the internet platform and uses central remote servers to maintain data and host applications. Cloud computing allows consumers and businesses to use applications without installation on their physical machines. Users deploy applications to the cloud, which acts like a virtual data center. The physical cloud resources may reside in a number of locations, the details of which are not typically known to the service's users. Cloud resources are provided on an as-needed basis, and delivered by IP-based connectivity.

This is just an overview of what cloud computing means. We've lots of ground to cover. Let's dig more about cloud computing in my forth coming articles.

Design Patterns - Introduction.

Sunday, September 13, 2009

Computer Science is relatively a very new stream when compared to Civil Engineering or Mechanical Engineering etc,. Moreover, Computer Science is very difficult to quantify. How do you quantify a Software program? On what basis would you say that a software is successful or failure?

In other matured branches, people have tried many different things, documented their failures, done root cause analysis and documented their results as well. But, Computer Science being a very new stream, people have the liberty to use it in different ways on their own. On top of everything, the products of Computer Science are very difficult to quantify and thus making it very difficult for people to communicate as well as document anything. I've read an article about the success rate of software written till date and it says, the success rate of software engineering is only 11% based on their computation criteria. Their criteria is a very long list including the re-usability of the software components, proper abstraction, enough room for future changes, extensibility, scalability, etc,.

So, as we see, Software Engineering or Computer Science as such has got only a 11% success rate. Now, we have the big question before us. Why is it so? We can list out so many reasons. But, one reason that stands out tall is this - Computer Science was never considered as engineering and we never tried to quantify the work as in other engineering streams.

People, all over the world, work in software designing and do solve problems on daily basis but the wisdom never got spread across. Every one of them thought they are the only people who face those problems. They never thought that there might be some one in the other part of the globe trying to solve the very problem they are facing now, because people never thought that building software applications are exactly similar to building dams or constructing sky scrapers or designing complex circuitry.

It never occurred to them that they might be trying to find a solution for a pattern, a problem that surfaced again and again. People, designing software, spent precious time in rediscovering the solution for a pattern again and again.

Christopher Alexander says, "Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution, in such a way that you can use this solution a million times over, without ever doing it the same way twice".

Even though Alexander was talking about patterns in buildings and towns, what he says is true about object-oriented design patterns. Our solutions are expressed in terms of objects and interfaces instead of walls and doors, but at the core of both kinds of patterns is a solution to a problem in a context.

Four people, who are called as The Gang of Four, Erich, Richard, Ralph, and John present a compelling case for the importance of patterns in crafting computing systems. They recorded the experience in designing object-oriented software as design patterns. Each design pattern systematically names, explains and evaluates an important and recurring design in object-oriented systems. Design patterns make it easier to reuse successful designs and architectures.

With their book the Gang of Four have made a valuable contribution to software engineering. We've got a lot to learn from them and apply them in all our work in-order develop a really good software.

Design Patterns

Hello friends, Next, I'm planning to write a series of posts on Software Engineering Design Patterns. I'll try to keep them as simple as possible with more real world examples. Checkout this space for Software Engineering Design Patterns.

Taegukgi - The Brotherhood of war

Movie: Taegukgi - The Brotherhood of war
Year: 2004
Director: Je-Kyu Kong
Cast: Dong-Kun Gang, Bin Won, Eun-Ju Lee
IMDB rating: 8.1/10.0

Plot:

"You know that I want both of us to go home alive at the end of the war. But if it is going to be only one of us, I want it to be you."

This dialogue from the movie explains the plot very well than I can do in any way. Taegukgi - The Brotherhood of war, is yet another visualization of the war between the South and North Korea, but this time Je-Kyu Kong manages to paint an extravagant emotional drama of two brothers drafted into the war.

Story:
We see many Korean movies still focus on the Korean war because there was never adequate time for the people to process what transpired. A war, in every sense is deadly and Taegukgi, makes this point very well established with its viewers. A strong well knitted story line, sound technicalities, near to perfect portrayal of characters, most of all, the cast and crew who brought out the story alive before our eyes makes this movie a must watch.

Well, Taegukgi is the story of two brothers - an aspiring shoemaker[Jin-Tae] and his younger brother[Jin-Seok], a studios intellectual youth, etched on the backdrop of the deadly war fought by South and North Korea. Jin-Tae lives with his mother, younger brother and his fiance [Young-Shin]. Jin-Tae works hard in a shoe shine stand to help his younger brother with his studies and both of them were aspiring for a good future. They have a struggling life, yet they were a strong happy family. The first few scenes of the movie well establishes the kind of love that's flowing through the family, especially the strong bond between the brothers.

As you would expect, all hell broke loose in the name of the war between South and North Korea making the life of the common people endangered. Everybody flees to the refugee camps in the dreams of safety, whereas the government had other plans for young men. All the young men where drafted into the war, so as Jin-Tae and Jin-Seok.

The war is brutal, Jin-Seok escapes a near to death heart attack after seeing the brutality of the war. Jin-Tae makes it a point to protect his brother and send him back home even if it costs his own life. The army officer of the battalion assures to release Jin-Seok if Jin-Tae gets the medal of honor for his services in the battle field and this sets off the fire in Jin-Tae.

Jin-Tae volunteers himself for every risky mission and manages to pull them off efficiently. I think, on the course of the war he really gets fully involved and likes everything he does. But, still his motive was clear, he has to get the medal of honor and send his younger brother to home. The brutality of Jin-Tae was very new for Jin-Seok and he could not digest it even though deep down he realizes that his elder brother does all these things for him. He can't accept Jin-Tae risking his life for him, and moreover he is very much afraid of totally losing the innocent, lovable Jin-Tae he had known all these years. The brutality of the war takes its toll on Jin-Seok and his relationship with his brother was estranged.

Jin-Tae, finally manages to get the coveted medal of honor and along with that, Jin-Seok's release. But, all in vain. Their battalion reaches the bothers home town, Jin-Seok visits his family and the unexpected slew of events makes you realize that our life is a very thin thread which is very easy to cut off. Jin-Tae and Jin-Seok couldn't save the life of Young-Shin, she gets killed by her own people. Jin-Seok was arrested and sent for interrogation. Jin-Tae was taken to the new battalion officer in-charge. Chinese forces attack the city massively, and the officer orders the soldiers to set fire to the prison. Jin-Tae tries his best to save his brother, but he couldn't and later finds the reminds of his brother's stuffs in the prison. He believes that his brother was dead and kills the battalion officer with a stone. Brutal.

The next scene opens up with Jin-Seok in a medical rehabilitation center, ready to go home in a week. Mean while, the death of Young-Shin and the believed death of Jin-Seok had triggered Jin-Tae against his own nationals and he joins the North Korean army. Jin-Seok gets a letter written by his brother to his mother, he realizes how much his brother meant to him and his family. The next day he was given the news of his brother taking sides with the opposites and at that moment Jin-Seok realizes that Jin-Tae did that thinking his younger brother was dead. Jin-Seok goes back to the battle field to find out his brother and get him back.

After a lot of struggle he manages to see Jin-Tae only to see him totally out of his mind. Jin-Tae couldn't realize Jin-Seok, he fights him off thinking he's a south Korean and when he realizes Jin-Seok, he was already stabbed. He convinces his younger brother to leave him, promises him that he will be back and covers his back when Jin-Seok runs for his life and finally, Jin-Tae was thrown off into pieces by the staggering bullets of the Chinese army.

Jin-Tae: "You know that I want both of us to go home alive at the end of the war. But if it is going to be only one of us, I want it to be you."

Review:
The movie is technically really sound. The director has pulled off the war scenes very well, a near to perfect reality. The blood, bullets, bombs, dead bodies, mutated limbs, heads and what not. He has covered the brutality of both the South and North Koreans, the blood thirsty people and the plight of the commons. Easily one of the best war and combat films I've seen all these while.

Next best thing is the story and the screen play. You start with the movie as a spectator and you never know when you became a part of the story. There are several heart-aching, furious, agitated moments which you really feel inside you on the course of the movie.

Best part is the climax, though, right from the beginning you know that Jin-Tae is going to die, you just wish that he would walk out alive, the victory of the character.

The only nagging thing is the cinematography, the camera is all shaky. May be that's for the best, you don't get to see those gory scenes very clearly.

Verdict:
A must watch, but seriously not for the human beings with a week heart [you might weep during and after the movie].

Being innovative, the secrets.... Continued...

Saturday, September 12, 2009

Rule # 7
Be a doer, not only a thinker.

The last and the best rule. I'll tell you something, just sit back, relax and go down your memory lane for a couple of minutes to see the path you've crossed. Think about everything you wanted to do, and see what you've done actually. We all want to do many a things in our life, but we end up not doing most of them due to various valid unavoidable reasons and there is also a fair share of our own disabilities too. As we move on, we change our priorities, our interests gets changed and we always drift a lot on our way. And that's the beauty of our life, we think as far as we could in the future before making every important decision but still, there's a pinch of uncertainty in all our decisions and it might turn the tables in the real future.

If you want to be successful, you should start doing whatever you want to do rather than just thinking it virtually. There might be a lot many reasons why you can't do something, you might be overloaded in your work, have lot of personal issues to sort out, list will go on and on. I'm telling you, just thinking about something in your imagination will not be useful for yourself or any other for that sake. If you think you have an wonderful idea and you don't spend enough time on realizing it, then your idea will always be an idea. And sooner or later someone else with a better will power from some other part of the earth would realize the same idea, whereas you would be whining about it. Don't let yourself to be a victim.

It all boils down to only one thing, time management and personal discipline to adhere to whatever you plan. Where there is a will, there is a way. If you really wish, you can easily do all the stuffs you want to do and still find a lot of time for your family and friends. Improve your concentration, try to compartmentalize your thoughts, do one thing at a time and do it perfectly. Collect proper information, spend time to analyze and plan correctly, because you can't afford to go wrong. You've got to do it and do it right the first time.

At times it may happen that you might face a wall in your journey, try to break the wall but if you know that you can't break it, don't hesitate to retreat to take some other route altogether. And never be afraid of failure. Even if you fail, try to embrace it with a satisfaction and keep your head high. If somebody tells me that they never failed, I would pity them because they have never tried anything in their life. Success and failure are the end results of the journey. They doesn't matter much, what real ly matters is the journey itself, the experience is worth millions.

Motivate yourself; learn to forgive, not only others; at times, yourself too. Yes, you've to learn to forgive yourself and give credit for what you've done. No body makes miracles. All one can do is to give their best shot at everything they do. Most of the time, hard work really yields its result in one or the other way. Every time you try something, you a feather to your crown which actually you cannot see but the rest of the world can.

I really love Leonardo-da-vinci a lot, the greatest and most efficient brain of the era. But, I respect Michelangelo a lot for the same reason we're discussing now. Leonardo-da-vinci had an excellent brain and he indeed has a whole lot of "I did it first" stuffs in his portfolio now, nearly four centuries later. What's the use? Whereas Michelangelo did manage to do things in his lifetime, rather than just playing them around in his imagination.

So, ladies and gentlemen, take inspiration from Michelangelo but think like Leonardo.

I'm done guys. Hope this will help somebody and please, pass on your comments.

Being innovative, the secrets.... Continued...

Friday, September 11, 2009

Rule # 4
Be imaginative.

The toughest part, being imaginative. I've got a small kids play area in our apartment complex. It is the best place to just sit and watch the forth coming generation of our country. I love kids. Of course, who isn't? I love them like I love a meticulously made tattoo in some one's hand. Both look good as long as they are in others hand. If you happen to be a parent for three kids, no offense mate. Believe me.

Jokes apart. There is this interesting thing about kids. A three years old will be 100 times more imaginative than you at any given time [I'm assuming that three year kids doesn't read a blog]. I can bet you my entire life's earning on that. Just give them a car and a super man toy, in no time they will show you a full length feature film. Oh boy, they are really imaginative. The kind of questions they ask, the stories they tell, excellent.

Oh, I remember, I were a kid once upon a time and I'm no more a kid. Not only that, I'm no more imaginative. Hmmm, well, now-a-days I do imagine, but most of the times its about my girl and a luxurious life. If you're not like me, then this is not for you. Skip this and jump to the next rule.

If you're reading this, I really understand the emotional turmoil you're going through now. Yes, we all were a kid, once upon time. But, we lost our purity and innocence during our journey to become a man or woman.We understand the limitations very well now, we're clear about the boundaries, we think that we know what we can do, and we're all well accustomed to the phrase - "that's not my cup of coffee, dear". OMG, give it a break. Don't curb your imagination straight away by analyzing the feasibility or its application.

If its not feasible to achieve your ideas today, there might be a new way tomorrow. If you cannot apply your idea in any of the known streams today, there is a possibility that you might create a new stream. Be passionate and do not let the child inside to face a slow, painful death.

Rule # 5
Ready to face criticism.

Critics are as important as innovators and criticism is as important as idea generation. Without these critics, it will be really difficult to find the limitations and disadvantages of our own idea. I'm telling you, world needs them, a lot of them. But, only those who do constructive criticism. Constructive criticism will help someone to fine tune his idea and criticism, just for the sake of it is a venom. The world is full of people who think themselves as the savior of the world and will try their best to devastate you by their questions. Be informed and ready to tackle them. Never allow these rodents to destroy your brain child. After all, they try to protect themselves by destroying you.

Don't let them get you, at the same time be open minded to accept constructive criticism and improve your idea.

Rule # 6
Open up yourself for suggestions.

Don't let your knowledge to shut down your access doors with the outside world. Your link with others is a very thin thread and it is very easy to break it. The worst part is, it happens without your knowledge. If somebody gives you some information, analyze it, take the essence of it. Be polite and helpful to the needy. Always try to be accessible for others. Spend time with people, socialize, make friends and get a life for yourself. After all, we get to live only once.

There is only one more rule left and we're gonna see that tomorrow. Thanks.

What should I do to be more Innovative?

Thursday, September 10, 2009

aah... Here we go! Is it so easy to innovate? What if I say, hmmm, well, YES!!! I can hear you say, "I'm gonna kick your a**". Patience buddy, we can talk it out. Let me tell you a secret to be innovative, only those who look for it, shall find it.

As I said in my last post, Innovation needs a mind set - a disciplined and yet chaotic mind. Confused, don't worry. You can be really happy about being confused, because you are at least thinking about something. Thinking gives you your own identity and it helps to improve your personality as a whole.

I think am going off my tangent, let us get back to today's question. What it takes to be innovative? Innovation, as any other brain child doesn't happen overnight. You just cannot force your mind to innovate. All you can do is help your brain by providing more space for it to work and more information.

Did I say information? Better be it. Yes, Information - the first and foremost ingredient to be innovative. Be informed about what's going on around you in your workplace, latest buzz in your work domain, and more than anything, read a lot about technology.

Rule # 1
Feed your brain with lot of good information [good amount of carbohydrates, protein, fiber and low fat]

Read, try to read a lot. Be aggressive in getting information. Because, once when you start feeding your brain with lot of valuable information it has lot more challenging work to do. Think about the fastest of the fastest super computer in the world, multifold its performance by a very high number and now enough of gaping, the performance you imagined is the performance of our brain. Human brain is the fastest in logical thinking, deductions and learning. Your brain will do magic if it has the information when you least expect it.

Rule # 2
Be a smart worker and think about the different means to achieve the result.

As I said earlier, only those who look for it, actually see it. To be innovative, you should develop an eye of an eagle for specifics. Be rigorous in analysis and asking questions. Don't be a labor, be a smart worker. Okay, I hear that too. What's the difference? Occording to me, a labor is someone who works more physically and less mentally. The kind of work doesn't demand more thinking and analysis. If you just work like a labor in an information industry, there are high chances for you getting chucked out. So, buddy start moving around in the given space for you. And especially learn to ask this question, "Why not?".

Rule # 3
Be happy, always.

Be happy about what you do. Happy soul is the haven for a healthy mind. If you are not happy about your work, baby, its time you land somewhere else. Try to develop an identity for yourself, and more than that fight hard to protect it.

It doesn't end here. Let's continue this topic tomorrow as well.

Innovation - How important is it?

Wednesday, September 9, 2009

Innovation, let us first see what my Word Web has to say about this word:

1. A creation (a new device or process) resulting from study and experimentation
2. The creation of something in the mind
3. The act of starting something for the first time; introducing something new

isn't it very straight forward? Innovation literally means creating something new , but beware ladies and gentlemen, it does not stop with an idea in practice.

According to me innovation is more than what it literally means. Innovation is having "a mind set or state of the mind, where we really look out for a positive change, try to look at the problem in a whole new light and conceptualize our imagination to take it to the next level".

The importance of innovation was never appreciated like this before. In this information era, with a global market to capture and slew of competitors to tackle, all the companies understand the importance to innovate to be the market leader. At any point of time, only innovative people succeed in a competitive market by gaining an edge over others. This was like never before, before the invention of World Wide Web, it wasn't easy for companies to get a market share of their own in a foreign place. It was mainly because of the lack of a medium to get access to customers globally and market their products. With World Wide Web, there came a new facet to every business and every business now compete for their market share in the virtual space provided by the World Wide Web.

You need not worry about innovation if you do not care about your market share or your competitors or if you're doing business for charity [You need not innovate, if you think you are a monopoly in your business which I suppose is very rare now-a-days]. If you want to be successful in your business [whatever it may be], gain the market edge over your competitors and gain satisfied customer, you have to understand the importance of innovation and should do your best to get the message clear to all levels of employees in your organization.

Innovation was always considered as a separate stream of work altogether and companies had separate group of people who were designated to innovate. Research and development wing of the companies acted as though they own the copy right for the word innovation. Employees were expected to do their work, importantly, do it as they were taught to do it. Majority of the companies considered most of their employees as labors and they never utilized their employees potential fully.

The information era has bought a lot many transformation across various industries. It has introduced a whole lot of new ways to do things and provided a powerful medium to reach majority of the world population to market their products. Also, it has taken the competition in every sector to a new level and customers are valued the most now than ever. With increased competition and with variety of customers from different geographical locations to satisfy, every global and local company is trying its best to keep its market edge.

Now, the management has realized that good idea can come from any walk of the life. They understand the importance of involving their employees more closely in the growth of the company by giving them more space, freedom of speech, more importantly they are allowed to use their brain whereas the middle management and upper management are trained to take valuable opinions from anyone.

What it means? Those who were considered as labors are now given more responsibility by giving more freedom and ownership. This obviously helps the company to create a all new kind of bond with their employees - the employees feel they belong to the organization rather than just being an employee, or to be more rude, a labor.

The climate of innovation creates a healthy competition among the employees and it actually challenges them in every way. But innovation is like a religion, anybody can speak about it but it takes a lot to follow it and execute it properly.

In my next post we'll talk about what does innovation mean for an individual.

STL - What is an istream_iterator?

Tuesday, September 1, 2009

Class: istream_iterator

Iterators constructed by istream_iterator are input iterators, but they are not output iterators. Means that istream_iterator objects can read data only in a single direction, and data cannot be written through an istream iterator object.

Constructors:
The class istream_iterator provides two public constructors.

1) istream_iterator(istream &) This constructor provided by the istream_iterator type produces an input iterator for values of type T from a given input stream.

2) istream_iterator() This constructor provided by the istream_iterator produces an input iterator that works as an end marker for istream iterators. This is simply a value to which istream iterators become equal when the istream they are scanning reports an end of stream condition.

Lets see an example where we use the istream_iterator to read strings from an input file and load the strings in a vector.

Note: The following code is just a code snippet, not the full program.

...
cout << "Enter the dictionary file name:";
string dictionaryName;
cin >> dictionaryName;

ifstream dfs(dictionaryName.c_str());
if(!dfs.is_open())
{
cout << "Unable to open the given dictionary file name.";
return 1;
}
cout << "Reading the dictionary file...\n";
typedef istream_iterator<string> string_stream;

vector<string> words;

copy(string_stream(dfs),string_stream(), back_inserter(words));
...

The above program takes the name of an input file which contains list of words. If the file is available and opens properly, it reads the words from the input file and creates a vector of strings.

We create an istream iterator for type string and then create an instance of the istream iterator to read the data from the input file stream.

Please try this out. Of course, we have not explained about the copy(...) STL function available in the header file algorithm and also the back_inserter(...). We'll see about them in tomorrow's post.