Why is Architecture important?

Today I was humbled in talking about architecture as I stumbled through some explanations of principles and key terms.  For those that know me I am very passionate and professional on how I approach things, including discussions.  I found myself stumbling because I got myself stuck on answering an open question about how I would architect something anyway I wanted to (skies the limit).  I struggled because everyday architects resolve issues within the constraints of budgets, personnel, and technology stacks.  It was like asking me, if you could do anything in the world, you want what would do?  Flight or invisibility?  But at the end of the day, the laws of gravity and physics comes into play.

I asked myself, why is architecture important?

Like everything else to me it is a process and with that it has defining characteristics.  Some of the main issues that seem to get focused on is acronyms and perceptions.  What I mean by that is acronyms have different meanings to different industries – they also seem to overlap.  Like a house, software needs a strong foundation to build on and without it everything built on top of it is at risk – do we really need to concern ourselves with what we call it.  Sometimes I think quite a few great discussions get last with acronyms and there usage

With that what should the goals of Architecture be?

The main focus should be bridging the gap between business requirements and technical requirements by understanding the software’s use cases and working out ways to implement them.

Well then, what key principles should an Architect consider?

  • Instead of building to last, build to change.
  • To reduce risk and model to analyze.
  • Use visualization as a collaboration tool.
  • Work to identify key engineering decisions.

With emergent architecture try using a more iterative or agile approach to help minimize risk of change throughout the process.

So, to answer the main question without a strong foundation you simple end with a house of cards, that is difficult to deploy, modify, manage, and support.  While architect by nature is conceptual, without walking that mile or suffering through a bumpy foundation – how do you really know what foundation to build?

 

INETA Component Code Challenge 2012

This year I have the great opportunity to be one of the judges for the INETA Component Code Challenge.  Here are the details:

Have you ever thought “I have a good idea for an application, however what can I get for it?” and/or “I would love to go to DevConnections or Tech•Ed, but I am not sure how to pay for it?”. Well, you are in luck. With the INETA Component Code Challenge for 2012, all you need to do is create an application using 2 approved controls from 2 approved vendors, create a video talking about your application, and submit it to our judging panel. Our judging panel, consisting of Bill Reiss, Nikita Polyakov, Matt Hidinger, and Greg Leonardo, will be looking for innovation and creativity in the use of approved controls. To read official rules click here.

So grab your computer and Visual Studio and GET YOUR CODE ON!

Disclaimer: INETA covers one conference ticket, hotel, and travel to the conference as is outlined in INETA’s travel policy. Please visit the site for additional rules.

Rock, Paper, Azure! Contest – White Screen or 404 Error While Running Local.

I registered for ROCKPAPERAZURE, downloaded the Bits, after installing the pre-reqs, click F5 and got a 404/blank page.

After some troubleshooting I found that install the following applications through the Microsoft Web Platform Installer, the issue was corrected.  I also verified this with Kevin D. Wolfe – as he had the same issue – thanks Kevin:

  1. IIS 7 Recommended Configuration (Good to clean up IIS installs)
  2. Application Request Routing 2.5

Anyway happy Rock, Paper, Azure!, follow the link for more info or to compete.

Sequential Convoys

Quite a few people have asked “What are sequental convoys?” and “When should I use them?”.  So here is the definition and a quick example on when and/or how I would use them. 

 “A sequential convoy enables multiple single messages to join together to achieve a required result. A sequential convoy is a set of related messages that have a predefined order. Although the messages do not have to be exactly the same, BizTalk Server must receive them in a sequential order.” * Microsoft definition

 Where this becomes handy in business is around batching of messages, an example of this would be when a business process requires batch processing that needs to retain the order in which the message was received.  The way this is accomplished is to put a Listen shape within a delay, which the delay the loop ends.  During this delay time any number of received messages can enter the same business process.  This approach can have a side effect of Zombie messages, but we will look at those in a future post.

In our book, we discuss a pharmaceutical ESB system and we have a process that batches order messages from vendors until 2pm, then sends order processing and shipping.  In this process we show the use of sequential convoys as well as look into the side effects of this process.

Silverlight 4 Printing

Printing in Silverlight has been made pretty simple, how it comes with some caveats because it opnly supports rasterized image printing.  Not 100% a problem but in LOB applications will run into issue with printing thinks like PDF, because all formatting is lost in reflect to the final printed document.

Here is a quick code method on printing in Silverlight 4:

[sourcecode langauge=”csharp”]
PrintDocument documentToPrint= new PrintDocument();
documentToPrint.DocumentName = "Sample Document";
documentToPrint.StartPrint += new EventHandler(documentToPrint_StartPrint);
documentToPrint.PrintPage += new EventHandler(documentToPrint_PrintPage);
documentToPrint.Print();
[/sourcecode]

Quick Refresher – ASP.NET Page Life Cycle

The Life Cycle of a page when requested for the first time:

Initializing: During this phase, the server creates an instance of the server control

Loading: During this phase, the instance of the control is loaded onto the page object in which it is defined.

PreRendering: During this phase, the control is updated with the changes made to it. This prepares the control for rendering.

Saving: During this phase, the state information of the control is saved. For example, if a value is set for the control during the Load event, it is embedded in the HTML tag that will be returned to the browser.

Rendering: During this phase, the server creates the corresponding HTML tag for the control.

Disposing: During this phase, all cleanup tasks, such as closing files and database connections opened by the control are performed.

Unloading: During this phase, all cleanup tasks, such as destroying the instances of server control are performed. This is the final event in the life cycle of a server control

The processing sequence in which a page is processed during a postback event is:

Initializing: During this phase, the server creates an instance of the server control

Loading view state: During this phase, the view state of the control posted by the client is reloaded into the new instance of the control.

Loading: During this phase, the instance of the control is loaded onto the page object in which it is defined.

Loading the postback data: During this phase, the server searches any data corresponding to the control that is loaded in the data posted by the client.

PreRendering: During this phase, the control is updated with the changes made to it. This prepares the control for rendering.

Saving state: During this phase, the change in the state of control between the current request and the previous request of the page is saved. For each change, the corresponding event is raised. For example, if the text of a textbox is changed, the new text is saved and a text_change event is raised.

Rendering: During this phase, the server creates the corresponding HTML tag for the control.

Disposing: During this phase, all cleanup tasks, such as closing files and database connections opened by the control are performed.

Unloading: During this phase, all cleanup tasks, such as destroying the instances of server control are performed. This is the final event in the life cycle of a server control

The events associated with the relevant page cycle phases are:

  • Page Initialization: Page_Init
  • View State Loading:LoadViewState
  • Postback data processing: LoadPostData
  • Page Loading: Page_Load
  • PostBack Change Notification: RaisePostDataChangedEvent
  • PostBack Event Handling: RaisePostBackEvent
  • Page Pre Rendering Phase: Page_PreRender
  • View State Saving: SaveViewState
  • Page Rendering: Page_Render
  • Page Unloading: Page_UnLoad

Configuration Error – BAM Portal

When configuring the BAM portal on a x64 Environment you may receive the following error:

Start registering ASP.NET scriptmap (2.0.50727) at W3SVC/2/Root/BAM.
Error when validating the IIS path (W3SVC/2/Root/BAM). Error code = 0×80040154
The error indicates that IIS is in 64 bit mode, while this application is a 32 bit application and thus not compatible.
(Microsoft.BizTalk.Bam.CfgExtHelper.Utility)

To enable the 32-Bit version of ASP.NET run the following command

cscript %SYSTEMDRIVE%inetpubadminscriptsadsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

OR

You can edit the application pool and change the “Enable 32-Bit Applications” flag to True on the Application Pools for BAM.

There is also a KB article on this.

Home from Tallahassee Code Camp

Was another great weekend with the development community, got to meet allot of great people and Maddux had a great time.

Got to present Linq 4.0 and Silverlight LOB this time around and had a great turn out.  Infragistics helped with providing 3 NetAdvantage Licenses for give aways – thanks Infragistics and the winners.

I am now moving my discussions to Line of Business presentations, so that was the last time the Linq 4.0 presentation will be presented.

Again, thanks everyone for coming and thanks to the coordinators.