Avalon: Yes, the Picture's Changing
Here's a response that I posted to the above article:
I can see everyone rolling their eyes at the loony that is about to make this statement.
The movement of the declarative "InitializeComponents()" code to another more suitable "language" is nothing new, nor earth-shattering. Now comes the controversial part. Take a look at Borland Delphi... "Oh, I've heard of that" No, it is *not* just that "database" tool. It is a full featured, powerful object-oriented, component-based, compiled-to-native-code, development environment.
The Visual Component Library (VCL) that is included with Delphi uses a predecessor to Avalon's XAML. By using a text or binary declarative "language", the form construction is taken out of the code. This "script" is attached to the executable as a resource. It can also be easily localized by providing an alternative script.
Avalon is clearly an evolutionary step along this same path, but I would certainly *not* characterize it as "revolutionary."
Yes, I work for Borland. Yes, I'm one of the original developers that designed and built Delphi. Delphi was launched on February 14, 1995 at the Software Development West conference in silicon valley.
If you look closely, and resist the urge to revise history, you'll see that one of the primary architects behind .NET is Anders Hejlsberg... who was one of the original architects behind Delphi. Anders left Borland and helped produce J++ and WFC, then eventually C# and .NET. If you compare WinForms, WFC, nay Delphi's VCL, the similarities are... let's just say, striking.
What I find interesting and, to be honest, somewhat frustrating, are the reactions when I state that "Delphi's been doing this since 1995." I can see them rolling their eyes, as if to say, "There's another of those Delphi crackpots who thinks they actually innovated something."
In actual fact, we at Borland are extremely excited about the technologies that are coming out of Redmond.
In fact, if you happen to *be* a Delphi programmer you need to keep your eye on the "Octane" project.. and if at all possible, attend the Borland Conference in San Jose, CA starting this weekend (Nov. 1, 2003).
So I guess it *is* true that imitation is the highest form of flattery.
Borland Software Corporation.
RAD .NET IDE Architect.
Friday, October 31, 2003
Avalon: Yes, the Picture's Changing
Wednesday, October 29, 2003
Since one of my BorCon talks has been canceled, I will begin to post some of the content that was planned here. To get things started, here's one item that applies to C#Builder (and the upcoming Delphi 8, codenamed "Octane").
Modifying which character pairs the IDE highlights:
Insert standard disclaimer concerning editing your registry, here
Open RegEdit and go to the following key:
HKCUSoftwareBorlandBDS1.0EditorSource OptionsBorland.EditOptions.XXXXPair Table
Under the above key there are string entries formatted as comma separated values, for instance the "(* *)" pair in the "Borland.EditOptions.PascalPair Table" key is represented as:
The meanings of these values are, in order:
Nestable = 0 - No, 1 - Yes, 2 - Maybe
ImpliedDir = 0 - No, 1 - Yes
CharCount = 1 or 2 only
Starting string = 1 or 2 char string
Ending string = 1 or 2 char string
So to create non-nestable, implied direction pair for, say <% and %> it would look like this:
So if you don't want to highlight the quote characters since they have no implied direction and will often highlight strangely, delete the 0,0,1,',' and 0,0,1,"," entries and those pairs won't display as match characters. Note that this will also disable the Ctrl-Q+[ and Ctrl-Q+] functionality for those characters.
Tuesday, October 28, 2003
Due to product scheduling constraints, one of my BorCon talks has been cancelled. The "IDE Spelunking" talk will not take place on Tuesday, November 4 as planned. The Open Tools API talk is also in danger of being canceled as well. This stinks... I'll also not going to be able to be there very much either... Even though it is less than 30 minutes from Borland.
Sunday, October 26, 2003
Marco Russo - Borland at PDC
It seems that some folks are certainly noticing the conspicuous placement of Borland at this year's Microsoft PDC. And, since BorCon is after MS' PDC, there'll be a lot of continued buzz... You don't want to miss it.
Saturday, October 25, 2003
.NET Framework Security: Using Win32 and Other Libraries (Working with C#)
Just learned a little lesson when working with managed code and P/Invoke. If you are providing a delegate as a callback to a P/Invoke'd Windows API function, make absolutely sure you hold a reference to that delegate for as long as that Windows API needs to call it... ;-) Since the CLR doesn't track references to things that travel off into the unmanaged nether-world, it will blithely garbage collect your delegate. This promptly hangs your unsuspecting API out to dry (think RegisterClass and CreateWindowEx). The absolutely insidious thing about all this is that it will work.. for a while. So take my advice, the oven is hot; wear your oven mitts...
For all the time I've spent working with managed code, COM-interop, and P/Invoke, you'd think I'd know this stuff... But then again, I'm no Don Box, ChrisAn, or Lutz Roeder, et. al.... they've had the luxury of being exposed to this for a few more years ;-) Eventually, this stuff will seep through the several inches of solid rock and touch some grey-matter someplace...
Friday, October 24, 2003
Thursday, October 23, 2003
Yes, it's been a few days since my last entry.. well I've been up to my eyeballs trying to complete some deliveries. We have got to have a reasonably stable build of stuff available for all those demos at this years' BorCon. This also has to be done before I can begin to prepare for my talks, which is going to be like cramming the night before a test.
I did get my final schedule for my talks. The info is here.
Saturday, October 18, 2003
Here's some photos I took last year in Anaheim, California at BorCon 2002. This is while at Disney's California Adventure for the Tuesday evening event. You can see me in the foreground sitting next to Chris Anderson with Eddie Churchill in the front. I presume he's begging for more information about .NET ;-). There's also a photo of Danny Thorpe with ChrisAn deep in discussion.
Maybe this will trigger some of ChrisAn's visual memory...
Click the images for for full size.
Time is certainly a limited commodity. With BorCon now only 14 days away... I've not been able to spend any appreciable time preparing for my talks. So with that, I've been able to convince Eddie Churchill, take over one of my talks. So I'm now down to two talks... I think this will work out. The good thing about this is that when I notified Christine Ellis about the change, we just happen to beat the printing of the conference catalogs by only a day, so the catalogs will be correct.
Thursday, October 16, 2003
Some other folks have mentioned that they are having issues with my RSS feed... so I did some changes based on their suggestions. This whole RSS/RDF standards thing is a mess right now. That's the good thing about standards... there are so many to choose from.
Wednesday, October 15, 2003
Thanks to John Kaster and Roy Nelson for providing some impromptu QA on my RSS feed hack. Apparently I was missing a " " (space) between the "1.0" and ?> in the <?xml version="1.0" ?> header. Should be fixed now. I don't see why this space should be significant, but there are some new aggregators and XML validators that complain. I know that NewsGator seems to be OK without the space. It's on points like this that I find the W3C specs to be lacking in clarity.
Tuesday, October 14, 2003
OK, I figured out how to get an RSS feed up and going... You can now subscribe to my RSS feed here. It's not perfect, since it is somewhat of a hack. I simply added an HTML comment to my template that contains the RSS XML skeleton. Then, using their own template tags, Blogger will fill in this XML skeleton when it is published to the server. Finally, on the server, which is a Linux box, I wrote a Perl script (yea, yea, I should have used Kylix...) to scrape the HTML file and extract the rss xml data and write it to rss.xml. This script is setup as a cron process which runs every five minutes. If it detects that the html file date is newer than the rss.xml file, it will regenerate that file.
As far as not using Kylix... well I didn't have a Linux box up and running with Kylix installed at the time and this was sort-of a late-night, "let's see if this works" project...
Monday, October 13, 2003
My take on this is that this certainly gives developers more time to get up to speed on the new platform... not all the doom-and-gloom portrayed by this article.
So, all you Delphi devlopers out there, you definately don't want to miss out on BorCon this year. Since it is after Microsoft's PDC, we are going to have several folks from MS giving talks about some of their future stuff (yes, it will definately be .NET/CLR related)... hopefully we'll get a synopsis of what will be presented at PDC.
Saturday, October 11, 2003
What are some of the things that makes Delphi unique? One thing that Delphi provides is virtual constructors. So how do you make a virtual call to a constructor when, by definition, you don't have an instance? This is accomplished by using a one of the other somewhat unique Delphi constructs, the class reference. A class reference variable holds, not a class instance, but a class type. They also follow the same assignment compatibility rules that a class type variable does.
So what is this good for? What if you didn't know what class to construct at compile-time? Well, class references and virtual constructors to the rescue. So you can now have a hierarchy of classes where you can decide at run-time which classes to construct and use.
TComponent = class
constructor Create; virtual;
TComponentClass = class of TComponent;
TMyComponent = class(TComponent)
constructor Create; override;
TMyOtherComponent = class(TComponent);
constructor Create; override;
function CreateComponent(AComponentRef: TComponentClass): TComponent;
Result := AComponentRef.Create;
AComponent := CreateComponent(TMyComponent);
AnotherComponent := CreateComponent(TMyOtherComponent);
In the above example, the function CreateComponent will create any component that is of type TComponent or any descendant thereof. TComponent is declared to have a virtual constructor. By passing in a specific class reference type into CreateComponent, any component descendant can be created.
Still not convinced? Well this is exactly how the Delphi form designer functions. When you register your components into the IDE, you are passing a class reference. This is then stored internally in a class reference variable associated with a particular tool palette item. When the user selects the palette item and clicks on the surface of the form designer, that class reference is passed into the designer where a component instance is constructed by calling the virtual constructor through that class reference.
There you have it. Hopefully you can see the power and simplicity of using virtual constructors and class references.
Thursday, October 9, 2003
Seems Chris Anderson found me... What I find interesting about his blog is the amount of personal information he shares. We all can get to know him quite well, yet we are all anonymous to him. I've personally met Chris several times and can say that he's dedicated and passionate about his work. He's also extremely talented and I count it an honor to have met him. He and I also have another thing in common; we've both worked side-by-side with one of my all-time, most respected engineers, Anders Hejlsberg.
I've always believed that in order for one to grow personally in any area, technically, socially, spiritually, etc.., one should surround themselves with folks that they respect and admire in that area. Anders Hejlsberg was certainly a person of this caliber, both as an engineer and as a person. I also know that Anders only works closely with top notch folks, so it certainly is safe to assume that Chris "has got it goin' on."
I hope that wasn't too sappy for you Chris... ;-)
Wednesday, October 8, 2003
The generics are coming, the generics are coming... The next release of the .NET platform/framework will contain support for generics. If you are going to be doing any kind of .NET programming you should really bone-up on this stuff. These are definately not your father's C++ templates. Generics for cross-language use is going to be really cool...
CNN.com - Schwarzenegger wins, Davis concedes - Oct. 8, 2003
This is just plain weird. Ah-nold takes the gubernatorial recall race. Whodda thunk it? Well... I suppose that even if he doesn't do anything while in office, that is better than making an even bigger mess. And who knows maybe he'll actually fix something. One thing is certain though, it has certainly woke up the California voters. There was a record showing at the polls. I know I had to actually wait for a parking spot at my polling place. Normally there are only about two or three other voters while I am there. This time there was about 8 or 9.
Monday, October 6, 2003
There *is* such a thing as "poetic justice" in this world....
I implemented my own "do-not-call" list several years ago. Many phone companies offer what is called "Privacy Manager." This little service works with the callerID service by automatically blocking callers that refuse to present their callerID information and diverting them to a special message. In this message they can elect to reveal their callerID number, or identify themselves verbally and wait for the "Privacy Manager" to contact us on their behalf. The interesting thing about this service is that since most telemarketers don't present their CallerID info, they are hit with this first line of defense. Also, since telemarketers work on volume they are just as impatient to wait the minute or so it takes to actually by-pass all those phone menus and messages as you and I would be, so they just hang up and I never even know they called. For those few diligent telemarketers that actually take the time to wrestle with the inconvenience of the privacy manager, I figure it must be important so I'll answer. Oh and this also blocks calls from folks not covered by the do-not-call list.
Friday, October 3, 2003
It's crunch time here for the Delphi/C#Builder team. With BorCon fast approaching and schedules needing to be met, it certainly makes life here interesting. At this year's BorCon, Borland will be celebrating it's 20th anniversary. You don't want to miss it. There's going to be a blow-out celebration on Sunday November 2nd at the San Jose McEnery Convention Center. For all you Delphi/C#Builder customers out there, the "Meet the team" session on Monday evening November 3rd, from 8-10pm is an event you have got to attend. Since BorCon is only about 30 miles from the Borland Campus in Scotts Valley, you can be sure that the entire team will be there.