Miscellaneous Brrreeeport

Looks like I’m:

  • Participating in Scoble’s



  • Syndicating Digg’s Programming news here now (in the sidebar).
  • Considering participating in Technet ScriptCenter’s Scripting Games event, despite my busy-ness. (Hey, I could be a contender!)
  • Baffled why UC would require its own Alumni (aka “prospective donors” to UC’s board) to jump through Stone Age hoops to get a transcript (this is 2006, and phone isn’t even an option), and they’ll still take “5-10 days” to process it.
  • Downloading various free VMwares at the moment. Oh, and eating cookie dough.
  • Wondering why the machine I’ve reinstalled at least 12 times in 12 months — due to strange disk problems, but with different disks — now appears problem free after switching its filesystem from NTFS to FAT32 (which is supposedly more fragile).
  • Also wondering why the Virtual NT4 Server I spent the last week fighting with just refuses to run IIS4.
  • Avidly tracking shipment of my new little Athlon 64-based machine, due here Tuesday.
  • Chuckling at the recent surplus of general serendipity.
  • Remembering that Tuesday is Valentine’s day….

Gopher is a funny word,

and so I was sad to see it go away again today:

Y’know, I remember seeing the early web on Lynx, and thinking “oh, like gopher, except harder to use — what’s the point?” Then I saw it on Netscape 1 and everything changed.

(Yes, I actually have a need for NT 4 Server right now. I never thought I’d be installing Option Pack this many years later. At least I’ve got Virtual PC & Server these days).

IE 7 beta 2, Running Observations

Observations as a user:

  • Address bar: I’m not sure I like it being locked to the title bar.  Any other toolbars go below — that’s weird.  Interestingly, I can drag the whole window from the chrome near it, so I think it may actually be part of the titlebar under the hood.
  • “Star”/start menu: Opens the sidebar containing Faves, History, and Feeds. I think I like this, an idea borrowed from live.com.  It’ll still take some getting used to, tho.
  • bug?: Backspacing/deleting characters in this MSHTML-enabled (contenteditable) area of .Text doesn’t work right.  Possibly machine-specific, but I haven’t noticed it before.
  • Tabs: I reeeally want to move the tabs to the bottom of the screen, as I do with Firefox (and like Excel worksheets).  I also want to be able to double-click to close tabs, but I’m happy that middle-clicks are “Open in a New Tab”.
  • New tab thing: The small “blank tab” for creating new tabs is Mystery Meat, and especially confusing since there’s a “plus” icon nearby.  I know MS is going for “uncluttered UI”, but this breaks usability in favor of pretty.  Just show a #8220;new document” icon the whole time, and it’ll be much clearer. 
  • Stop loading icon: The “X” icon also very confusing.  “X” means Delete, a “Stop Sign” icon means stop. 
  • Reload icon: OTOH, I like the color reversal here, the green in the background makes it stand out more.
  • Faster: address bar responsiveness.
  • Slow, like rendering of the new Quick Tabs, Classic toolbar and Google’s toolbar.

Observations as a developer:

  • CSS Visual Transitions: are these gone?!?  Strange, b/c CSS Visual Filters still work.

  • Modal/Modeless dialogs: IE6sp2 forced the status bar onto these.  IE7 now forces an address bar too, creating problems for web apps with sized dialogs.  Slowly but surely those dialogs are becoming just windows, EXCEPT that…

  • Modal/Modeless dialogs are still very buggy in IE7b2!

  • SELECT elements: As expected, much better now!



IE 7 beta 2 preview

Yeehaw it’s out!  I’m downloading now and am actually excited to testdrive it.  Already noteworthy to me is the functionality changes section in the release notes:

Scriptlets—Internet Explorer 7 disables Dynamic HTML (DHTML) scriptlets, by default. (Scriptlets were deprecated in Internet Explorer 5). They can be reenabled by system administrators, changing URLActions with the Internet Control Panel (INetCPl.) The INetCPL text should read “Allow Scriptlets.” If your programs rely on scriptlets, we recommend that you use DHTML behaviors which are more efficient. Disabling scriptlets is part of our continued work to ensure that unsupported technology is deemphasized in Internet Explorer.

I’m very happy about this.  It sounds like Microsoft listened (!) to my request to not remove Scriptlets after all, but to instead just disable them by default (which is certainly a good thing for security).  I have several good old IE components written as DHTML Scriptlets, and I need some option to keep using them in existing web apps.

  • ActiveX controls–ActiveX controls are disabled by default in Internet Explorer Version 7. The ActiveX Input TYPE=FILE control no longer submits a fully-qualified path; it now submits only a filename. The ActiveX control for XEnroll certificate enrollment was removed from Windows Vista and replaced with a new control.

This is a big big deal, and again a good one.  But does this include disabling the built-in ActiveX Controls too, like DSOs and XMLHTTPRequest??  (if so, then ouch!)  Good idea on the file input, but it sounds like it’ll cause some rewrites.

  • Channel Definition Format (CDF)–All CDF support was removed from Internet Explorer 7 Beta 2 Preview.

This surprises me.  It may be old tech, but it was big (remember all the “push” hulabaloo? man, those were the [something-] old days), and I do still see sites using it.  Not sure from that statement whether it’ll come back in a later beta or RC, tho…

  • DirectAnimation–All DLLs to support the Internet Explorer DirectAnimation component were removed in Internet Explorer 7 Beta 2 Update.

Another big change.  So what’s the replacement it, native SVG finally??

  • XBM–Support for XBM, an imaging format designed for X-based systems, was deleted.
  • SSL–Support for weak SSL ciphers was removed from Windows Vista and support for SSLv2 was disabled for all Internet Explorer 7 platforms

Good and better.

  • Windowed Select–The Windowed Select Element was removed from Internet Explorer 7 because IE7 is not using the Windows API. This results in some cosmetic changes in padding. The animation associated with the popup is gone as well, and the popup simply pops up.

Simply marvelous!

  • BASE Element–Internet Explorer 7 strictly enforces the BASE element rule, as documented in the HTML 4.01 standard. We no longer allow BASE tags outside of the HEAD of the document. The standard specifies that the base element must appear within the head of the document, before any elements that refer to an external source.
  • window.opener and window.close–Internet Explorer 7 no longer allows the window.opener trick to bypass the window.close prompt. Browser windows can’t close themselves unless the windows were created in script. This security enhancement no longer allows browsing to a random site when the main browser window closes unexpectedly.

Ah, lovely bug fixes.  More please!
(actually, I wish I had known about that window.opener trick a long time ago.  Darn!)

  • WWW-Auth–Internet Explorer 7 changes the precedence rules for WWW-Auth. Previous releases of Internet Explorer used the first header encountered. Internet Explorer 7 uses the first header except when the header is Basic. We use Basic auth if no other authentication mechanism is present.
  • HTTPOnly Cookies–HTTPOnly cookies can no longer be overwritten from scripts.
  • _SEARCH–The _SEARCH sidebar is no longer supported in Internet Explorer 7. It can be reenabled using a URLAction.

All sounds good to me.  I’ll be a little sad about _search, tho, but only a little.

  • View Source–The view-source protocol no longer works in Internet Explorer 7 Beta 2 Update.

It actually stopped working back in IE6sp2, which was a pain for me.  It was a Netscape standard, albeit de facto, but it was still quite handy for sharing code (and non-abusable, that I know).

  • Gopher Protocol–Support for the Gopher protocol was removed at the WinINET level. (Gopher support was turned off by default in Internet Explorer 6.)
  • windowexternalImportExportFavorites–windowexternalImportExportFavorites has been removed in Internet Explorer 7 Beta 2 Preview.
  • Telnet–The telnet protocol handler is no longer supported in Internet Explorer.

Gopher, sure — I haven’t touched that in 10yrs. 
The Favorites method — eh, not a big fan, but I’ve seen some very cool specific uses (uploading to bookmark sites, in particular). 
But why no telnet://?  All that ever did was open the default telnet client.  This’ll definitely be a pain for some sites. 

  • SysImage URL Scheme–The SysImage URL Scheme has been removed from Internet Explorer.

I actually have no idea what this is, which is unusual with IE.  Anyone wanna enlighten my ignorance?

  • Status Bar Scripting–Script will no longer be able to set the status bar text through the window.status and window.defaultStatus methods by default in the Internet and Restricted Zones. This small step helps prevent attackers from leveraging those methods to spoof the status bar. To revert to previous behavior (allowing script to set the status bar through window.status and window.defaultStatus) select the “Security” tab from “Internet Options” in the Control Panel. Select “Custom level…” for the Internet (or Restricted sites) zone. Find “Allow status bar updates via script” and change the setting to “Enable”.

I wont miss this one much.  When I’ve used it, it’s been more a toy or bandaid for ugly URLs.  Much more often I’ve seen it abused, so all good here.

I’ll post more if I find my test-drive interesting.

There’s more good discussion about it over on the IEBlog.


The IE team has chosen wisely.

Or SELECTed wisely… (ok, so the quote doesn’t quite work).

Considering my frustrations with IE’s buggy SELECT element (dropdown list), or my workarounds for those problems, it should be no surprise that I’m quite excited about IEblog’s news about SELECT element fixes in IE7:
For the SELECT few….

z-index fixed, styles fixed, title fixed. Finally! (But no mention of scripting bugs… hopefully they get those too!)

Ever celebrated one billion anything?

Hard to explain (I’m a geek, nuff said), but I just noticed my One-Billionth birthsecond is coming up soon.  Furthermore, my (almost 3yr old) son’s One-Hundred-Millionth birthsecond will be about a month earlier!

Want to know when you/a loved one reached/will celebrate a major birthsecond?  In that case, I proudly (?) introduce my Birthsecond Calculator (;>) :

  1. Date/Time of birth:
  2. + a birthsecond:
  3. (but you don\’t look a second over ‘ + (iSeconds-10000).toString() + ‘!)‘;
    $(‘PartyDay’).innerHTML = dtResult + strFlatter;
    return false;”>=


Note: This surely won’t work in a feed reader, so come visit for the fun.

(web geek colophon: This works thanks to jsDate, my port of VBScript Date functions to Javascript.)

Update 2007-04-15: My 7yo son wants to know when his 250 millionth birthsecond is, so here’s a customizable version.

Canvas in IE

This is just awesome:

…Okay, so it’s a slightly ugly picture, why is it awesome? Read about it here: http://me.eae.net/archive/2005/12/29/canvas-in-ie/.  Basically, Emil Eklund of WebFX extended IE to support Canvas elements, the currently most-buzzed new technology in web browsers.

Awesome-er (to me) is that he accomplished in a couple days with IE‘s DHTML Behaviors, just like my xDOM Suite, or Dean Edwards’ Star-Light do.  Just like them, it uses DHTML Behaviors to basically improve (fix, enhance, or extend) IE‘s rendering engine.  Developers can apply this extension by copying two files and adding a single line of code to pages which use Canvas.

Easy development, 3rd-party browser extensions, easy deployment ….All good examples of why DHTML Behaviors are totally awesome, and great reasons why other browsers should adopt them… 

(via Ajaxian, screenshot borrowed from same.)

Two Solutions: ASP.net Framework 2.0 deployment woes

I recently deployed the ASP.net 2.0 Framework to my server, and since have been fighting with problems it’s caused. For instance, when I switched one app to use it, it broke all the other v1.1 web apps I was running (including this blog). Fortunately for me, someone else has been having the same problem and found a solution: move the 2.0 apps into their own application pool. Hooray I don’t have to uninstall (which I was close to doing).

Hey Microsoft, how about mentioning this anywhere? …say during the install, on the IIS site’s ASP.net tab, or in the error?

I have another related woe, though: If I set a 1.1 app to run under the 2.0 Framework (which should work, and imparts better performance and security), I get the ASP.net Yellow Screen of Death:

Apparently “global” now a reserved keyword under 2.0 (despite its 1.1 compatibility). Fortunately, I found my own easy fix: just rename the class. So line 11 in my global.asax.vb is now Public Class Global2. Of course I made the same change in its global.asax too: <%@ Application src="Global.asax.vb" Inherits="Global2" %>

Happy to find a solution, and I hope mine helps someone.

Braindump: CDO/MAPI AppointmentItems and Exchange Public Folders

So there’s a bug/limitation/pile-o-crap in CDO (the programmatic interface to use MAPI (the programmatic interface to get at & use Outlook or Exchange stuff)).  A key bit from the MSDN CDO reference:

Calendar folders are not supported in the public folders store provided with Microsoft® Exchange, and AppointmentItem objects are stored as Message objects. An attempt to read IsRecurring in this case returns CdoE_NO_SUPPORT.

This has majorly stunk for me, since I’m doing a project which needs to dump out some Exchange Public Calendars’ AppointmentItems, and to use their StartDate and EndDate properties.  Common refrains to this song and dance:

  • Public member ‘StartDate’ on type ‘Message’ not found. and Public member ‘EndDate’ on type ‘Message’ not found.
  • Ok, I’ll follow the guru’s advice, and explicitly force it to an AppointmentItem: ctype(oMsg, MAPI.AppointmentItem)… Nope, I still hear: Specified cast is not valid.
  • But wait, what’s the oMsg.Type?? IPM.Appointment is my answer. Well… (dead end).

Fortunately there’s this: MAPI Property Tags.  I can get at those two properties via CdoPR_START_DATE and CdoPR_End_DATE.


DIM dtStartDate as Date = oMsg.Fields(MAPI.CdoPropTags.CdoPR_START_DATE).Value
DIM dtEndDate as Date = oMsg.Fields(MAPI.CdoPropTags.CdoPR_End_DATE).Value

Not really properties, but something to work with at least. 

I hit the same problem with getting the users who originally posted and last modified an item, except worse — they seem to be documented nowhere.  I reverse-engineered the fields collection (dumped the data, looked for what I wanted, found the matching ID, converted to a hexadecimal property tag), and found them:

CONST CDoPR_RE_PostedBy = &H3FF8001F
CONST CDoPR_RE_ModifiedBy = &H3FFA001F
DIM strPostedBy as String = oMsg.Fields(CDoPR_RE_PostedBy).Value
DIM strModifiedBy as String = oMsg.Fields(CDoPR_RE_ModifiedBy).Value

I don’t see these tags in the CDO Property Tag list, and google searches for them come back empty.  (That said, consider my discovery subject to change with future versions.)

Too bad there also seems to be no way to use these property tags with a MessageFilter, or to get RecurrencePattern.

Unfortunately, this is part of a bigger problem.  I’m not sure, but I suspect CDO was simply never finished.  Get this: If you want to open a user-created folder, there’s no way to do so directly by name.  The normal method, getFolder(), only accepts a 76-digit FolderID!  There is a solution, but ain’t pretty.

Here’s another bonus from that same link:

If your application is running as a Microsoft® Windows NT® service, you cannot access the Microsoft Exchange Public Folders through the normal hierarchy because of a notification conflict. You must use the InfoStore objects Fields property to obtain the Microsoft Exchange property PR_IPM_PUBLIC_FOLDERS_ENTRYID, property tag &H66310102. This represents the top-level public folder and allows you to access all other public folders through its Folders property.

…And yes, that seems to apply to ASP.net applications.

Another gem (this seems so ludicrous that I want to doubt it): CDO MAPI in ASP.net needs to run with impersonation, even if the authenticated user has a matching Exchange account.  It did fix my problem, though, so there’s some more anecdotal evidence.  (Perhaps it’s actually the old Windows domain double-hop bug?)

In general, I’ve noticed CDO seems to require a whole lot of Hex flags to do simples operation like open a message object.  …Well, a whole lot for what should is supposed to be object-oriented code.  I’ve been wrapping up most of these basic operations with a class, but the vast amount of CDO hacks contained are too ugly to be seen here anytime soon. 

SO, Lemsons and the rest of the Exchange Team, have you touched CDO in the last 5 years???  It sure seems to be a stunted and abandoned technology.

good resource:
CDO Live (almost as outdated as CDO itself, though)