Friends of S.A. Architect

TFS Power Tools September 2010 – It is fresh off the press and solves one of our Rangers HOL headaches

Willy-Peter - 3 hours 48 min ago

The latest release of the TFS Power Tools has shipped and can be found here:

… loaned from book “Software Engineers on their way to Pluto”, symbolizing the launch of the latest tools :)

Looking at the download page the changes mainly are here:

  • Team Foundation Server Backups (NEW … very cool)
    The tool can schedule backups for the following databases that your deployment of Team Foundation Server uses:
  • the configuration database
  • the database for each team project collection
  • the databases that Team Foundation Server uses in conjunction with SharePoint Products, if your deployment includes integration with SharePoint Products
  • the databases that Team Foundation Server uses in conjunction with SQL Server Reporting Services, if your deployment includes reports

By using the restore wizard included with this tool, you can restore your entire deployment to new hardware, or selectively restore team project collections to an earlier point in time.

  • Team Explorer Enhancements (UPDATED)
    This tool provides additional Visual Studio menu options and functions to support finding files under version control by status or wildcard, opening a folder using Windows Explorer from the Source Control Explorer context menu, and labelling files and folders in Source Control Explorer. 
  • Team Foundation Power Tool (tfpt.exe) (UPDATED)
    A command line tool that you can use to work with files and directories under version control, team projects, and work items. Some commands display a graphical user interface when run.

The Team Foundation Power Tool contains a resolution to a bug we raised which caused a few Rangers headaches. In essence we were unable to run multiple tfpt.exe createteamproject commands in quick succession as part of our automated HOL setup, without tripping over exceptions. With this latest build, we were able to fully automate the HOL environment, running one PowerShell script that configures all available Rangers HOLs :)

Thanks for a great product TFS Power Tools team!

See Brian’s blog post for all the details here: http://blogs.msdn.com/b/bharry/archive/2010/09/09/sept-2010-tfs-power-tools-release-available.aspx.

Introducing the Visual Studio ALM Rangers – Stuart Preston

Willy-Peter - 20 hours 2 min ago

This post is part of an ongoing series of Rangers introductions. See An index to all Rangers covered on this blog for more details.

Who you are?

I'm Stuart Preston - married to Rachel and I’m the CTO of RippleRock, a company spanning UK, US and India that specialises in Agile and Scrum training, consulting and ALM tools.  In a former life I worked through the ranks as a consultant at Conchango (later EMC Consulting) where I worked on the very popular Scrum for Team System template for TFS since early betas of TFS in 2005.  I am also the founder and co-ordinator of the UK ALM User Group.  I travel a lot internationally with work, but outside of work I love train travel particularly and attempting to take professional-looking photos with my camera.

What makes you "tick"?

I have a passion for improving the quality of software delivery through the use of tools and solid practices - borne from many years of being the guy wheeled in to bail out enterprise and e-commerce projects that were just about to go-live.  It was always just too late to improve the engineering process, and the lessons I learned from this phase of my career guide me today when I work with teams to improve their engineering processes right from the start of the project.

My skillset is (fortunately for me) not specific to one particular technical discipline and one day I'll be installing and configuring TFS, another day I'll be helping testers write better automation, another I'll be writing deployment scripts and installers where an in-depth understanding of the physical environment is required.  I love to troubleshoot and reverse engineer software to understand how it works, not just from the code but from the physical environment it is running in.  Variety and having new daily challenges are what get me up in the morning and I'm lucky to have both.

Where do you live?

I live in the 'Garden of England' - a county called Kent in the south east of England, about an hour away from central London.  Kent is well known for its fruit (especially strawberries in the summer!) and hops used to produce beer (real ale rather than the chemical-based variety...)

Where is the place you call home?

Home for me is Kent, I only have a small family (no children or pets) and my parents are also conveniently in Kent about an hour's drive away - so I don't have an excuse to pick anywhere else!

Why are you active in the Rangers program?

Every day I work with teams who are dependent not just on software but solid practices and tools that help them achieve their goals.  I feel that through participation I am able to give back to the ALM community with wider perspective than I could on my own, drawing on the collective experience of the other Rangers.

Rangers – Lab Management Guide: Rough(necks) Notes #1

Willy-Peter - Tue, 2010-09-07 21:41

We promised complete transparency when we kick-started this project (Visual Studio ALM Rangers – Tackling Lab Management a la “Ruck”) and we have reached a point where I should create the first “notes” post for the project.

Current Status

We are currently refining the product backlog, working on the sprint backlog items and gearing up to install, configure and explore the Lab Management environment in all the feature area teams. We will be able to share some of the plans and activities later this week to give you an insight into what some of the great deliverables in the first “Ruck” sprint will be.

Getting Lab Management Implemented … “rough” and “un-sanitized” notes Preparing the environment … checklists

Thanks Vijay for these checklists, which we will be evaluating and incorporating into the guidance:

    • Check-list for Hyper-V host:
    • BIOS setting for virtualization is enabled.
    • Windows Server 2008 R2 and all its updates are installed.
    • Machine is joined to domain.
    • Hyper-V role is enabled.
    • Hyper-V admin console can be opened.
    • Blank VM can be created and started.
    • ‘Hyper-V settings’ uses the correct folder (with adequate disk capacity) for storing VMs and VHDs.
    • ‘Virtual Network Manager’ in Hyper-V shows that an appropriate virtual network (external for multiple machine or corp-based setups, internal network for self-contained mobile setups).
    • WinRM commands are run as documented in MSDN host setup. This is to improve reliability of operations.
    • Check-list for SCVMM:
    • Windows Server 2008 R2 all its updates are installed.
    • Machine is joined to domain.
    • SCVMM Server is installed.
    • SCVMM admin console is installed.
    • SCVMM admin console can be opened.
    • Hyper-V host is added to a host group in SCVMM.
    • Hyper-V host’s properties in SCVMM show an appropriate amount of resources are reserved for software running on the host.
    • Host group is configured to allow unencrypted file transfers.
    • Library server is configured to allow unencrypted file transfers.
    • A blank VM can be created from SCVMM on the Hyper-V host and stored in the library.
    • Check-list for Template creation:
    • A VM with the necessary OS and pre-requisites is running on the Hyper-V host.
    • VM Prep Tool is downloaded and installed on the SCVMM machine as per the instruction in its documentation.
    • .ps1 files in the VM Prep Tool\VMPrepToolLibrary folders have been unblocked.
    • The logged in user is both an admin on SCVMM and an admin on host.
    • VMPrep tool is run targeting the VM prepared in step 1.
    • New template is stored in SCVMM library.
    • Check-list of TFS configuration:
    • Lab management tab under Application Tier in TFS admin console is configured with SCVMM server.
    • For each project collection, a different host group and library share have been assigned.
    • For each project collection, a lab service account has been assigned.
    • All the verifications when adding host groups and library shares passed.
    • A build controller has been configured against each project collection (for enabling build-deploy-test automation).
    • A test controller has been configured against each project collection (for enabling testing scenarios).
    • The build drop share configured in the build definitions has read permission for lab service account.
    • Check-list for MTM:
    • MTM can be opened and connected to a team project.
    • Lab Center for that project is enabled.
    • Templates that are stored in SCVMM can be imported into MTM.
    • A new environment with the testing and workflow capabilities can be created using templates.
    • The testing and workflow capabilities on that environment become ready when the environment is started.
    Getting started … some great references

    The correct hardware? (thanks Chuck for your post):

    Lab Management VHD (thanks Brian for the pointer):

    Planning and Setting Up (thanks Zayd for the pointers):

    Architecture Models … to branch or not to branch

    Willy-Peter - Tue, 2010-09-07 19:04

    In  Branching and Team Project Guidance … looking for “your” input! we started a discussion on the new branching scenarios and what the rangers are planning to add to the existing Branching Guidance (http://tfsbranchingguideiii.codeplex.com) and the Architecture Tooling Guidance (http://vsarchitectureguide.codeplex.com) in the next refresh.

    This weekend I did some explorations and testing in terms of the “Architecture tooling and modelling branching scenario” topic, to evaluate and confirm some of our discussions on architecture models, UML diagrams and the feasibility of branching and merging these artefacts.

    My “simple” test:

    1. Create a main branch
    2. Drop a small solution with an empty UML Class diagram model project in main.
    3. Branch main to Dev1 and Dev 2, simulating two development teams.
    4. Do the unthinkable and add classes to the empty UML Class diagram model in both the Dev1 and Dev2 branch, using same class names and different operations.
    5. Merge Dev1 back to main … everyone still happy.
    6. Merge Dev2 back to main … pfffff … Houston we have a challenge.

    I am probably lining myself up for a heated debate with the XML evangelists and enthusiasts, because my conclusion is to avoid branching and merging with models at all cost at this stage. The current tooling forces us into a challenging corner where we have to merge XML files, understand the related model file contents, contend with files that interleave other models, and cross link GUIDs and other metadata as shown in the following merge panes:

    The challenging environment, however, seems to be a perfect out-of-band-Rangers solution opportunity :)

    What are your thoughts and should we discourage development teams from branching and merging models?

    Making Money with CodedUI

    Robert MacLean - Mon, 2010-09-06 10:17

    Saturday was Microsoft’s Dev4Dev’s event, where each presenter gets 20min to cover one topic. It is fantastic fun and a great way to learn.

    For the event I decided to tackle CodedUI, which is just a great testing technology and in 20min I showed off a number of features using it. Below is the slides, which are not valuable - unless you jump to the hidden content where you find my demo script and some extra information!

    If you are wanting to play with the demo’s you will also need my pre-constructed demo bits:

    For those who attended and saw my second demo not go according to plan, I apologise again I’ve since run it again and it works every time, I guess the massive audience scared CodedUI into breaking

    AttachmentSize BreakWPF original.zip12.74 KB TestValues.xml270 bytes

    TFS Integration Platform – Codeplex refreshed with new documentation

    Willy-Peter - Sat, 2010-09-04 01:23

    We have just refreshed the http://tfsintegration.codeplex.com/ with the latest copy of the documentation which finally includes the long awaited data sheet (see illustration below on the right) and a revised homepage (below left).

    The homepage has been revised to highlight the difference between the TFS Integration Tools and the TFS Integration Platform and to guide the user to the right location, either the Codeplex site or the Visual Studio Code Gallery. We would appreciate your feedback in terms of the revised homepage and suggestions on how we can improve the Codeplex site and the messaging and positioning of the platform or the umbrella tools.

            

     Get the latest datasheet here: http://tfsintegration.codeplex.com/releases/35476/download/147910.

    Rangers Wall of Scrum – New Project

    Willy-Peter - Thu, 2010-09-02 23:35

    We have just announced the latest new Rangers project, which was one of the top 3 choices for both internal and external Rangers.

    Abstract

    TFS 2010 has a  compelling story on agile development but there is something missing. Customers are asking for a digital Scrum board as an alternative to the sticky notes on planning board.

    This solution is going to be integrated with TFS for enhanced team collaboration. As usual, we are going to focus on a few top features and at the same time deliver an extensible and customizable solution.

    Next steps

    Your candid feedback, with which you can influence the product backlog which we are busy defining, is welcome as always!

    Remind me … what were the other new projects?

    Introducing the Visual Studio ALM Rangers – Rui Melo

    Willy-Peter - Thu, 2010-09-02 21:59

    This post is part of an ongoing series of Rangers introductions. See An index to all Rangers covered on this blog for more details.

    Who you are?

    I’m a senior consultant for Microsoft Services in Portugal. My line of work is mostly IW (Information Worker), where I deliver projects around the office platform (mainly SharePoint related). Actively involved in community activities (SharePoint User Group Portugal).The spare time I invest in family activities and photography.

    What makes you “tick”?

    • My family
    • Photography
    • The sea

    Where you live?

    Western Europe – Portugal – Lisbon – Oeiras(http://www.bing.com/maps/explore/?org=aj#5003/s=w/5872/style=auto&lat=qfnpm2&lon=g6t8dz&alt=109.771538&z=17&pid=5874)

    Where is the place you call home?

    Home is wherever my wife and 3 kids are J If there is something I’ve come to learn in the last 10 years is that the world is a small place. I’ve come to consider it cosy, as long as the family is around.

    Why are you active in the Rangers program?

    Ranger community is one of the best formulas I know to bring the community into Microsoft. In addition, as MS Services employee, I don’t have much of a chance in my day-of-work, to cooperate closer to the product line. The most important points for me are:

    • leveraging the information from the field back into the product group
    • bring the community (MVPs) closer to the Company
    • VS is a heck of a product; stable, powerful, recognised by the developer community as THE development environment. On top of this is as flexible and expandable as your imagination can reach!
    • This Team is a GREAT Team. The selection of feasible and useful projects that actually get to be delivered and appreciated are top achievements.

    What is the best Rangers project you worked in and why?

    The best Ranger project is always the current one, as that one is where all the buzz and hype is :)

    The picture was taken in Seattle aboard a 70 foot sail boat called Obsession :) … isn’t that just the perfect name?

    TFS Integration … Platform or Tools or both?

    Willy-Peter - Thu, 2010-09-02 21:49

    If you have been a visitor to our codeplex site on http://tfsintegration.codeplex.com/ and the code gallery at http://visualstudiogallery.msdn.microsoft.com/en-us/5a8d1703-7987-4081-ba2f-9d0b68b0ed3e, or have been following some of our blogs and forum discussions, you may be asking yourself as to what the difference, if any, is between the TFS Integration Platform and the TFS Integration Tools.

    The Codeplex site home page will be refreshed shortly to address this topic and to guide the users to the correct download site. In the mean time, let us explore this question …

    The TFS Integration Platform represents the re-usable and extensible framework, that allows us to develop integration tooling. Think of it as the engine room and the software development kit (SDK). The TFS Integrations Tools are built on the TFS Integration Platform and represent the official product name that is shipped and supported by Microsoft.

    Custom developers can use the TFS Integration Platform as a platform to build third-party tooling that complements the Microsoft tooling, or extend the platform itself as shown in the illustration below.

    Are you looking at the right product?

    • Are you trying to understand how the TFS Integration Tools and Platform are developed, by exploring the code base?
    • Are you planning to develop your own adapters, providers or other tooling, based on the TFS Integration Platform?
    • Are you looking for the bleeding edge version and early-drops of the TFS Integration Platform or TFS Integration Tools?

    If you have answered yes to any of the above, you should probably get the latest bits from: http://tfsintegration.codeplex.com/.

    Alternatively you may be looking for a supported tool to install, configure and use, without much interest in the inner workings. In this case you should get the latest and supported bits from: http://visualstudiogallery.msdn.microsoft.com/en-us/5a8d1703-7987-4081-ba2f-9d0b68b0ed3e

    If we have a peek at the readiness package documentation that ships as part of the product, we will notice that the majority of the documents are focused on the platform itself, while others, such as the guidance and configuration documents are focused on the tools.

    1. The documentation that has been rebranded as TFS Integration Tools are indicated with an “X” in the Tools column.
    2. The Rational Getting Started document is under construction and is not yet included with the TFS Integration Tools.

    Hope this helps to clear up some of the confusion … clear as mud?

    Introducing the Visual Studio ALM Rangers – Brian Keller

    Willy-Peter - Tue, 2010-08-31 22:19

    This post is part of an ongoing series of Rangers introductions. See An index to all Rangers covered on this blog for more details.

    Who you are?

    Brian Keller, Sr. Technical Evangelist, Visual Studio ALM

    What makes you “tick”?

    What makes me tick can probably be summed up as finding efficiencies! I love helping people find smarter ways of doing things – whether it’s building and testing software, or just life in general. To borrow Willy-Peter’s tagline: “In search of simplicity”

    Where you live?

    Seattle, Washington

    Where is the place you call home?

    Seattle, Washington

    Why are you active in the Rangers program?

    I love the mission, the people, and the challenges – what more could one ask for?!

    Brian at the Enchantments (his favorite place in the world)

    What is the best Rangers project you worked in and why?

    I’m very proud of the branching and merging guidance we have delivered. It’s a hotly requested topic and I feel like customers really appreciate it.

    Catch Brian on his blog here: http://blogs.msdn.com/b/briankel

    Come and gone

    Gail Shaw - Tue, 2010-08-31 16:00

    Or “Plan cache monitoring – insert and remove

    Previously I took a look at the CacheHit and CacheMiss events to see how they behave and how to identify what’s been searched for in the cache. in this follow up, I want to take a similar look at the CacheInsert and CacheRemove events, see when they fire and how to identify the objects that they relate to.

    Again, a word of caution, these can be frequently occurring events on busy servers and so traces should be kept short and to a minimum of events and columns. That said, these should occur a lot less often than the CacheHit and CacheMiss events. If they are occurring very frequently it may indicate that the SQL Server is not reusing plans efficiently.

    CacheInsert

    The CacheInsert event fires after a CacheMiss. The search for a matching plan in the cache failed, firing a CacheMiss event. Since there’s no plan, the optimiser is invoked to generate one and then that plan is inserted into the plan cache before the Query Execution engine begins execution.

    The event is fairly simple, though of course there are a few surprises (what in SQL doesn’t have?).

    Exec FireCacheEvents GO SELECT ID, SomeDate, Status FROM TestingCacheEvents WHERE Status = 'C'

    Three CacheInsert events for two batches. The first is simple enough, it’s the insert of the plan for the stored procedure. The procedure name is in the TextData column and the procedure’s ID is in the ObjectID column. The ObjectName column is not populated for this event.

    The second and third Cacheinsert events are the interesting ones. The second one shows a parameterised version of the ad-hoc SQL statement, while the third shows an unparameterised version of the same ad-hoc SQL statement. Clearly this query was simple enough to qualify for auto-parameterisation. So, are there two plans for this been inserted into cache? To answer that one, I need to switch over to SSMS and query the plan cache.

    select usecounts, size_in_bytes, cacheobjtype, objtype, st.text, qp.query_plan from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) st cross apply sys.dm_exec_query_plan(cp.plan_handle) qp where st.text not like '%sys.dm_exec%'

    Well, there are three entries and the Cache Object Type is listed as compiled plan for all three, but there’s something different between them. Take a look at the size in bytes for the ad-hoc and prepared statements. The ad-hoc is less than half the size of the prepared. That’s not the only thing different. If I open up the execution plans, the exec plan for the prepared statement looks normal. There’s a clustered index scan (there are no nonclustered indexes on this table yet) and a select operator. The plan for the adhoc statement however…

    There’s something missing here, like the rest of the plan. Ok, so the entry with the ad-hoc type is not a complete plan, so what is it?

    There doesn’t seem to be anything on MSDN on this (at least nothing I could find), but two of Kalen’s books1. (Inside Microsoft SQL Server 2005: Query Tuning and Optimisation, page 283; Microsoft SQL Server 2008 Internals, page 533) mention this. These ad-hoc entries are shell queries, cached just to make the parameterised form of the query easier to find. All the execution plan contains for these shell queries is a pointer to the plan for the parameterised version of the query.

    For the ad-hoc query that gets inserted as a shell plan and the parameterised query, the objectID is, as with the CacheHit and CacheMiss events, a hash of the query text and does not match to any object in the database. The full text of the batch is then given in the TextData column.

    I think that’s enough for CacheInsert. On to it’s opposite.

    CacheRemove

    The CacheRemove event fires, as one would expect, when a plan is removed from cache. The interesting question is, when does that occur?

    Is it every event that could possibly result in an inefficient or invalid plan, or just memory pressure and explicit cache flushes that trigger the CacheRemove event?

    Let’s see…

    As an aside, I’m going to add a nonclustered index to the table that I’m using, so that the update of statistics will have an effect. Otherwise the only execution path possible is a table scan, and changing statistics won’t affect that.

    CREATE NONCLUSTERED INDEX idx_TestingCacheEvents_Status ON TestingCacheEvents (Status) GO

    Right, onto the testing.

    Exec FireCacheEvents GO SELECT ID, SomeDate, Status FROM TestingCacheEvents WHERE Status = 'C' GO DBCC FREEPROCCACHE -- Gone. All gone WAITFOR DELAY '00:00:05' GO Exec FireCacheEvents GO SELECT ID, SomeDate, Status FROM TestingCacheEvents WHERE Status = 'C' GO DBCC FREEPROCCACHE(0x0500060063A9355540614285000000000000000000000000) -- Just one removed, the proc WAITFOR DELAY '00:00:05' GO Exec FireCacheEvents GO SELECT ID, SomeDate, Status FROM TestingCacheEvents WHERE Status = 'C' GO exec sp_recompile 'TestingCacheEvents' -- recompile on the table, both proc and ah-hoc plans invalidated. WAITFOR DELAY '00:00:05' GO Exec FireCacheEvents GO SELECT ID, SomeDate, Status FROM TestingCacheEvents WHERE Status = 'C' GO UPDATE TOP(1) TestingCacheEvents SET Status = 'C' WHERE Status = 'B' UPDATE STATISTICS TestingCacheEvents WITH FULLSCAN WAITFOR DELAY '00:00:05' GO Exec FireCacheEvents GO SELECT ID, SomeDate, Status FROM TestingCacheEvents WHERE Status = 'C' GO ALTER TABLE TestingCacheEvents ALTER COLUMN FILLER CHAR(325) WAITFOR DELAY '00:00:05' GO Exec FireCacheEvents GO SELECT ID, SomeDate, Status FROM TestingCacheEvents WHERE Status = 'C' GO

    Well, this is interesting…

    The only things that caused the CacheRemove event to fire were the two DBCC FreeProcCache, the first that, as can be seen from the EventSubClass, cleared the entire plan cache, and the second that cleared a single plan.

    If I go back and look at the whitepaper Plan Caching in SQL Server 2008, it differentiates between removing a plan from cache (which memory pressure and cache flushes do) and invalidating the plan (which recompiles, schema changes, stats changes and the like do). Based on that whitepaper and these results, I would conclude that the CacheRemove event only fires when the plan is actually removed from cache, not when it’s just invalidated. The invalidation of a plan simply results in a recompile next time the plan is needed.

    Now that the question of when it appears is answered, let’s finish with what it looks like.

    There are two possible formats for this event, and it’s the EventSubClass that shows which of the two the particular event is.

    The first possibility is when all of the plan cache has been flushed, identified by a EventSubClass of “2 – ProcCacheFlush”. This will be a result of a DBCC FREEPROCCACHE and some server reconfiguration events. In this case, there will be no ObjectID and the text data will simply state that the cache has been flushed.

    The second possibility is more interesting, especially if monitoring plans being aged out of memory. An EventSubClass of “1 – Compplan Remove” identifies a single plan being removed from cache. These are fired when either a single plan or part of the plan cache is cleared. Examples here are DBCC FREEPROCCACHE with a plan or SQL handle passed to it, DBCC FLUSHPROCINDB, database reconfigurations (restore, detach, offline)

    With the one, the ObjectID does have a value and it’s the ObjectID of the pbject whose plan is being thrown out of cache. As with all the other cache events, for ad-hoc queries the ObjectID is just a hash of the query text and only really useful for matching to CacheMiss, CacheHit and CacheInsert events and the object name or ad-hoc batch appears in the TextData

    That’s more than I planned to write, but CacheRemove turned out to be a little more complex than I expected. Next up, the last part of this sort series – the recompile events.

    African Hawk Eagle (Rangers Lab Management Guide) – The “team”

    Willy-Peter - Tue, 2010-08-31 02:21

    We have the definition of the project team … a family of passionate, competent and knowledgeable technologists … the result will be phenomenal :)

    The final feature areas …

    Unchanged as mentioned in Visual Studio ALM Rangers – Tackling Lab Management a la “Ruck”:

    1. Planning and setup user stories … setting up Lab Management
    2. Lab maintenance stories … maintaining Lab Management environment with evolving projects
    3. Test environments guidance … using Lab Management
    4. Manual and automated testing guidance … effective testing with Lab Management
    5. VM factory … Golden template creation
    The team …

    The  names:

    Adam Jagocki; Adimulam Sudheer; Anthony Borton; Bijan Javidi; Bob Hardister; Brian Blackman; Brian Keller; Chris Burrows; Christian Nielsen; Christopher Menegay; Darren Rich; Etienne Tremblay; Ewald Hofman; Francisco Fagas; Harish Reddy Kothapalli; Janice Choi; Mark Nichols; Mathias Olausson; Michael Ruminer; Micheal Learned; Mick Miller; Pål Bendiksen; Paul Hacker ; Paul Meyer; Pramod Vasanth ; Prasanth Dandamudi; Randy Miller; Richard Florance; Rob Jarratt; Rui Melo; Sin Min Lee; Tiago Pascoal; Tony Feissle; Vijay Machiraju; Wendell Phillips; Willy-Peter Schaub; Zayd Kara

    ”Some” of the faces:



    The Deliverables …

    The team is busy digesting the product backlog and starting with sprint 1 planning, so the exact details are not available at this point. What we know, however, are the core deliverables that the team is designing:

    Hope this meets your expectations and that this project will be as exciting to you as it is for us :)

    Pulled Apart - Part XII: Parsing feeds (ATOM & RSS) in .NET

    Robert MacLean - Mon, 2010-08-30 13:07

    Note: This is part of a series, you can find the rest of the parts in the series index.

    I’ve mentioned that a podcatcher is really just two things put together, a download manager and a feed parser. Feed parsing is not the easiest item to build, just look at my attempt many years ago to build a Delphi RSS parser called SimpleRSS – it works well, but there are many edge cases which can kill it.

    The key things that trip you up when writing a parser is are:

    • RSS and ATOM – There is two major formats for feeds, RSS and ATOM which are very different.
    • Versioning – RSS and ATOM both have a number of versions which requires completely different parsing going on.
    • Errors – It is easy to produce these, it’s just XML, and so there is a lot of feeds which do not validate.

    With that in mind I am really happy that the .NET Framework (since 3.5), includes it’s own parser for feeds: SyndicationFeed.

    SyndicationFeed

    System.ServiceModel.SyndicationFeed supports both ATOM (version 1.0) and RSS (version 2.0) and to use it you need to add a reference to System.ServiceModel.dll. It only handles the parsing, and creation although I don’t care about that functionality in Pull, of feeds. To parse the feed you parse in a XmlReader to the Load method and it takes care of the parsing.

    using (XmlReader reader = XmlReader.Create(podcastUrl)) { return SyndicationFeed.Load(reader); } That really is as complex as this gets

    Pulled Apart - Part XI: Talking to yourself is ok, but answering back is a problem. Why IMPF destroyed CPUS?

    Robert MacLean - Fri, 2010-08-27 10:45

    Note: This is part of a series, you can find the rest of the parts in the series index.

    Pull for me is as much about learning as it is about writing a useful tool that others will enjoy and often I head down a path to learn it was wrong. Sometimes I realise before a commit and no one ever knows, other times it is committed and reading the source history is like an example of how bad things can get and sometimes I even ship bad ideas. IMPF is one such area where I shipped a huge mistake which caused Pull to easily consume an entire core of CPU for doing zero work.

    IMPF would check for messages as using the following process:

     

    The Thread.Sleep(0) is there to ensure application messages get processed, but it is zero so that as soon as a message arrives it is processed. This meant that the check, which did a lot of work, was running almost constantly. This means that Pull ended up eating 100% of a the power of a core

    The Solution

    The solution to this was to change the process from constantly checking to getting notified when there is a new message.

    This is also much simpler to draw than the other way, maybe that should be a design check, the harder to draw the less chance it works

    The only issue is how do I cause that trigger to fire from another application when it writes a message IMPF should read?

    Windows Messaging

    Windows internally has a full message system which you can use to send messages to various components in Windows, for example to turn the screen saver on or off, or to send messages to applications. I have used this previously in Pull to tell Windows to add the shield icon if needed (see Part IX) to the protocol handler buttons.

    I can also use it to ping an application with a custom message which that application can act on. For Pull when I get that ping I know there is a new IMPF message.

    The first part of this is finding the window handle of the primary instance that I want to ping. This I do by consulting the processes running on the machine and using a dash of LINQ filter it to the primary instance.

    private static IntPtr GetWindowHandleForPreviousInstances() { Process currentProcess = Process.GetCurrentProcess(); string processName = currentProcess.ProcessName; List<Process> processes = new List<Process>(Process.GetProcessesByName(processName)); IEnumerable<Process> matchedProcesses = from p in processes where (p.Id != currentProcess.Id) && (p.ProcessName == processName) select p; if (matchedProcesses.Any()) { return matchedProcesses.First().MainWindowHandle; } return IntPtr.Zero; }

    Now I know who to ping, I just need to send a ping. This is done by calling the Win32 API SendNotifyMessage:

    public static int NotifyMessageID = 93956; private static class NativeMethods { [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] [return:MarshalAs(UnmanagedType.Bool)] public static extern bool SendNotifyMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); } public static void PingPreviousInstance() { IntPtr otherInstance = GetWindowHandleForPreviousInstances(); if (otherInstance != IntPtr.Zero) { NativeMethods.SendNotifyMessage(otherInstance, NotifyMessageID, IntPtr.Zero, IntPtr.Zero); } }

    That takes care of sending, but how do I receive the ping? I need to do is override the WndProc method on my main form to check for the message and if I get the right ID (see line 1 about – the NotifyMessageID) I then act on it. In my case I use the bus to tell IMPF that there is a new message.

    protected override void WndProc(ref Message message) { if (message.Msg == WinMessaging.NotifyMessageID) { this.bus.Broadcast(DataAction.CheckIPMF); } base.WndProc(ref message); } This has enabled IMPF to only act when needed, removed a thread (since it no longer needs it’s own thread), simplified the IMPF code and made Pull a better citizen on your machine.

    VSALM August 2010 documentation update on MSDN

    Zayd Kara - Fri, 2010-08-27 00:45

    Julie and team have been hard at work AGAIN bringing you the greatest and latest most up to date documentation on  Visual Studio Application Lifecycle Management.

    Some quick links provided by the team:

    “This month, we’ve added documentation on configuring and working with Team Foundation Server Proxy. We’ve also made important updates to the documentation for upgrading Team Foundation Server, SharePoint Products, and SQL Server, as well as the documentation for build service requirements and integrating Team Foundation Server with SharePoint Products.”

    Post your feedback and questions either in the Community Content at the bottom of each page in the MSDN library or post your comments on their blog.

    Great work team keep it up!

    Technorati Tags: ,,,

    Alexander Schaub (1992.05.18 – 2010.06.28) … the speeches, pictures and songs for everyone who knew the “Champ”

    Willy-Peter - Thu, 2010-08-26 21:04

    In Alexander Schaub … our son, brother and “champ” remembered I summarized my views and memories of the tragedy that ripped a great “champ” from our midst. In this blog post, posted at high-noon in sunny Vancouver, I would like to take the opportunity to thank all our friends, our family, the AFOS family, BB&D, Microsoft, the Visual Studio ALM Rangers, our DevX Customer and Project Management team, and my manager and dear friend Bijan Javidi. Your support was and is phenomenal and together with the kind words for our “champ” and knowing that he touched so many lives in so many good ways makes the nightmare a tiny bit less painful.

    For everyone who could not enter the chapel on Friday July 2nd for the farewell ceremony, either due to not being able to make it to Johannesburg or due to an unexpected, but welcome flood of friends and family members, I would like to herewith summarize the speeches, include a few key photographs and attach the music that was composed for Alexander by his friends.

    Pictures taken during his last few days … all proof of the pinnacle of happiness he enjoyed. The special “jet” day with Ralf  (phenomenal aviation role model) … the day Alex’s career ambitions solidified in his mind …

    The champ, his brothers (Jacques and Thorsten), ‘Bodo’ our dachshund and his “very”special Nicola

      

    Flight from Richards Bay to Johannesburg and back with his aviation friend (brother) Alan

         

    Flying in Richards Bay with the AFOS family … a huge highlight in his life

          

    “Wings” ceremony … I wish I could have been there to hug him!

      … a “proud” pilot!

    Alex’s favourite plane  … Papa-Papa-Tango (PPT) … it now has its very own guardian angel

    The last excursion with his AFOS family on June 27th … one very happy team!

    Two fever trees, planted on the hillside above the accident scene … by Alan in memory of the two young men (Marco and Alexander) who lost their life

        

    Air traffic communication … in case you would like to hear the “Champ” in the air

    When you get re-directed to Windows Live, just click on the following icon to play the audio:

    Song (written, composed and presented by his classmates)

    A special song composed and performed by Alex’s classmates … Goodbye my friend

    Song (written, composed and presented Peter … Nicola’s brother)

    Peter’s composition for Alex … phenomenal!

    I took the liberty to add the audio to a collection of photos showing some of Alex’s aviation highlights. The beginning photos were made on the day he decided that “jets” are his passion and that the Luftwaffe would be his home … high quality (12MB) … lower quality (9MB).

    Speeches Carola (mother)

    Verstehen kann ich’s einfach nicht,
    Warum musstest du schon geh’n?
    Du, unser Sonnenschein und unser Licht,
    Wann werden wir uns wieder seh’n?
    Du warst so gluecklich aus Herzenskraft,
    Hast so viel erreicht mit all’ deiner Macht.
    Hast uns stets mit Stolz bedeckt,
    Vor keiner Herausforderung zurueckgeschreckt.
    Wir wirst du mir fehlen, deine Stime am Morgen?
    Was werd’ ich nur tun ohne “Skypen” und Cell?
    Angst hatte ich immer um dich und auch Sorgen,
    Ich hab’ dich so lieb, es schmerzt auch so sehr,
    Ein Leben ohne dich, es wird mir furchtbar schwer.
    Ruhe in Frieden!

    “Aviation is proof that given the will, we have the capacity to achieve the impossible”, Edward v Rickenbacker.

    And that is exactly what you did Alex my dearest angel, my sunshine. I will miss you terribly and hope that one day we will meet again there where you were so happy. Rest in peace, I shall love you forever.

    In the name of Willy, Jacques and Thorsten, I would like to thank everyone who played such a significant part in Alex’s life, especially his aunt Angelika, uncle Jan, his cousins Michael and Martin, Brian his mentor, who took him “under his wings”, Nicola for giving him all the confidence and loving him unconditionally and last but not least his flying family, the AFOS team. Thank you for doing so much for our angel and helping him live his dream.

    Jacques (brother)

    If Alexander could say one final thing, he would say … “do not feel sorrow, do not cry for me, but rather celebrate life and remember me by just how much I achieved and lived in my short but very special life”.

    Fly high and safe Alex, you will always be our oldest brother!

    Brian (his mentor, friend and fellow pilot)

    @@missing@@to be added as soon possible@@

    Heiko (special friend)

    On the 18th May 1992 Alexander Schaub was born in Johannesburg as the first of three sons of Carola and Willy. At the age of three, Alex visited the Tante Baerbel Kindergarten in Fairland, where we first met. Due to the developed friendship between our parents, Alex and I also began to see each other more often and the first brick for a lasting friendship was laid.

    Because Alex is one year younger than I am, he joined the Deutsche Schule of Johannesburg one year after me, The school beginning was great for us, because when he was in the first grade and I was in the second, we had classrooms next to each other and spent our 5 minute breaks together, informing each other what we have learned in the previous lesson, Until the beginning of this year he always reminded me how I was showing off back then, because I could already count till 100 and he had just learnt how to count till 10. But even if my knowledge was more advanced at that time, Alex always had two marks on his report that were better than mine. The one mark being for arts and the other one being for neatness of his handwriting. This already showed us an early stage what greatness Alex had. And the ones that have seen pictures drawn by him know exactly what I’m talking about.

    After a few years Carola and Willy asked my mother and father to become Alex’s godparents. This of course stabled and increased our friendship even more, so that Alex became my younger brother and I became his older brother.

    When our teen years started, Alex developed interests that the least boys in that age group had. Mostly boys love Soccer and cars when they are teenagers. But Alex wasn’t like that. His big passion was swimming. Every time Alex was in the water, he could forget the world around him, because water was his element. He trained so much that he eventually participated in many races, winning most of them. But he did not only win competitions, he also won the respect of those, who underestimated his skills till then.

    His other passion was flying. He always loved aeroplanes, especially fast jets, and he began to play with the idea of becoming a pilot. When he turned 16, Carola and Willy gave him the opportunity. With a lot of enthusiasm, Alex hit the books and started to study for all the exams needed to become a pilot. This is the time where he began to work for his future, because he was striving to become a pilot for the Deutsche Luftwaffe.

    Although many people know Alex as a shy and quiet boy, he was never like that towards me. In fact, he was more or less the opposite when we spent time together. In some cases he couldn’t stop talking, but I didn’t really mind it because our conversations never got boring. We spoke about everything that boys in our age could talk about and here and there we became very philosophical. That is how our life motto developed. We always said to each other:

    “Man lebt nur einmal, also mach das Beste draus” … “You only live once, so do the best out of it” … and that is exactly what Alex did.

    He dreamed of becoming a fast swimmer, so he did it. He dreamed of becoming a pilot for the Deutsche Luftwaffe and even though his family moved to Canada, he decided to stay in South-Africa in order to do his Abitur which was needed to fulfill his dream. This shows what outstanding willpower Alex has. He was one of the few people I know that actually lived his dreams and when he found the love of his life, Nicola, he became the happiest person on earth. So even if his life ended due to a tragic car accident, I am sure he passed away with a smile on his face.

    Carola, Willy, Jacques and Thorsten, I wish you all the strength needed to overcome this terrible loss, but knowing the Schaub family have an incredible, strong relationship and stands united like no other family; I am convinced that you will find this strength.

    Sebastian (special friend)

    Today we stand here to say farewell to our beloved Alexander Schaub. he was a son, brother, nephew, cousin, class mate, friend and my best friend. Even today I cannot believe that our champion was called by God to show his kindness and good spirit in his paradise so that it could be an even better place.

    I spent a first-class youth with this guy and my best memories are with him. I still recall playing Alien with Alex, Heiko, Thorsten and Jacques and most of the time Alex would play the Alien and we would try and survive in cupboards, hiding in dark places upstairs in the Brooklands house.

    Willy and Carola there is something I want to tell you from the bottom of my heart. We were lucky to have Alex with us and from 17 years I have known him there are three things he wanted:

    He wanted a happy family. He wanted a pilot’s license … these two you gave him.
    And a girlfriend … and Nicola you gave him this joy.

    He had all three and I can tell you now that he achieved what he wanted in South-Africa.

    When I look at Jacques and Thorsten I will always see him!
    Willy will always remind me of Alex’s personality!
    Carola you have his smell!

    Nicola (love of his life)

    To most people at school he was “Schaubi”. A shy, withdrawn, intelligent young man who was driven by his intense passion for flying. But to those who were close to him, he was Alexander or Alex. The Alex I got to know and grew to truly love , was talkative, witty, sincere, concerned about his friends and loved ones, devoted to his family and dedicated to his passion.

    Alex was a true all-rounder. When he wasn’t flying, studying for either school or flying, spending time with me or his friends, he was in the gym working on his fitness, making sure it was up to scratch with the high Luftwaffe standard. His genius idea of drinking raw eggs with banana proved to have kept him in shape, as the air force doctor in Germany reported.

    Even though he was an intelligent, sporty, dedicated and considerate gentleman, I must add that his skills in the kitchen left lots to be desired. The two of us had a good laugh the one day when he asked me if his home-made mango smoothie tasted a bit funny. Upon tasting it, I figured out that Alex had thrown the entire Mango, with the pip and skin into the mixer and tuned it on.

    Alex was extremely grateful towards his family, but especially towards his parents Carola and Willy, for allowing him to stay in South-Africa and not only finish his Abi, but also achieve his PPL (personal pilot license) and, as it turned out, spend time with me. When speaking about his family- like when he spoke about his flying- his eyes would light up and he would smile happily.

    From the way Alex treated my brother Peter, I could see how much he missed his own brothers and how dearly he loved them. He always looked forward to chatting to them on “Skype” or playing “Counterstrike” over the network with them.

    I will always be his first love. I will always love him for who he was. A kind, sincere, intelligent, witty, sporty, driven, ambitious and passionate gentleman, who could write the most heartfelt love poems and always made me feel like a true princes. I was his “Engel” and now he really is one.

    Alex inspired me to become more determined to go after my passion for medicine- no matter what, and he above all, he made me brave.

    From the incredible support I have received over these past few difficult days, it is clear to me how Alex touched and inspired so many people.

    I would like to thank you all for that support!

    Alan (aviation friend and first passenger)

    Dear Alex

    I had the pleasure and honour of meeting you recently when you guys came down to Richards Bay to continue your flight training, due to flight restrictions in the Johannesburg area as a result of the soccer world cup. A brief period that I’ll cherish forever and ever. You were the younger brother that I never had and the new best friend that I was so longing for.

    During these past two weeks you really came out of your shell and you showed such confidence and feared nothing. I was witness to this growth and transformation phase in your life that made you even more likeable and loveable and added to your already remarkable character and personality. I thoroughly enjoyed our time together, a brief time in which we grew very close to each other. We shared a lot and spoke deeply on matters in life when we flew up to Rand airport last Tuesday, and again on our return trip on Saturday morning back to Richards Bay.

    You knew exactly what you wanted from life and you had your future carefully mapped out. You touched my heart and left a very, very deep imprint that will remain there forever. I am twice your age and to date have never met an 18 year old that knew exactly what he wanted or where he was going in life. I was really looking forward to meeting up with you again in Canada at the end of this year for a few months before you would be off to the German Airforce. I will take you, my “Wingman” up flying with me each and every time I go flying and your seat in the cockpit will always be open. Your passion for aviation was reflected by your enthusiasm. You attained your PPL and were issued with your pilot wings from Afos at your solo party down in Richards Bay within a few days after your arrival.

    I was privileged to be your first passenger, after attaining your pilot’s license, on the flight up to Rand airport when we took the aircraft up for a service, and was honoured that you were my “Wingman” and “Co-Pilot” on the return flight back to Richards Bay. I still remember us sitting on the grass at Richards Bay alongside the aircraft, waiting for our lift back to my house. We were chatting about how awesome the flight was and what flying we were going to do together this week and in the future, we also commented on how comfortable we felt in the aircraft whilst the other was flying and in control, and I said “You can be my Wingman any day.” We looked at each other and spontaneously repeated a sentence from one of your old time favourite movies, Top Gun, and said to each other “Bull dust, you can be mine,” which was followed by a huge chuckle.

    You were not shy about expressing your emotions or letting friends and family know that you loved them. You always referred to the Afos group as your “Afos Family,” and that we are and always will be with the greatest of pride and respect of all the time and memories shared together, regardless of how brief. We all share the same passion for aviation, for people in general, and most of all for each other.

    We had an awesome time in Durban on Sunday at Ushaka Seaworld, and then on the return trip our lives were ripped apart and your life was tragically taken away from us the following day. I have never cried or gone down on my knees and prayed as much as I did over the recent days, begging and pleading that you be spared and that you pull through. I have always been “Mr tough guy,” always able to hold back emotions, but you were so special and I just have not been able to hold back my tears and emotions. Now God has a greater need for you and He has issued you with your very own set of wings. By now I am sure that you have mastered using them and are probably even showing off doing some aerobatics and low level flying. The flight back to Rand Airport on Wednesday was exceptionally difficult and done with a very heavy heart. During this fight I remembered a conversation on the previous flight we did from Rand airport to Richards Bay when we experienced some minor turbulence. I told you that I don’t enjoy turbulence and that I tense up and my knuckles normally go white from clenching the control stick very firmly. You told me how much you enjoyed the turbulence and adrenalin of aerobatics and flight limitations.

    On the flight back to Rand airport on Wednesday I experienced some minor turbulence before landing at Newcastle so that we could refuel. I immediately thought of you, our conversation and how much you would have enjoyed it. When we left Newcastle the turbulence became much worse and normally I would be very nervous and uncomfortable, but this time I was overwhelmed with an exceptional sense of calmness and flew only with two fingers holding the control stick. I said to myself that the turbulence was your way of letting me know that you were up there with me, right by my side. I cannot explain the calm and comfort that came over me, but remain convinced that you were up there with me and beside me all the way.

    You were very keen to introduce me to your folks once I was living across in Canada later this year. I can only wish that I didn’t have to meet them like this, but I will remain in contact with them always, they are awesome, just like you told me, so too are your aunt and cousin where you stayed when we were up in Johannesburg last week.

    I would give anything to have you back again. Love and miss you immensely my wingman.

    Until we meet again

    Margrit (Alex’s “Schwester” … pulled from facebook)

    The first swimmer to jump into the icy water on a Monday and Wednesday morning, the one to carry his PPL study booklet in his hands nearly every second of the day, the beautiful eagle-artworks, the one to blush every time Nicola was in sight-our classmate, Alex. Who would’ve guessed that during our twelve years of our school career, twelve years of growing up together, learning together, laughing, hating teachers and struggling together, we would end up crying together when the heaviest shock yet hit us just four months before we were finally done.

    The sudden passing of our classmate has left a scar on not only his family and friends but on his classmates. While the rest of the school seemed to deal with the usual first-day-back-at-school scenario, silence and grief accompanied the icy stare of his empty chair yesterday. Nicht jeder hatte eine enge Verbindung mit Alex, doch umso persönlicher, stärker und intensiver waren die, mit dem er eine teilte. Apart from being his classmate, I had the privilege of Alex calling me his sister, since we shared the same family over the past 18 months.

    Yesterday, I started writing a list of all the ‘Alex and Margrit moments’. When I, smilingly, started page 6, I remembered a phrase that was said at the funeral of my 18-year old friend Stefanie, a few years back: Let us not keep questioning and repeating WHY? WHY?
    Instead, let us repeat and share the word WHEN!

    Remember WHEN Alex and I couldn’t stop laughing the day before our Geschichtsklausur, holding our sore stomachs out of pure frustration of not having a clue what our teacher had tried to teach us in class. Eventually, we printed 27 Wikipedia pages, and studied these, which, as it turned out, didn’t help much either because we walked out of that exam with 36% and 40%.

    WHEN Alex asked me if I could go shopping with him for the Valentines Ball. We stood in front of the shirt section when I realised Alex had no clue what size he takes. And me, having 2 sisters wasn’t of much help. Instead of asking for help, we just grabbed a random shirt, and he walked out of the dressing room in something that looked like a nightgown. We found out later, we had taken an obese-size.

    I think our whole class remembers WHEN Alex was complaining that we had WAY too much homework, when we secretly knew he had finished his holiday-homework before the holidays had even started.

    At this point I would like to challenge each one of us to take Alex as an example for the time ahead of us. Yes, we can cry together, we can question, we can dry
    each others’ tears, but as a class we need to stay strong. We’ve got Prelims and Finals just around the corner.

    In honour of Alex, let’s be prepared well in advance. He will be smiling down at us, flying high.

    Alex, mein Bruder, den ich mir so lange gewuenscht habe, ich vermisse dich.

    Angelika (aunt)

    Liebe Rodi, lieber Willy, Jacques and Thorsten. Liebe Freunde und Bekannte.

    I Wish I had the words
    I wish I had the words,
    to make everything alright.
    I wish I had the comfort,
    to ease your darkest night.
    I wish I had the power,
    to chase away your fears,
    I wish I had the means,
    to dry your heartfelt tears.
    I wish I knew the way,
    to take away your sorrow,
    I wish I had the joy,
    to give you for tomorrow.
    But what I have I give to you,
    my hand of love and friendship too.
    I give my shoulder on which to cry,
    I give my hope to questions why?
    I give my time if you need,
    You’re in my thoughts and prayers indeed.

    If I think back to the 18th of May 1992, when I went to the Park Lane Clinic to visit Carola and my little nephew and there I stood behind a glass window and tried to identify him amongst the many babies . Never in my wildest dreams would I have thought that the time would come where I once again had to be in the position to identify him.

    I stand here today with a heavy heart to say farewell to Alex whom I have grown very close to over the last 18 months. We spent many a weekend together and shared secrets and exchanged views. Alex had not only grown taller, but matured into a confident, dedicated and caring young man, always making sure he did not “stress” his Tante Geka. I now wish he were there to stress me, eat one tin of peaches after the other and have dry jungle oats and highlight his hair. We went to movies and shows and shared many thoughts about flying and Nicola.

    Alex, you have done well and your parents can be very proud of you. You are going to leave a void for sure and will be missed not only by your mom, dad, brothers, Tante Geka, Onkel Jan, Michael, Martin, Nicola and family, but also by many, many more. We will not forget you. Alex, Rest in Peace, Fly high! Alex, Ruhe in Frieden mit all unser Liebe.

    Carola, Willy, and the family would like to thank
    Brian Appleton for his handling of the tragedy, his calm head, compassion and help. What a friend indeed!
    Doves Funeral parlour  for their arrangements.
    Bernie Yves for his lovely words of comfort.
    AFOS and the flying team for all they have done for Alex and their support throughout the last few days.
    All the friends and well-wishes, flowers, condolences, phone- calls and support.
    Frank and Paula, Tante Karin and Christl coming from afar.

    Thank You!

    Conclusion

    Please remember our “champ” and especially his motto for life and infectious passion for his family, friends, his girlfriend Nicola and aviation … listed in no specific order, although aviation and Nicola probably competed for the #1 slot :)  Most importantly, live your life according to his exceptional motto: "You only live once, so do the best out of it”!

    Alexander, please meet “Nicola” the African Hawk Eagle, who we adopted at http://birdsofprey.co.za in your name.  May you both fly high, happy, proud and safe under the African Sky Blue… missing you terribly and loving you forever “Champ”!

    Huge hug from your very proud Paps!

     … the feathered Nicola

    Make sure that you visit Nicola (Alexander’s adopted bird) and Rosie (Jacques’ adopted bird) on your next visit to Dullstroom (http://birdsofprey.co.za).

    Outlook 2010 … neat feature to delete cached user details

    Willy-Peter - Thu, 2010-08-26 18:51

    I often wondered how I could delete outdated mailbox details which keep popping up on the TO or CC lists, without deleting all of the cached contents. Thanks to one of our Visual Studio ALM MVP’s Martin Hinshelwood, who nudged me in the right direction, I finally noticed the delete feature that Outlook 2010 has introduced, which enables you to delete a cached entry quickly and easily:

    … Martin, the incorrect mail address is now purged off my laptop for good :) Thanks!

    South African ID Number Checker in Excel version 2

    Robert MacLean - Thu, 2010-08-26 10:37

    A long time ago I built a simple Excel spread sheet which worked out if an ID number was valid or not. Since then I have had a bunch of feedback on it, most about how it works. However a week ago Riaan contacted me and pointed out a bug in it so I took this as an opportunity to rebuild it.

    Not only does the new version check the validity of the ID number, it tells you where the person was born, gender and birthdate.

    Something else that I wanted to do was clean up the calculations. So now they have been moved to their own (non-hidden) tab and are fully documented. So if you are implementing your own checker you can clearly see exactly what is going on and how it all comes together.

    Finally for those who wish to do a lot of checking, the third sheet of the Excel spread sheet contains that functionality where the checks are inline so that you can apply them to multiple ID numbers.

    I want to extend a massive thanks to Riaan Pretorius, not only for pointing out the bug but also running the new version through it’s paces and finding some issues in it. The fact this one is much better is owed to him, I just typed the code

    You can download the Excel file below!

    AttachmentSize South African ID Number Checker v2.zip27.36 KB

    Next time on Information Worker

    Robert MacLean - Thu, 2010-08-26 10:27

    If you follow the IW website you may have seen that the September community meeting in Jo’burg would be about SharePoint 2010 Deployments. That has changed to something far more exciting: Double Demo Day!

    Double Demo Day means we get to see two members of the community do a demo of something very interesting.The demos are:

    Creating Workflows with SharePoint Designer 2010, InfoPath and Visio

    Creating workflows with Visio 2010 and SharePoint Designer 2010 has never been easier. In this session I’ll go through the process of rapidly creating and deploying workflows in a SharePoint 2010 environment.

    This will be presented by Ridwan Sassman, who helped us out last month with video taping the session.

    Branding SharePoint 2010 with MasterPages, Layouts and CSS

    One of the largest limitations of WSS3.0 and MOSS2007 is the ability to brand SharePoint without intricate knowledge of the platform and in some cases breaking a few rules and modifying out of the box system files to get the desired look and feel. Come and see how the theming engine in SharePoint 2010 together with CSS, Master Pages and Layouts can be used to brand your SharePoint site using the amazing new SharePoint Designer 2010.

    This will be presented by Brent Samodien. If you have been to a SLAB’s you will know Brent as he helps us with the venue!

    October

    Looking ahead to October – there is no Jo’burg community meeting. Why? ‘cause we will all be at Tech·Ed Africa 2010! If you haven’t registered then you must do so NOW! Or you could try and win a free entry!

    Pulled Apart - Part X: Visual Studio Rulesets

    Robert MacLean - Thu, 2010-08-26 10:24

    Note: This is part of a series, you can find the rest of the parts in the series index.

    Microsoft has offered a great tool called fxCop for a number of years now. This free tool takes your compiled .NET code and runs it against a number of rules to check things like security, compatibility, globalisation and so on.

    Some of the higher SKU’s of Visual Studio have included fxCop directly in the IDE, via the Code Analysis option. In previous versions of Visual Studio this just ran the fxCop command line and returned the results. There was not much else happening except a shortcut to having to run a separate tool.

    In Visual Studio 2010 the fxCop integration has had a major improvement, with the addition of a dedicated interface for the management of what rules are run and the ability for you to create a bespoke collection of the rules that you care about by ignoring the rules you do not care about. The other great feature is that you can set if a rule throws a warning or an error in Visual Studio. Very useful for enforcing rules!

    For Pull, I took the opportunity to create a dedicated rule set.

    Step One – Theft

    The first thing I did was to take the Microsoft All Rules rule set and copy it to my project and rename it to pull.ruleset. You can find the Microsoft All Rule rule set file at: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\Rule Sets\AllRules.ruleset

    Step Two – Minor Tweak

    Next I opened the pull.ruleset file in a text editor (it is just XML) and changed the rule set name and description.

    Step Three – Associate

    Next I used the Browse option in the rule set selector to select my pull.ruleset file.

    Step Four – Adjust Rules

    Now I can use the Visual Studio rules editor (click the Open button) to adjust what rules I want to keep and what severity level I want them at. As I started with the Microsoft All Rules, I have all the rules listed initially and so this took a little bit of time to adjust.

    Step Five – Source Control

    Make sure you check in your custom rule set file so that everyone in the team can enjoy it’s powerful magic. If I was using a fully featured ALM tool (like TFS) and not just a source control tool, then I could also include the rules in my check-in policies which ensure that code that is checked in comply and also in my build server.

    Syndicate content