Monday, December 28, 2009

NerdDinner Tutorial - Learn ASP.NET MVC

The best way to learn a new framework is to build something with it. This tutorial, by Scott Guthrie, walks through how to build a small, but complete, application using ASP.NET MVC, and introduces some of the core concepts behind it.

The application is called "NerdDinner". NerdDinner provides an easy way for people to find and organize dinners online.

Let's jump right into the tutorial...


Download a free PDF version of this tutorial if you want to read the tutorial offline.

ASP.NET MVC Video Tutorial - Presented by Scott Hanselman at Mix'09.

Tuesday, December 22, 2009


We love to believe that willpower determines our actions. “If I just try harder,” we tell ourselves, “I can lose that last 10 pounds.” Or save $200/month. Or improve our time management.

The problem is, it doesn’t work.

Willpower is important, of course, but there’s more to behavioral change than just trying harder. Think about all the things we know we “should” do: Exercise regularly, eat healthily, max out our retirement accounts, save more, travel, call Mom....

In one study, researchers tried to understand why people weren’t investing in their 401(k)s. In the first example, less than 40% of people contributed to their 401(k). But after they made it automatic—in other words, the day you joined, you’re automatically contributing a small amount to your 401(k)— enrollment skyrocketed to over 90%.

We know we should fill out that paperwork—and it’s probably costing us a lot of money to not be investing— but we just can’t seem to get around to it.

It turns out we “know” we need to do all kinds of things, but we often need the right defaults—a small nudge—to actually change our behavior.

Can you help design the right defaults to help people in pro-social ways?

Source: Ramit Sethi is the author of I Will Teach You To Be Rich. He writes about personal finance, psychology, and entrepreneurship at

Monday, December 21, 2009

The Complete Guide to Google Wave

The first comprehensive user guide to Google Wave, written by Gina Trapani with Adam Pash

Google Wave is a new web-based collaboration tool that's notoriously difficult to understand. This guide will help. Here you'll learn the ins and outs of how to use Google Wave to get things done with your group. This entire book is available to read for free online, with an electronic and upcoming print version available for purchase.

gReAT rEaD!!!

Zappos Core Values

"As we grow as a company, it has become more and more important to explicitly define the Zappos core values from which we develop our culture, our brand, and our business strategies. These are the ten core values that we live by:"

What Matters Now: ebook by Seth Godin

Seth Godin has published a free ebook called What Matters Now.

He describes the inspiration for the book in this blog post:

Now, more than ever, we need a different way of thinking, a useful way to focus and the energy to turn the game around.

The book features a single page each by around seventy "big thinkers", each sharing an idea for you to think about as we head into the new year. From bestselling author Elizabeth Gilbert to brilliant tech thinker Kevin Kelly, from publisher Tim O'Reilly to radio host Dave Ramsey, there are some important people riffing about important ideas here. The ebook includes Tom Peters, Fred Wilson, Jackie Huba and Jason Fried, along with Gina Trapani, Bill Taylor and Alan Webber.

Get the book, read it, learn from it, share it, tweet it.

Books by Chip and Dan Heath (MUST READS)

Made to Stick
Rumor Mills: The Social Impact of Rumor and Legend

Switch: How to change things when change is hard (To be released in Feb, 2010)

Tuesday, December 1, 2009

Essential BizTalk Debugging Skills

On the topic of debugging skills, there are many things said and to be said, but I thought I’d take a moment to reflect on a few skills I believe BizTalk developers should develop to solve problems on their solutions effectively (in no particular order):

  1. Trace the execution of BizTalk processes end-to-end, covering both messaging and orchestrations. While this seems obvious at first, it can be tough on complex solutions that rely heavily on pub/sub and direct binding!
  2. Discovering the reasons why a service instance might be getting suspended. In particular, quickly finding any possible exception information coming from faulted instances.
  3. Using the orchestration debugger to figure out where a given Orchestration instance is getting suspended.
  4. Matching any receive shapes in an orchestration to the origin of messages coming for it. This might require matching logical ports with physical ports as well as possible direct-binding sources of messages.
  5. Tracking possible reasons for routing failures, particularly when correlations are involved. This includes being able to understand routing failure reports, checking the state of any required promoted property, comparing subscription information either directly on the message box as well as from reading orchestration code, and so on.
  6. Detecting and solving situations that stop flow/processing of messages, related to thread pool issues or thread starvation.
  7. Detecting zombie message instances and their possible consequences.
  8. Knowing how to enable the BAM tracing infrastructure to debug and solve issues with BAM not writing data to the BAM primary import database.
  9. Using the Visual Studio Debugger or WinDBG to debug BizTalk processes. This includes figuring out the right processes to attach to!
  10. Debugging assembly-loading/versioning issues. This includes how to use Fuslogvw.exe and friends.
(Source: Tomas Restrepo)

Monday, October 26, 2009

ProcDump sysinternals tool - really really helpful to create a memory dump

As described in Sysinternals documentation

ProcDump is a command-line utility whose primary purpose is monitoring an application for CPU spikes and generating crash dumps during a spike that an administrator or developer can use to determine the cause of the spike. ProcDump also includes hung window monitoring (using the same definition of a window hang that Windows and Task Manager use) and unhandled exception monitoring. It also can serve as a general process dump utility that you can embed in other scripts.

You don’t need to write your own utility to create a memory dump by monitoring performance counter. Don’t forget to use the switch “-ma” to dump full memory(especially for .net app) because by default it only dumps thread and handle.

This is really helpful to get a memory dump based on CPU usage and we could probably get the memory dump without using ADPlus in most of the cases.

syntax to dump full memory given process id is

procdump -ma

syntax to dump full memory given process id and cpu usage 80%(threshold)

procdump -ma -c 80

Wednesday, October 14, 2009

Sourcebits - Web, Mac, Android and the iPhone Development

Came across this website while looking for iPhone development companies. This is what one of our companies does, so they are our competition, but I liked what they have done so far.

Thursday, October 1, 2009

Medical - Open Source EMR Project

Medical combines the functionality of an Electronic Medical Record and a Health Information System, focused on preventive medicine for developing countries, with special emphasis on the socio-economic background of the patient. It uses industry standards, such ICD-10 and ICD10-PCS. One key aspect of Medical that differentiates it from other systems is the holistic approach of dealing with the patient. We designed Medical to include all the factors that influence their health status. By this we firmly believe in the World Health Organization (WHO) definition of health: "Health is a state of complete physical, mental and social well-being and not merely the absence of disease or infirmity."

Friday, September 25, 2009

Service Oriented Architecture (SOA): Fuel Innovation, Boost Agility, Harvest More Value

What is SOA

Service-Oriented Architecture is an approach to organizing, developing and integrating information technology in which data, logic, and infrastructure resources are organized as services and accessed by exchanging messages with one another to support flexible business processes and enabling IT to become accelerator for business agility and innovation.


  • Fuel Business Innovation thru Composite Applications:

    SOA focuses on bringing the business processes and information which is locked up in multiple disparate systems to the familiar tools people use as services; resulting in maximizing users (internal and external) productivity and efficiency, leading to increase in adoption while reducing training cost fueling accelerated business innovation and profitable business connection.

  • Boost Business Agility via Business Process Management:

    SOA is centered on service enabled business processes allowing you to model, develop, manage, monitor and control business processes through dynamic composition delivering continuously optimize operational capabilities and improve business performance.

  • Harvest More Value from exiting Investments enabled by Cross Platform Interoperability:

    SOA leverage your existing investments and interoperates with what you have by extending functionality through cross platform interoperability standards support and provide incremental routes to introduce change in IT infrastructure at your own pace.

Microsoft's WebsiteSpark Program

Microsoft WebsiteSpark to Jump-Start Business for Web Development and Design Shops (Press Release)

Yesterday, Sep 24, 2009, Microsoft announced a new program – WebsiteSparkbuilding off of Microsoft's current BizSpark and DreamSpark programs – will give eligible Web developers access to support and software for creating Web sites. Microsoft hopes the program will expand its partner network, the company said in a news release.

The program has no up-front cost for three years, but Microsoft wants $100 upon exit. Professional Web design or development companies with 10 or fewer employees will be eligible.

WebsiteSpark is designed for independent web developers and web development companies that build web applications and web sites on behalf of others. It enables you to get software, support and business resources from Microsoft at no cost for three years, and enables you to expand your business and build great web solutions using ASP.NET, Silverlight, SharePoint and PHP, and the open source applications built on top of them.

What does the program provide?

WebSiteSpark provides software licenses that you can use for three years at no cost. Once enrolled, you can download and immediately use the following software from Microsoft:

  • 3 licenses of Visual Studio 2008 Professional Edition
  • 1 license of Expression Studio 3 (which includes Expression Blend, Sketchflow, and Web)
  • 2 licenses of Expression Web 3
  • 4 processor licenses of Windows Web Server 2008 R2
  • 4 processor licenses of SQL Server 2008 Web Edition
  • DotNetPanel control panel (enabling easy remote/hosted management of your servers)

The Windows Server and SQL Server licenses can be used for both development and production deployment. You can either self-host the servers on your own, or use the licenses with a hoster. WebsiteSpark makes it easy to find hosters who are also enrolled in the program, and who can use your licenses to provide you with either dedicated or virtual dedicated servers to host your sites on.

In addition to software, WebsiteSpark provides partner opportunities to grow and build your business (including customer referrals through our partner programs). It also includes product support (including 2 professional support incidents) and free online training for the products.

Who can join the program?

WebSiteSpark is available to independent web developers and small web development companies. The only two requirements to join the program are:

  1. Your company builds web sites and web application on behalf of others.
  2. Your company currently has less than 10 employees.

If you meet these requirements you can visit the WebsiteSpark website and sign-up today.

As part of the enrollment process you can pick either a network referral partner (for example: a hoster or an existing Microsoft partner), or enter a referral code that you have received at an event or from a Microsoft employee. If you send mail to you can get a referral code quickly. You can then use that code to enroll in the program on the WebsiteSpark website. Once enrolled you can immediately download and use the software, as well as begin to participate in the network/partner opportunities.

If you have any problems enrolling, you can also send me mail ( and I can connect you with someone who can help.

What happens after the 3 years?

WebsiteSpark is a 3 year program. There is no obligation to continue to use any of the software after the three years is over, and there are no costs for the three years other than a $100 program fee at the end of the three years.

At the end of the three years, WebsiteSpark participants can optionally choose to purchase all of the software in the WebsiteSpark program via a $999/year package. This includes 3 copies of VS Professional, 1 copy of Expression Studio (including Blend and Sketchflow), 2 copies of Expression Web, and 4 processor licenses of Windows Web Server 2008 and 4 processor licenses of SQL Server Web edition that can be used for production deployment.

Alternatively, if you want to purchase only the production server licenses, you can take advantage of a $199/year offering that includes both 1 Windows Web Server processor license and 1 SQL Server Web edition processor license. You can buy the quantity you need of this package at $199/year each.


The WebsiteSpark program joins the other two successful “Spark” programs we’ve previously launched -BizSpark for startups, and DreamSpark for students.

Coming at a time when the current economic climate is still tough, WebsiteSpark will help support developers and companies by providing the business resources, training, and software necessary for companies to get started and grow successful businesses on the Microsoft Web Platform.

Visit to learn more about the Microsoft Web Platform, as well as download and install the new Microsoft Web Platform Installer V2 we released today – which makes it really easy to quickly provision web servers and web development machines. You can then browse and download and use open source web applications from the Windows Web Application Gallery.

Wednesday, September 23, 2009

Google Wave: 5 Ways It Could Change the Web

While riding the Google Wave, I came across this nice post by Ben Parr on Mashable that talks about how Wave applications can change the web.

1. Wave-Powered Forums
2. Wave-powered Commenting System
3. Wave-Based Content Management System
4. Wave for Customer Support
5. Wave for Education

Google Sidewiki – a comment engine for the whole web

A new feature on the Google toolbar—which is installed on millions of computers around the world—lets users comment about the content of any web page they visit; the comments are then visible to other toolbar owners when they visit that site (see screenshot to the right). Group product manager Caesar Sengupta tells us the company wants to “help foster and create communities around different web pages” and provide a functionality that is currently missing from most websites.

The feature called Sidewiki appears as a sidebar and allows users to discuss the content of the page currently open in the browser. Users can vote comments up and down, theoretically meaning the "best" comments rise to the top.
The sidebar, which is also to be built into future versions of Google’s Chrome browser, has already angered some content producers. The fear is that if Google adds advertising to Sidewiki it will be making money from content without the original content producers seeing any of it.
Blogging veteran Robert Scoble today described Sidewiki as the "…latest attempt by (a) big company to make money off of my content on my blog."

Talking to PaidContent, Google’s Aseem Sood denied that it planned to monetise the service. "Right now, our goal honestly is to increase the engagement of users on the web". Note the "Right now"; that suggests that if the sidebar is a success it may still see Adsense units being added.

Google is walking a fine line in its efforts to innovate in some areas that have long been the domain of traditional publishers, while not alienating them. Just last week, it introduced Google Fast Flip, a new user interface for online content that lets readers browse through web pages faster. It was widely seen as an effort to collaborate with publishers in order to upgrade the experience of reading news online.

Tuesday, August 25, 2009

What is Google Wave

Google Wave is a new model for communication and collaboration on the web, coming later this year.

What is a wave?

A wave is equal parts conversation and document.
People can communicate and work together with richly formatted text, photos, videos, maps, and more.

A wave is shared.
Any participant can reply anywhere in the message, edit the content and add participants at any point in the process. Then playback lets anyone rewind the wave to see who said what and when.

A wave is live.
With live transmission as you type, participants on a wave can have faster conversations, see edits and interact with extensions in real-time.

Some key technologies in Google Wave

Real-time collaborationNatural language toolsExtending Google Wave

Concurrency control technology lets all people on a wave edit rich media at the same time.

Watch the tech video

Server-based models provide contextual suggestions and spelling correction.

Watch the tech video

Embed waves in other sites or add live social gadgets, thanks to Google Wave APIs.

How to say greetings in Russian

'Hi' (informal greeting): "Привет!" (pree-VjET)
'Hello' (polite informal, singular form): "Здравствуй!" (ZDRAV-stvuy)
'Hello' (more polite or plural form): "Здравствуйте!" (ZDRAV-stvuy-tjeh)
'Good day': "Добрый день!" (DOB-ryy djenj)
'Good morning': "Доброе утро!" (DOB-rah-ye UT-rah) / (Dobre Utra)
'Good evening': "Добрый вечер!" (DOB-ryy VjEH-cher)

Monday, August 24, 2009

Social Recommendations App for Facebook/ iPhone/ MySpace

We have been thinking about creating a social recommendations platform that enables users to find and recommend local businesses and service providers together with their friends. We will create Apps to hook into Facebook, MySpace and iPhone.

Nokia's Booklet 3G

Nokia is officially jumping on the netbook bandwagon with the "Booklet 3G" — an Intel/Microsoft-based netbook that promises 12-hour battery life, a weight of 2.75 pounds, and apparently built-in GPS. The "3G" portion of the name indicates a wireless data connection as well.

Actual specs and details will be announced by Nokia on September 2nd, but it’s believed that the Booklet 3G will run Windows 7. The 12-hour battery life is interesting, too, as that’s a full four hours longer than most netbooks currently on the market.

Here’s a video... w00t:

Self-Realization - Answer to all our problems

I believe that our true nature is far more powerful, creative and loving than we could ever imagine, and the recognition of this is readily available to each and every one of us. The realization of our true nature transforms everything - our relationships, our work and our organizations; and is, I believe, the answer to all our problems.

There is nothing as practical as this Self-realization. It nourishes us, heals us, inspires us and gives us certain confidence and unlimited energy to accomplish anything our heart desires. And it does this with an incredible joy and light-heartedness.

Sunday, August 23, 2009

How to Monetize your blog

Follow this link for a few books which have some really great tips and strategies on how to Monetize your blog and some which will help you working with Blogger.

Axure for Building Wireframes, Prototypes and Specifications

Axure RP is a wireframing, prototyping, and specification tool that allows you to design applications and websites faster and easier than with your current tools.

For our web development projects, developing web site wireframes and information architecture is the first step in the process. In the past we have used OmniGraffle, MockUpScreens, Mind Manager and Microsoft Visio as the wireframing and prototyping tools.

Recently we have started using a tool called Axure RP for creating wireframes and prototypes. Axure is a tool that is specifically designed for creating web site wireframes. As a result, all of the tool bar elements are strictly catered towards the web design world. We really enjoy working with the Axure for a number reasons:

1) Drag and Drop Elements

Using Axure, a web designer can easily add form elements and place holders to the page. Since all of the tool bar elements are designed for creating web site wireframes, there is no need to search for the right icon. This is the case for Visio since there are so many different elements available on the tool bar.

2) Export Wireframes as HTML

The wireframes created in Axure can be exported as HTML pages. This makes it possible for clients to easily review the wireframes using a web browser. There is no need to download any PDF file. Also, the form elements can be simulated in the web browser such that when you click on a link in the wireframes, it will actually lead you to the appropriate page.

Overall, we find Axure to be a really user-friendly and effective wireframing tool.

Friday, August 21, 2009

A different perspective at life...

I believe that our true nature is far more powerful, creative and loving than we could ever imagine, and the recognition of this is readily available to each and every one of us. The realisation of our true nature transforms everything - our relationships, our work and our organisations; and is, I believe, the answer to all our problems.

There is nothing as practical as this Self-realisation. It nourishes us, heals us, inspires us and gives us certain confidence and unlimited energy to accomplish anything our heart desires. And it does this with an incredible joy and light-heartedness.

Thursday, August 20, 2009

Twitter To Add Real-Time Location Feature

Twitter today publicly unveiled efforts to add location features to its app programing interface (API). The new code will let developers of apps, including on the web and on GPS-aware mobile devices like the iPhone, add the latitude and longitude coordinates of the user with any tweet. While developers of apps like Tweetie or Twinkle have often added location data themselves, the new feature would make it possible to see nearby tweets in any app.

This can be a very powerful new feature. Just imagine if a friend tweets something and you are able to know their location when they did it.

There are no shortage of location-based services attempting to take off right now, but Twitter already has a huge user base and depending on how developers use this new API, Twitter location could replace or bolster many of them. And that’s good news because the main problem that many of these location-based services have is a lack of users.

Company co-founder Biz Stone has stressed privacy and that positioning will be strictly optional, requiring that developers or users agree to sending their locations with posts. A timetable isn't yet available for the release, but Twitter plans to deliver the API to outside developers before adding it to its own desktop and mobile-oriented web pages.

Thursday, August 6, 2009

Twouble with Twitters: SuperNews!

I was having a conversation with my colleagues about the "value" of Twitter this morning and we went from technology behind Twitter to the social and business (50 Ideas on Using Twitter for Business / Explaining the Impact of Twitter) impact.

Someone pointed to this video on YouTube.... its funny!!!

Wednesday, July 29, 2009

Nice mac-style menu (PyrusMalus )

I ran across this website while looking for some icons. Really cool mac-style javascript menu. Nifty!!!!


Tuesday, July 28, 2009

Why I am excited about the Azure Platform's .Net Service Bus

Basically, the following statement:

"...Full-duplex, connection-oriented peer-to-peer sessions with network-boundary traversal create direct end-to-end connectivity through NAT"

That's awesome... because any developer that has ever tried to create a real-time, Peer-to-Peer application, he/she knows what hell it is to penetrate firewalls specially Symmetric NATs. Click here to learn about NATs

The Service Bus enables secure, loosely-coupled connectivity between services and applications to navigate firewalls or network boundaries, using a variety of communication patterns. The Access Control service provides an enterprise-class mechanism for federated authorization across organizations and protocols.

In the same way that Microsoft® .NET Framework provides higher-level libraries to make developers more productive, .NET Services help developers focus on their application logic rather than deploying and managing their own cloud-based infrastructure."

Azure's .Net Service Bus enables developers to build applications for the cloud and offers a scalable hosted infrastructure for deploying and managing these applications and their data stores combined with a workflow engine and a security infrastructure. The Azure Service platform is the new OS for internet scaled applications.

Lower Barriers to Building Composite Applications

Using the Service Bus, an application or service can expose and access endpoints that would otherwise be hard or impossible to reach. For example, the endpoints may be located behind network address translation (NAT) boundaries or bound to frequently changing, dynamically assigned IP addresses.
  • Exposes Service Endpoints Easily

    >> Users can access a global hierarchical namespace that is DNS- and transport- independent

    >> Services can be located through a stable, Internet-accessible URL, irrespective of location.

  • Offers Multiple Connection Options

    >> One-way messaging between sender and listener supports unicast and multicast datagram distribution

    >> Full-duplex connection-oriented sessions between sender and listener support bi-directional communication

    >> Full-duplex, connection-oriented peer-to-peer sessions with network-boundary traversal create direct end-to-end connectivity through NAT

  • Supports Publish and Subscribe for Multicasting

    The simple publish/subscribe model lets multiple publishers and multiple subscribers simultaneously use the service’s topic management and event distribution system

More on Azure .Net Service Bus

According to recent traffic studies, the BitTorrent protocol is now responsible for roughly half of all Internet traffic. That's a lot of sharing of personal photos, self-sung songs, and home videos. Half! Next to text messaging, Instant Messaging applications are the social lifeline for our teenagers these days – so much that the text messaging and IM lingo is starting to become a natural part of the colloquial vocabulary everywhere. Apple's TV, Microsoft's Xbox 360, and Netflix are shaking up the video rental market by delivering streamed or downloadable high-quality video and streams on YouTube have become the new window on the world. Gamers from around the world are meeting in photorealistic virtual online worlds to compete in races, rake in all the gold, or blast their respective Avatars into tiny little pieces.

What does all of that have to do with Web 2.0? Very little. While it's indisputable that the Web provides the glue between many of those experiences, the majority of all Internet traffic and very many of the most interesting Internet applications depend on bi-directional, peer-to-peer connectivity.

These familiar consumer examples have even more interesting counterparts in the business and industrial space. Industrial machinery has ever increasing remote management capabilities that allow complete remote automation, reprogramming, and reconfiguration. Security and environment surveillance systems depend on thousands of widely distributed, remotely controlled cameras and other sensors that sit on street poles, high up on building walls, or somewhere in the middle of a forest. Terrestrial and satellite-based mobile wireless technologies make it possible to provide some form of digital connectivity to almost any place on Earth, but making an array of devices addressable and reachable so that they can be integrated into and controlled by a federated, distributed business solution that can leverage Internet scale and reach remains incredibly difficult.

The primary obstacle to creating pervasive connectivity is that we have run out of IPv4 addresses. There is no mere threat of running out, we're already done. The IPv4 space is practically saturated and it's really only network address translation (NAT) that permits the Internet to grow any further. The shortage is already causing numerous ISPs to move customers behind NATs and not to provide them with public IP address leases any longer. Getting a static public IP address (let alone a range) is getting really difficult. IPv6 holds the promise of making each device (or even every general-purpose computer) uniquely addressable again, but pervasive IPv6 adoption that doesn't require the use of transitional (and constraining) tunneling protocols will still take many years.

The second major obstacle is security. Since the open network is a fairly dangerous place these days and corporate network environments are often und unfortunately not much better, the use of Firewalls has become ubiquitous and almost all incoming traffic is blocked by default on the majority of computers these days. That's great for keeping the bad guys out, but not so great for everything else – especially not for applications requiring bi-directional connectivity between peers.

Since these constraints are obviously well-known and understood there is a range of workarounds. In home networking environments the firewall and NAT issues are often dealt with by selectively allowing applications to open inbound ports on the local and network router firewalls using technologies like UPnP or by opening and forwarding port by ways of manual configuration. Dynamic DNS services help with making particular machines discoverable even if the assigned IP address keeps changing. The problem with those workarounds is that they realistically only ever work for the simplest home networking scenarios and, if they do work, the resulting security threat situation is quite scary. The reality is that the broadly deployed Internet infrastructure is optimized for the Web: clients make outbound requests, publicly discoverable and reachable servers respond.

If your application requires bi-directional connectivity you effectively have two choices: Either you bet on the available workarounds and live with the consequences (as BitTorrent does) or you build and operate some form of Relay service for your application. A Relay service accepts and maintains connections from firewalled and/or NAT-ed clients and routes messages between them. Practically all chat, instant messaging, video conferencing, VoIP, and multiplayer gaming applications and many other popular Internet applications depend on some form of Relay service.

The challenge with Relay services is that they are incredibly hard to build in a fashion that they can provide Internet scale where they need to route between thousands or even millions of connections as the large Instant Messaging networks do. And once you have a Relay that can support such scale it is incredibly expensive to operate. So expensive in fact that the required investments and the resulting operational costs are entirely out of reach for the vast majority of software companies. The connectivity challenge is a real innovation blocker and represents a significant entry barrier.

The good news is that Microsoft .NET Service Bus provides a range of bidirectional, peer-to-peer connectivity options including relayed communication. You don't have to build your own or run your own; you can use this Building Block instead. The .NET Service Bus covers four logical feature areas: Naming, Registry, Connectivity, and Eventing.


The Internet's Domain Name System (DNS) is a naming system primarily optimized for assigning names and roles to hosts. The registration records either provide a simple association of names and IP addresses or a more granular association of particular protocol roles (such as identifying domain's mail server) with an IP address. In either case, the resolution of the DNS model occurs at the IP address level and that is very coarse grained. Since it is IP address centric, a DNS registration requires a public IP address. Systems behind NAT can't play. Even though Dynamic DNS services can provide names to systems that do have a public IP address, relying on DNS means for most ISP customers that the entire business site or home is identified by a single DNS host entry with dozens or hundreds of hosts sitting behind the NAT device.

If you want to uniquely name individual hosts behind NATs, differentiate between individual services on hosts, or want to name services based on host-independent criteria such as the name of a user or tenant, the DNS system isn't an ideal fit.

The .NET Service Bus Naming system is a forest of (theoretically) infinite-depth, federated naming trees. The Naming system maintains an independent naming tree for each tenant's solution scope and it's up to the application how it wants to shape its tree. 'Solution' is a broad term in this context meant to describe a .NET Service Bus tenant – on the customer side, a Service Bus application scope may map to dozens of different on-site applications and hundreds of application instances.

Any path through the naming tree has a projection that directly maps to a URI.

Let's construct an example to illustrate this: You design a logistics system for a trucking company where you need to route information to service instances at particular sites. The application scope is owned by your client, 'ContosoTrucks' which has a number of logistics centers where they want to deploy the application. Your application is called 'Shipping' and the endpoints through which the shipping orders are received at the individual sites are named 'OrderManagement'. The canonical URI projection of the mapping of New York's order management application endpoint instance into the ServiceBus Naming system is

The significant difference from DNS naming is that the identification of services and endpoints moves from the host portion of the URI to the path portion and becomes entirely host-agnostic. The DNS name identifies the scope and the entry point for accessing the naming tree. That also means that the path portion of the URI represent a potentially broadly distributed federation of services in the Naming service, while the path portion of a 'normal' URI typically designates a collocated set of resources.

There is no immediate access API for the Naming system itself. Instead, access to the Naming system is provided through the overlaid Service Registry.

Service Registry

The Service Registry allows publishing service endpoint references (URIs or WS-Addressing EPRs) into the Naming system and to discover services that have been registered.

The primary access mechanism for the Service Registry is based on the Atom Publishing Protocol (APP) allowing clients to publish URIs or EPRs by sending a simple HTTP PUT request with an Atom 1.0 'item' to any name in the naming tree. It's removed by sending an HTTP DELETE request to the same name. There is no need to explicitly manage names – names are automatically created and deleted as you create or delete service registry entries.

Service discovery is done by navigating the naming hierarchy, which is accessible through a nested tree of Atom 1.0 feeds whose master-feed is located at[solution]/. Any publicly registered service is accessible through the feed at the respective location.

In addition to the Atom Publishing Protocol, the Service Registry also supports publishing, accessing, and removing endpoint references using WS-Transfer and the Relay service will automatically manage its endpoints in the Service Registry without requiring any additional steps.

The Service Registry is an area that will see quite significant further additions over the next few milestones including support for service categorization, search across the hierarchy, and support for additional high-fidelity discovery protocols.


The core of the connectivity feature area of the .NET Service Bus is a scalable, general-purpose Relay service. The Relay's communication fabric supports unicast and multicast datagram distribution, connection-oriented bi-directional socket communication and request-response messaging.

Towards listening services the Relay takes on the same role as operating-system provided listeners such as Windows' HTTP.SYS. Instead of listening for HTTP requests locally, a relayed HTTP service establishes an HTTP listener endpoint inside the cloud-based Relay and clients send requests to that cloud-based listener from where they are forwarded to the listening service.

The connection between the listener and the Relay is always initiated from the listener side. In most connection modes (there are some exceptions that we'll get to) the listener initiates a secured outbound TCP socket connection into the Relay, authenticates, and then tells the Relay at which place in the naming tree it wants to start listening and what type of listener should be established.

Since a number of tightly managed networking environments block outbound socket connections and only permit outbound HTTP traffic, the socket based listeners are complemented by an HTTP-based multiplexing polling mechanism that builds on a cloud-based message buffer. In the PDC release the HTTP-based listeners only support the unicast and multicast datagram communication, but bidirectional connectivity is quite easily achievable by pairing two unicast connections with mutually reversed client and listener roles.

A special variation of the bi-directional socket communication mode is 'Direct Connect'. The 'Direct Connect' NAT traversal technology is capable of negotiating direct end-to-end socket connections between arbitrary endpoints even if both endpoints are located behind NAT devices and Firewalls. Using Direct Connect you can start connections through the Relay and 'Direct Connect' will negotiate the most direct possible connectivity route between the two parties and once the route is established the connection will be upgraded to the direct connection – without information loss.

With these connectivity options, the Relay can provide public, bi-directional connectivity to mostly any service irrespective of whether the hosting machine is located behind a NAT or whether the Firewalls layered up towards the public network don't allow inbound traffic. The automatic mapping into the Naming system means that the service also gains a public address and the service can, on demand, be automatically published into the Service Registry to make the service discoverable.

In addition to providing NAT and Firewall traversal and discoverability the delegation of the public network endpoint into the Relay provides a service with a number of additional key advantages that are beneficial even if NAT traversal or discoverability are not a problem you need to solve:
  • The Relay functions as a "demilitarized zone" that is isolated from the service's environment and takes on all external network traffic, filtering out unwanted traffic.

  • The Relay anonymizes the listener and therefore effectively hides all details about the network location of the listener thus reducing the potential attack surface of the listening service to a minimum.

  • The Relay is integrated with the Access Control Service and can require clients to authenticate and be authorized at the Relay before they can connect through to the listening service. This authorization gate is enabled by default for all connections and can be selectively turned off if the application wants to perform its own authentication and authorization.

These points are important to consider in case you are worried about the fact that the Relay service provides Firewall traversal. Firewalls are a means to prevent undesired foreign access to networked resources – the Relay provides a very similar function but does so on an endpoint-by-endpoint basis and provides an authentication and authorization mechanism on the network path as well.

If your applications are already built on the .NET Framework and your services are built using the Windows Communication Foundation (WCF) it's often just a matter of changing your application's configuration settings to have your services listen on the Relay instead on the local machine.

The Microsoft.ServiceBus client framework provides a set of WCF bindings that are very closely aligned with the WCF bindings available in the .NET Framework 3.5. If you are using the NetTcpBinding in your application you switch to the NetTcpRelayBinding, the BasicHttpBinding maps to the BasicHttpRelayBinding, and the WebHttpBinding has its equivalent in the WebHttpRelayBinding. The key difference between the standards WCF bindings and their Relay counterparts is that they establish a listener in the cloud instead of listening locally.

All WS-Security and WS-ReliableMessaging scenarios that are supported by the standard bindings are fully supported through the Relay. Transport-level message protection using HTTPS or SSL-protected TCP connections is supported as well.

If the listener chooses to rely on WS-Security to perform its own authentication and authorization instead of using the security gate built into the Relay, the HTTP-based Relay bindings' policy projection is indeed identical to their respective standard binding counterparts which means that client components can readily use the standard .NET Framework 3.5 bindings (and other WS-* stacks such as Sun Microsystems' Metro Extensions for the Java JAX-WS framework).

If you prefer RESTful services over SOAP services, you can build them on the WebHttpRelayBinding using the WCF Web programming model introduced in the .NET Framework 3.5. The Relay knows how to route SOAP 1.1, SOAP 1.2 messages and arbitrary HTTP requests transparently.

The NetEventRelayBinding doesn't have an exact counterpart in the standard bindings. This binding provides access to the multicast publish/subscribe capability in the Relay. Using this binding, clients act as event publishers and listeners act as subscribers. An event-topic is represented by an agreed-upon name in the naming system. There can be any number of publishers and any number of subscribers that use the respective named rendezvous point in the Relay. Listeners can subscribe independent of whether a publisher currently maintains an open connection and publishers can publish messages irrespective of how many listeners are currently active – including zero. The result is a very easy to use lightweight one-way publish/subscribe event distribution mechanism that doesn't require any particular setup or management.

The discussion of the close alignment between the Relay's .NET programming experience and the standard .NET Framework shouldn't imply that the Relay requires the use of the .NET Framework. Microsoft is working with community partners to provide immediate and native Relay support for the Java and Ruby platforms of which initial releases will be available at or shortly after PDC with more language and platform support lined up in the pipeline.

The Relay provides connectivity options that allow you build bidirectional communication links for peer-to-peer communication, allows making select endpoints securely and publicly reachable without having to open up the Firewall floodgates, and provides a cloud-based pub/sub event bus that permits your application to distribute events at Internet scale. I could start enumerating scenarios at this point, but it seems like a safe bet that you can already think of some.

Find out more here:

Monday, July 27, 2009

Book: Weird Ideas That Work: 11 1/2 Practices for Promoting, Managing, and Sustaining Innovation

I came across this interesting book by Robert I. Sutton, consultant and professor at the Stanford Engineering School.

Weird Ideas That Work: 11 1/2 Practices for Promoting, Managing, and Sustaining Innovation

In this book, Sutton, consultant and professor at the Stanford Engineering School, advocates taking a nontraditional approach to innovation and management in this quirky business manual.

He advises taking unorthodox actions, suggesting managers should forget the past, especially successes; hire people who make them uncomfortable and hire slow learners. According to Sutton, these unconventional steps are particularly important when companies are dealing with unusual problems or stuck in a rut. Standard management policy may work for routine work matters, but weird ideas are far more effective when employees are trying to use innovative techniques.

Sutton uses many real-life examples, like Tetley's pioneering round teabags, to show readers how his suggestions can work. But he observes that even companies such as IBM, Lucent and GE, which have been praised for their innovation, devote only a small percentage of their annual budgets to testing new products and services. Sutton's writing is clear and persuasive, and his book takes an insightful look at innovation.

Awesome read!!!!

Saturday, July 25, 2009

Open Source VoIP

I have been looking for a decent open source VoIP project. Here are some good ones I have found so far:

  1. wxCommunicator

    wxCommunicator is a cross platform open source SIP softphone enabling users to make multiple calls, use several accounts, chat and create conferences. It is very configurable and should work with any VoIP provider. It is based on customized sipXtapi client library and wxWidgets 2.8.x GUI library and distributed under GNU GPL version 2 licence.

    More Info

  2. VMukti

    VMukti is leading Asterisk/ Yate enabled p2p Video IP Communications Suite for Web / PSTN. These serverless broadband ready platform enable OS community to save 90% on capital & operating costs over proprietary software for conferencing & Call Center.

    More Info

  3. GibPhone

    GibPhone is a highly extensible VoIP/IM client for the .NET framework that uses a powerful plugin engine to allow for UI extensions and any call control stack / media payload / transport protocol combination.

    More Info

  4. Ekiga

    Ekiga (formely known as GnomeMeeting) is an open source VoIP and video conferencing application for GNOME. Ekiga uses both the H.323 and SIP protocols. It supports many audio and video codecs, and is interoperable with other SIP compliant software and also with Microsoft NetMeeting.

    More Info

  5. TStone

    TStone is a p2p voip system.It can run on windows or linux. It supports h.323 and sip signaling.It is writed by c/c++ code

    More Info

  6. Landell Voip Application

    A Voip GUI write in C#, based in Tapioca-Voip framework, 100% compatible with Gtalk.

    More Info

  7. Peer to Peer Chat in C#

    Using Microsoft's Peer-to-Peer technology and Adrian Moore's encapsulation, to create an easy to use library for chatting.

    More Info

  8. SIP Stack with SIP Proxy

    C# implementation of SIP

    More Info

  9. Sipek SDK

    SipekSDK is a small VoIP Software Development Kit written in C#. The goal of SipekSDK is to offer simple and easy to use API for VoIP developers.

    More Info

  10. My SIP Switch

    A SIP signalling consolidation tool that allows multi-user management of diverse SIP providers and allows central management of any SIP based VoIP service. Included in this project are a SIP Stack, SIP Registrar, SIP Registration UAC, SIP Stateful Proxy, STUN Server and more. The components are all written in C#.

    More Info

Thursday, July 23, 2009

WCF Hosting

Windows Communication Foundation (WCF) Services can be hosted with Internet Information Services (IIS); with the new Windows Activation Service (WAS) installed with IIS 7.0; or with any managed application process including console, Windows Forms, Windows Presentation Foundation (WPF), or managed Windows service applications.

Selecting the right hosting environment for your services is a choice driven largely by deployment requirements related to transport protocol and operating platform.

A summary of hosting options and supported features:

FeatureSelf-HostingIIS HostingWAS Hosting
Executable Process/ App DomainYesYesYes
ActivationManual at startupMessage-basedMessage-based
Idle-Time ManagementNoYesYes
Health MonitoringNoYesYes
Process RecyclingNoYesYes
Management ToolsNoYesYes

A summary of hosting options based on operating platform and communication protocol:

Operating PlatformProtocolHosting Options
Windows XP/SP2HTTPIIS 5.1 or self-host
Named Pipes, TCP, MSMQSelf-host
Windows VistaHTTP, Named Pipes, TCP, MSMQWAS or self-host
Windows Server 2003HTTPIIS 6.0
Named Pipes, TCP, MSMQSelf-host
Windows Longhorn ServerHTTP, Named Pipes, TCP, MSMQIIS 7.0/WAS or self-host

What is Google Latitude?

Google Latitude is Google’s free software program, a new service that helps you to locate your family member or friends through a mobile phone or the Internet. It was released by Google, on Wednesday, Feb 04, 2009.

Google Latitude uses Global Positioning System, WiFi, and cell tower location data to find/ track/ locate people. The extension of Google Maps, the service also uses Google's mapping software for mobile phones.

Google Latitude lets users to manually turn on and off the tracking software; thus it gives users choice when they should be or should not be seen. It also lets users to choose the people who should be able to locate them. For using Google Latitude, the users are required to sign up for the service,

In its blog, Google said, "Fun aside, we recognize the sensitivity of location data, so we've built fine-grained privacy controls right into the application. You not only control exactly who gets to see your location, but you also decide the location that they see."

Steve Lee, product manager for Google Latitude, reported that Google Latitude is currently available to the users in 27 countries. Initially, it will work on most color-screen BlackBerry phones, most phones with Windows Mobile 5.0 or later, most Symbian-based devices such as Nokia smartphones, and G1 phones with updated Android operating system. Eventually, the service will run on Apple's iPhone and iTouch and many Sony Ericsson devices.

Sign up for Google Latitude Service

MSMQ, WCF and IIS: Getting them to play nice

I was doing some research on Hosting my WCF Service in IIS 6. My service supports both synchronous and asynchronous behavior (using msmq).

Below is a summary of hosting options based on operating system platform and communucation protocol:

Operating Platform Protocol Hosting OptionsWindows XP/SP2 HTTP IIS 5.1 or self-host Named Pipes, TCP, MSMQ Self-hostWindows Vista HTTP, Named Pipes, TCP, MSMQ WAS or self-hostWindows Server 2003 HTTP IIS 6.0 Named Pipes, TCP, MSMQ Self-hostWindows “Longhorn” Server HTTP, Named Pipes, TCP, MSMQ IIS 7.0/WAS or self-host

I found this article that contains very good information on getting MSMQ, WCF and IIS 7 (WAS) to play nice.

Also Read: