# Monday, 18 October 2004

Being a non-CS degree holder (I can tell you all about Chinese vs. Japanese Buddhism though) I've always been a bit intimidated by the idea of parser/compiler building.  Luckily, there's Coco/R.  I'm intimidated no longer!  I've been playing around with creating a custom scripting language for some of the code generation we're doing, and this turned out to be a really easy way to parse/compile the scripts.  Coco/R is distributed under the GPL, and source is available.  There are versions for both C# and Java. 

I was really impressed at how easy it was.  Basically you write an EBNF definition of your files to be parsed, and then annotate them with native (C# or Java) code that does the compilation.  Here's an example from the sample that comes with the distribution...

MulOp<out int op>
=                        (. op = -1; .)
  ( '*'                  (. op = times; .)
  | '/'                  (. op = slash; .)
RelOp<out int op>
=                        (. op = -1; .)
  ( '='                  (. op = equ; .)
  | '<'                  (. op = lss; .)
  | '>'                  (. op = gtr; .)

The EBNF stuff is on the left, and the native code on the right.  Super easy, and the parsers work great.  Very fast.  They are also very easy to debug, as the generated code is very well laid out.  It corresponds to the EBNF constructions, so debugging the process is very easy.

If you ever find yourself needing to do some parsing, check it out.

Monday, 18 October 2004 11:32:36 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
# Friday, 08 October 2004

Turns out that if you have multiple versions of the same assembly, say and in your probing path, only one of them will ever get loaded.  Here's the deal...

I've got an app in


in it are myassembly.dll v1.0.0.1 and myapp.exe.

There's a subdirectory


that contains myassembly.dll v1.0.0.2, plus a new assembly newassembly.dll, which is dependent on v1.0.0.2 of myassembly.dll

In myapp.exe.config, I've included the "new" subdirectory in the applications private path, meaning that it will look there for assemblies when doing assembly binding.

  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
   <probing privatePath="new;"/>

When the application loads newassembly.dll, I would have thought that it would correctly load the version of myassembly.dll, and that the application would load the version to which it was bound.  Alas, that turns out not to be the case.  Fusion comes back with

LOG: Post-policy reference: myassembly, Version=, Culture=neutral, PublicKeyToken=xxxyyyzzz
LOG: Cache Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/myapp/myassembly.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\myapp\myassembly.DLL
LOG: Entering run-from-source setup phase.
WRN: Comparing the assembly name resulted in the mismatch: Build Number
ERR: The assembly reference did not match the assembly definition found.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

We had assumed that fusion would skip the wrong version and keep probing for the right one.  It looks like it just finds the wrong one and bails.  Of course, if we put both versions in the GAC, it works just like we would expect, which makes sense, that being what the GAC is for and everything. :-)

Friday, 08 October 2004 14:20:04 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
# Tuesday, 05 October 2004

I may just have a new favorite XML editor.  I caught wind of Stylus Studio 6 [via Mike Gunderloy] so I downloaded a trial copy and checked it out.  Wow.  I'm pretty impressed.  It's the same price as XMLSpy Pro, but includes support for XPath (v1 and v2), XQuery, Web Services testing, and a pretty good schema-to-schema mapping tool that creates XSLT files.  Plus it has a schema editor which looks pretty good, lots of data conversion tools, support for custom extensions (if you have your own file types), etc.  Lots of good stuff here.

What is even cooler is that they have a "Home" version for non-commercial use that has almost all of the features of the pro version (unlike the pretty well crippled XMLSpy Home) for only $50.  I'll definitely turn my students on to this next week.  That's a lot of functionality for very little money.  The schema editor in the Home version isn't quite as cool, and there are a few other features it doesn't support, like web services testing, but it looks otherwise pretty highly functional. 

If you don't care about the WSDL editor, there might be a lot to recommend in the Pro version over XMLSpy Enterprise, at about 1/3 of the price.

Tuesday, 05 October 2004 13:27:23 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [1]  | 
# Tuesday, 14 September 2004
I've got six three, if anyone wants one.
Tuesday, 14 September 2004 11:52:53 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [1]  | 
# Tuesday, 07 September 2004

By now everyone has heard that WinFS (the new SQL-based, meta-data driven file system) won't be shipping with Longhorn.  It's not really surprising.  Not only is it a fairly challenging technology, but the surrounding behavioral issues are, IMHO, an even bigger deal, and will take a good long while to resolve. 

The reason meta-data based solutions haven't dominated the world have nothing to do with technology.  RDF works just fine.  So do XSD and Web Services.  So does SQL server, so I'm convinced that the technical hurdles to achieving WinFS are solvable.  The trouble is getting people to use it.  People just don't get it.  Nobody uses RDF, in part because it's way to complicated, but also because most people just don't get meta-data.  It's hard enough to get people to use proper keywords on their HTML pages. 

Similarly, the reason that Web Services have yet to revolutionize the world of B2B eCommerce have nothing to do with technology.  The parts of the technical picture that aren't solved by SOAP/WSDL are quickly being addressed by WS-*.  The real issue is schemas.  The barrier to real B2B isn't security, or trust, or routing/addressing, or federation even.  It's the fact that no two companies in the entire world can agree on what a PO looks like.  The barriers are institutional, not technical.

The same thing applies to WinFS.  Even if the technical side can be made to work reliably (of which I have no doubt given enough time), it's the institutional issues that are hard.  What do you call the tags that get applied to your file system?  If any applications are going to take real advantage of them, they have to be agreed upon in common.  Anyone remember BizTalk.org?  It's not easy to reach consensus on what seems like a simple problem.  What do you call the meta-tags that are applied to your data?  It's great that you can arbitrarily add new tags through the explorer, but if no application besides explorer supports them, is it anything more than a great new way to do sorts? 

I think in the long run it's that problem that has delayed the release of WinFS.  There has to be a plan in place for handling the institutional issues in place first, or MS will end up with another great piece of technology that no one knows what to do with.

Tuesday, 07 September 2004 12:55:56 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 

Many who know me know that I'm a long-time member of the SCA.  For the rest of you, it shouldn't come as too much of a surprise, 'cause I'm just that big a dork.  Anyway, we just found out this weekend that my wife Vikki (or Svava as she's known in SCA circles) will be getting her Laurel in January (assuming she doesn't blow it between now and then :-) ).  For you non-SCA types, that's equivalent to Knighthood, only for Arts & Sciences.  In other words, a big deal.  She pretty much rocks.  Actually, she totally rocks.  You go honey!

I realize 99% of you reading this probably neither know nor care what I'm talking about, but I couldn't resist the opportunity for the shout-out.

Tuesday, 07 September 2004 12:43:34 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 

Despite the lack of technical content here lately, I do actually still work for a living.  I've been working on some implementation stuff lately, and have been struck by something that I've known for a while, but always comes home in a big way when I have to use someone else's UI.  There's no substitute for use cases!  I'm working with an API right now that was obviously designed by someone who thought it seemed like a good idea at the time, but didn't spend any time thinking about how this API was actually going to be used in the real world.  The end result is that to actually use it, you have to go through way to many steps, each of which takes a different set of parameters that you may or may no already have.  It's very frustrating. 

I'm working with Scott on most of it, and from the very beginning of our involvement he predicted that we'd end up spending 6 hours a day reading docs and 2 hours coding to achieve the desired end result.  It's actually been more like 7/1.  I spend all day reading docs and trying to figure out how the API is supposed to work, then write 20 lines of code to solve the problem. 

My own solution to this problem when I've been on the API writing side has been TDD.  If I can write a test case, it at least forces me to think about how the API will be used enough to avoid some of the major pitfalls.  On a larger scale project, the only solution is full-blown use case analysis.  Write the use cases first, then figure out what the API should look like.  Too often a hard-core technologist designs the API in the way he feels best exemplifies the underlying data structures.  The problem is that the users almost never care about the nature of the underlying data structures.  They need high level methods that answer questions, not CRUD based data exposition.  At the very least, TDD forces us to think through what some of those questions might be.  It's easy to miss some, however, so you really need to do use cases to find out what all the questions are before you write the API.

Tuesday, 07 September 2004 10:34:26 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
# Thursday, 02 September 2004

My wife and I snuck away from the children last night long enough to see Hero, the new Jet Li martial arts film directed by Zhang Yimou (of Raise the Red Lantern, Red Sorghum, Ju Dou fame).  It was fantastic.  Easily on par with Crouching Tiger... but with a much different pacing.  The martial arts were fabulous, and very well filmed.  And Mandarin is a beautiful language to listen to, so I'm very glad they didn't dub it. 

The costumes were very well done, and correct for the period, at least on par with those in The Emperor and the AssassinMy favorite part was that much of the film consists of the same events being recounted with different emphasis, and each of the retellings features a different color scheme.  There are blue, yellow, red, green and white scenes, and the cinematography was captivating. 

Well worth seeing in the theater, since the colors and overall cinematic grandeur play a key role.

Thursday, 02 September 2004 10:07:45 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
# Wednesday, 01 September 2004

It's been quiet here on the old blog lately.  Partly because I've been pretty busy, and partly because I spent 10 days on vacation in SoCal.  I've got to say it pretty much rocked. 

I hadn't been to Disneyland since I was in high school, and this time I got to take my kids (who are 6 and 9).  It was fabulous.  There are a bunch of new rides, and many of the old rides from when we were kids are gone to make room for them, but all the new ones were pretty great.  Splash Mountain, Indiana Jones, etc were very cool.  My kids had a great time, and it's a lot of fun to see that kind of thing through them.  We spent three solid days at Disney (2 at Disneyland and 1 at California Adventure) and that was just about the right amount of time.  One of the new crazes that's sprung up since I was a kid is getting the characters to sign autographs.  Both my kids had a good time hounding people in big fuzzy suits to sign their books.  It gave them a goal that kept them focused on moving around even when they were tired.  If you're kids are into autograph hunting, it's worth checking out some of the "character meal" opportunities.  There are several restaurants around the parks and hotels where the characters hang out, and will come by your table and chat (in pantomime) with the kids, etc.  We went to "Goofy's Kitchen" at the Disneyland Hotel (where we staid) and "Ariel's Grotto" at California Adventure and both had pretty good food and lots to entertain the kids, although be prepared for some sticker shock, they aren't cheap.  Some pretty groovy, although less kid-friendly dining was to be had at the "Blue Bayou" which is actually inside Pirates of the Caribbean.

This was the first time I'd been to California Adventure, and I was really impressed.  I had heard that it was more adult-focused than Disneyland, but I didn't find that to be the case.  Both my kids loved "Soaring over California" and there was lots of kid related activity in the Bug's Life area.  The rides were pretty cool.  My son drug me on California Screaming twice (the big roller coaster) and I coaxed him into going on the "Tower of Terror" with me, which was pretty dang fun.  My daughter really like the Redwood Creak Challenge Trail, which is basically a big forest-ranger-themed play structure. 

After our three grueling sun-up to well-past-sundown days at Disney we hit Legoland, the San Diego Zoo, SeaWorld, and last but not least my son's big requested attraction, the La Brea tar pits in LA.  And somehow we still managed to get in most of a day at the beach in San Juan Capistrano. 

All that's behind me know and it's back to work.  Not only is there plenty of work at work, but I've got a new Web Services class coming up, and then SellsCon in October. 

Home | Work
Wednesday, 01 September 2004 09:53:43 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  | 
# Monday, 16 August 2004

I got my first real chance to use my new radio this weekend (a Yaesu VX-7R(b)) at the Oregon Airshow.  I was volunteering, along with lots of other fine folks, not only as an amateur radio operator but as a CERT volunteer just in case anything untoward should happen. 

Before I got interested in such things, I had no idea that at most big public events like parades, marathons, bike races and airshows, there are fleets of hams providing communications.  The reason for it is that in most places, police, fire and other official agencies use radios that don't inter-operate.  It seems silly, I know, but it's true.  So hams show up for these events (since all our radios are compatible) and relay traffic between people without radios and people with radios who can't talk to each other.  Luckily all the traffic yesterday was pretty mundane, and we didn't have much in the way of emergencies.  A few heat exhaustion victims, but otherwise pretty quite.  Quiet in the sense of no emergencies.  The Airshow itself was far from quiet.  You find out pretty rapidly that headset or no headset, when the Blue Angels fly right over your head, you're not going to hear the radio. 

CERT | Radio
Monday, 16 August 2004 09:12:10 (Pacific Daylight Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |