October 2008 - Posts

Another email to share with you, “A Platform for the Next Technology Revolution” :

During the past decade, a dramatic transformation in the world of information technology has been taking shape. It's a transformation that will change the way we experience the world and share our experiences with others. It's a transformation in which the barriers between technologies will fall away so we can connect to people and information no matter where we are. It's a transformation where new innovations will shorten the path from inspiration to accomplishment.

Many of the components of this transformation are already in place. Some have received a great deal of attention. "Cloud computing" that connects people to vast amounts of storage and computing power in massive datacenters is one example. Social networking sites that have changed the way people connect with family and friends is another.

Other components are so much a part of the inevitable march of progress that we take them for granted as soon as we start to use them: cell phones that double as digital cameras, large flat-screen PC monitors and HD TV screens, and hands-free digital car entertainment and navigation systems, to name just a few.

What's missing is the ability to connect these components in a seamless continuum of information, communication, and computing that isn't bounded by device or location. Today, some things that our intuition says should be simple still remain difficult, if not impossible. Why can't we easily access the documents we create at work on our home PCs? Why isn't all of the information that customers share with us available instantly in a single application? Why can't we create calendars that automatically merge our schedules at work and home?

This week at the Professional Developers Conference (PDC) in Los Angeles, we shared news with software developers about a new set of platform technologies that will help transcend these limits. Because you are a subscriber to Executive Emails from Microsoft, I wanted to share my thoughts about the impact that these technologies will have as developers begin to use them to create a new generation of experiences that extend uninterrupted from the desktop to the mobile phone, media player, car, and beyond-to places where we never thought information and communications would be available to us.

A New Platform for Cloud Computing

At PDC, we announced the availability of an early preview release of a new technology called Windows Azure. Windows Azure will enable developers to build applications that extend from the cloud to the enterprise datacenter and span the PC, the Web, and the mobile phone. For the first time, we shared pre-beta code for Windows 7 and for Windows Server 2008 R2. Windows 7, which is the next version of the Windows desktop operating system, will take advantage of software and hardware advances to help eliminate the boundaries between information, people, and devices.

We also previewed Office Web applications, which are light-weight versions of Word, Excel, PowerPoint, and OneNote that are designed to be accessed through a browser. Office Web applications will be part of the next version of Office and will enable people to view, edit, and share information and collaborate on documents on the desktop, the phone, and in a Web browser in a way that is consistent and familiar.

Windows Azure is part of the Azure Services Platform, a comprehensive set of storage, computing, and networking infrastructure services that reside in Microsoft's network of datacenters. Using the Azure Services Platform, developers will be able to build applications that run in the cloud and extend existing applications to take advantage of cloud-based capabilities. The Azure Services Platform provides the foundation for business and consumer applications that deliver a consistent way for people to store and share information easily and securely in the cloud, and access it on any device from any location.

Windows Azure is not software that companies will run on their own servers. It's something new: a service that runs in Microsoft's growing network of datacenters and provides the platform that helps companies respond to the realities of today's business environment, and tomorrow's. Windows Azure technologies are already finding their way into products such as Windows Server 2008 and System Center Virtual Machine Manager, enabling organizations and Microsoft partners to create their own cloud infrastructure.

Windows Azure will enable organizations to respond to realities such as the need to use the Web to provide customers with comprehensive information and to interact with an audience that has the potential to expand exponentially overnight; to integrate operations with partners-and sometimes even competitors-to meet customer needs; to add new capabilities quickly to respond to new opportunities; and to enable employees to work efficiently and effectively no matter where they are. These realities apply not just to businesses, but to organizations of all kinds: schools, governments, community groups, and more.

Traditional approaches to building technology infrastructure and delivering computing capabilities make it difficult and expensive to adjust to these realities. You need systems with enough capacity to meet the highest possible demand-capacity that includes servers and buildings to house them, the power to run them, and the people to manage them. You have to spread that capacity across locations so there's a backup if one part fails. You have to solve issues like access for different types of users and compliance with tax regulations in all countries where your customers reside.

Designed specifically to meet the global scale that today's organizations require, the Azure Services Platform will provide fundamentally new ways to deploy services and capabilities. It gives businesses the option to take advantage of the capacity available in the cloud as it is needed, reducing the need to make large upfront investments in infrastructure simply to be ready when demand spikes. It will enable developers to create applications that run in the cloud and provide the features, information, and interactivity that employees, partners, and customers expect-no matter how many of them there are, where they are in the world, or what device they have at hand.

Software Plus Services and the Power of Choice

The Azure Services Platform reflects our belief that choice is critical for developers, companies, and consumers. It is also based on our belief that the key to delivering value today and in the future lies in combining the best aspects of software running on PCs, servers, and devices with the best aspects of services running on the Web-an approach we call "software plus services."

Our software plus services approach lets people take full advantage of the incredible power of today's devices. While there are undeniable benefits to being able to tap into the wealth of information and services that can be accessed over the Web through a browser, the interactive experiences that people expect on their PC, mobile phone, and media player depend on sophisticated software running on powerful processors.

The richness of these experiences will only increase as multicore processors expand the computing capabilities of our devices and new programming languages open the door to a new generation of applications that let us use more natural ways to interact with digital technology such as voice, touch, and gestures.

Software plus services also recognizes that for most companies, the ideal way to build IT infrastructure is to find the right balance of applications that are run and managed within the organization and applications that are run and managed in the cloud.

This balance varies by company. A financial services company may choose to maintain customer records within its own datacenter to provide the extra layers of protection that it feels are needed to safeguard the privacy of personal information. It may outsource IT systems that provide basic capabilities such as email.

This balance will change over time within an organization, as well. A company may run its own online transaction system most of the year, but outsource for added capacity to meet extra demand during the holiday season. With software plus services, an organization can move applications back and forth between its own servers and the cloud quickly and smoothly.

Today, companies around the world are implementing Microsoft technologies to take advantage of the best combination of on-premise software and cloud-based services. Using Microsoft Online Services, businesses including Coca-Cola Enterprises, Blockbuster, and Energizer access and manage Microsoft Exchange, SharePoint, Office Communications Server, and Live Meeting over the Web through a single, secure infrastructure. In addition, 1 million people rely on Office Live Workspace for sharing and collaborating with friends, family, and colleagues.

Expanding the Definition of Personal Computing

Ultimately, the reason to create a cloud services platform is to continue to enhance the value that computing delivers, whether it's by improving productivity, making it easier to communicate with colleagues, or simplifying the way we access information and respond to changing business conditions.

In the world of software plus services and cloud computing, this means extending the definition of personal computing beyond the PC to include the Web and an ever-growing array of devices. Our goal is to make the combination of PCs, mobile devices, and the Web something that is significantly than more the sum of its parts.

The starting point is to recognize the unique value of each part. The value of the PC lies in its computing power, its storage capacity, and its ability to help us be more productive and create and consume rich and complex documents and content.

For the Web, it's the ability to bring together people, information, and services so we can connect, communicate, share, and transact with anyone, anywhere, at any time.

With the mobile phone and other devices, it's the ability to take action spontaneously-to make a call, take a picture, or send a text message in the flow of our activities.

Through Live Mesh-a service from Microsoft that we announced earlier this year and about which we shared new information week-we're beginning to bridge the PC, phone, and Web and create this next generation of connected experiences. Built on the Azure Services Platform, Live Mesh enables you to use programs and information stored on your work computer from your home PC, and vice versa. With Live Mesh, you can share folders and ensure that the information is automatically synchronized across your devices.

Live Mesh hints at how our lives will be transformed as the barriers between devices disappear and the option to connect instantly to people, devices, programs, and information becomes a reality.

We're not quite there yet. Today, the Azure Services Platform is available only as a limited technology preview release. But as developers begin to combine the capabilities of this new platform with the amazing ongoing hardware and software innovations that we are seeing from companies across the industry, it will bring us significantly closer to the time when information, communication, and computing flows along with us seamlessly as we move through our day-to-day activities.

You can learn more about these technologies and the progress we are making by visiting the Microsoft Software + Services Web site.

I look forward to sharing more information with you about these new technologies in the near future.

Steve Ballmer

Related Resources:

I have found this email sent to the IronPython mailing list yesterday, and thought many of you would love someone to share it :).

Hello IronPython Community,

This is a special release of IronPython designed to work with the Visual Studio 2010 CTP.  This release will let you try out C# 4.0’s new Dynamic feature, which allows you to easily call into dynamic object models such as IronPython modules from your C# code.

To get started using IronPython with C#’s Dynamic feature:

1. Install this .MSI on your Visual Studio 2010 CTP Virtual PC image, either by enabling network access or sharing a host folder in Virtual PC’s settings.

2. In Visual Studio 2010, click the CTP Walkthroughs link on the Start Page and browse to the Visual Studio walkthroughs.  Follow along with the Dynamic Programming in C# walkthrough.

This release is not related to the recently released IronPython 2.0 RC1. In fact, this is based on source code from the beta4 timeframe. Also note that this release will only work with the VS10 CTP and not against any other version of .NET.

You can download the release here - http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=18448

The IronPython Team

EntLib 4.1 was released yesterday. The new release includes:

  • Support for Visual Studio 2008 and Visual Studio 2008 SP1.
  • Interception mechanism in the Unity Application Block.
  • Performance improvements.
  • Usability improvements of the config tool.
  • Fixes.

For more information check any of the following Resources:

 

Technorati Tags: ,

Although I haven`t noticed any announced from the big names yet (see update 2 below), ASP.NET MVC BETA release is already online and available for download.

ASP.NET official MVC page and CodePlex site are not yet updated.

Will keep you updated when the announcements come.

 

Udpate 1:

You can find screenshots for the new release with some info in this blog post.

 

Update 2: Announcements have arrived :)

  • [MUST READ] Scott Guthrie has posted his announcement, with so many interesting details and how-to guides as you would expect him to.
  • From the ASP.NET MVC Framework team:

 

Official press release:

http://www.microsoft.com/presspass/press/2008/oct08/10-13Silverlight2PR.mspx

More information, resources, and download:

http://silverlight.net/GetStarted/

UPDATE:

Scott Guthrie’s announcement with –as usual- many important resources and interesting highlights/insights:

http://weblogs.asp.net/scottgu/archive/2008/10/14/silverlight-2-released.aspx

Scott Hanselman has an interesting announcement as well:

http://www.hanselman.com/blog/Silverlight2IsOut.aspx

 

The Useless Introduction You Used To :)

This post has taken so long to be started in writing. I’ve been busy with many events in my life lately. Suffering from frequent limited internet access lately, and, all this moving between companies thing has been eating me. And yes, I admit, I' have been as tired and more honestly lazy as you expected me to be!

Hey, there’s a little warning. This post is not exactly for my usual audience. I’m sorry, but introducing Domain Driven Design is not one of the goals for this post. There’re many interesting resources and books (even FREE: InfoQ, Domain Driven Design Quickly) on the topic. However, if you leave me a comment telling me to make a write-up on the topic, of course I will :) :).

One more thing. Another reason I’m working on this is that I’m preparing for an internal session here in Raya about Practical Lightweight Domain Driven Design. This session is truly internal yet. It should be recorded though but I’m not sure whether it’ll be possible to publish the videos (Yeah, I will see how we can have our public sessions of possible sure!). If you have a user group and would like me to give this session in a group meeting, I’ll be glad to do.

Introduction Still: The Messages, The ORM

This post was originally a couple of messages I’ve sent recently to the ALT.NET Yahoo Group. In which I discuss using Domain Driven Design with an ORM, more specifically, my favorite ORM, LLBLGen.

Quoting from the first message:

For now, we're going towards LLBLGen Pro 2.6 for DAL generation and such (using Self-Serving mode probably). Yes, we're going for database first design, and not using NHibrernate. I'm hoping that we can keep those two issues for other threads :).

Right now, I'm going for other Domain Driven practices. I want to make sure using POCO classes is worth it, and then see how to have those in LLBLGen (which -LLBLGen main template- is in its internal not much different design than Active Record, which in many times is handy, it's VERY rare t change DAL when one fits different DB providers with good performance), and what are common patterns to do Domain Driven Design at all when having LLBLGen as DAL (if it makes any difference - again: and if effort to make it encapsulated enough to make no difference is worth it).

Making this choice alone is worth its own article. Maybe should title it “In Search For The Perfect ORM” as well :-D.

UPDATE: Frans Bouma has a nice write-up about what is an ORM and different types on an ORM. It's quite old (2004), but the concepts themselves are still valid.

My original question was:

So, is anybody here doing DDD and uses LLBLGen as DAL generator ?How does the experience look like ? What are common practices across all projects and what have been pitfalls ? etc... These are the kinds of questions I'd love to see somebody here with something to share about.

Domain Driven Design At Work

This is not really an LLBLGen issue. It is questioning the Domain Driven Design productivity itself. I like DDD. I see it as the natural next step after 3-tier deisgn. This whole separation of concerns, models, repositories, factories, infrastructure, and services paradigm just fits my mentality and view of how the world looks like. However, not all the practices in DDD are similar in terms of return of investment, the customer business value that Agile emphasizes. The trick is to know which are and which aren’t, and how to do the balance.

In the second message, I go through an example of typical usage for DDD that has tried just a little bit to be lightweight in some areas but not others, and my own overview about what needs improvement:

 

I've been on a project that leverages DDD once before myself. The project has been frozen for a while for other priorities, etc...Maybe I start with my own take on the subject!!
 
We've been using the "Adapter" model. I thought it was for seeking some sort of more control/flexibility. Reading Fran Bouma’s blog (http://weblogs.asp.net/fbouma, the creator of LLBLGen), I see how he's so much of an "Entity Design" guy. Well, makes sense, he owns the best entity design I've seen so far having considered EF and CSLA.
Clearly he sees the "Self Servicing" as the core for entity design rather than model design. You know, the "entity.Save();" style. This makes me have two thoughts at a time actually. 1- That "Adapter" model is the right choice for DDD (I'll get to that just below), 2- That maybe DDD fully is not what I really want (the entity Self Servicing style is so powerful. It has saved my day so many times before).
 
Looking at the project I've been working on, We had something like those namespaces / VS projects (and others … ):
Company.Project.Adt (for models that may be reused in other projects, like Language, Currency, ...)
Company.Project.Model (for project business domain specific models)
Company.Project.Data (for LLBLGen stuff, we have also "DataDBSpecific" and such related to Adapter mode)
Company.Project.Repositories (have interfaces and implementations for repositories, let's put aside why the two in one project for now)
 
A repository load method could probably look like:
  Category Repository:
public static ReadOnlyCollection<Category> LoadByShop(Shop shop, bool includeDisabledCategories)
 
Or for internal use:
  Shop Repository:
internal static Shop Load(Guid shopKey, bool loadCategories, bool loadProducts)
 
What I want to highlight here is the "include...", "load..." parameters. I'm not sure whether this is the best way to do it.
 
Also, what really hits me is the mapping. You know, from LLBLGen entities to our domain models. We have been doing this in factories which live in the Repository space. Each factory had methods similar to this:
 
public static Shop CreateShopModel(ShopEntity entity)
 
public static ShopEntity CreateShopEntity(Shop shop
 
Regardless of the "public" access modifier (this is all very well hidden behind a service layer, but let's put the whole issue aside as well), the idea of having to go through all the mapping has been just a boring ugly task, that has been there for long.
To be honest, we didn't get so much benefit of it. It should have good promises, but how good compared to the cost of implementing them for complex object graphs ? That is the question!
 
Things got just worse when we wanted to implement our service layer. That's a service in the classic sense of "web" service layer (REST), we wanted to created DTOs that can correspond to XML and JSON responses of our choice, and again, we had to do the mapping from and to the domain models and DTOs. Want more ? The DTOs wouldn't convert to XML strings automatically (to JSON it would), we had to have another mapping layer from and to the DTOs and the actual XML.
Of course we had much time defining XML specifications and writing so many unit tests for this. I know not every project can go in this direction to this extent, but, I wanted to show where going in this path can take you.
 
So, even without service layer complications. You still have the model mapping tasks that (and this is what worries me) in many situations does not correspond to a "business" need. Note that I want to be doing Agile as well, and this makes the issue of delivering business value a true concern.
 
You can talk about automated generation for mapping. This may be something. We know it'll not be this direct or one to one of course anyway, but it may help.
 
Would you do Domain Driven Design with "entity" models assuming the developers will stick to calling the repository's "Persist" method instead of "entity.Save();"? You just can't do that! How about new developers ? How about inconsistencies ?
Is mapping really that bad and much of an effort ? First look at it, I say it isn't. But given complex scenarios I've been though I have to wonder about things like "complex object graph" and "caching" (in memory, on different levels, etc...).
 
It's all about trying to calculate the costs indeed.

 

That’s what I’m trying to make out of this, the trick for the right cost.

Conclusion: How About YOU ??

Let me repeat the end of those messages:

Anyway, would love to hear your takes and what you have :) :) :).

If you have any thought on the topic, those will be most appreciated. You can comment here or in the topic messages page on ALT.NET Yahoo Group. This is an open discussion area, and I do not expect it to be closed soon.

Same, if you want to hear more ramblings on the topic, or just want me to shut it up all, send me a line.

Would love to see what others have to say about this….

More Posts