# Thursday, 28 April 2005

[Update] Maybe it was just service problems.  I haven’t had any more crashes the last couple of days.  There are still some things in the interface that could have been a lot better, and it overall seems slow response wise.

I updated to the latest Real Rhapsody client, and I must say, I’m a bit disappointed.  I’ve been an avid user for some time, but if they don’t get their player shaped up pretty quick that might change.  I’d have to say the new client BLOWS!  It’s crashed on me 10–15 times in the last two days, often hangs, the UI randomly jumps around or locks up.  The flashy new graphics and the equalizer don’t make up for poor performance.  And the style of the UI is such a blatant iTunes rip-off that it’s nearly distracting. 

Apparently it’s not just me.  I hope they get it straightened out soon.

Thursday, 28 April 2005 13:08:27 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
# Wednesday, 27 April 2005

Just in case you haven’t heard yet, Scott Hanselman and I will be at tonight’s PADNUG meeting rapping about continuous integration and how we do our builds at work.  (That’s probably rapping in the 70’s fireside chat sense, rather than the Eminem kind, but you never know what could happen.)

The meeting’s at:

Portland Community College Auditorium
CAPITAL Center, Room 1508
18640 NW Walker Rd.
Beaverton, OR 97006
Directions

Wednesday, 27 April 2005 11:48:28 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
# Monday, 18 April 2005

I’m doing a little refactoring this week of some code (not authored by me) that involves a WinForms app that drives tests.  I didn’t set up to do any refactoring, but in trying to fix some bugs and add a few simple features, what I’m finding everywhere is

        private void btnTheButton_Click(object sender, System.EventArgs e)

        {

            //all the program logic is here…

        }

Sigh. 

Time and again we see this “pattern” in code.  In order to use that same functionality in the context of a different UI action, I now have to take the time to factor out the program logic into a separate method which can be called from two different locations (as should have been done in the first place). 

Now, in defense of the guilty, WinForms encourages this behavior, which I must admit is my single biggest gripe about WinForms.  Say what you will about MFC, I loved the way MFC’s designers defaulted to the MFC Command/CommandHandler pattern.  Every UI action represented a command, and it was up to the command handler map to decide what method actually handled the command.  Thus, the default pattern made it easy to do things like having a button and a menu item that both fired the same action.  I wish some of that had rubbed off on WinForms instead of the current VB-esque, every-bit-of-code-gets-attached-to-an-UI-element pattern.

However, it’s not just in WinForms that this is a problem.  I found that when I was teaching Web Services using ASP.NET, I ran into the same pattern.  A Web Service should be thought of no differently than a UI.  It’s an external way to make things happen.  So, having all of one’s program logic right in the ASP.NET Web Service code (.asmx) introduces the same problem.  Do yourself (and whoever is going to have to maintain your code in the future) a favor and create separate “code behind” classes for your web service that hold the real logic.  All that should be in your ASP.NET web service code is argument processing and calls into your “code behind”.  A full-blown MVC architecture might be overkill for a web service, but removing your logic from what is essentially your “user-interface” will save many headaches later on down the road.

Monday, 18 April 2005 14:41:58 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [2]  | 
# Thursday, 14 April 2005

Last night I went to a very groovy CERT refresher training at the fire house.  The topic was “Light Search and Rescue”.  What we ended up doing specifically related to extracting people from cars.  They got a towing company to bring over a junker car, and the fire fighters proceeded to pretty much take the car apart.  It was sooooo cool.  If you’re into that kind of thing…

We learned the best way to break out the windows of a car to get access to the people inside, how to get the windshield off, etc.  For the finale, one of the fire fighters used a hand-help, battery powered sawz-all to take the whole top off the car.  Took less than three minutes.  :-) 

The second half of the class was all about knot tying.  There are a truly amazing array of things you can do with a 10’ length of tubular webbing.  Definitely handy to have around.  We learned the water knot, the figure eight (on the end or the bight), the “alpine butterfly”, double fisherman’s, etc.  It was kind of like a whole room full of grownups thrown back into scouting for the evening.  Of course, if I don’t practice, I won’t remember the knots in a week or two.  Time to get a length of rope and start practicing…

Thursday, 14 April 2005 15:58:17 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
# Tuesday, 12 April 2005

My friend Lori turned me on to O’Reilly’s new “Make” magazine this weekend.  Very cool stuff.  I love the current trend towards mainstreaming the hacking of stuff.  You can find similar, although a bit more technical, stuff on the Hack a Day blog. 

I’m dying to try Make’s project for “kite arial photography”.  Basically you build a cradle out of popsicle sticks and pure grit, put a disposable camera in it, and hang it from a kite string.  At some controllable interval after you get it in the air, it releases the shutter on the camera and you get some pretty cool aerial photos. 

There’s also a project for a $15 DIY steady-cam.  Pretty fun stuff, and most of it looks pretty easy to build. 

My son is chomping at the bit to try their electric motor made from a magnet, some wire, two safety pins and a D battery.  Good times.

Tuesday, 12 April 2005 12:48:34 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
# Wednesday, 06 April 2005
G#

I’m a bit late picking up on this, but if you are interested in either code generation, AOP, or both, check out the spec for G#Ernest Booth has come up with a very interesting spec for a new language that extends C# with some built in constructs for doing code generation.  Since these generators are extensible, etc. this provides not only some great opportunities for code gen (which I do a lot of at work) but for what essentially becomes compile time AOP.  I’ve looked a couple of times at the possibilities for doing AOP in .NET, and most of the options haven’t really been satisfactory (mostly involving remoting contexts).  This would provide most of the benefits of AOP, but happen at compile time in a happy, type-safe kinda way. 

I’ll be very interested to see if this spec turns into actual code.

Wednesday, 06 April 2005 10:09:28 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
# Tuesday, 05 April 2005

Someone asked today how to get a list of all the namespace prefixes used in an XML document, along with their associated URIs so that that information could be used to initialize a XmlNamespaceManager.  This works…

        XPathDocument xdoc = new XPathDocument(@"c:\temp\myfile.xml");

        XPathNavigator nav = xdoc.CreateNavigator();

        XPathNodeIterator nodes = (XPathNodeIterator)nav.Evaluate("//namespace::*");

        Hashtable h = new Hashtable();

        while(nodes.MoveNext())

        {

            h[nodes.Current.Name] = nodes.Current.Value;

        }

        foreach(string name in h.Keys)

        {

            WL("{0}:{1}",name,h[name]);

        }

 

You’ll end up with a hashtable with the prefixes as keys and the associated URIs as their values.  You could probably do something even cooler with a unique set datastructure, but the hashtable works in a pinch.

XML
Tuesday, 05 April 2005 16:12:52 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |