Wednesday, November 12, 2003

Sigh. 

Where to start?  I was disappointed in the new Matrix movie, which while not surprising, is still disappointing. :-) 

At least it wasn’t bogged down in the overly complex, pretentious philosophizing of the second film.  Instead, it was bogged down by a completely predictable plot, and constant sentimentality.  It’s almost as if the characters, aware that this is their last film, are sad about it (to the point of being maudlin) throughout the whole film.  Or maybe the actors themselves were sad because now they’ll have to get real jobs.  Anyway, I think I almost liked the pretentious philosophy better than the maudlin sentimentality.  I don’t want to spoil the ending for anyone who hasn’t seen it yet, but they way the last scene was filmed reminds me a lot of the last scene in the old BBC production of A Hitchhiker’s Guide to the Galaxy.  Not what I would have anticipated for the third film of a trilogy known for wild action and innovative science fiction.  But I guess those days are gone.  While the first film was startling, the third film was pretty much just a war movie, and for a war movie to be any good, it’s got to be something different.  It wasn’t.  At least IMHO.

It sounds like Rory had more fun clubbing baby seals

 | 
Wednesday, November 12, 2003 9:35:16 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Saturday, November 08, 2003

I’d have to agree with Clemens that one of the coolest parts of .Net is custom attributes.  I’m constantly amazed at how much you can achieve through the judicious use of attributes.  Best of all, since they are much like attributes (should be) in XML, you can carry them over from one to the other.  For example, you can add some extra attributes to an XML Schema document in the namespace of your choice, then (if you want to write your own xsd.exe) you can carry those attributes forward into your .Net classes.  Based on those custom attributes, you can apply aspects to your objects at runtime, and basically make the world a better place.  

When all that work is finished, you can influence the behavior of your data objects at runtime just be tweaking the schema that defines them.  At the same time, since you’re starting with schema, you get lots of fun things for free, like XmlSerializer and other bits of .Netty goodness.  

I’m a bit to excited to go into all the details right now, but suffice it to say the prospects for code generation, attributes and aspects are pretty amazing.  Once we get the work out of the way, the rest is just business logic.  More business, less work. 

Say it as a mantra: “more business, less work  more business, less work…..”.  

 | 
Saturday, November 08, 2003 4:37:38 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 

This week, Corillian (my employer) sponsored a programming contest for employees.  What I thought was one of the coolest parts was that non-technical people were encouraged to join teams (of 2-4) to solve the programming problem by contributing their problem solving skills.  

Since the contest is over (although the results haven’t been announced yet) I can let the cat out of the bag.  It was a word search.  Given a dictionary of words, and a rectangular array of characters, find all the words from the dictionary that exist in the puzzle, in any direction.  

It was a total blast.  I was on a team with some folks I know from STEP, Dr. Tom (a real live doctor of computer science), and Darin (a hardcore ATL head) and Don (a QA engineer).  Much fun was had by all.  I haven’t had such pure geek fun in a long time.  I woke up the next morning still thinking about potential optimizations to our solution (which ended up being in C#).  I got to work to find email from Dr. Tom with some more suggestions. 

I thought it was a really great idea to get people thinking about hardcore programming problems, involve non-technical people, and just have a lot of fun coding.  I’ll be really interested to see all the solutions after the judging is complete.  

Kudos to Scott and Chris for coming up with the problem and the reference implementation.  

Saturday, November 08, 2003 4:22:55 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 

Unfortunately, I’ve yet to have the opportunity to meet Rory in person, although he was one of the brave souls who actually staid to listen to me speak at the Applied XML Dev Con this year.  I’m hoping to catch up with him if I ever make it to one of the Portland Nerd dinners.  That desire was fueled by the fact that, like Don, I think his take on the PDC is one of the funniest things I have every read.  I mean ever.  In my life.  Really. 

Running a close second is his jubilation at being mentioned on Don Box’s blog.  Luckily I was already sitting down when I read it. :-)

Saturday, November 08, 2003 4:02:25 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Thursday, October 30, 2003

As of tomorrow, I’ll be starting a new adventure as an employee of Corillian Corporation.  I’m looking forward to new challenges, and learning all about the world of online financial services.  There are some very smart people working there, including Scott Hanselman, and many other people I worked with back in the day at STEP Technology.  

So even if I didn’t get to go to the PDC (I’m still moping), at least I’ll get to do some really cool coding. :-)

 

 | 
Friday, October 31, 2003 5:09:42 AM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
 Wednesday, October 29, 2003

Hooray for declarative programming!  Let’s do more business and less work.  Whether it’s the BizTalk server orchestration designer (the new Jupiter one TOTALLY rocks!) or XSLT, or possibly best of all, Avalon, it just makes sense. 

As Scott mentions, I’ve done some declarative UI with SVG, and I’m a big fan of XForms, if and when we ever see a mainstream implementation.  But I’d have to agree that Avalon is sheer genius.  There’s no reason why to write the code for most of the UI we do now, and since it sounds like the same XAML will work for both the web and for Longhorn client apps, better still. 

It doesn’t hurt that, as Rory mentions, Avalon is just beautiful. 

Wednesday, October 29, 2003 8:58:15 PM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 

I love the new features in dasBlog 1.4.  The extra statistics are very handy, and it couldn’t be much easier to use.  Best of all, between the source and all the samples, it was a snap for me to migrate my existing content.  If I were in LA :’( I’d thank Clemens with beer!

Wednesday, October 29, 2003 8:48:58 PM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 

Only days ago I mused that it would be nice to have more control over the way the XmlSerializer works.  Sure enough, according to Doug Purdy via Christoph Schittko we’ll get access to IXmlSerializable, and can write our own XML to our hearts content.  :-)

Isn’t life grand?

 

 | 
Wednesday, October 29, 2003 5:00:59 PM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, October 27, 2003

While I couldn’t go to PDC this year :'( at least I can get in on the next best thing.  Watching the stuff that’s coming up on PDCBloggers is pretty amazing.  You get the blow by blow in living color (or at least text).  I love watching what’s coming up on Scott’s blog.  He’s posting from the keynote via his Blackberry, so as Jim Alchin says it, it’s coming up on his blog.  Gotta love technology. 

Monday, October 27, 2003 7:37:45 PM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 

I’ve used TortoiseCVS for a while, and always considered it a nice to have, but not really the best way to deal with a CVS server.  Now that I’m running the latest (1.4.5) I think differently.

 

In the past I’ve relied on WinCVS to do things like recursively find out all the files I’ve modified, what revision my files are at, etc, and pretty much used Tortoise just for simple commits and adds.  With 1.4.5, Tortoise will recursively find all the modified files, categorize them as add, deletes and modifies, and allow me to commit any or all of them at the same time.  Very nice, and much easier than in WinCVS. 

 

Also, the explorer integration has gone that one step farther, and you can add CVS status and CVS revision columns to any explorer view.  Also much easier.  I’ve pretty much abandoned WinCVS in favor or Tortoise, which is nice, since it saves one more application launch every time I want to deal with versioned files. 

 

Way to go TortoiseCVS!

Monday, October 27, 2003 7:30:06 PM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 

It doesn’t take huge changes in an application to make our lives better. 

 

Granted, there are some really great new features in Outlook 2003, and I’m totally diggin’ them, but every time I can reboot my machine without facing the dreaded “Please close all Office applications..” dialog my heart is filled with a simple and pure joy. 

 

Sometimes it’s the little things that really make a difference.

Monday, October 27, 2003 7:24:19 PM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
 Thursday, October 23, 2003

I’ve been doing a lot of work with the .NET XmlSerializer over the last couple of weeks, and once again I’m wishing I had that just one more custom attribute to work with.  What I’d love to be able to do is just tell the XmlSerializer to let me worry about a specific part of the XML, since I know better than it.

 

Something like this (to serialize a property called MyString):

 

      public interface ICustomSerializer

      {

            void DoSerialization(object theValue, XmlTextWriter w);

            void DoDeserialization(XmlNode x, object targetValue)

      }

 

      public class DataClass

      {

            public DataClass()

            {

            }

 

 

            [XmlMyWay(typeof(MySerializer))]

            public string MyString

            {

                  get{ return "OK";}

                  set{}

            }

 

      }

 

      [AttributeUsage(AttributeTargets.Property)]

      public class XmlMyWayAttribute : Attribute

      {

            public XmlMyWayAttribute(Type serializer)

            {

 

            }

      }

 

      public class MySerializer : ICustomSerializer

      {

            #region ICustomSerializer Members

 

            public void DoSerialization(object theValue, XmlTextWriter w)

            {

                  // TODO:  Add MySerializer.DoSerialization implementation

            }

 

            public void DoDeserialization(XmlNode x, object targetValue)

            {

                  // TODO:  Add MySerializer.DoDeserialization implementation

            }

 

            #endregion

 

      }

 

Then you could do whatever funky serialization you needed to do.  Or is this flawed in some fundamental way?  It’d be pretty cool though…

 

 

 | 
Friday, October 24, 2003 12:14:36 AM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, October 20, 2003

I was over at my family’s place at Black Butte Ranch this weekend, and Central Oregon is in its full glory right now.  The birch (aspen?) trees are that truly amazing shade of yellow, and the vine maples are anywhere from bright yellow through orange to deep crimson.  Set against the dark pines, the colors are really remarkable.  No snow on the passes still, so this is a great time of year to head that way.

If you’ve never been out to Black Butte, it’s also well worth the trip.  Good restaraunt, beautiful views, miles of bike paths, tennis, golf, swimming etc.  A great place for family vacations, since there’s a little something for everyone.

Monday, October 20, 2003 4:55:15 PM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
 Friday, October 17, 2003

I’m sure everyone knew about this but me, but I was impressed.  I needed to attach some extra data to an XML Schema document so that it would be available to a code generator I’m writing.  You can put whatever extra attributes you want in an XSD document (which is how MS does it with SQLXML, for example) and no one will be bothered. 

However, I needed some full on elements to express the extra data I needed to carry. Luckily for me, the clever people at the W3C thought of this, and gave us the annotation element.  I knew you could put documentation inside an annotation element, but I’d never noticed the appInfo element before. 

Inside an appInfo, you can put whatever you want to, and attach it to just about any place in your schema file.  Very cool. 

 

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:my="myNamespace" elementFormDefault="qualified" attributeFormDefault="unqualified">

     <xs:element name="root element">

          <xs:annotation>

               <xs:documentation>some documentation</xs:documentation>

               <xs:appinfo>

                    <my:whatever>some app specific data</my:whatever>

               </xs:appinfo>

          </xs:annotation>

     </xs:element>

</xs:schema>

 

On a completely different note, I’m amazed to see that WordML actually serializes the little red “you misspelled something again” bar into the XML.  Just in case you want to style it into a mistake somewhere else?

 | 
Friday, October 17, 2003 10:30:06 PM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
 Thursday, October 16, 2003

It’s been a very busy week in which I think I’ve written more code faster than I have in months.  All in all a pretty productive time for me.  Key learning for this week include:

 

  • CodeSmith is a pretty groovy tool, although I wish the documentation was better, particularly for writing extensions.  On the other hand, it does most of what I need it to, and free’s a great price J.  There’s so much more you can do besides strongly typed collections.
  • Custom attributes have got to be one of the coolest features of .NET.  The ability to carry around arbitrary, strongly typed data about your classes that you can ask for whenever you need it is such an amazing boon that I don’t think I can say enough about it.  
  • NAntPad is a very promising step in the right direction.  Still a bit rough around the edges, but I anxiously await further versions.  Much easier than maintaining NAnt build files by hand.
  • There aren’t enough hours in the day.

 

I haven’t been blogging much lately, largely due to the ongoing weirdness of my current employment situation, but I’m trying to be more conscientious about it.  

Update: NAntPad .4 is much improved.  I'm starting to use it more earnestly.

 

Friday, October 17, 2003 1:37:46 AM (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |