Centaurs Identity
Random thoughts in my brain
So Don finally found it is actually 1997.
Don Box posted his memory about the past PDC.  Now, let's look at the very first sentence of the very first page of the preface of Essential .NET Vol. 1.  Note that Japanese translation of the book doesn't have this error.  Since Japanese tech book readers are overly rigorous about this kind of error, we have to dig this invitation mail from the DCOM discussion list... ;-)
Hey, I AM looking forward to going there!
How PDCBloggers.net excerpt my last two entries reveals how bad my English is for me to express my thinking.  One is titled "A dose of reality" and it made famous Robert Scoble miss the point of the entry.  The other that was fed today is titled "PDC bits unstable" and I am sure many others will miss my point.  My entry is meant to be asking speakers a favor.
It may be too much roundabout expression that is specific to Japanese...
 
Here, I will say this loud and clear.  I AM looking forward to seeing and touching the bits we will have at the PDC!  I would like to think how staffs we will see at the PDC will change our life as software developers!  I would like to participate the movement that is surely be the center of our life for the next decade!  I would like to see the future!
Scobleized
Looks like I've got Scobleized.  However, Scoble totally missed my point.  The reason why he missed my point I guess is that a) my English writing is horrible or; b) he was informed my entry from the PDCBloggers feed, stop there, and  haven't followed the link to my total blog entry.
 
I haven't said that "what we learn at the PDC won't really be important for a while longer."  I have said that it is why that is really important than what, because the name of new classes, the use of the new API, and those kind of what and how will be changing.  Yes, I know there are some developers especially in the U.S. who are already using those early bits.  But Scoble, is it what you want to say that the "big name" companies are more important than smaller names like me?  I don't think you do.  For most of PDC attendees it will be the first time to touch those bits at the PDC, and most of the PDC alumni I know agrees that the bits we will had at the event will be very unstable in implementation and maybe in design.  That's why I have to emphasize that "WHY is important than what".  If I would think that it won't be important for a while longer, then how would I manage to go there, even if I had to fight for ten hours against economy-class syndrome?
Note to myself; don't be too excited
PDC is coming closer.  We are all excited about what will be shown there.  But remember, PDC is for future.
 
Anyone remember PDC 2000?  The bits were still young there.  We used webserviceutil.exe and DataSetCommand.  VB.NET was not like the one we use today.  Knowledge we got from the PDC 2000 was not useful in the real life 2000, and most of 2001, although today the knowledge is the advantage for us.  PDC 2003 will be the same.  It will be really exciting show, but remember, it can't be our bread and butter until the bits ship.  Today, we still have to use BizTalk, WSE, and COM+ 1.5.
 
So, I would like to ask speakers a favor.  Please tell us more of why you made it that way, than what you made.  We will eventually gather information about the new bits from books, MSDN, and so on.  Attending PDC should be our advantage because we will almost exclusively know why the features are there, why smart people at Microsoft decide its architecture that way.  It is that kind of knowledge that will be our real advantage.  That is why I am going, even it takes 10 hours to L.A. from Japan.
Suzanne Cook is terrific
I have encountered CLR loader problem last week.  Actually, it was not CLR loader problem, but my problem.
 
The problem is first shown up from a question on the Japanese .NET discussion forum.  I partially answered the question with only load context in mind.  Then someone complemented my answer with loadfrom context.  At first, I didn't think loadfrom context would solve the problem, and gave it a quick try.  This quick try made me confused and bothered Suzanne Cook on Sunday evening.
 
My code is like this:
-- base2.cs
public class Base2 {}
 
-- derived2.cs
public class Derived2 : Base2 {}
 
-- app2.cs
using System;
using System.Reflection;
class App {
  static void Main() {
    Assembly bas = Assembly.LoadFrom("c:\\temp\\repro\\subdir\\base2.dll");
    Assembly der = Assembly.LoadFrom("c:\\temp\\repro\\derived2.dll");
    Type t;
    try {
      t = der.GetTypes()[0];
    } catch (ReflectionTypeLoadException ex) {
      foreach (Exception e in ex.LoaderExceptions)
        Console.WriteLine(e.Message + e.GetType().ToString());
      return;
    }
    object o = Activator.CreateInstance(t);
  }
}
 
--makefile
base2.dll : base2.cs
  csc /t:library /out:subdir\base2.dll base2.cs
 
derived2.dll : derived2.cs base2.dll
  csc /t:library /r:subdir\base2.dll derived2.cs
 
app2.exe : app2.cs
  csc app2.cs
 
all : base2.dll derived2.dll app2.exe
 
...  Nmake creates three assemblies.  derived2.dll and app2.exe is in the same folder, while base2.dll is in the sub folder of the folder other two are placed.  If I run app2.exe, the code in the try block throws ReflectionTypeLoadException, which contains FileNotFoundException for the base2 assmbly.
 
I thought this was because the metadata to solve inheritance hierarchy (in this case it is the class Base2) should always be from the load context, and calling LoadFrom for base2.dll would not help solving it.
 
I then port my app2.cs to test.aspx like below, because the original question on the discussion forum is about ASP.NET:
--test.aspx
<%@Page language="C#"%>
<%@Import Namespace="System.Reflection"%>
<%
    Assembly bas = Assembly.LoadFrom("c:\\temp\\repro\\subdir\\base2.dll");
    Assembly der = Assembly.LoadFrom("c:\\temp\\repro\\derived2.dll");
    Type t;
    try {
      t = der.GetTypes()[0];
    } catch (ReflectionTypeLoadException ex) {
      foreach (Exception e in ex.LoaderExceptions)
        Response.Write(e.Message + e.GetType().ToString());
      return;
    }
    object o = Activator.CreateInstance(t);
%>
... and it worked without throwing an exception.  I was confused.  I was so confused I made up my mind and asked Suzanne for help.
 
At first she couldn't reproduce my problem, even I sent her the complete source code.  It was Friday, and I almost gave up this problem to solve completely, tried to forget the problem throughout the weekend.  I sent her my thanks on Monday morning.  Well, it was Monday morning for the +0900 time zone, but for her it was Sunday evening.
 
What surprised me was that she responded my thanks immediately, asking me to send her the assemblies I was using.  I sent them to her, and she found what a stupid question she was bothered in the lovely Sunday evening.  All the problems that confused me has already been answered by Suzanne on her blog, that I am one of the loyal reader.  But that entry just slipped my mind.  When I placed my app2.exe to where it can't load derived2.dll in the load context, it worked perfectly.  In other words, to have CLR loader and resolver find dependent assemblies ( by using loadfrom context ), they (dependent assemblies) must be placed where CLR loader can't find them ( in the load context ).
 
I have learned two things from this lesson; a) CLR loader have more secrets than I will ever know, and b) Suzanne Cook knows her staff.  She is terrific.  Thanks! and forgive me disturbing your Sunday evening...
My copy of Windows Forms Programming in C# has arrived
Chris Sells's another masterpiece shipped in Aug. 29th, and yesterday I have received my copy.  I was one of the reviewers, and have already read the entire book many months ago.  The book is just great.  When I applied for the review, I thought I could help some way or the other for the content.  Wrong guess indeed.  Chris Sells knows virtually everything about Windows Forms bits of the .NET Framework.  The book is thorough, yet compact compared to Petzold so that any developers who want to get up to speed on the topic would satisfy.  The book even devotes a chapter to the "no touch deployment", the topic which Chris Sells has been showing his knowledge from the first day of the technology.  Two words for developers who start using WinForms technology:  read it.
 
By the way, I found the interesting ad on the last page of the book.  The book is in the .NET development series from Addison-Wesley, and the ad shows that many new titles in the series are on their way:
"Building Applications and Components with Visual Basic .NET" by Ted Pattison
"Graphics Programming with GDI+" by Mahesh Chand
"CLI Annotated Standard" by James Miller
"The C# Programming Language" by Anders Hejlsberg, et. al
"A first look at ADO.NET and System.Xml v 2.0" by Alex Homer, et. al
"A first look at ASP.NET v 2.0" by Alex Homer, et. al
 
I remember that in the PDC 2000 conference bag we had bunch of free copies of books about C# and .NET Framework.  In the PDC 2001, it was Hailstorm reference book that I have not read (thank god I did not waste my time).  Now we will have PDC 2003 next month, I start anticipating...
Keith Ballinger is back
The disappearance has ended. He is back again.
mymsevents.com has PDC session lists
[Update 2003/09/17] The site goes live again. Check out Commnet.
 
[Update 2003/09/12] It seems too early to find the site.  The link to the site and session lists are now gone, although the site itself is still accessible.
 
Too bad we don't have Miller and Hogg this year...
Do what I mean, not what I say
These days, XML is still thought as text-based technology.  People often posts questions to mailing lists and news groups, asking "how can one serialize a string field that contains special characters like '<' using CDATA section, not escaped string?".  Then, they will eventually be told that you can't in an ordinary way, and they will say ".NET sucks because its source code is closed". 
 
Recent article about XML Schema Compact Syntax (XSCS) on the xml.com got me thinking about what is important for most developers.  XSCS may not be sexy enough, but the author clearly points out what is important to understand XML technologies:
 
"The W3C XML Schema specification is based on the model of schema components, which are abstract representations of various WXS constructs (such as simple types, complex types, attributes, elements, and various other things). W3C XML Schema also defines an XML representation of these components, but the separation of the specification into the abstract components and the XML syntax makes it obvious that WXS's XML syntax can be replaced."
 
XML Schema is all about defining a structure of the instance document.  If the structure is not marked as "mixed", then it is not important whether CRLF is there between </description> and <item>.  It is not important neither if the actual string data is contained in a CDATA section or escaped using hexadecimal unicode point.  Why is it not important?  Because they do not add any meaning to the data.  When what I mean can totally be represented in escaped manner, then why do we have to care to make it CDATA?
 
With "do what I mean, not what I say" in mind, we can separate important from unimportant.  XML 1.0 is unimportant because it specifies how to say what I mean.  XML Schema Definition Language is unimportant because it specifies how to say what I mean.  Most WS-XX specs are unimportant because they specify how to say what I mean.  Those specs are for plumbers like Microsoft, IBM and Apache Software Foundation, not for solution developers.  Solution developers use them by clicking some checkboxes.
 
In other words, "view source" feature is unimportant for most of us.  With Office 2003, we don't have to view the entire source in XML 1.0.  We can map message structure to the presentation.  They will show us what the message mean, not what it really says.  That's what things should be for most of us.  If the only way we would know how to specify what I mean is by "view source", that technology is not mature enough.
 
Then how about XML?  Well, since InfoSet betrayed us, we don't have reliable abstract data model yet.  XPath 2.0 data model may be, but it is still arguable because there are many people who hate PSVI.  We still have to "view source" these days...
 
But I am the kind of guy who loves to hear Jim Miller and Jim Hogg talk at the PDC.  I will "view source" anyway, without hesitation.  BTW, if you want the source code for the FCL, ask Lutz Roeder and you shall receive.