On Friends

Sorry, this is in Hinglish; too complicated to try and translate it. 🙂


Maa- Bhagwan ki kripa hai.
Papa- Beta Kiska Hai.
Dost- Chal Daaru Peete hain

Maa- Aag lage is college main.
Papa- Laad pyar ne bigaad diya.
Dost- Chal Daaru Peete hain!

Maa- Apni sehat ka khyal rakhna
Papa- Khoob Mehnat se kaam karna.
Dost- Chal Daaru Peete hain!

Maa- Naukri hee kharab thee
Papa- Koi baat Nahin, doosri mil jayegi
Dost- Chal Daaru Peete hain!

Maa- Jug jug jiye mera beta
Papa- Hamesha aage badhna.
Dost- Chal Daaru Peete hain!

Maa- Sadaa Sukhi Raho
Papa- Khush Raho
Dost- Chal Daaru Peete hain!

Maa- Bilkul mere bete par gaya/gayi hai
Papa- Khush Raho
Dost- Chal Daaru Peete hain!

Maa – Beta Bhool ja usko
Papa – Mard ban.
Dost – Chal Daaru Peete hain!

MORAL OF THE STORY: Duniya badal jati hai par DOST kabhi nahin badalte…!!!

On Google

So, what kind of a company do you think Google is? I guess the obvious answer – it is a search company. I would beg to differ and say it is on the contrary a data mining company. They make their money from AdSense and the Click-thru and sure, the search was the initial pull but now it is the data mining which pulls in the $$$’s. In some respects it is a one-trick pony, albeit a pretty good trick.

Of course, the reach of Google’s index is quite small (relatively speaking), with much more data sitting inside corporations – something which Microsoft realises and is making strides with FAST.

Something to think about next time you use your Android, Gmail, Google Talk, Google Talks, You Tube, etc. Each of those usage just adds to the data mining, allowing Google to make more money. 🙂

Kinect SDK

Microsoft recently release the Kinect SDK which allows you to implement a Natural User Interface and program against it! There is a lot of interest  around including claims on how Robotics will change to how you can integrate a light sensor.

You can use Visual Studio (C++, C# and VB.NET supported) and get quite interesting results.

Here are a series of links below which will help you get started.

  1. Download and install the Kinect SDK
  2. Download and install Quickstart Samples and Slides (zip file)
  3. Understanding the Kinect hardware
  4. Setting up your Dev Environment
  5. Understanding the basics of skeletal tracking using the Kinect sensor
  6. Understanding camera fundamentals
  7. Understanding the audio fundamentals
  8. Playing with the Coding4Fun Kinect toolkit and seeing how one can build cool apps such as:

Keep and eye out on the Coding4Fun Kinect blog.

Occasionally Connected Architecture

When implementing an occasionally connected architecture for a solution, there are three fundamental requirements:

  1. Part of the overall solution, some smart client is deployed and installed on the desktop and a web only approach is not possible. The main rational being that a smart client can work in a disconnected mode which of course with a web application is not possible.
  2. Underlying infrastructure needs to be in place to support this. Infrastructure is not specifically networks and servers, but also both the operational environment and the user’s environment and machine. The operational environments need to allow things such as: data caching, local storage of user data, user profile details, etc.
  3. More robust exception management process – this is not only about handling errors but also understanding the fact that the application is in a disconnected state and needs to do things differently.

When designing an occasionally connected application, there are two design approaches that one can take – data centric or service oriented.

  1. Data Centric – Applications had a RDBMS of some sort installed locally and use the built-in capabilities of that RDBMS to propagate and sync data including resolving any conflicts.
    1. Server publishes data, which a client subscribes to and is copied locally. The conflict resolution (as changes can be both on the server or client) needs to be agreed upfront.
    2. Generally the database’s built-in conflict resolution is used – this makes it simpler for the application as one does not need to build this in the application.
    3. As there is only one data repository, the data convergence is guaranteed between the client and the server.
    4. Both the client and the server are tightly coupled.
    5. As a database needs to run locally, machines with small footprints or devices such as mobile phones will not be able to run this.
    6. If deployment is an issue then there is more work required here.
  2. Service-Oriented – Applications use the SOA paradigm and store information in messages which are queued (when disconnected) and send to the server when connected for processing.
    1. The client can interact with any service required and focuses on the service requests instead of the local data i.e. are loosely coupled.
    2. No local RDBMS required; of course some state information would still need to be saved.
    3. Better when needs to interact outside of the firewall (e.g. Internet or Intranet)
    4. Deployment is still required, but is simpler.

For Data centric application, from a design perspective the following aspects should be factored in:

  1. Application needs to be aware of the merge-replication schemes that are implemented as the application needs to optimise for data updates and conflicts.
  2. As a result, ACID properties are not used for transactions; instead a pub-sub model is implemented.

On the other hand, for Service-oriented apps, the application design should address the following:

  • Application has to implement asynchronous communication.
  • Overall solution needs to keep all the network interactions simple and cannot be complex.
  • Application needs to add data caching capabilities
  • Application needs to implement robust connection management (e.g. Manual vs. Automatic)
  • Implement a store-and-forward mechanism such as using MSMQ.
  • Application needs to implement a robust data and business rule conflict manager.
  • Interacting with CRUD like Web services.
  • The application and the work can be logically broken into “chunks” to allow one using a task-based approach.
  • The application should be able to handle both forward and reverse dependencies which in turn could be complex business logic.

As a high level guide, a data centric approach should be used when:

  • One can deploy a database instance on the client.
  • The application can function in a two-tier environment.
  • One can tightly couple the client to the server through data schema definitions and communication protocol.
  • There is a need for built-in change tracking and synchronization.
  • One wants to rely on the database to handle data reconciliation conflicts and minimize the amount of custom reconciliation code that needs to be written.
  • There is no need to interact with multiple disparate services.
  • Users are able to connect to a database directly through a LAN/VPN/IPsec.

And, a service oriented approach should be taken when:

  • One wants to decouple the client and server to allow independent versioning and deployment.
  • There is a need for more control and flexibility over data reconciliation issues.
  • The delivery team has expertise to write more advanced application infrastructure code.
  • There is a need for a lightweight client footprint.
  • The applications can be structured into a service-oriented architecture.
  • There is a need for specific business functionality (for example, custom business rules and processing, flexible reconciliation, and so on).
    • Note: One might also need to look at a few good rules engine if this is the case.
  • One needs control over the schema of data stored on the client and flexibility that might be different from the server.
  • The application needs to interact with multiple services using different communication technologies (Web services, Message Queuing, RPC, etc.).
  • There is a need for a custom security scheme.
  • The application needs to operate outside of the firewall.

Debugger Canvas–Quick Tour

Debugger Canvas is a new user experience for the debugger in Visual Studio Ultimate. It pulls together the code you’re exploring onto a single pan-and-zoom display. As you hit breakpoints or step into code, Debugger Canvas shows just the methods that you’re debugging, with call lines and local variables, to help you see the bigger picture.

Check out the quick demo below to see what it is capable of and read up on the guide on how to use it.

TFS on the Road–Windows Phone 7 App

Pedro has build one of the best apps for Windows Phone 7 (WP7) that I have ever come across – TFS on the Road. As the application navigation map shows below it covers most aspects of TFS that you would be interested in – all packaged up in a very nice GUI. 🙂

application navigation map

Best of all, the application is free and you can get it from WP7 Market Place or if you want the code then from CodePlex. There are more screenshots for you to see what this looks like.

Before you go away and install the app, you need to have TFS OData Services installed and made available over IIS. If you are using CodePlex, then you are good to go as Microsoft already has that switched on.

How to remove a corrupt driver on Windows

If you are having constant issues with a specific hardware, then one of the culprits could be a corrupt device driver for that hardware. In simple terms, a device driver is nothing but another computer program which allows Windows and other applications to interact with the specific hardware. Since this is very hardware specific, generally one need to install the specific drivers for that device.

Windows has something called “Device Manager” which as the name might suggest is used to manage devices. Devices are nothing but the various hardware elements that make up your computer. Some of these are internal (such as CPU, RAM, Hard disk, etc.) and other external such as the monitor, printer, mouse, etc.

At a high level, the process is as follows:

  1. Open Computer Management
  2. Find the corrupt/offending device in Device Manager
  3. Remove the device (and possibly remove the drivers as well)
  4. Re-install the device (including the drivers if required).

I have a few screenshots showing the step-by-step process. Whilst these screenshots were taken on a Windows 7 machine, if you are running Vista, the process is the same.

Step 1 – Opening Computer Management

  1. Click on Start
  2. Right-click on the Computer (on the right side of the Menu)
  3. From the new menu select “Manage” as shown below.
  4. You need Administrator rights for this, so depending on your Security Setting, Windows might ask you to Confirm or ask for different credentials.



Step 2: Opening Device Manager

A new window called Computer Management will open. On the left, under System tools you will find an option called “Device Manager”. Click on that and on the right hand side you will see all the devices of your computer;  the devices are grouped by different categories as shown below.


If there is a problem being reported with some device (for whatever reason) then you will see a Yellow warning triangle next to it. For example in the screenshot below you can see the NVIDIA nForce Networking Controller has some issue. On the other hand, if all the devices are operating correctly (or at least that is what Windows thinks) then you won’t see this and would see something similar to the screenshot above.


Step 3: Uninstalling the Device

Select the device you want to uninstall and right click on it. From the new menu, select the Uninstall option as shown below.


Step 4: Removing the Driver

When you choose the Uninstall option (from Step 3), you will get a confirmation screen as shown below. If the driver is corrupt or causing issues, then you check the option which says “Delete the driver software for this device”.

WARNING: If Windows cannot automatically install your device because you need to either download the drivers from the manufacture’s website or use a CD/etc. then make sure you have this before you choose to Delete the driver software.


Step 5: Reboot (Optional)

Windows might not ask you to reboot. But depending on the device it might be a good idea to reboot just to make sure everything is cleaned out.

Step 6: Add back the Device

If you did reboot, next when you start and login, in most cases Windows will automatically find the new device and either install the drivers or ask you for the CD or path where the driver software can be found.

On the other hand, if you did not reboot or Windows did not detect your device automatically, then you go back to Device Manager (as shown in Steps 1 and 2), right click on the Computer name (this will be the first item in the Device Manager). From the menu choose the “Scan for hardware changes” option – Windows should now find out device.


Solving the iPhone Sync Error–Unknown error occurred (13019)

Recently the wife installed the latest iOS update for her iPhone 4 (all 600+ MB of it! And people have the misconception that Microsoft software is bloated?). After the update, the Sync on the phone was failing with the following error: “The iPhone cannot be synced. An unknown error occurred (13019)” as shown in the screenshot below.

She did have the latest version of iTunes – not that made any difference. Also, restarting iTunes or rebooting the phone and the machine did not help and the error remained the same. After a quick search online, it seems quite a few others have the same problem.


For her the sync failure was because of the Music (as did most other people with the same issue); but the failure can be in any group (App, Ringtones, etc.) and not necessarily restricted to the Music group. The easiest way to find out the group where the Sync failed is to keep an eye on the Sync status – it will stop in the group wherever it failed and then you will get the above error.

To fix this error you need to stop syncing the group causing the issues and then re-sync it. Essentially, you reset the sync options for that group. At a high level the steps you need to do are:

  1. Stop syncing the group that failed.
  2. Sync the phone.
  3. Re-enable syncing for the group from Step 1.
  4. Sync the phone again.

In the wife’s case, here are the steps I had to follow to stop the Music from syncing to fix this.

Step 1: Select the Device in iTunes (when it is connected of course).


Step 2: On the right hand side, select group which is failing and uncheck the Sync option. For example, choose Music and uncheck the Sync Music checkbox (circled in red). You need to click the Apply button on the bottom.


Step 3: Be warned, when you uncheck the Sync Music option, iTunes will delete all the music on your phone as shown in the screenshot below. Of course you should only do this from the computer where you have all your music. If you don’t then you won’t be able to sync your music back again. Click on the “Don’t Sync Music” button.


Step 4: Sync your phone as usual.

Step 5: Reverse of Step 2 – you select the "Sync Music” option again and click on Apply.

Step 6: Sync your phone as usual and everything should sync up again as you would expect. Of course this could take some time depending on how many items you have in your group.