Windows Phone 7 is considered by many to be the logical successor of Windows Mobile 6.x. However, this is a lot more nuanced than it seems at first sight. Windows Mobile 6.x is an open platform for both consumers and business users. Windows Phone 7 on the other hand is being positioned by Microsoft as a platform for smartphones for the consumer market.
Windows Mobile 6.x is an open platform, which is available for a wide range of mobile devices. As a consequence, it is generally hard to develop an application supported by all of them. Application developers for this platform have complete freedom to use the features of the mobile devices directly, using unmanaged code if applicable. Deployment of applications to this platform is controlled by developers themselves. For now the Windows Mobile 6.x platform is here to stay. Microsoft continues to support this platform for legacy applications and mobile devices (such as the HTC HD2, launched earlier this year). There are still many enterprise and line of business applications in use.
Windows Phone 7 is not an open platform. Microsoft has tight restrictions imposed on hardware specifications of the smartphone itself, such as the requirement for three specific buttons at the bottom of the phone. Secondly, only the Microsoft Silverlight and XNA frameworks are supported to develop applications; unmanaged code is not allowed. The advantage of this is that once an application works on one WP7 smartphone, it is guaranteed to work on all of them. And finally, deployment of applications is only supported via the public Windows Phone 7 Marketplace. Only applications that adhere to the Windows Phone 7 Application Certification Requirements will be certified by Microsoft and can be published in the marketplace. Freedom of speech does not apply here, as Microsoft controls whether content is allowed or not. For example, a picture of an iPhone is not allowed because of the rule: "If an application depicts any mobile or wired telephone, handheld PDA, or any other data and voice communicator, it must be either generic or a Windows Phone device."
The Windows Phone 7 is primarily meant for the consumer, but there is a trent towards a more mixed business and personal life. People want one smartphone to perform both personal and business tasks. But if applications can only be deployed via the public marketplace, how do we deploy business-to-business and business-to-employee applications? Microsoft indicates that private marketplaces will be available in the future, but there are no concrete plans for this at the moment. Until then we may have the following alternatives.
1. publish the B2B or B2E application on the public marketplace anyway.
If the application is useless for anyone not in the business and does no harm whatsoever, it may be no problem to publish it in public. An extra threshold may be to charge a fee for the application. The application still needs to be approved by Microsoft.
2. publish a secure application on the public marketplace.
The same as the previous option, except that the application uses online authentication to gain access to the application and online services.
3. deploy the application using a developer license.
When a developer license is registered for a phone, an application can be installed directly on the phone from a PC. This is actually meant for developing only and not as an alternative deployment channel, but I think it is a possibility for small scale deployment. This bypasses Microsoft certification.
4. use a mobile web client application instead.
As an alternative for a rich smart client application a mobile web client application can be developed, which runs in the browser. However, it is not possible to build rich client applications using the full possiblities of the smartphone this way. At this moment also the Silverlight plug-in is not supported on Windows Phone 7.
Hopefully, private marketplaces for the Windows Phone 7 platform will be supported soon.
Saturday, October 30, 2010
Sunday, October 24, 2010
DevEnv day: the end of a great #pnpsym
On DevEnv day at the Microsoft Patterns and Practices Symposium 2010 an overview was given of the Microsoft Development Environment and many new features were demonstrated. Currently, I still use VC++ 6.0 so how could I not be impressed today. Ok, I already use Visual Studio 2010 as well, but there are still so many features that I did not see before. I am eager to use it in my next project.
The keynote of the day gave on overview of the Microsoft Developer Platform, which is meant to offer a complete platform for all development based on Microsoft technology. Be it client, server, browser, cloud or phone, it is all there. The three pillars of this platform consist of the Visual Studio, .NET and Expression. A powerful feature of Visual Studio is the fully integrated extension manager, that is used to download and manage Visual Studio extensions from the Visual Studio Gallery. More than a thousand extensions are already available there. The Productivity Power Tools extension is one you should definity look at. If you are using Scrum than the Scrum process template is another. Updates of extensions will be made available in the extension manager when available. At last also UML diagrams are supported in the IDE. Sequence and class diagrams can be generated from code and code can be generated from UML diagrams using standard or custom made templates.
In the second session a demonstration was given of the new tooling that can be used to guide developers in their work. So far, it seems that learning a new development environment today is still the same burden as it was in the days of Woodstock. But this may change with Automated Guidance integrated in Visual Studio 2010. Automated Guidance offers everything you need in one package to learn about a task or topic. It can offer guidiance for a complete working solution for a project (instead of code snippets), which can be anything such as a phone application or a cloud service. The package can contain direct guidance for the solution, other documents, online links and queries. The Visual Studio extension Feature Builder Power Tool can be used to to create your own guidance.
The last session of this year's symposium demonstrated process patterns in Visual Studio and Team Foundation Server. The main message of this talk was: that how earlier feedback is given about a mistake, how cheaper it is to solve it. Some possiblities to find mistakes early are static code analysis and validating architecture. Visual Studio 2010 has the possibility to create architecure diagrams consisting of packages. A package may for example be used as a layer of your architecture. Reference architectures are also available and can be customized. Classes can be assigned to a certain package. One-way or bidirectional associations between packages define for a package which other packages may be used. Assertion failures for code analysis and architecture validation can be configured to result in build warnings or errors. I would recommend to use at least warnings during build, and don't allow them during check-in.
This was the first time I visited the Microsoft Patterns & Practices Symposium and I really enjoyed it. Both the sessions and other events were good and well organized. I would love to come back next year.
Edwin van Schaick,
Software Architect, Capgemini.
The keynote of the day gave on overview of the Microsoft Developer Platform, which is meant to offer a complete platform for all development based on Microsoft technology. Be it client, server, browser, cloud or phone, it is all there. The three pillars of this platform consist of the Visual Studio, .NET and Expression. A powerful feature of Visual Studio is the fully integrated extension manager, that is used to download and manage Visual Studio extensions from the Visual Studio Gallery. More than a thousand extensions are already available there. The Productivity Power Tools extension is one you should definity look at. If you are using Scrum than the Scrum process template is another. Updates of extensions will be made available in the extension manager when available. At last also UML diagrams are supported in the IDE. Sequence and class diagrams can be generated from code and code can be generated from UML diagrams using standard or custom made templates.
In the second session a demonstration was given of the new tooling that can be used to guide developers in their work. So far, it seems that learning a new development environment today is still the same burden as it was in the days of Woodstock. But this may change with Automated Guidance integrated in Visual Studio 2010. Automated Guidance offers everything you need in one package to learn about a task or topic. It can offer guidiance for a complete working solution for a project (instead of code snippets), which can be anything such as a phone application or a cloud service. The package can contain direct guidance for the solution, other documents, online links and queries. The Visual Studio extension Feature Builder Power Tool can be used to to create your own guidance.
The last session of this year's symposium demonstrated process patterns in Visual Studio and Team Foundation Server. The main message of this talk was: that how earlier feedback is given about a mistake, how cheaper it is to solve it. Some possiblities to find mistakes early are static code analysis and validating architecture. Visual Studio 2010 has the possibility to create architecure diagrams consisting of packages. A package may for example be used as a layer of your architecture. Reference architectures are also available and can be customized. Classes can be assigned to a certain package. One-way or bidirectional associations between packages define for a package which other packages may be used. Assertion failures for code analysis and architecture validation can be configured to result in build warnings or errors. I would recommend to use at least warnings during build, and don't allow them during check-in.
This was the first time I visited the Microsoft Patterns & Practices Symposium and I really enjoyed it. Both the sessions and other events were good and well organized. I would love to come back next year.
Edwin van Schaick,
Software Architect, Capgemini.
Friday, October 22, 2010
An entertaining FrontSide day
The speakers on the Microsoft patterns & practices Symposium 2010 are real entertainers. Speakers like Uncle Bob Martin, Don Box and Scott Hanselman almost have a popstar status. This is why we all have such a good time at this symposium. Today both Karl Shifflett and Ward Bell were very entertaining during their sessions.
This day started with two sessions about Windows Phone 7. I was really interested in those sessions, especially because the phones are finally released this week (at least in Europe). The first session about WP7 explained the positioning in the market, the possibilities of the phone os and the differences compared to Mobile 6.x. Furthermore, phones from HTC, Dell, LG and Samsung were demonstrated. The WP7 phone targets only the consumer market. The experience of the end user is the main focus. A rich developer ecosystem is created based on Silverlight and XNA technology to create quality apps and games. The hardware requirements for WP7 phones are very strict to force a consistent user experience and to enforce that applications which work on one phone will work on all phones. On the contrary, all previous Mobile Phone tried to target both business and consumer market. There were much more differences in hardware and this forced a lot of extra testing for developers on many devices. Applications for WP7 can only be installed from the Microsoft marketplace. Applications can only be made available through this marketplace after approval from Microsoft. At this moment there are no plans anytime soon to allow private marketplaces, thus deployment of proprietary business applications will no be supported in short term. The Windows Phone 7 Developer Guide is available from CodePlex.
The TailSpin demo, that was used in earlier sessions for cloud development, also contains a Windows Phone 7 application that is using services in the cloud. In the second session this day, the implementation of this Silverlight ViewModel application is shown. There are of course differences compared to other Silverlight implementations. Specific WP7 events like launching, closing, activating and deactivating events are routed to the ViewModel to be handled. For specific functionality such as the microphone, which is not available in Silverlight, it is possible to integrate XNA to use the microphone functionality. This cloud scenario can run in a completely simulated environment using DevFabric and the WP7 phone simulator. So without paying for Azure and still waiting for your WP7 phone to arrive, you already can build beautiful WP7 applications in the cloud.
The title of the next session about jQuery says it all: "jQuery: The way JavaScript should be". The way JavaScript works is confusing and not completely consistent implemented in all browsers. Therefore, it is advised when building an application using JavaScript and Ajax technology to look for jQuery first. jQuery is a open source lightweight JavaScript library that works consistently over all browsers. It is built with extensiblity in mind. jQuery is delivered with the Microsoft development tools. Several jQuery extensions are available at CodePlex. You can search in the open source community for much more available extensions. A good example of using jQuery is in the hooizdat application on CodePlex.
Karl Shifflett did two sessions in a row. First he explained the basic of the Model-View-ViewModel pattern. This is a design pattern for UI. He showed the basic binding for a simple application and then the M-V-VM pattern for WPF for the exact same application. Basic binding is not wrong, but becomes complex for applications with many and/or large forms and is hard to test and maintain. The mapping between the View and the ViewModel need not one on one. A ViewModel can map on multiple Views and also the other way around. The ViewModel need not only be used for values, but can also be used for other properties: disable button, start animation, change ViewState, show validation errors. The M-V-VM pattern described in his first session is only a pattern. Prism is a framework to make it easier build modular Windows Presentation Foundation (WPF) and Silverlight client applications. This framework has an implementation for using the M-V-VM pattern in those client applications. In his second session he showed many details of the usage of Prism 4.0 in a Silverlight application for integrated navigation. Prism realises navigation between Silverlight pages for you while preserving state. If you want to use the M-V-VM pattern, you should take Prism into account, although you should have a look at other frameworks available as well.
The last session of the day by Ward Bell was again awesome. His sister Cindy and his serious nephew helped him during a humorous presentation to show how your application may use different datasources for different usages. Four types of data are recognized: sample data for UI design in Expression Blend, test data for unittesting, development data for manual testing and live data for the production environment. He demonstrated how Expression Blend can be used to design your first version of the UI including sample data. From this starting point the application can be adapted to set the datasource to be used to the one needed using a bootstrapper class. The BadGolf demo application with was used to demonstrate this case will soon be available on http://www.ideablade.com/.
This day started with two sessions about Windows Phone 7. I was really interested in those sessions, especially because the phones are finally released this week (at least in Europe). The first session about WP7 explained the positioning in the market, the possibilities of the phone os and the differences compared to Mobile 6.x. Furthermore, phones from HTC, Dell, LG and Samsung were demonstrated. The WP7 phone targets only the consumer market. The experience of the end user is the main focus. A rich developer ecosystem is created based on Silverlight and XNA technology to create quality apps and games. The hardware requirements for WP7 phones are very strict to force a consistent user experience and to enforce that applications which work on one phone will work on all phones. On the contrary, all previous Mobile Phone tried to target both business and consumer market. There were much more differences in hardware and this forced a lot of extra testing for developers on many devices. Applications for WP7 can only be installed from the Microsoft marketplace. Applications can only be made available through this marketplace after approval from Microsoft. At this moment there are no plans anytime soon to allow private marketplaces, thus deployment of proprietary business applications will no be supported in short term. The Windows Phone 7 Developer Guide is available from CodePlex.
The TailSpin demo, that was used in earlier sessions for cloud development, also contains a Windows Phone 7 application that is using services in the cloud. In the second session this day, the implementation of this Silverlight ViewModel application is shown. There are of course differences compared to other Silverlight implementations. Specific WP7 events like launching, closing, activating and deactivating events are routed to the ViewModel to be handled. For specific functionality such as the microphone, which is not available in Silverlight, it is possible to integrate XNA to use the microphone functionality. This cloud scenario can run in a completely simulated environment using DevFabric and the WP7 phone simulator. So without paying for Azure and still waiting for your WP7 phone to arrive, you already can build beautiful WP7 applications in the cloud.
The title of the next session about jQuery says it all: "jQuery: The way JavaScript should be". The way JavaScript works is confusing and not completely consistent implemented in all browsers. Therefore, it is advised when building an application using JavaScript and Ajax technology to look for jQuery first. jQuery is a open source lightweight JavaScript library that works consistently over all browsers. It is built with extensiblity in mind. jQuery is delivered with the Microsoft development tools. Several jQuery extensions are available at CodePlex. You can search in the open source community for much more available extensions. A good example of using jQuery is in the hooizdat application on CodePlex.
Karl Shifflett did two sessions in a row. First he explained the basic of the Model-View-ViewModel pattern. This is a design pattern for UI. He showed the basic binding for a simple application and then the M-V-VM pattern for WPF for the exact same application. Basic binding is not wrong, but becomes complex for applications with many and/or large forms and is hard to test and maintain. The mapping between the View and the ViewModel need not one on one. A ViewModel can map on multiple Views and also the other way around. The ViewModel need not only be used for values, but can also be used for other properties: disable button, start animation, change ViewState, show validation errors. The M-V-VM pattern described in his first session is only a pattern. Prism is a framework to make it easier build modular Windows Presentation Foundation (WPF) and Silverlight client applications. This framework has an implementation for using the M-V-VM pattern in those client applications. In his second session he showed many details of the usage of Prism 4.0 in a Silverlight application for integrated navigation. Prism realises navigation between Silverlight pages for you while preserving state. If you want to use the M-V-VM pattern, you should take Prism into account, although you should have a look at other frameworks available as well.
The last session of the day by Ward Bell was again awesome. His sister Cindy and his serious nephew helped him during a humorous presentation to show how your application may use different datasources for different usages. Four types of data are recognized: sample data for UI design in Expression Blend, test data for unittesting, development data for manual testing and live data for the production environment. He demonstrated how Expression Blend can be used to design your first version of the UI including sample data. From this starting point the application can be adapted to set the datasource to be used to the one needed using a bootstrapper class. The BadGolf demo application with was used to demonstrate this case will soon be available on http://www.ideablade.com/.
Thursday, October 21, 2010
Extreme VB Game programming and more on BackEnd day
Again a successful day at the Microsoft Patterns & Practices Symposium 2010 with lots of interesting topics. There were excellent sessions, but I think the climax of the day was the "Whose Code Is It Anyway" coding gameshow hosted by Scott Hanselman. More on that later.
Another great thing to do at the symposium is to have discussions with others during so-called Open Space sessions. During the week everyone has the possibility to put topics or questions to be discussed on the whiteboard. Everyone can vote which topics will be discussed in three parallel sessions at the end of the day. Sessions about topics like Test Driven Development, Agile and SOA give a lot of insight how companies use this stuff. Today I joined the SOA session and I was suprised to hear that in several cases there was no knowledge about which clients depend on which services. Even for in-house solutions. Apparently, if one person publishes a service others are free to use it if needed. This way, things can get out of control really quick. To prevend this, one should design a business-oriented architecture first, based on current and forseeable future business requirements, before coding is started. To make a link to another session: not everything starts with Test Driven Development.
The keynote about Cloud Computing Challenges and Opportunities showed once more to me that Azure is much more flexible than just using it for Microsoft proprietary technology in the web role. You have Windows Azure SDK for Visual Studio, Eclipse, PHP and Java. Management API's are RESTful. The developer experience is use existing skills and tools: Eclipse, Python, PHP, Java, Visual Studio. You can even run other HTTP servers like TomCat or JBoss in a worker role. The challenges appear when existing applications are migrated to the cloud. All kind of aspects like security, state, scaling, regulation and compliance, data sensitivity and more should be reconsidered. Finally, for the future there is much more to come. For example: Windows Azure Appliance for partners will allow large companies or providers to create a private cloud. Cloud computing is still a baby. We are only at the beginning.
The next session explained the freedom of REST (Representational State Transfer) comparing to Soap. REST uses the web as it was meant. It is using the GET, PUT, POST and DELETE verbs of the HTTP protocol to do much more than only CRUD operations. By using the GET verb to retrieve data, better performance is achieved because of HTTP caching. The full power of REST is exposed using hypermedia controls, which allow you to discover possible actions on a resource. Martin Fowler explains the rest in his blog.
Eugenio Pace & Scott Densmore returned to the stage (after doing there workshop about Azure on monday) to show the Tailspin demo, which demonstrates good practices for building a scalable could application. The Tailspin demo is described in detail in the book Developing Applications for the Cloud.
The next session explained the CQRS archtectural pattern which is best used in case you have much more reads than writes with many users (eg. Wiki). It features separate business models en data stores for read and write actions. The huge advantage is that each model and store can be optimized and scaled for it's own purpose, resulting in a much better performance comparing to using one model and store. I like this pattern and I think many solutions can benefit from it.
The session about OData by Don Box was awesome. OData is an open data protocol with the goal to create an ecosystem to connect easier (for example, connect Excel to Twitter). To create such an ecosystem, the protocol shoud be adapted on a large scale. The OData team saw it as a mission to realize this. They started with an implementation for the .NET Framework (not exciting yet). Next Excel consumes data. Next SharePoint supplies data. Next a lot of other Microsofts support OData. Next PHP, jQuery, iPhone development, Restlet. Next third parties facebook, IBM (without asking) and others. Next all that come along. Now it is so width spread, that you can actually do the most amazing stuff. The best demo was the addition of data in a SharePoint list from the command line using the utility curl. The second best was using a Linq-query to determine the best movie of 1972 from a data source that was never meant to do such things. The best movie was The Godfather by the way.
The last session of the day about Agile Web Development with ASP.NET MVC was an overview of tips and tricks how life of a developer can be made much easier. Brad Wilson gave demo's about Test Driven Development with xUnit.net for server-side testing, QUnit for javascript testing and end-to-end (acceptance) testing with the Lightweight Test Automation Framework. Also applying filters for interception, usage of dependency injection and more was demonstrated. Good stuff. See his blog for more information.
The climax of the day after dinner was "Whose Code Is It Anyway" coding gameshow. A hilarious match of two xtreme pair programming teams for people from Microsoft or Norway. Actually, people who knew a Norwegian metal band could also join, but unfortunately I was too late to shout Motorpsycho. One of my favorite bands, by the way. After a short look at the fully functional Shakespeare Programming Language the game started. The teams performed assignments like programming from the command line and implementing sound in VB. I am not able to repeat all jokes and good moments we had in a blog. So, you should have been there, also because the video camera failed to record the show.
Another great thing to do at the symposium is to have discussions with others during so-called Open Space sessions. During the week everyone has the possibility to put topics or questions to be discussed on the whiteboard. Everyone can vote which topics will be discussed in three parallel sessions at the end of the day. Sessions about topics like Test Driven Development, Agile and SOA give a lot of insight how companies use this stuff. Today I joined the SOA session and I was suprised to hear that in several cases there was no knowledge about which clients depend on which services. Even for in-house solutions. Apparently, if one person publishes a service others are free to use it if needed. This way, things can get out of control really quick. To prevend this, one should design a business-oriented architecture first, based on current and forseeable future business requirements, before coding is started. To make a link to another session: not everything starts with Test Driven Development.
The keynote about Cloud Computing Challenges and Opportunities showed once more to me that Azure is much more flexible than just using it for Microsoft proprietary technology in the web role. You have Windows Azure SDK for Visual Studio, Eclipse, PHP and Java. Management API's are RESTful. The developer experience is use existing skills and tools: Eclipse, Python, PHP, Java, Visual Studio. You can even run other HTTP servers like TomCat or JBoss in a worker role. The challenges appear when existing applications are migrated to the cloud. All kind of aspects like security, state, scaling, regulation and compliance, data sensitivity and more should be reconsidered. Finally, for the future there is much more to come. For example: Windows Azure Appliance for partners will allow large companies or providers to create a private cloud. Cloud computing is still a baby. We are only at the beginning.
The next session explained the freedom of REST (Representational State Transfer) comparing to Soap. REST uses the web as it was meant. It is using the GET, PUT, POST and DELETE verbs of the HTTP protocol to do much more than only CRUD operations. By using the GET verb to retrieve data, better performance is achieved because of HTTP caching. The full power of REST is exposed using hypermedia controls, which allow you to discover possible actions on a resource. Martin Fowler explains the rest in his blog.
Eugenio Pace & Scott Densmore returned to the stage (after doing there workshop about Azure on monday) to show the Tailspin demo, which demonstrates good practices for building a scalable could application. The Tailspin demo is described in detail in the book Developing Applications for the Cloud.
The next session explained the CQRS archtectural pattern which is best used in case you have much more reads than writes with many users (eg. Wiki). It features separate business models en data stores for read and write actions. The huge advantage is that each model and store can be optimized and scaled for it's own purpose, resulting in a much better performance comparing to using one model and store. I like this pattern and I think many solutions can benefit from it.
The session about OData by Don Box was awesome. OData is an open data protocol with the goal to create an ecosystem to connect easier (for example, connect Excel to Twitter). To create such an ecosystem, the protocol shoud be adapted on a large scale. The OData team saw it as a mission to realize this. They started with an implementation for the .NET Framework (not exciting yet). Next Excel consumes data. Next SharePoint supplies data. Next a lot of other Microsofts support OData. Next PHP, jQuery, iPhone development, Restlet. Next third parties facebook, IBM (without asking) and others. Next all that come along. Now it is so width spread, that you can actually do the most amazing stuff. The best demo was the addition of data in a SharePoint list from the command line using the utility curl. The second best was using a Linq-query to determine the best movie of 1972 from a data source that was never meant to do such things. The best movie was The Godfather by the way.
The last session of the day about Agile Web Development with ASP.NET MVC was an overview of tips and tricks how life of a developer can be made much easier. Brad Wilson gave demo's about Test Driven Development with xUnit.net for server-side testing, QUnit for javascript testing and end-to-end (acceptance) testing with the Lightweight Test Automation Framework. Also applying filters for interception, usage of dependency injection and more was demonstrated. Good stuff. See his blog for more information.
The climax of the day after dinner was "Whose Code Is It Anyway" coding gameshow. A hilarious match of two xtreme pair programming teams for people from Microsoft or Norway. Actually, people who knew a Norwegian metal band could also join, but unfortunately I was too late to shout Motorpsycho. One of my favorite bands, by the way. After a short look at the fully functional Shakespeare Programming Language the game started. The teams performed assignments like programming from the command line and implementing sound in VB. I am not able to repeat all jokes and good moments we had in a blog. So, you should have been there, also because the video camera failed to record the show.
Wednesday, October 20, 2010
MishMash day
Today was an entertaining day at the Microsoft patterns & practices Symposium 2010 with a lot of interesting discussions in a great atmosphere. Several sessions were held about concepts, principles, patterns and architecture. We had Ask the Experts lunches to speak with the p&p team members and speakers about a lot of topics. During the day it was a joy to see the tweets about the symposium passing by at Twitter #pnpsym.
The keynote session by Uncle Bob Martin about writing clean code was really entertaining. He explained that we all should be proud to be programmers with craftmanship. Software used to be made by putting programmers in a room, than throw some food in and code is coming out. But now agile defines a craft. He explained the three rules of Test-Driven Developement which generated a lot of discussion later today whether everyone should use TDD or not. In my opinion, everyone should.
In the next session the Inversion of Control principle was explained wherein your code is called from a framework instead of the other way around. Dependency Injection is a design pattern that can be used to realize this principle. For .NET there are actually two Microsoft frameworks available: Managed Extensibility Framework (MEF) (part of the NET Framework 4 and Silverlight 4) and Unity (owned by the p&p team). Something to choose here.
Rockford "Rocky" Lhotka continued with a session about how to preserve software assets across UI technologies. He showed how the Basic Xaml Framework (Bxf) results in a uniform implementation to make MVVM work for Silverlight, WPF and Windows Phone 7. I think you should consider bxf carefully for your project, because when the UI never changes or something completely new is introduced instead of XAML, you did it all for nothing.
David Platt explained his Quadrant of Ubiquity(tm) that can be used to categorize applications and use this to make architectural decisions.The important message of this session was that applications should start from the user and work inwards instead of from the technology outwards. I fully agree with that. Unfortunately, applications are often build from the technology outwards.
The next session about Parallel Programming with Microsoft .NET demonstrated the patterns available in a beautiful assembly line application that processes a lot of data from different sources. Code examples of Task Parallel Library (TPL) and Parallel LINQ (PLINQ) where explained to give an inside in how these patterns can be applied. The Visual Studio profiler was very helpful in analysing the usage of the available cores.
The last session was a workshop for teams of about six people to create an architecture in 40 minutes. Each team had a different assignment. The outcome was verified by questions for each team how they addressed certain aspects. Remarkably, most teams didn't address testability at all. Although, someone qualified this as an implementation detail (with the assumption that it should work). A fun thing to do.
We ended the day with beer and pizza. Hurray.
The keynote session by Uncle Bob Martin about writing clean code was really entertaining. He explained that we all should be proud to be programmers with craftmanship. Software used to be made by putting programmers in a room, than throw some food in and code is coming out. But now agile defines a craft. He explained the three rules of Test-Driven Developement which generated a lot of discussion later today whether everyone should use TDD or not. In my opinion, everyone should.
In the next session the Inversion of Control principle was explained wherein your code is called from a framework instead of the other way around. Dependency Injection is a design pattern that can be used to realize this principle. For .NET there are actually two Microsoft frameworks available: Managed Extensibility Framework (MEF) (part of the NET Framework 4 and Silverlight 4) and Unity (owned by the p&p team). Something to choose here.
Rockford "Rocky" Lhotka continued with a session about how to preserve software assets across UI technologies. He showed how the Basic Xaml Framework (Bxf) results in a uniform implementation to make MVVM work for Silverlight, WPF and Windows Phone 7. I think you should consider bxf carefully for your project, because when the UI never changes or something completely new is introduced instead of XAML, you did it all for nothing.
David Platt explained his Quadrant of Ubiquity(tm) that can be used to categorize applications and use this to make architectural decisions.The important message of this session was that applications should start from the user and work inwards instead of from the technology outwards. I fully agree with that. Unfortunately, applications are often build from the technology outwards.
The next session about Parallel Programming with Microsoft .NET demonstrated the patterns available in a beautiful assembly line application that processes a lot of data from different sources. Code examples of Task Parallel Library (TPL) and Parallel LINQ (PLINQ) where explained to give an inside in how these patterns can be applied. The Visual Studio profiler was very helpful in analysing the usage of the available cores.
The last session was a workshop for teams of about six people to create an architecture in 40 minutes. Each team had a different assignment. The outcome was verified by questions for each team how they addressed certain aspects. Remarkably, most teams didn't address testability at all. Although, someone qualified this as an implementation detail (with the assumption that it should work). A fun thing to do.
We ended the day with beer and pizza. Hurray.
Tuesday, October 19, 2010
Azure workshop at the Microsoft p&p Symposium 2010
Today I followed the Windows Azure workshop on the Microsoft patterns & practices Symposium 2010. And the first thing I have to say is that I am impressed how easily an existing ASP.NET web application can be migrated to the cloud. One reason for this is that a web role on Windows Azure is implemented in the cloud using IIS on a Windows Server 2008. An eyeopener for me was that anything that runs on IIS also runs on a Windows Azure web role. Thus, not only ASP.NET but PHP and Java applications as well. (The same goes for worker roles. An executable that runs on Windows Server 2008 should run on a Windows Azure worker role as long as no UI is used.)
For development only two steps are needed to test your web application in a local Azure develoment environment. First the DevFabric environment should be installed, which comes with the Windows Azure SDK. Optionally, the Cerebrata Cloud Storage Studio can also be installed, which is a great tool to manage Azure storage data. Second create a new Windows Azure Cloud Service for an ASP.NET Web Role and make a reference to the existing ASP.NET web application. That is basically it. You are ready to run your application in the local DevFabric environment. Of course, this is not the whole story.
The biggest part of the workshop focussed on the parts of an existing application that needs special attention when you bring them to the cloud. Parts that were addressed are: identify and access control, data storage handling and logging.
Identity control could still work the same if you have your own database with user names and passwords. But in case Active Directory is used, it must be adapted for the cloud. To address this is the cloud, claims-based identity can be used. Windows Identity Foundation (WIF) is available to implement this in a generic way that both works on-premise and in the cloud. A separate guide from the patterns & practices team is available to describe this extensively (see Claims–based Identity and Access Control). The cool thing about the fundamental design pattern used for claims-based identity is that no communication is needed between the web server application and the Security Token Service (STS) which is the provider of security tokens. A trust relation from the web server application to the STS will suffice. And as long as the STS can supply a token with the required claims, it can be used. Be it Active Directory, Facebook, Twitter or whatever you need.
Data stored in databases or local files need to be migrated to the cloud. Azure includes SQL Azure as a cloud alternative for SQL Server and Azure Storage for blobs, tables and queues. Theoretically, an on-premise database can still be used from an Azure cloud service, but most of the time the preferred way is to bring the data to the cloud as well. Switching to a cloud database is easy. An SQL Azure database can be accessed from any location by simply changing the connection string. For simple relational data you have a choice between SQL Azure and Azure Storage for tables. One aspect of this choice is pricing. Depending on the data usage scenarios it may be cheaper to choose one instead of the other. During the workshop also a spreadsheet was presented, which can be used to calculate prices for your scenarios (see How Much Will It Cost?).
When logging is implemented using Enterprise Library, the only thing you need to do to migrate the output to Azure storage, is to replace the listener in de configuration for an Azure specific listener.
The guides made by the patterns & practices team are very useful. I am especially looking forward to the announced next guide about developing Windows Phone 7 applications in the cloud.
For development only two steps are needed to test your web application in a local Azure develoment environment. First the DevFabric environment should be installed, which comes with the Windows Azure SDK. Optionally, the Cerebrata Cloud Storage Studio can also be installed, which is a great tool to manage Azure storage data. Second create a new Windows Azure Cloud Service for an ASP.NET Web Role and make a reference to the existing ASP.NET web application. That is basically it. You are ready to run your application in the local DevFabric environment. Of course, this is not the whole story.
The biggest part of the workshop focussed on the parts of an existing application that needs special attention when you bring them to the cloud. Parts that were addressed are: identify and access control, data storage handling and logging.
Identity control could still work the same if you have your own database with user names and passwords. But in case Active Directory is used, it must be adapted for the cloud. To address this is the cloud, claims-based identity can be used. Windows Identity Foundation (WIF) is available to implement this in a generic way that both works on-premise and in the cloud. A separate guide from the patterns & practices team is available to describe this extensively (see Claims–based Identity and Access Control). The cool thing about the fundamental design pattern used for claims-based identity is that no communication is needed between the web server application and the Security Token Service (STS) which is the provider of security tokens. A trust relation from the web server application to the STS will suffice. And as long as the STS can supply a token with the required claims, it can be used. Be it Active Directory, Facebook, Twitter or whatever you need.
Data stored in databases or local files need to be migrated to the cloud. Azure includes SQL Azure as a cloud alternative for SQL Server and Azure Storage for blobs, tables and queues. Theoretically, an on-premise database can still be used from an Azure cloud service, but most of the time the preferred way is to bring the data to the cloud as well. Switching to a cloud database is easy. An SQL Azure database can be accessed from any location by simply changing the connection string. For simple relational data you have a choice between SQL Azure and Azure Storage for tables. One aspect of this choice is pricing. Depending on the data usage scenarios it may be cheaper to choose one instead of the other. During the workshop also a spreadsheet was presented, which can be used to calculate prices for your scenarios (see How Much Will It Cost?).
When logging is implemented using Enterprise Library, the only thing you need to do to migrate the output to Azure storage, is to replace the listener in de configuration for an Azure specific listener.
The guides made by the patterns & practices team are very useful. I am especially looking forward to the announced next guide about developing Windows Phone 7 applications in the cloud.
Monday, October 18, 2010
Microsoft patterns & practices Symposium 2010
The Microsoft patterns & practices Symposium 2010 is an event for Microsoft software archtects and developers from monday October 18th 'till friday October 22th in Remond, WA. It kicks off on monday with three different workshops: Extending Enterprise Library 5.0, Prism and Patterns for Loose Coupling and Hands-on Windows Azure Guidance.
The Extending Enterprise Library 5.0 workshop is rather specific, I guess. So for myself I don't mind to skip this one. The Prism framework is definitely interesting, but I have to skip it for the Azure workshop. I will probably learn more about the Prism framework during the session on thursday. I am especially interested in the Azure workshop because cloud computing is the promising architecture for the forseeable future. So I will join that one tomorrow. Looking forward to that.
The Azure workshop will be based on two patterns & practices guides, which are available online: Moving Applications to the Cloud and Developing Applications for the Cloud. So if you are interested you can perform the workshop at home.
Edwin van Schaick,
Software Architect, Capgemini.
The Extending Enterprise Library 5.0 workshop is rather specific, I guess. So for myself I don't mind to skip this one. The Prism framework is definitely interesting, but I have to skip it for the Azure workshop. I will probably learn more about the Prism framework during the session on thursday. I am especially interested in the Azure workshop because cloud computing is the promising architecture for the forseeable future. So I will join that one tomorrow. Looking forward to that.
The Azure workshop will be based on two patterns & practices guides, which are available online: Moving Applications to the Cloud and Developing Applications for the Cloud. So if you are interested you can perform the workshop at home.
Edwin van Schaick,
Software Architect, Capgemini.
Subscribe to:
Posts (Atom)