Browsing Posts in Miscellaneous

I’ve received a lot of great feedback on Becoming a Jedi and was planning on having the next episode done already. Unfortunately lightning struck twice. While fighting a horrid sore throat -likely the same illness that had Roy Osherove missing two of his three DevTeach presentations – my motherboard on my main dev box died a horrible BSOD death and corrupted my RAID array during its death throes. I’m picking up new hardware tomorrow and rebuilding the RAID array from a recent backup. Fingers crossed, I should be back in business and recording later this week, which would mean a new episode sometime next week. Thanks to everyone for your patience.

<message type=”aside”>

I cannot stress enough the value of a good backup plan. My main workstation stores everything on a RAID 0+1 array. I have essential data (client documents, family photos, corporate information) replicated between multiple computers via FolderShare. Any development or writing is stored in a Subversion repository – public or private depending on the work. Each computer is backed up using Vista’s Backup, which is far superior to Windows Backup in previous versions. Those backups include more files than is replicated via FolderShare. (FolderShare limits you to 10,000 files per library, which isn’t enough if you’ve got a few Subversion working copies kicking around in there.)

Now why do you need a good replication and backup strategy if you’re storing your information on a RAID 0+1 array? You can rebuild the array if a drive fails. Aren’t the replication and backups redundant? For those who skipped the beginning of this blog post, you need backups just in case your motherboard dies a horrible death and corrupts your RAID array. Or you realize that you accidentally deleted an important file a few days ago and in the meantime you’ve emptied the Recycle Bin and run a defrag. RAID arrays – while fantastic for protecting you from drive failures (RAID 1 or 5), or increasing performance (RAID 0), or both (RAID 0+1) – still do exactly what you – or the operating system – tell them to do. If the operating system crashes horribly and while doing so, sends the command to format c:, guess what’s going to happen?

So do yourself a favour and make sure your backups are in order. You never know when you’re going to need them next…

</message>

Earlier today, an unknown hacker exploited a security vulnerability in ScrewTurn Wiki and replaced the altnetpedia site with pron links. I have restored the site and upgraded to the latest version of ScrewTurn, which is v2.0.30. (We were running v2.0.21 and the vulnerability was fixed in v2.0.24.) My bad for not keeping the site updated with latest. I apologize to the ALT.NET community for not being more vigilant with patches to the wiki software. I’ve added the ScrewTurn RSS feed to my reader to keep me apprised of future fixes.

To the unknown hacker, I hope that you’re satisfied. I had booked the afternoon off to take my two boys (ages 3 and 5) to the Science Centre, but instead spent it undoing your evil.

Yes, it’s true. My CodeBetter friends have invited me to join their ranks and I’ve accepted. Like JP, I’ll still be cross-syndicating to both my CodeBetter blog and my own site. No need to subscribe to both. You’ll get the same content either way. To my old readers, sit back, relax, and keep enjoying yourselves. Let me assure you that my content and focus aren’t going to change. To my new CodeBetter readers, welcome to my humble little corner of the web. Like many of the other CodeBetter bloggers, I’ll be blogging about agile development on the .NET platform. Thanks again to the CodeBetter crew for having me.

I know many developers still swear by Windows XP, but I actually like many of the improvements in Windows Vista. Yes, Vista still has some rough edges, but overall it’s a pleasant experience. That said, one of the best features of Vista is the new Start menu. Rather than clicking through a bunch of cascading menus to find the program you want, you press the Windows key and start typing the first few letters of the desired application. Unfortunately, by default, Vista also searches documents, emails, and myriad other places as well, which makes this feature really slow. To make it useable, you can have Vista only search your programs.

  1. Right-click the taskbar and select Properties.
  2. Go to the Start Menu tab.
  3. Select “Start Menu” (not “Classic Start Menu”) and click Customize…
  4. Near the bottom, unselect “Search communications”, “Search favorites and history”, and under “Search files”, select “Don’t search for files”. Make sure “Search programs” is selected.
  5. Click OK twice.

Vista Instant Search is now fast enough to be usable.

I know a few friends who are absolute keyboard junkies. They won’t even touch the mouse unless absolutely necessary. I tend to be more pragmatic about my keyboard use. If I use an application a lot, I learn the keyboard shortcuts. Otherwise I just reach for the mouse. That said, here are some keyboard shortcuts that I use regularly. I’ll skip the usual suspects like copy, cut, paste, undo, redo, … :)

Windows*

Close current application ALT-F4
Switch tasks ALT-TAB (2D)
Windows-TAB (3D)
Lock your computer Windows-L
Display task manager CTRL-SHIFT-Esc
Run Windows-R
Launch a program in Vista Windows and start typing
Show desktop Windows-D (toggles)
Windows-M (no toggle)
Go to System Tray (icons beside the clock) Windows-B
Launch Explorer Windows-E
Launch application on Quick Launch bar Windows-1 to Windows-0
Cycle through task bar Windows-T – space selects

* Most work on Windows XP/Server 2003 and above, though some were added in Vista. So your mileage may vary.

FireFox

Open a new tab CTRL-T
Close current tab CTRL-F4
Switch tabs CTRL-TAB (forward)
CTRL-SHIFT-TAB (backward)
Re-open last closed tab CTRL-SHIFT-T
Go to search box CTRL-K
Go to address bar CTRL-L
Find CTRL-F
Go back ALT-left arrow
Go forward ALT-right arrow

Visual Studio/ReSharper

This deserves a separate post and/or screencast, which I’ll get to eventually. For now, download the ReSharper keymap from here (ReSharper 2.x/IDEA scheme). Personally I wouldn’t bother with the “Visual Studio scheme” for ReSharper. Every ReSharper Jedi I know uses the IDEA scheme.

…for another year as an MVP. I just heard today that I was re-awarded as a MVP in Solutions Architecture for 2008. Another fun year of mischief, mayhem, and coding. You can always catch my latest misadventures here on my blog or get a summary version on my MVP profile. Thanks to my family and the community for your continued support and encouragement!

You’ve encountered a dreaded <Colour> Screen of Death (where Colour = Blue, Black, Yellow, Fuschia, etc.) or similar problem. After googling the error message, you come across a blog post (maybe one of mine) referring you to some Microsoft Knowledge Base Article for a hotfix. The good news is you’ve done all the legwork and you know exactly the hotfix you need. The bad news… hotfixes require you to call Microsoft Product Support (PS).

Now the folks in PS are really nice, helpful people. It’s not that I mind talking to them. It’s just that I have to go through the whole hotfix song-and-dance. Yes, I need the hotfix mentioned in KB 123456. Yes, I am experiencing the problems described in that KB article. Yes, I know that the hotfix hasn’t undergone rigorous testing in the way service packs do. Yes, I understand that the hotfix could cause unspeakable evil if used incorrectly.

No longer! You can now fill in this online form to receive the hotfix instead. Simply submit your country, the KB article number, platform (x86, x64, ia64), language, and email address. Then you’ll receive a download link via email within 8 business hours.

Let me freely admit that my main purpose for this blogpost is so that I can find the download link easily the next time I need a hotfix because Microsoft doesn’t place that link in any obvious place on the Microsoft Help and Support site. The only reason I found it is because of a link in the Daily Grind!

(via Jean-Paul Boodhoo)

Manoj Khanna just created the Calgary Open Source Group specifically to foster the use of open source software in the Calgary market. Here is the group’s mandate:

“Calgary Open Source Group (COSG) is a forum that promotes the spread of Open Source Software and Free Software culture in Calgary. Through lively debate/talks, presentations and interactive network events, COSG aims to showcase the potential of open source software development and the impact it may have on software engineering for companies based in the oil city.”

Given the amount of open source software that I use in my day-to-day development and the fact that I often promote good open source tools in my presentations, I thought it only appropriate to join the group myself. So I’m member #3 right after Manoj and JP. I look forward to contributing to the community by promoting the adoption of open source tools where appropriate. Hopefully we can organize some presentations specifically around high quality open source tools for .NET development, especially for agile development. (Honestly, most of the great agile development tools – minus JetBrains ReSharper – come from the open source community.)

Every time I need to set up a bunch of virtual machines, I have to go back and look up where to find the Sysprep tool and how to use it. Here are the details so I can find it in the future…

In case you haven’t encountered Sysprep before, it is a tool that allows you to create a base OS image (including Windows, Office, Visual Studio, or whatever other applications you want) and then re-package it. You can then create cloned disks (or just copy the whole thing) and when you boot the new disk, it is like booting Windows for the first time, except with all your software installed. You get to choose a new computer name, SIDs are regenerated, etc.

Each version of Windows requires the correct version of Sysprep. Where do you find the correct version of Sysprep? On your install disks in <DVD>:\Support\Tools\Deploy.cab. Although System Preparation tool for Windows Server 2003 Service Pack 2 Deployment claims to install the Sysprep tool, I’ve never been able to make it work on my system. So don’t bother wasting your time. Go to your original install media and grab the file from there.

Creating the Sysprep Image

  1. Open <DVD>:\Support\Tools\Deploy.cab and extract setupcl.exe, setupmgr.exe, and sysprep.exe to C:\Sysprep. (N.B. C: is your system drive. If you installed Windows to another drive letter, use that drive letter rather than C:.)
  2. Run setupmgr.exe from C:\Sysprep.
  3. The Setup Manager wizard starts. Click Next…
  4. Create new… Next…
  5. Select “Sysprep setup”. Next…
  6. Select the correct OS version… Next…
  7. Select “No, do not fully automate the installation”… Next…
  8. Enter Name and Organization, Time Zone, Product Key, and Workgroup or Domain. The other settings can remain defaulted. Note that you don’t want to specify the computer name since you will be creating multiple computers from the base image and you don’t want to specify the admin password, even encrypted. If the sysprep program can extract the password from the answer file, so can any hacker worth their salt. Click Next… through to the end.
  9. Finish… Save to C:\Sysprep\sysprep.inf. OK…
  10. Wait while Setup Manager finishes. Cancel… (Yes, odd way to exit a program that has completed successfully.)
  11. Run sysprep.exe.
  12. Click OK.
  13. Ensure that “Don’t regenerate security identifiers” is UNCHECKED. You want to regenerate the SIDs when each new clone boots.
  14. Click Reseal, OK to confirm that you want to regenerate SIDs, and wait for the system to shut down.

Creating a Cloned Server

  1. If you’re using VMWare Workstation, create a linked clone of your Sysprepped server. (You can also create a new linked disk using VirtualPC using File… Virtual Disk Wizard and then creating a new VM using the linked disk.)
  2. Change any VM settings such as memory. DO NOT change number of processors from 1 to 2 as the HAL (hardware abstraction layer) for uni-processor vs. multi-processor Windows is different. Your system will blue screen if you do this.
  3. Boot the cloned server.
  4. The Windows Setup wizard will appear. Next…
  5. Accept the license agreement. Next…
  6. Enter a new computer name and administrator password. Next…
  7. Windows will boot and you can log in with the administrator password you just entered.
  8. When prompted, click “Yes” to update your product activation.
  9. Select “Yes, let’s activate Windows over the Internet now”. Next…
  10. Select “No, I don’t want to register now; let’s just activate Windows”. Next…
  11. OK…
  12. Update this server… to go to Microsoft Update.
  13. Once you’re ensured that your patches are up-to-date, you can close the browser and click Finish… then Yes… on the dialog to start using Windows.

You should now have a fresh copy of Windows. You can create as many cloned servers as you need for your mini-network.

Alright, I call uncle. Justice tagged me way back on April 17, 2007. I emailed him back saying that my major plan for the summer was to spend more time with my family and overall, I’ve been successful at that. Seems that this answer wasn’t good enough for Justice and took me to task publicly. Look, bud, at least I had the guts to stand up on stage and make a fool of myself. BTW – I haven’t seen a whole lot of publicly-announced progress on that massive book list of yours, Justice!

So now that it’s July, I’m thinking about my professional goals for the remainder of the year… I’ve mentioned before the crazy pace of change in the Microsoft world these days. I’ve dabbled in a lot of different server technologies over the years – SharePoint, BizTalk, CMS, Reporting Services, etc. Looking back, what I’ve always loved is custom software development rather than server technologies. Working in code – not designers – and solving real problems. I love elegant software and design patterns. I love agile development and TDD. These are the things that get me out of bed in the morning. In my opinion, agile development techniques are on the cusp of making as big a splash as object-oriented programming did back in the 90s. So that is where I am focusing my energies over the next 6 months, likely much longer. Let’s take a look at my multifaceted approach…

Books

I’m a voracious reader and prefer books about concepts rather than how-to. Most of these books have to do with agile concepts and/or patterns. Let’s take a look at what I am currently reading:

  • xUnit Test Patterns by Gerard Meszaros
    • This book was just released and I’m already few chapters in. It contains great information on how to get the most value out of your test suite. This book was definitely written with a TDD mindset, but lots of great information on writing effective test code regardless of your development style. Recommended.
  • Enterprise Integration Patterns by Gregor Hohpe and Bobby Woolf
    • This book has been recommended by many colleagues and discusses why messaging systems are important in the enterprise. The book is technology agnostic. Many of the patterns are implemented or can be implemented by commercial EAI products, such as BizTalk, Tibco, and others. Even if you’re not using a commercial EAI product, understanding the patterns can help you build better integration solutions. Definitely an interesting read. As an aside, I had the pleasure of meeting Gregor Hohpe at the Global MVP Summit this year. You’ve never seen such a look of fear and confusion on a ‘softie’s face as when Gregor says, “Hi, my name is Gregor Hohpe. I am a MVP. I work for Google.” Open-mouthed
  • Windows Presentation Foundation Unleashed by Adam Nathan
    • This is honestly a how-to book, but Adam goes into a lot of detail regarding the practical theory. WPF is such a different rendering model than GDI/GDI+ that it’s worth understanding how it works. I expect to see a lot of work around WPF in the next few years since WPF is the foundation for desktop apps going forward as well as Silverlight, Acropolis, and other technologies. The book is a fun read and recommended.

In the chute…

  • Extreme Programming Explained by Kent Beck and Cynthia Andres
    • I’ve read and talk a lot about Extreme Programming these days, but I want read the book that started it all. There are arguments whether the dogmatic 1st edition or the toned-down 2nd edition is better. I’m starting with the 2nd edition.
  • The Pragmatic Programmer by Andrew Hunt and David Thomas
    • Another classic recommended by a wide variety of people.
  • User Stories Applied by Mike Cohn
    • I’m well-versed in use cases. I want to see how user stories compare as they are getting a lot of press these days. I’m also interested in knowing more about techniques like story cards.
  • Agile Estimating and Planning by Mike Cohn
    • I consider myself a competent estimator and have taught teams how to estimate effectively. I’m interested to see what Mike has to say about the subject.

Technologies

  • Dive deeper in Castle Windsor and maybe pick up a little Boo while I’m at it.
  • Use MonoRail on a project.
  • Learn more about Aspect-Oriented Programming (AOP).
  • Although I’m tempted to spend the time learning LISP, F#, or Ruby, I think this is best left until early next year. This year is already busy without trying to learn two new programming languages. (Boo is my first choice, noted above.)

Speaking Engagements

My presentations in the coming months will focus on agile development and related techniques. Jean-Paul Boodhoo and I will be presenting at the Calgary .NET User Group on July 19 at noon on Simple Patterns for Simple Problems. I’m organizing a Western Canada User Group Tour through the MSDN Canada Speakers Bureau. I’ve got an outstanding invitation to speak in Toronto, which will likely happen sometime this fall. I’ll be up to Edmonton to harass Justice and give a talk at the Edmonton Code Camp (and likely the User Group too). I’m also looking into hitting the speaker circuit to talk at some combination of DevTeach, VSLive, and DevConnections. TechEd Barcelona is tempting, but November is already looking too busy.

Teaching

I love teaching. I love seeing the light go on in a student’s head when they “get it”. I truly believe that you cannot become a better developer if you don’t understand the fundamentals. So I am developing a course on object-oriented principles and patterns that I’ll be delivering this fall. Details will be forthcoming in the weeks ahead. Drop me a line if you (or someone you know) would be interested in attending. I’ll be rounding out the course line-up with additional agile-related courses in the future.

Projects

I have a number of pet projects that I would like to release in the coming months.

  • VstsUnit Plugin for ReSharper – I am currently updating the plugin to support ReSharper 3.0.
  • Project Perseus – Top secret project developed test-first. That’s all I’m going to say at the moment.
  • Project Dex – Even more top secret than Project Perseus. I’ve revealed too much already…

Blogging and Casting

I definitely haven’t been blogging as much as I would like to. Blogging takes time. I am not the type of person who can whip off a post in 15 minutes. A good blogpost takes a few hours to write. I have also been meaning to do some screencasts. (I jettisoned my first screencast due to technical difficulties with the recording.) But I am hereby committing to a blogpost or screencast per week. I want to share my knowledge with the community and blogging, podcasting, and screencasting are all effective ways to do it.

Summary

So there you have it. Focus on agile. Engage with the community. Share knowledge. Have fun.

Tag, You’re It

I pass the gauntlet to: