Process Monitor: RegMon and FileMon Combined!

FileMon and RegMon (originally from SysInternals) have long been essential debugging tools in every developers toolkit. [If you are unfamiliar with these two tools, they monitor and report file and registry reads and writes. They were essential in tracking down incorrectly set permissions or overwritten or missing registry keys]

RegMon and FileMon could produce a huge amount of process trace data and consequently had a learning curve to make them effective.

Until recently they were separate tools. They have been combined into Microsoft’s Process Monitor tool, which integrates the functionality of FileMon and RegMon into a unified debugger, along with numerous significant enhancements. Process Monitor’s user interface and options are similar to those of Filemon and Regmon, but it was rewritten from the ground up. The new tool has improved filtering options that preserve data, and better highlighting. Process Monitor logs processes and threads, collects more information, shows calling thread stacks for every event, and provides numerous ways to view collected data. The full list of enhancements is available on the download page.

Process Monitor (v1.21) is freeware and can be downloaded from http://www.microsoft.com/technet/sysinternals/utilities/processmonitor.mspx

Other useful links are the windows debugging tools (required for the symbols, if you want to examine system calls): http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

Mark Russinovich delivers an excellent TechNet video “Advanced Windows Troubleshooting with Sysinternals Process Monitor” here.

Beautiful Code: Leading Programmers Explain How They Think. Edited by Andy Oram & Greg Wilson. O’REILLY (Book Review)

Is this book a classic in the making? Probably!
This book contains many diverse and wonderful chapters; the highlights for me personally were from Jon Bentley (the ‘Programming Pearls’ author) on “less is more”, Simon Peyton Jones on Concurrency and although it was hard to pick a favourite, I think “Beautiful Debugging” from Andreas Zeller and “Distributed Programming with MapReduce” from Jeffrey Dean and Sanjay Ghemawat stand out.

This is not an easy book, in the sense that it requires that you get into the right frame of mind to fully appreciate some of the subtleties. You might need to find a quiet corner and get into the zone whilst tackling one or two of the more difficult topics. You might even need to read the odd chapter twice before the ‘Aha!’ moment strikes, but it’s certainly worth it. The time spent might well pay for itself several times over if it provides the insight required to solve a problem you encounter.

I believe it is worth buying this book solely for the chapter titled “Distributed Programming with MapReduce” which lucidly describes how large-scale computations can be performed in parallel with the important MapReduce algorithm (which is what Google uses in many applications including google search, across approximately 500,000 machines!). I mentioned the original paper by Jeffrey Dean and Sanjay Ghemawat in a blog post here.

It covers many fields all with the theme of ‘Beautiful Code’. Jon Bentley (the author of Programming Pearls) talks about the ‘most beautiful code he never wrote’! This chapter struck a chord because I often ‘soapbox’ that code should be short as possible but not obtuse. Let’s face it, verbose code is just as hard to understand (if not worse) than terse code.

If you are a programmer purely because it is the way you pay your bills, I don’t think you will find much to help with your day-to-day routine in this book. On the other hand, if you are a programmer who likes to find out how things really work, and gain some insight into the minds of past master craftsman, then you should definitely buy this book.

This book deserves a place on every serious programmers bookshelf since the lessons to be learned will not become obsolete as languages and technologies change. Highly recommended.

There is a web site dedicated to the book here: http://beautifulcode.oreillynet.com/

All royalties from the sale of this book go towards Amnesty International.

You can purchase from here:
http://www.amazon.com/Beautiful-Code-Leading-Programmers-Practice/dp/0596510047
http://www.oreilly.com/catalog/9780596510046/

Disclosure: The Perth .NET User Group is a member of the O’Reilly User Group and Professional Association Program. O’Reilly make copies of their books available for user group libraries, and the copy reviewed here was kindly donated by O’Reilly.

Development Tools and Techniques for Working with Code in Windows SharePoint Services 3.0

There seems to be a fair bit of activity in the Sharepoint space at the moment. Great post over at MSDN on getting started with tools and techniques for working SharePoint Services 3.0:

Summary: Learn the skills you need to develop for Windows SharePoint Services 3.0, about the differences from traditional ASP.NET development, about the required development environment, and the steps to build a Windows SharePoint Services solution with Visual Studio 2005 Extensions for Windows SharePoint Services 3.0.

Part one is here and part two here.

Number of Microsoft Certified Professionals Worldwide

I stumbled across this interesting page at the Microsoft MCP site (MS passport required, and maybe also an MCP(?)), listing the Number of Microsoft Certified Professionals Worldwide and mentioned to Rob Farley who has much to do with Microsoft certification and training, especially but not limited to all things SQL Server (he’s a trainer at Solid Quality Learning). Check this out; there are only 71 people (as of 27th June 2007) with the MCITP: BI certification. If you have already passed 70-431, you just need to pass two exams (70-445 and 70-446) in order to join this exclusive bunch. I might check out what learning resources are available and post them later. Given the amount of work available in this area, I’d be surprised if it stays at 71 for long…

Perth .NET User Group Meeting, 2nd August 2007: Graeme Foster

On Thursday, 2nd August, come and join us at the Perth .NET user group where Graeme Foster will be demonstrating how to use Microsoft’s Composite Application Block (CAB), the Model-View-Presenter (MVP) pattern and unit testing and mocking, with a code example of building a view and presenter using Test-Driven Development (TDD). More details here.

This meeting will take place at 5:30 pm at our usual venue of Excom Education, Level 2, 23 Barrack St, Perth. This is a free event and everyone is welcome to attend.

Ship It!: A Practical Guide to Successful Software Projects, Jared Richardson, William Gwaltney Jr. Pragmatic Bookshelf. (Book Review)

If you are familiar with the “The Pragmatic Programmer”(written by Andy Hunt and Dave Thomas) then you will probably recognise the Pragmatic Bookshelf series of books, set up by Hunt and Thomas, in which Ship It! is included. This series of books sets itself apart by emphasising the practical aspects of delivering software, and also doing it well.

The book is split into the following chapters:

  • Introduction
  • Tools and Infrastructure
  • Pragmatic Project Techniques
  • Tracer Bullet Development
  • Common Problems and How to Fix Them
From the very first chapter, the authors make it clear ‘Ship It!’ is not another methodology, “There is no single, right way to develop software. There are a lot of wrong ways…”. Instead, they have gathered together the ‘best’ bits’ of various styles and methodologies they have been directly involved with, and combined them into a practical approach with the focus on delivering a project. The authors do not expect you to necessarily implement everything they suggest all at once. Adopt one or two at time and determine if they work in your environment. This practical stance is reinforced throughout the book. A selection of the topics examined can be broadly listed as follows:
  • Use source control (for anything you want to keep)
  • Automate your build (one click)
  • Use continuous integration
  • Track issues and features
  • Write tests and automate them
  • Use mocking
  • Build end-to-end stubbed systems (Tracer Bullet Development)
  • Build teams and foster communication

It is easy to read and feels fresh. As another reviewer pointed out, “It’s a rare book that speaks convincingly to both developers and managers, but this one does a good job”. There is a definite emphasis on the positive; it is about how to make projects succeed rather than a post-mortem of why they fail. The chapter “Common Problems and How to Fix Them” is a gem, with practical advice for developers, managers and customers.

In Appendix E: Issue Tracking Systems, I was surprised to see that Gemini from CounterSoft (http://www.countersoft.com/) was not mentioned. I have implemented it at several sites with minimal effort and it has been used by developers and users with great success.

In Tracer bullet development, I agree with the approach to the end-to-end working ‘stubbed‘ systems, but I would also add that methods should also be written in such a way that the release version will throw an exception in any method that has not been implemented (rather than just returning a dummy value). Otherwise, years from now, you might find yourself mentioned on the DailyWTF! In some ways, it would have been nice to have had a worked code example for this section, but I realise the authors did not want to limit themselves to one particular language and restrict the reach of this book; I think they made the right decision.

If you are an experienced developer, then you probably will not find anything revolutionary or truly new amongst its 200 pages, but you might find something that your current routine is missing. Is this book worth reading? Absolutely. I would not hesitate for a moment in saying go out and buy it. Highly recommended.

You can purchase from here:
http://www.amazon.com/Practical-Guide-Successful-Software-Projects/dp/0974514047
http://www.oreilly.com/catalog/0974514047/

Disclosure: The Perth .NET User Group is a member of the O’Reilly User Group and Professional Association Program. O’Reilly make copies of their books available for user group libraries, and the copy reviewed here was kindly donated by O’Reilly. That said, it was not a factor in reviewing this book.

Recommended Computing Books: Updated

For some time now, I have been meaning to update my list of recommended computing books to include “The Pragmatic Programmer: from journeyman to master” by Andrew Hunt and Dave Thomas. This book was first published in 2000 and I’m frequently surprised that many developers have not read or even heard of it. It could quite easily be sub-titled “The manual of practical software construction”. It has received glowing reviews from Martin Fowler, Kent Beck, Ward Cunningham, John Lakos, all of whom know a thing or two about writing software.

If you are a developer, this book is required reading along with Code Complete and Rapid Development by Steve McConnell. If you are a manager, go and buy a copy of this book for every one of your developers. You won’t regret it!

I believe this section heading quotation from the book, captures its essence:

An investment in knowledge always pays the best interest.
Benjamin Franklin