I was discussing, OK, maybe arguing, with my Windows/MS centric colleague the merits of Ubuntu v.s. Windows the other day. I know... it's an age old debate, but fun nonetheless. He made the statement that Windows is easy to use and that's what users want, they don't want to struggle with Linux. And I don't disagree with him, at least on the point that an OS must be easy to use, but where I don't, is that Ubuntu isn't user friendly. (I won't comment on other distros as they admittedly can be very difficult.) The one point that I will generally concede is that the standard look and feel of Windows beats Ubuntu hands down. OK, maybe this is an unfair comparison as Ubuntu is intended to run on a very wide spectrum of hardware and therefore they deliberately excluded the eye candy. But, it's relatively easy to transform Ubuntu to pretty much anything you want. Ubuntu is pretty easy to use, but because it looks different from Windows, this can lead to resistance to change.

This got me thinking a little... Well, what if the system looked and for the most part, functioned exactly the same as some given version of windows? This would negate the argument of which OS looked better as they would both be virtually exactly the same and to some degree which is "easier" to use. The look of the OS to some people is important. Admittedly, I do care that it looks "right" even though this isn't the only reason for my use of Ubuntu. Up to now, I'd been pretty much of the "Linux isn't Windows and therefore shouldn't look like it" opinion, but I started looking at how to transform my OS into a Windows clone, just to see how close I could get it. With a quick search, I found a set of scripts that made Ubuntu look virtually exactly the same. I even ran a "test" against some chosen subjects, showing them my new "Windows 7"... As they all know me as being a total Linux convert, they looked a little suspiciously at my screen and took a few moments to realise that it wasn't Windows 7. The give-away was generally the application names in the menu. But, nonetheless it was kinda hard to tell. Ok, I admit there are still differences that a user would have to get used to, but nothing rocket science.

So, if my Ubuntu looks virtually exactly the same as Windows 7, is Windows "easier" to use?


I'm finally beginning to describe myself as being OS agnostic. Some of my colleagues may scoff at that listening to the way I've gone on about Windows vs. Linux, but I really don't "hate" Windows or Microsoft. I've used their products for many years and admit that they have some without an equally good (or better) alternative. I just choose to use Ubuntu instead in most instances.

Ok, so now that that has been established, I believe that the world is going to be moving in the "OS agnostic" direction over the next few years. What I find it interesting is the need for companies to reposition themselves over the next few years in order to remain current. One of the "hallmarks" of the 70's computing era was that most computers were "dumb terminals"; all the processing happened server-side. And today, we are slowly moving back to that in certain instances. For many people, much of their computer-based work happens through the browser and they don't really need that many client-side applications. Even the office suite which has been the staple of most computer needs over the past two decades has started moving online. There are a number of options available including Feng Office, Google docs and even Microsoft is half way there with Office-live. With regards to Microsoft, They've got a distinct advantage in that they are so dominant in the "Office market" that all other "Office" applications have to pretty much conform to their standards or they wouldn't easily be even considered. And that includes me! I hate receiving an emailed document from someone (or sending one), only to find out that the formatting looks weird or has some compatibility issues. Therefore, I've ended up installing Microsoft Office on my Ubuntu. OK, I digress... For many people this is the killer, but as standards are being defined for most areas of I.T., including the open document standard and Office Open XML standard, it will matter less and less in terms of what you use to get the job done.

The adoption of cloud computing/ "Software as a Service"/web applications is going to reduce the importance of which OS you use over the next few years. So where is MS going? They're going to have to focus their attention on applications instead. I don't think that they can really avoid reduced importance in terms of OS choice if most apps are online. They're going to have to come up with some pretty inventive strategies in order to keep their users "locked" to Windows.




OK... Great. You I've watched a million YouTube videos on how great Ubuntu (or rather Gnome) can look with a million funky effects. But I was always left wondering how they did it. Sometimes you'd read through the comment section on the site and somebody would mention what was used. So, this time around I'm going to explain in as much detail as I can from a new users perspective on how to get all those funky effects. I know not everyone is going to like my theme, background etc, but once you understand how to do it, you can apply the concepts to your own instalation.


Default Ubuntu install


Let's get started. Firstly, I've installed Ubuntu 9.10 Karmick Koala but these instructions should generally work for other versions of Ubuntu and probably other Debian or Ubuntu based distributions. I'm running a Dell Latitude E6500 Laptop with 4 Gigs of RAM and a 2.4Ghz Core 2 Duo CPU. I then checked that my wireless Internet connection was working as well as ensuring that the Graphics card was ok. I didn't install any additional Graphics drivers for this machine - All I did to check that things were kinda working was to Right click on the desktop >>"Change Desktop Background">> Visual Effects Tab and enabled the "Extra" radio button. This Enables some 3D graphical effects, but I think that more importantly, checks to see that the graphics drivers are working. If you get an error, while enabling anything but "None", then you may need to install your graphics drivers first. Firstly, try click on Start >> System >> Administration >> Hardware Drivers. Assuming that you've got a working Internet connection, it will search for proprietary hardware drivers and hopefully find some that will work for you. Failing that, you'll have to Google for an answer to installing your graphics drivers. Without these you won't be able to enable the graphical effects that I'm showing here.

Compiz Fusion:

Ok, now that we're sure that your graphics card should work, the next step is to get "Compiz Fusion" working. Well, my first question when I heard about this "Compiz" thing, was what the @#$ is that? Well... hmmm.... Google it and you'll probably get an answer like "Compiz is a compositing window manager for the X Window System". OK, so that didn't help much to me trying to set up Linux for the first time - It basically replaces the basic window manager which renders the windows on the screen. As long as you're using a relatively recent version of Ubuntu, Compiz should already be installed by default. But just as a check you can click on Start >> Add/Remove Software or Start >> Ubuntu Software Center (depending on your version of Ubuntu).

In order to really get much use out of Compiz, you have to install the Settings Manager component. Once again, click Start << "Add/Remove Software" or "Ubuntu Software center". In the search bar, type compizconfig-settings-manager or ccsm for short and install the tool. Once it has been installed, you should be able to launch it by clicking on Start >> System >> Preferences >> CompizConfig Settings Manager. This is where the fun really starts!

I'll leave you to explore all the settings for yourself as it really comes down to personal preference, but the following plugins are those that I've enabled:

Desktop Cube - This is an absolute must :-) It allows the extension of your desktop onto the four (or more) faces of a cube. Explore the settings which allow you to set the transparency of the cube while rotating (on the "Transparency" tab) and setting a background image while rotating (under the "Skydome" section on "Appearance" tab).
Rotate Cube - In order to see the effects set above, ensure that the "Rotate Cube" plugin is enabled. Now, you can test that everything is working 100% - Assuming that you haven't changed any of the keyboard shortcuts, you can hold your middle mouse button down on the desktop (not on an open window) and move the mouse sideways which should start rotating the desktop. Alternatively, you can press , and or to rotate the cube.

Note: I've enabled the "Cube Reflection and Deformation" plugin as well in order to achieve the reflection below the cube. Just ensure that you switch "Deformation" to "none", otherwise your desktop will probably look like a cylinder.

"Expo" plugin - This unfolds your cubed desktop and allows you to drag windows across all the faces. The standard effect I think is a straight horizontal alignment of the workspaces as apposed to the curved ones that I have (You'll see what I mean once you do it). In order to get it curved, you can set the "Deformation" on the "Appearance" tab to "Curve". On the same tab, you can set the reflection as well which also looks great. Once all this is enabled, press "Super + e " to activate the view below. (Hu... What's "Super"? Well... Linux talk for the "Windows button".)


Fading Windows plugin: Fading windows in and out when maximizing and minimizing - Pretty self explanatory.
Window Decoration: Well... mine is enabled, but I've changed my window decorations to be managed by "Emerald". Google it for more info on what is is, if you're interested.
Wobbly
Windows: These are pretty interesting effects you'll see when moving your windows around.
Window Previews: These add previews when hovering over the application listed on the taskbar, similar to Windows 7.
Application Switcher: This allows you between different windows on the current workspace with previews of the windows.
Group and Tab Windows: This is an interesting one that allows you to take two windows and kinda glue them together as if they were on either sides of a piece of paper and flip them over. This took me a little while to figure out though, as you've got to first group two (or more) windows, tab them and then you can flip them. Play around and have a look at the default key bindings.
Ring Switcher: This is a nice alternative to the function on the "Application Switcher" plugin.
Shift Switcher: This is another alternative effect similar to the function, which I demonstrated in the above video.

Ok, that's pretty much a rundown of most of the plugins that I've enabled for Compiz, but it really takes some exploring to get it working the way you want. Just a note that it is possible to install additional plugins from the Compiz site, but I'm not going to cover any of that here.

Cairo Dock:


If you've ever seen a Mac and thought that thing at the bottom of the screen that they use to launch applications was pretty cool, well... you can have your own for Linux/ Ubuntu as well. It's pretty simple to install - click on start << Add/Remove Software or Ubuntu Software Center. Then type in "Cairo" in the search box and install Cairo Dock. Done! Now... like everything else, the next step is to customize it. Custom themes can be downloaded from the Internet by Googling for Cairo Dock themes. There are tons of themes on http://gnome-look.org/. For a more in-depth tutorial on installing and configuring Cairo dock see http://linuxbsdos.com/2009/11/12/sex-up-ubuntu-9-10-desktop-with-cairo-dock/

Backgounds, GTK themes, icons and cursors:

Ok, this is probably one of the first things that most people do and really easy, but for completeness, I'll add it. You can either double click on any image and once opened in "Eye of GNOME" (The image viewing program) you can click on Image << Set as Background Image. Done~! Another way to to set it by right clicking on the desktop and then Change Desktop Background. Images can be dragged onto the application to add them. GTK 2.0 themes, icons and cursors can also be downloaded from gnomelook.org and added in the same way. This will probably the staple of your customization tasks so get used to it.

Finally, different fonts can be installed by copying true type font files to /usr/share/fonts/truetype/. Once you've copied them there, they should be available to select from the
Font selection in Appearance Settings. As a side note, I think that Windows uses Segoe UI font, which can be downloaded somewhere - just check the legality, as it may belong to Microsoft and therefore be illegal.

There are a number of other software tools that I've used in the screencast that I'll detail in upcomming posts. As I've gone along, I've learned some lessons the hard way, but refined things as I progressed. Hopefully, this is a gives you an idea customizing your new Ubuntu. After every install, I've gone through a similar process outlined above and am currently busy building a live CD which has all the above customizations set by default, saving me the time and effort customizing Ubuntu each time. Plus, I'll be able to give a friend a "complete", themed Ubuntu with a number of very useful programs and codecs -Will come one of these days!


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,
Gmail,
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.



Twitter Delicious Facebook Digg Stumbleupon Favorites More