Friday, 14 December 2007

XMI and OIM - Standardize your UML models

For last so many days, I was playing with a format without knowing what it is actually. Now then my urgent work is over, I got a chance to look into it.

XMI – The XML Metadata Interchange format. I am not sure if you have come across such extension before. But its there and is surely would help in development of future tools. XMI is a specification that contains details about metadata. This is very closely linked to UML and thus, is capable of storing UML diagrams within it in an XML format. It integrates 3 industry standards: XML (for storing metadata), UML (stores UML details) and MOF (Meta Object Facility, which is an OMG language for specifying meta models – even I need to read on this further :)).

This specification can allow sharing of diagrams between various designing tools and thus help in standardizing system designs. This can be used by tools working across platforms, as it a simple XML file at the base level. The only issue that pundits in this field feel is its extensibility. But its specifications are evolving and this would soon become an important part of designing tools.

In the same field is OIM – Microsoft’s Open Information Model. This model also provides XML based UML metadata storage. Not much detail is available, but it was released much earlier and is much more extensible than XMI. More details on this later.

In a nutshell, there are specifications available like OIM and XMI to standardize UML models to ensure cross-platform and cross-tool access.

Friday, 7 September 2007

.NET Security's Level Of Trust

Recently, I ran into an interesting problem. Its not too big but figuring it out is very frustrating and you hardly find straight forward answers. So, here it is...

PROBLEM:

When I ran my own created installer, which is well tested and works everywhere, I received an exception:

"Unable to create an instance of the type —> Exception has been thrown by the target of an invocation —> That assembly does not allow partially trusted callers."

SOLUTION:

As a Developer:

If you are a developer and don't want your customers to run into this problem, you need to mark your assemblies with the attribute AllowPartiallyTrustedCallersAttribute, the attribute should be declared at the assembly level (usually declared at Assemblyinfo.cs or Assemblyinfo.vb).

C#:
[assembly:AllowPartiallyTrustedCallers]

Visual Basic:
assembly:AllowPartiallyTrustedCallers

This allows partially trusted callers to use your assembly.

As a User:

If you have received an assembly or installer and you are receiving this error, then you need to change .NET security settings of your machine either for this application only or for the complete machine (depends on your requirement :-)).

To provide full trust to the applications running on your machine using .NET, following are the steps (to change security settings of complete machine):

1. Go to Control Panel --> Administrative Tools --> Microsoft .NET Framework 2.0 Configuration.
2. Go to .NET Framework 2.0 Configuration --> My Computer --> Runtime Security Policy.
3. Right click on Runtime Security Policy and click Adjust Security. Security Adjustment Wizard opens.
4. Select “Make changes to this computer”, and click Next.
5. Select My Computer and choose Full Trust, and click Next.
6. Click Finish.

After providing full trust to My Computer, you can then use the application.

Hope that would save some precious time of yours :)

- Mohit

Monday, 3 September 2007

Six Sigma Backed By Business Intelligence

Six Sigma is one of the fastest and best management techniques available today. It is well tried and tested, and has been highly effective and productive for organizations such as General Electric.

Business Intelligence, on the other hand, is making decision making highly effective by providing detailed information in various customized formats available anywhere and anytime. In simple words, it’s making businesses highly intelligent.

Six Sigma’s effectiveness is directly proportional to how much data it interprets, find out flaws and enhancement options by visualizing data in various formats and how it makes it decisions. This is where Business Intelligence can help make it much more effective, result oriented and ensure long-term success of its projects.

Business Intelligence can help Six Sigma in two ways: Before initiating an effort and after it has been initiated.

Phase 1: Before an effort is initiated

Based on current available data of company, customers that it has served and areas to be targeted, Business Intelligence can figure out patterns and practices that have helped organization serve better along with flaws in the processes that were followed. It can also help to figure out customers, distribution areas and requirement levels that can be targeted. Business Intelligence can also analyze Market data so as to present best possible results of analysis.

Six Sigma thrives on this information. Lack of it can highly degrade the performance levels of any business. Six Sigma does not focus on removing errors in individual products, rather than it concentrates on improving root processes so as those errors never occur again. Because of this, gaining an insight on this information is essential. Six Sigma projects do not move ahead without this information and Business Intelligence can significantly help arranging this data in a better and faster manner.

Phase 2: After an effort is initiated

Once the effort begins, Six Sigma starts looking at project specific details. Following is the process that Six Sigma follows to execute a project:

Phase 2.1: Define

Six Sigma now needs to define the best processes for the project that can produce maximum returns and is feasible in terms of budget, resources and time. In doing so, it’s essential to know the customers, processes of the company, capabilities, competitors, current market etc. Business Intelligence can significantly help in gathering and quantifying this information from various data sources. It can also predict the way things would shape up based on the analysis of data of past few years. Business Intelligence can set a level of standard for delivering the products based on customers’ acceptance of previous relative products in markets and customers’ expectations.

Phase 2.2: Measure

Once the requirements are defined, Six Sigma’s next step is to have a measure of all the processes. As Six Sigma thrives on numbers for its survival, measuring turns out to be one of the most crucial steps for it to make the project successful. It aims at performance standards that ultimately help to define customer satisfaction, all in terms of numbers. Business Intelligence can point out what processes carry more importance by taking a deep dive into business performance. It can provide consolidated and accurate data corresponding to metrics and can help figure out noise in the system. Information can also be obtained at several levels of detail, based on the requirement, thus allowing effective decision making.

Phase 2.3: Analyze

In an ongoing effort, it’s pretty much essential to keep analyzing data so as to remove the root causes of defects and move towards improving sigma value. Business Intelligence can help identify defects and its origin by providing variations in data. Variations can be identified at various depths based on data available in similar conditions or looking into historical data over a period. Business Intelligence can also allow prioritization of few things that contributes more towards sigma value, and then keep close track on its number.

Phase 2.4: Improve and Control

After the initial work, Business Intelligence system is already in place to keep measuring and analyzing activities, control them and continuously improve the sigma factor. At this stage, several new techniques and methodologies are introduced to cope up with problems and improve the processes. While it becomes difficult for Six Sigma’s black belts to dynamically handle such processes, because they need to go through a full cycle of defining, measuring, analyzing and implementing them. Business Intelligence systems can gracefully and in a faster way allow such activities to be carried out, by having quick and better access to not just information available prior to start of this initiative but also of current activities that allows better blending of procedures. Better monitoring and communication is an interim part of successful Business Intelligence systems.

Conclusion

While Six Sigma is a proven management methodology, it requires highly dedicated team who needs to put in a lot of effort to make it successful. Business Intelligence can help put this methodology into practice very quickly, efficiently and allow better use of information. Six Sigma manages an initiative well, and Business Intelligence can manage Six Sigma nicely.

Reference

http://www.businessobjects.com/solutions/enterprise_solutions/sixsigma.asp

I felt disappointed when I came to know that this has already been implemented, but this is a great effort and would serve well for businesses in the future.

Tuesday, 19 June 2007

String Collection Editor for Property Grid

It almost took me a day to figure out how to create a custom editor that can collect string values. Various techniques are available at forums, but it did not help me much. Here is the problem I faced followed by a simple solution that can allow you to create custom editor for any data type:

Problem Statement

As simple as that, I have created a component that has a property whose data type is List (Of String). I want user to see this property value in Property Grid of Visual Studio, and when he clicks on the edit collection button, he should be able to add strings, which I can reflect back in the property. By default, Visual Studio provides a Collection Editor. This collection editor initializes an object for the type. As value types like String do not have a constructor, this editor does not work for them. So, task is to create an editor which can act as a default editor for value type collections.

Recommended Solutions

I searched a lot and found similar solutions for this problem. You can decorate your property with an EditorAttribute. Here you can refer to StringCollectionEditor provided in System.Design in the following way:




[Editor(@"System.Windows.Forms.Design.StringCollectionEditor,
System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
typeof(System.Drawing.Design.UITypeEditor))]
public List StringValues
{
get
{
return stringValues;
}
set
{
stringValues = value;
}
}

But this did not worked out for me, as I could not get the values to persist when I entered them in the textbox. It is because StringCollectionEditor works well with string arrays or, specialized or string collections, but not so with List(Of T).



My Solution

Here is what I did and what you can do to create editor for any data type:

I created a custom form called StringCollectionForm.cs (just like the form shown above) and a custom editor class called StringCollectionEditor derived from UITypeEditor. To make that editor work, only one method called EditValue needs to be overridden. One of its parameters is an object that provides the value of collection. Initially this value is null. You can create any collection and return it as an object. Next time, you will receive the same object as parameter. So, you get complete control over the working of editor. I took values from the form’s textbox and added them to List(Of string). Next time, when I receive the object, I cast it back to List(Of string).

Only thing you need to make sure of is that object you are returning should be such that it can be cast to data type of the property. And you will receive the value of same data type.

Here is the C# code snippet for that:





public override object EditValue(ITypeDescriptorContext context,
IServiceProvider serviceprovider, object value)
{
if (serviceprovider != null)
{
mapiEditorService = serviceprovider
.GetService(typeof(IWindowsFormsEditorService)) as
IWindowsFormsEditorService;
}

if (mapiEditorService != null)
{
StringCollectionForm form = new StringCollectionForm();

// Retrieve previous values entered in list.
if (value != null)
{
List stringList = (List)value;
form.txtListValues.Text = String.Empty;
foreach (string stringValue in stringList)
{
form.txtListValues.Text += stringValue + "\r\n";
}
}

// Show Dialog.
form.ShowDialog();

if (form.DialogResult == DialogResult.OK)
{
List stringList = new List();

string[] listSeparator = new string[1];
listSeparator[0] = "\r\n";

string[] listValues = form.txtListValues.Text
.Split(listSeparator, StringSplitOptions.RemoveEmptyEntries);

// Add list values in list.
foreach (string stringValue in listValues)
{
stringList.Add(stringValue);
}

value = stringList;
}

return value;
}

return null;
}

Hope you find this stuff useful.

- Mohit

Monday, 28 May 2007

C#'s ?? Operator

Here is something new and interesting: A new operator in C# "??" Operator

This operator is responsible for defining a default value assignment if the value to be assigned is null. Let's say you want to assign value of y to x only if y is not null, else you want to assign z.

So, you may write your code something like this:

if (y != null)
x = y;
else
x = z;

You can also use Ternary operator for this:

x = ((y != null) ? y : z)

So, for this long statement and frequent null checks, here is the new C# operator: ??

x = y ?? z

Here it checks if y is not null, then assigns y, else assigns z. So, syntax goes like this:

x = {value to be checked for null} ?? {default value}

Very very interesting :) And ya, it was Ankit who mentioned it first, so we had a little chat over it (I am mentioning his name, otherwise he is going to kill me :))

For more information, visit: http://msdn2.microsoft.com/en-us/library/ms173224(vs.80).aspx

- Mohit

Thursday, 17 May 2007

Gaining Foothold in Microsoft's BI Industry!

Microsoft held it's first Business Intelligence conference on May 9-11, 2007 at Seattle, WA. Unfortunately, I could not attend it. I love BI and would have loved to attend this conference which showcased various products and solutions.

But nevertheless, I wasn't disappointed too much when I heard that one of our (Persistent Systems) products has also been specifically mentioned during the conference by one of the PMs at Microsoft.

The product is Oracle Bulk Load Destination connector for SSIS (SQL Server Integration Services). SSIS is an ETL tool and is a key component in Business Intelligence domain for Microsoft. Using Oracle Bulk Load Destination connector, clients have reported a performance improvement of over 100 times in live production environment, as compared to OLE DB Destination connector provided along with Business Intelligence Studio by Microsoft.

This connector is widely popular among organizations with Oracle Servers and those moving towards SSIS framework. For more information, visit: http://www.persistentsys.com/products/ssisoracleconn/ssisoracleconn.htm

And I am proud to say that I was one of the developers on this project and carried out the initial investigation. Moreover, best part is, it was my first project. And I believe, that was just the beginning :)

This gives me immense satisfaction to put up my little foot ahead in this vast and challenging industry. And wait and watch for the next step that is going to come up...

Friday, 27 April 2007

igfxtray and hkcmd - Do you really need it?

Whenever my machine starts hitting RAM, my first step is always to open the Task Manager, go to Processes, hunt for igfxtray and hkcmd processes and KILL them immediately. Because at first, I never knew what they are used for. And secondly, it was running under my account. I did not receive any problems after killing them, so it has become an easy target for me. But before you start murdering them, here is their information that you should be aware of:

Process : igfxtray
File : igfxtray.exe
Name : Intel(R) Graphics Accelerator Helper
Path : %system%\igfxtray.exe
Misc : Works in Background, Not a System Process, Runs locally and not on Network, No Internet usage, Hardware related
Description : igfxtray.exe is a process which allows you to access the Intel Graphics configuration and diagnostic application for the Intel 810 series graphics chipset. This program is a non-essential system process, and is installed for ease of use via the desktop tray.

Process : hkcmd
File : hkcmd.exe
Name : Intel Hotkey
Path : %system%\hkcmd.exe
Misc : Works in Background, Not a System Process, Runs locally and not on Network, No Internet usage, Hardware related
Description : hkcmd.exe is installed alongside Intel multimedia devices and allows configuration and diagnostic options for these devices. This program is a non-essential process, but should not be terminated unless suspected to be causing problems.

Recommendation: Remove igfxtray.exe from startup but not hkcmd.exe

Process to remove these services from startup:

1. Click on Start --> Run.

2. In Run, type "msconfig" and click OK.


3. Go to "Startup" tab and uncheck services you want to remove from startup. Click OK.


- Mohit

Tuesday, 27 March 2007

Preview: Microsoft and Google Analytics

Race for analytics is just getting heated up with Microsoft and Google trying to get ahead with their new products. But part of it considerably differs. While Microsoft's main focus remains on businesses, offline or online - primarily internal to organizations to help make better decisions. On the other hand, Google's target, as usual, is Web - mainly targeting web sites and its analysis.

MICROSOFT VIEW

Microsoft has now introduced PerformancePoint Server 2007 for Business Analytics. Following are the straight forward benefits that I saw while evaluating:

1. Integration with Business Scorecard Manager: Allows user to see filtered results in the form of a scorecard, providing each and every detail in form of numbers. This can be a summarized or deep drill down view of data, to levels desired by decision makers.

2. Tight Integration with SQL Server 2005: With latest capabilities of SQL Server, its just not a database anymore, but much more. Its a complete BI suite, with high capabilities of Analysis Services, Integration Services, Reporting Services, Notification Services and of course, Database Engine. The analysis capabilities has given analytics a complete new direction which PerformancePoint server thrives on.

3. Seamless Integration with Office 2007: Office 2007 has just evolved as never before. The data viewing and analyzing facilities has become awesome. PerformancePoint server connects seamlessly with Excel services and allows user to view and store data even offline. Facilities like Pivot Charts, graphs etc. make things more easy to understand and overall system as very much flexible.

4. Integration with SharePoint Server 2007: Share your data! This is an added advantage.

5. Integration with ProClarity Analytics: ProClarity is the one that sits in the middle of all this. Provides you facility to define Key Performance Indicators (KPIs) and do lots of custom stuff, rather than just following a pre-defined procedure.

6. Data Viewing: This is just the entertaining stuff, even if you see just figures. You will be thrilled! And I am sure, you won't believe me until and unless you see it yourself. Go and search it out. I bet, you won't be disappointed.

7. Create your custom parts: As a part of Microsoft strategy, build up anything using .NET and plug it dynamically. What else do you need?

8. Available as Windows as well as Web Application.

So, in a nutshell, You can define your requirements, keep track, summarize results or drill it, share data and can take complex planning decisions. Its highly recommended!!!

GOOGLE VIEW

Google is sticking to its plan pretty well - targeting web! Google Analytics is the tool that has been introduced. Just provide your details, create an account and get a script. Embed that script in your website and start analyzing from day one!

Here are few things I liked:

1. Easy Start: Just take your 5 line or so script and put it in your page. And you are ready to go!

2. Loads of Data: Data you find is just enormous with that single method call. But page never takes too much time to open - that's the best part!

3. Data Viewing: This loads of data is also very much organized and you can view it from different angles and in different ways. Only bad point - you can not define exactly what you want.

4. Integration with other Google products: Market is just about integration these days, where you are able to do any kind of work from just one product. And Google's AdSense, Blogs etc. fits well also.

This product is very nice even for a beginner and for analyzing a small domain - the website visits! Just sign up and here you go!

NOTE: I guess, Microsoft is also preparing for similar kind of launch, something called as Business Internet Analytics (BIA)

Thanks,
~Mohit

Wednesday, 21 March 2007

Monday, 19 March 2007

Business Intelligence - Think Beyond The Obvious!

The companies are running behind tools for Business Intelligence - some are busy creating; others are busy evaluating; and some busy spending! In all this process, the actual definition of Business Intelligence is simply lost!

Is this what defines Business Intelligence? You simply just club your own data, check out aggregations and take a decision! This aggregated data can help you take decisions, agreed! But I don't believe this is intelligence. Even if it is to some extent, the overall process can't be termed as 1% of actual Business Intelligence.

Here goes few questions that is pinging my mind quite strongly:

1. Top Management take decisions; Developers defines the processes - I believe this is simply the biggest disconnect! I agree that it goes through a pretty strong process, but can developers think the way the management thinks? They can try to replicate, but not to a full extent!

2. Are BI tools available today doing something extraordinary, apart from following a routine pattern? Are they giving information which even management missed to give a thought to?

3. And above all, is there any logic that system in itself is working on based on little input? Or is it just taking whole bunch of inputs and then just doing procedural processing?

4. For past so many years, I have not heard Artificial Intelligence getting into action. Can we use it here to improve businesses?

One simple point, Business Intelligence should not be restricted to just defining few rules and searching data for the same. Let systems be capable enough to process data to help businesses make decisions! Is there any possibility? The arena is wide open! Business Intelligence thinking just needs to be revised! Think beyond the obvious!!!

~Mohit