Rory Primrose

Learn from my mistakes, you don't have time to make them yourself

View project on GitHub

CSS/Control Adapters - The word is almost out

I have been developing some control adapters over the last month. Control adapters are really cool stuff for ASP.Net. They allow you to modify the rendering behavior of a control in a way that is independent from the control and the web site code. Scott Guthrie posted about control adapters late last year and again more recently.

One of the greatest uses I have come across for control adapters is for developers to use controls that they are familiar with, such as the intrinsic ASP.Net controls, but modify the html they produce to be more suitable to the application. I am involved in a web project that requires CSS to be used for document layout rather than tables. By using adapters, I can allow the developers to use a FormView control which they are familiar with and the adapter will take over the rendering of that control to ensure that tables are not rendered.

I was going to put out an example of creating adapters, but it looks like the ASP.Net crew might beat me to it. I kind of suspect their solutions might be different to mine so it will be interesting to see what they come out with.

Read More

CodeCampOz 2006

I had a great time at CodeCampOz this year. Geoff (Gringo) Appleby and I drove up together and had a really good chat on the trip.

Of the sessions that I really enjoyed, first up was Windows Workflow Foundation by Dan Green. This was a really good presentation and Dan obviously knows his stuff. Unfortunately there was only so much that could be fit into the hour and WF is a big topic. I’m keen to learn a lot more about this one.

Introduction to WinFS by Chris Hewitt was an interesting glimpse at the next file system to be released. I am looking forward to seeing how this new system goes when it is released. I think the greatest thing that will come out of this database driven file system will be some amazing file searching capabilities. Being database driven, this will no doubt mean many 3rd party searching programs will be developed.

Read More

Rant

This morning I have been reviewing some code that has been checked into TFS based on work items I have created. When reviewing files that have been checked into source control, several times I have seen code commented out (old version of the code), with code added below the commented block (new version of the code).

I never quite understood this particular behaviour. What is the point of leaving commented old/dead code in source control. Isn’t that what source control and commented version entries are for?

Read More

Doing the unexpected constitutes poor design

I just went to a website for a company that a friend now works for. They have included a search engine in their site. Given that I am interested in the contents of this site, I thought I would give the search a go.

No matter what search criteria I enter, I get taken to a FAQ page. So is this a bug in their code, or were there just no results and they assumed that I would figure that out?

This is a great example of poor design. If the user is expecting results, don’t give them something else. If there really are no results, just say so. Don’t take the user somewhere they didn’t ask for.

Here ends the rant.

Read More

Lack of softie unit testing

I have been trying to pull off something very interesting in recent days. I need to hijack the rendering of a DetailsView control so that it renders different html rather than the inbuilt table element structure.

I have mostly pulled this off by using browser files and control adapters to hook into the rendering process at which time I can get the control to render into a custom HtmlTextWriter. This is great because the page developer just needs to use Microsoft’s DetailsView rather than a custom one.

There is a hitch though. In an attempt to allow certain fields to not render in certain DetailsView modes, I need to render additional information into the html which the HtmlTextWriter can pick up so it will know what HTML to ignore and what HTML to render.

Overriding the RenderBeforeTag and RenderAfterTag of the HtmlTextWriter looked like the go. Unfortunately there is a really simple bug in the framework which I can’t do anything about. See here for more info.

Simple unit testing should have picked this one up. This puts a serious road-block in my path.

Read More

Geek vs Nerd

What is the difference between geeks and nerds?

I have heard this one hit around a few times in the last couple of years. If I have to pick one of these for myself, I would say I was a geek rather than a nerd. Nerd just doesn’t seem to fit. Not that I have anything against nerds, but I can’t stand it if someone calls me a nerd. Geek isn’t so bad, but I would prefer not to be called either.

To fit my view of the world, I like to think that geek = nerd + social skills. To counter that, my wife says (in jest) that geek = nerd - intelligence.

What’s your view?

BTW, she also said that putting this question out to the blogging community is a bit of a skewed sample, so you should also ask any non geek/nerds in your life. [:D]

Read More

Finally, a decent training session

I haven’t done much training this year. We were in New Zealand for January, and for the last two months, I have helped with instructing on many of the nights that I would normally train. This has been because I was either a little sick and couldn’t train or other instructors couldn’t make it.

This weekend was the first decent training session that I have had this year. It was fantastic to do a decent workout and practise my patterns and sparring.

I am going to train with the advanced class now which should be really good as I will get more training per week than I have had previously. Really looking forward to it. This should also help me grade the next few levels very quickly as well. I hope to get to ChoDanBo (trial black belt) by the middle of the year.

Read More

I am ACE

It has taken me several weeks to get around to this one. My ACE came in the mail. Very cool, but hard to take a photo of.

Read More

Code conversion pitfalls

After doing four days of training and meetings in Brisbane, I am now back in the office reviewing some code. I had originally developed some web custom controls in VB (the organisations language of choice) that were then put into an architecture framework. This required that the code be converted from VB to C# which is the language of the framework involved. This work was done by another person while I was back in my prior UI design team.

Doing a code review of C# that is based on my VB code has put me in a new situation. Not having done this before, I am trying to think of scenarios that look safe, but are trouble under the surface. Turns out I found one very quickly. In this case, string comparisons are the danger. The VB code often had statements like this:

Read More

Update to Geoff's enum to string converter

When I get some spare time here and there, I am developing a template driven code generator which uses a database schema as a data source. In doing this, I want the templates to specify what type their output is. To support this, I have defined an enum TemplateTypes with the values of TSQL, VisualBasic, CSharp and Unknown. I want to be able to convert the names of the enum values to more friendly values so I can use them in things like the tooltip text of nodes in a treeview. I remembered that Geoff had previously posted about using type converters with enums to achieve this.

To avoid reinventing the wheel, I took his code and ran. What I found though, is that when the enum value name is converted to a nice string, it adds a space each time that it encountered an uppercase character that wasn’t the first character in the name. This means that TSQL was converted to T S Q L. I made minor changes to his EnumToString function so that it only adds a space when it finds that the previous character is lowercase. I also added a conversion of _ to spaces as well.

The function now looks like this:

Read More