Where is Google going?

Google started off as a search engine as everyone knows. Over the years, it has branched out into many different avenues including cell phones, advertising, hosting, email etc. If I think of the information that Google has of me... My name, surname, address, telephone number, all my emails, my source code etc, they have a lot of power. Why provide services and products like App Engine, Gmail, Voice, Android, Chrome, Health, Finance etc for free?

Information is power. Looking at Chrome browser, Android OS, Gmail, these are a really powerful combination... Not only for the end user, but for Google in terms of information they have of you! There seems to be two sides to Google - One side which is aimed at the home user and the other at businesses. There is no doubt that Google has many offerings aimed at businesses which are easily understandable. There is the free Google App Engine service for the home user or small company, but a paid for service for larger corporations (Or businesses that expand into those requirements). And then there are the multitudes of applications that are aimed mainly at the home user such as calendar, Finance etc. These on the surface make less sense from a profit point of view - Where are they going to make their money from? This really has been a question of Google’s business model since the earliest days.

One of the richest men in the UK is Bernie Ecclestone, who made his fortunes by owning exclusive rights to advertising in Formula 1 racing. And in the same way, I believe that Google is positioning themselves in becoming the number one choice of direct marketing information. In the F1 case, no one has a choice, but if Google has the most reliable data regarding individuals needs and interests, then why would advertisers go anywhere else? As I’ve mentioned before, online advertising has already surpassed that of television in the U.K.

Lets look at a potential case assuming the use of the following tools by an individual:

Google voice,
Google Talk,
Google Appengine for hosting a business application,
Google Health,
Google Finance,
Google Adsense,
Google Android

Together, these products and services can offer a massive amount of information - from physical location, personal preferences in purchasing, contacts/ friends, interests based on search criteria, "owning" your business(in that it "controls" source code), knowing the details of your financial portfolio, health information and your day to day schedules. This is a lot of trust and a lot of power!

Google is becoming part of the fabric of modern society - in our personal and business space. Even though I “trust” Google with my personal information, I think that they should be carefully watched. Imagine the possibilities of data mining across all the data they have.

I discovered last year sometime that Google started support of Java on Google App Engine (GAE). Very excited about this news, I immediately signed up, downloaded the plug-in for Eclipse and started porting my web application that I was busy with to the GAE platform. I had previously started building a web application for a group I run which I was going to be hosted at home. The application was written based on JSP's, servlets and a MySQL back end hosted on Apache and Linux. This was all good, except I was paying for the bandwidth, electricity and was obviously responsible for maintaining the server. Not having a UPS, I sometimes ran into problems where the server would go down, and wasn't able to restart by itself - not an ideal situation.

This is where GAE, comes in... It's a free service, has a large amount of bandwidth /CPU time available and can scale almost infinitely. For a small/medium website, the free service will suit perfectly and if the free limits are exceeded, there is a paid for option as well. To give an idea of the free quotas, it's kinda like Gmail - You can buy more space if needed, but who really needs more than 7 Gigs?

There are a few restrictions due to the nature of distributed servers which makes up the cloud service. One of the most important is that GAE doesn't use a traditional relational database. They use what is called "Big Table", which for the most part, works fine except that JOINS and SELECT statements aren't supported in the same way as other RDBMS's. Another significant restriction is that there is no write access to the file system.

The significance of this is that all dynamically uploaded content, has to be stored in the "database". Fortunately, Big Table allows storing of a Blob, which is an infinite byte stream. A further problem that is caused by some of the restrictions, is that there are only a few frameworks that can be used. I think that the struts framework is partially supported, but probably needs a bit of modification.

I also did a search for Java based content management systems that can be used on GAE - Found... 0. Hmmm... Seems like an opportunity to me. Having built an application on the framework should give me a bit of a head start in developing a Java CMS for GAE. I'm currently working on Microsoft SharePoint development and think that some of the ideas could be built into the CMS. (Ok, I know that SharePoint is a lot more than just a CMS but there are a few similar functions.) Some of the features that I'd propose are:

•    Dynamically built menu structures
•    Security management (I.e. permissions for pages/ content/ lists/ data etc.)
•    User and role management
•    Master pages for styling and layout.
•    Dynamically added pages
•    Email from website to registered users re updated news and postings.
•    Email to website, to update news.
•    "Web parts/ widgets" for extended functionality. I don’t think that it would be possible to upload these dynamically as you wouldn’t be able to upload compiled code and write it to the file system.
•    Generic libraries to store content. These libraries will be able to store any content types.
  • Documents
  • Images/ photos
  • Style sheets, js files etc.
By allowing uploading of any content types to be stored in virtual folders, this will allow dynamically styling of the site without redeployment by simply, removing a style sheet and applying a new one. However, due to JSP's being compiled, it may not be possible upload a new master page from the web interface.

When building my web application, it was like taking a step back a couple of years in that I had to start coding at a pretty “low level”. I think that an open source framework will definitely make Java development on GAE much easier than it currently is.

Microsoft Dynamics CRM is a great platform which has numerous powerful features, but there seem to be a few shortcomings as well. At first glance it looks very much like a relational database with a powerful form engine. With this in mind, it is often used as a data store in the same way as a relational database would be. One limitation is that transactions are not supported within CRM 4.0 through the Web Service.

This has serious implications when building interfacing systems with forms which effect multiple CRM entities. In my opinion there seem to be a few strategies in dealing with this:

1) Logging the exception - Well, this should be done in any case but in effect nothing is done to avoid inconsistent transactions. This is the simplest strategy, but could have some very serious associated risks.

2) Designing forms which avoid updating multiple entities at once and thereby avoiding the need for transactions. Eg. If a form which was intended to update a contact entity and a related address entity, 2 separate forms with “save” buttons on each page would enable updating each entity separately. From a usability perspective it would be understood that the two actions are separate. This is not always possible, and could make for a more cumbersome interface though. Eg. In a Parent-child relationship, the parent record, and by implication, the GUID, may not be available when wanting to insert a related entity.

3) Develop custom code to manage the transaction state. This is far from simple though. Code would have to ensure the ACID properties - Atomicity, Consistency, Isolation and Durability.

Each operation in the transaction would have to be firstly stored in a list. Therefore, if an insert operation succeeds with a subsequent operation failing, the record can be deleted. Once an insert is successfully achieved, the GUID would be stored with the record in the list.

There are some serious failings with this approach though. Firstly, there are often CRM workflows associated with insert/update operations. If a workflow is started upon creation and then the record is deleted, problems may occur with the delete. Records of partially complete transactions may still be modified or read by other processes before completion of the transaction. This could be partially rectified by means of using a singleton class which provides lock mechanism on a record. But this can only be from the perspective of interfacing systems. Nothing would prevent a CRM user from reading dirty data. If an delete operation has to be rolled back, an insert would be performed with the original data - The record would get a different GUID, which could have other implications. These scenarios are fairly simple though - It gets much more complex when trying to restore the state of entities with multiple relationships, as changes would have to cascade.

As can be seen, there doesn't seem to be a simple solution to the transaction problem, and it should be carefully considered before using CRM as data store for interfacing systems, assuming that just because it uses SQL server as an underlying database, it supports all database like functions.

I've realised over the past while that while "freedom" is Linux's biggest advantage, yet it's also it's biggest downside. Everybody hit's an issue at some point (regardless of OS) where we have to turn to the Oracle that is Google to solve. And this is where standardisation comes in very handy. At least when you're running Windows or Mac, there are a few million people out there with pretty much the same hardware/software as you who may have experienced the same problem. This alone increases the chances of finding a solution on blogs forums etc. that suits you.

As I said with Linux, firstly you've got largly 3 different interface's - Gnome, KDE and Xfce. Then you've got the different package managers - APT,
YUM etc. And that aside, there are literally hundreds of different flavors of Linux. So, the permutations are endless. And with Linux making up approximately 1% of the total market share, it means that sometimes there aren't thousands of people who've got the exact same issue that you do.

Sure, people will argue that "Linux is Linux" regardless of distribution, but it does mean that there are sometimes subtle differences that to a new user, some advice on a Mandriva forum will not necessarily work on OpenSuse machine. To a new user, Terminal sessions are probably totally foreign and they simply copy and paste commands from forums and see what happens - sometimes with "disastrous effects". I know... I've been there. Today I managed to mess up my OpenOffice while trying to force it to use a theme different from the rest of the Gnome interface. It took quite a while to fix the issue finally and get it to work as it should.

And there is the advantage as well... You can do those sorts of things in Linux - You can make it jump through hoops if you wanted. For the most part it's an obidiant dog that you can train to do anything you want to, but once in a while when trying to get it to jump through a flaming hoop - it's turns around and bites you in the ass. But then again, what would you expect?

So, I'm totally for Ubuntu who've standardised things a bit. It makes it so much easier looking for a solution - at least in the Linux world you're not totally alone.

When I logged into Gmail today, I was greeted by some weird "Welcome to Buzz" screen. Having no clue what it was (and it coming from Google, who's stuff I generally like), I was a little intrigued. Once clicking through the "I agree" nonsense, trying to get to see what it was about, my usual Gmail screen finally loaded. This time, just below my inbox was a link to "Buzz".

So, what is it all about? well, basically, it integrates some of Google's Social networking tools into one place, ie. Gmail. Currently it integrates Picasa, Flickr, Google Reader, Twitter, Blogger, YouTube and all the Google chat statuses. so, basically everything you post in these places, will appear to your followers. Hmmm... Intersting. It's obviously an attempt to take on Facebook on the social networking side. Apparently Facebook has about 400 million users whereas Gmail has about 170 million if stats are to believed. But, I guess given a few months, this will all change again. The problem is that with networks, value is proportional to the number of members. This is sort of a reverse supply and demand rule. Usually, the more people that have an item, the lower the value of the item, whereas there isn't much point to a network if you're the only one on it. So... Google has quite a bit of catching up, but it may just do it... As it's got a great base to start with.

It is quite scary though how Google is holding all the chips in the IT world - Data in this case and is in the process of consolidating and adding to it - they're no longer just in the search business. They haven't been for a long time... 

Google Buzz

Wow, only one about percent! That's the total linux market share according to browser stats. It all depends on which stats you refer to, but I'm not going to argue about a fraction of a percent. I've totally moved over to Linux on all my machines - both my laptops and my desktops are running some version of Ubuntu.

What really astounds me is that Linux, but more specifically Ubuntu, doesn't have a larger market share. It's free and except for time, costs nothing to install. However, Microsoft would argue that the cost incurred in terms of time and support outweighs the initial purchase, but for a home user - I doubt it. I reformatted my laptop with the latest Ubuntu 9.10 a few days ago, and the most time consuming activity by far was the copying of data to another location. Once I was set up to go and had my USB startup disk plugged in, it took a timed 10 minutes to install and working with everything. Even my Windows colleagues were impressed. After the installing Ubuntu 9.10 on my Dell Latitude E6500, there was nothing extra to do. Everything worked - Sound, Video, Wireless, 3G mobile, web cam etc. There is no ways that you could ever install any version of Windows that fast (Including Office).

Both have their place and I actually still work on Windows every day, but for anything personal, I definitely prefer Ubuntu. I just can't understand why Ubuntu doesn't have a larger market share. I think that some of the reasons include lack of marketing, the legacy perception that Linux is difficult to use and Windows entrenchment in terms of applications. Granted, this is why I still use Windows on a daily basis, but as a software developer, I'm not exactly the average user.

As I work for a Microsoft Gold Partner company, we get previews of Microsoft's products before launch with many free licenses. For example, I could have started using Windows 7, more than a year ago already. So with that in mind, I was once asked whether I prefer Windows or Linux - if both were free. It's a very simplified question but it suddenly becomes a whole lot more difficult... But I suppose, by now it should be obvious what my decision was... Ubuntu!

Twitter Delicious Facebook Digg Stumbleupon Favorites More