Browsing Posts in Podcast

.NET RocksA few weeks ago Richard and Carl invited me to appear on .NET Rocks again and I jumped at the chance. I had a great time talking to them about doing more with less (writing less, but smarter code) and how convention-over-configuration changes the way that we develop software for the better. Check it out .NET Rocks #475 featuring yours truly!

PowerShell Unix-style Recently I was on the PowerScripting Podcast hosted by Hal Rottenberg and Jonathan Walz. I had a great time talking about PowerShell from a developer’s perspective and psake, my PowerShell-based build system, in particular. You can find the interview on Episode 56 here. Thanks to Hal and Jonathan for having me on the show.

Now let’s talk PowerShell and scripting for developers. I don’t see a lot of developers using the command line and this surprises me. Maybe it’s my Unix background that attracts me to the command line. Maybe it’s my belief that sustainable, maintainable development is facilitated by a CI process, which necessitates being familiar with the command line. Maybe it’s because the only way to create reproducible results is to automate and the easiest way to automate is the command line. Whatever the reason, I believe that developers should become familiar with copying, building, deploying, and otherwise automating tasks via the command line.

So why PowerShell? PowerShell is a full-fledged programming language focused on object-based shell scripting. Note that I didn’t say “object-oriented”. You cannot create class hierarchies or define polymorphic relationships, but you can instantiate and use objects defined in other .NET-based programming languages (or COM objects). PowerShell is a shell language, meaning that it serves the same role as cmd.exe, bash, tcsh, etc. It’s raison d’etre is automating the command prompt. Manipulating directories/files, launching applications, and managing processes is really straightforward.

Microsoft is investing heavily in PowerShell and providing support for managing Windows Server 2008, IIS7, SQL Server 2008, Exchange 2007, and other Microsoft server products. This means that we are approaching the Nirvana that is end-to-end build to deploy. Imagine getting latest from your source repository, building the code, unit/integration testing the code, building the documentation, labelling the build, and deploying into a QA environment! The entire process is automated and reproducible. You know the exact version of the code that went into QA. When you get the green light to do a live deployment, you give the same PowerShell scripts to the IT deployment team who uses it to deploy the compiled (and QA’d) bits into the production environment! Who best to write these deployment scripts than your friendly neighbourhood IT Pro, who is intimately familiar with the production and QA environments. This is a great collaboration point to get the IT Pros, who will be deploying and maintaining your apps, involved in the development process.

Enough chitchat. Show me the code! Believe it or not, you probably already know a fair amount of PowerShell. Many of the commands you’re familiar with in cmd.exe work in PowerShell. (More surprisingly, many of the common commands you know from bash, tcsh, or other Unix shells also work!) The command line arguments are often different, but the basic familiar commands are there. So try out dir, cd, copy, del, move, pushd, popd, … (If you’re a old Unix hacker, you can try out ls, man, kill, pwd, ps, lp, cp, … Unfortunately there is no grep equivalent built in, which is terribly unfortunate.) All of these commands are actually aliases to PowerShell commands, which are named by VERB-NOUN, where NOUN is singular. For example to get a list of running processes, you run Get-Process, which is aliased to “ps”.

PowerShell is very conducive to experimentation. You can always find out more about a command or alias typing “Get-Help [CmdName|Alias]” or simply “help [CmdName|Alias]” since help is an alias for Get-Help. (N.B. PowerShell is case insensitive.) You can also look for commands by typing part of the command and pressing tab repeatedly. For example, if you want to find all set- commands, type “set-[TAB][TAB]…” to display Set-Acl, Set-Alias, etc. You can also look for commands using wildcards. Type “*-Acl[TAB][TAB]…” displays Get-Acl and Set-Acl.

So start playing around with PowerShell. Learn what it can do for you. Next time, we’ll look at writing re-usable scripts for accomplishing common developer tasks. Until then, happy scripting!

I had the pleasure of appearing on .NET Rocks #362. I talked to Carl and Richard about dependency inversion, dependency injection, and inversion of control. A lot of what we talked about I also wrote about in my MSDN article, Loosen Up: Tame Your Software Dependencies for More Flexible Apps. Here’s the summary of the show, which I had absolutely no input into whatsoever:

James Kovacs talks about the Castle Windsor project, and gives the clearest definitions of Inversion of Control (IOC) containers, Dependency Injection, and the reasons why we need to think about these techniques. Critical listening for all .NET developers.

I believe that I owe them both a beer next time I see them for such flattering remarks. smile_embaressed

Bil joins John and James on ooVoo to try out three-way videocasting. Play Silverlight video. Play MP3 audio only.

We’ve had a backlog of shows in the hopper waiting to be produced. Three episodes in one smash hit release, all available in MP3 format. On Episode 16, John and I try videocasting via ooVoo. Watch the talking heads and let us know if you like the new format or whether we should stick to audio only. (Assuming we keep the videocast format, we’ll produce both MP3 audio only as well as Silverlight video.)

Plumbers at Work – Episode 14 – Do You Have Change for a Ningy?

Bil and James are back for another half an hour of fun. Play MP3 audio.

  • Microsoft offers full versions of its development tools to students for free
  • Google Apps
  • Languages – Python, Ruby, Boo, F#, C#
  • ALT.NET Seattle Retrospective
  • NHibernate 2.0 Alpha released
  • by Jeff Atwood and Joel Spolsky

Plumbers at Work – Episode 15 – The Man from Betelgeuse

John and James hold down the proverbial fort. Play MP3 audio.

  • John becomes a father
  • Becoming a Jedi screencasts (
  • Silverlight Streaming (
  • DevTeach Toronto
  • Dependency Injection and Inversion of Control
  • Persistence and Infrastructure Ignorance
  • Microsoft and the Yahoo! bid
  • ALT.NET Open Space Canada
  • Bahamas .NET User Group
  • Silverlight 2.0 and Testing
  • The Twitter phenomenon
  • What are Don Box and his team really working on?

Plumbers at Work – Episode 16 – Oh No, Not Again

John and James try out ooVoo for videocasting. Play Silverlight video. Play MP3 audio only.

N.B. Don’t adjust your sets. John’s audio drops out for a few seconds near the beginning. There was no way to recover it unfortunately.

The Plumbers are back for another half-hour of mayhem. Get it here.

  • Heroes Happen {Here} Launch (
  • DevTeach Toronto May 12-16 (
  • Discussing Hanselminutes #103 Quetzal Bradley on Testing after Unit Tests (
  • Release It! by Michael Nygard (
  • Bil 0 IE 8 (
  • John {Hearts} Polymorphic Podcast (
  • MSDN Mag article – Loosen Up: Tame Software Dependencies for More Flexible Apps (Coming soon to
  • James talking about Taming Software Dependencies on GeekSpeak – Wed. Mar. 26 @ 12-1pm PST (
  • John Guests on .NET Rocks (
  • Living Life on the Edge

The Plumbers are finally back after a long hiatus with a new 1/2 hour format. You can download it from here. In this episode we discuss:

  • Heroes Happen Here Launch
  • SQL Server 2008
  • Visual Studio 2008
  • Extension methods
  • JavaScript debugging and Intellisense
  • Lamdas, LINQ, and PLINQ
  • DevTeach past and future
  • ALT.NET Open Space Conference coming to Canada
  • ASP.NET MVC Framework
  • MVCContrib Project on CodePlex

After my DNIC video interview, John just wanted to know more about agile development. So we did it again, this time podcast-style. You can check out the audio interview here.

After my presentation yesterday on Simple Patterns for Simple Problems, John Bristowe, a fellow plumber (and closet agilist), interviewed me about agile development on the .NET platform. We talked about why developers should be interested in learning more about agile development techniques, including unit testing, TDD, code coverage, continuous integration, and more. Check it out: A Chat with James Kovacs on Agile Development.

UPDATE: One thing I forgot to note was that when I said most agile developers use Visual Studio and ReSharper, I should have qualified that with most agile developers [on the .NET/Windows platform] use Visual Studio and ReSharper, though I’m sure that was obvious. Java and Ruby developers don’t typically use Visual Studio. Tongue out

In this episode, we talk about Silverlight, Calgary Code Camp, Silverlight, GoDaddy refunds, Silverlight, Rhino Mocks, Silverlight, Entity Framework, Silverlight, NHibernate, Silverlight, and Halo 2. We finally wrap up the show by talking about Silverlight… You can download it from here.