Charteris Community Server

Welcome to the Charteris Community
Welcome to Charteris Community Server Sign in | Join | Help
in Search

David Myers Blog

  • Project Velocity

    One of the last sessions I attended last week at Tech Ed was on what Microsoft has dubbed “Project Velocity”, which was one of the very few products discussed during Tech Ed that was new.

    What is “Project Velocity”?

    It is Microsoft’s first foray into the world of distributed caching, a market which thus far only has two main players (Memcached and NCache). Microsoft has said thus far that this will be “free” although it was far from certain whether it would remain this way after version 1 was released. It certainly will be interesting if it is “free”, in particular for the other main players in this area charge for their offering!

    What is a distributed cache?

    A distributed cache is a highly scalable in-memory application cache that is spread across multiple servers. Just like a normal cache its usage can glean significant performance gains by avoiding unnecessary calls to data sources. As the implementation of web farms has become more of a norm the beneficial of an ordinary cache has been diminished, as the cache is only populated on one server whilst the consumer can request data from any of the servers in the farm. Thus the cache is only 100% effective when all the servers in the farm have had their cache populated. In addition to this because they are most likely going to be populated at different times, their disparate cache expiration could lead to stale data or inconsistent data across the web farm.  This issue is resolved by a distributed cache as the cache is shared across the entire farm and is consistent in terms of the data content regardless which server the consumer makes their request to.

    So what would “Velocity” be used for?

    There are three main uses for “Velocity”:

    a) Caching fairly static data that is frequently accessed (e.g. a Product Catalog)

    b) Session data (e.g. ASP.Net session)

    c) Caching data that is accessed frequently but changes are not very frequent (e.g. user’s security permissions)

    The current CTP version and Version 1 will only be appropriate for the first two because there is no way to notify of changes to the cache (i.e. push notification) and there is no way to update the cache should the underlying data be changed (i.e. via SQL Dependency). The push notification and SQL dependency support will not be in Version 1 but is in the plan for Version 2 according to the Velocity team’s project manager (although no dates have been mentioned for Version 2).

    Fairly static data like a product catalog with a finite expiry date is perfect for Project Velocity as the distributed cache can make this data available for all servers in the farm as soon as it is populated by the first call (or pre-populated by a preparation call).

    The most compelling usage of Version 1 will be for session data. The usage of in-memory sessions to store data in between calls has decreased as the usage of web farms have increased, because the only way to make it work is for the sessions to be sticky, which diminishes the positive performance effects of a web farm as the user will be routed to the same server for all request within a session, regardless of the utilization of that server. A session provider has been included within Velocity enabling it to be used as an ASP.Net Cache provider, and thus enables the distribution of the ASP.Net session and its data across all the servers in the web farm.

    This certainly will reduce the number of calls to data sources as much session-oriented data can be persisted in memory, with high availability (as one machine going down will not result in the session data being lost) and no single point of failure.

    Release Roadmap

    CTP 2 - released fairly recently.

    CTP 3 – scheduled release end of 2008/early 2009 Q1.

    Version 1 – scheduled release is March 2009.

     

    For more information including documentation and downloads see: http://msdn.microsoft.com/en-us/data/cc655792.aspx

  • SQL Server 2008 Overload! – "Select Session From TechEdEMEA.SessionList where Title like ‘SQL Server 2008%’

    Yesterday for me was SQL Server 2008 day, where virtually all the sessions I attended were based on SQL Server 2008. By 5pm when getting a coffee I started to think in T-SQl.

    I think it went something like: select CupWithLiquid from Drink where Type=’Coffee’ and Milk=TRUE and Sugar=2 and Caffeine=’LOTS’

    Not content with the SQL Server bashing of yesterday, I went back for a yet another day virtually fill of SQL Server today. “Life is so much easier with indices” – am I going SQL mad??!!

    I decided to group together my notes from all the SQL Server sessions I have attended over the last two days and put it in one blog because there was significant overlap between the various sessions.

    I have divided my notes into the following sections:

    a) T-SQL enhancements
    b) XML enhancements
    c) Service Broker enhancements

    Create Procedure SQLServer2008TechEdReport

    begin

    a) T-SQL Enhancements

    Table Value Parameters

    Ask any developer who has worked with SQL Server what is the problem they most commonly run into and they will most probably respond something along the following lines: We want to pass a list of rows of data as a parameter to a stored procedure, and we either have to use a comma delimited list (which has the potential to become corrupted once we exceed the size of varchar(max)) or we use XML (which has high performance costs when stripping the XML).

    Table Value Parameters solves this whole problem space in a very neat way by allowing the consumer to pass a table of rows as a parameter into a stored procedure. For some this feature alone makes SQL Server a worthwhile release (me included!).

    Below is a real-world scenario where this feature demonstrates its’ raison d’etre (there are many other such scenarios):

    We have a retail scenario where we have a basket which consists of basketlines, stored in the Basket and BasketLine table respectively. There is a stored procedure to add multiple basket lines to be linked to a basket called “AddBasketLines” which in the past had the BasketID as an int and BasketLines as XML (or varchar(max) if a comma delimited list was used).

    With SQL Server 2008 the BasketLines parameter would be declared as a BasketLines Type containing (which contains all the columns which a BasketLine consists of). The consumer of the stored procedure would pass a DataTable with each row representing a Basket Line, using the new SQLDBType of Structured when calling the Stored Procedure using ADO.Net. The AddBasketLines stored procedure can then insert all the rows in one pass, dealing with the parameter much in the same way it would with any other table. This insertion would be done without any XML shredding or comma delimited list processing, achieving an substantial performance improvement.

     

    Merge

    Many RDBMS have had this feature for a long while, and many would say it is well overdue in SQL Server, well SQL Server 2008 finally delivers this feature. The Merge statement allows for combining an Insert, Update and Delete all in one statement, when performing operations between two tables. To best illustrate this feature I will extend on the scenario described in the Table Value Parameters section.

    There is a stored procedure called “UpdateBasketLines” which updates the BasketLine table with the BasketLines that is passed to it via the client as a Table Value Parameter. The client application will pass the entire BasketLine collection which may require the insertion of new basketline records , deletion of existing basketline records or updating of existing basketline records. Previously such an operation would require at least three passes in order to achieve a set of rows in the BasketLine table matching that which is passed by the client application. With SQL Server 2008 and the new Merge statement, the entire operation can be done in one pass. According to the query plan in the examples I have run the performance benefit is not 300% as it may seem likely on the surface, it is more like 200%, which is no mean feat.

    So how does it work? Well the best way to explain this is by showing the SQL syntax of the Merge statement that would be written for this scenario:

    MERGE BasketLine AS bi
        USING (SELECT BasketLineID, BasketID, ProductID, Quantity FROM @BasketLines) as bis
        ON bi.BasketLineID = bis.BasketLineID and bi.BasketID = bis.BasketID
    WHEN MATCHED AND (bi.ProductID <> bis.ProductID or bi.Quantity <> bis.Quantity) THEN UPDATE SET bi.ProductID = bis.ProductID, bi.Quantity = bis.Quantity
    WHEN NOT MATCHED BY SOURCE THEN DELETE    
    WHEN NOT MATCHED BY TARGET THEN INSERT values (bis.BasketID, bis.ProductID, bis.Quantity);

    Here is a decomposition of the above Merge statement:

    a) How to join the data in the Table Value Parameter (@BasketLines) ---> ON bi.BasketLineID = bis.BasketLineID and bi.BasketID = bis.BasketID
    b) What to do when both rows match on the key but the ProductID or Quantity is different [update the values] ---> UPDATE SET bi.ProductID = bis.ProductID, bi.Quantity = bis.Quantity
    c) What to do when there is no matching row in the source (i.e. the @BasketLines Table Value Parameter) [Delete the row in the BasketLine table] ---> DELETE
    d) what to do when there is no matching row in the destination (i.e. the BasketLine table) [insert a row in the BasketLine table] ---> INSERT values (bis.BasketID, bis.ProductID, bis.Quantity)

    As you can see in one pass the contents of the BasketLine table and @BasketLines Table Value Parameter are synchronised.

     

    Delighters (aka Shortcuts)

    The SQL Server team have clearly been influenced by the c# team when adding some new features to the T-SQL language in SQL Server 2008.

    Declare and Assign in-line

    As in C# it is now possible to declare a variable and assign to it on the same line (e.g. declare @CustomerID int = 123)

    Multiple inserts in one statement

    It is now possible to insert multiple rows into a table (explicit data as opposed to from another table), within the same SQL Statement (e.g. insert into Customer (FirstName, LastName) values (‘David’, ‘Myers’), (‘John, ‘Smith), (‘Peter, ‘Jones)

    Compound assignment statements

    Another new language feature copied from C# is the use of +=, –+, /+, and *= in order to increment, decrement, multiply, divide values by themselves. These += clause can also be used to concatenate strings.

     

    Date and Time

    There have been many changes to the DateTime types within SQL Server 2008 namely the addition of the following types:

    a) dateTime2 (excellent naming – NOT!) - Goes down to milliseconds and accepts dates before 1753

    b) dateTimeOffSet – Allows for time zones to be stored as a part of a date.

    c) Date – Contains only the date portion of DateTime (e.g. 12/08/2008)

    d) Time – Contains only the time portion of DateTime (e.g. 12:20:22.00)

    Two new functions have also been added associated with time zone offsets:

    a) ToDateTimeOffSet – Converts a dateTime2 variable to a specified offset.

    b) SwitchOffset – Changes the offset stored with a dateTime2 variable.

     

    Spatial Data

    SQL Server 2008 adds a new type GEOGRAPHY which can be used to store and manipulate geodetic and planar spatial data. in addition a new Index type is included to handle Spatial data types for high-query performance. In SQL Server Management Studio when a result involves a spatial data type, a new table is displayed “Spatial Results” which plot the results on a graph.

    Sparse Columns

    Sparse columns are columns that are optimized for the storage of NULLs. To define a column as sparse, specify the SPARSE attribute as part of the column definition. Sparse columns consume no storage for NULLs, even with fixed-length types; however, when a column is marked as sparse, storage of non-NULL values becomes more expensive than usual. A sparse column should only be used when it will store a large percentage of NULLs.

     

    b) XML Enhancements

    XML was certainly not the focal point of new features in SQL Server 2008, with not many new features added.

    Below is a summary of the new XML features in SQL Server 2008:

    XML Schema Validation

    Lax Validation Support
    Lax validation allows you to validate any schema definitions specified but ignore those not specified (previously it was the case of validate or not).

    An example of this is illustrated with the following schema definition:

    <schema>
       <element name="OrderLine" type="anyType"/>
       <element name="ProductID" type="int"/>
       <element name="Quantity" type="int"/>
       <element name="Kgs" type="int"/>
    </schema>


    The following XML is valid even though the element <NoInPacket> is not defined in the schema:

    <OrderLine>
       <ProductID>55</ProductID>
       <NoInPacket>Wrong</NoInPacket>
       <Quantity>2</Quantity>
    </OrderLine>

    However the following XML is invalid because the <Kgs> element was defined as int and not string:

    <OrderLine>
       <ProductID>22</ProductID>
       <Quantity>2</Quantity>
       <Kgs>Wrong</Kgs>  
    </OrderLine>

    Full xs:dateTime Support

    When storing dateTime in XML in SQL Server 2005 you had to specify your timezone when storing dateTime did not preserve the time zone information for your data for dateTime or time, instead if normalized it to UTC. Now you no longer have to specify the timezone and if a timezone is specified it is preserved and no normalization to UTC is performed.

    Union and List Types
    You can use XML schemas to define data types for your XML data that allow a limited set of values to be assigned to multi-value elements and attributes (i.e. enumerations). In SQL Server 2008 you can union these enumerations given the option to have more than one type of enumeration to be used. For example if you had a list of shirt sizes that could be either “S, M, L” or “18, 20, 22”, in SQL Server 2005 you could not have an enumeration combining both sets of values. This features allows both the below to be valid xml: 

    <TShirtSize>22</TShirtSize> 

    <TShirtSize>L</TShirtSize>

     

    XQuery Enhancements

    Let Clause

    SQL Server 2008 adds support for the let clause, which is used to assign values to variables in an XQuery expression (as illustrated below)

    SELECT @x.query(
    '<Orders>
    {
        for $invoice in /Invoices/Invoice
        let $count :=count($invoice/Items/Item)
        order by $count
        return
        <Order>
            {$invoice/Customer}
            <ItemCount>{$count}</ItemCount>
        </Order>
    }
    </Orders>')

     

    XML DML Enhancements

    insert expression

    In SQL Server 2005 the xml data type supports the XML DML expressions insert, replace value of, and delete through its modify method – guess which one is missing? Insert!

    SQL Server 2008 adds support for using an xml variable in an insert expression to insert XML data into an existing XML structure. Be warned the performance is horrendous (I tried this a few months back when I first found out about this new feature).

    Below is an example:

    declare @newSQLServerVersion varchar(50)

    set newSQLServerVersion = 'SQL Server 2008'

    SET @sqlServerVersionList.modify('insert sql:variable("newSQLServerVersion") as last into (/SQLServerVersions)[1]')

    c) Service Broker Enhancements

    The enhancements to Service Broker in SQL Server 2008 is few and far between, although there are one or two significant additions.

    Conversation Priority

    The most significant enhancement is one that is present in virtually all other message-based frameworks, “Conversation Priority”. This allows for developing a solution where some messages should be processed as a higher priority than others. Messages are sent over conversations using Service Broker from one Service to another. Conversation Priorities are stipulated in the Destination database based on the Contract, Sending Service or Receiving Service. The priority can be set from 1 to 10, with 10 being the highest priority. The priority rules determine the order in which messages get transmitted or received. One example where this new feature could be implemented is the processing of instructions where different initiators have differing SLA levels e.g. customer facing instructions having a higher priority over internal initiated instructions.

    In the Service Broker community this feature was not really what we were looking for, but it is recognised as a step in the right direction. The idea of priority should have been extended to being able to specify the priority of a message, based on its type, instead of its origin or destination. This can be achieved today via some clever workarounds (i.e. hacks) , and I guess at least the ability to prioritise conversations supplies yet another workaround route to message prioritisation.

     

    Diagnostic Utility

    Service Broker comes with very few tools, and often tools have to be written by the developers of a Service Broker-based solution. Microsoft have however supplied one new tool which will be very useful in diagnosing problems associated with a Service Broker-based solution. The Diagnostic Utility is a command-line tool (called SSBDIAGNOSE) which has two main purposes:

    a) Analyze the configuration between two Service Broker Services –-> gives you the ability to preempt problems.

    b) Analyze running conversations for errors  –-> gives you the ability to identify problems when they happen.

    Of course it would have been nice for this to be incorporated into SQL Server Management Studio, and maybe in future releases it will be (although no promises have been made thus far!)

     

    SQL Server Management Studio Service Broker Enhancements

    SQL Server Management Studio for SQL Server 2008 is still pretty much devoid of any graphical utilities to help a developer of a Service Broker-based solution, however at least there have been some token efforts made to add something for Service Broker developers.

    Service Broker Object Templates

    Right-clicking on any of the Service Broker object types (e.g. Service, Queue etc…) will give you the option to Create a new instance of that object, which in effect opens up the template for that object type. In addition right-clicking an existing instance of a Service Broker object gives you the option to script the create, alter or drop the object. Another template that is available via Management Studio which will help Service Broker beginners is one to create a Service Broker application. It would have been nice to create maybe some wizards to assist the creation of Service Broker objects, but that is not within this release (despite early promises that it would be).

    Service Broker Reports

    There is one new report which has been added to SQL Server Management Studio for SQL Server 2008 which relates to Service Broker. The report is quite comprehensive giving you the ability to drill down through services, queues, activations and messages. It would be nice if this could be updated in real-time, although I guess writing a macro or clicking f5 is not such a hardship!

     

    New System Monitor Objects and Counters

    Five new objects has been added to the Broker Statistics performance objects:

    Activation Errors Total
    Corrupted Messages Total
    Dequeued TransmissionQ Msgs/sec
    Dropped Messages Total
    Enqueued TransmissionQ Msgs/sec

     

    END

  • Scrum

    Two of the sessions on Tuesday which I attended focused on Agile, in particular Scrum. The first session was a presentation on the core aspects of Scrum, whilst the second session was novel Agile talk on Agility, where the presentation itself was Agile. Both were fairly interactive sessions, in particular the second one where the audience specified the content and prioritsation of the content of the presentation.

    The notes below are based on the contents of both sessions:

    What is Scrum?

    Scrum is an Agile process to manage and control development work, with the fundamental basis of a team going forward as a unit, instead of a group of individuals. “The sum of the individuals is greater than the sum of the parts” is certainly the mantra of Scrum.

    Communication is at the heart of the Scrum process, both within the team and outside the team (e.g. to stakeholders, business owners etc...). Scrum is ideally suited for projects with rapidly changing or highly emergent requirements. The work to be done on a Scrum project is listed in the Product Backlog, which is a list of all desired changes to the product.

    At the start of each sprint a Sprint Planning Meeting is held during which the Product Owner prioritizes the Product Backlog and the Scrum Team selects the tasks they can complete during the coming Sprint. These tasks are then moved from the Product Backlog to the Sprint Backlog.

    Each day during the sprint conducts a brief daily meeting called the Daily Scrum, which helps the team stay on track. At the end of each sprint the team demonstrates the completed functionality at a Sprint Review Meeting.

    A Scrum based project will deliver features in a priority order, as set by the business owner. This priority may change during and between iterations (Sprints), as may the estimation for each feature.

    Scrum is a wrapper for existing engineering, containing no prescribed engineering practices. This lends itself well to employing the most appropriate development practices. Scrum is more interested in when and what features are delivered as opposed to how.

    Core Scrum Concepts

    Product Owner

    The Product Owner is responsible for defining the features and requirements of the solution, and setting the priorities of each feature/requirement. This list is turned into the Product Backlog. The Product Owner will also accept or reject deliverables of each Sprint, providing feedback. The Product Owner should review daily builds as well as the deliverables of each Sprint, to supply early feedback.

    Scrum Master

    The Scrum Master is charged with managing the team and its deliverable throughout the solution life-cycle. Included within their responsibilities are (not an exhaustive list):

    · Chair daily Scrum meetings

    · Remove impediments

    · Ensure team is fully engaged/utilised

    · Ensure skill set mix of team is appropriate to solution

    · Shield team from external interference

    · Ensure communication within team is effective

    · Manage communication outside the team

    Engineering Team

    The team should be made up of four to nine people. Teams do not include any of the traditional software engineering roles such as programmer, designer, tester, or architect. Everyone on the project works together to complete the set of work they have collectively committed to complete within a sprint. Scrum teams develop a deep form of camaraderie and a feeling that "we're all in this together." Therefore the team should be cross-functional meaning that each team member should be able to perform all the disciplines within a team (e.g. testing, coding, design etc...).

    It is expected that some members of the team will have specialist expertise in one or more of the disciplines, and as a result they will naturally take the lead in those disciplines. This allows for the better handling of absenteeism (due to illness or holiday) and allow for continuing knowledge development for each team member.

    It is of paramount importance that the composition of the team not change within a Sprint (except under exceptional circumstances) as all estimates were based at the outset of the Sprint on the composition of the team at that point in time.

    The team should be self-organizing (i.e. flat in terms of its hierarchy) with the preference of each team member not having a title (with the exception of the Scrum Master).

    Each team member should be considered as 100% full-time on work associated with the Sprint for the duration of the Sprint.

    Product Backlog

    The Product Backlog is a list of all the features that make up the entire solution. This list can be added to at any time during the solution life-cycle (e.g. before, during and after any of the Sprints). This list is the master list of all items that can be considered as part of the delivery of a Sprint.

    This Product Backlog contains the requirements of the solution, with each one prioritised and estimated. The estimation should not be detailed as more detailed estimates will be performed when composing the contents of a Sprint. Estimations can take the form of “T-Shirt Estimates” (i.e. Extra Small, Small, Medium, Large, Extra Large).

    Each estimation measurement can be given a ballpark concrete estimate according to the skill and experience of the project team in the problem domain (e.g. Extra Small – 4 man-hours, Small = 2 man-days, Medium = 1 man-week, Large = 1 man-month, Extra Large = “lets discuss further!”).

    Methods of prioritisation include:

    1) Basic Ranking from 1 to 5

    2) Stack Ranking (i.e. each item has a unique rank in the list)

    3) Stack Ranking within Basic Ranking (i.e. Those ranked 5, are each Stack Ranked with a unit ranking for each of those with a Basic Ranking of 5)

    High Level Design

    Before any of the Sprints can begin a high-level design should be produced which will be kept up-to-date throughout the solution life-cycle. It is important that this design artefact is not too detailed so that it can be kept up-to-date, but not to high level that it contains no substance.

    Sprint Backlog

    The sprint backlog is the list of tasks that the Scrum team is committing that they will complete in the current sprint. Items on the sprint backlog are drawn from the Product Backlog, by the team based on the priorities set by the Product Owner and the team's perception of the time it will take to complete the various features.

    It is critical that the team selects the items and size of the sprint backlog. Because they are the ones committing to completing the tasks they must be the ones to choose what they are committing to.

    Once an item is transferred from the Product Backlog to a Sprint Backlog, it is estimated in more detail, and this re-estimation may cause the feature to be placed back into the Product Backlog as its’ priority may change following the realisation of the effort required by that feature. Such postponement of a feature of course must be agreed by the Business Owner.

    Sprint

    A Sprint is an iteration in the Scrum life-cycle, containing a subset of features from the Product Backlog, which the engineering team have agreed to deliver by the end of the Sprint. The features in the Product Backlog are selected primarily based on their priority, as agreed with the Business Owner.

    Detailed estimation and analysis is performed on each feature which is part of the Sprint by the entire engineering team. This is followed by the detailed design for those features and then their development. The end deliverable of the Sprint is tested as a production piece of code which may be deployed.

    It is important that no changes are accepted during a Sprint. In the event that a change is required either it is put in the Product Backlog and handled in the next Sprint, or the current Sprint is abandoned and the change incorporate in a new Sprint.

    Daily Scrum

    On each day of a sprint, the team holds daily meetings (“the daily scrum”). Meetings are typically held in the same location and at the same time each day. Ideally the daily scrums are held in the morning as they help set the context for the coming day's work.

    The daily scrum is not used as a problem-solving or issue resolution meeting. Issues that are raised are taken offline and usually dealt with by the relevant sub-group immediately after the daily scrum.

    It is the Scrum Master’s responsibility to ensure the time limitations and the subject matter discussed is appropriate to a Daily Scrum, and where necessary step in to police this.

    During the daily scrum each team member provides answers to the following three questions:

    · What did you do yesterday?

    · What will you do today?

    · Are there any impediments in your way?

    By focusing on what each person accomplished yesterday and will accomplish today the team gains an excellent understanding of what work has been done and what work remains. The daily scrum is not a status update meeting in which a manager is collecting information about who is behind schedule. Rather, it is a meeting in which team members make commitments to each other. If a team member stands up and says that he will complete a piece of work everyone knows that in tomorrow's meeting he will say whether or not he did finish. This has the wonderful effect of helping a team realize the significance of these commitments and that their commitments are to each other, not to some far-off customer or salesman.

    Sprint Burndown

    On a Scrum project, the team tracks its progress against a release plan by updating a release burndown chart at the end of each sprint. The horizontal axis of the release burndown chart shows the sprints; the vertical axis shows the amount of work remaining at the start of each sprint. Work remaining can be shown in whatever unit the team prefers--story points, ideal days, team days, and so on.

    Sprint Review

    At the end of each sprint a sprint review meeting is held. During this meeting the Scrum team shows what they accomplished during the sprint. Typically this takes the form of a demo of the new features.

    The sprint review meeting is intentionally kept very informal, typically with rules forbidding the use of PowerPoint slides and allowing no more than two hours of preparation time for the meeting. A sprint review meeting should not become a distraction or significant detour for the team; rather, it should be a natural result of the sprint.

    Participants in the sprint review typically include the Product Owner, the Scrum team, the Scrum Master, management, customers, and engineers from other projects.

    During the sprint review the project is assessed against the sprint goal determined during the Sprint planning meeting. Ideally the team has completed each product backlog item brought into the sprint, but it is more important that they achieve the overall goal of the sprint.

  • WF 4.0, “Dublin” and “Oslo”

    “Oslo”

    Let’s begin with “Oslo” (which this was the third and final part of the first presentation of the day, but I just want to get it out of the way first!)

    At first glance it is very unclear what this technology addresses, and then you look again, and you still have no idea! Maybe I am missing the point?

    After further careful consideration over coffee I have come to the conclusion that this new technology has the lofty aim of consolidating the high-level design of business processes to be technology agnostic, by allowing the manipulation of implemented business processes via one tool, which utilizes different viewers depending upon the technology being employed (e.g. BizTalk viewer, WF viewer etc...).

    However, “Horse for courses” is the phrase that comes to my mind – why use “Quadrant” (the Visual Studio extension which “Oslo” brings to the party) to manipulate a WF Workflow, when you can use the Workflow Designer? Also what if the solution combines multiple technologies? It was not clear from the presentation whether or not different viewers can be combined in the same solution in “Quadrant”.

    “Oslo” via “M” (it’s new modelling language) and “Intelipad” (it’s compilation engine) allows the usage of textual based DSLs to manipulate/define business processes and the technical building blocks that fulfill them. Personally I am not keen on DSLs and have never found the use for them as yet, however that does not mean they do not have their merit. Again on a personal level, a textual DSL is even less appealing than a graphical based one, but again it may have its’ benefits (although I cannot see them!).

    Model-driven development has the aims of allowing for better transparency and more agile abilities relating to business change. “Oslo” is Microsoft’s attempt to enter this arena, although I am not convinced by the tangible benefits of the “Oslo” offering from what was presented thus far at Tech Ed on the subject. However, it is early in its development lifecycle and over time through more effective tools it may prove to be a valuable alternative to more traditional development methodologies.

    Finally on the “Oslo” subject, the currently available toolsets that make up the “Oslo” offering are far from mature (as they are CTP editions) which may excuse their disjointed appearance. Of course as RTM approaches I am sure that they will be appear more consolidated and may present a compelling offering.

    So to the more striking element of this morning’s sessions – “Dublin” and WF 4.0...

    WF 4.0

    The first presentation began exploring why WF is not so widely used today despite it being at version 3.5. The main reasons were cited as being:

    a) Too complex to create workflows using the clunky designer

    b) Creating hosts is time-consuming and error prone

    So how does “Dublin” and WF 4.0 seek to address these two issues?

    Relating to the first issue, the WF 4.0 Designer and Runtime Engine has been pretty much gutted and re-written. The WF 4.0 Designer uses WPF and seemed significantly more user friendly than the current version. The re-write of the Runtime Engine promises significant performance and stability gains.

    Three other interesting additional features which may increase the usage of WF are:

    a) The inclusion of more base activities.

    b) The inclusion of a new workflow type (Flowchart – which falls in the middle and combines the features of the “State Machine” and “Sequential” workflow types.

    c) Correlation – The ability to link requests and responses via the content of the messages.

     

    “Dublin”

    The second part of the presentation focused on the “Dublin” offering. What is “Dublin”? Well it is a hosting environment which can be used to host WF Workflows. It requires Windows 2008 and uses WAS extensions. IIS does not need to be used with “Dublin” except when administering a “Dublin” hosted application.

    “Dublin” is tasked with the goal of filling the void relating to hosting WF Workflows, in a scalable and manageable manner. It has its own built-in management tools (which are actually IIS extensions) and built-in state persistence (WF 3.5 has this anyway, but “Dublin” enhances the current abilities and offers more scalability). In addition “Dublin” offers the following abilities:

    a) Auto-start

    b) Re-start and re-hydration after failures

    c) Content based routing

    d) Tracking

    e) Diagnostics

    Towards the end of the session I like many others began to think the functionality and abilities offered by “Dublin” and WF 4.0 (and maybe “Oslo” if I could work out what benefits it really offers), sound very similar to that offered by another Microsoft product – BizTalk. So where does “Dublin” and WF 4.0 leave Biztalk?  By chance the next session I attended addressed that very question!

     

    “Dublin” + WF 4.0 OR/AND BizTalk?

    At first glance it looks as if both solution sets overlap each other’s capabilities, and in some circumstances both solutions can achieve the same goals – which I guess gives the implementers and end users choice. However, this is not the case, or at least that was the message that was broadcasted in this session. The message was clear that this is not the aim, the aim is for both technologies to work alongside each other as they compliment each other.

    BizTalk is first and foremost an Integration Server platform. It is hugely capable of integrating with numerous disparate technologies (e.g. EDI, SWIFT, RFID, mainframes, SAP Dynamics, WCF, Web Services etc....) and then orchestrating business processes.

    WF 4.0 and “Dublin” is an Application Server platform, aimed at managing and hosting WF Workflows that predominantly employ WCF Services (or Web Services).

    Currently BizTalk is employed as solution for things that may be able to be done by WF 4.0 and “Dublin”, and maybe in the future this will erode the former’s usage and increase the latter’s usage?

    The main deficiency of WF 4.0 and “Dublin” is the limitation of which technologies it can work with, whilst this is BizTalk’s strength. However, one of the key selling points of WF 4.0 and “Dublin” is the pricing as it comes with Windows 2008 (or will do) and may require a SQL Server license, however that is far less than the cost of a BizTalk license. There are numerous other benefits each solution has over the other e.g. an in-depth business activity monitoring would tilt the balance towards BizTalk, whilst a low-latency require is purported to would favor WF and “Dublin”.

    So at this point in the presentation I was reasonably clear as to when one should be employed instead of the other, although there were some grey areas. Then came a curve ball, when the presenter hinted that WF 4.0 and “Dublin” may include the abilities to interface with other technologies via connectors like EDI, RFID etc... and potentially offer more detailed tracking abilities. Then if I was not confused enough at this point, a slide came up giving some initial details about the BizTalk roadmap beyond the next release (2009 Q1).

    So the message was that BizTalk and WF 4.0/“Dublin” complement each other, but what is not clear is how much the overlapping of abilities will affect the sales/implementations of BizTalk and whether or not the introduction of WF 4.0 and “Dublin” will be the start of the end for BizTalk. For the moment whatever WF 4.0 and “Dublin” is able to do, BizTalk it is a tried and tested enterprise solution, and therefore in most situations will be the preferred option.

  • Tech Ed Keynote: Visual Studio 2010

    Jason Zander (GM Visual Studio Team) presented a series of demonstrations whilst illustrating the new features which will be found in Visual Studio 2010.

    The most striking new features of Visual Studio 2010 are clearly aimed at resolving the "Unable to reproduce bug" syndrome, mainly by allowing the tester to provide a mechanism where the developer is able to see the environment as it was when the defect was discovered and reported by the tester.

    This is achieved via two main new features:

    1. Debug log - Contains details of the code as and when the test was performed which can be interrogated at a later point in time by the developer with the aim of the developer being able to repropoduce it.
    2. Virtual environment state management- Allows the tester to save a point in time view of the testing environment (if virtual) which can then be used by the developer when investigating the defect ensuring that they have the same environment as the tester when the latter reported the defect.

    Two new elements of Visual Studio have been added to facilitate the “hopeful” resolution of the "Unable to reproduce bug" syndrome:

    1. Test Activity Centre – Used to report and diagnose reported defects, with close integration with TFS. More compelling than the current Visual Studio Test and Professional Edition functionality in particular the level of detail available relating to the state at the time of the reported defect.
    2. Lab Management View – Management of the Virtual Environments including the ability to restore to a state in time (or create a local copy of that point in time) of the virtual machines that make up the testing environment (of course this relies on testing environments being virtual).

    Other new features which should appear in Visual Studio 2010 include:

    • Snippets for WPF Markup, XML configuration, JavaScript
    • Extension of JavaScript support in the editor including JQuery
    • More comprehensive abilities in publishing ASP.Net websites (including IIS settings)
    • Visual studio support for SharePoint applications (including SharePoint application templates and SharePoint Server views)
    • More profiling views in particular for assisting the development of applications taking advantage of Parallel Processing
    • Further development in bringing the Visual C++ toolset up to the level of that found in the managed code languages (and in some cases beyond the current capabilities)
    • The Visual Studio IDE itself uses WPF which facilitates a much richer editing environment
  • TechEd EMEA 2008 – (November 10th – 14th)

      I am one of the fortunate ones to spend a week in sunny Spain whilst attending TechEd 2008 in November.

      Hopefully the sessions I attend will reveal some interesting news and views which I will be putting in my blog throughout the week.

      Most of the sessions which I intend to attend are around Architecture and Database technologies, with a sprinkle of SOA for good measure!

      Below are the sessions I intend to attend:

      · ARC203 Architectures: the Good, the Bad, and the Ugly

      · ARC303 When You Have Too Much Data, “Good Enough” is Good Enough

      · SOA201 A First Look at “Oslo”, “Dublin”, and WF 4.0

      · ARC205 How IT will change in next 10 years and why you should care

      · UNC01-LNC Seeing Microsoft Unified Communications in action!

      · ARC307 Designing for Testability: Bridging the Gap between Design and Testing in Object-Oriented Software

      · ARC207 The Microsoft Application Platform: A Perspective

      · ARC305 Building on Quicksand

      · ARC308 If threads could talk - architecting threads

      · ARC312 Web Scalability via Asynchronous Systems Architecture

      · DAT313 T-SQL Enhancements in SQL Server 2008 : Getting Down and Dirty

      · TLA308 New features in C# 3.0

      · DAT301 Understanding SQL Server 2008 Security

      · DAT318 Microsoft SQL Server: Data-Driven Applications from Device to Cloud

      · DAT01-LNC Tell Us Where it Hurts! SQL Server Product Feedback Discussion

      · DAT312 SQL Server Service Broker 2008 Enhancements and Best Practices

      · DAT309 Using Dynamic Management Views To Improve Your Development

      · DAT303 SQLCLR Enhancements in SQL Server 2008

      · DAT317 Project "Velocity": A First Look at Microsoft's Distributed Caching Framework

      · ARC311 Metropolis: Buildings and Applications

      · ARC213 Intentions & Interfaces - making patterns concrete

      · DAT315 Logical Queuing, Quilting technologies together to enable Occasionally Connected/Disconnected Clients.


    If there are any particular questions or areas where anyone would like me to look into further please don’t hesitate to mail me.