Software as a Service (SaaS)
The software development evolution ended up SaaS computing model. I think SaaS will be big hit in 2008 and more people (software developer community as well as business community) will think about SaaS delivery model.SaaS simply means that delivering software over the Internet. SaaS is a software application delivery model where a software vendor develops a web-native software application and hosts and operates (either independently or through a third-party) the application for use by its customers over the Internet. Customers do not pay for owning the software itself but rather for using it. They use it through an API accessible over the Web and often written using Web Services or REST. SaaS is also often associated with a "pay as you go" subscription licensing model.Microsoft has released a sample SaaS application named LitwareHR and it is a fictitious HR application providing recruitment-management software delivered as a service.
Enterprise Service Bus (ESB)
The term Enterprise Service Bus is referred to as a message broker is widely used in the context of implementing an infrastructure for enabling a Service-Oriented Architecture (SOA). An enterprise service bus (ESB) is a pattern of middleware that unifies and connects services, applications and resources within a business.Last year SOA was a reolutionary term in the Information technology space. SOA is a loosely-coupled architecture designed to meet the business needs of the organization. SOA is just an architecture theory and you should adopt a infrastructure architecture for enabling real-world SOA. The Enterprise Service Bus (ESB) is an infrastructure architecture for SOA. I think people will be get more maturity about SOA and will be use ESB for their SOA adoption. Microsoft BizTalk Server 2006 R2 and IBM WebSphere MQ will be the winners among the ESB market. Sonic ESB will continue their momentum.
Web 2.0 & Social Networks
Like 2007, Web 2.0 and Social Networks will also be hot in year 2008. I think Facebook will be the clear winner among the social networking space. More people will be adopt Web 2.0 strategies for their web sites and link their Web 2.0 strategy with SOA.
Microsoft Zune
Microsoft Zune will overtake the Apple iPod and will be hottest electronic device of 2008. I hope Microsoft will end up with a Zune Phone. The latest editions of Zune provides a user-friendly interface, exceptional navigation control, audio and video podcast support, a superlative FM radio, wireless syncing and sharing, high-quality earphones, revamped Zune Marketplace PC software, Zune Pass subscription music support, good audio quality, and a built-in composite-video output that beats Apple iPod.
Mobile Internet Devices (MIDs)
Mobile Internet Devices (MIDs) will be another big hit in year 2008. A Mobile Internet Device (MID) is an Ultra-Mobile PC initiative introduced by Intel. Intel is developing its own take on the mini-tablet, with a new ultra-mobile PC platform announced at Intel Developer Forum in Beijing. The new device is based on Linux.
Microsoft's new Products
I think Microsoft will be the undisputed leader in the software development and IT market in year 2008. If you are software developer specialized in the .Net framework area, the year 2008 will be specially for you. In 2008, Microsoft is planning to release bunch of products that spans operating systems to developer tools. The latest additions will be commercial version of Visual Studio 2008 and Sql Server 2008, Vista Service Pack 1 , Windows XP SP3 and Windows Server 2008. I hope Visual Studio 2008 will be best developer tool of 2008 and Sql Server 2008 will emerge as a great competitor to Oracle database and Microsoft Windows Mobile 6.0 will become a clear winner among the Mobile OS space.
Microosft has shipped Visual Studio 2008 and .NET Freamework 3.5. The Visual Studio products and .NET Framework 3.5 are available for download here. The key new features of .NET 3.5 are LINQ and Language enhancements, ASP.net Ajax, improvements of .NET 3.0 technologies (WCF, WPF, WF and WCS), Silverlight and many more.
At TechEd 2007 Barcelona, Spain, S. Somasegar, corporate vice president of the Developer Division, announced that Visual Studio 2008 and .NET Framework 3.5 will be released by the end of November 2007. For more details check somasegar's blog
http://blogs.msdn.com/somasegar/archive/2007/11/05/teched-developer-in-europe.aspx
O/RM Vs Stored Procedures. Which is the best approach?
For the last few years, many developers and architects are engage in a series of debates about ORM Vs Stored Procedures. Many of them argue for ORM and others are arguing for stored procedures. The interesting thing is that people with highly object orientation sense, recommends ORM. The J2EE community strongly recommending the ORM approaches instead of using stored procedures. Some .NET developers coming from Visual Basic 6.0 background supports stored procedures. Hibernate and NHibernate (.NET version of java version Hibernate) are the highly successful ORM that using both .NET and J2EE community. Then which is the best approach for data persist? Personally I hate stored procedures and strongly recommend for ORM instead of using the legacy stored procedure programming.
Why I hate stored procedures?
Stored Procedures are written by DB languages such as PL/SQL and T-SQL and this type of languages are not designed for writing business logic and debugging process is really a nightmare. And stored procedures hide the business logic and lacks readability of business process. If you are going to port DB from one RDBMS to another one, you have to re-write your all stored procedures. If you want to run your product on multiple databases, the ORM is the right approach. And ultimately the stored procedure restricts the proper business abstraction. Many people argue that stored procedure provides better performance than dynamic generated Sql from an ORM and people believed that all stored procedure are pre-compiled. According to Microsoft Sql Server documentation, Sql Server does cache the execution plan for stored procedure instead of pre-compiled. Have a look at the MSDN article Execution Plan Caching and Reuse. And I believe that maintainability, scalability and proper abstraction are the key factors of enterprise applications. The ORM approach enables these benefits.
If you are a .NET developer, there is happy news for you. A new ORM named Linq to Sql coming from the Redmond campus along with the .Net framework 3.5.
What is LINQ to SQL?
LINQ to SQL is an O/RM (object relational mapping) of the .NET Framework 3.5. It provides you to model a relational database using .NET classes. You can then query the database using LINQ, as well as insert, update and delete data from it. LINQ to SQL supports all types of database objects such as views, and stored procedures and also transactions. It also provides an easy way to integrate data validation and business logic rules into your data model. Visual Studio 2008 provides a Linq to SQL designer that enables to model and visualize a database as a LINQ to SQL object model. You can create the all database representations using the Linq to SQL designer. With the Linq to SQL designer, you can drag and drop the tables into the Linq to SQL designer surface and can represent the relations between tables. Linq to SQL allows you to model classes that map to tables within a database. These classes are known as "Entity Classes" and instances of them are called "Entities". Like other OR/Ms, the Linq to SQL OR/Ms will generate the SQL statements at the runtime when interacting with the Entity Classes.
Lets look at the below business object that mapped the customers table using Linq to Sql.
[Table(Name="Customers")]
public class Customer
{
[Column(Id=true)]
public string CustomerID;
[Column]
public string CustomerName;
[Column]
public string City;
[Column]
public string Phone;
}
After modeling the Database with Linq to Sql, we can do all DB operations against it. The below code is the query against Customer object that represents the Customer table.
DataContext db = new DataContext();
var q = from c in db.Customer
where c.City == "Cochin"
select c;
In the above query will select customers of city Cochin .The DataContext represent an abstraction of your database.
The below code is update existing customer
DataClassesDataContext db=new DataClassesDataContext();
Customer cust=db.Customer.Single(c=> c.CustomerID ==”C101”);
cust.Phone="919847059589";
db.SubmitChanges();
The below code is add new customer
DataClassesDataContext db=new DataClassesDataContext();
Customer cust=new Customer();
Cust. CustomerName=”ABC Ltd”
cust.City=”Mumbai”;
cust.Phone=”919847059589”;
db.Customer.Add(cust);
db.SubmitChanges();
The below code is delete customer
DataClassesDataContext db=new DataClassesDataContext();
Customer cust=db.Customer.Single(c=> c.CustomerID ==”C101”);
Db.Customer.Remove(cust);
The below code is using a join query
var orders =
from o in db.Orders
join c in db.Customer on o.CustomerID equals c.CustomerID
where c.CustomerID == "C101"
select new {c.CustomerName, o.ShipName, o.ShipAddress };
Linq to Sql is an exciting ORM tool from Microsoft and I hope that people will use this ORM along with .NET 3.5 applications.
Microsoft is releasing the source code of .NET 3.5 Framework Libraries. Below is the announcement from Scott Guthrie
"Today I'm excited to announce that we'll be providing this with the .NET 3.5 and VS 2008 release later this year. We'll begin by offering the source code (with source file comments included) for the .NET Base Class Libraries (System, System.IO, System.Collections, System.Configuration, System.Threading, System.Net, System.Security, System.Runtime, System.Text, etc), ASP.NET (System.Web), Windows Forms (System.Windows.Forms), ADO.NET (System.Data), XML (System.Xml), and WPF (System.Windows). We'll then be adding more libraries in the months ahead (including WCF, Workflow, and LINQ). The source code will be released under the Microsoft Reference License (MS-RL). You'll be able to download the .NET Framework source libraries via a standalone install (allowing you to use any text editor to browse it locally). We will also provide integrated debugging support of it within VS 2008."
WCF is rocking in the SOA world. Many companies are adopting WCF as their platform for building Service Oriented Applications. Below are some of the companies that using WCF. I got this list from Nicholos Allen's Indigo Blog.
1. Avaya
2. Choicelinx
3. Crutchfield
4. FNAC
5. Kiwibank
6. Nike
7. OPC Foundation
8. OTTO
9. Pfizer
10. Schneider Electric
11. ST Electronics
12. Commonwealth of Massachusetts
13. Thomson Financial
14. Thomson Tax and Accounting
15. Tyco Fire and Security
The upcoming .Net 3.5 framework has cool new features for WCF. Some of the new features are
- Ajax enabled WCF web services.
- Improved Support for WS-* Standards.
- WCF designer for developing configuration files.
- Support for REST-Style services.
- Improved interaction between WF and WCF.
The .Net Framework 3.5 is a updated version of two existing frameworks .Net 2.0 and .Net 3.0. The new Assemblies added to .Net 3.5 are,
1. System.Data.Linq.dll – The implementation for LINQ to SQL.
2. System.Xml.Linq.dll – The implementation for LINQ to XML.
3. System.AddIn.dll , System.AddIn.Contract.dll – New AddIn (plug-in) model.
4. System.Net.dll – Peer to Peer APIs.
5. System.DirectoryServices.AccountManagement.dll – Wrapper for Active Directory APIs.
6. System.Management.Instrumentation.dll – WMI 2.0 managed provider (combined with System.Management namespace in System.Core.dll).
7. System.WorkflowServices.dll and System.ServiceModel.Web.dll – WF and WCF enhancements
8. System.Web.Extensions.dll – The implementation for ASP.NET AJAX plus also the implementation of Client Application Services .
9. System.Core.dll – In addition to the LINQ to Objects implementation, this assembly includes the following: HashSet , TimeZoneInfo , Pipes , ReaderWriteLockSlim , System.Security.* , System.Diagnostics.Eventing.* and System.Diagnostics.PerformanceData .
JSON (JavaScript Object Notation) is a lightweight data-interchange format. JSON is a text format that is language. Today JSON is a common data-interchange standard for Ajax communication. Most of the Ajax applications are using JSON for communication between the client and server because JSON is faster than XML and easy to manipulate.
In .Net 3.5, WCF can supports JSON. You can send and receive JSON objects from WCF. You need to change config file to support JSON.
The following config that enables JSON support from WCF
<service name="OrderService">
<endpoint contract="IOrders"
binding="webHttpBinding"
bindingConfiguration="jsonBinding"
address=""
behaviorConfiguration="jsonBehavior" />
</service>
<webHttpBinding>
<binding name="jsonBinding" messageEncoding="Json" />
</webHttpBinding>
<behaviors>
<endpointBehaviors>
<behavior name ="jsonBehavior">
<webScriptEnable />
</behavior>
</endpointBehaviors>
</behaviors>
Microsoft Silverlight - a new, cross-platform, cross-browser plug-in for building the next generation of Media Experiences and Rich Interactive Applications.Microsoft Silverlight will enable content providers to deliver media experiences and rich interactive applications that incorporate media, graphics, animation, and much, much more with full application functionality on both Windows and Mac platforms and inside IE, Firefox and Safari. Silverlight users will also enjoy compatibility with the broad ecosystem of Windows Media (VC-1) enabled tools and solutions, including existing and upcoming IIS and Windows Streaming Media server technologies.
Visit http://www.microsoft.com/silverlight/default.aspx
One of the excellent features of ASP.net Ajax Extension 1.0 is the UpdatePanel control. The UpdatePanel control enable partial-page rendering in an ASP.NET Web page asynchronously. The contents of UpdatePanel control will automatically update when a postback event invoked. This control does work same as MagicAjax.net panel control. The UpdateProgress control is very useful when working with UpdatePanel control. With an UpdateProgress control, you can show the status during the partial-page rendering of an UpdatePanel.
Below is the sample code that using UpdateProgress control associated with an UpdatePanel control.
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" AssociatedUpdatePanelID="UpdatePanel1" runat="server">
<ProgressTemplate>
Update in Progress……..
</ProgressTemplate>
</asp:UpdateProgress>
In the above code, Contents inside the <ContentTemplate> will asynchronously update when the click event of button invoked. While starting an asynchronous postback, the UpdateProgress control will work. The contents inside the <ProgressTemplate> tag will show during the partial-page rendering of an UpdatePanel. The AssociatedUpdatePanelID is that which UpdatePanel control you associated with an UpdateProgress control. In the above example, the button control displays inside the UpdatePanel so that partial-page rendering will automatically done when the click event invoked. But many cases, you have to update the contents of UpdatePanel while postback of the controls outside the UpdatePanel. In that case, you can use AsyncPostBackTrigger in the <Triggers> section of UpdatePanel.
Check the below code
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click"/>
</Triggers>
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" AssociatedUpdatePanelID="UpdatePanel1" runat="server">
<ProgressTemplate>
Update in Progress……..
</ProgressTemplate>
</asp:UpdateProgress >
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
In the above example, the button control sits outside the UpdatePanel control. If you want to update the contents of UpdatePanel control, while the click event occurs, you can use this markup
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click"/>
</Triggers>
But in the above scenario, the UpdateProgress control will not be work because the asynchronous postback results from a control (in the above example the button control) that is not inside the update panel. In that cases, you can display an UpdateProgress control programmatically using javascript. Add the following JavaScript code in the script block.
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
var postBackElement;
function InitializeRequest(sender, args)
{
if (prm.get_isInAsyncPostBack())
args.set_cancel(true);
postBackElement = args.get_postBackElement();
if (postBackElement.id == 'Button1')
$get('UpdateProgress1').style.display = 'block';
}
function EndRequest(sender, args)
{
if (postBackElement.id == 'Button1')
$get('UpdateProgress1').style.display = 'none';
}
In the above code, we have used the beginRequest Event and endRequest Event of the Sys.WebForms.PageRequestManager Class. The beginRequest Event will invoke before processing of an asynchronous postback starts and the postback request is sent to the server and the endRequest Event will invoke after an asynchronous postback is finished and control has been returned to the browser.
LoadScriptsBeforeUI property of the ScriptManager class allows the user to control the nature of the download of the Ajax scripts. The boolean value indicate that the scripts are loaded before or after the page UI is loaded. If LoadScriptsBeforeUI is true( default value is true), all scripts will load before the page UI. If the value is false, the scripts will load after the page UI loaded. The end result is UI can quickly load and it will help the users to view the content first. So it is recommended to immediate display for your pages.
The syntax is
<asp:ScriptManager ID="ScriptManager1" runat="server"
EnablePartialRendering="true" LoadScriptsBeforeUI="false">
Scott Guthrie has announced the official name of Microsoft Atlas 1.0 and planning to release v1.0 before the end of this year.
The officail names are
Microsoft AJAX Library: The client-side Javascript library that works with any browser and also supports any server-side framework..
ASP.NET 2.0 AJAX Extensions: The server-side functionality that seamlessly integrates with ASP.NET and uses the same programming model familiar to existing ASP.NET developers.
ASP.NET AJAX Control Toolkit: The set of free, shared source controls and components.
What is BLINQ
BLINQ is a command-line tool that automatically generates ASP.NET Web sites using C# 3.0/VB 9.0. These automatically generated web sites are providing functionalities for displaying, modifying, and manipulating data. BLINQ accesses data using the new Language Integrated Query (LINQ).For generating a Web Site, you just point BLINQ to a Microsoft SQL Server database, and the tool will create a Web site with pages that display sorted and paged data, and that enable you to update or delete records, create new records, and follow relationships between tables in your database. You don’t need to write SQL queries to use BLINQ; the tool will generate optimized queries for you that request just the data you want to work with.
BLINQ tool was developed by Polita Paulus, a member of the Microsoft ASP.net team. She is the creator of GridView control of ASP.net 2.0. Polita has indeed done an awesome job with BLINQ.
The future of BLINQ
The BLINQ is just a command-line tool and there are not any features for user customization. The tool just provides to point a Sql Server database for generating ASP.net web site. But Microsoft is planning to develop a GUI based wizard instead of the command-line tool. And Microsoft is planning to include the new BLINQ tool into Visual Studio. NET. In an e-mail talk, Scott Guthrie told me that, his team is planning with the final release of BLINQ to provide a GUI based wizard integrated into VS . I think this will happen in the release of Visual Studio Orcas, the next version of Visual Studio. Net.
What is LINQ
.Language Integrated Query (LINQ) is the key feature of C# 3.0 and Visual Basic 9.0 that enables developers to write queries for accessing .NET types such as collections, Database and XML .With LINQ query is an integrated feature C# and VB.
A sample LINQ query
string[] cities = {"Seattle", "London", "Amsterdam", "San Francisco", "Las Vegas",
"Boston", "Raleigh", "Chicago", "Charlestown",
"Helsinki", "Nice", "Dublin" };
GridView1.DataSource = from city in cities
where city.Length > 6
orderby city
select city.ToUpper();
GridView1.DataBind();
For more details about LINQ, click here where you can read a nice document written by Don Box and Anders Hejlsberg.
Today Microsoft Atlas is becoming one of the key technologies for building Web 2.0 model web applications. Thanks to the great Microsoft ASP.net team led by Scot Guthrie. The team is providing an exciting web application model for building next generation web. Atlas provides Client side frameworks and Server side framework for building Ajax- powered web applications. It enables a rapid application development model for building Ajax applications using ASP.net 2.0.The Atlas framework providing lot of UI specific features such as Drag-Drop, Opacity, Layouts, and Animations etc.
Drag and Drop
Both client-side framework and server controls providing the Drag and Drop functionality. The client-side Javascript library AtlasUIDragDrop is providing the Drag and Drop functionality. So you need to reference the AtlasUIDragDrop library to implement Drag and Drop functionality.
<%@ Page Language="C#" %>
<head runat=server></head>
<body>
<form id="form1" runat="server">
<atlas:ScriptManager runat="server" ID="ScriptManager1" EnablePartialRendering="True">
<Scripts>
<atlas:ScriptReference ScriptName="AtlasUIDragDrop" />
</Scripts>
</atlas:ScriptManager>
<div id="dvDescription">
<div id="dvDrag">
Click here for Drag
</div>
<br><br>
Atlas is the undisputed><br> leader in the Ajax World.
</div>
</form>
<script type="text/xml-script">
<page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
<components>
<control id="dvDrag" cssClass="draghandle" />
<control id="dvDescription" cssClass="floatwindow">
<behaviors>
<floatingBehavior handle="dvDrag">
</floatingBehavior>
</behaviors>
</control>
</components>
</page>
</body></html>
In the above example, the Atlas Script enables the Drag and Drop functionality. We can specify the drag functionality in the <behaviors> section of Atlas script. We need to specify the drag handle in the < floatingBehavior > section for implementing Drag and Drop. Elements are assigned a <control> element in Atlas script. This control elements can have behaviors associated with them.The floatingBehavior, enables the layer to be dragged and dropped around the page.
Drag and Drop using Server Control
The DragOverlayExtender control allows you to add drag-and-drop functionality to any control. The main advantage of this control is that you can add drag and drop functionality to your existing applications. You need to add a DragOverlayExtender control and its associated DragOverlayProperties control and set them to extend the control that you want to implement Drag and Drop functionality.
<%@ Page Language="C#" %>
<html>
<head runat=server></head>
<body>
<form id="form1" runat="server">
<atlas:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True">
</atlas:ScriptManager>
<div>
<asp:Label ID="lblDescription" runat="server" CssClass="label">
Atlas is the undisputedleader in the Ajax World
</asp:Label>
</div>
<atlas:DragOverlayExtender ID="DragOverlayExtender1" runat="server">
<atlas:DragOverlayProperties TargetControlID="lblDescription" Enabled="true"/>
</atlas:DragOverlayExtender>
</form>
</body>
</html>
AtlasUIGlitz
The client-side Javascript library AtlasUIGlitz is providing lot of animation functionalities that including Opacity, Fade Animations, Layouts, Number Animations and Length Animations. For implementing this UI functionalities, you need to reference the AtlasUIGlitz library.
Opacity
The Opacity can specify using opacity tag of the <behaviors> section of Atlas script.
The value of the <opacity> element determines the opacity. The value will be 0 to 1. The value 0 is completely transparent and 1 is completely opaque.
<%@ Page Language="C#" %>
<head runat=server></head>
<body>
<form id="form1" runat="server">
<atlas:ScriptManager runat="server" ID="ScriptManager1" EnablePartialRendering="True">
<Scripts>
<atlas:ScriptReference ScriptName="AtlasUIGlitz" />
</Scripts>
</atlas:ScriptManager>
<div id="dvDescription">
Opacity using AtlasUIGlitz
<br><br>
Powered By Microsoft Atlas
</div>
</form>
<script type="text/xml-script">
<page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
<components>
<control id="dvDescription" cssClass="floatwindow">
<behaviors>
<opacity id="myOpacity" value="0.5">
</opacity>>
</behaviors>
</control>
</components>
</page>
</body></html>
Fade Animation
The AtlasUIGlitz library also providing Fade Animations features. It can be done using Javascript.
Javascript function for FadeIn Animation
function fadeIn()
{
var a = new Web.UI.FadeAnimation();
a.set_target(Web.Application.findObject(“dvDescription”));
a.set_effect(Web.UI.FadeEffect.FadeIn);
a.play();
}
Javascript function for FadeOut Animation
<