Articles : Microsoft Learning Announces Prometric as Exam Delivery Provider (Worldwide)

We're pleased to announce that Prometric will be the exam delivery provider for Microsoft professional certification and Microsoft Dynamics exams. Microsoft Learning is confident that this model will allow us to provide you with a better testing experience. We anticipate increased speed to market for exam innovations, improved consistency in your test-taking environment, and excellent global coverage. Pearson VUE will discontinue selling Microsoft professional certification exams after August 31, 2007, but will continue to administer Microsoft professional certification exams purchased through December 31, 2007.

We know many of you will have questions on what this means to you and your plans for certification testing. Microsoft Learning and Prometric will take every step to minimize any inconvenience to you during this transition. We encourage you to:
• Learn more.
• Read the Prometric press release.

Articles : Hibernate and NHibernate

Hibernate is an ORM [Object-Relational Mapping] service used to develop persistent Java classes. On the back of NHibernate, it's popularity has spread to the .NET space as well. This has proved of special interest in IT shops that are working toward interoperability strategies that leverage the skills of developers who can handle both .NET and Java problems.

NHibernate is a port of Hibernate Core for Java to the .NET Framework. It handles persisting plain .NET objects to and from an underlying relational database. Given an XML description of your entities and relationships, NHibernate automatically generates SQL for loading and storing the objects. Optionally, you can describe your mapping metadata with attributes in your source code.

NHibernate supports transparent persistence, your object classes don't have to follow a restrictive programming model. Persistent classes do not need to implement any interface or inherit from a special base class. This makes it possible to design the business logic using plain .NET (CLR) objects and object-oriented idiom.

Originally being a port of Hibernate 2.1, the NHibernate API is very similar to that of Hibernate. All Hibernate knowledge and existing Hibernate documentation is therefore directly applicable to NHibernate


NHibernate key features:
Natural programming model - NHibernate supports natural OO idiom; inheritance, polymorphism, composition and the .NET collections framework, including generic collections.

Native .NET - NHibernate API uses .NET conventions and idioms
Support for fine-grained object models - a rich variety of mappings for collections and dependent objects

No build-time bytecode enhancement - there's no extra code generation or bytecode processing steps in your build procedure

The query options - NHibernate addresses both sides of the problem; not only how to get objects into the database, but also how to get them out again

Custom SQL - specify the exact SQL that NHibernate should use to persist your objects. Stored procedures are supported on Microsoft SQL Server.

Support for "conversations" - NHibernate supports long-lived persistence contexts, detach/reattach of objects, and takes care of optimistic locking automatically

Free/open source - NHibernate is licensed under the LGPL (Lesser GNU Public License)

More detailes at official website :: http://www.hibernate.org/

Articles : .NET Dashboard Suite 3.0

Perpetuum Software LLC has released version 3.0 of .NET Dashboard Suite for Windows Forms apps in the field of information acquisition and comprehension.
With .NET Dashboard Suite, users have a pack of fully compatible components for general and specific data visualization. One of the main benefits of the dashboards is the ability to display data in various forms.

.NET Dashboard Suite provides a complete set of data visualization tools: high-resolution ready-made gauges, charts, graphs, diagrams and much more.

It allows the creation of non-standard controls based on existing ones, or even designing from scratch, through improved designer; some properties are available not only in the property grid but also from the designer toolbar.

The unique architecture of the product makes possible the ability to combine objects arbitrarily, allowing the creation of control configurations that are difficult or impossible to build using other approaches. You can create even the most complicated dynamic and interactive dashboards to monitor and analyze your critical data.

.NET Dashboard Suite gives developers a free hand over the dashboard customization: from the appearance to the behavior of the controls. It lets you monitor your business performance using highly visual gauges and charts on your desktop.

The package consists of the following components: Chart ModelKit, and Instrumentation ModelKit.

All components are written in C#, fully compatible with each other and provide similar design-time and runtime customization facilities, common data management, and appearance customization methods.

There are two versions of the product: the .NET Dashboard 2.3 that is compatible with the .NET 1.1 and 2.0 and the .NET Dashboard 3.0 that is specially designed for the .NET Framework 2.0.

Follow this link to download the fully-functional trial version.

Why to use Interfaces Whenever Possible in C#

The .NET Framework contains both classes and interfaces. When you write routines, you will find that you probably know which .NET class you're using. However, your code will be more robust and more reusable if you program using any supported interfaces instead of the class you happen to be working with at the time. Consider this code:

private void LoadList (object [] items,
ListBox l) {
for (int i = 0; i < items.Length;i++)
l.Items.Add (items[i].ToString ());
}

This function loads a ListBox from an array of any kind of objects. The code is limited to an array only. Suppose that later you find that objects are stored in a database, or in some other collection. You need to modify the routine to use the different collection type. However, had you written the routine using the ICollection interface, it would work on any type that implements the ICollection interface:

private void LoadList (ICollection items,
ListBox l) {
foreach (object o in items)
l.Items.Add (o.ToString ());
}

The ICollection interface is implemented by arrays, and all the collections in the System.Collection. In addition, multidimensional arrays support the ICollection interface. If that's not enough, the database .NET classes support the ICollection interface as well. The function written using the interface can be reused many more ways without any modification.

C# : foreach loop much faster than normal for loop

Using a foreach loop will be substantially faster than a for loop when accessing the items in a RichTextBox's Lines property. For example, the following code loads a RichTextBox with 1000 lines of text and accesses each line from the Lines property. On a 333 MHz Pentium II machine, the for-loop code (ForLoopButton_Click) takes ~25 seconds and the foreach code (ForEachLoopButton_Click) takes ~0.01 seconds.
...
private void Form1_Load(object sender, System.EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
StringBuilder Buffer = new StringBuilder("");
for (int i = 1; i <= 1000; i++)
{
if (i > 1)
{
Buffer.Append(Environment.NewLine);
}
Buffer.Append("This is line number " + i.ToString());
}
TheRichTextBox.Text = Buffer.ToString();
Cursor.Current = Cursors.Arrow;
}

private void ForLoopButton_Click(object sender, System.EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
int Len = 0;
int Start = Environment.TickCount;
for (int i = 0; i < TheRichTextBox.Lines.Length; i++)
{
Len += TheRichTextBox.Lines[i].Length;
}
int ElapsedTime = Environment.TickCount - Start;
ResultsTextBox.Clear();
ResultsTextBox.Text = "for loop\r\n\r\nElapsed time = " + ((double) ElapsedTime / (double) 1000.0).ToString() + " seconds\r\n\r\nResult = " + Len.ToString();
Cursor.Current = Cursors.Arrow;
}

private void ForEachLoopButton_Click(object sender, System.EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
int Len = 0;
int Start = Environment.TickCount;
foreach (String Line in TheRichTextBox.Lines)
{
Len += Line.Length;
}
int ElapsedTime = Environment.TickCount - Start;
ResultsTextBox.Clear();
ResultsTextBox.Text = "foreach loop\r\n\r\nElapsed time = " + ((double) ElapsedTime / (double) 1000.0).ToString() + " seconds\r\n\r\nResult = " + Len.ToString();
Cursor.Current = Cursors.Arrow;
}