April 13, 2010

Printing Story Cards from VersionOne

VersionOne doesn't provide a direct way to print your stories on index cards, but it can be done. I'm going to tell you about the browser approach and the export approach. For the browser approach, getting set up to print your stories on index cards is a matter of figuring out what URL to hit to get just the stories you want to print. Then you can bookmark that URL for later reference and print the cards directly from the browser. The disadvantage is that it's a few steps to change your browser's print setup each time and you'll want to reset your browser's print settings afterward. But you can print on standard stock index cards if your printer will allow. I'll give you the details in a moment.

The export approach involves downloading Avery's print wizard and setting up a template. Then each time you want to print your stories, go to the view in V1 that has the stories and columns you want to see on cards. You'll then do a few steps to export the stories into a spreadsheet and use the Avery tool to format the stories (into another document) and then print them on special Avery stock. The advantage to this approach is being able to select which values you want on the card and where you want them. That's all I'm going to say about this approach.

The Browser Approach

To keep this from getting too complex, I'm going to describe what you need to do if VersionOne is hosting your instance. If you are hosting it yourself you should be able to figure out what to do by reading the original post.

Generally, we are going to get all the stories formatted as cards on a web page, then we're going to print from the browser onto cards. To see all of the stories in the system, use this URL:
https://servername/v1instance/rest-1.v1/Data/Story?xsl=/s/custom/storyCards.xsl
For this and all the URLs below, you will need to replace "servername/v1instance" with your actual server and instance name. (Hint: look a the URL you use to access V1.)

Of course, you most likely will rarely want to print every story card. Thankfully, you can add some filtering. I'll provide some examples. You may have to do a little guessing, experimenting and URL manipulation, but I'll tell you how to approach that.

You can control which stories are returned by adding some query strings to your URL. For example, to see the stories for "Sprint #1", use the URL
https://servername/v1instance/rest-1.v1/Data/Story?where=Scope.Name='Sprint %231'&xsl=/s/custom/storyCards.xsl
Note the %23 in place of the hash symbol. You'll need to handle special characters in your URL appropriately.

To see the stories for "Iteration 7":
https://servername/v1instance/rest-1.v1/Data/Story?where=Timebox.Name='Iteration 7'&xsl=/s/custom/storyCards.xsl

To see the stories for "Sprint #2" that are OPEN (64):
https://servername/v1instance/rest-1.v1/Data/Story?where=Scope.Name='Sprint %232';AssetState='64'&xsl=/s/custom/storyCards.xsl

To see the stories for Iteration 6 that are OPEN (64):
https://servername/v1instance/rest-1.v1/Data/Story?where=Timebox.Name='Iteration 6';AssetState='64'&xsl=/s/custom/storyCards.xsl

To see the stories for Iteration 6 that are CLOSED (128):
https://servername/v1instance/rest-1.v1/Data/Story?where=Timebox.Name='Iteration 6';AssetState='128'&xsl=/s/custom/storyCards.xsl

You may want to do more filtering than in the examples here. To see what all the attributes and values are, leave the xslt out of the URL as follows:
https://servername/v1instance/rest-1.v1/Data/Story
There might be something useful to you in the Meta:
https://servername/v1instance/meta.v1
And you may need to refer to the Meta API and the ReST API documentation for V1's sdk as well as the article Getting Started with the API.

Now for Printing

Now that you have the stories you want to print formatted as story cards in your web browser, it's time to print them. This xslt we are using is set up to print two stories per page on letter size paper. If this is acceptable to you, you'll likely need to scale the print job to 80% or 90% when you print. Alternatively, you could go the extra mile and set up your browser to have no margins and no header or footer. But if you do that, you'll likely want to reset all of that once you are done printing.

That is certainly the easiest approach if you have a paper cutter handy, but with a little more effort we can print those directly onto stock index cards. To print those on a 3x5 card, set your browser as follows:
  • page setup: landscape, no margins, no header or footer
  • print, properties, paper: 3x5
  • print, properties, effects: leave set to actual size
  • print preview: scale 50%
Put the index cards in the printer in portrait orientation. And print.

Question of the Day

Have you found any other approaches to print story cards from VersionOne?

April 6, 2010

Pair Programming is Infectious

Those who are proficient at it say pair programming makes them faster and more thorough with their testing and refactoring. It improves their design skills and the quality of the application. Real good promiscuous pairing quickly spreads best practices, rhinoviruses, knowledge, influenza, bacteria, techniques, tips and tricks throughout the team. Not all things are good in an environment that excels at spreading things.

Thank goodness I'm seeing more and more team members actually go home at the first concern of getting sick, and managers in support of this. A cold can decimate an entire team.

Sharing a keyboard and mouse can help those new to pairing get the hang of it through the explicit "you drive" keyboard push. But once beyond that stage, use two keyboards and mice. They’re cheap.

You can keep plenty of alcohol based hand sanitizer and wipes around; a box of tissues on every desk and signs in the restroom encouraging hand washing. I'm starting to see restrooms with small paper towel dispensers by the door for the express purpose of giving you something to use when opening the door. One team I’ve seen sprays their keyboards and other surfaces with Lysol once or twice per week.

From the Chateau Grand Traverse men's room, Old Mission Peninsula

Eating well and getting exercise is commended in the places I've been.

But beyond those things, how can we convince our teammates to stop picking their nose? "I don't pick my nose!" they say. Ok, rubbing your nose. Biting your cuticles. Chewing on your pen. Whatever it is, keep your hands and other objects away from your face.

I guess sneezing into your hands is better than into open air and onto the desk, but go wash your hands afterwards. "Oh, bless you! A sneeze like that deserves a hand-washing."

I've been thinking about this a lot, to the point that empty beverage containers lying around creep me out. "Whose is this? Should I throw it away? Do I want to touch it?"

To combat these bad habits and their contagion in my teams I'm trying every approach I can come up with. I use humor when I can and the direct approach when it's all I can think of. And by the way, throw your used tissues away, will ya?