This weekend was the 2010 St Louis Day(s) of .Net. This year the event proved to be bigger and better than last year with more speakers, more rooms and more attendees. While still at the same venue, the Ameristar Casino in St Charles, they held sessions in several new rooms.

The Good

I really enjoyed most of the sessions I attended. With the few that I didn't, I was able to easily bounce out the door and either find one that was more interesting or strike up a conversation with someone in the hallways. I was never bored.

Sketching with Sketchflow

There were a few presenters that left a great impression on me. I first have to mention Brad Nunnally. I saw his session last year and was really impressed with his presentation skills. He gave a great talk...last year. This year, in his Sketching with Sketchflow session, he completely changed and upped his game. He gave a short talk about UX, similar to part of his session last year, and then jumped into a demo; however, this was no well scripted and practiced demo, it was a spontaneous and crowd-sourced demo.

Brad took ideas from the audience on what application he was going to use to demo Sketchflow. He used a webcam to let the crowd watch as he hand sketched the rough prototype, and then fired up Sketch flow and did an impressive job of translating the drawings into an interactive prototype. His session was by far the most engaging of the traditional session I attended. I am by far more tolerant of stumbles when things are ad hoc as opposed to those during something that should be well prepared, like the keynote.

@dahlbyk to stress your brain

I might have a geek crush on Keith Dahlby, @dahlbyk. I've seen him speak several times, first at a St. Lous SharePoint conference a couple years ago. His sessions are always the most technically in-depth sessions at the conference, or at least in depth in areas that interest me.

Keith did two sessions, LINQ Internals II: System.Interactive and Dynamic Data Demystified. His LINQ talk highlighted several functions that will replace my home grown versions, such as Zip and ForEach.

His dynamic talk shed light on the new dynamic keyword and some possible uses for it beyond just executing Ruby or Python scripts. It's exciting to get duck typing in a statically type language such as C#. There was some talk about why anyone would want to use dynamic. I would point them to Design Patterns in Ruby, which takes the GoF patterns and implement them in Ruby. Several patterns implement the exact same as C#, but a few, such as Adapter and Proxy implement more elegantly via meta-programming. I see potential of using dynamic in the same effect.

Bi-directional Presentations

My favorite addition to this year's DODN was the introduction of the open spaces. When I initially planned out my schedule I circled almost ever open space session. I like hearing from several smart people at once and having the ability to add my own two cents to the conversation. I attended two open space sessions; BDD with Lee Brandt (@leebrandt) and Automating Your IT Shop with Rob Reynolds (@ferventcoder), both of which were awesome.

I saw Lee's BDD talk at last year's DODN and it really validated some of the steps I was talking at the time. This year he was was able to help me ease some of my pains with BDD that developed over the past year. It was also good to hear some other people talk about their experiences. It's good to hear your not alone in some of the troubles you've had or in the manner in which you've addressed those troubles.

One of the sessions I was looking forward to the most was the automation talk with Rob Reynolds. I've followed him on Twitter for some time and followed the open source projects he works supports. I was looking forward to meeting him in person. Automation is something I've been addicted to as well. While being in a small shop, with only a few major application to support, there are definitely pains to be automated away. There were more people in this session than the BDD session and as a result more voices in the conversation. While initially about automation, the conversation shifted to tooling in general, which was fine. There was still interesting conversation. There are several tools I find very disgusting, such as TFS, which made it hard to bite my tongue as they were recommended, but I did my best.

Moderating an open space session sounds hard and scary to me, but both sessions were wonderful and among my favorite sessions at the conference.

Bring out your dead books

The organizers had a great idea for a community book drive benefitting a local charity. I was really excited to be able to offload some of my books to somewhere else than the recycle bin, but both days I forgot to bring them along. While my wife was glad I didn't bring any new books home, I was slightly disappointed. I saw some XCode books in the photos before the conference and was sure they would still be there by the time I made it to the table, but alas they were not. I did see a handful of other Macs there, but surprised the Xcode books were snagged up.

The Bad

There were a few things about the conference I didn't like.

Filled to the brim

I'm sure it's hard to anticipate which sessions will draw a crowd. The size of the rooms varied significantly. My first session of the day was Website Usability 101 with Tim Barcz. I've seen Tim before and would see him based on his reputation alone. His first session was crowded and hot. So hot in fact I started to sweat and had to leave. There were a few other sessions like this. I think this could easily be eliminated by allowing people to like sessions to gauge interest before committing to the room.

Note: I didn't mean to imply Tim's session in any way deserves to be mentioned in The Bad, but more the room selection was a poor choice. Tim's session was excellent and I would see him again.

80 minutes downtime

Lunch was again too long. 80 minutes is way too long. At first I wasn't worried about it because they initially planned some open space conversations over lunch. That sounds great to me as I'm already a fan of open spaces. Unfortunately the sessions didn't happen. We were left taking 80 minutes to eat a sandwich and sit around.

Too Cool For School

Another thing I didn't like about the conference was the choice of venue for the social event. Home is too swank for me. I really don't want to pay for $6 beers in an environment that makes it hard to talk to the person next to you. I would be happy with a room full of beer and pizza boxes. The social event at Ruby Midwest was a BBQ dinner with about 10 lighting talks of 10 minutes each. It was amazing. There were tables of people. You could talk. It was interesting. Last year at Strange Loop they held a similar event at the Duck Room of Blueberry Hill. Much more interesting than some cool kid night club.

The Ugly

There was one thing I found rather disturbing and disgusting. There over a thousand tiny plastic bottles of water sitting in the trash at the end of each day. It's wasteful, but apparently no one cared. Both days I took one bottle of water and refilled it from the drinking fountain. The water was colder and I wasn't unnecessarily filling the trash cans.

Maybe next year we could forgo some of the SWAG for a reusable bottle. This was part of the gift bag at a Tech. Ed. I was lucky enough to attend. It reflects poorly on us that we are so wasteful.

For next year

First of all, we need to call it "Days of .Net". For the past two years it has been two days, as opposed to the single day of the first event. It's time we were technically correct.

I've already mentioned some of the other changes I would like to see: gauging interest in sessions before committing to the rooms, more casual social event, shorter lunch. I think each of those would make the event more enjoyable to everyone.

Another aspect of the event I find frustrating is the abundance of demo-fests sessions. I realize a broad and shallow level of sessions draws more of a crowd, but there were so few sessions that went deep. I'm not sure if that was by design, and several technically deep presentations were declined or if there were so few submitted. I don't want to attend a sales pitch, which I felt like some of the sessions were.

Compared to Ruby Midwest

I was lucky enough to attend Ruby Midwest earlier this summer. It was a great conference even though my Ruby experience is limited. Being immersed in something challenging and over my head was exciting. I was able to draw a few comparisons.

Enterprise vs Community

One thing I noticed was the difference between the focus of the session. It would be safe to say I heard the word "enterprise" at DODN as much as I heart the word "community" at Ruby Midwest. Some might believe that is a testament to the professional nature of C# over the child play of Ruby, but I don't think that is the case. While I agree there aren't as high of a percentage of people using open source in the .Net space compared to Ruby, we do still have open source projects, several of which had major contributors present at the event, but speaking of something more enterprisy of course.

I would like to see entire sessions dedicated to open source projects. Show me Mass Transit or Rhino Mocks. Talk to me about why you created it, what problems it solves, and services built on top of it. Show me how to get involved. Show me how to start an OSS project, what mistakes you made, how to avoid them. We're all passionate about programming. We do it when we're not at work and we want, or should want to get involved.

Where's the web

Where were the sessions on JavaScript or HTML5? I counted two. Out of all those sessions there wasn't room for more? At Ruby Midwest I saw a session on CSS meta-frameworks that blew my mind. I would bet 90% of the web developers have never heard of .Less, or the SASS/SCSS tools it was derived from. Why not more sessions on jQuery? Silverlight is not killing the web. We are still writing HTML and JavaScript. How many people there understand closures or the module pattern or how/why to write a jQuery plugin?

When I do some eyeball analysis of distribution of the sessions, they lean heavy toward Silverlight and away form web technologies. Is this really the distribution of our development projects, or is it the distribution Microsoft wants us to be?

Don't you Git it?

There were several talks on TFS, and zero on any DVCS. Even in the automation open space people don't understand what a DVCS gives you or why you would want to create a personal branch.

I'm more than the code I write

The most interesting talk at Ruby Midwest was one on Open Government. It didn't have anything to do with a language feature or super cool new tool, but with getting government, at all levels, to release data and make useful information out of that data. It was less about the tech and more about doing cool things with the tech. It was fascinating to hear about the open government movement and what they were doing to make the world a better place. I don't think presenting an idea should be left out.

As might have been assumed in my previous post we are transitioning to git and Im tailoring my command prompt to something that suits the way I think and the information I want to see change over time. Right now my prompt gives me several immediate clues:

  • the branch name
  • if the branch is dirty (via red)
  • if there are files being staged (via yellow)
  • what the changes are
    • + adding files
    • ~ changing files
    • - removing files
    • ? untracked files
    • -> renaming files

As I use git more and more, not scenarios arise. The most recent one is what happens if you change a file after you stage it.

 SS-2010.08.06-10.34.45

In this case we staged a and then made more changes. What should the command prompt look like? It is something that is important to me because I might be unaware that there are changes that arent going to be committed. 

But how do you show that? That other symbols Im using are pretty clear. What about this case?

Maybe something like:

d:\temp\foo (master ~1~) >

I kind a like that because it tells me there is one file will only partially be committed. The prompt could get very large but given this case is rare, its unlikely to be that big of a deal.  Those changes made after the stage will not be committed.

I have to admit, this post is going to be lame. I wont be offended if you stop reading now because it is mostly for my own benefit.

Recently we moved our YouTrack server to a publicly accessible server and got it all setup with an URL like http://dev.acme.com. We then wanted to move out TeamCity server to the same box so moved both TeamCity and YouTrack into a Tomcat app server and gave them URLs like dev.acme.com/teamCity and dev.acme.com/youTrack. Sweet. Everything is going great.  We have them talking to each other.

Lets flip them over to talk on only SSL. This wasnt was easy as I hoped. Actually it was super simple, but finding the steps was painful. If you look for how to setup SSL with Tomcat you find a load of articles using tools and certificates we dont have handy. We do have our wild card certificate from IIS that we can export and then the steps are easy.

Sweet. While I was in that file I commented out the Tomcat connector on port 80 so IIS could listen on that port. Im more familiar with IIS and setting up the HTTP to HTTPS redirect was easier for me in IISwhich I did next.

All done. Everything is golden right? It works. It redirects to HTTPS if you request HTTP. Awesomeexcept we cannot attach files. Bummer.

We get asked questions like:

Are you using a proxy?
Please specifiy procy if you are using one, otherwise it is impossible to post the attachment.

Since we are not using a proxy I said no and then got another error message.

Sorry, cannot attach the image.

Luckily this was an easy fix as well. This was a fairly easy issue to find since JetBrains publicly tracks the issues with YouTrack. That was exactly out problem. We had YouTrack setup to listen on http://dev.acme.com/youTrack instead of https://dev.acme.com/youTrack. Switching that in the settings fixed our problem.

We all like color dont we? We also love the command line right? Well, if you dont, you should love it. There is nothing I hate more than seeing a screen full of gray text. You can provide a lot of context via color, especially in your prompt.

Take my git prompt for example.  I easily know if I have any changes in the branch, if Im staging changes and an overview of the changes.

This is done in PowerShell. If youre still using cmd as your shell, you should stop immediately. Especially if you use git. I highly recommend checking out posh-git. Auto-complete on git commands and branch names is awesome.

lso, you can checkout the source for this prompt. Figuring out all the changes takes some time on a large codebase, but for me its worth it.

We have a moderately large WebForms web application, but we are trying to transition to MVC. On the surface it sounds pretty simple. We can create controllers to do small functions of our page. we can be AJAXy if we so desire and all will be great.

Lets give it a try.  We want to add a customer search to our master page.  Simple enough right?

image

All I really need is a controller that redirects to our existing search page.  No problem. Seems simple enough. Let me code up the controller in a simpler, reduced test case.

Done in 15 minutes.

OK. Now we just need to drop a tiny form that posts to our controller on our master pagewait  a minute. WebForms has a HUGE form that takes up the entire page! I cant nest a form inside a form. This means I cant post inside the form to anywhere but the same form.

I know  what youre thinking. I shouldnt post to search anyway. I should get instead. Yes. I agree, but this example is contrived. I actually came across this problem when I wanted to create a controller that merged two customers together and redirect to the surviving customer. In that case we do want to postso bear with my invalid semantics.

Anyway. We cant POST. hmm..I guess we have to do something like this (remember in real life Im merging and not searching"):

[HttpGet] public ActionResult SearchViaGet(string searchTerm, bool isQuickSearch){}

It feels really nasty. What makes it even worse is we have to use Ajax to pull the values from the inputs and build the request URL. If they dont have JavaScript enabledoh well. No search for you!

I cant really think of a way around this. With MVC, and without the giant WebForms form, this page would comprised of several tiny forms. For now, the no JS problem isnt that big of a deal. The app is used by internal users only so if they dont have JS enabled we can just laugh at them until they either turn it on, or we feel bad that they dont know how to turn it on, and turn it on for them.

Where we do have a problem is when we try to use pages like this via our ancient mobile devices. We cant trust JS on those bricks and if I had to bet, there would be no search for them either.