Archives / 2003 / October
  • Web, WinForms, and ???

    During the final breakout session I attended, Rocking the web with ASP.NET, the last question asked by the attendees was whether the winform and the web worlds would totally converge, now that we have an abstracted user interface model.  Scott Guthrie's response was that he didn't see this happening in the Whidbey timeframe, but he believes with the next version of VS (”Orcas,” from the future products timeline; not mentioned by name at the PDC to my knowledge) would allow for 3 user interface models. One would support fully rich user interfaces, and be the complete Longhorn/Avalon experience.  One would allow for total ubiquity of platform for the client.  And one would support “adaptive” rendering to the client. This should be relatively easy now that they have XAML/BAML.  Point towards resources (images, movies, behaviors), and the client will figure out how it can best show those resources to the end user based on the specs of the machine it's running on.  In conversations throughout the week, DonXML was speculating about the timeframe; it seemed a natural course, now that Microsoft has brought the User Interface into the XML world. Only time will tell; the popularity of Longhorn will determine how long those legacy platforms have to be supported.


  • VS.NET Whidbey First Impressions

    First install of VS Whidbey, and what do I discover? Web projects are not considered normal “projects” anymore.  Under File->New, the first two are Project and Web Site. The only web project in the first option is Web Control Library. Also, upon choosing Web Services, Visual Basic and J# are there (as well as C#), even though I chose not to install VB or J# during the install.

    • When creating a new project with a pre-existing name, VS prompts you to see if you want to overwrite the project. Finally! I don't have to delete the old files in explorer, and try again in VS!
    • When trying to run the web service, it complained there was no Web.config.  It offered to create one for me.  Kudos again! No unwanted extra files!


  • PDC Remarks - An Open Letter to MS

    Throughout the conference, my view on Microsoft and their policies towards developers has changed a great deal.  I had always pictured them as aloof, just wanting to make their products the best they could, and release them to the public, and leaving the support to MS support services.  OK, I was half right.  What they really want is for the developer community to help them find out what the best product is, and make it for the public. 

    I guess what most impressed me was the one-on-one interaction between developers and people on the product teams. I was given a long demonstration on MSH, and it was great - I proceeded to tell anyone else that would listen about how great it is.  MSDN answered my questions about why Windows 95 isn't available for download from the subscriber downloads, and even Windows 3.1 and MSDOS 5 are.  (Ask Sun why...) I got to talk to MS Research. I met people who are on the ASP.NET team, and got to directly ask them questions.

    So good job MS, hopefully we'll see the fruits of the community interaction in later betas.


  • MS "Media2Go"

    At the CES 2003 show, MS revealed their prototype for their Media2Go device.  It seems to be running on a scaled down version of  XP MCE. Full article by Paul Thurrot is available here.


  • Codename "MONAD"

    In one of the most overlooked cool things at the PDC (in my opinion, anyway), the new Command Shell that will be in Longhorn blew me away when I saw it.  I walked up to the booth asking if unix-like file aliases would be in the new shell, and was given a demo by the team that had my mind racing.

    First off, file aliases are possible.  WinFS type queries are possible through new commands called “commandlets” that you can write.  Similar to the unix pipe, you can do this with MSH (Microsoft shell / codename MONAD) as well.  Query results are actually .NET objects, so you can do things like (Don't quote me on the syntax; I'm working from memory here):

    $p = get/process FileName
    foreach ($p) { $p.ToString() }

    A rather simple example, but consider that you can do this from the command line!

    You can do WinFS filtering through the “|”  symbol. MONAD can also export natively to: HTML, XML, Excel, or plain command text in either a Table or List format.

    And....the commandlets are developer friendly.  You can make a commandlet by inheriting from the commandlet base class, and adding attribute tags to the public properties to make them parameters to the commandlet.  .NET handles whether the user types “-?” or “/?”, so you don't have to care anymore!

    I was all set to post that I had attended DOS's funeral after the keynote on Monday, but I wasn't prepared for what was being created to replace it.

    One last thing: anything can be mapped to a drive, and drives don't just have to be letters. (Ok, I lied - that was 2) The example I was shown was that the registry was mapped to a drive, and you could navigate it like any other drive, with the results being returned from the commandlet as .NET objects!


  • Extended Blog Conversation

    Here's what I came out with after the blogging birds of a feather session last night:

    The main issue with making an easy to read, filter, and search blogging tool utilizing the cool new search features of WinFS in Longhorn is the metadata.

    Point 1: Metadata needs to be standardized.

    I submit that the entire model of posting to individual aggregate sites, or worse, individual sites, is a model that should be discarded.  Instead, a server, which I'll call MAPDS for Metadata and Posting Distribution Server should decide where to crosspost to.  The sites which recieve the posts (waiting for a push from the central MAPDS), are specialized nodes with a registry on the MAPDS.  IE, my site has a url, title, and a list of metadata categories that I'd like to show up on my site.

    On a given blogger post to their account on MAPDS, the RSS/ATOM (hint: here's a way for ATOM to make significant advances), they also include metadata about their post so the server can figure out which nodes should be displaying it.

    Point 2: Metadata needs to be trusted / Metadata needs to be error-correcting

    On a rendered post, when the initial post is put up with it's poster-suggested metadata, users reading the site may add/approve/recommend for deletion a specific bit of metadata.  Once a server-set threshold of low moderated metadata score is reached, it is "deleted" from the page, although in reality future "adds" really just adjust the "deleted" items' score.

    Point 3: When performed on a large scale, moderation detects and FIXES "lies" in metadata.

    Now here's where .NET comes in: on the client side, you can have a WinFS data store with the ColumnTypes as the metadata.  So the final USER aggregator can sort by anything.

    Point 4:When a user first uses an aggregator, it should still be able to intelligently search.  under repeat usage, it should get smarter.

    On the client tool side, higher ranking is also given to moderation by blogs you have subscribed to. It's similar to "trusting" content by that blogger (sorry, I'm not sure who suggested that, but this one was not my idea). Lower increases to metadata rank is also given to blogs on the blogroll of the feeds that you add.

    Point 5: the more sites the user adds to their list, the "smarter" the search will get.

    This is the beautiful part - it's not necessarily because the metadata is more correct, but it's more likely to be harmonious with the user's way of thinking.  It's adaptive metadata for your profile in your OPML!

    Personally, with the popularity of blogs, I believe this app/server could be the “killer WinFS app” Gord Mangione was talking about during this morning's PDC keynote. Please feel free to provide feedback; I hope to have a demonstration app that implements some of these ideas on my personal server.  Clemens Vasters is on the right track with crossblogging, but I really think this is the next step.


  • Near the PDC

    Well, after an interesting flight (big fire near LA; we couldn't see ANYTHING out the plane for around 5 minutes), Scott, Doug, DonXML, and I made it to our hotels.  I have pictures from my camera at my moblog at if anyone's interested.  Off to watch the World Series game 6 now, at another conference hotel.  Westin Bonaventure seems pretty good so far.

    PS, my pictures RSS feed is at:


  • Using Windows Server 2003 As Dev

    While trying to program ASP.NET, I used my copy of Windows Server 2003 Enterprise to make my laptop into one smoking loaded development machine.  And it was good.  But as soon as I tried to install the Virtual PC drivers (needed to run the pocket pc emulator), it failed, saying that the likely culprit was that I was not an administrator (I am).

    Suffice it to say, I believe the Emulator Driver (Virtual PC Application Services), is fighting with Windows 2003. (Windows says that driver could not be found, after trying to run the “Smart Devices Emulator.msi” or Setup.exe, both in %VS.NET2003 Installation Directory%\CompactFrameworkSDK\ ConnectionManager\Bin\DriverInstall).

    I really am stymied with this one.


  • PDC and Future Security

    From the MSDN “General Articles” Section: Using the Emulator in Smart Device Projects.

    Administrator permissions lacking
    It is unlikely in practice that Visual Studio users do not have Administrator permissions. However, if this is the case, ask a user with Administrator permissions to log on to the development computer and deploy the emulator using either of the two preceding procedures.

    I wonder just how many of us have either tried giving ourselves limited permissions and give up due to frustration, or how many have just always used Administrator as their everyday user (yes, this includes UserXYZ who's a member of the Administrators group).

    MS needs to retool how user/program permissions work.  This should be transparent, and I'm not talking about the “Run As...” command.  I recall seeing someone post a bug where “Run As...” cleared out their favorites.  I'm talking no user-switching-necessary, application permissions,   I can't wait to see what new security features will be rolled out / described at the PDC. 

    Here are the sessions which I feel may best address this issue:

    ASP.NET Security Best Practices to Protect Against Hacker Attacks (Erik Olson)
    *CLR Under the Covers: .Net Framework Application Security (Ivan Medvedev, Sebastian Lange)
    Security Panel: What's Next? Directions in Security. (Carl Ellison, Chris Wysopal, Howard Schmidt, James Hamilton, Jason Garms)

    *This one looks really talks about “a new application identity based security and deployment model” ...this is a direction I can appreciate! Now if only it could work for individual instances of an application as well....


  • Preventing Postbacks on the Client Side

    Have you ever had the desire to prevent a form from posting back if certain conditions were met on a form? Suitable reasons would be for pages that send a large amount of data to/from the server on postback.  My first thought was that this could be handled by adding an OnSubmit to the form tag using the Form.Attributes.Add() method, but I found that whatever I added through codebehind was put in execution order AFTER the submit method.

    To get around this, first we need some client side scripting for validation:

    <script language=”javascript”>
    function clientValidation()
    //put code to grab some information from your form here
    var textValue = String(FormName.FormBox.value).toLowerCase();

    if (textValue.lastIndexOf(“failure value“)!=-1)
    {return false;}
    else {return true;}  

    The rest of the solution hinges on the way ASP.NET creates postbacks.  It inserts a client side script called “__doPostBack” to submit the form.  To circumvent, since javascript var's can hold just about anything, we'll replace __doPostBack with a slightly modified version:

    if (document.all)
    if (window.__doPostBack)  //if __doPostBack exists
    __doPostBack = function(eventTarget, eventArgument) //hijack the function
    if (clientValidation())

    //MS's __doPostBack body:
    var thisForm = document.FormName;

    else //we'll just alert here instead of submitting.
    {alert(”Textbox's value cannot be 'failure value'”);}

    And that's all there is to it.  Now you don't have to wait for the whole page to be sent up just to find out that your server validation method returned false. 


  • XP MCE 2004

    A CNET video shows the recently released Windows XP Media Center Edition 2004.  They cleaned up the UI, and added a few more features, along with the stability that is XP. Highlights: XPMCE - “Is it chocolate or is it peanut butter? ... It's both” --Rick Thompson, corp vice president