About Me

Training

Nothin But .Net Developer Bootcamp

Navigation

Search

Categories

On this page

Firefox + vimperator + gvim + ItsAllText
Thoughts On Readability
BDDDoc
NHibernate 2.0 GA
Building A Solid Core Contest - Announcing the winners
Lead Like Jesus
Agile Project Management Training - By Jonathan Rasmusson
Nothin But .Net London - Location Confirmation (again)

Archive

Blogroll

 Agile Developer Venkat's Blog
 Ayende @ Blog
 B#
 Barry Gervin's Software Architecture Perspectives
 Boy Meets World
 Brad Abrams
 Canadian Developers
 Christopher Steen
 Claritude Software News
 Clemens Vasters: Enterprise Development and Alien Abductions
 Coding Horror
 Coding in an Igloo
 Dare Obasanjo aka Carnage4Life
 Darrell Norton's Blog [MVP]
 David Hayden [MVP C#]
 Don Box's Spoutlet
 Eric Gunnerson's C# Compendium
 EZWeb guy: Jeffrey Palermo [C# MVP]
 Fear and Loathing
 Generalities & Details: Adventures in the High-tech Underbelly
 Greg Young [MVP]
 Greg's Cool [Insert Clever Name] of the Day
 IanG on Tap
 Ingo Rammer's Weblog
 ISerializable - Roy Osherove's Blog
 James Kovacs' Weblog
 Jason Haley
 Jean-Luc David
 Jeremy D. Miller -- The Shade Tree Developer
 JetBrains .NET Tools Blog
 Jimmy Nilsson's weblog
 John Bristowe's Weblog
 John Papa [MVP C#]
 Jon Skeet's Coding Blog
 JonGalloway.ToString()
 Jump the Fence or Walk Around
 Lambda the Ultimate - Programming Languages Weblog
 Larkware News
 Lutz Roeder
 Marquee de Sells: Chris's insight outlet
 Martin Fowler's Bliki
 Mike Nichols - SonOfNun Technology
 MSDN Magazine - .NET Matters
 MSDN Magazine - All Articles
 OdeToCode Blogs
 Onion Blog
 Planet TW
 Raymond Lewallen [MVP]
 Rockford Lhotka
 RodMan's Corner
 Roger Johansson's blog
 Sahil Malik - blah.winsmarts.com
 Sam Gentile's Blog
 Scott Bellware [MVP]
 Scott Hanselman's Computer Zen
 ScottGu's Blog
 secretGeek
 Service Station, by Aaron Skonnard
 Signum sine tinnitu--by Guy Kawasaki
 Stephen Toub
 Steve Eichert's Blog
 Steven Rockarts
 The Blog Ride
 The Coding Hillbilly
 The Daily WTF
 TheServerSide.net: News
 Tim Gifford
 Vance Morrison's Weblog
 you've been HAACKED

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

RSS 2.0 | Atom 1.0 | CDF

Send mail to the author(s) E-mail

Total Posts: 384
This Year: 109
This Month: 12
This Week: 3
Comments: 973

 Wednesday, August 27, 2008
Wednesday, August 27, 2008 5:14:19 PM (Mountain Standard Time, UTC-07:00) ( Tools )

The title spells out the latest set of tool combinations that take me one step closer to a richer mouseless browsing and editing experience. If you read the earlier post I am currently back running FireFox 2.0 and the older version of Vimperator as the "feature" did not present itself in that combination of tools.

I currently use vimperator to offer a mouseless browsing experience. I just stumbles upon ItsAllText which is a great add on that  lets me fire up gvim as my editor for textarea elements. I configure it to use gvim as my external editor and when I am in a textarea I can hit a hotkey to launch my external editor. I enter in the text I want and then I save and exit the editor (:wqa in gvim). This takes the contents of the vim buffer and sticks it into the textarea that I launched from.

 

If there is enough interest I would be glad to do a quick 10 minute screencast on mouseless browsing with all of the tools that I just mentioned. If there are enough responses then I will do up the screencast quick and get it out by the end of the week!!

 

Develop With Passion!!

Comments [1] | | # 
 Tuesday, August 26, 2008
Tuesday, August 26, 2008 10:47:36 PM (Mountain Standard Time, UTC-07:00) ( C# )

I am currently going through my existing application and refactoring for a bit more readability (with a focus on natural language). Could I get your feedback onthe readability of the following piece of code which demonstrates a chain of responsibility:

Run.the<wire_up_global_error_handling>() .then<initialize_the_container_for_the_user_interface>() .then<initialize_the_user_interface_registry>() .then<initialize_the_ui_images_registry>() .then<initialize_the_main_menus>() .execute();

Underscores in code seem to have permeated a lot of my thinking. And I am currenlty playing around with lowercase method naming with underscores to separate significant words. How would you feel if you were presented with this code to read? Be brutally honest!!

 

Develop With Passion!!

Comments [0] | | # 
 Monday, August 25, 2008
Monday, August 25, 2008 9:42:24 PM (Mountain Standard Time, UTC-07:00) ( Tools )

For the last couple of courses I have been using a tool to generate simple natural language reports using  simple BDD Naming Styles. Just so everyone knows, the insipiration for this tool came from Scott Bellware and his tool SpecUnit. The only different between the tools is bdddoc is really just a categorization/reporting tools for your tests.

People who are already trying to adopt a more BDD oriented approach to writing their tests will find the tool useful for generating natural english reports from the testfixtures in your project.

If you run the tool against the prep exercise that I posted a while ago, you would get the following report.

To use the tool you simply add a reference to the bdddoc.dll from the project that contains your test. There is only one attribute that means anything of significance:

using System; namespace bdddoc.core { [AttributeUsage(AttributeTargets.Class)] public class ConcernAttribute : Attribute { public Type concerned_with { get; private set; } public ConcernAttribute(Type concern) { this.concerned_with = concern; } } }
 

With this attribute in hand all you have to do is mark up your test fixtures with the Concern attribute. Here is an example of one full test fixture.

using bdddoc.core; using bdddoc.spechelpers; using Observation = MbUnit.Framework.TestAttribute; namespace bdddoc.domain { [Concern(typeof (ConcernFactory))] public class when_a_concern_factory_is_told_to_create_a_concern_from_a_type : ContextSpecification<IConcernFactory> { private IConcern concern; private IObservationSpecification observation_specification; protected override void establish_context() { observation_specification = dependency<IObservationSpecification>(); observation_specification.setup_result(x => x.IsSatisfiedBy(null)).IgnoreArguments().Return(true); sut = create_sut(); } protected override void because() { concern = sut.create_concern_from(typeof (when_a_decimal_is_told_to_subtract_itself_to_another_number), observation_specification); } [Observation] public void should_create_a_concern_with_the_correct_bdd_style_name() { concern.name.should_be_equal_to(typeof (when_a_decimal_is_told_to_subtract_itself_to_another_number).Name.as_bdd_style_name()); } [Observation] public void should_create_a_concern_populated_with_all_of_the_observations_satisfied_by_the_specification() { concern.total_number_of_observations.should_be_equal_to(3); } protected override IConcernFactory create_sut() { return new ConcernFactory(); } } }

Don't be too put off by the naming style. Notice how I am making use of aliasing to alias the TestAttribute to use the word Observation. This eliminates the need to add another attribute to the bdddoc assembly. This also means that once you have placed the concern attribute on your test fixtures (keep in mind that the type argument for the constructor is the System Under Test) you will be able to run bdddoc again nunit, mbunit, or others (so far it has only been tested with mbunit and nunit).

When bdddoc is run (assuming that the class above was the only test fixture in the assembly, you would get the following output:

Concerns: 1 - Observations: 2

  • Behaviour of: ConcernFactory [ 1 Concern(s) , 2 Observation(s) ]
    • when a concern factory is told to create a concern from a type
      • should create a concern with the correct bdd style name
      • should create a concern populated with all of the observations satsified by the specification

This post is not going to talk about how I currently organize my contexts and observations (fixtures/tests respectively). After either the next course in London or the one in Dusseldorf in September, I am going to update the google code project for the Nothin But .Net store project to demonstrate some more complex tests that make use of mock, separating contexts etc.

Here is the build task that I use to run the report for my projects:

<target name="run.test.report" depends="setup.test">
    <exec program="bdddoc.console.exe"
        basedir="${third.party.tools.dir}\bdddoc\bin"
        workingdir="${build.artifacts.dir}"

        >
        <arg file="${build.artifacts.dir}\${nothinbutdotnetprep.lib}"/>
        <arg value="TestAttribute"/>
        <arg file="${build.artifacts.dir}\SpecReport.html"/>
    </exec>
</target>

 

The source code for the project can be downloaded here. I am going to place it up on my google code space, but currently I have having trouble with the account.

This project was built very quickly in a top down fashion, at the end of the day it is simply reflection and text writing. I just find working top down a very quick way to solve a problem, with the side effect of potentially more players brought into the mix (see the interfaces and classess!!). You can take a look at a lot of the tests to get a feel for how I am making use of AAA style testing and extension methods everyone to support more fluent testing. Feel free to change the code anywhere you see fit. If you add anything cool, please try and get it back to me to share with the rest of the community. Right now the actual report writer (SimpleHtmlReportWriter) is just that, very simple!! If anyone feels like submitting a writer that uses some XSL and some nice stylesheets, it would be great!!

To build the project just point a command prompt to the build folder and type the following command: build package. This will place the console runner and dll into the following folder build\latestpackage.

If you just want to get the binaries download this file and extract.

Develop With Passion!!

Comments [0] | | # 
Monday, August 25, 2008 3:08:50 AM (Mountain Standard Time, UTC-07:00) ( Tools )

If you have not yet at least spiked an application written with NHibernate, now is the time to at least give yourself a 30 minute block to spike it out.

Download from here and give yourself a couple of lunch hour breaks to see one way to free yourself from the shackles of 90% of your DB code.

 

Develop With Passion!!

Comments [1] | | # 
 Friday, August 22, 2008
Friday, August 22, 2008 7:35:48 AM (Mountain Standard Time, UTC-07:00) ( Insipration )

Thank you all very much for taking the time to let your votes be known!! The contest was announced on the 10th of June. If you want to read the top 5 entries again, check out the post here.

The winning entries in their respective orders (1st, 2nd, and 3rd) are:

 

Grand Prize Winner - Entry 1 - Matt

Matt wins  a spot in the Las Vegas edition of the Nothin But .Net training bootcamp,  along with a Visual Studio 2008 Team System and MSDN Premium one year subscription!!

2nd Prize Winner - Entry 2 - John

John wins the following: 

  • Books
    • The Pragmatic Programmer
    • Head First Design Patterns
    • Code Complete
    • Refactoring
    • Design Patterns
    • Test Driven Development By Example
    • CLR via C#
    • Working effectively with legacy code
    • Domain Driven Design
    • Agile Principles, Patterns, and Practices
  • Tools
    • ReSharper 4.0
    • DotTrace 3.1
    • TestDriven .Net
  • Visual Studio 2008 Team System and MSDN Premium one year subscription

3rd Prize Winner - Entry 4 - Freek

Freek wins a $140 amazon gift card.

 

Thank you to all of the people who took the time to participate in the contest!!

 

Develop With Passion!!

Comments [0] | | # 
 Wednesday, August 20, 2008
Wednesday, August 20, 2008 7:00:59 AM (Mountain Standard Time, UTC-07:00) ( General )

I am currently in the midst of reading an amazing book titled Lead Like Jesus. I just read a great paragraph that I feel called to share:

 

"Acting out of pride is like trying to blow up a balloon with a hole in it. It is lonely business requiring consistent effort with only temporary results that never satisfy or please anyone. Think of a time when you have blew up a balloon and there was a hole in it, and you will have a good mental image of what happens when you put your self-esteem in your performance and the opinions of others."

 

Currently I am only 1/4 way through the book, but I am already aware of the fact that the book is going to have a tremendous impact on me!!

 

Develop With Passion!!

Comments [0] | | # 
 Monday, August 18, 2008
Monday, August 18, 2008 7:00:55 AM (Mountain Standard Time, UTC-07:00) ( Training )

My good friend Jonathan Rasmusson is hosting iteration 2 of his great Agile Project Management course in Calgary, AB, Canada during the month of September. Here are the details:

Plan the work. Work the plan.

That has been the maxim taught in project management circles for the better part of 50 years.

If only it were that easy.

Reality has taught us that when we blindly following plans we:

    * miss deadlines
    * exceed budgets
    * and disappoint our customers

There is a better way, and it works!

Agile, Scrum, Extreme Programming, and Lean Software Development.

In this course I will show you how to:

    * setup
    * execute
    * and successfully wrap up your own agile project

We will cover:

    * agile project initiation
    * requirements gathering
    * estimation
    * planning
    * iteration mechanics
    * tracking
    * team building exercises / practices
    * roles and responsibilities
    * dealing with resistance
    * and effective project leadership

If you are looking to:

    * build trust with your customers
    * improve relationships with team members, and
    * gain a competitive advantage in the market place

Register Now

http://rasmusson.wordpress.com/services/agile-project-management-training/

Where

Petro-Canada Centre
150 6 Avenue SW
Calgary, Alberta

When

September 11-12, 2008


Cost
$1195 USD

As a former agile project lead, coach and mentor at ThoughtWorks, Jonathan was spent the greater part of the last ten years collecting, and distilling the best agile project management practices from around the world.

His experiences include leading agile projects at Microsoft, British Petroleum in the UK, AMP Capital in Sydney Australia and many other companies throughout Canada, the US, England, and Australia.

 

Develop With Passion!!

Comments [0] | | # 
 Sunday, August 17, 2008
Saturday, August 16, 2008 11:14:17 PM (Mountain Standard Time, UTC-07:00) ( Training )

I seem to be having some trouble with my blog posting software. Here it goes again!

The venue for the course has been changed to the London Marriott Hotel Regents Park.

The evening rates for people wishing to stay at this hotel are around 118 GBP a night.

You can register for the course here: http://www.acteva.com/booking.cfm?bevaID=164699

Develop With Passion!!

Comments [0] | | #