June 2005 - Posts

DataSets vs. O/R Mappers

Sam has a very interesting post comparing DataSets and O/R Mappers.  I think he makes a good point that they aren’t really equivalent and shouldn’t be compared against one another.  They serve different purposes and are apporpriate in different application scenarios.  If your follwoing Domain Driven Design then an O/R Mapper is probably more appropriate, and if your a “Database Driven Design” kind of guy the DataSet may be more appropriate.  The important point is just give up on the DataSet and use an O/R Mapper for everything.  Ok, not really, but you had to suspect an OO bigot like myself would try and spin it that way wouldn’t you?

For more information from me on Domain Driven Design checkout my DDD category! and of course for more on O/R Mappers checkout my poorly named Entity Framework category.

Integrating Ruby and Watir with NUnit

Scott Hanselman has been experimenting with Ruby, Watir, and NUnit.  His goal is what all of us web guys are after, a better way to perform unit testing of the web interface.  We have NUnit to test all of our business objects, data acess code, and controller logic but we don’t have any real good options for performing unit testing on the web presentation layer.  Scott developed a WaitrAssert class for integrating Waitr into NUnit which he uses to do all the testing within his application.  Definitely cool stuff…

TDD And Unit Testing isn't Enough

This story, User Profiles and Exploratory Testing, from Jonathan Kohl is a very interesting one.  I often run into people who think that doing test driven development (TDD) and unit testing lessens the need for QA staff to perform their own testing.  If every line of code that is written has a set of unit tests driving it's design then exploratory testing is really just duplicated effort, right?  Not so much.  Test driven development is more of a design practice then a testing one.  It just so happens that we get a bunch of automated tests to back up our designs and tell us when changes in our design cause problems.  There are some issues that automated tests aren't going to catch.  Having a QA staff that is well versed in exploratory testing can help uncover many bugs that the best unit tests in the world will never catch.

Smart Client Offline Data Caching and Synchronization Demos

Brian Noyes has posted his Smart Client Offline Data Caching and Synchronisation Demos which he gave at TechEd.  If you're like me an have a new found interest in smart clients, data caching, and synchronisation you may want to check them out!

Windows Forms here I come

For the past 5+ years I’ve been doing web related work.  Over the year or two I’ve had a desire to find an opportunity that would allow me to get into the WinForms world.  That opportunity has just recently presented itself.  It’s going to be fun to learn the world of WinForms.  Does anyone have any must have book recommendations for a web guy moving over to WinForms?  Is this (Windows Forms Programming in C#) all I need?  What other must have WinForms books are out there?

Great series of Agile posts

David Hayden has been posting a ton of great content over on his blog (or should I say blogs).  He’s currently posting a series of posts on Agile Software Development, Principles, Practices, and Patterns which is one of my favorite books.  He also has a number of posts on design patterns which is top notch.

Tagging Support in a CMS and Blog engine

Yesterday I was checking out the beta of Technorati and it got me thinking about the role of tagging in a content management system and/or blog engine.  It seems like it would be a very useful feature to include for allowing authors to assign relevant categories that could be used in numerous ways within the application.  If tagging became a part of all the interactions within the engine it could lead to a system that could provide developers with a very interesting way to pull out all sorts of interesting information from the system that would otherwise have to be explicitly coded in.

For blogging systems I love the idea that Technorati has implemented in their beta.  If you do a tag search for something like “Star Wars” they load the 3 most recent posts tagged “Star Wars”, the top 20 posts for the keyword match.  They also show a list of photos from Flickr that match the tag as well as links from Furl and delicious that have the same tag.  Interesting stuff.

From a content management perspective it seems like tagging could be a valuable feature to implement into the core of a system.  One of the things that I often run into within CMS systems is the inability to setup relationships and links between “items” in the system.  By making tagging a core concept within a content management system you could open up a lot of possibilities when it comes to building interesting relationships among content items within the system.

Tagging seems to be showing up all over the web lately, is tagging within content management systems the next logical step?

Still a Number of Bugs to Work Out!

I've uncovered several bugs/issues with my current RSS feed that I'll be fixing shortly.  I apologize to those of you who have followed to my new home only to be provided a crappy feed.  One of the reasons I moved was so that I could ensure things were working the way I wanted.  And frankly the way I want things working is the way you want things working.  So let me know if there's anything annoying, frustrating, or broken with my new blog and feed!

Currently on the list are:

- Update the feed to be formatted properly so all readers get the full article text in the feed.  This was working but I screwed it up as I was updating the feed to include comments.  Sorry about that, it will be fixed shortly.
- For some strange reason the dc:creator element isn't being populated which means that my posts are showing up as "Anonymous" in some readers. 

Anything else?

Thanks for you're patience, I promise I'll have this all worked out soon!

UPDATE: Both the items listed here have been resolved, let me know if there’s anything else!

Designer CMS on Rails

Dan Rubin, of superflousbanter fame, is looking to create a Designer CMS on Rails.  I would have loved it if he said he was looking to create a Designer CMS on .NET .  My goals for ActiveType are very much inline with what he outlined in his post.

  • Easy to incorporate into existing projects
  • Easy to integrate with new projects
  • Easy to tweak without being a programmer
  • Easy to use (for designers, developers and clients)

I still have a ways to go before I get there but I think I'm making progress.  I recently had a designer create a new UI for the CMS Administrative interface (screenshots coming soon) which should make the overall experience of working the ActiveType much better for content contributors.  My overall goal is to allow most users to do 99% of the tasks required for managing their site directly through the in-context toolbars and menus.  More advanced tweaks to the system will still require launching the administration interface, but, the majority of users should be able to just browse to the page or folder they want to update and use the editor toolbar to quickly incorporate their changes into the site.

If Dan get's any traction with his Rails powered CMS I'll be sure to check it out for inspiration!

 

How to make a million dollars

Marhsall Brain has posted a talk that he presented at Duke University on How to Make a Million Dollars.  Within the talk he presented several ways to make a million dollars.  His key point was that you need to create a business in order to have a chance at making a million dollars (unless you have $5/day and 42 years to spare).  Very interesting read.  I was most interested in some of the book recommendations he had, as I've already read and/or heard the same basic points from many other people.  If you're interested in making a million bucks just go to the site, within minutes you'll be on you're way.  Ok, yeah, I'm lying.  There is some interesting stuff though

  • Rich dad, poor dad, by Robert T. Kiyosaki - A perfect book for getting you head in the right spot to start a business.

  • The automatic millionaire, by David bach - Teaches you how to manage your finances. A basic guide to "saving $5 a day to become a millionaire in the future." See also Understanding and controlling your finances.

  • The one minute millionaire, by Victor Mark Hansen - a little over the top, but encourages you to think differently about starting companies and building wealth.

  • How to be a billionaire, by Martin Fridson - Really makes you look at the world differently.

  • The Warren Buffet Way, by Robert Hagstrom - Not light reading, but helps you see how one of the richest men in the world thinks about the business world.
  • Never Eat Alone, by Keith Ferrazzi - Helps you to think about business relationships differently.
  • The Sam Walton Story, by Austin Teutsch - Tells how Sam Walton went from being a guy with one little store in Arkansas to the richest man in the world.
  • Dave's Way, by David Thomas - The story of Dave Thomas, the founder of Wendy's. He started as an orphan bussing tables in a restaurant, and he went on to create an empire.
  • Built from scratch - the subtitle says it all: "How a Couple of Regular Guys Grew The Home Depot from Nothing to $30 Billion"
  • Nuts!, by Kevin Freiberg - The story of Southwest Airlines.
  • Be my guest, by Conrad Hilton - The story of Hilton Hotels.

Get small. Think big.

This morning I came across an interesting "article" entitled, "Small is the new big" (via microsISV) written by Seth Godin (rss). 

Small means the founder makes a far greater percentage of the customer interactions. Small means the founder is close to the decisions that matter and can make them, quickly.

Small is the new big because small gives you the flexibility to change the business model when your competition changes theirs.

Small means you can tell the truth on your blog.

Small means that you can answer email from your customers.

Small means that you will outsource the boring, low-impact stuff like manufacturing and shipping and billing and packing to others, while you keep the power because you invent the remarkable and tell stories to people who want to hear them.

I think he sums it up perfectly with...."Get small.  Think big." 

Impressions of VS.NET 2005

As I mentioned in my "welcome to my blog" post I've been busy upgrading the software that powers this blog to .NET 2.0.  As a result of this I've had the pleasure of working in VS.NET 2005 for the past several weeks. 

Highlights:

  • Generics - I'm a big fan of generics.  I haven't completely converted the code base, ok I haven't even come close to converting the codebase to take full advantage of Generics but I'm definitely looking forward to getting rid of all the custom collections I have.  Predicates, Actions, Comparison's as well as Converter's are a "way cool" feature that I'll be looking forward to using as I continue the migration of my code to 2.0.
  • MasterPages - Overall I'm a fan of MasterPages.  They aren't that new of a concept to me since I checked out Paul Wilson's 1.1 version of MasterPages a while back.  Regardless, developing templates with MasterPages is an improvement over everything I've tried previously.
  • Intellisense in ASPX - I'm personally a fan of the code-behind model, however, the templates within this CMS have code inline so that it's easy to plug in new templates.  Since the software supports multiple websites running off a single instance of the software I wanted a way to make it relatively painless for people to create new templates.  Requiring a rebuild and re-deployment of a .dll didn't seem to fit the bill so I decided to have my templates use in-line code for binding data to the various controls.  In VS.NET 2003 I always hated updating the templates because I wasn't really sure if things were "right".  Within 2005, and the support of intellisense, the overall development experience for creating templates is much nicer.
  • Partial Classes - I haven't actually taken advantage of this feature as of yet, however, I'm looking forward to leveraging it as I continue the upgrade to .NET 2.0.  A lot of the business objects used by ActiveType (aka the software that powers this site) are generated via CodeSmith.  I've tried a couple different methods for managing these generated files such as creating a "Base" that my "real" object inherits from, however, nothing seems as clean as partial classes.  I haven't looked into the addin support for VS.NET 2005 as of yet but I'm hoping they've exposed the ability to make files dependent on one another via the DependsOn attribute in csproj files.  I'd really like my custom objects to have the generated files appear underneath them like a code behind file appears underneath it's associated aspx.  Anyone know if this is possible in VS.NET 2005?

Lowlights:
Not all of my experiences with VS.NET 2005 have been positive. 

  • SQL Server Tools - I'm not a big fan of the new SQL Server tools that we get integrated into VS.NET 2005.  The table design tools with the funky property grid at the bottom isn't as straight-forward as the tools in 2003.  I don't like the fact that the double click behaviour has been changed.  Previously double clicking opened up the table and displayed the data, now we're presented the design via a la Enterprise Manager.
  • Poor Database Project Support - For all my .NET project I have a database project that I use to manage tables, stored procedures, views, functions, and etc.  In previous versions of VS.NET I was always able to manage the scripts in an intuitive way.  I could right click on a set of objects and say "Generate Create Script...".  Each object that I had selected would have a separate create script created that would be added to my database project.  In 2005 all the database objects selected have a create script created and placed in a single file.  How am I supposed to manage individual object changes if they're all added to a single file.  As far as I can tell the only way to get the behaviour that I desire is to go to every database object individually and click "Generate Create Script...".  No thanks, how bout an option to pick how the scripts for database project are generated.  Disclaimer: I haven't really looked to deep in VS.NET 2005 to see if I have the capability to change this behaviour.  If anyone reading this knows how to change it back to the behaviour in 2003, please let me know!
  • Refactoring is Sloooooowwwww!  - I might just be spoiled by the refactoring support in ReSharper, but, the 2005 refactorings seem flat out unusable.  When I right click a method, or class to rename it I end up with a dialog window that slowly climbs from 0% to 100% as it analyses the various files in the 10+ projects I have in my solution.  I can't wait for the JetBrains guys to get a version of ReSharper EAP 2.0 out for 2005!
  • Vault Integration is Slooooowwww! - I'm not sure who to blame this one on.  In one sense I guess I should be happy that Vault "just worked" when I installed 2005, but on the other end it seems that it's slowed down dramatically.  It's to the point that I'm considering switching back to Subversion (I tried a while ago but missed the nice IDE integration).

So that's my list.  What's you're favourite new feature in VS.NET 2005?  What would you change if you were at the reigns?

With the 1st day of a new blog, comes the 1st bug

There's something wonderful about dogfooding you're own software.  Last night as I finished the final move over to the new host I felt confident that I had found all the obvious issues that could arise.  Well thanks to Dave Burke I realized that wasn't the case.  Not only was it a bug, but it was a bug in the RSS feed which may have prevented some folks from subscribing to my new feed .  Great way to start a new blog eh!  Anyway the problem should be fixed now, so if you tried to subscribe before but couldn't please try again.

Welcome to my new blog!

Finally!  I’ve been contemplating a blog move for a long time and am relieved that I’ve finally made the leap.  Please update you’re subscriptions to include my new RSS feed.

Add to MyMSN Add to MyYahoo Add to Bloglines Add to Newsgator

Why did you move?
Why not?  I’ve had a lot of problems over at my current blog on dotnetjunkies.com.  I’ve had to deal with the phantom SqlParameter .Text errors, as well as abundant amounts of comment spam.  I was pretty patient in hopes that a fix would be applied.  When it became apparent that things weren’t going to change for the better I started considering different options.  The choice had to be made to either move to another group blog or go out on my own.  In the end I decided to go out on my own.  Hopefully my 2 readers (which is me, and my alter ego “George”) will find me at my new home!

Why did you decide to go on you’re own site?
The main reason is that I wanted to host my blog where I would have ultimate control.  The ability to experiment with different functionality and features was a major reason for the decision.  I also wanted to “dogfood” the CMS software that I’ve been working on (more below). 

What is this CMS Software you speak of, this looks like Community Server?!?!
Although this looks an awful lot like Community Server it is actually a very early alpha of “ActiveType”.  ActiveType is a .NET content management system written in C#, ASP.NET, and SQL Server. The alpha version that is currently powering this blog has been upgraded to .NET 2.0.  I’ll be talking more about ActiveType in future posts so won’t dive into too much detail here.

So back to the Community Server look to the blog.  When I was working on some modifications to the CMS to support blogging I wanted the ability to use some of the blog skins that were already available for other blog engines (such as Community Server).  I dropped Jaxon Rice (who developed the skins) an email to see if they were allowed to be used in other applications and he confirmed that they were meant for anyone to use!

What changes should I expect now that you’re out on you’re own?
First off you should expect a decent amount of new content in the coming weeks.  I’ve been busy updating ActiveType to support blogging, as well as busy creating conversion utilities to move all my content over to my new blog (excluding entries that didn’t make sense to move).  I’ve managed to get all the content that I wanted over here, and even updated the internal links to posts to use the new URL’s on this blog.  Since I’m on my own I’m going to force myself to write content that people other then myself might be interested in, since I no longer have the luxury of being in a group feed such as DNJ that lots of people subscribe to.

Anyway, to sum up, I’m excited about the fresh start!

 

Lucene powers SourceForge.NET Search

I came across a very interesting post today that gives a look “Behind the Scenes of the SourceForge.net Search System.”  I’ve begun working with DotLucene to implement search on this site and so far have been impressed.  As you can tell by the fact that there isn’t actually a search feature here I’m still working out some details of how many pieces of the search will work.  Anyway the point is, Lucene is cool, DotLucene [1] is cooler….check it out.

 

This is a great book for learning the details of Lucene

[1] This is simply because it’s .NET, Apache Lucene in actuality is probably the cooler of the two since it’s more mature, has Doug Cutting working on it, and since it drives pretty much all development effort  s within DotLucene (I’m assuming).

 

 

Encytemedia redesigns ActiveType (CMS)

As I’ve mentioned a couple times on this blog I’m currently working on a .NET content management system.  I’m targeting a release sometime around when .NET 2.0 releases, however, I’m hoping to have some beta releases in the next couple of months.

ActiveType Dashboard

As I was evaluating the CMS a couple months back I was less then pleased with the UI of the administrative interface.  I had done the “design” myself and beings that I’m not a designer it wasn’t good.  I began looking around for designer/developers who could assist with a redesign of the interface.  When it came down to it I decided to go with Justin Palmer of Encytemedia.  I actually came across Justin’s site as I was doing some investigation of Ruby on Rails.  He developed a template for Typo (RoR blog engine) which I liked so I dropped him an email to see if he’d be interested.

 ActiveType List View

As you can see by the title of this post Justin was interested so we got started.  The major goals of the project where to create a new fresh, clean UI for the administrative interface of the CMS, as well as to create a standards based design that would make the application viewable in all major browsers.

ActiveType File View

The results can be seen in the screenshots in this post, as well as within Justin’s writeup of the project.

ActiveType Redesign

I’ll be making available a demo of the application in the next couple weeks and will begin a beta period shortly after that.  If you’re interested in getting an early peak at ActiveType leave a comment here and I’ll be sure to contact you when things are ready to roll.

Read more details on Justin’s blog

RSS and Attention

And that's what I'm asking you to blog about (or, if you don't have a blog, comment here). If you believe that you should own your attention data, now is the time to sound off about it. You don't need to link to me or even mention me in your blog - just make sure to include "RSS and Attention" in your entry's title so that everyone who pays attention to this subject (ie: Microsoft, Google, myself, etc.) can find you. I'm taking Microsoft at their word that they'll listen to the conversation while designing their RSS support, so let's test them on this.
Nick Bradbury

I’m 100% with Nick on this, I believe we should most definitely own our attention data.  As Nick points out in his post the data is ours so we should “own it”.  

The Observer Pattern

Dave Burke has posted about the Observer pattern and it’s use within Smart Client applications (specifically IssueVision).  It sounds like Dave is working on a lot of interesting Smart Client “stuff” which I’m looking forward to hearing more about.  If you haven’t already you should create you’re own custom Observer object and hook it up to Dave’s blog so you can be notified when his “subject” changes.  (That was bad wasn’t it! )

Composite UI Application Block

I recently came across Peter’s post on the second code drop of the Composite UI Application Block.  Since I wasn’t even aware of the project the fact that it was the second drop wasn’t all that important but the fact that there was actually code was.  From the sounds of it this block is going to be one that I’ll be very interested in.

Are you considering a Smart Client approach to address the challenges of building Line of Business solutions that interact with many backend systems? Ever wondered what would the architecture and design of a complex UI would look like? Do you need to abstract the "plumbing" of such client applications so your business developers can focus their attention on building the business specific components rather than dealing with complex issues like threading, asynchronous requests, etc.? The Composite UI Application Block (CAB) could be a good candidate. CAB is a guidance asset (an application block) based on .NET 2.0. It’s intended to provide proven practices to build complex UIs based on simpler “parts” (SmartParts as we call them, “WinParts” in other architectures). This is a recurrent pattern implemented in many well known examples.

edjez’s WebLog seems to be a great place for getting the scoop on CAB. 

If you’re interested checkout the Composite UI Application Block on the Patterns & Practices GotDotNet Community site.

New Build

I just installed the latest build of ActiveType which probably caused a bunch of already read items to appear in you’re aggregator as new, my apologies!  I had a couple problems with my feed that needed to be fixed.  In case you’re wondering what’s new with this build here’s a couple things that you might notice:

  • Clicking on an item in you’re aggregator will actually take you to the post as opposed to the homepage.  The link’s for most of the items in my RSS feed were pointing at the wrong location.  Basically they weren’t including the category in the URL.  This was due to me passing in the root channel to the GetUrl() method.
  • Comment RSS feeds are working for all items.  This was actually due to the error above.  I kept wondering why the comments were showing up for some items in my feed but not others.  Of course rather then immediately assuming my feed was screwed up I assumed something was fishy with the aggregator I was testing with.  Great thinking me!  Not
  • Comments now support line breaks.  The previous template for comments wasn’t handling line breaks properly, this has been fixed.
  • A new Administration UI.  I’ve finished round one of updates to the administration UI.  I still need to do a second pass through to clean things up and add productivity enhancements were appropriate.  I also need to do another pass to ensure I’ve handled most of the items covered in Defensive Design for the Web.

 

NUnit to Team System Converter

James Newkirk has released a beta version of his NUnit to VS2005 Team System converter. For those of us who want to try out (or convert to) Team System but have a lot of existing projects with unit tests in NUnit this tool will be very valuable. From the sounds of it there is still a bit of work to do to make the conversion more automated but it you want to give it an early look at provide feedback to James go grab the current version from GotDotNet.

What's new in WSE 3.0

With my move to Smart Clients I’m also going to be focusing a bit on WSE.  I’m not sure how much, or if, we’ll actually make use of it at this point but in the mean time I’m going to be ramping up to ensure I have all the information necessary to make an informed decision.  I’m also going to be creating a set of services for ActiveType which will make use of WSE 3.0.  Mark Fussell’s article on “What’s new in Web Service Enhancements 3.0” looks to provide a lot of the details that I was interested in regarding the 3.0 release.

Indigo Ascend Training By Mitch Denny

Mitch Denny posted a review of “day one” of Indigo Ascend Training.  It has a lot of good information about Indigo for those looking to get up to speed.  I’ve downloaded the Indigo bits but still haven’t gotten to build anything as I’ve been pretty busy with other projects so his review was was very helpful.

Update: Day Two and Day Three have been posted for your viewing pleasure.  Thanks Mitch!

Nice Javascript Libraries

One of the things that I like about ruby on rails and the products that 37signals put out is the nice use of Ajax / javascript.  I’m going to be identifying areas that I can make use of some of this functionality within ActiveType in the next couple weeks.  Meanwhile if you’re interested checkout these libraries.

http://prototype.conio.net/

http://script.aculo.us/

Does Smart Client == DataSets

As I’ve mentioned in several of my previous posts I’m starting to dive into Smart Clients.  I’ve been reviewing a lot of the sample Smart Client application that are available from Microsoft, as well as ones that are described in the various Smart Client Articles available online.

One of the things that has jumped out the most during my exploration is the wonderful DataSet!  I have to admit I’m a bit of an object bigot which is likely why the fact that EVERYTHING uses a DataSet is so glaring to me.  I always looked at Smart Clients as being a WinForms application that uses Web Services for communicating with the “backend” to retrieve data.  Because of this I expected to run into some sample applications that used XSD to define the requests and responses, as well as the “business objects” (really just DTO’s).  I was definitely mistaken in assuming I’d run into such a sample application.

I think using DataSet’s makes sense in a Smart Client since they are the best built in .NET “feature” for supporting disconnected “modes” within an application.  Since they can be serialized to XML and stored within Isolated Storage they’re a great candidate for working with data in a disconnected fashion.  They also have DiffGram support that allows changed data to be sent back to the data store.  What I’m wondering is do they really work great for EVERYONE?  Isn’t there someone out there who didn’t like using DataSets?  I guess some of this might be my ignorance and general dislike for the DataSet.  It’s a shame really, the DataSet never really did or said anything to make me dislike him.  He just existed in all his bloated glory.  Poor guy, I should probably cut him some slack….or not?

Anywho, has anyone out there created a Smart Client that DOES NOT use DataSets?  If so why did you make that decision?  How did it work out?  Dave, any luck with you’re distributed application using Wilson OR Mapper?

 

 

Fiddler - Http Debugging

I found a link to Fiddler a while back and immediately was hooked.  It’s great for HTTP Debugging.  If you haven’t used it go check it out now.

Although I usually use it just to view what HTTP traffic is going out it can also be used to improve performance by identifying items that could be “cached”.  To learn more checkout Fiddler PowerToy – Part 2: HTTP Performance.

Content Management System & O/R Mapper == pure joy!

As you might know by now I’m in the process of creating a .NET content management system that is going to target .NET 2.0.  I have a large portion of the functionality complete and have been doing some reviews of the application to identify areas that I should focus on.  One of the things that I’ve been considering is swapping out my custom “Entity Framework” for one of the more popular O/R Mappers that are out there.  This would have a couple benefits:

1) People customizing the CMS would be able to learn something that would be useful in other projects as opposed to learning my custom framework which would be helpful in nothing else.

2) By leveraging an existing O/R Mapper I should be able to add additional features and functionality to the application since the other mappers are more feature rich.

3) Individuals who are familiar with the O/R Mapper may be more likely to go with a CMS that uses the mapper, maybe?

4) I get to focus less on the mapper and more on the features and functionality of the CMS.

There are of course some disadvantages:

1) Time required to migrate the code from my existing mapper would take away from other things.  There is also some functionality within my core framework that leverages the existing framework for UI Mapping, Business Object Validation, and etc that would need to be ported over to support the new mapper.

2) Relying on another mapper increases risk slightly since I’m now reliant on a mapper which I don’t “control”.

What advantages and disadvantages do you see?  Do you like the idea of having a .NET Content Management System (CMS) that is built on top of one of the more popular O/R Mappers out there?  If you could choose what mapper which one would it be?

Make a case for .NET 2.0

So you’re about to start on the development of a pretty significant sized Smart Client application, do you use .NET 2.0 or stick with .NET 1.1?  What arguments do you use to convince you’re boss that going with .NET 2.0 is the way to go?  What drawbacks do you see with going with 2.0?

The release cycle for the initial version is likely 9–12 months, and the anticipated clients tend to be on the conservative side when it comes to rolling out new technology.

What do you do?

Update: Here are some of the new features Microsoft is touting, and some more on windowsforms.net.

TechEd Webcasts

For those of us that didn’t make it to TechEd we have the TechEd 2005 Webcast Series.  Of particular interest are the Smart Client Development Webcasts!

Where do you place [Attributes] in your code?

I was reviewing the code base for FlexWiki today as it’s been a while since I checked out the application.  I quickly was drawn to the unit tests and couldn’t help but notice the coding convention they used for attributes. 

[TestFixture] public class CachingTests : WikiTests {
 ….
}

I’ve always put attributes above the item to which they apply such as:

[TestFixture]
public class CachingTests : WikiTests {
 ….
}

In my opinion it’s makes the code more readable and easier to extend with additional attributes.

[TestFixture, MyCustomAttribute, AnotherCustomAttribute]
public class CachingTests : WikiTests {
 ….
}

Where do you place attributes?

Ajax.NET Open Sourced!

I have been thinking about using Ajax.NET within ActiveType (CMS) to provide a richer experience for content administrators and authors.  One of my major concerns with using it was that it wasn’t open source and thus I could end up in a tough spot if I ran into any unexpected behaviour.  Those concerns are no longer valid as Ajax.NET has been open sourced!

Recent Book Purchases

 Defensive Design for the Web : How to improve error messages, help, forms, and other crisis points (Voices That Matter)  Web Standards Solutions: The Markup and Style Handbook (Pioneering Series)

I ordered the Defensive Design book because I really dig the work that the authors are doing over at 37signals.  Since Amazon bundled the Web Standards Solutions I decided to pick that one up as well. 

  Oracle Database 10g PL/SQL Programming  Pro .NET 2.0 Windows Forms and Custom Controls in C#

As you may know by know I’m going to be heading in a new direction with my development, these books on Oracle 10g and Windows Forms 2.0 should aid in that transition.  As you can see I’m being optimistic that we’ll be going the 2.0 route.  I am of course covering myself by working my way through Windows Forms Programming in C# as well.  So much to read so little time.

Can a Scrum Master be a Product Owner?

Today a colleague asked me “Can the Scrum Master and Product Owner role be filled by one person?”.  My initial reaction was a resounding NO.  However, as we talked it over it seemed like it could be possible, assuming the right person was available to fill that role.  Let’s take a look at what each role is responsible for:

Scrum Master (via Mountain Goat):

The Scrum Master is responsible for making sure a Scrum team lives by the values and practices of Scrum. The Scrum Master protects the team by making sure they do not overcommit themselves to what they can achieve during a sprint.

The Scrum Master facilitates the Daily Scrum Meeting and becomes responsible for removing any obstacles that are brought up by the team during those meetings.

The Scrum Master role is typically filled by a Project Manager or a Technical Team Leader

Product Owner (via Mountain Goat):

The Product Owner (typically someone from a Marketing role or a key user in internal development) prioritizes the Product Backlog.

The Scrum Team looks at the prioritized Product Backlog and slices off the top priority items and commits to completing them during a Sprint. These items become the Sprint Backlog.

In return for their commitment to completing the selected tasks (which, by definition, are the most important to the Product Owner), the Product Owner commits that he or she will not throw new requirements (Sprint Backlog items) at the team during the sprint. Requirements are allowed to change (and change is encouraged) but only outside the sprint. Once the team starts on a sprint it remains maniacally focused on the goal of that sprint.

Ok, so the Scrum Master is responsible for:

  • Ensuring the team lives by values and practices of Scrum
  • Protects the team by making sure they don’t overcommit
  • Facilitates the daily scrum
  • Is responsible for removing any obstacles that come out of the daily scrum

And the Product Owner is responsible for:

  • Prioritizing the product backlog
  • Commits to not throw new requirements at the team during a sprint

Assuming a single person is able to fill both of these roles by not mixing and matching it seems feasible that they could be done by a single person if absolutely required.  Ideally I would still keep the roles separate since I think it’s difficult to find someone who is able to fill both roles.  The Scrum Master should be focusing on the current sprint, with some visibility into what may come in future sprints, while the product owner should always be looking at the product backlog and continuously evaluating what is the highest priority.  Since the Scrum Master has a lot of insight into the development cycle and has close interactions with the Sprint Team it may be difficult for the Scrum Master to switch hats and objectively evaluate what features from the backlog are the highest priority. 

What do you think, can a single person fill the role of Product Owner AND Scrum Master?

Scott's 2005 Ultimate Tools List

Just check it out.

Steve Jobs...."You've got to find what you love"

I saw a couple people post about Steve Jobs commencement speech to the graduates at Standford so I figured it might be worth the read.  I recommend you check it out as well, there are lots of good go-get-em type quotes in there…

Again, you can't connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something - your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life.

 

Sometimes life hits you in the head with a brick. Don't lose faith. I'm convinced that the only thing that kept me going was that I loved what I did. You've got to find what you love. And that is as true for your work as it is for your lovers. Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle. As with all matters of the heart, you'll know when you find it. And, like any great relationship, it just gets better and better as the years roll on. So keep looking until you find it. Don't settle.

 

Your time is limited, so don't waste it living someone else's life. Don't be trapped by dogma - which is living with the results of other people's thinking. Don't let the noise of other's opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.

Stay Hungry. Stay Foolish.

If Attributes are good enough for Indigo why aren't they good enough for O/R Mappers?

I’ve recently been reviewing the code for my Entity Framework (simple O/R Mapping, Entity validation, etc) to determine if I should consider swapping out the O/R Mapping for something else such as NHibernate, NPersist, Wilson OR Mapper, etc.  The reason I’ve been considering this is that swapping out the O/R Mapping functionality within my Entity Framework with one of the more widely used frameworks may make it easier for people to extend ActiveType (CMS) for their unique needs.

As part of my review I was investigating the differences in functionality between the other O/R Mappers out there and the lightweight O/R mapper I’ve developed in my base Entity Framework.  There are a lot of obvious differences, but, as you might be able to tell from the title of this post I’m going to focus on how the mapping is configured in the various O/R Mappers.  Most O/R Mapping products out there today have the mapping of objects to database tables defined in an external configuration file.  There are some (mine included) that define the mapping within the classes themselves via custom attributes. 

I’ve recently been reading up on Indigo and as I’ve worked through all the code samples I couldn’t help but notice their extensive use of attributes.  Although O/R Mapping and Indigo are clearly not one in the same I can’t help but notice the obvious similarities.  I can’t help but think there are others that agree:

One last point, [DataContract] is just not an "Indigo" feature -- it is a feature for the entire .Net Framework.

Thinking about it in only Web services terms doesn't do justice to the host of important scenarios that it addresses elsewhere (version-tolerate persistence for any CLR type in any store).

We are defining a common abstract data model for CLR types for N scenarios -- many of which are Web service related.

http://www.douglasp.com/PermaLink.aspx?guid=01095547-b7f1-4e1d-8c4e-31038296f164

If [DataContract] is not just an Indigo feature but a feature for the entire .NET Framework then why couldn’t it become the center point for an O/R Mapping engine?  And if attributes are good enough for defining [ServiceContract], [OperationContract], and [DataContract] why couldn't it also be good enough for defining details to be used by a persistence engine?

Stop Promoting Sr. Developers to Management

James Shaw posted a great little side track in his “Indexes Schmindexes” post.

<sidetrack>
HELLO! Stop promoting senior developers to management. Why does everybody think that's a good idea?

Most excellent developers are borderline insane. They are certainly unsociable. Did you not KNOW you had Aspergers Syndrome? Trust me, I didn't think so either, but there's a test out there and I scored on the wrong side of the Aspergers line.

My point is, don't perpetuate Peter's Principle. By all means promote developers by paying them more, adding Senior/Chief/Architect to their job title, but don't make them manage people, please.
</sidetrack>

Agreed!

Coding Frenzy take 2 means good things for FeedDemon customers

Nick Bradbury posts again about his second codin' fool episode in the last couple weeks.  I'm really looking forward to the next version of FeedDemon.  Better integration with Newsgator, River of News, and possibly the "classic folder based UI" that we're so used to in our other aggregators.