Infosys Microsoft Alliance and Solutions blog

« January 2008 | Main | March 2008 »

February 29, 2008

Expression Blend issue with Globalized WPF Application

Recently while supporting a project on converting their WPF application for globalization and localization support, we faced an issue in being able to work with Expression Blend 2 Dec preview. We used the recommended approach for globalization and localization and after doing all that Expression Blend failed to load the user controls in design view.

You would get an error like this - "MissingSatelliteAssemblyException: The satellite asembly named yourassemblyname for fallback culture 'en-US' either could not be found or could no be loaded. This is generally a setup problem. Please consider reisntalling or repariring the application."

This was surprising since the specific assembly was already present and the application as such was running fine. This then had to be an Expression Blend specific issue. Usually assembly load issues are related to the path from where the assembly is loaded. In this case, it hence appeared that Expression Blend was most likely looking at its own installation folder to find these files.

This was confired when copying the contents of en-US (inside of bin/debug or bin/release) to Expression Blend's install folder helped solve the issue. Default install path for Expression Blend 2 is - C:\Program Files\Microsoft Expression\Blend 2 December Preview.

Note that the folder en-US and its content need to be copied. Directly copying the assembly doesn't help. As per the globalization logic, it still looks for a folder by the name en-US. Additionally, after copying the folder and assembly, you need to re-start Expression Blend. It doesn't automatically load the assembly is Expression Blend is already running.

Later I found a similar discussion here and so it does looks like a confirmed bug with Expression Blend 2 Dec Preview edition. Hopefully this will get fixed in next CTP.

February 28, 2008

Common platform for building SOA and distributed Microsoft based applications

Microsoft is trying to regain ground in the SOA space. today the challenges that an enterprise
faces when building SOA based applications are the huge effort required to design, build, deploy and manage these SOA based applications. Microsoft has huge range of products like Windows
communication Foundation(WCF),BizTalk Server and other emerging technolgies like Silverlight
and Biztalk services for Supporting SOA development but that is not sufficient, there should
be techniques which will make building these applications simpler. Modelling is identifed as
one of the main areas which needs be covered as part of the application development. Models
are used by everyone in the team during the project life cycle.The business analyst use it
during the requirement and process documentation. The architects create models for schemas,
Services and high level design, developers create models for rules and workflows.
The issue here is each of these models are in silos. Each team members uses his own tool and
framework for modelling which creates communication barrier and these model live in isolation
and there is no end to end solution view of the entire application from the view of business,
architects and developers of the application. This is where i feel the next version of application
platfrom product will provide a unfied view and and common platform for building SOA and distributed based applications which is named as "OSLO" by Mircosoft.

 

 

 

 

Oslo will be the next version of application platfrom products like named Microsoft Visual Studio “10,”  Microsoft System Center “5,” BizTalk Server “6,” BizTalk Services “1” and Microsoft .NET Framework “4.”

Oslo can be termed as Microsoft investment in the space of  SOA and business process management.This will help in the  development of distrubuted applications. The main areas will be Service enabling and model driven architecture.

The main areas where "OSLo" targets for development are

1. Framework- .NetFramework 3.5 which will have Model driven devlopment using Windows communcation Foundation (WCF) and Worklfow foundation (WF)technologies.
2. Server- BizTalk Server 6 will be enhanced further to develop, deploy and manage distrubuted appliation
3.Service-  Biz Talk Services which will have capabilites hosted messaging , identity and workflow capabilites
4.Tools- Visual Studio 10 will provde deep support for model driven design and deployment of composite application
5.Repository- System Center 5, Visual Studio 10 and Biztalk 6 will utilise a common repository for managing code, version and Models

With the advent of "OSLO" where the CTP is expected in 2008, the client will be able to solve a series of problems. The primary is composite applications which were being built with high cost and complexity can be built by also smaller enterprises with application bulit being feasible and economical.

The advantages are

1. Provides a unified platform for software plus Services: Oslo will help in delivering enterprise class, unified platformfor building SOA and Software as Services applications. With the advent of new cloud service modelling, OSLO the organisations can take advantage of this to provide flexibility to deploy applications in-house ,third party hosted or microsoft hosted.
2. Connects the End to End Life Cycle: With multiple products of microsoft as part of OSLO, this will will enable managing end to end composite systems as a whole system rather an individual pieces
3. Enhance the software development process: “Oslo” will greatly simplify the development of composite applications that can be more easily changed, because the underlying model is the application (without handoffs between people or systems involved in the software development
 life cycle).
4.Integrate with what you have : . “Oslo” lets you build on the existing and familiar investments you’re already made in skills and technology on top of the Microsoft SOA platform, while simultaneously opening up a rich new set of capabilities.
“Oslo” enhances and aligns BizTalk Server and the .NET Framework and provides significant enhancements across a range of SOA infrastructure services such as federated identity, messaging and long running activities. “Oslo” also enables  implified service enablement and composition of your existing legacy or packaged applications through rich interoperability support delivered through adapters,  Web services and Web 2.0 protocols.


I guess there is huge anticipation for the OSLO beta release and the organizations looking for SOA via the Microsoft platform are in for some good times

 

 

 

Collaboration - Contextually Communicate with your Connections

We've discussed about contextual integrated information and contextual people connections in the past weeks. The third key pillar of a collaborative ecosystem is communication mechanisms. Today, enterprises have globally dispersed office locations and teams staffed with people across these locations. Enterprise stakeholders are scattered across geographical areas. We have already seen the criticality of contextual integrated information and the correct contextual contacts to talk to. However initiating conversations or meetings with these contacts and sharing information with them is not always as straightforward and seamless as we would like it to be. Thus enabling a seamless and contextual environment that allows you to intuitively connect with your contacts and then painlessly share information with them is an imperative.

So, lets take a step back and try to really figure out how do we connect with people. This is important since it will guide us in forming principles of creating a proper people to people realtime communication and collaboration environment. We typically use one of these modes while communicating with remote co workers:
 - Instant messaging (IM)
 - Voice (deskphone)
 - Audio/Video meet
 - Mobile phone
Also, we have two primary 'methods' of communicating:
 - 1:1 communications: You are talking to just one other person.
 - Multiparty communications: You are in a 'meeting' with multiple attendees.

When we do meet online, we spend a a lot initial time trying to set the right context so that both (or all) attendees are in synch to have a fruitful conversation. Also, since there is no real face to face interaction the factor of interpreting subtle gestures and body language is missed out which is a key part of non verbal communication. There are larger issues when working on a shared artifact in online meetings. In face to face meetings this is not a problem since we can seamlessly move from a document that we are working on, to a whiteboard and back to the document again. The context gets implicitly transferred from document to whiteboard and back again in face to face meetings. Interjections are a natural part of the meeting discussions and are in fact essential for a meaningful dialogue. Now consider all of these in the context of an online meeting where there are either two people in separate geographical areas or a team of say 7 members with people in 3-4 different geographical areas. You begin to get the picture. In fact, most of us have had this experience all the time when attending such meetings. I dont think that we really are happy with the online meeting experiences that we have today. We rightfully would expect them to deliver an experience comparable with face to face meetings. Since meetings are just one aspect of communication, when we need to have adhoc 1:1 discussions with remote co workers or partners, we usually try to reach out to them using one of these methods: IM, Voice, A/V, Mobile etc. However there are lots of times when are unable to reach the person even after trying all these methods in a sequence and finally leave either a voicemail, an offline IM or send an email. So what has happened is that we were counting on having a conversation with someone in realtime but ended up relying on offline methods. Of course, if the person we are wanting to reach is busy or not willing to be disturbed currently, the tools we use to reach out arent going to anyways help. But if we have an urgency or critical need, this needs to be conveyed to the recipient for a as quick as possible response.

Thus, in order to have a collaborative ecosystem, we would need make sure that whatever our mode of communication (1:1 or multi party), we have to account for and address the pitfalls detailed above. The intent would be to provide an experience as close as possible like the one we have in face to face meets. A lot of UC (unified communications) products available today address these areas. Using them in the right context and extending them to provide a seamless meeting workspace that allows for multiple people to view and share the context as well as work on it in real time is an imperative. We have already seen how to leverage contextual integrated information and get the right contextual connections in the previous blogs. Channelizing these two aspects of an collaborative ecosystem into the right communication mechanisms completes the picture of the collaborative ecosystem.

February 26, 2008

Querying Store Procedures(SP) returning Multiple Result Sets in LINQ to SQL (L2S)

L2S (working with designer in VS2008) works fine as long as SPs return data from a single table; problem arises when the SP returns multiple result sets and things become complicated when the data in the result sets is from a combination of tables.

Store Procedure modeled on NorthWind Database returning multiple results sets -

ALTER PROCEDURE [dbo].MySP   

AS

BEGIN   

    SET NOCOUNT ON;

 

    select Employees.FirstName,Employees.LastName,[Orders].OrderId,[Order Details].UnitPrice

    from Employees,[Orders],[Order Details]

    where Employees.EmployeeId = Orders.EmployeeId  and Orders.OrderId = [Order Details].OrderId

 

    select o.OrderId,o.OrderDate,d.Quantity,p.ProductName,s.CompanyName

    from Orders o,[Order Details] d,Products p,Suppliers s

    where o.OrderID = d.OrderID and d.ProductID = p.ProductId and p.SupplierID = s.SupplierID

END

When we drag and drop the SP onto the designer, the method created by SP looks similar like this 

[Function(Name="dbo.MySP")]

public ISingleResult<MySPResult> MySP1()

{

       IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));

            return ((ISingleResult<MySP1Result>)(result.ReturnValue));

}

The corresponding MySPResult class -

public partial class MySPResult

    {

        private string _FirstName;       

        private string _LastName;       

        private int _OrderId;       

        private decimal _UnitPrice;

 

        public MySPResult()

        {

        }

        [Column(Storage="_FirstName", DbType="NVarChar(10) NOT NULL", CanBeNull=false)]

        public string FirstName

        {

            get

            {

                return this._FirstName;

            }

            set

            {

                if ((this._FirstName != value))

                {

                    this._FirstName = value;

                }

            }

        }

        [Column(Storage="_LastName", DbType="NVarChar(20) NOT NULL", CanBeNull=false)]

        public string LastName

        {

            get

            {

                return this._LastName;

            }

            set

            {

                if ((this._LastName != value))

                {

                    this._LastName = value;

                }

            }

        }

        [Column(Storage="_OrderId", DbType="Int NOT NULL")]

        public int OrderId

        {

            get

            {

                return this._OrderId;

            }

            set

            {

                if ((this._OrderId != value))

                {

                    this._OrderId = value;

                }

            }

        }

        [Column(Storage="_UnitPrice", DbType="Money NOT NULL")]

        public decimal UnitPrice

        {

            get

            {

                return this._UnitPrice;

            }

            set

            {

                if ((this._UnitPrice != value))

                {

                    this._UnitPrice = value;

                }

            }

        }

    }

When the SP is called from the code, it will return data resulting only from the first select statement. To ensure that SP returns data from all the result sets from the SP certain changes needs to be done.

To begin with let us create another entity in the designer.cs say MySP1Result. The properties in this class will be same as the output from the second select statement in the SP.

public partial class MySP1Result

    {       

        private int _OrderId;       

        private System.Nullable<System.DateTime> _OrderDate;       

        private short _Quantity;       

        private string _ProductName;       

        private string _CompanyName;

 

        public MySP1Result()

        {

        }

 

        [Column(Storage="_OrderId", DbType="Int NOT NULL")]

        public int OrderId

        {

            get

            {

                return this._OrderId;

            }

            set

            {

                if ((this._OrderId != value))

                {

                    this._OrderId = value;

                }

            }

        }

 

        [Column(Storage="_OrderDate", DbType="DateTime")]

        public System.Nullable<System.DateTime> OrderDate

        {

            get

            {

                return this._OrderDate;

            }

            set

            {

                if ((this._OrderDate != value))

                {

                    this._OrderDate = value;

                }

            }

        }

 

        [Column(Storage="_Quantity", DbType="SmallInt NOT NULL")]

        public short Quantity

        {

            get

            {

                return this._Quantity;

            }

            set

            {

                if ((this._Quantity != value))

                {

                    this._Quantity = value;

                }

            }

        }

 

        [Column(Storage="_ProductName", DbType="NVarChar(40) NOT NULL", CanBeNull=false)]

        public string ProductName

        {

            get

            {

                return this._ProductName;

            }

            set

            {

                if ((this._ProductName != value))

                {

                    this._ProductName = value;

                }

            }

        }

 

        [Column(Storage="_CompanyName", DbType="NVarChar(40) NOT NULL", CanBeNull=false)]

        public string CompanyName

        {

            get

            {

                return this._CompanyName;

            }

            set

            {

                if ((this._CompanyName != value))

                {

                    this._CompanyName = value;

                }

            }

        }

    }

Next we need to change the return type of MySP method. By default return type is ISingleResult<T>. The return type needs to be changed to IMultipleResults (this indicates that SP is returning multiple result sets) and the method also needs to be adorned with attributes which indicate the types returned by the SP.

[Function(Name="dbo.MySP")]

[ResultType(typeof(MySPResult))]

[ResultType(typeof(MySP1Result))]

public IMultipleResults MySP()

{

            IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));

            return (IMultipleResults)(result.ReturnValue);

}

The following code retrieves the results by executing the SP

 using(NWDBDataContext nw = new NWDBDataContext())

 {

     nw.DeferredLoadingEnabled = false;

     var result = nw.MySP(); 

     foreach(var o in result.GetResult<MySPResult>())

     {

        //do something

     }

     foreach(var o in result.GetResult<MySP1Result>())

     {

        //do something

     }

 }

Note: The definitive LINQ Guide suggests to use ExecuteMethodCallWithMultipleResults for retrieving multiple result sets. But it looks like this method has been removed from the RTM version of Orcas and querying works fine with ExecuteMethodCall with additional changes mentioned.

Additional Relational Metadata for artifacts in MOSS

Organizations which select Microsoft Office SharePoint Server 2007 (MOSS 2007) for managing artifacts (like documents, records) often leverage the out of the box (OOTB) features available in MOSS like libraries, OOTB Workflows, version management, workspaces, etc for the same. When it comes to the metadata, often there might be requirement to attach additional relational metadata in addition to the flat/standard metadata offered by MOSS. E.g. Documents/Records may have to be associated with different hierarchies like ABC.doc may need to be part of India zone and US zone drilling down through the structure, so that the document is retrieved when queried on data across both the zones. 

We (myself and one of my collegue Prasana Srinivasan) did a small exercise and would like share the custom approach we took to add additional hierarchical metadata which involved a custom database and ASPX Page. We will have this as a 2 part series.

In the solution we would take a sample document for attaching the hierarchical metadata. Also we have defined a custom DB schema as shown below.

The database can handle one additional metadata. However this can be extended to take care of any number of additional metadata.

Quick one liner description of the tables

Hierarchy Master – Table contains master values of the hierarchical metadata like location, Division, subdivision.

Hierarchy Header – Table contains details about the hierarchy header values like legal entity, location. This table values are populated in the combo box for selection.

Hierarchy Mapping –    Table provides the mapping details of Header with the hierarchy Master. In this table the master values are grouped into a specific header.

Document Master – Table specifies the header values of the Documents.

Document Details – Table Contains the extended properties of the document with respect to the mapping Id from hierarchy Mapping (metadata values updated by the user against the hierarchy master value).

Note: This is just representative schema for the demonstration purpose and users can have a schema as per their requirement

Rest we will see in the next part of the series.

Gupta to .Net migration

I have been working on few opportunites on Gupta to .Net migration. In most of the cases the client was thinking on a complete rewrite from Gupta to .Net 2.0.

During my research on vendors who can provide tools/ Services for the gupta code migration to .Net, i can across a vendor known as Ice Teagroup, which has tools and expertise in the code migration.

ITG provides licensing of the tool as well as services for various phases during the migration project life cycle.

ITG has a tool known as PPJ inventory analyser which helps in the analysis of the exisintg Gupta application.

PPJ Inventory will open your top level applications and all included libraries and collect the following information:

· number of items

· included libraries

· included dynalibs

· external functions

· images and bitmaps

 

PPJ Inventory will also add warnings if certain items of the SAL language are used which are known to generate more or less manual interaction or cannot be ported at all.

This tool needs an Gupta runtime for the tool to run. The tool has an very intutive GUI which requires the gupta code as an input for the report to be generated. The report generated will be in a XML format.

The translation process is straighforward and quite flexible.

Ice Porter™ loads the source SAL application using the CDK, parses all expressions into expression trees, loads and binds all known assemblies (including modules that have already been ported and custom plugins), analyzes all references and relationships, re-generates the application into a CodeDOM structure (XML-Like Code Document Object Model), optimizes the resulting structures, and finally feeds the final CodeDOM to code renderers that generate the final source code in reliable and consistent manner.

Throughout the entire process, the tool generates special events that can be handled by custom-developed translation filters.Translation filters can modify and enhance the translation process at every step.

Our translation technology can be adapted virtually to any requirement.Migration Support Library 

The migration support library is called PPJ Framework™.

All migration solutions have a support library. Some may be better or more extensive than others, but all automated,semi-automated, or manual conversion approaches have one. (If someone from marketing tells you otherwise, don't believe them).

Our library is entirely written in C# and it directly extends native types and native controls.

The only third party component that we use is the FlexGrid .NET, for which we have obtained a OEM license. The database layer in the PPJ Framework is entirely based on ADO.NET and can use any ADO.NET compliant driver.Our library is as thin and modular as possible. The Visual Toolchest implementation is in a separate module, the XSal2  implementation is also in a separate module, and so is the M!Table implementation and the reporting engine. This approach  allows you to deploy only the modules that are needed by the project.

You also get the full C# source code for free, as part of the maintenance agreement.
 
Customizations
 
Using some of the unique Translation Filters technology, we can add any kind of additional processing logic to the translation of the Gupta code and the generation of the new .NET code.

In addition to our standard customizable filters, we can custom develop personalized rules to normalize the UI of the application, extract documentation in a specific format, generate ad-hoc wrappers to fit in a SOA architecure, change the naming convention, and much more. There is almost no limit to what we can do.

Customers can also develop their own translation filters directly in C# or VB.NET.

The cost of the tool is very competative and the services offered are cheaper and are right fit for a automated code migration to .Net technology
 

 

 

 

Webinar on Advanced Collaborative Supply Management

A webinar on current trends and issues of sourcing and procurements in high-tech and manufacturing sectors. This webinar showcases Infosys's Advnaced Collarborative Supply Management (ACSM) Solution.

Interact with experts from Infosys, AMR Research and Microsoft on Wednesday, March 5, 2008 at 1300 EDT.

For more details and registrations http://www.infosys.com/newsroom/events/2008/ACSM-webinar.asp

February 25, 2008

Group By Many/Multiple Criteria using LINQ to SQL (L2S)

Developers may find it annoying for not finding an out of the box query operator in L2S to group by many/multiple criteria, which is used very frequently in T-SQL queries.  No sweat, there is an easy way out, will try illustrate the same here.

SP written in T-SQL

SELECT

                  InventoryYear.InventoryYearID,
                  SUM(ActivityEmission.CanonicalEmissionAmount) AS CanonicalEmissionAmount,
                  ActivityEmission.CanonicalUnitId,
                  ActivityEmission.GasId
            FROM
                  InventoryYear INNER JOIN EntitySUISInventoryYear
            ON
                  InventoryYear.EntityID = @EntityId AND
                  InventoryYear.EntityID = EntitySUISInventoryYear.EntityID INNER JOIN SUIS
            ON
                  SUIS.InventoryTypeID = @InventoryTypeId AND EntitySUISInventoryYear.SUISID = SUIS.SUISID INNER JOIN ActivitySource
            ON
                  ActivitySource.EntityID = InventoryYear.EntityID INNER JOIN ActivityEmission     
           
ON
                  ActivityEmission.ActivitySourceID = ActivitySource.ActivitySourceID INNER JOIN EntitySUISInventoryYear ESIY
            ON
                  ESIY.EntitySUISInventoryYearID = EntitySUISInventoryYear.EntitySUISInventoryYearID AND ESIY.IsComplete = 1
      GROUP BY
            InventoryYear.InventoryYearID,   
           
ActivityEmission.CanonicalUnitId,
            ActivityEmission.GasId

The same can be written in L2S with as follows using Anonymous types:

Let me create a business object called Emission which will store the results retrieved from the query

 public class Emission

    {       

        public int InvId {get;set;}

        public int CanId {get;set;}

        public int GasID {get;set;}

        public decimal? GasAmt {get;set;}       

    }

L2S query to retrieve the results 

 List<Emission> emission = (from i in InventoryYears

              from j in EntitySUISInventoryYears

              from k in ActivityEmissions

              from l in ActivitySources

              from m in SUIs                  

              where  i.EntityID == j.EntityID && i.EntityID == 1 &&

                  m.InventoryTypeID == 1 && j.SUISID == m.SUISID &&

                  l.EntityID == i.EntityID &&

                  k .ActivitySourceID == l.ActivitySourceID &&

                  j.IsComplete == true &&

                  j.EntitySUISInventoryYearID == j.EntitySUISInventoryYearID

                  group k by new {i.InventoryYearID,k.GasID,k.CanonicalUnitID} into grouping

                  select new Emission {InvId=grouping.Key.InventoryYearID,GasID=grouping.Key.GasID,

                      CanId=grouping.Key.CanonicalUnitID,GasAmt = grouping.Sum(c=>c.CanonicalEmissionAmount)}).ToList();

The key here is the way data is grouped. We need to just group the columns (the columns grouped using group by in T-SQL) into a grouping variable (in this case it is grouping). Run a select query on the grouping variable (grouping variable will be of the type IEnumerable<T>, in this case it will be IEnumerable<ActivityEmissions>), to select the columns needed.

Note: The intention here was to create a T-SQL group by multiple criteria equivalent in L2S. I had some trouble using join and hence resorted to where, by default where clause is internally mapped to inner joins. Opinions are welcome to make the L2S query better.

February 24, 2008

Silverlight 2.0 Tutorials released

The wait for developing some really fantastic and rich web applications is likely to end soon. Excited Developers have their fingers crossed for the release of Silverlight 2.0. You can get a feel of building Silverlight 2.0 applications on Scott Guthrie's Blog. He has posted a few basic tutorials on this, though the software is not yet released. If you are a WPF developer, you are absolutely ready for the ride.

Keep watching this space for more!

 

February 22, 2008

Microsoft interoperability principles

MS has published far reaching interoperability pinciples. Check the interoperability principles at http://www.microsoft.com/interop/principles/default.mspx

These principles touch all high volume products ( operating systems (server and desktop), Database(SQL 2008), Office 2007, Exchange 2007, MOSS 2007 and future version of these products).

Broadly principles are
1. open connections to MS products through open protocols, open APIs etc.,
2. Support for standards
3. Data Portability through support of open formats
4. Open Engagement with customers, open source and industry

Looks like MS is promising one more time that it is moving towards "openness" in their products and technologies. There were many promises earlier but this is the first time principles are enunciated in such a clear manner.

May be it is a narrow prism to see this announcement but coming just before the ISO ballot resultion meeting from Feb 25 th to 29th to decide on Open XML raises few hackles.

Interestingly Ray Ozzie calls it as "very important strategic shift for every engineer at MS". It would be interesting to see how this promise would translate into implementation in the products.

- What do you think why MS is trying to be more open than it was before?

- Why it has to assure the community about its commitment to "openness"?

- Distinction between interoperability and "openness" as seen from this announcement?

- Does this mean Open source developers wont be sued who extend MS products?

- Does openness make MS products more vulnerable? build bridges and then later on replace with competing products?

- What are the implications of Reasoable and Non Discriminatory (RAND) license means?

What do you think. Let me know your opinion.

 

February 20, 2008

Controlling home appliances from outside - “I can be home when I’m not.”

Concerned about conserving energy? need to change the temperature of your air conditioner as you drive back home? Want to notify that you are on vacation and ask your lights turn on and off at specified time?

Now, you can do it through your mobile phones, PDAs or either home-based or office PC.

Its possible. .NETMicroframework and c# make it easy.

 

The Microsoft .NET Micro Framework

The Microsoft .NET Micro Framework combines the reliability and efficiency of managed code with the premier development tools of Microsoft Visual Studio to deliver exceptional productivity for developing embedded applications on small devices. The .NET Micro Framework is supported by a number of ARM7-and ARM9-based processors. Minimum of 256KB RAM and 512K Flash/ROM required for development and deployment,a memory management unit is not mandatory.

The Z-Wave Technology

Z-Wave, which was codified through an industry alliance in 2005, is a wireless radio frequency (RF)-based communications standard that makes remote control effective and practical for homes of any size. The protocol, which is embedded in a microprocessor chip and built into a module or device along with memory – flash memory, RAM, or both – transforms a stand-alone appliance into an intelligent networked device that can be controlled and monitored wirelessly. Z-Wave delivers high-quality networking at a fraction of the cost of other similar technologies by focusing on narrow bandwidth applications and negating the need for costly hardware by employing innovative software solutions like .NET microframework

A module with microcontroller and Z-wave ethernet gateway

Vizia RF Foyer is one such developed by Leviton manufacturing and its partners.

Vizia RF Foyer, the industry’s first Z-Wave-compliant Ethernet gateway. The Vizia RF Foyer connects to an Internet-linked PC or laptop through the computer’s Ethernet port and transmits signals to a Z-Wave home control network. Peer-to-peer mesh networks based on the .NET Micro Framework, the Vizia RF Foyer, and the Z-Wave protocol overcome the performance issues and high cost of earlier generations of wireless home control systems.

z-wave.jpg 

Each Vizia RF Foyer module is equipped with a two-way radio chip that it uses to communicate with modules, called nodes, in the network. Z-Wave command signals travel from node to node along the network to their final destination. If any form of interference blocks the signal along the way (for example, a wall or a large appliance such as a refrigerator), the signal is automatically rerouted through other nodes until it reaches its destination. The “self-healing” feature of the Z-Wave mesh network lends it unparalleled reliability.

An embedded application, such as the one in the Vizia RF Foyer, customarily takes approximately one year to develop. However, with the .NET Micro Framework, Leviton’s software partner ControlThink was able to produce a working proof of concept in three days and, porting its existing .Net code base, completed the final application within three months.

 

 

Licensing Model in SharePoint

There has been lot of confusion on the licensing information in SharePoint like what comes free, what is the licensed part of the product, what are the various client access license (CALs) options available. The following diagram helps clarify most of the doubts one will have around this.

Licensing.png 

Source: Microsoft Documentation 

The bottom layer shows the features available with WSS 3.0 which comes free of cost. The intermediate layer shows the features of MOSS available with Basic Client Access License (CAL). Most of the content management is possible with the basic client access license (CAL). However to leverage other services like that of accessing line of business application data, Excel Services or Form Services for viewing Infopath Forms through Browser, Additional Client Access Licenses will be required which is shown as the top most layer in the figure.

Note: In case of Internet Portals there is no concept of CALs and the licensing cost for MOSS is close to 8 folds the cost of MOSS server product.

 

Collaboration - The importance of contextual integrated information

Continuing the Collaboration series, we will talk about Integrated Contextual Information today. My previous blog talked about the importance of people connections in the right context. It would be good to revisit the meaning of a context on that blog before we go ahead. Obviously if you have the right people connections for executing on your work, you need the right set of information to share and discuss with those people to get some actual collaboration done.

The biggest and most vexing problem with information today is that it is available everywhere. It is ubiquitous. Information overload is no longer a futuristic term but we are experiencing it now. Think back to an experience where you were hunting for information on a particular topic. Think of the places you ran a search tool on, folders you clicked on, documents you browsed through before you finally were able to create a neat single document / email / text file etc that captured all relevant required information from different sources. And we are not even talking of information that is, say embedded inside a line of business application, a video file or archived somewhere and so on!

Thus, there is a pressing need to:
 - Integrate information from a vast variety of sources, and
 - Filter that integrated information for a given context.

So, what's the best way to go about doing this? At the very outset we must, of course, understand the possible sources of information in an enterprise. That is, what are the various places you would find relevant business information inside a enterprise? To keep it simple and easy to understand, we can divide the information store into two big buckets:
 - Structured Information Stores
 - Unstructured Information Stores

The next immediate question could be: What is the basis for such a segregation? The answer is the way information is stored. When we think of structured information stores, it typically means that the information is stored in 'well known' way. It is classified and tagged in that store so that it is easy to manage and retrieve. The information in a structured store always has some explicit or implicit metadata associated with it. Thus, stores like well known databases such as SQL Server, Oracle, Sybase; ERP systems like SAP, CRM systems, document management systems like Documentum etc are all structures information stores. In contrast, unstructured information stores do not exhibit such a robust and disciplined way of information storage. They are mostly 'anything goes' kind of stores. Various file formats are just stored as dumped files on a storage media in an unstructured information store. We all have some kind of 'miscellaneous' folder full of information debris, which apart from the slightly insulting moniker is still a rich source of information to help get work done. Another key point to keep in mind is that we are just not looking at the enterprise servers (i.e. the Intranet) for this information. Relevant business data can be found in other places such as user's desktops or laptops, mobile devices and of course the Internet.

Another important reason for doing the segregation above is that there are fundamentally different ways of extracting relevant information from structured and unstructured stores. We need to understand how to gather information from both of these sources, integrate the information in a common binding business context and then present that integrated contextual information to the user. Structured Information sources are places from where information is easier to retrieve since they provide well known ways of extracting information from their stores. These could be API / SDK's, Web Services or even descriptive logs. For unstructured information stores, crawling and indexing them through a search engine is an optimal way of retrieving relevant data. Another option could be using the properties of the file system where unstructured information is stored. In both of these cases, one of the key challenges is taking care of security permissions of the requesting user. Since the end user of the information here is viewing structured data in an entirely different application, her permissions need to be matched with the permission of the actual store before returning back contextual information. Another key challenge is performance. Since a lot of information stores are going to be queried, performance issues have to be addressed upfront.

The business benefit of contextual integrated information is illustrated very easily. Just substitute information for people in this example in the previous blog and you will see it. You may have seen the pattern now with both these blogs, that is how for effective collaboration we require people connections and information in the right context. There is of course one more key part to this and that is Communication mechanisms, which will be covered in a later post.

February 16, 2008

Silverlight - Dynamic Languages

Microsoft has announced that Silverlight applications can be built using dynamic languages such as IronPython, IronRuby and Managed JScript. It's something really interesting because it provides an opportunity for the developers of any of these languages to build exciting Silverlight Applications.

Dynamic languages perform tasks at execution time without recompiling the source code. One of the reasons they are called "Dynamic" is that the typing in these languages is dynamic and in the source code there will not be any explicitly defined types. Types are created dynamically at execution time. With Silverlight 2.0, we have a DLR (Dynamic Language Runtime) which will provide a compiler to support each of these languages. It is executed above the CLR. It generates the code at execution time and makes the dynamic typing.

So what does this mean for a developer? Well! If we author the source code and run the Silverlight application and while the application is running, if we change the source code and refresh the browser, the changes are reflected in the application. Sounds very interesting, isn't it? Moreover, the Dynamic language initiative from Microsoft is not limited to Silverlight. The future releases of ASP .NET are likely to support these dynamic languages (IronPython in particular) for developing web applications. Interested developers can try this out using the ASP .NET Futures package (CTP).

ASP .NET AJAX - XML Script

Most of the developers today understand that it is all about authoring good JavaScript code to create good ASP .NET AJAX applications. It is infact true. However, there is an attempt from Microsoft to make this AJAX programming a much better experience in future. XML Script is a step in that direction. So what is XML Script?

XML Script is a declarative language that is added to the ASP .NET markup code. It is used to create the JavaScript objects at runtime and set the necessary properties and behavior for them. In Web based programming, we can separate the markup and style by creating a CSS file. In ASP .NET programming we can separate design and behavior in the markup file (.aspx) and code-behind file (.aspx.cs or .aspx.vb) respectively. XML Script does exactly the same to instantiate JavaScript components by using the declarative script language.

So what is so good about XML Script? Here are a few advantages:

- Being declarative itself one advantage. Will have semantics.
- Designers can be easily built for declarative code.
- Any declarative language is more expressive. This is no Exception!
- Avoids the need for us to deal with multiple event handlers, but keeping the object property values synchronized

XML Script currently is a part of the ASP .NET Futures package. It is not officially supported by Microsoft as of now. However, it will be good for the apetite of a programmer. The ASP .NET Futures package (CTP) can be downloaded from here.

Watch out this space for more on this.

February 14, 2008

Debugging WPF Databinding errors

For an application I was working on recently, I had a tough time with debugging some of the data binding issues. Then I came across this excellent blog. My personal favorite is the new Trace Level feature of .NET 3.5. For some reason, I could not get the second option to work.

February 12, 2008

Sub Site V/s Site Collections

Often there is a request which keeps coming asking for guidelines to select between sub site and site collections. Some of the following points can be kept in mind while taking a decision between the 2

  1. How big the site will be. Will it require a separate content DB
  2. Does this site require separate security settings, WebParts Set, Features, etc to be done
  3. Does it have separate backup/restore schedules, requirements?
  4. Mandate that customizations should be minimal

Site Collection by definition is a logical grouping which will contain a hierarchical set of sites/sub sites that are managed together. Sites within a site collection will have common features, Security settings, templates, content types, and Web Parts, and they often share a common navigation. All sites in a site collection are stored together in the same SQL database.

So if one wants a common management of the above features then Site Collection is the way to go. But one also needs to understand that an induvidual Sub Site cannot be backed up separately and backup happens at the Site Collection level.

However if one needs independent management of these features or different back up strategies or separate Content DBs, then the approach will be to go for Separate Site Collections. However, there will be issues related to Naigation as Navigation scope is at Site Collection Level. The deafult SiteMap Provider will have to be replaced with a custom Site Map Provider which will have a custom logic for the Navigation requirements.

February 07, 2008

Collaboration - Making the right People Connections

Collaboration involves a coming together of many perspectives as this blog explains.  Connecting to the right set of people is one imperative to build a Collaborative ecosystem. In some cases we would know who we want to connect to but do we always know if they are available or what is the best way to reach them? You defintely wouldnt like to talk to that person's voice mail time and again, right? And then there are cases where we actually are clueless about who to approach for a problem resolution! Or who else is doing work similar to mine? If there is some one like that I would definitely like to connect to them. To understand how to enable such an ecosystem, we need to study how we make real world people connections.

Typically we always have a core set or group of people we interact with in day to day work. The group may change for different roles that we play that themselves depend on the duties we perform. A group could be one that we ourselves formed or were made part of and is kind of a default group for that particular role that we play. For e.g. I may have a UC group for the UC initiatives that I am part of. I can be part of another group that focuses on Collaboration and so on. So how are the groups distinctly identified? From the focus area that they are driving - more generically, there is a 'context' that each group has and is identified with. We closely identify people in a group under that context - be it UC, Collaboration, web programming, pre sales, marketing etc. However that same person may be associated in a totally different context by a third person. For e.g., I will be identified in the UC context by a peer in the UC group while I will be identified in the manager context by some one who reports to me. Thus, 'context' is very something very individual to a particular person and it can help identify people connections for that individual. However, for a context to be helpful in such a way, it should be available when the decision to match and generate possible contextual connections is being made. That means that the business context under which we work needs to be understood, stored and shared. This is extremely critical. Another critical part is the mode of communication that you use to actually reach a contact if the contact is actually available and willing to be invited to a conversation / chat.

Thus, our connections can be grouped into 3 sets:
 - A Workspace Contact Set that consists of people and/or groups that we are directly part of - You either created these groups/contacts yourself or were invited to be a contact.
 - A Contextual Contact Set that consists of people and/or groups that are related to the work we are doing - Your work/business context helped to arive at these connections.
The two above are mutually exclusive. There is a third group and that is:
 - A 2nd Degree Contact Set that consists of contacts of your contacts. These are people not in your Workspace set or Contextual set. However they could be contacts of people in your Workspace and/or Contextual sets. A lot of social networking sites use this paradigm today to build connections. Sites which excel in this are building huge bases of registered members who derive real benefits from the possibilities these sites have to offer.

Now, let us revisit the questions that we raised at the beginning of this blog:
 - Q: I have a problem. Who can help me solve it? Answer - your problem becomes a very specific embodiment of your general context. This along with your generic context can help identify people matches, that is, people who are doing / have done similar work or resolved similar problems.
 - Q: I would like to know if there are any people in my organization (or partner organizations) who are doing work on lines similar to mine. Answer - again, your context.
Obviously, the Contextual Contact Set is a powerful paradigm. However it is not the only way to build context based connections. Your Workspace Contact Set can help you directly connect with people you may be interested in connecting to - the 2nd Degree Contact for e.g.
 - Q: I have a contact. Is she available right now? What is the best way to reach her? Answer - this is more in the realm of unified communications. You would need to know if the contact is available (presence) and willing to be contacted for a chat / video call right now. If not so, you may need to know of a more non intrusive way of reaching her.

So, how does this all translate to business benefits? Let me take a brief example to illustrate.Consider the role of an insurance underwriter who evaluates incoming insurance policy applications. The underwriter's job is to arrive at a risk profile of the policy applicant and give a decision on the policy: not granted, granted or granted with conditions. For this, the underwriter needs to look at a lot of information from a lot of different places (which is a topic for another post, integrated contextual information being another imperative for a Collaborative ecosystem). The underwriter also needs to connect with people to assist him/her with parts of the application. These will be in the underwriter's Workspace Contact set. Though underwriting is a well defined workflow in the insurance industry, there are times when the encoded business workflows may not help due to some peculiar characteristics of the policy application. This may call for the underwriter to request deviations from the standard process flow. At this point the underwriter would want to connect with other underwriters (or some other role) in the organization who would have worked on similar policies to understand possible deviations and next steps. Where would he/she get such contacts from? You guessed it - the Contextual Contact set. In the absence of such a targeted contact support system, the underwriter may need to go through a lot of pain before arriving at a resolution. Try to extrapolate such scenarios to your own day to day work life and you will immediately start seeing benefits of such a collaborative ecosystem.