Software is free but the service!

If you’re not embraced by cloud, soon you gonna be. There’s a huge shift from the conventional way of doing Internet and Software business. Few years ago, Internet was not really widespread in an countries in the world.

We heard of Browser war few years ago. Without any good reasons Google has started it’s Chrome browser development and the version number is changing like anything within the short period of time. Why they’re so serious about it? They’re building a platform which can acts as career to their service. Even they’ve introduced a computer which purely based on a browser and enable the users to browse Internet, Play Games (WebGL), Rich Internet content using CSS 3 and HTML5.

There are several early adopters which embraced the cloud like SalesForce, Amazon, Google, Microsoft etc. They’re the major players in this area. Amazon is basically a cloud infrastructure provider and they’re using their own technology to buildup their main business.

Few years ago the software business was really simple. Some companies will develop some Software either paid or free. They deploy it to the customer through CD/DVD and customer install and use it. The vendors provides support for a fixed period and they will introduce the next version of Software and sell it again. You’re blessed if they give some discounts on the new product.

Now the mobile devices are boomed like anything. Thanks to Apple for reinventing the Software and Hardware business. Each of the post PC devices which Apple has introduced were revolutionary. iPod changed the way people listen, organize and purchase music. Apple has reinvented the music business to a new extend. It was quite different from the previous way of selling albums and songs. User has got the freedom to buy music for cheap price and that was a good step against piracy.

iPhone has changed everything again. People have seen really smart touch devices ever since BackBerry. This is business was quite different from the way Nokia, Motorolla and other vendors did the business. Once a hardware is sold, the company has no big relation with customer other than in terms of customer. Nokia had several devices which far known for it’s spec including TV out, GPS, Maps etc. But this could not generate any money for the hardware vendor. Apple’s business model was simple straight forward and entirely new. The company has built up a world of digital content which is available for the devices they sold across the world. The app store was really good for the unknown developers and small companies to sell their product effectively. It reminds of old Dell’s strategy which allowed accessories vendors to sell their product through Dell website.

We’ve seen tablet computers in different form. Most of the time it was actually just a scaled version of a PC. None of the customizations are made for the tablets. The touch devices has changed everything and Apple made the better experience of iPhone in a better and bigger landscape. Nobody was really able to figure out what to do with the new device. But later they realized that whatever they’re doing in a PC can be done better and efficient in an iPad like social networks, photos, videos etc. Games and other apps are made use of the size available and people started making the content in the form of magazine for iPad.
A revolution has started there. The content publishers made their magazines specially for iPad. They could override the limitations in reaching the audience world wide as it’s delivered through Apple’s content distribution channel. The subscriptions were competitively priced and made available for the users.

The revolution is not really happening around tablet and mobile devices. Companies like DropBox (online File Storage), Evernote( note taking application), RememberTheMilk(task Organizer, Gmail, BaseCamp (37 signals’ project management software), Google Docs etc. are the some examples of cloud services at least for the general audience. The user computers are just acting as a view and it can be rendered across and hardware platform and form factor according to the user needs. For example, evernote has apps for iPad, iPhone, Android, PC, Mac etc. The service is synced across devices. The content is heavily depend on the server and has to make sure that device is connected online for proper synchronization.
Software and Storage as services helped the users to make their content available at server and make it available across device instead monotonously keeping in a single machine.

If you notice, the client software provided by all the services are free. No need to pay a penny but the features and services are paid. For e.g. RememberTheMilk has too many limitations for the free version. We’ve to subscribe for the pro service to get the best experience across the devices. This is a new way of doing business. Instead of getting users one time, they’re keeping them attached for long time to generate revenue. All the cloud services are heavily dependent on such business models.

But this has some disadvantages also. Companies putting high amount of subscription charges for the users. The companies like NYTimes.com are making the free content available in a PC as a premium content in Mobile and Chrome Web App. Also the services are not competitively priced. If you ask me, if I am ready to pay 100$ per for few subscription, I wont opt that because the value of money is different across countries and continents.

Your hardware gonna be light weight and heavily gonna depend on server. The other advantages of the cloud softwares are, they’re not really affected by piracy, deploying the new version of software is easy and less painful. But the cloud is the future go and embrace it.
iCloud is the going to be the next Google – (minus) Web. They’re really going to make a snapshot of digital content of this world except web. Waiting for iCloud!

Versioning Systems and 3 Way merge process

If you’re a developer you must know how important is a file comparison tool. Especially when working in a team with a source/versioning system. It’s quite often we compare several versions of source files. The usual comparison and merging with two different version of files are called 2-Way merge process.
To talk about the 3 way merging, first we must get a basic essence of versioning system and merge process. Because 3 way merge is part of it and became popular with it.
The conventional configuration management systems like Visual Source Safe provides the basic functionalities of configuration management. Things have changed much in these years. In the new age of software development, people rely on versioning system where individual developers can work independent with his own branch and merge the changes to main server, merge to other branches etc. The version of files controls everything. This helps us to work in collaborative work environment. If you know or not, even geographically distributed teams are working well with new age versioning systems.
Various versioning systems are available in the market today. Both free and commercial tools like IBM Rational Clearcase, CVS, Subversion, Git are the popular among the tools available.
Let’s see how versioning system works. When we check-in the files, obviously we’re creating a new version of the same file. In conventional source management systems, everyone works with the latest version of the files. We will be connecting to a the source management server and do the check-ins and checkouts but we’re getting limited with lot of other facts.

  • Other developers are unable to checkout the files and they keep waiting.
  • Everyone working in the latest version of the files available in the fileserver and making it’s hard to work with a different version of systems.
  • Increasing number of local copies and which is totally unsecure.
  • Less flexible to merge different versions of software.
  • Too much limitations of imposed by source controlling systems.

Ok Let’s think in a broader way. What if

  • We get a source control systems, where we can work independently on the replica of the latest software where every developer are independent and working in their own branch. Get the latest version of unmodified files easily?
  • Are you happy if you can work on a specific time based branch and work according to your convenience?
  • What if you many other developers modify the same file and easy way to merge everything back and forth with flexible tools?
  • What if you can easily get a tree representation of the versions of the files for flexible comparison and detailed information?
  • What if you’re free to work geographically distributed and work with same source and same team effectively?

If your answers are yes, the modern versioning systems are the answer for these queries. Versioning , branching and merging are the core features of a systems.
The following figure represents basic concept of a versioning system (Taken from Wikipedia.org)

image

In a versioning system, there will be a mainline/trunk which contains the latest version of the product. This will be maintained high in quality. One or more developers are working on the replica of mainline called branch during their development time. The modifications in the branch is independent and mainline in not affected. Once developer finish testing and merging, it’s the time to merge the code to mainline.

The red colored arrow to the trunk is called merging process which is explained below.

Trivial Merge

For each file in the branch, it’s checked out from specific version of the same file from parent branch (mainline). Once we checkout, other developers can also checkout the same file and merge to the mainline. But during this time, the file we checked out remains intact. If no other new versions of the same files are created in the mainline during the merge process, it’s called, trivial merge. This is something like a simple comparison. The different part of source code will be merged to the main.

Non Trivial Merge

There are different kind of situations for a trivial merge. Consider the following situations.

1. Developer working on a prior version of software and other developers updated the same files with a latest version in the mainline.

2. Get the modification of same files from another developer from his branch, which may created based on different base versions.

When you get two different versions of same file and ask to do the merge process, you’re just taking your comparison tools and make the best possible assumption to merge the files. This requires intensive human effort and also error prone. Some people do an alternative by asking to put tags while coding. Which is totally conventional.

Most of the versioning system provides a merge tool associated with it. This can smooth up the merge processes. Independent merge tools are also available in market, both free and commercial.

As I mentioned before, there will be a mainline/trunk where you can get the latest version of the product. Each files under the configuration management will have the version history of it’s own.Consider the following situation.

image

You can see Joe and Dave checkout same file, based on Version 1 in the mainline. Dave finished his work and checked in the file to mainline and version 2 created in mainline. During this time, Joe continue his development based on version 1. Finally before her merge back/during development time itself, he identifies there’s latest version of file is created. Now he required get the modifications of Dave to continue his development or merge back. If Joe blindly merge back, to mainline, Dave’s modification will be lost. Joe can make best assumptions on the conflicting points when he compare Dave’s modification and create the new version (2) which contains both his and latest modifications but this is error prone.

A three way merge can help us in this regard.

  • We’ve a base version Main(1)
  • We’ve a latest version Main(2)
  • Joe have his own modification Joe’s branch(1).

The merge tools can easily find the changed points based on the base version. It can easily create a modification with latest and latest local version without losing any modification. There would be some conflicting points where both developers merged same lines of source code. In this case, human interference is required. We’ve to choose the source code by seeing base, latest, latest local. User can easily identify which code he need to persist in new version (2).

The three way merge process is less error prone and requires only less human effort. The tools like KDiff3, Beyond Compare 3, Perforce provides merge tools for effectively do a three way merge process. All these tools can also attach to your existing source control system. However, most of the revision control software itself provides its own merge tool with their package.

 

An example merge process screenshot from KDiff3 is attached here(Click to Expand).

dirmergebig

Proudly powered by WordPress
Theme: Esquire by Matthew Buchanan.