Tuesday, January 19, 2010

Book Review: "slide:ology"

When I attended PDC in November one of the booths I visited in the exposition hall was O'Reilly Media. They have been, and continue to be, supporters of the VT .NET user group and the VT Code Camp - so I wanted to drop by and thank them for that. It turns out Marsee Henon was there. Marsee's job is to reach out to user group leaders on behalf of O'Reilly - so she was the perfect person to run into. Knowing that I have done presentations for the VT .NET user group she was kind enough to give me a copy of "slide:ology" by Nancy Duarte.

Nancy Duarte is CEO of Duarte Design, one of the largest design firms in Silicon Valley, which focuses exclusively on presentations. She has poured her expertise into "slide:ology" (subtitled "The Art and Science of Creating Great Presentations"). The book sets out to liberate presenters, and their audiences, from the tedium of presentations which are little more than documents shown through a projector. We've all attended such presentations, of course. Slide after slide loaded with bullet points with the speaker reading each one in turn.

The early parts of "slide:ology" takes the reader by the hand and reviews with him/her how bullet points can be distilled down to ideas to be communicated. Additionally, by considering the audience those ideas can be delivered in the most appropriate manner. Those practices alone can help presenters be more effective.

Much of the remainder of the book is focused on moving your presentation from merely effective to compelling. Examples of effectively visualizing data (using graphs, images, diagrams, etc.). Guidance on the impact of color and font choices to communicate and to best represent yourself and/or organization are offered. Incorporating movement and animations was a topic I had not considered before, but was a section I found particularly useful. Finally, there is a section on how templates can be defined to provide a uniformity for an organization with several presentations.

I've prepared two presentations since reading "slide:ology" and both were better as a result.

The book itself is a fairly quick read and presented in a clear, concise manner. The size of the book is reminicent of a slide show, too, with the layout of each page following many of the same guidelines for design and communication. I found some of the early sections a little pretentious - but that might be due to the fact I'm not preparing presentations designed to save the world or provide clean drinking water to the third world. If you read "slide:ology" and start to feel that way just power through... there is more than enough content to justify reading the whole book.

This book belongs on the shelf of anyone who prepares presentations - especially if they lack a design background.

Tuesday, January 12, 2010

Links from my VT.NET User Group talk

I had a lot of fun presenting at last night's VT.NET user group meeting. The topic was a wrap up of my trip to Microsoft's PDC conference in Nov. 2009. There were a few links I mentioned during the talk I wanted to share.

Obviously folks will want to check out the PDC web site at http://microsoftpdc.com/ for access to all the videos and slide decks. There are additional materials for some of the official announcements at the PDC press site, http://www.microsoft.com/presspass/events/pdc/default.aspx.

The data developer center can be found at http://msdn.com/data

As I mentioned during the talk, one of the sessions I attended was "Building Location Aware Applications with the SQL Spacial Library." I described a demonstration from that session where location information in an Excel spreadsheet was used to highlight portions of a map. There's a fairly comprehensive blog post outlining that demo from the presenter available at http://blogs.msdn.com/oliviermeyer/archive/2009/11/17/introducing-the-excel-spatial-spreadsheet-building-an-excel-add-in-for-doing-spatial-analysis-and-spatial-operations-in-net.aspx with a follow up blog post at http://blogs.msdn.com/oliviermeyer/archive/2009/12/29/the-excel-spatial-spreadsheet-part-deux.aspx.

Finally, during the session I mentioned a few speakers who stood out. Here are links to their blogs:
I hope everyone that attended the session got a little something out of it.

Wednesday, December 2, 2009

Wiring FxCop up to our build process

Earlier this week we decided to finally pull the trigger to have our automated build fail when the code violates the FxCop rules we use for code analysis. Previously we ran FxCop but rule violations didn't break the build. The code is a legacy application and so lots of rules were broken pretty much everywhere.

But yesterday I set all existing violations as exceptions so FxCop will basically ignore them. Today's effort was to figured out how to have the build break and still have the FxCop results appear in CruiseControl.NET (CC.NET). That second goal was a bit trickier than I thought it would be.

There were two changes that had to be made to enable this. First, was to have the NAnt script fail when FxCop finds a problem. This wasn't a big deal because FxCop only produces the XML output when there are violations. All I had to do was add a FAIL task that runs after the code analysis. If the output file exists we fail. This is what that task looks like:

<fail if="${file::exists(fxcop.output.path)}">FxCop rules violated, see FxCop Report for details.</fail>

Now the code analysis can build to break - awesome!

But doing this caused the FxCop Report in CC.NET to not display any results. This blog post by Leifw gave me the hint I needed to resolve the problem. Previously I had been doing my File Merge to get the FxCop results as part of the TASKS node of my CC.NET project configuration block. It turns out, though, File Merges done in the TASKS node won't occur if the build fails. I moved it to a PUBLISHERS node in the project and it all works ducky. That's because the PUBLISHERS node is processed even if the build fails. That looks like this:

<project name="MyWebGrocer.Gsa Trunk">
...
<publishers>
<merge>
<files>
<file>C:\BuildArtifacts\Project_Trunk\*.xml</file>
</files>
</merge>
<xmllogger />
</publishers>
</project>

Now if someone commits code that does something unforgivable - like neglecting to make a method static if it doesn't use any instance members - the build will break and they can check what the offense was via the CC.NET dashboard.

It's still a legacy application - but we won't be committing any more legacy code.

Wednesday, September 16, 2009

VT Code Camp 1: Summary

It's been nice to read some of the posts people have made about the VT code camp. The ones I've seen are by Bradley Holt, Chris Bowen, Dave Burke and Jim O'Neil. But I thought I would post my own summary of the first VT code camp.

First, I want to reiterate my appreciation to the many donors, speakers and volunteers who made the event the wild success that it was. You folks rock!

Code camp setup began around 7:30AM. This was only my second time at Kalkin Hall and was just as impressed with this location as I was when I had seen it the day before. It is just a wonderful space that suited our event to a "T." Again, many thanks to the UVM School of Business Administration for opening their doors to us. The setup team included Margot Schips, Julie Lerman, Laura Blood, Carl Lorenston, Bradley Holt and Dan Russell. (If I'm forgetting someone I apologize. Things were moved so fast and furious during the day I neglected to stop and take notes to do this properly.)

We got our only crisis out of the way early on Saturday when at around 7:35AM when we found out one of the rooms we were told we would be using turned out to be hosting a different all day event. After some frantic calls made by Margot we got it straightened out and were able to use an alternate room which worked just as well.

After that it was smooth sailing. We had a marvelous breakfast spread provided by Green Mountain Coffee Roasters. Lots of coffee, lots of pastries, lots of bagels and even lots of fruit. It was all yummy (and I speak from experience... lots of experience).

In typical VT style we began the welcoming remarks a few minutes behind schedule (what? you got someplace to be?). After thanking the donors, orienting everyone to the space and reviewing the day's schedule we turned our attendees loose. Plenty of positive energy and familiar faces.

The first two time slots went off without any projectors exploding (although it took a little bit to figure one of them out). Laura Blood was super-generous with her time and watched the registration desk. After that we broke for a lunch provided by MyWebGrocer. Lots of pizza and soda. Filled me right up. By this point my schedule started to even out. We had the swag organized, the registrations had started to die down and Julie and I had done the pizza run (complete with expert parking job). So I made the most of it and enjoyed the lunch break. It was great to spend a few minutes chatting with folks I knew and meeting folks I hadn't - plus the surreal experience of meeting in person folks I only knew from online.

After lunch we dove back into session. We moved the registration desk downstairs where it was manned by Dave Burke. Dave's one of the first people I met when I started to attend the .NET user groups and I always enjoy talking with him. Plus, when he adjusted my name tag for me it was the most action I had had all day.

Soon it was time for another snack break - this time courtesy of Microsoft. Sodas, brownies, and other tasty treats. Noshing and networking... good times.

We held the raffle during the last break. We gathered in one of the session rooms and used a random number generator to identify the winners. Julie also took a moment to extend a special thank you to Steve Andrews and Alison Gianotto who were the two speakers who travelled the farthest. After all the support our donors provided we ended up with nearly 30 prizes to give away - so we ran a little longer than expected. The final sessions started a little late, but everyone was still going strong. We volunteers set about cleaning up during the last session so we could get an early exit to a social gathering at the Windjammer. Special thanks to Chris Bowen and Microsoft for treating the speakers and volunteers so kindly.

I could keep writing about all the people I met and reconnected with. I might even do a post about the lessons learned that I hope to apply to the next code camp (yes, we intend to do this again). The whole experience was exciting, maddening and gratifying. I'll keep searching for posts, tweets and pictures tagged with VTCODECAMP to see what people thought. I hope you do, too. And join us at the next VT Code Camp!

Friday, September 11, 2009

Twas the night before code camp...

No more messing around - tomorrow is the first VT code camp. We've got everything as done as we can at this point. Excellent speakers/sessions lined up, a kickin' venue, a good team of volunteers and lots-o-swag. We've got over 100 people who have registered to attend, which far exceeds my expectations. I think I'm probably on the record somewhere stating that for our first code camp 50-70 would be a great turn out but talk of 100 was fantasy.

Looks like I was wrong. Happily, happily wrong.

Seriously, for this event to have that many people register is a huge testament to the development community in VT and the northeast in general (we've got participation from as far away as PA and NYC).

I'm super pleased with the support we've received from our donors, too. The UVM School of Business Administration has opened their doors to us for the venue. Green Mountain Coffee Roasters is covering breakfast, MyWebGrocer (my employer) is buying pizza and soda for lunch and Microsoft is providing an afternoon snack.

Chris Pels and the http://www.thedevcommunity.org/ site helped us by managing our registration and speaker abstract submissions which was HUGE.

We've a pile of swag to raffle and give away, too. Donors are:
It takes a lot of people to get an event like this off the ground and we have a great team. Super big thanks go to Bradley Holt, Carl Lorentson, Julie Lerman, Laura Blood, Margot Schips, Martin Stevanof, Matthew Weier O’Phinney and Rob Rohr who did a lot of heavy lifting to get us poised for a successful event tomorrow.

I also got some wonderful advice about organizing a code camp from Chris Bowen and Jim O'Neil our regional Microsoft development evangelists and also from Dennis Perlot and Supriyo "SB" Chatterje from the CT code camp. These four guys provided some good input and are all class acts.

Finally, I wouldn't even be able to be involved in this kind of community development if it weren't for my wife, Sue, who will be taking care of the kids while I'm at the code camp. So she gets a thank you, too.

So that's it. Everything is printed, the alarm is set and I'm really very, very excited to see how we do.

Friday, September 4, 2009

Snippets for HTML, JavaScript and ASP.NET in VS2010? Seriously Cool!

http://weblogs.asp.net/scottgu/archive/2009/09/04/asp-net-html-javascript-snippet-support-vs-2010-and-net-4-0-series.aspx

Update: Whoops... forgot to make it a link.

Wednesday, August 12, 2009

WebKit border radius and cascading styles don't always mix

Since starting the new job in January I've had to learn more about developing for the web than I ever have. One of the fascinating (and frustrating) aspects has been the way different browsers render the same code. The only web content I've written prior to this job was a very basic set of static pages for the Burlington Irish Heritage Festival and for an intranet web application where the company dictated which browser was to be used. But with the new gig I'm in the real world. That means every change I make needs to test against 4 or 5 browsers. And that's just on my development box, once it goes into QA the application is tested against over 20 different browser and OS combinations.

So I've started to familiarize myself with the various rendering engines used by the major browsers. One of the big ones is the WebKit open source engine. It serves as the rendering engine for some of the browsers I need to support; Safari on Windows and Google's Chrome. Recently we encountered a little WebKit specific gotcha that I wouldn't have expected. It has to do with a WebKit specific CSS attribute, -webkit-border-radius. It's a wonderful attribute that when set instructs the WebKit browsers to round the corners of an element. This post has a very good summary of the -webkit-border-radius attribute (and it's Mozilla equivilent, -moz-border-radius). The important point for this discussion is -webkit-border-radius is a shortcut declaration.

The problem we encountered had to do with how the -webkit-border-radius attribute behaved when used in a cascading style. The application on which I work has one style sheet defined for application wide default styles and then uses additional files to adjust the styles as needed. So, for example, the application default stylesheet may define a class like this:

.someRoundedThing { -webkit-border-radius: 4px; }

which will will cause a WebKit browser to round the corners of an element decorated with that class. Another style sheet could then declares following:

.someRoundedThing { -webkit-border-radius: 8px; }

If a page pulls in the application style sheet and then the alternate style sheet what should happen is the elements on that page which are decorated with the "someRoundedThing" class should be twice as rounded (again, only in WebKit browsers) than on a page where only the application default styles are included. But this wasn't working as expected.

In order for the page defined style to work we had to declare the alternate -webkit-border-radius value using the more verbose, four value declaration. Like this:

.someRoundedThing { -webkit-border-radius: 8px 8px 8px 8px; }

Declaring each corner's radius individually also worked:
.someRoundedThing {
-webkit-border-top-left-radius: 8px;
-webkit-border-top-right-radius: 8px;
-webkit-border-top-bottom-radius: 8px;
-webkit-border-top-bottom-radius: 8px;
}

While I'm not certain why this is going on, I assume it is related to the differences in implementation outlined in this post.

So while I like using the shortcut declarations for their terseness it appears they can lead to problems if your not careful.