Welcome to MSDN Blogs Sign in | Join | Help

Prism, CAB, and WinForms futures

On the forums, Bil asked the questions below.

Just wondering about guidance here. I have clients who are not ready or able to move to 3.5/VS2008 yet but need to start developing new Smart Client applications. They're also not ready to move to WPF as they don't see a lot of value in it for the type of apps they need.
That sort of leaves me between a rock and hard place IMHO. Prism is good, but only if you're on the 3.5 platform and want to build WPF apps (right?).

Smart Client Software Factory is good if you're on the 3.5 platform and want to build WinForms apps but you're tied to ObjectBuilder and CAB (and we won't open that can of worms).
So what does one do when you're living in reality (2.0 platform, WinForms) and need to build new Smart Clients. Are you stuck using either the old SCSF/CAB setup or RYO.
Wondering if there's any plans for Prism to be a little more broader than WPF or what the alternaties are?

Thanks.

Below is my answer. I hope this clarifies these questions which are on many customers' minds.

Great question Bil

1. We have an FAQ we will be including in our Docs that clarifies how Prism is postioned against our other offerings. I've posted the content of that below. Let me know if it makes sense.
How does Prism compare to patterns & practices’ other Composite UI offerings?

Within patterns & practices, we have several offerings for building composite applications.  The following list highlights the scenarios where you should consider using each:

  • Smart Client Software Factory: Recommended for WinForm composite application development.
    • Mainstream recommendation for LOB applications.
    • Leverages the most mature platform.
    • Offers the best development and debugging experience (tooling, control support, drag & drop, RAD experience).
    • Best for forms over data-type applications (order entry, etc).
    • Includes guidance automation (guidance package support and recipes).
  • Smart Client Software Factory and WPF interop: Recommended for islands of WPF in an existing SCSF application.
    • Allows leveraging existing SCSF infrastructure.
    • Includes guidance automation (guidance package support and recipes).
  • WPFCAB: Recommended for migrating existing CAB applications to WPF.
    • Pure WPF.
    • Allows leveraging existing SCSF infrastructure, except for views.
    • Not maintained or owned by p&p, supported by community.
    • Literal port of CAB to WPF (not optimized for WPF paradigm).
    • Does not include guidance automation.
  • Prism: Recommended for building new composite WPF applications that are optimized for WPF.
    • Targets WPF composite application development.
    • Lighter-weight, ability to pick and choose.
    • Better integration with existing applications and libraries.
    • Does not include guidance automation.

2. As to what to do if your clients need to build composite UI apps, but they are not ready to move to 3.5? In terms of p&p current offerings, SCSF is the only option. Notice I said building composite UI, not smart client as SCSF on the whole is not necessarily appropriate for all smart clients. Once option is to explore using many of the Prism services in Winforms as they are NOT UI dependent (more about this in the next points).

3. On the 2.0 / Winform question, Prism libraries take hard dependencies on 3.5, not only on WPF, but also in LINQ and Lambda usage. Now most of the services do not actually depend on WPF, including Module loading, EventAggregator (currently depends on Dispatcher, but we are moving to use synchronization context). The LINQ/Lambdas could be removed. The RegionManager depends on WPF in it's use of attached properties for registering. But you can also register regions imperatively, thus allowing you to have a WinForm RegionManger that does not use attached properties. Now whether or not the guidance / libraries would be appropriate for Winforms, is a different story and one that you would have to answer.

4. Will Prism be more broader than WPF? Silverlight is definitely something we are looking at. There is already a version for Silverlight on our contrib site. Would do Winforms / Web guidance on Prism? It's possible, though not something we have thought a lot about to date. We've worked really hard to be focused, and not look outside of our main focus area that is WPF. At the same time we the design is very malleable, and loosely coupled, making it potentially usable on other platforms. Mono version of Prism anyone?

Posted by Glenn Block | 3 Comments
Filed under: , , ,

WPF, from this to that..Wow!

A few weeks ago, our reference implementation for Prism looked like this.

image

Early on we decided that we needed the RI to have a better look in feel so that it delivered a more real world WPF experience. We hired a design firm to create XAML proofs based on our implementation. The process on their end was two fold. First there we a graphic designer who created non XAML proofs. Then a XAML developer converted those proofs to XAML.

Once we got the proofs, Adam Calderon from Interknowlogy (on our team) team took two weeks, and merged the new XAML into our existing codebase. In the migration, there were a few aspects of the proofs that we decided not to apply because we wouldn't push on the scenarios we need to. However, the changes we did apply, did not require much code rework to the application itself.

This is what came out of that effort, and what was in our last drop.

image

I must admit, I was previously skeptical of the whole designer-developer interaction and what was really possible. I am definitely now a true believer! Great job WPF team!

Posted by Glenn Block | 2 Comments

Prism vs Framework XXX

http://www.flickr.com/photos/mukluk/288925731/

There's been a bunch of talk on the net comparing Prism to other frameworks that exist. In many cases comparisons are being made based on feature parity and such. I think it's important to make the distinction of why Prism is different.

Prism is a set of guidance for building Composite UI applications with WPF. It is not a framework, though it includes a light framework that was refactored out of building the guidance. This is actually a very small part of it. Here are some of the things that are different about Prism.

  • Built with some of the leading WPF experts in the industry.
  • Includes a reference implementation that was developed under the review of more than 25 industry experts, including several fortune 500 companies, the WPF team and the .NET product teams.
  • Includes comprehensive documentation on building Composite UI applications, what kinds of challenges they solve, when they are appropriate, which design patterns and principles they incorporate.
  • Includes How-Tos walking through how to implement the various composite functionality within your apps.
  • Includes several Quickstarts designed to ease adoption, and to illustrate specific aspects of building Composite UIs.
  • Allows customers to incrementally adopt it in their existing WPF applications rather than starting from scratch.
  • Incorporates a Composition model that is non-invasive.
  • Fully black-box and white-box tested.
  • Built entirely with Test Driven Development. Full code coverage and unit test suites.

This does not mean that Prism is the end-all solution, as I have said many times that is not. It does mean however that is much more than a framework with a bucket of features. We're not building it to be feature-laden, we're building it to best address a specific set of scenarios.

As a friend of mine told me, "less features is a feature".

Unity and Silverlight

It can be done! Go read Chris's post for more. Jared if you are listening, we need this for PrismContrib. (which I still need to post about)

Posted by Glenn Block | 0 Comments
Filed under: , ,

Reflections on ALT.NET Seattle, breakfast

What do you do before you head over to a day of grueling open-space sessions? Why head to Ruby's diner for breakfast of course.

ALTDOTNET Seattle 004 

Here's my table with Jeremy Miller, Jason Grundy and Jarod Ferguson.

ALTDOTNET Seattle 001

We weren't the only ones who showed up. That's Roy Osherove in the corner (without a guitar), and Scott Reynolds doing what looks like tweeting. The side profile is Dru Sellers.Dustin Campbell

ALTDOTNET Seattle 006

Others showed up as well like Udi Dahan and Don Demsak though they escaped my cameras wrath. Anyway, after eating our "Wheaties", we headed over to Digipen for the opening session. with full bellies and eager minds.

Posted by Glenn Block | 2 Comments
Filed under:

PrismShouldNotReferenceUnity

Clarification: We are not against using Unity, the Prism RI uses Unity, and we've been very happy with it's implementation. We are after all one of Unity's first internal customers. On the other hand, we want to make it easier for customers to use their IOC container of preference, which is what this post illustrates.

Friday night Oren (Ayende) and I headed downtown to Seattle at the Tap House grill, where we paired and hacked there and at my apartment into the early hours of the morning. You can see me tweeting about it below.

image  image

One of the best parts of the evening is the part I have highlighted in red, which happened after a discussion we had on how Prism does not depend on Unity. I told Oren that we had thought of automating as part of our tests to check whether or not any reference was included but that we found it unnecessary as the team was very clear on this requirement. He however disagreed and said "You should, you should" in order that we emphasize it. He then pulled open VS and wrote this test.

image 

My heart skipped a beat before he ran it...

image

Any questions?

Posted by Glenn Block | 1 Comments
Filed under: ,

Brian Noyes thoughts on Prism

Brian Noyes from IDesign is one of the great folks helping us in the design and development of Prism. Brian brings a breadth of experience with WPF, and has worked significantly with CAB. He also was the author of the click-once integration pieces in SCSF. Recently he put together a great post speaking on the work we are doing. He talks about composite applications, what Prism is, and also the state of the project.

I've been meaning to do a similar post, but thanks to Brian I am off the hook. :-)

Check it out here

The Prism team and how we develop

We've got quite a diverse team for Prism that spans 3 continents.

In Redmond

Prism Team 1

Adam Calderon (Interknowlodgy), Arun Subramonian Namboothiri (Infosys), Prasad Paluri (Infosys), Francis Cheung, Julian Dominguez (Southworks), Bob Brumfield, Glenn Block, Blaine Wastell, Nelly Delgado, Brian Noyes (iDesign), and Larry Brader

In Buenos Aires                       And India

  Prism Team 2Prism Team 3

Ezequiel Jadib, Mariano Szklanny  (Southworks)                        Gokul Janardhanan (Infosys), Prashant Javiya (Infosys)

Although there's thousands of miles between us, we work as one team not 3, that's how we make it work!

So who does what?

Area / Role Team members
Dev Francis, Bob, Julian, Adam, Brian
Test Larry, Prasad, Gokul, Arun, Prashant
Docs Nelly, Mariano
Program / Product Planning / Product Mgmt Blaine Wastell, Glenn Block

 

How do we work?

Within the client team (and throughout p&p) we adopt a hybrid of XP and Scrum. We are a TDD shop all the way. We do continuous integration, and practice pair programming (as well as pair planning, pair powerpointing and a few other variations :) ) . We have bi-weekly iterations, do daily stand-ups, ip meetings (and pre-ip), and we have a product backlog. We don't have a "Sprint Backlog", but we do stack-rank our priorities for each iteration during pre-ip, and create TFS WorkItems. We also keep burn down charts and the like to continually measure the team velocity.

What's it like being in the team room?

People often ask what it's like working in the team room. If you haven't work in a collaborative environment before, it might sound scary to all be in the same room. After all, everyone likes having their own space right? One of the core tenets of the agile manifesto is "Individuals and interactions over process and tools". In an agile team, breaking down the walls literally, brings real cohesion amongst the team. When you are in the room, it's as if you can hear the teams heartbeat.

Recently thanks to the CodeBetter guys who lent me their Qik phone, I got a chance to stream some live video of one of our iteration planning meetings (much to the dismay of my team that I caught completely off guard). In the video aside from seeing the shocked faces of the team :(, you'll hopefully get a preview of how we work. (Click the play buttons if you see them or use the links)

Here I am on the way to "surprise" the team......http://qik.com/video/46805

And then.....http://qik.com/video/46813


I feel fortunate to work in such a great environment with such a terrific team!!! I keep waiting for the day when my manager tells me they discovered the computer glitch and it was all a big mistake....

SCSF 2008 - go get it!

After many months of promising, the wait is over.

image

Smart Client Software Factory for Visual Studio 2008 has shipped! (not shiped)

image

Highlights of the new release include:

Get the factory which includes everything here, or download the docs and source (contains the quickstarts)

Read much more about it from Blaine, Mike and Ezequiel. Great job team!

Posted by Glenn Block | 1 Comments

Porting Mobile Client Software Factory to Visual Studio 2008

About six months, we posted on our p&p site that we would not be doing any further development on Mobile Client Software Factory. Since Visual Studio 2008 has shipped, I've been getting a bunch of questions around Mobile Client from customers who have committed to its use. Although our plans have not changed, we've had our sustained engineering team document the steps to upgrade the existing version in order to help those customers.

<Warning>What follows is not simple</Warning>

Installation

Problem #1

When you install Mobile Client Software Factory July 2006, an error occurs:

clip_image002[4]

Workaround

1. Download and install Orca MSI editor (which is distributed with the Windows SDK). The Orca MSI Editor is a table-editing tool that can be used to edit your .msi files. If you want to learn more about this tool, please visit this link.

Note: If you don’t want to download the Windows SDK, the Orca.msi tool is published here (Download it from this place at your own risk).

2. Open Orca MSI editor and then go to File -> Open... Select the MC-SF msi file (Mobile Client Software Factory July 2006 (refresh).msi).

3. Select the RegLocator table from the tables list.

clip_image003[4]

4. Modify the following key values (replace the 8.0 with 9.0 in the paths) from this table:

· GAXRegistry

· FindVSInstallDir

5. Save the changes.

6. Run the MSI file.

Problem #2

When the installer tries to build some solutions, an error occurs:

CaBGen.sln (or ObGen.sln, or OrientationAware.sln, or MobileClientFactory.sln) is from a previous version of Visual Studio and must be converted in order to build in this version of Visual Studio. To convert the solution, open the solution in this version of Visual Studio.”

clip_image005[4]

1. Open %Microsoft Mobile Client Software Factory Install Folder%\Tools\CabGen\CabGen.NoTests.sln in Visual Studio 2008.

a. Run the Conversion Wizard.

b. Copy the Microsoft.Cci.DLL in CabGen\Lib folder (This assembly is distributed with FxCop)

c. Compile the solution.

d. Compilation errors:

· “The name ‘Properties’ does not exist in the current context”

clip_image006[4]

Workaround

Replace ‘Properties’ text for ‘Microsoft.Practices.Mobile.CompositeUI.CodeGen.Properties’.

2. Open %Microsoft Mobile Client Software Factory Install Folder%\Tools\ObGen\ObGen.NoTests.sln in Visual Studio 2008.

a. Run the Conversion Wizard.

b. Copy the Microsoft.Cci.DLL in ObGen\Lib folder (This assembly is distributed with FxCop)

c. Compile the solution.

d. No compilation errors.

e. Compilation warnings!

3. Open %Microsoft Mobile Client Software Factory Install Folder%\ApplicationBlocks\OrientationAware.NoTests.sln in Visual Studio 2008.

a. Run the Conversion Wizard.

b. Compile the solution.

c. No compilation errors.

d. No compilation warnings.


Guidance Package

a. Open %Microsoft Mobile Client Software Factory Install Folder%\GuidancePackage\MobileClientFactory.NoTests.sln in Visual Studio 2008.

b. Run the Conversion Wizard.

c. Compile the solution.

d. Compilation errors:

· “The type or namespace name 'Design' does not exist in the namespace 'Microsoft.VisualStudio.Shell'”

clip_image007[4]

Workaround

Install Visual Studio 2008 SDK (Microsoft.VisualStudio.Shell.Design assembly is included in this SDK, %Microsoft Visual Studio 2008 SDK Install Folder%\VisualStudioIntegration\Common\Assemblies).

Now, register the Guidance Package. (Without problems)

e. Compilation warnings!


Reference Implementation - AdventureWorksToGo

a. Open solution.

b. Run the Conversion Wizard.

c. Compile the solution.

d. Compilation errors:

· “System.IO.Stream.Dispose(bool)' is inaccessible due to its protection level”

clip_image008[4]

Workaround

                Two options:

· #1:

The .NET Compact Framework 2.0 does not support the Dispose method for the memory stream. You can comment out the few lines in GetTypedDataSetSchema method (from RI1OfflineDatastoreDataSet.Designer.cs file):

finally
{
   if ((s1 != null))  {   //s1.Dispose();
  }
   if ((s2 != null))
  {
   //s2.Dispose();
  }
}

· #2:

Upgrade project to .NET Compact Framework 3.5.

Right click on AWToGoShell project and select Upgrade project… option.

clip_image009[4]

f. Compilation warnings!


Create a new Mobile Application / Create a Composite UI Module - Error

clip_image010[4]

Fig. 1 | ModuleLoaderService error.

Workaround

1. Make sure that the Composite UI Module builds to the same location as the Shell assembly.

2. Make sure that the Composite UI Module is set to deploy using the Configuration Manager on the Mobile CAB solution (see Fig. 1.1).

clip_image011[4]

Fig. 1.1 | Solution Configuration Manager.

Add Orientation Aware Control - Warning

Orientation Aware Controls seem to crash when trying to open them in the control design view:

at System.ComponentModel.TypeDescriptor.AddAttributes(Object instance, Attribute[] attributes)

at Microsoft.VisualStudio.Design.VSDesignSurface.CreateDesigner(IComponent component, Boolean rootDesigner)

at System.ComponentModel.Design.DesignerHost.AddToContainerPostProcess(IComponent component, String name, IContainer containerToAddTo)

at System.ComponentModel.Design.DesignerHost.Add(IComponent component, String name)

at System.ComponentModel.Design.DesignerHost.System.ComponentModel.Design.IDesignerHost.CreateComponent(Type componentType, String name)

at System.ComponentModel.Design.Serialization.DesignerSerializationManager.CreateInstance(Type type, ICollection arguments, String name, Boolean addToContainer)

at System.ComponentModel.Design.Serialization.DesignerSerializationManager.System.ComponentModel.Design.Serialization.

IDesignerSerializationManager.CreateInstance(Type type, ICollection arguments, String name, Boolean addToContainer)

at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)

at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)

at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)

at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.

TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)

clip_image012[4]

Fig. 2 | Orientation Aware Control designer

Details

This is a known issue for all OAC editions (Professional, Community and MS P&P).

The Clarius Team is working on this problem. (Note: Mobile Client Software Factory includes an earlier version of the Orientation Aware Control developed by Clarius for Microsoft.)

In order to get updated information on this issue, you can see this thread.

Create Disconnected Service Agent – Error

When you try to create a Disconnected Service Agent from the recipe, an error occurs:

Microsoft.Practices.RecipeFramework.ValueProviderException: An exception occurred during the binding of reference or execution of recipe CreateDisconnectedServiceAgent. Error was: An error happened while calling the value provider or evaluating the default value of argument ProxyType..

You can remove the reference to this recipe through the Guidance Package Manager. ---> System.InvalidOperationException: Type MyShell.localhost.Service1 from file C:\Users\southy\Documents\Visual Studio 2008\Projects\MobileApplication15\Source\MyShell\Web References\localhost\Reference.cs has not been compiled yet. Recompile project and retry.

   at Microsoft.Practices.Mobile.SoftwareFactory.DteConverter.ToType(CodeClass codeClass) in C:\Program Files\Microsoft Mobile Client Software Factory\GuidancePackage\MobileClientFactory\DteConverter.cs:line 100

   at Microsoft.Practices.Mobile.SoftwareFactory.DteConverter.ToType(FileCodeModel codeModel) in C:\Program Files\Microsoft Mobile Client Software Factory\GuidancePackage\MobileClientFactory\DteConverter.cs:line 58

   at Microsoft.Practices.Mobile.SoftwareFactory.DteConverter.ToType(ProjectItem item) in C:\Program Files\Microsoft Mobile Client Software Factory\GuidancePackage\MobileClientFactory\DteConverter.cs:line 45

   at Microsoft.Practices.Mobile.SoftwareFactory.DisconnectedAgent.ProxyTypeValueProvider.OnBeginRecipe(Object currentValue, Object& newValue) in C:\Program Files\Microsoft Mobile Client Software Factory\GuidancePackage\MobileClientFactory\DisconnectedAgent\ProxyTypeValueProvider.cs:line 44

   at Microsoft.Practices.RecipeFramework.Recipe.CallProviders(IDictionary providers, IDictionaryService readonlyArguments, IDictionaryService arguments, Boolean isBefore)

   --- End of inner exception stack trace ---

   at Microsoft.Practices.RecipeFramework.Recipe.CallProviders(IDictionary providers, IDictionaryService readonlyArguments, IDictionaryService arguments, Boolean isBefore)

   at Microsoft.Practices.RecipeFramework.Recipe.Execute(Boolean allowSuspend)

   at Microsoft.Practices.RecipeFramework.GuidancePackage.Execute(String recipe, IAssetReference reference, IDictionary arguments)

   at Microsoft.Practices.RecipeFramework.GuidancePackage.Execute(IAssetReference reference)

   at Microsoft.Practices.RecipeFramework.RecipeReference.OnExecute()

   at Microsoft.Practices.RecipeFramework.AssetReference.Execute()

   at Microsoft.Practices.RecipeFramework.VisualStudio.RecipeMenuCommand.OnExec()

   at Microsoft.Practices.RecipeFramework.VisualStudio.AssetMenuCommand.Invoke()

clip_image014[4]

Fig. 3 | Create Disconnected Service Agent – Recipe Error

Workaround

1. Build solution.

2. Close Visual Studio 2008.

3. Re-open solution.

4. Execute “Create Disconnected Service Agent” recipe.

Posted by Glenn Block | 2 Comments
Filed under: ,

PageFlow reborn

Many of you noticed that WCSF 2.0 did not ship with PageFlow. Early during the development of WCSF 2.0, we decided to break out the PageFlow application block and recipes into a separately downloadable package. There were several reasons foremost of which was that we wanted to make it easier to use Pageflow on it's own without having to install WCSF. A secondary reason was that we had requests from the community around extending their wanting to extend PageFlow.

Unfortunately, due to resource constraints, we were not able to complete the breakout of PageFlow before we shipped. However, as I mentioned, we have been completing this work out-of-band.  We're now nearing completion of the source and will be uploading it shortly. The docs will still need more work and we'll be shipping them some time after the source ships.

What's in the new PageFlow?

  • New stand alone PageFlow guidance package that works on Visual Studio 2008! Does not require WCSF.
  • New XmlPageFlowProvider that does not depend on Windows Workflow Foundation
  • Migrated PageFlowWithShoppingCart Quickstarts to Visual Studio 2008
  • Updated Dependencies to GAT/GAX 1.4

Coming soon to WCSF Contrib!

Reflections on ALT.NET Seattle, the evening before

This weekend I attended the long awaited ALT.NET Seattle, in this post I'll share some of my thoughts from the event. ALT.NET kicked off with an opening session with all the attendees.

After a Costco run to stock up on food along with several others including David Laribee, Scott Bellware and Brad Wilson (thanks for driving), I arrived at Digipen. I remember not really knowing what to expect as ALT.NET has gone through a lot of transition over the past year. I was never the less excited and optimistic.

Upon arrival, the first person I bumped into was Chad Myers. Chad and I had been collaborating over various mediums for the past 6 months, however we never met in person. Meeting Chad in person was a reminder for me about the significance of this event that had drawn in people from across the globe.  As I entered into the main room where the event was going to start, I could feel the excitement. There was something different about "this" event than other events I had attended. I had just returned from "Tech Ed Israel" followed by the MVP summit, but this was something different. Here you could tell that all the attendees felt like they were really part of something, rather than simply being spectators.

To kick off the event, Doc, our facilitator, introduced us to the four main principles of Open-Space, and described what was to come in the coming days. Rather than describe it, it's best if you experience it, which is possible thanks to Jeffrey's videos.

Next as is traditional in Open-Space the attendees planned out the sessions for the next 2 days. The nice thing about this conference is that it's not a spectator-only sport. Anyone can contribute, anyone can suggest a session. Essentially you just write your name and session on a sticker and walk up to the center of the room.

Proposing topics

The other nice thing is that just because you suggest, doesn't mean you need to actually deliver the session. As a convener, your responsibility is to ensure that you start off the meeting, and that someone takes the notes. In my case, I suggested 3 sessions, entitled "To Mock or not to Mock", "Prism, Are we headed in the right direction" and "What is guidance?". In the end, all the proposed sessions were posted on a schedule in the front of the room. (That's me in the blue and white jacket)

More votingsSaturdaySchedule

This was followed by a fishbowl session on PolyGlot programming (means using multiple languages in the same program for those who didn't know including me :) )  Below you can see Hanselman who has jumped in the bowl. One of the highlights of the session was Charlie Calvert from the language team at Microsoft joined the discussion to talk about mixed language support in future versions of the framework.

Polygot Programmer discussion

Just as we had thought evening had ended, we all headed to a local restaurant for another round. I am not sure, but we may have violated a few fire-codes. The highlight of the dinner for me was a conversation I had with Martin Fowler around UI Patterns, particularly Presentation Model and MVP. Yes I know, I am a geek but come on I mean how often do you have Fowler right at the next table?

Dinner4-18

The really impressive part of the whole evening was the way everyone immediately self-organized and the level of respect all the attendees showed one another. Also there was no anti-Microsoft vibe, instead it felt warm and welcoming.

Posted by Glenn Block | 3 Comments
Filed under: , ,

Dinner in Tel Aviv days before Tech-Ed 2008

I am writing this from the keynote for Tech-Ed Israel, with my co-presenter Ohad sitting on my left. So far the trip has been great. Upon arrival and after passing through customs, I was happily surprised to find Ohad waiting for me. He's been a fantastic host, trekking me around Tell Aviv. We spent a lot of time together over the past few days as we prepped for our talks. Up until my arrival in Israel, we've been prepping remotely, as well as jointly developing our "Prism" demo. One of the key concepts behind "Prism" is to allow teams to develop separate portions of the system (modules) in isolation. As part of the writing of the demo, we actually did this, so I am happy to say it does work ;)

Although I was extremely jet lagged upon arrival, Ohad had an exciting dinner planned.

Roy Osherove, Udi Dahan, Oren Eini, Ohad Israeli and my former CTO from Global Factory, Itai Raz got together for a 3-hour pure geek out session (we ate as well)

IMG_4914

It was a memorable evening with several highlights. One was a discussion with Udi around NServicebus and quick primer on why we need Sagas.

Tel-Aviv 2008 001

The second was a bonding session between Oren and I. We started off by clearing our chests. As you can tell we both had some bent up aggression to let go of.

Tel-Aviv 2008 007  IMG_4922

Finally we hugged and made up. :-)

Tel-Aviv 2008 008 

A great way to kickoff what I am sure will be a fantastic event. Look for more posts in the upcoming days.

Posted by Glenn Block | 1 Comments
Filed under:

Upcoming talks

This is one of the posts that I have been meaning to get to for several weeks, but it just keeps falling to the bottom of the backlog. Tomorrow I jump on an airplane so I guess now is as good as time as any. In the next few months, I have several talks at various events.

 

Tech-Ed Israel (April 6th to 8th)

image 

I am honored to be chosen out of about 160 speakers to fly across the country to geek out Israeli style. I'll be speaking on the work we are doing on "Prism" and "Web Client Software Factory" along with my famed compadre Ohad Israeli, the CAB guru. We're burning the midnight oil to put on a good show. If your in town, come check it out. One other highlight of this trip is I am bringing a mobile video-phone with me and will be streaming live highlights at Qik.com. Keep checking that site for regular updates of completely ad-hoc style content.

ALT.NET Seattle (April 18th to 20th)

image4

Myself and a bunch of my team mates are raiding in on ALT.NET. My goal is to convert all the attendees to the "drag first", "design second" way of thinking :) (residual overused April fools joke). Actually this is a big deal, and I am really excited to be a part of it. I attended the ALT.NET Leadership summit in NYC and had a blast. Most of all I am happy since Open Space means not prepping for a talk. I am looking forward to meeting many of the folks whom I have to date only met virtually through the ALT.NET list.

Tech-ed US (June 3 to 6)

image

Heading down to Orlando and bringing the tribe. Like Tech-Ed Israel, I'll be speaking on "Prism" and "WCSF". I am planning to be in town for several weeks, so if there are any local user groups going on, I'm up for attending.

Allright, well time to go pack!

Announcing the patterns and practices Patterns Factory

For some time now I've been working on a project that I've not been able to talk about. Well today, I am finally able to let the cat out of the bag. One of the challenges we've been hearing about from customers is around patterns. We hear they are way too hard to grok, and to implement.

What customers want is for us to help them with guidance on how to implement those patterns in the real world. In the past we've done this through several means starting with guidance, and moving toward code. Time and time again when we have delivered pure "guidance" we hear that is not enough, we need more, we need code, we need tools! We've done specific tooling for things like Service Factory, CAB, and WCSF, but we still hear this is not enough. We want general pattern guidance.

Now this is just one segment of our audience, though a pretty big segment.

At the same time technology has been constantly evolving which opens up new ways to tackle different challenges. In this case today, we believe we reached the point to solve what I'll deem "The pattern problem"

So this is were the Patterns Factory comes in. So what is it? The Patterns factory is planned to be an interactive tooling experience in Visual Studio that will generate artifacts that implement patterns. Want a factory, point the tool at an existing class and you can generate a factory that will create that class. Point at an interface and it will generate a factory for creating classes that implement that interface. Check the dynamic factory check box, and you get a factory that loads from config. You can even select your specific factory to be DI Enabled, and supply the type of container for it to use. OOTB we'll support Unity (of course), Structure Map, Windsor, and NHibernate. We're planning for even more containers to be supported.  I know your probably worrying at this point about all the oodles of codegen. Yes, there will be alot of code, but we're using partial classes and partial methods so that you can regen at any time.

OK, so that tells you what you can do with factories. But that's not where it ends, we've actually built up a library of all GOF patterns that you can generate artifacts. That means you can create implementations of flyweight, visitor, state, and any other patterns you can think of. Yes we've also added MVP, MVC, and Presentation Model support. There's an extensible XML repository where you can define your own patterns and their associated artifacts. I am planning a 10 part series to explain how you configure the repository, it's pretty easy once you know all the rules.

With all this talk about patterns, you may be thinking about the tooling aspect, i.e. what is the designer experience in Visual Studio? Well thanks to the work Don Smith and the service factory team have done, that answer has been provided for us. I am happy to say that the Patterns Factory, will leverage DSL designers both for defining the pattern repository, and for generating the patterns. Using the designers, you can model all the aspects of the system and what patterns are in play. You can save the pattern schema to allow you to create new apps leveraging all the same patterns. We also have Pattern detail collection screens. These screens use the DSL powertoy to allow you to collect specific information on each pattern similar to what i mentioned earlier. For example if I create a new State pattern instance, then I get a set of screens where i can define the list of states. They Flyweight screen is really cool which allows me to key in all my Flyweight instances statically if I want to, you can also link it up to a database through the Entity Framework and allow it to pull all the Flyweight instance metadata directly in.

The other nice part in all of this is that it's completely extensible. It's all XML anyway :) Allright, so you can hear the enthusiasm on my part about this new work. I've not been able to talk about it before, because I didn't know if it would actually get off the ground. It's been my personal project that I've been writing on the side. Fortunately for all our execs in p&p this was a no-brainer.

Within p&p we're really excited about the new Patterns factory. We think with the factory, you'll be dragging and dropping your way to a scaleable enterprise architecture. And because it's April fools the factory is available today for download at http://www.codeplex.com/aprilfools.

More to come on this in the future.

More Posts Next page »
 
Page view tracker