Category Archives: .Net

Debugging Home Run – Problem Step Recorder in Windows 7

4E38RY7KZA4J

I just got an email about a really cool new tool built into Windows 7 that Microsoft used to debug their new platform. It is called Problem Step Recorder. The best thing to do is to post a snippet of the email right here. I think it says everything perfectly:

“In case you’re not aware of this, here is a little known Microsoft tool bundled with Windows 7 that can be extremely useful to illustrate a problem when testing an application. The diagnostic tool called “Problem Step Recorder” was originally produced by Microsoft during the development of Windows 7 Beta to assist their Quality Assurance team in debugging the OS. It uses a combination of screen captures with mouse tracking to record your actions and can be a great way of describing a problem to others. The program is launched from the Start menu by typing ‘psr’ or ‘psr.exe’ in the search field. You’ll get a floating applet that looks like this: When you hit the Record button, the applet tracks your mouse and keyboard input while taking screenshots that correspond to each new action. When you stop recording your session is saved to an HTML slide show that recreates your steps. It also allows you to add comments to further document the problem. I think it can be very useful as an attachment in [your bug tracking tool] for those hard to describe issues or as a “How To” document for end users.”

Which leads to other ways of doing this… you could youse WebEx or Windows Media Encoder to document any bug as a step-by-step. If you use WatiN, Selenium, or VS2010, you can also use their recorders to document any bugs you may find in a web application, hand that to the dev team, and then there is no guessing how to reproduce the bug.

Kudos to Microsoft, and to the folks who uncovered this!

Blogroll – SEO, Web Analytics, Usability, Upcoming Conferences, and Other Interesting Stuff

These are just some of the articles I have read in Google Reader over the last month and a half that I have found interesting.  I thought maybe you would too…

SEO

Web Analytics

Usability

Upcoming Conferences

Other Interesting Stuff

Dynamic sitemap.xml Files in ASP.Net

I know this is not a new topic. It is not even a new topic for me. I have posted on defining what a sitemap.xml file is for, and on dynamic sitemap.xml files in C#. But my team is finally ready to start implementing this as part of our custom development platform for the external brand sites.

When one searches for dynamic sitemap.xml creators in Google, you get a plethora of sites back. Some are code, some are online based tools. Since we are looking to create our file dynamically from within the site on demand, that helps narrow down our search. I have found a small number of code sources we can use to start with.

There is still the HTTP Handler from my original post. This project, ASP.Net Google Sitemap Provider by Bruce Chapman, is available on CodeProject. You can also read about it in a blog post on his iFinity site. It still looks like the most flexible solution.

There is a great looking solution on the ASP.Net site by Bertrand Le Roy called Google Sitemaps for ASP.NET 2.0. It has been ported over into the ASP.Net Futures July 2007 package. This solution is an HTTP Handler that uses the Web.sitemap file to generate a sitemap.xml file on the fly.

Another interesting idea I found in my searches was some code that shows a site map when a user gets a 404 error. This solution is also implemented as an HTTP Handler, but is only for 404 Page Not Found server errors. This code is also available on CodeProject in an article called Generate a Google Site Map Using the HTTP 404 Handler.

Here are some other sites of note to look at. They have similar solutions to the ones above, and it is always a good idea to see what other people have come up with.

If anyone has any additional resources, ideas, or suggestions, please leave me a comment and let me know what you think.

10 Must-Have Tools for Continuous Integration in .Net

Here is a quick blogroll of ten critical tools to build a continuous integration and continuous delivery pipeline for .Net applications.

Continuous Integration Process

Visual Studio Team System

CruiseControl.Net

nAnt

nUnit

WatiN

WatiN Test Recorder

nCover

nDoc

FXCop

TestDriven.Net

Generating sitemap.xml files in C#

One of the things that I would like to tackle before the end of the year is including sitemap.xml files with all of the new sites that my team develops. We could generate these files manually, but this would be tedious at best. There are a number of tools that will generate these files for you. Some of them are stand-alone desktop applications (Sitemap XML). Some web-based tools are built in PHP (AutoSitemap), Perl (TM Google Sitemap Generator), Python (Google WebMaster Tools), etc., and you can use in your own local environments. There is even a web site that you can submit your URL and it will generate the sitemap.xml file for you (XML Sitemaps).

My requirements for this feature are pretty simple:

  • Something built in C#
  • Something we can include in our projects
  • Something that can be run as part of our build process
  • Something that can be completely hands-free

So far, the only thing that I have found is the GoogleSiteMapProvider on the CodeProject web site. This project:

  • [Is] instantly useable with the majority of ASP.NET applications
  • [Is] a full ‘binary’ solution – no integration of code or compiling – just drop in a binary, modify the web.config and go
  • [Is] extendable so that more complicated ASP.NET applications could redefine the provider without restriction

It seems like this is a great fit for our architecture. The solution was to have a single assembly with three main types:

  1. An HTTP Handler which would return the XML on request (called GoogleSiteMapHandler)
  2. A Provider Type (called GoogleSiteMapProvider)
  3. A Controller class to glue the Handler and Provider together

This is a great place for us to start. The source code is available, it seems to fit my needs, and is simple to use.

Anyone else using something different? Do you have any other ideas? Have you found any other tools that might be useful for this? Leave a comment and let me know.

Week(s) in Review – Test, Test, Test!

It has been a bit of time since I have posted, and over that same period of time, I have been lax in reading the blogs I am subscribed to. The last 2 weeks the team has spent lots of time implementing Watin UI tests on one of our new sites. We have started to flush out a shared reusable library and leveraging that to develop site-specific unit tests. Roy Osherove has written three articles over these past two weeks that are very interesting, and directly relevant to the realm of Automated Unit Tests. One article is about A New Unit Test Platform called XUnit, which has many improvements over nUnit. The second article is about Code Reuse in Unit Tests. And, the third article is about Throw Away Test vs Tests That Last.

Scott Guthrie and Scott Hanselman have also written two great articles in the Continuous Integration arena. ScottGu’s article was regarding Automating Environment Specific Web Config Settings. Scott Hanselman wrote an article about Managing Multiple Configuration File Environments With Pre-Build Events.

Take a look at these articles They are great reads.

Infragistics shows off their .Net Wares

Infragistics came to the office yesterday to show us their shiny new products and to talk about their roadmap for development. We scheduled the meeting as part of the .Net Working Group series, and was the first working group meeting of 2007. Jack Schwinn, one of our Sales Reps, brought in Devin Rader and Andrew Flick, Product Managers for Web Client and Rich Content respectively. The demo was led by Tony Lombardo, their Infragistics Evangelist. They covered a wide variety of topics and did a great job answering our questions. Here is a run-down of my notes from the demo:

ASP.Net Controls

Tony walked us through the controls that we have not seen since our last volume release. He walked us through the Excel, XPS and PDF Exporters, with support for formulas and multiple tabs. There is also an Excel Importer control. I think we will have a lot of use for these controls in our internal projects. They explained the Calc Manager, which is an easy way to add Excel functionality (like a mortgage calculator) very simply to the page. They also gave us a demo of the new WebGauges graph controls. The demo he showed was 101 different variations of the radial gauge and the linear gauge. In terms of their roadmap, they will be supporting .Net 2.0, 3.0 and 3.5 in the future, with both their native Ajax platform and with the ASP.Net Ajax platform from Microsoft.

WinForms

Since we do not work a lot on WinForms, we spent only a few brief moments on the new controls released since our last purchase. There has been a new WinDesktopAlert control (think “Toast Control”), which is a small popup window control, similar to the Outlook mail notification window, in the lower right corner of your screen. The second control they discussed is a new Ribbon control, which works within the ribbon functionality in Microsoft Office 2007.

XAM Showcase

Their XAM Showcase is the sandbox work that Infragistics is doing with WPF. They gave us a preview of their Carousel Control, Data Carousel control, and WPF charting controls. You can see some of their preliminary work at http://xamples.infragistics.com . These work with XBAP (or XAML Browser Applications), the browser based application model for WPF. MSDN has put together a great WPF XBAP video about it. And, if you are wondering what is the difference between XBAP and Silverlight, read this great forum chain on http://silverlight.net .

Silverlight

There are dramatic differences working with Silverlight 1.0 (which is still not released) and Silverlight 1.1 (which is much more exciting). In a nutshell, Silverlight 1.1 will come with its own lightweight version of the .Net Framework. This will provide more possibilities to the developer. And so it is with Infragistics. They are ramping up to leverage Silverlight 1.1. Their first set of sandbox controls will be a text box control, a graph control, and a scrolling toolbar panel control.

The meeting was very exciting, and I see lots of possibilities for future development. The controls I am most excited about are the Excel Exporter controls, the WebGauges, and the soon-to-be-developed Silverlight controls. What excites you about these new controls, or about the Infragistics roadmap?

Microsoft Has Entered the Building!

Microsoft came to the office today to walk us through their Technology Roadmap. David Solivan, our Architect Evangelist, came in and spent 4 hours walking through the future vision of Microsoft and their products and services. His presentation was split into two sections – Enterprise Product Roadmap and Enterprise Developer Roadmap. Below are my notes from the meeting.

Enterprise Product Roadmap

Office Suite

  • The focus in the mid nineties was on productivity. Now that vision has been achieved, the focus has shifted:
    • Collaboration
    • Content Management
    • Search
    • Business Intelligence
    • Streamlined Processes
    • Portals

Windows Mobile

  • The Windows Mobile team is working on delivering the following new features and functionality for the Tablet PC, Pocket PC, and Smartphone platforms:
    • Maps – Pocket Streets, MapPoint
    • Development Tools – Visual Studio, .Net CompactFramework
    • Security – ISA Server
    • Data Management – SQL Server CE, Notification Services
    • Content – MS Reader, Media Player
    • PIM and E-mail – Exchange, ActiveSync, Outlook
    • Thin Client – Terminal Services
    • Business Solutions – Great Plains, Microsoft CRM
    • Web Services – MSN Mobile, Pocket MSN, etc

Server System

  • The Microsoft Server System is expanding, with a focus on providing solutions in these areas
    • Security Infrastructure – Refocus to make sure that security is first and foremost in Microsoft Server software.
    • IT Operations Infrastructure – Operations Manager, System center, want to manage software on the server, both applications and OS, after launch, for the enterprise.
    • Application Infrastructure – SQL Server, BizTalk Server
    • Collaboration Infrastructure – Exchange, SharePoint, Live Communications

Visual Studio

  • Visual Studio 2008 is currently in Beta, and the improvements in the next version have been focused on the following trouble spots:
    • Team Collaboration
    • Performance and Analysis Tools
    • Secure Applications
    • Integrated Quality
    • Real Time Visibility

Business Solutions

  • There are so many different silo and matrix products that Microsoft is working on that they were too numerous to deliver. Here is a list of a few that were mentioned briefly:
    • Axapta
    • Great Plains
    • Navision
    • Solomon
    • CRM

Partner Solutions

  • Microsoft has connect with other suppliers, leveraging their experience and deeply embedded applications in their industries.
  • They have worked out consulting services with these partners to leverage their experiences with Microsoft products

People Ready Business

  • This is Microsoft understanding that they are not delivering their products and services to corporations, but to the people in those companies. Microsoft’s vision is to leverage their software and services to:
    • Advance Business with IT Solutions
    • Deliver Services Oriented Architecture
    • Manage Complexity, Achieve Agility
    • Protect Information and Control Access
    • Productivity Evolution

Enterprise Developer Roadmap

.Net Framework 3.0

  • The next version of Visual Studio more tightly integrates the New Framework 2.0 Classes – WPF, WCF, WF, and CardSpace.
  • It is not really as big a leap forward as the .Net 3.5 release will be.
  • Why a small improvement gets a full release, and a big improvement will be a small release is a mystery except to the developers.

Visual Studio 2005, Team Studio, and Team Foundation Server

Visual Studio Team Studio has only been released since 2005, and will be getting a major overhaul with the next version.

  • Transparency into project Status
  • Manage Distributed teams and collaborate more easily
  • Lightweight, agile process
  • Integrated automated unit testing and improve software quality (similar to nUnit, nCover, FXCop, LoadRunner)
    • dashboard for results
      • bug discovery rate
      • code churn
    • database change management
    • integration
    • database unit testing
    • Process Templates – Agile and CMMI
    • Team Foundation Source Control – database based, not file based
  • VS Team System 2008
    • Integration for Database professionals
    • AJAX support for web tests
    • Continuous Integration and build
    • improved testing performance
    • Newer code metrics (i.e. cyclomatic complexity, maintainability index)

Enterprise Library and Software Factories

  • This is where Microsoft sees their biggest innovation. Writing software that will write software is not new… but implementing that idea on this scale is an interesting idea.
    • Reusable code library
    • Part of Patterns & Practices
    • Application Blocks
    • Wizards, Templates, Recipes
    • Metropolis Concept – Software Development mirrors Manufacturing
    • Templates
    • Software Factory is a way to leverage all of these pieces to generate tools, applications, web sites, etc. like a manufacturing plant

Popfly

  • This is a cool web site that allows you to integrate a suite of services in new and interesting ways…
    • Service Mash-ups
    • Microsoft’s focus of software + services
    • The demo linked a Yahoo Image Search service with a Whack-A-Mole display service, and within a few clicks we were looking at a Whack-a-Terrell-Owens game
    • Can it be used Internally (Enterprise) as well as External (Internet)

Summary

This was definitely a long meeting! It was great to have Microsoft come in and walk us through their roadmap. This gives us great insight as to what is coming up next.

For me, a portion of the content was a repeat from the Microsoft Healthcare Conference in Atlantic City and from the Mix 07 conference in Las Vegas. Those conferences each had a Roadmap session, and discussed the future of Presentation, Communication, and Workflow Foundation, CardSpaces, and Silverlight. The Enterprise Product Roadmap that David covered was new material for me, and I was glad to see it. The idea of software factories was very interesting from the first time I heard David mention it a few months back, and hearing more piqued my interest again.

The most interesting topic to me, though, was the collaboration and continuous integration improvements in Team Studio. It looks like it is leaps and bounds ahead of where it was, and I would love to be able to pilot that with my team. Maybe that sounds like an objective for 2008… hint hint…

10 Steps to Conduct a Successful .Net Job Interview

This is a follow-up post to my posts on .Net Hiring Manager Resources and on Preparing for a .Net Interview. I will be interviewing a number of candidates next week for open positions in our department. I thought it would be good to review the process that we have typically followed, and get feedback.

1. Introduction

Someone should meet the candidate at the receptionist’s desk. It is a good idea to have the hiring manager do this. Look them in they eye, introduce yourself, and shake their hands firmly. On the walk to the interview room, share some small talk about the weather and the drive. This gives you an idea if they will mind how far they will have to drive to work. It also gives you the opportunity to check out how they dress and how they carry themselves. Once you are in the interview room, let them know that the interview will be about an hour long. Ask them if they would like something to drink, and to get more comfortable. Introduce them to everyone that they are interviewing.

2. Discuss the Open Position

Once everyone has introduced themselves and gotten comfortable, the hiring manager should ask how much they know about the open position. It is good to discuss the company’s goals, the division or department you work for, the specific project they would be working on (or describe a typical project the department works on), and describe the requirements of the position.

3. Review the Candidate’s Resume

Be prepared with questions about job positions or projects listed on the candidate’s resume. Open the floor, and let all those participating in the interview ask questions. This may be about specific technologies or techniques of interest, corporate culture differences, or specific challenges that were overcome. Give the candidate the chance to show what they have done.

4. .Net Trivia

This section of the interview should be driven by your technical gurus. Getting the people involved that your candidate would work with, and giving them ownership of the interview process, gives them buy-in on the decision. The purpose of these questions is to judge the specific experiences of the candidate. They are not intended as the be all and end all of measuring knowledge, but should be geared to give you the interviewer a good handle of what the candidate has seen or done.

5. HTML / JavaScript / CSS Questions

It is not uncommon for .Net developers to be lacking in experience when it comes to HTML, Cascading Style Sheets and JavaScript. Any good web developer will need to know these thing, however. If you are hiring for web development work, be sure to cover the basics, and make sure they understand how these all blend together.

6. General Interviewing Questions

In most cases, your candidate will not be working alone. Understanding how they work on a team is critical to their success, and yours, after they are hired. This is your opportunity to ask non-technical questions that focus on personality, teamwork, flexibility, communication, project management, leadership, and responsibility.

7. Whiteboard Questions

Ask your candidate questions that make them get up in front of a group, diagram their ideas, and explain why his ideas are the right approach. This will show you what the candidate is like when speaking in front of other people, like clients or project managers. You see their communication and persuasion skills, as well as their technical ability and diagram skills.

8. Puzzles & Riddles

This is a fun part of the interview. Be sure the candidate is relaxed, and make sure they understand that they are not expected to get the questions right. You give them a riddle or a puzzle, and have them talk through their thought process. This will give you an opportunity to see their creative, out-of-the-box thinking potential.

9. Questions from the Candidate

Expect questions from the candidate. If they have no questions for you, there may be cause for concern. They are not thinking very hard about what you have told them and about what might be coming next for them.

10. Wrap Up

Thank the candidate for their time. If possible, give them an idea about when they or their consulting company will hear back from you. Walk them back to the receptionist, and ask if they need any directions. Again, this will let you see how far in advance they have thought, how much hand-holding they will need, and how much they can think independently.

So what do you think of these steps? Are there things that I have missed that should be covered? What do you do differently (or the same) that you find valuable?

7 Steps to Prepare for a .Net Job Interview

Our department has gone through some changes lately; some changes have affected the process we follow when interviewing. Since I know I will be doing lots of interviewing this month, I have been thinking a lot about what we have done right in our process, and what can be improved. Here is the process that we go through in our department to prepare for interviews.

1. Define a Process

As an interviewer, one of my objectives throughout the interviewing process is to provide as much consistency as possible. Define a process that is consistent and repeatable. Then, when comparing one candidate to another, you will be comparing them win the same questions, with the same process. It will also mean that you are always prepared for the next interview cycle with little effort.

2. Write A Great Job Description

The Job Description that you write is what will let your recruiters, consulting companies, and candidates know exactly what you are looking for. It is important to list everything that you are looking for:

  • Technical skills (i.e. – Visual Studio .Net 2005, ASP.Net Ajax, SQL Server 2005, etc.)
  • Specific Education Requirements (i.e. – Bachelor’s Degree Preferred, etc.)
  • Certifications (i.e. MCSD, PMP, etc)
  • Methodologies (i.e. – SDLC, Agile, SCRUM, etc.)
  • Years of Experience (i.e. – Junior level with 2 years experience or less, etc.)
  • Project Management Skills (i.e. – 3 years managing projects with a budget of $1M or greater)
  • Communication Skills (i.e. – Written, Verbal, Able to work with clients to collect detailed requirements, etc.)
  • Other Intangibles – (i.e. – Energetic, “Do It Right” over “Get It Done”, able to work on multiple projects, etc.)

3. Offer A Competitive Rate

You need to know what the people you are looking to hire are worth. If you are not offering a competitive rate, then you will not be able to attract, obtain, and retain the talent you are looking for. If you can, research market rates for your open position, particularly with your competitors.

4. Follow A Proven Recruitment Process

Whether you have a business process for recruitment, have a third party company that manages it, work with recruitment and consulting companies, or post resumes on Dice and Monster, you need to get the work out about your open position and collect those resumes. These sources need to align with the types of candidates you are looking for. Some sources are for specific technologies or skills, so be sure what you are looking for and what your source can offer match.

5. Screen Your Candidates

Once your open position is posted, you will be flooded with resumes. With all the other things you are busy doing, it will be difficult to keep up with the influx. You will not be able to schedule face-to-face interviews with everyone. The best way to whittle down your pile of prospective candidates is to phone screen the candidates. Prioritize your candidates in the order in which you want to interview them. Then you phone screen them in groups of three to five at a time. The phone screens should be short, ask a wide variety of questions, and be sure the candidate meets the minimum qualifications. Be sure you stay consistent – ask the same questions, and stay with the same people screening the candidates. As you find candidates you want to see more of, schedule them for a face-to-face interview.

6. Script Your Face to Face Interview

You should have a planned script that outlines your face-to-face interviews. Knowing exactly what you want to cover in advance and following the script will keep the process consistent and make it easier to rate the candidates. The steps we follow to conduct an interview will be the topic of another post.

7. Plan your Questions in Advance

In the interview process, it is a good idea to have more than one person interview the candidate (it would be even better if you can interview your candidate all together). Write down your questions in advance and assigning certain sections of questions to each person. You can compile your questions from my .Net Hiring Managers Resource, or from your own resources. Make a worksheet of the questions, with space to jot down notes about their answers and your thoughts during the interview. It might help to come up with a rating scale of 1 to 10 to rate the answers you get. Again, this will make rating the candidate objective, consistent, and easy to gather and summarize the opinions of all the interviewers.

Have I missed anything? Do you disagree with anything here? What process do you follow? Do you have a best practice that you depend on that is not in these steps?