Very cool XBAP

Rob links to a very cool XBAP written by Eric Sink. Eric wrote this pretty cool application using WPF 3D support, and recommends people pickup 3D Programming for Windows by Charles Petzold.

I just got a copy of 3D programming and I'm dying to read it. Congratulations to Charles to finishing yet another book (my one and only almost killed me)!

XAML == JSON?

Miguel on Toshok on JSON. What I find even more interesting is that JSON, XAML, and C# 3.0 all share a very similiar data model. You can imagine some simple transformations to go from C# 3.0 member init syntax to XAML to JSON to XAML to CLR objects.

XAML talk done

I finished up my talk today. The room was pretty full, people seemed fairly engaged. I thought I had too much content so I rushed a bit, finishing 10 minutes early, but then no one had any questions (oops!).

Reading through the evals, and talking with people, it's obvious that I went too fast through some of the content - it was a lot of deep content that was somewhat subtle.

I'm going to post all my content and code up here in a couple days, hopefully with a better explanation.

Thanks everyone for coming to the talk, I had a blast (I hope you did also)!

Touchdown at TechEd

Just landed in Orlando... tomorrow AM is my presentation 'Xaml as a better C#'... still need to work through the demos to make sure it goes smoothly, but it should be fun.

Microsoft Technology Summit

Last week I had the opportunity to do a talk with a bunch of folks about Microsoft technology, in a talk entitled "How do we suck?".

Ben Galbraith has a good post summarizing the talk. I only have one objection with his transcription - I said that the Javascript engine in IE today needs massive improvement. In his transcript Ben left out the "Javascript" part. [of course, I also said that we are working hard on improving this, blah blah blah. I love the IE team and JavaScript team.]

The talk was a lot of fun. I love being open with customers.

Red vs. Blue vs. ASP.NET

Scott Guthrie is a special guest star on Red vs. Blue. The video player is written in WPF/E... Congrats!

Constraint-Based layout

Daniel sent me a mail with an interesting paper on Constraint-Based Document Layout for the Web [via email].

Reflector 5.0

Reflector 5.0 is released... still not WPF based though [from Chris Sells]

Pair programming

I had the opportunity to do two sessions of pair programming today. One with Brian Pepin the other with Randy Kimmerly (blog is *very* out of day). The two sessions where very different...

With Brian I was learning a bunch of new stuff, trying to dig into Brian's new project. Learning about Cider and the infrastructure they are building. Super interesting stuff. I was coding, primarily, and every once in a while Brian would shout "Move a cheek" meaning that I should step aside and let him code. It was super intensive learning on my part, and very cool output. I could barely leave work after the session - i wanted to just keep coding.

I headed over to Randy's house for Lumines and light (sometimes) drinking. Randy was jonesing to work on his project, and we ended up doing pair programming again. In this case we were trying to integrate some of my code into Randy's project. It was interesting, Brian is *way* more patient than I am, I pushed Randy aside far more quickly.

Both sessions were amazingly fun, very reminiscent of my sessions with Don. I really enjoy this type of work, the two people feeding off of each other, swapping in with new energy. Just amazingly fun.

What amazes me - this is my job!

I love life!

Political REST

Don is now bringing politics into the REST debate... didn't know he had that good of a sense of humor.

More *ML

UIML, jUIML, UsiXML... interesting stuff... The UIML Wiki page even mentions XAML :)

[sorry for the random links, just doing a little spelunking around the net... ]

ASP.NET AJAX Videos

Over on www.ASP.net they just released a bunch of tutorial videos. Very nice presentation, and I love that they start with installation. [via ScottGu]

WPF flow document editor (oh, and DOCX)

Rob Relyea points to the new OpenXML.biz editor...

Yahoo Pipes

This is a pretty cool application... The visual presentation is interesting, but the programming model - data flow - is even more compelling. Yahoo Pipes seems to provide a visual design surface (using AJAX, of course!) for doing query, transformation, and output of web content.

Vista and Office

Yesterday I received my order for Vista Ultimate and Office Ultimate. I'm already running Vista RTM bits on my main machine at home (I had a Beta and RC version, so I upgraded to RTM bits as soon as they were available internally. I believe this is the correct thing to do based on corporate policy... if not, someone should let me know. I did buy a full copy for every machine in my house once it was available).

This morning I kicked off the installation of Office, or rather the upgrade. Some comments:

  • the new packagine is clever, not too intrusive but distinctive. I think I like it.
  • Product keys suck. Having to type of 25 digit string of characters to install software is frustrating for me. Not too big of a deal on my PC - the one I really really really hate is doing this on the XBox.
  • The installation is running, and so far I have only had 1 UAC dialog prompt.

I really enjoy using Office 2007 at work, so I'm pretty happy to finally have it up and running at home.

 

Multi touch

In the spirit of everything can be found on the web - here is Jeff Han demonstrating a multi-touch display device. Of course, one of the problems is that he claims that a touch screen is a good replacement for a keyboard. A device with physical feedback for typing (and fixed position) enables your fingers to get a motor memory for typing. Jeff claiming that a keyboard that "follows" your fingers might be better seems less likely.

I would love to have multi-touch on my tablet though.

XIML?

RedWhale does XIML... a "multi-channel" UI model...

Unfortunately they seem to be promoting a uber presentation model - the one abstraction that can capture all other abstraction.

I believe we do need to increase the amount of shared code between applications that run in different contexts. I just don't believe that abstracting the difference between <button> and <input type='submit' /> is really the way to do it...

SketchUp

I've been doing a lot of 3D modeling lately, using Google's SketchUp (formerly from @Last software). I love the software so much that I put down my credit card and purchased a full version after enjoying the liberal 8 hour preview (8 hours of actual runtime in the software, which lasted me for quite a while).

The thing I find most impressive about this software is the gesteral nature of it. The interface does a fabulous job of "guessing" what you meant. I remember using AutoCad with a large tablet input device in the 90's - they had separate commands for snap-to-endpoint, snap-to-midpoint, etc... in SketchUp when you get close to the middle - snap... close to the end - snap. It's really quite nice.

One of my coworkers (Dave Peck) said that a bunch of the work in this space (3D gesterual interfaces) started croping up in the late 90's. I'm still buffering the video, but he pointed me to Robert Zeleznik's SIGGRAPH '96 video, as well other papers from Brown University including An Interface for Sketching 3D Curves (ACM 1999) and Drawing Strokes Directly On 3D Models (SIGGRAPH 2002).

I find the space facinating, especially considering the rather frustrating way this type of interface appears in Word (autocorrect seems to frustrate me consistently).

StandOut

This looks very cool - a new twist on presentation software. I"m somewhat frustrated by PowerPoint - the latest version is absolutely fabulous. I love the new graphical treatments. The templates are very nice. However, it still lacks the fluidity and polish that I see possible with WPF. I can't wait to try out StandOut to see if it can really produce something as nice as what I'd like to see.

Periodic table of visualization

Pretty interesting chart...

Happy Holidays

Episode 4 of Don and I singing... you didn't ask for it, but you got it!

Consolas for Visual Studio users

Consolas is one of the new fonts included in Vista, it is a font optimized for developers... very cool. You can download it now if you own Visual Studio.

Tracepoints

These sound totally cool... can't wait to play with them.

Blogging in Windows

I agree with a bunch of stuff that Robert McLaws says about Microsoft being a dinosaur, however I think that the various people blogging in Windows would disagree that Windows doesn't blog. We've released multiple CTPs of WinFX and Vista over the past year, and more to come (soon!). Windows is a big organization, very big (8,000 - 14,000 depending on how you count it!)... Of course I and some other folks think it should be smaller, but that rant can be another post.

Developer Division (which produce Visual Studio) is a much smaller organization, and has been leading in transparency. I've worked in DevDiv for many years, and now in Windows for several years, and the two groups definetly have different cultures. I'm happy to see the Windows group learning from DevDiv's experiments. I'm thrilled that CTPs are becoming a more common thing, that people are blogging more, and that community is becoming something that everyone thinks about.

I agree, we have a long way to go, I'm just not sure I understand your point in your post... Should we post internal milestone planning? Is it that you want to see our VP's blogging about our next release?

The right tool for the job

I often get the question about why we need multiple APIs or programming languages or whatever. While I haven't been in the woodshop for a while, I still like to make the comparison. There are certain tools that can do the job, while there are other tools that are the right tool for the job.

For example, an impact driver vs. a drill motor. Given a phillips head bit tip, either tool can drive a screw into a piece of wood. In basically all ways a good drill motor can replace an impact driver.

[as an asside, for those not familiar - a "drill motor" refers to the base (the motor) a what is normally called a "dill". The "impact driver" is a tool that specifically drives screws/bolts/etc using a combination or rotational force and impact (pounding). The result is that an impact driver has significantly less toruqe on the user, with better results on driving the target]

However, if I'm driving 100 screws into wood, i'll take the impact driver every day. It is the *optimal* tool for driving screws. It can't drill a hole though.

This morning I bought a copy of SnagIt, which is a screen capture program. A screen capture program! Alt+PrtScn works pretty well, right? Again, the built in Windows screen capture is OK, but SnagIt is the optimal tool. After five minutes of using it I saw how much better it was at grabbing a section of the screen, automatically converting the format, and overall streamlining the process I was doing for making figures for my book.

Which brings me to our developer platform.

The other day one of the developers on our team asked the question of why we needed two APIs for something. Basically the question was if we should, in the future, move to a single model for presentation. Today we have far too many - Windows Forms, ASP.NET, Avalon, Avalon/E, HTML, DHTML, Win32, DirectX, etc, etc. - and we don't always have clear guidance between them.

We ended up focusing the conversation of Avalon vs. DirectX. His argument was - the only reason someone would use DirectX in the future is for performance and access to low level hardware features. Avalon introduces some overhead when dealing with scene graphs and hides some of the DirectX features (Pixel shaders specifically in V1).

My view was different - I think that sometimes the right tool for the job varies for people. I think that developers will find one tool to be their "natural" tool for the job. Writing twitch games like Quake in Avalon, while possible, is not what I would consider to be the optimal tool. But why?

Let's flash forward to a future where Avalon has shipped several versions, has a robust API for pixel shaders, vertex shaders, 3D input, etc. In this future world we are 100% capable of writing twitch games. But, is it the right tool? I would argue that the design center for Avalon is building Applications, Documents, and Media. We have a control centric view of the world that relies heavily on data binding, templating, etc. Yes, you *can* build Quake, but what unique value are you getting from Avalon?

It's with this that I believe in a portfolio of APIs. I believe that there is a big tent of technology for presenting information to developers. HTML, and DHTML have a place. Windows Forms and Win32 have a place. DirectX has a place. It isn't about removing the options, but rather having a comprehensive view of the tools in the shop and picking the right one for a job.

These debates about "AJAX" vs. Avalon, or Windows Forms vs. ASP.NET, are wrong. When question is "when" to use each technology, not "if" you use each technology.

Client Settings

While cleaning up my Applications chapter I came across (again) the client settings API. I remember some of the work on this before I left the Windows Forms team, and it was great to see how the API shaped up. Even better, I ran into some issues and was able to find a bunch of information on Raghavendra's blog about the APIs. This whole internet thing might just work out.

PDC CTP WinFX WPF VS RC compatibility

Just a reminder to everyone - The Visual Studio 2005 RC that was given to PDC attendees and is available for download is *NOT* compatible with the WinFX PDC CTP bits that were handed out... WinFX CTPs are still running on Visual Studio Beta 2. PDC attendees got a copy of these bits in "The Goods", and anyone else can download the Beta from MSDN.

... and for clarification, yes, "WPF" is pronounced "Avalon"... the WPF is silent.

off to PDC

In about 12 minutes my ride is showing up to take me to the airport. On Friday I worked until about midnight on my demo that is part of Jim Allchin's keynote. Last PDC Don & I did the whole "Lap Around Longhorn" thing, and this year we set out to try and out do it... we have a lot more content, but actually a bit less time. It's hard to boil things down to be short enough, but still get the key messages across. In addition, we are having a couple extra people part of the song and dance, which makes everything a bit more "fun"!

This PDC is going to be amazing. I can't wait to get updated bits in their hands, see people's reactions to the new C# and VB features around query, and everything else we are announcing (Day 2 of the PDC will be AWESOME!).

I'm a little frustrated that we weren't able to deliver all the bits that I wanted to, but they will get out as soon as they are ready. All the teams involved with developers (Visual Studio, WinFX, Vista) have really embraced the CTP notion, which means we should be able to get real working bits to the customers sooner.

Sorry for the long delay in posting, but it's been *way* too much fun after coming back from Italy to get everything together for my talk and the keynote demo.

Jan's blog... not a yawn!

Jan Miksovsky, an ex-microsoftie, is blogging about UI design. Jan always impressed me, and came up with a lot of good ideas for building new UI that is far more understandable (PageFunctions in Avalon are one of these)...

This link is sponsored by the letters W and F

Dennis Pilarinos and Dharma Shukla are out there blogging... I've been chatting lately with Dharma about the future of Xaml and how it relates to his work. This PDC is going to be awesome!

Robbie "Mr. Style"...

Robbie is a program manager on Avalon, and gets the title of "Mr. Style" for two reasons - first, he is the PM owner of all the styles for Avalon controls, second, he has a good sense of style and visual appearance.

Robbie talks about the woes of reverse engineering styles, and then delivers a good solution by posting his simple style ported to Beta 1.

Of course, my favorite post to date was learning what a McGuffin is.

Another voice

ChuckJ joins the blogging fray... Chuck is a wickedly smart dude... He spent time working on the XAML spec amoung other things... Subscribed.

What is in a name...

Microsoft generally sucks at naming. I guess it isn't as much as we suck at naming, as we have a styling of naming that is boring, bland, and corporate. Ironwood became the Windows Foundation Classes. Avalon now has become "Windows Presentation Foundation"... I'm not even sure what a "Foundation" is, let alone what a "Presentaiton Foundation" is... are we creating a new form of concrete and rebar? Oh well.

I actually kinda like the new name for Longhorn - "Vista". I heard about it first on my vacation, on CNN. Funny how things work out.

Given the "great" name that Avalon got, I was a bit suprised that we didn't canll Longhorn - "Windows Operation System Foundation 6.0".

 

Clickless

Very interesting... Dontclick.it... [from Scoble]

Make it as rich as possible

ScottGu talks more about Atlas... I've said many times that I believe that projection based web apps harm humanity. It's an extreme position, but unfortunately true. The horrible interactivity, limited usage model, reliance on connectivity, bad typography, ... I can go on. However, they are required. In much the same way that keyboards cause you physical pain when you use them too much, I think that web apps are good when used in moderation. The thing I love about Atlas and Ajax (well, really DHTML) is that provided you can figure out how to do it - it helps make the human experience better. Whenever you build an application you should feel required to make the application as rich as possible. Hopefully with Atlas we can raise the minimum bar for the web experience, and remove some of the harm out of the web.

Hiring practices

Rob defends asking questions of PhD's after Ian decries them (is that the right use of the word?)

I have to say, I totally agree with Rob. If you are interviewing for a product group position (not research) as a senior software developer or architect, then I expect you to be able to code. I don't ask trick questions in interviews, I ask questions that I don't expect people to know the answer and then see them think.

I used to ask "write IntersectRect" all the time. It's a relatively simple problem, but people generally don't know the answer off the top of their head. The key is to see their thinking process, and ability to write code.

I remember interviewing an established PhD from another major software company, and when I asked him this question he seemed insulted. When I pushed for him to answer, he wasn't able to even code up the brute force approach to the problem. He may have been a fabulous theoretical compsci person, but he wouldn't have worked out well on a product team.

Now, to caveat this - we often divide the loop up looking to have each interviewer evaluate different things. In this case I was evaluating this person's coding skills. It's not to say that this person couldn't have worked out well at Microsoft, but rather that he did poorly for the skills *I* was looking for.

Monad madness

Monad is alive and kicking! Adam is blogging about all the cool stuff you can do.

I'm frustrated that the Monad folks still don't "get it" from a stand point of distributing a beta, but if you have a passport account you can get a copy of the beta through http://beta.microsoft.com. Use the guest ID of "mshPDC", select "Microsoft Command Shell", select "Survey" in the left column, and 48 hours later you should get access. Why can't they just make it a link?

I've been using Monad as my command shell replacement and it's pretty slick. Having to learn a new command set is challenging, but most of the familiar old commands are available.

One of the most interesting things about Monad is that it is a real dynamic language from Microsoft. Monad's command shell is really just a script interpretter, meaning that you can define variables, use for loops, etc, all from the command window.

Congrats on the latest release folks!

Kramer on the core

We have another blogger in the midst for Avalon - Nick Kramer (rss). Nick is a PM on the Avalon core, his blog is diving into some great low level topics like our threading model.

Toshiba Tecra M4 Review

I really wanted to get a full featured Tablet PC – something that would be able to run Longhorn and Avalon great. Of course, Avalon and Longhorn will run on most of today’s hardware, but for doing demos and presentations I wanted a machine that would really just blow people away (hopefully!).

 

The Tecra M4 is the first tablet that I’ve owned, so I have feedback not only on the machine, but also the general tablet functionality.

 

Specs

I loaded the M4 up – 2GB RAM, 80GB HD (5400RPM), DVD, Wireless A/B/G, Bluetooth, 2.13Ghz M. It’s fast, it’s heavy, it’s big. But so far it seems setup to be a good desktop replacement laptop, with tablet functionality. The display is only 1400x1050 on the internal screen, which at 14.1” means that the DPI is much lower than most tablets. However, the 128MB NVidia 6600 TE is smoking, and can do things in 3D that are amazing, especially for a 5W part.

 

Mechanics

I’m not sure how it will hold up over time, but the build quality seems pretty good. With the notable exception of the single hinge for the screen, this is way underpowered to hold the 14.1” screen. The screen bobbles slightly when I type, however it doesn’t squeak like my old Dell used to. I like the keyboard, it is responsive. I had a Toshiba long ago, so the funky placement of some keys don’t bother me too much. The placement of the DVD eject button and “one note” button are in a bad place for using it in tablet mode, but there is a software “off” button for the DVD, and a physical lock for the “one note” button.

 

My main concern about getting the machine was size – weight and physical dimensions. The weight isn’t horrible, definitely not a comfortable one hand hold, but acceptable. The physical dimensions are totally tolerable, until you try to read in tablet mode. The screen is just too big (not something I thought I’d ever say about a laptop). The display is bigger than an 8.5” x 11” sheet of paper, making it actually a little straining to move your heard around to read a document form the top to bottom of the screen.

 

Performance

So far, absolutely amazing. The hard drive is notably the weak point. The default settings on the HDD protection (stops the disk to avoid damage when shaken) are really sensitive, which means it pauses a lot while walking. The 5400RPM isn’t spectacular, it’s probably the thing that I’m least impressed with (even a 7200RPM laptop drive isn’t spectacular). The video card is just awesome. Startup on the machine is relatively quick.

 

The number of little crapplets that come with the machine is ridiculous. By the time you log into your desktop there is 450MB of programs running (something like 72 processes!!!). Every component of the system has some special application.

 

Docking station

I got the “port replicator” instead of the bigger docking station. So far it is the fast dock/undock I’ve seen on a laptop. I’ve yet to get it into the doomed “laptop thinks it is docked but it really isn’t” mode that plagued me with my last dell. The replicator has DVI out, lots of USB ports, firewire, etc. Overall a very functional simple design.

 

Battery Life

I’ve ordered the second (drive bay) battery, so right now I’m just living with the built in. I get about 2.5 hours of continuous use, including running some Avalon apps that exercise the 3D card. The power management app that comes with the machine is nice and allows you to have settings for DVD playback, full power, max life, etc. I run on ‘normal’ for battery and ‘full power’ for AC (defaults). The recharge of the battery is pretty slow, while using the laptop, it seems to take a long time to charge back a couple hours of usage.

 

Software

The tack-on application that come with the Tosh are overall pretty nice. They look good, and most of them are function. The Cross-Bar menu application is pretty cool (hold down the four way joystick and you get a menu of common functions that you can easily use with the pen). The power management console replacement is nice and simple to understand (but has way too many options). The HDD protection control is, well easy to control. Besides having way too many of them running by default, they are acceptable.

 

Style

The Toshiba dual tone black/silver motif won’t win any design awards or get anyone to turn their heads (unlike the Apple and Sony industrial design). The design is simple, and relatively clean. A net neutral for the machine.

 

Windows Tablet Edition

Since this is my first time using a tablet as a primary machine, a big part of my experience is Windows. In general it works. It recognizes my hand writing pretty well. Trying to type my password using the pen is tough, but most places it works. The built in applications (Ink Art!) are cool and elegant. The ink panel is a little hard to get to come up sometimes, and there are way too many small things to try and click on with the pen. We really need a more pen friendly set of resize gadgets, menus, etc.

 

Summary

Overall the machine is a bit bigger and heavier than I would like, but it means I really only need on machine for meetings and presentations, which is a huge win. I’m not 100% blown away with the machine, but it is really nice. The upcoming set of tablets this summer will be spectacular, but if you want a desktop replacement machine I can recommend the M4.

 

Score: 3.5 (out of 5)

Avalon/Indigo Beta 1 RC

After you go download Avalon and Indigo Beta 1 RC, you can play with my latest version of AvPad, which includes the scripting support I've been blogging about lately. Because I haven't downloaded the signed version yet, I only included the source, so you'll have to compile yourself.

Of note, there is a complete custom style "custom.xaml" in the AvPad project - so if you are struggling with updating your syntax to the new styling model, you should check it out.

AvPad Source

The Hobbyist and the Script

Wes talked about hobbyist developers last month... With the work I've been doing (ok, not work, but play) on Python and Avalon, I've really come to the conclusion that Microsoft is missing the boat around dynamic languages and scripting in general. I have been a huge advocate of strongly typed languages, and not confusing scripting with a real application development platform.

Scripting is great for glue code - the same thing that VB1 and 2 used to be great at. VB3 started to get into the serious app development with rich data integration, and VB4 brought us into the 32-bit era, and in a way back to glue code. VB4's embracing ActiveX controls gave VB developers an entirely new place to play. I remember working on an application using a beta of VB5 and writing my "hard core code" in MFC ActiveX controls. After a while I started writing more and more of the code in VB, because it worked and wasn't the bottle neck in anyway for the application.

I think that scripting and many dynamic languages are in the same camp. They are great for small applications and writing glue code. Look at Google Maps, the real processing is on the server, and the client side AJAX is just the glue between the user, the browser, and the backend server. I would argue that something more beefy like Outlook Web Access (a Microsoft AJAX application, writen before AJAX was the name) demonstrates more of the limitations of writing the majority of your client interface in script.

Regardless of the limitations, our singular focus on strongly typed compiled languages has blinded us to the amazing productivity and approachability of dynamic scripting langauges like Python and Ruby. I'm super excited that we are changing this. Hiring Jim Hugunin is a great start. I hope we continue this, and really look to add a strong dynamic language and scripting story to our developer portfolio.

Practical python

I've added a couple more features, and merged some code with John. So, now I have a PyConsole control that can be used in any application to get a interactive python console. PyExpr, which allows for attributes to be set to python expression (<Button Content="{PyExpr 4+4}" />). And PyScript which I've been showing at length here.

Yesterday I decided to actually write something usefull with this. With about 161 lines total (about 80 python, 80 xaml) I wrote a class browser, complete with filtering! Having interactive scripting (no F5, no refresh, nothing!) is amazingly productive. I wouldn't want to build a big application using this stuff, but for glueing together other components, this is such a slick model.

Probably the neatest python feature used, list filtering:

allprops = [pi for pi in t.GetProperties() if pi.Name.Contains(_filter.Text)]

Also ran into a nasty Avalon layout bug that i'll have to have someone look at on monday. The scrollviewer just seems to not want to cooporate with my layout.

 

Complete source for the class browser.

Python binding

In a comment Rick says "Hey, you do realize that Python has excellent list/tuple/dictionary objects, right? You shouldn't need to make a special ICustomTypeDescriptor to do what you're doing."

I had to enable GetHashCode and SyncRoot on list to get rid of the call to ToObjectArray(). Once i did that, I could then directly bind to python lists... wahoo!

Next, Touples are already exposed as IEnumerables, so they work naturally as a list... but you can't bind to the members. Without changes to the binding infrastructure I think a list is the best we can get.

Finally, I just added ICD to Dict, which enables binding directly to the named items in a dictionary. This is actually pretty nice, and something we should consider adding to data binding directly. It's very slick to be able to bind using keys to the items in a dictionary...

_list.ItemsSource = [
  {'name':'string', 'value':'cool value'},
  {'name':'button', 'value':Button(Content='cooler value')},
  {'name':'textbox', 'value':TextBox(Text='whatever')},
  {'name':'colors', 'value':ListBox(
     ItemsSource=[color for color in dir(Colors)],
     Height=75,
     Width=150)},
]

Notice that i'm also able to bind to list comprehensions and everything! :)

In another comment Drew asks "Do you know if they support IExpando yet? Support would be pretty easy to add I assume and would have some benefits as I discuss here"

It doesn't appear that IronPython supports IExpando. I don't use unmanaged scripting engines really, so I'm not going to try and add it. Binding into Avalon is my focus right now.

And finally Christian says "Off topic: How do you measure the builds? I see on the AvPad screenshot that this is build "0001". Is this really build 1 of this version? Do you always increment when you rebuild in VS?"

I manually increment the build version when I publish a new release. I've been working on 1.2.0.0001 for a while now. I woulnd't mind using auto-increment, i've just been too lazy to do it.

More python

ok... First, shared source just rocks. I spent the last several hours implementing a new feature in IronPython, exposing dynamic properties through ICustomTypeDescriptor... no waiting for months to debate the feature, nothing. If Jim decides that the feature sucks, no worries. If he loves it, I'll send him the source code... super cool.

Second, what this means is that I can now data bind to the properties that I attach in python... combine that with ContentControl, and you suddenly get true cool stuff...

To really appreciate the picture, you have to grok this:

class Item(Object):
  pass

a = Item()
a.name = 'first'
a.value = 'cool value'

b = Item()
b.name = 'second'
b.value = Button(Content='cooler value')

c = Item()
c.name = 'third'
c.value = TextBox(Text='whatever')

_list.ItemsSource = [a, b, c].GetObjectArray()

_list is the ListBox, I have a template (style.visualtree) that simply has two content controls, one bound to "name", the other to "value". I define a new type in python, with *no properties*. I then dynamically assign anything to the objects with the name "name" and "value"... everything else is Avalon + Python goodness... oh yeah!

 

DiveIntoPython

Gossman suggests "DiveIntoPython" for learning the details of Python... I'm a little addicted right now... lambda functions... touples... tasty dynamic language... mmmmmmm...

Inspiration in python

Inspiration from John Gossman, and access to AvPad's sources... as soon as the new CTP is released this code will run inside of AvPad... oh yeah, that's what i'm talking about!

<?Mapping ClrNamespace="System" Assembly="mscorlib" XmlNamespace="Sys" ?>
<?Mapping ClrNamespace="AvPad.Controls" Assembly="AvPad" XmlNamespace="application/avpad" ?>
<Grid
    xmlns:sys="Sys" xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
    xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"
    xmlns:ap="application/avpad"
  >
  <Grid.Resources>
  </Grid.Resources>
  <Button Name="_button" HorizontalAlignment="Center" VerticalAlignment="Center">
      Hello World
  </Button>
<ap:PyScript xml:space="preserve">

def click(sender, e):
  MessageBox.Show('hello')

_button.Click += click
</ap:PyScript>

</Grid>

Ed's defense of Navigation

In response to my post yesterday, Ed fires back with some good points about user model, window management, and familiarity...

"While there are tons of sexy features coming in Avalon, my money is on navigation as the single most important feature. Sure, the MIL, simple 3D, styling, declarative design, great tools, interop, etc, are all cool, but navigation is what Windows client programming is most sorely missing today and will benefit most from in Avalon." [Ed Kaim]

The book - "Programming Avalon"

OK, a progress report on the authoring...

First, I submitted my chapter by chapter schedule for the book. Ten chapters (I wanted 7, but the Overview, Interop, and Base Services pushed me over the limit).

  • Chapter 1: Due 12/15 (yes, this is the last chapter i'll write)
  • Chapter 2: 5/27
  • Chapter 3: 6/13
  • Chapter 4: 10/4
  • Chapter 5: 10/13
  • Chapter 6: 10/25
  • Chapter 7: 11/1
  • Chapter 8: 11/7
  • Chapter 9: 11/17
  • Chapter 10: 12/2

My target for the book is ~350 pages. I'm taking some advice to heart - make the book as short as possible, but no shorter (with appologies to Albert).

I have approximately 25 pages written to date. My goal is to try and do about 20 pages a week. I'll have ~6 weeks off for a long vacation this summer, and ~4 weeks off for the PDC. The goal is to sim-ship the book with the release of Avalon.

I've created a new category on the blog "Programming Avalon" for future posts about the book.

50th .NET Show

The .NET Show turned 50, and now they have the clout to get an interview with Bill! :)

Ready to rock and roll on the book

Alrighty, today I had a conference call meeting with my team at Addison Wesley that will be involved in the writing of my book. I'm still looking at getting together with Don, but for now I'm pushing forward until we work out the details.

By EOD Wednesday I need to have a chapter by chapter schedule for the book. Should be fun.

I'm planning on releasing excerpts from the book up here on my web site, publised in the new "Metro" document format that we announced at WinHEC. Should be a lot of fun.

Tonight I need to get going on the Preface, as that is my first deliverable to the publisher. Tomorrow night I'll work on my schedule for the rest of the chapters. Should be a fun summer.

Another declarative programming UI model

Boxely, the runtime for the latest AOL IM client, gets exposed in a three part article by Joe Hewitt (part 1, part 2, part 3)... Sounds very interesting, simpler data binding, XML stylesheets, etc. I'm not positive but the inclusion of "9-slice backgrounds" (which sounds a lot like 9-grid bitmaps in XP themes), seems to indicate that they are going with a funamentally pixel based approach. Probably the right call for an application runtime... vectors for everything are actually really really hard.

Why are test tools included in the architect edition?

I installed Beta 2 of Team Server, and I grabbed the "architect" edition, since that is my title :)... I was sorely disappointed to see that the testing tools aren't included. The unit testing framework is probably one of the coolest features I've hit in Team Server so far... bummer that I now have to download and install a whoel different version just to get them...

Quartz, a new codename for me

As I learned from internal and external folks in comments about my previous post, Quartz is also the name for the DirectShow runtime in Windows. Avalon doesn't directly use DirectShow. When playing video, i've been told, the DirectShow runtime will be loaded by the media subsystem. However, for rendering of all other content (2D, 3D, animations, etc.) the dependency is only on Direct3D.

Always good to be reminded of how little you know :)

MIL Information

Videoguy asks in a comment: "Is there yet more specific information about MIL around? I mean it looks like Avalon uses MIL to interact with the media elements. Is MIL using Quartz (through DX?) on both XP and Longhorn or something else? Can you elaborate on why MIL lives apparently on a native DLL?

If there's some presentation coming or that already answers these questions I'll gladly take a pointer to such too.
"

Quartz is a Mac OS/X feature, so I think we can rule that out on Windows ;-)

As for the rest, there are two definitions of "MIL" for Avalon. MIL standads for the "Media Integration Layer", and typically refers to either the set of technology that our MIL team produces, or the set of technology that resides in MILCORE.DLL.

MILCORE.DLL is the unmanaged composition engine that Avalon uses for rendering. It is a layer above Direct3D, giving us basic 2D, 3D, Animation, and Composition services (probably a few others i'm forgetting to mention also). The composition engine is unmanaged primarily for interop/performance reasons. The composition engine spends most of it's time talking to Direct3D. In addition, there are multiple customers of the composition engine, including some that can't take a managed code dependency right now.

There is also another unmanaged DLL, WindowsCodecs.dll, which houses all the unmanaged implementation of our imaging codecs - BMP, JPG, etc.

The rest of the core that the MIL team produces lives in PresentationCore.DLL. This is the low level APIs of Avalon, dealing with the base Visual system (2D, 3D, etc.) that is a combination of wrappers ontop of MILCORE.DLL, and a set of value add features written in managed code. Also in the Core is the base implementation for UIElement and ContentElement - the roots our our display element and typographic hierarchies.

Avalon on Channel 9

Pablo, Arik, and Karsten do the dance on Channel 9...

Adobe and Macromedia

Yep, it's official, Adobe and Macromedia have merged. Wow. Lots of traffic on this in the blogs today... should be interesting to see what everyone's reaction will be.

Dave Shea on Avalon and XAML

Dave saw a presentation on Avalon at Flash In The Can, and had some interesting take aways...

On 3D: "I’m somewhat unclear how detailed the native 3D rendering support is. There was a demo of multiple video sources being mapped to rotating spheres, so there’s at least a few basic shapes and textures. My confusion is partially the result of the ‘special guests’ pulled on stage — a software company that created a 3D -> Flash convertor, which it had adapted for Avalon. Given Flash’s lack of native 3D object support, hence the need for this tool, I’m left wondering what that means for Avalon’s 3D support."

The big difference here is that Zam3D for Avalon allows the full 3D model to be brought into Avalon. You can rotate at runtime, zoom around the model, change lighting, etc. Their Flash based product flatens the 3D to a fixed series of 2D vectors, which gives you a fixed movie, instead of an environment.

On XAML: "The code itself looks like (well-formed) tag soup from 1997. Whereas the web has seen a shift from presentational markup (in the form of tables, embedded attributes like bgcolor, and the dreaded font tag) to structural markup with a separated presentation layer (CSS), XAML is purely a presentational language. I couldn’t see evidence of attention toward semantics, and all the presentational attributes are embedded right in the markup. Januszewski referenced ‘a CSS-like syntax’, but there’s nothing CSS-like about it. It’s ugly presentational HTML all over again. A sample snippet:"

Ah, here is one thing that I think just didn't show through on the demo. Avalon uses a very powerful styling system to allow exactly the type of semantics that Dave talks about. You can have simple markup ("<Button />") and then elsewhere declare exactly what the button looks like (using "<Style.VisualTree>"). I think the biggest difference with Avalon's model is that it is extensible. CSS works great for the fixed set of ~200 attributes that they define, and for their fixed set of elements (I understand that CSS can be applied to arbitrary XML, however the output is limited to the browser HTML render).

This is a platform, so all of this works seamlessly with accessibility, globalization, etc.

On web integration: "I’d be a whole lot more comfortable with XAML if it were strictly meant as a Windows OS rendering language. Proprietary markup on a proprietary platform is nothing to get worked up over. But the obvious web cross-over leads me to hope we’re not going to see a whole new generation of browser/OS-specific web apps. I wonder if Microsoft might be hoping for something different."

Avalon is a Windows platform technology. XAML is a language for binding CLR objects into markup. Avalon elements in XAML is a Windows application markup. The ability to seamlessly deploy and integrate Avalon based applications into the browser is our attempt to bridge the worlds of the web and Windows. Today application authors are forced to choose between rich client applications and familiar browser activation, hosting, and ui models. With Avalon we are trying to make it so that people that want to build rich client applications can leverage the user's familiarity with the browser.

On devices: "What will this code do on a PocketPC or PalmOS cell phone?"

This is a fabulous question, and I can say right now, I don't know. There is some hope that we could build a PocketPC version of Avalon (much in the same way there is a PocketPC version of Win32/User32/GDI/WinForms/etc.). PalmOS is probably not doable, because it isn't based on Windows (Avalon is pretty closely tied to DirectX, which is available for PocketPC but not, to my knowledge, PalmOS - there are other OS dependencies there as well, this is just one example).

Building client software for Phones/PDAs/TVs/etc have very different input and usage patterns. This is an area that I'm really interested in - how much can you really reuse the UI? I'm all for saving the business objects, which I can do today using .NET Compact Framework, but when it comes to the UI, I'm not convinced that any level of styling will make my desktop application "just work" on my cell phone.

Dave isn't universally down on Avalon... there are some great quotes in there:

On Quartz and Avalon: "Without getting too carried away with the specifics though, what seems to be the main difference between Quartz and Avalon is the openness and flexibility."

Anyway, Dave, keep the feedback coming.

If anyone out there knows Dave, I'd love to chat with him via phone, email, or in person.

Avalon designers...

I've been meaning to blog about Zam 3D ever since I saw them at a recent customer event on campus... Michael Swanson reminded me that they released they CTP build... Super cool tool...

When people ask why Xaml was based on XML, this is a great response!

Jeremy wants to scrape your brain...

Want to contribute to the future direction of PDC? Jeremy Mazner is trying to plan the next PDC and wants you to chime in...

Opinions anyone?

Chris Brumme... come home!

Please join me in the campaign to bring Bring back Chris Brumme's blog. Not only is he way smarter than me, but he also has a wicked sense of humor!

Fil Fortes, "Master of Text", starts posting again

Fil is posting again, about text, of course... Fil recently won an award for the best dressed Avalon team member, you'll have to ask him to figure out why...

Avalon and Indigo for All!

The Avalon and Indigo March CTP is now available for anyone to download! Get it while it's hot!

Nathan blogging

Nathan showed me the empty site for www.designerslove.net, but at the time he didn't have content... wahoo!, he is posting!

Uhm... except I can't his RSS feed (only atom), and I can't find the permalinks on his site... and there isn't any comments... ouch.

Either way, Nathan is the man behind all the cool visuals we use in Avalon demos. His 3D button is freakin' amazing!

Joe (ex-Avalon, now Google) chimes in on 20% time

Joe Beda gives his take on Google's 20% time... I find the whole idea of 20% time (which I've heard lots of talk about before) to be tremendously interesting and something that I think more companies should do. The idea that you trust your employees to do the right thing is pretty empowering. Personally I think this applies beyond just the software industry, but it's a good place to start!

Visual Studio Team Server pricing debate

I'm not sure on which side of the debate I fall, mostly because I haven't dug into the Team Server business, but I find it completely encouraging that we are having a debate with our customers about the pricing model, on their own turf. Prashant Sridharan and Rick LaPlante are *the* guys to have this debate with, so it's just awesome to see them engaging on this in a transparent way.

Try this...

Rev 8 of AvPad... I spent a couple hours this morning rebuilding my dev box with (hopefully) the right signed bits, so you should be able to run it now... Sources are still available...

AvPad... my bad

Turns out that my March CTP machine had a slightly different build of the CTP than what we distributed (basically I had an RC on my machine). So, trying to "run" AvPad won't work for anyone. You can download the sources and recompile and it should work. I'm working on getting a copy of the official build we released, at which point I can safely repost the build.

As a side note, it seems pretty screwed up that our binding story to assemblies is so strong that a dot-release on an RC causes everything to fail. I hope I can track down someone on the loader team to explain to me why this should work this way.

AvPad fixes

I removed the dependency from AvPad to PresentationFramework.Luna... I used this reference when building the new style for all my controls, but it wasn't actually needed to run. According to the comments, it sounds like this was biting some people when running...

As a side note, I set the update frequency to be 3 days, so if you really want to pickup the new fix immediately, you will need to click the run link again.

Run, or download the source and binaries.

March CTP != VS 2005 Beta 2

Sorry Kevin, but alas the Avalon/Indigo March CTP will not be compatible with Visual Studio 2005 Beta 2 when it is released...

Trusted sites and March CTP

Ah, a key thing I forgot to mention was that ClickOnce in the March CTP requires the site to be in the trusted sites list to work (or Authenticode sign the app)... this will be corrected in a future release, but for now you can either add http://blog.simplegeek.com to your trusted sites list, or down the application and run it locally.

XamlPad clone... "AvPad"

OK, with the new March CTP builds (get it today for MSDN, soon for everyone!), I did some major overhauls of "XP", my XamlPad clone. Now it's called AvPad... Some new features:

  1. Ships with a complete custom style for all Avalon controls
  2. New "radial" menus animate in from the corner (ok, this is kinda a hacked in feature <G>)
  3. Better background parsing (waits to parse based upon the duration of time it takes to parse)
  4. Child window manager implementation
  5. Visual tree viewer

Note Because this requires the March CTP, this will not auto-install if you have the previous version of "xp" installed. You must choose "run" below to get the new ClickOnce subscription...

Run

Source and Binaries

WinFX: Avalon + Indigo March CTP

Oh yes Sam, we released again! For right now it's only available to MSDN subscribers...

This new CTP marks the first combined Avalon and Indigo release since PDC 2003. It is awesome to be able to use recent bits from both stacks together.

CTPs are relatively tough things - we release effectively "daily" builds from the labs and publish them. Expect a non-trivial number of blocking bugs and good set of release notes. That disclaimer said, this is by far the best release of Avalon we have had.

Tomorrow morning I'll post the new version of AvPad (my renamed version of XamlPad), complete with a new style for all controls, custom layouts, custom controls, background parsing, all sorts of fun!

True skunkworks software development

Ron Avitzur writes about the very interesting history of the Apple graphing calculator... the story seems almost unbelievable, but it's on the internet so it must be true, right?

"Apple at that time had a strong tradition of skunkworks projects, in which engineers continued to work on canceled projects in hopes of producing demos that would inspire management to revive them. On occasion, they succeeded. One project, appropriately code-named Spectre, was canceled and restarted no fewer than five times. Engineers worked after hours on their skunkworks, in addition to working full time on their assigned projects. Greg and I, as nonemployees who had no daytime responsibilities, were merely extending this tradition to the next level."

TheServerSide.NET interview

Late last year I was interviewed by the folks over at TheServerSide... it just went live... wahoo!

XML is like...

From Chris Maden through Ewald:

"XML is like violence: if it doesn't solve your problem, you aren't using enough of it"

Sells stays over...

I learned a valuable lesson last night... you see, after going out last night (and lacking a car because of the dead M3), I asked Chris Sells to give me a ride home. He is up from Portland and normally crashes over at Don Box's house. It ended up that it was just way easier to have Chris crash at my place last night. It was late-ish when we got to the house, and we both quickly said we were tired... Ah, but one last thing, said Chris, can you print me out a map?

3 hours later and endless debates on the future of Avalon, Windows, Microsoft, the Internet, and other fun topics we finally actually made it to bed. My key learnings:

  1. Chris appears to enjoy debate as much as I do - if not, he can fake it pretty well
  2. Chris is freaky smart
  3. Chris is really tall
  4. Don't start talking about technology with Chris at 11pm.

I was pretty tired this morning trying to get up at 5:30...

Want a font?

FontLeech seems to be a cool source for free fonts...

Book update

I've started writing a book... I'm in contract negotiations, which are super fun (right!). I've paid a lawyer lots of money to make sure that I don't mess up the contract. I have a pretty solid outline, and after feedback from Don I have shrunk the book down to around ~350 pages... shorter is better.

Now, comes the fun. Don has been really helping me a lot getting the book going, and now he is starting to think about writing his own book, which may result is the two of us writing a book together. Personally this sounds pretty cool. So, as a blatent copy, let me try looking at my options:

Option 1: Write my Avalon book

Pros:

  • I'm already working on it
  • Simpler story and I already know how I'm going to tell it

Cons:

  • I'll be directly competing with some friends
  • It's focused on one technology, not the entire platform

Option 2: Write the combined Indigo/Avalon book

Pros:

  • Get to tell the story about the platform, not the technology silos
  • Get to work directly with Don

Cons:

  • Writing with a co-author. Since I've never written this might be a challenge
  • Potentially having to restart negotiations over the contract

(side note: I've tried re-enabling comments... hopefully the spammers won't ruin it for everyone. I have captcha, etc, so lets see...)

Ajax for the web

Adaptive Path founder (hadn't heard of them before) Jesse James Garrett talks about Ajax as a web back/front end, saying that it is the engine behind Google maps and other web properties. Very interesting stuff.

Presentations... white on black

I think Brad is missing the point about non MSFT traditional presentations... The point is not "get rid of good graphics" - personally I can't stand the internal presentations that people do with black text on white background. It just appears that they never even thought about how to present their message. The typeface you choose, the background, the words you choose - all impact the message you send. What I'm trying these days is using stock.xchng to add lots of photos to convey my message. Ends up looking nice and polished, and people remember (or seem to remember) what you said.

That said, I think everyone who does presentations should read Beyond Bullets (the blog)... I've ordered the book, and I'll let you all know how that goes. It's not the end all be all blog on presentations, but it is a great resource.

Black hole projects...

Paul reflects on the bad of black hole projects, and the flip side, the signs that a black hole project might just succeed. I think I want to start a black hole project (I have an idea), but I want to make sure that I only start if it can succeed... Hopefully I can get some of the positives that Paul points to, while carefully avoiding the pit of failure (I like the pit of success much better).

Edward Tufte on presenting...

Not that I normally think of Edward Tufte as a presenter (I don't think he is bad or anything, I just haven't seen him present ever), Chris Sells got some great insight from ET on data density and presenting.

Custom animation types in Avalon

IanG animates FontSize, showing the flexibility of the animation system in Avalon. Very cool!

Youngest video blogger

Probably missed this meme, but this is a pretty cool story about Dylan's video blog... [from BoingBoing]

(side note, is there really any point to re-linking to something once BoingBoing has it?)

Google Maps

The interactivity on the Google Maps stuff [link from Scoble] is pretty amazing. The incremental download, no round tripping, all is very slick. The nice drop shadows... just beautiful. Congrats folks on a great beta release!

Writing

I'm slightly blocked on writing my book. I'm not stumped, I just took a short break, then realized how many breaking changes are pending. Before I dive in again I'm going to snap my machine to a more recent build and make more progress. I will take some advice from Steven King though [link from The .NET Guy]

Brundage on Microsoft

Michael Brundage has an essay called "Working At Microsoft" [link from Dare]. The most interesting thing, the biggest part of the post is dedicated to how bad many of the line level managers are at Microsoft. Michael gives fair coverage, talking about the good parts of the 'soft also. Management and leadership matter.

Kevin Moore (Avalon PM) having a geek dinner

Kevin Moore is a PM on the Avalon team, and is looking to get together with a few folks in the small town of London. Any takers?

iPod Convert

After configuring Megan's iPod I caved. I couldn't resist anymore. The industrial design on the iPod is absolutely amazing. The usability of the device is light years beyond anything else I've seen. The accessories are fabulous (RF broadcast, car adapters, docking stations with speakers, etc.). iTunes is a great music player, the "browse" feature is very slick and easy to use.

In addition, since Megan buys music through iTunes, I can only listen to them on an iPod.

Today (well, actually yesterday), I went back to the Apple store and picked up a 40GB iPod for myself. We both loaded up on accessories. Case for Megan. JBL on stage speaker dock for each of us at work. Car adapter to share for long trips. The great thing is that since we now have two full sets of the default accessories, we can have a dock permanently placed in my audio system for party playback.

Wow, this is a cool photo site...

stock.xchng is a pretty amazing site... Corbis quality (well, maybe not that nice) images for free? Can't figure out the catch... wow.

The Book

I've written a proposal to a major publishing house. I've talked with several people that have written books. I've considered co-authoring with people. At this point a lot is up in the air (I still haven't gotten an offer from the publishing house), but I think things are moving forward. I've started writing and I have about 12 pages of real material. I'm going to try to set some rules - at least 1 page a day, at least 25 pages a week. Both are aggressive goals, from what I hear.

Probably the most terrifying thing - breaking changes. I know how many changes we are making right now, and the idea of processing breaking changes through a 500+ page book scares the begeezus out of me...

Reading list arrived!

I went on the marketting binge last time (with great books like Purple Cow)... This week I got my business/technology fix:

I listened to the audio CD for "Good To Great", but I felt I needed the hard copy. I still have The Pragmatic Programmer, Designing Dynamic Organizations, and Free Prize Inside! from my last book ordering session. I really need to spend some time reading to catch up.

Tomorrow I plan to block out at least 2 hours for reading.

Lessig on freedom

I agree with Miguel, this is one of my favorite presentations I've seen on the web. The format, content, and delivery is amazing.

Thinking about writing a book...

I'm seriously considering writing a book on Avalon. I've gotten some pretty sage advice from a couple of people. I have a story I want to tell about Avalon, what we built, how to use it, and why we made some of our design decisions. I really wish I had comments up and running, what I really want is to hear what you want to read about...

Megan's feedback on MSN Spaces...

Megan (my wife, remember <G>), is blogging on MSN Spaces... so far her feedback:

"I am a bit wary of using beta programs.  In fact, at our house, Chris has agreed to the "no beta programs on anything that Megan depends on or might use at a whim" rule.  But I figured that the MSN spaces couldn't screw too much up on my machine and if it had too many problems, I'd just drop it.  So far, I find that there are too many customize options.  It doesn't not yet seem intuitive to me on how to change the look and improve the usability of my blog.  And the background themes?  Yeesh.  I was going with the celestial theme with the telescope and clouds and stars, but then thought it looked too new age-y for me.  And while you might hear me talking about my latest crazy interest- Reiki- you won't find me pledging allegiance to goddesses or trying to achieve inner peace so that I can add my voice to the healing power of mankind.  Not my thang.  So I chose red- but I am fickle and so will probably change colors 2-4 more times before I finish writing this blog entry.  If you know how to import some cool themes that are not offered by MSN spaces let me know..." [Megan] (emphasis mine) 

Response to MSDN TV show

I got a question in the comments of my latest MSDN TV show appearance with a response email address... I figure I'll post a blog response and email the person...

Q: "No definition of what Avalon is: A layout designer? A windowing system to replace Windows API? Absence of contrast to existing methodology that shows benefit. Contrast to Qt."

A: We have talked about Avalon in other forums, so in that particular TV episode we didn't cover the basics. Avalon is a new presentation layer for Windows. It isn't neccessarily a replacement for the Windows API, but more an eventual replacement for specific technologies (User32, GDI, etc.). The roadmap of technologies WinForms, User32 transitioning to Avalon is best answered over on John Montogomery's blog.

Avalon is a rich, integrated, productive UI platform. If we compare/contrast that to other platforms, we see a lot of rich-but-not-integrated libraries (HTML, Flash, etc.). These libraries do a couple things great (text, animation, etc.) but don't really offer a comprehensive integrated platform. We have some productive libraries (VB6, etc.) that offer great developer productivity features, but don't go far enough in richness. The design goal of Avalon was to try to achieve all three:

  • Rich: High quality text and graphics with built in animation.
  • Integrated: Best of Win32, best of the Web, integrating UI, Documents, and Media
  • Productivity: Built from the ground up for developers and designers

We could drill into each topic for quite a while, but for starters lets talk about one of the points - Integrated.

Avalon strives to integrate Windows and Web concepts. We have native support for navigation, custom controls, dialogs, typography, dynamic layout, localization, shell integration, and the preverbial "more". Traditionally developers had to choose between a great client application or something that supported navigation. When you chose navigation you were also forced to implement using JScript/HTML/server programming and running in the browser. In Avalon you can build a navigation application and then decide if you want it to run inside of the browser or externally. Browser hosting is just a bit in the project file. It is simple concepts like this - separating the navigation decision from the rest, that allows this rich integration of windows and web concepts.

I haven't used QT, so I can't really compare. sorry.

Thanks for the question!

Notebook Analysis

Cameron breaks down the question of what notebook to buy... The thing I like about this writeup is the analysis. Far too often people make lots of decisions without thinking through the variables and tradeoffs. For example, when I bought the truck I had numerous emails traded with friends about what I was trying to achieve with it (towing, carrying people, carrying gear, etc.) and what priority I put on various things (finish quality, power, etc.). This rigorous and detailed analysis is what separates the prosumers from the regular consumers... probably 75% of the time I'm a consumer... it takes more energy to be a prosumer but you end up with better products that you are much more happy about.

Kam's blogging

Kam VedBrat is blogging... Kam is a new (but not to Microsoft) member on the Avalon team , he specializes in user experience (design, etc) and is working on all sorts of cool stuff.

Sells and Solitaire

Very cool solitaire program that Sells wrote... The perf is pretty bad, clicking a card has a delay, etc... we should get this app into our perf lab and figure out what the issues are (besides just the loading of the resources 52 times)... I love the graphic - the hand drawn card faces look AWESOME!

Couple "bugs":

  1. Card stack "auto shows" when you pull from it (for example, you take an initial ace from the lower section)... this could be called a feature, but because the "real" sol.exe makes you click, I kept accidentally doing this. Compatibility is a feature :)
  2. Cards have a wierd green "box" around them. We are fully composited, it should be transparent around the corners.

And a feature request - change the opacity while dragging to make the cards semi-transparent... that would be cool. Oh, and make every game winnable. Oh, and add cool 3D spinning stuff... and... uhm, I'll go back to work now :(

Preparing for a customer visit

I'm going to a customer visit next week, and the material is the begining of what I hope to be some of the central story that we are going to be telling at the PDC. I'm really pushing hard for focus on content and the story, and not on power point presentations. Of course there are some good uses of powerpoint, but far too often people get wrapped up in the slides...

I don't have my notes in front of me, but I believe for a 4 hour presentation, this is the outline:

  1. Vision
  2. Overview & Lap around Avalon
  3. Application Model
    1. Navigation
    2. Application Styles
    3. Deployment
  4. Building UI
    1. Layout
    2. Controls
    3. Vector Graphics
    4. Resources & Styling
    5. Data Binding

Almost all coding, with myself and Rob... should be a lot of fun!

Media Center review by Brian

Brian posts a great review about the Media Center Edition of Windows... His quote in an IM conversation: "Bottom line:  Media Center needs to decide if it's an applicance or a computer, because computers haven't yet reached the "appliance" stage of their development."

Don Box on presenting

For the past year or so I've been spending a lot of time with Don on various presentations, and his Channel 9 video is a great distilation of the do's and don'ts of presenting... [link from Julia]

For this next upcoming PDC, I'm hoping that we can make every presentation super high quality. My first goal - no slide reviews. I want to review the content, but I don't want people to confuse their talk with their slide deck.

Shameless self-plug

The latest in the "Inside Avalon" series just got published on MSDN... this time I cover Properties, Commands, and Events... oh my!

[fixed link]

Avalon chess game

Chess game for Avalon... looks pretty good so far... can't wait to see the 3D version he is working on! :-)

128-bits and the ocean

This post reminds me of the old physics and santa bit... but Jeff talks about the real size of a "full" disk with 128-bits of data... [link from Jonathan Schwartz]

MSN Spaces... how do you plug in?

MSN Spaces has some cool integration features about tracking new posts on blogs associated with any MSN Messenger contact that you have. Why is this so tied together? Why doesn't MSN Messenger support me adding any RSS feed to my profile to say "this is my blog" and get the cool new gleam and profile card? Why do I have to host my blog on Spaces just to get that feature?

Isn't the purpose of technologies like RSS to enable a level playing field? Anyone can ping weblogs.com, not just Radio.

MSN Spaces

Just tried this out... looks pretty slick so far... check out my MSN Spaces site... Of course, no content there yet :)

Co-opting a name... what is XAML?

I have to respectfully disagree with Marc Clifton's article on Code Project. There is one definition of what "XAML" is - it is a set of technology that Microsoft is producing. Whether or not we license it to other vendors, people attempt to clone it, or what, there is still only one thing that is XAML. I feel somewhat passionately as I, and other people I work with, invented the thing and are still working on the final definition of it.

If you want to claim that Xamlon, MyXaml, and other attempts at XAML clones are in fact XAML, that is incorrect. They are attempts to clone XAML.

If you article was entitled "what are options in declarative UI definition" and you listed "XAML and Avalon", "Xamlon and Windows Forms/VG", "Lazlo", etc., I would have no complaint. MyXAML is not XAML, Marc even says this himself. Lazlo is clearly not XAML. I don't have anything specifically against MyXAML, Xamlon, Lazlo, Flex, XUL, or any other declarative UI programming models - but I would no sooner claim that XAML was Flex as I would expect Macromedia to claim that Flex was XAML.

Pong

I've been waiting for the killer app for Avalon and WinFX... Pong is here! Joe has a pretty interesting blog, including a very cool pi calculation algorthym using streams (although I think enumerators would work even better here?)

Half Life 2

OMG

Oh My God.

Half Life 2 just reafirmed the value of a PC. The graphics are absolutely amazing. Game play is great. Physics engine is fabulous. Story is pretty interesting so far. The Steam distribution is very cool. I'm so happy to finally have a game I don't have to stick a freaking CD in the drive.

Word to PC game manufactures: If you want to compete with console gaming systems learn something here. Requiring people to put a CD into the drive (just like a console) makes people compare you to a console. Why not leverage that $80 250GB hard drive to store the game on and just make it work. Of course, on the down side i'm still having a few whacky audio driver isses :)

Couldn't resist any longer... downloading Half-Life 2

I really didn't want to download it. I have Halo 2, GTA: San Andreas, Fable, and Doom 3 all in my "play queue". I couldn't resist though. Too many good reviews. I'm using Steam to download the game as I type. The time calculation is a bit whacky... started out with 153 minutes, now it's up to 175 minutes and going up. That isn't a good sign.

I second that... IanG, could you port?

Daniel hits the nail on the head... Ian, you should port your mesh converter to the CTP drop! :)

XAML inside Visual Studio

I love it when folks in the community do a better job than us! <G>

Gaston Milano wrote his own XAML viewer that is integrated into Visual Studio. [Link From RRelyea]

Rock On!!

Yet another release of XamlPad

After integrating Daniel's 3D demo, I realized what I really wanted was on out of band way of post "demos" into XamlPad... so, XamlPad is now a connected client... There is a "Demos" menu that is populated from a web service and downloads the demo you chooses on demand. Of course, the next release (or soon there after) will cache the demos locally, but for now I can start publishing demos out of band...

Also, I fixed some parsing issues (parse in idle instead of key press), and some other minor fixes.

Again, once you install from the ClickOnce file, you don't need to force the upgrade, it will trickle down somewhere in a day or so... (or, for those of you more impatient, just run the link again <G>)

Nick Cody's visual debugging...

Nick Cody over at Primordial Ooze has a visual step by step of trying to get XamlPad working... very useful for anyone running into problems... He is running the Royale theme, so you might have to copy the file to a different name...

3D... this is too cool!

Daniel Lehenbauer ported his Amiga inspired demo to the new CTP build... not to be outdone, I shaved off enough of the demo so I can run it straight in XamlPad... XamlPad is now much heavier (up to ~200Kb), but there is a snippet that is Daniel's bouncing ball (lights and reflection removed to make it not require any code)...

I added a new menu to the XP menu - "Reset Snippets", which will let you get access to the new snippet.

Note For some reason, if the text area has focus the animation is really choppy of the ball. The work around (super hacky!) is to click the splitter bar (giving it focus), then the animation seems much better. Hopefully someone at work tomorrow can investigate...

Quick disections of Windows Forms in XAML

Just to make sure everyone understands the last post I did, I thought I'd simplify a bit and explain what everything is... First, a warning: when working on this post I ran into a lot of cases where XamlPad would hang or crash. Not sure the cause, I'll work on debugging this tomorrow. For now, I would suggest editing in notepad and pasting into XamlPad. My guess is that there is something about tearing down and recreating the Windows Forms controls that is causing a hang...

<?Mapping
  XmlNamespace="windowsforms"
  ClrNamespace="System.Windows.Forms"
  Assembly="System.Windows.Forms" ?>
<?Mapping
  XmlNamespace="windowsformsintegration"
  ClrNamespace="System.Windows.Forms.Integration"
  Assembly="WindowsFormsIntegration" ?>

<Grid
xmlns="http://schemas.microsoft.com/2003/xaml"
xmlns:x="Definition" xmlns:wf="windowsforms"
xmlns:wfi="windowsformsintegration">

<wfi:WindowsFormsHost>
   <wf:Button Text="Hello From Windows Forms" />
</wfi:WindowsFormsHost>

</Grid>

Anyway, the first two tags are "mapping PIs". These will be going away in a future rev of the XAML spec, but for now they are the way to import a namespace/assembly into an XML namespace. We need to import System.Windows.Forms and (because XamlPad is written in Avalon) the System.Windows.Forms.Integration namespace. SWF.Integration is there when you need to host Avalon in Windows Forms or vice versa.

The root tag is a Grid, really it could be about any Avalon element. Then we have the WindowsFormsHost, which is an Avalon element that knows how to host a Windows Forms control. Finally we have the Windows Forms Button tag, with it's text set. Really the only whacky part is the mapping PIs.

Windows Forms and XAML

Oh yes, it works!

Avalon, XAML, and Windows Forms

Using any rev of XamlPad, you can paste the following XAML into the window and see Avalon and Windows Forms components interoperability. Wahoo! I added a new snippet to XamlPad rev 8 that is this sample. If you have a current version of XamlPad, just delete the snippets.xml file from your My Documents\XamlPad directory and XamlPad will automatically recreate the file. I should probably add a feature to recreate this file. Check this out:

<?Mapping XmlNamespace="windowsforms" ClrNamespace="System.Windows.Forms" Assembly="System.Windows.Forms" ?>
<?Mapping XmlNamespace="windowsformsintegration" ClrNamespace="System.Windows.Forms.Integration" Assembly="WindowsFormsIntegration" ?>
<Grid xmlns="http://schemas.microsoft.com/2003/xaml" xmlns:x="Definition"
  xmlns:wf="windowsforms"
  xmlns:wfi="windowsformsintegration">

<Grid>
 <Grid.ColumnDefinitions>
  <ColumnDefinition Width="*" />
  <ColumnDefinition Width="*" />
 </Grid.ColumnDefinitions>
 <Grid.RowDefinitions>
  <RowDefinition Height="*" />
  <RowDefinition Height="*" />
 </Grid.RowDefinitions>
  <Button Grid.Row="1">Hello From Avalon</Button>
  <Canvas Grid.Column="1" >
  <Ellipse Width="50" Height="50">
   <Canvas.Top><LengthAnimation From="0" To="100" Duration="8" AutoReverse="True" RepeatDuration="Indefinite" /></Canvas.Top>
   <Canvas.Left><LengthAnimation From="0" To="200" Duration="2" AutoReverse="True" RepeatDuration="Indefinite" /></Canvas.Left>
   <Ellipse.Fill>
<LinearGradientBrush><LinearGradientBrush.GradientStops><GradientStop Offset="0" Color="#FFFFFFFF" /><GradientStop Offset=".33" Color="#FFFF0000" /><GradientStop Offset=".66" Color="#FF00FF00" /><GradientStop Offset="1" Color="#FF0000FF" /></LinearGradientBrush.GradientStops></LinearGradientBrush>
   </Ellipse.Fill>
  </Ellipse>
 </Canvas>
  <wfi:WindowsFormsHost Grid.Row="1" Grid.Column="1">
   <wf:Button Text="Hello From Windows Forms" />
  </wfi:WindowsFormsHost>
  <wfi:WindowsFormsHost>
   <wf:TreeView>
    <wf:TreeView.Nodes>
      <wf:TreeNode Text="Hello">
        <wf:TreeNode.Nodes>
          <wf:TreeNode Text="Hello" />
          <wf:TreeNode Text="Hello" />
          <wf:TreeNode Text="Hello" />
          <wf:TreeNode Text="Hello" />
        </wf:TreeNode.Nodes>
      </wf:TreeNode>
      <wf:TreeNode Text="Hello" />
      <wf:TreeNode Text="Hello" />
      <wf:TreeNode Text="Hello" />
      <wf:TreeNode Text="Hello" />
    </wf:TreeView.Nodes>
    
   </wf:TreeView>
  </wfi:WindowsFormsHost>
</Grid>

</Grid>

Rob fixes CTP for Express skus...

Rob posted the steps for fixing up the WinFX SDK to work with C# Express... THANKS!!! I think there is a slight typo... on my machine the double-double quoting of the directories got my command window angry... here is what I did:

set MyVisualStudioLocation="%programfiles%\Microsoft Visual Studio 8"
copy "%programfiles%\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Avalon\1033\*.zip" %MyVisualStudioLocation%\Common7\IDE\VCSExpress\ProjectTemplates\1033
copy "%programfiles%\Microsoft Visual Studio 8\Common7\IDE\ItemTemplates\CSharp\1033\*.zip %MyVisualStudioLocation%\Common7\IDE\VCSExpress\ItemTemplates\1033
copy "%programfiles%\microsoft visual studio 8\xml\schemas\avalonFall2004CTP.xsd" %MyVisualStudioLocation%\xml\schemas\
copy "%programfiles%\microsoft visual studio 8\xml\schemas\xamlFall2004CTP.xsd" %MyVisualStudioLocation%\xml\schemas\
%MyVisualStudioLocation%\Common7\IDE\VCSExpress.exe /setup

Basically, I had to remove the quotes from around the target of the copy commands.

Another XamlPad release...

I've released about 7 builds totaly of my XamlPad Clone now (just pushed one up)... In the latest release (v1.0.0.7) I moved the location where files went by default (to My Documents\XamlPad) to allow you to run as admin, and to find the files since ClickOnce puts the application in a random directory. The Snippets file is there also, so you can add new snippets - you'll have to restart the app once you update the snippets XML.

Some discoveries:

  • Our default manifest generator kinda sucks - I have to hand edit it each time to update the company and application name.
  • Internally we had several problems with left over crud from random installed builds breaking deployment... hopefully that shouldn't be a problem for many of you folks out there.
  • I have no idea how many people are installing or using this thing. I think I'm going to add an OPTIONAL ability to notify me when you install it. We'd like to track (at least internally) how many people fine the application useful. I'll probably also put in a little feedback form so people can complain about problems and suggest features since I don't have comments on my blog.

 

XamlPad updates

I'm releasing drops frequently for my XamlPad clone, and will continue to do so... ClickOnce deployment makes this pretty simple. New features I added:

  • Simple refactoring - specifcally "surround with" for a couple tags
  • Snippet support - added a couple common XAML fragments
  • Formatting - run the XAML through XmlTextWriter's formatting engine
  • Editting arbitrary files - pass a xaml file in on the command line and it will edit that file instead of the default file

I won't be releasing source for a bit, I'm going to play around with binary deployment for a while. A lot of these features are super hacky right now, and I'd like to move to a more data driven model before I release the source (also it's a bit of a hassle to package up the source and everything else... anyone know of a MSBuild extension for including the source in a package?).

Anyway, if you install via the .deploy that I've linked to, these updates will appear automatically sometime between 1 hour and 1 day after I release the build. You can manually force a refresh by clicking on the link again.

Good to see that Ryan has seen the light...

It wasn't too long ago that Ryan Dawson thought the decision to move to XP was wrong... now he seems happy...

This just hurts my eyes...

This just jurts my eyes... :)

XamlPad Clone... live!

Server problems resolved, you can now run my XamlPad Clone directly... This application does require full trust on your local machine (hence the prompt when you install). The cool part is that it will automatically update when I release new versions, no action is required on your part! Wahoo!

Avalon demo application

I really want to publish this application as a auto-deployed application using ClickOnce technology, however I need to get my friendly site administrator to make a few tweaks to the IIS config... anyway, for the time being you can download the ZIP file (including source) for a little test application for Avalon.

The application is simple, you type XAML in the bottom pane and it gets parsed and rendered in the top. If you type code in error, the error is displayed at the very bottom. This is a clone of an internal application "XamlPad" that some folks wrote... I happened to be without the app on a flight to WinDev last month, so I wrote this clone... Have fun!

XP binaries and source.

[Added Link]

Office welcome to Avalon CTP...

Arik Cohen (on the Avalon team) and a collection of other folks worked on an official overview of the Avalon CTP build on MSDN...

CNET on Avalon release

CNET picked up the story about the Avalon release today...

Avalon CTP released!!!

Today we released a new build of Avalon to the world (well, anyone subscribing to MSDN)... This build of Avalon runs on Windows XP (and Windows Server 2K3, but not the PDC or WinHEC Longhorn builds)... which is pretty cool. Last night I tried to get C# Express and everything installed so I'd have a cool application available today, but it looks like that didn't happen.

I'll be blogging and writing code on this build for the next couple months (I'm taking most of December off from work, and like the geek I am I intend to write some code!)...

A couple points:

  1. This is a "Technology Preview"... translation - rough bits. While I'm willing to install this on my home machine, I don't recommend you put this on your primary development machine. It requires installing a beta build of .NET, etc.
  2. You also need a pretty beefy machine to run the bits.
  3. This build will run on Windows XP
  4. This build will not run on PDC or WinHEC Longhorn builds
  5. This is not the final API set, XAML spec, or anything else - this is a "Technology Preview"

I'm super excited by this. Nothing gets me more jazzed than getting bits into customer's hands. Download the build, install it, and give us feedback. You can send feedback through official channels (forums, newsgroups, even your own personal blog!), or you can always just send me mail at: ChrisAn (at) Microsoft (dot) com.

Maxthon, my new browser

After reading Chris Prillo's writeup (the person I want to push out as the post popular Chris on the internet!) on Maxthon, I decided to give it a shot. It's great! It gives me tabbed browsing, better search bar, more customizability, and other things I was looking for in a new browser. Best yet, it still using the IE HTML rendering and networking stack, so unlike Firefox I can actually sanely use this browser for all my browsing needs...

Very cool!

Download taking too long...

I wanted to write some code using VC# Express tonight at home, so I started the download... unfortunately I tired out before the download completed... I have a dive tomorrow afternoon...

Look for more software from me in the next week or so... sorry for the delay...

Google Open House

Had a great time at the Google open house tonight. A fun event. No formality, just a big gathering. Saw lots of people I knew, lots of Microsofties, ex-Microsofties, and industry folks. Pretty neat to see some folks I haven't seen in years and years.

Morning so far...

I woke up this morning around 7:30am and started playing again... for a little while. Had to head out get some food and do some homework for my scuba class (which I realized I haven't blogged about yet, for shame!)...

I love some of the details in Halo 2 - for example, there is no more loading screen - ever (from what I have seen). There are cut scenes, the quick "loading" text, but no more of the 60 second load screen... very nice.

I won't blog about the plot/levels of the game for a couple days to avoid spoiling it for anyone...

Halo 2

Tonight I went to midnight madness at the Redmond Town Center EBX store. They started letting people in at midnight, after, of course, inciting the crowd to a bit of a frenzy with free promotions (bags, hats, etc.). At around 1am I had in my hands a silver cased copy of Halo 2. I had played some of the beta/alphas, so I had some idea of what to expect. I got home and started playing.

Unfortunately I don't have the stamina that I used to, and I need to get some sleep. I have tomorrow off from work. I thought I might head in for a few hours in the morning... that isn't going to happen.

This game kicks ass.

 I haven't even started multiplayer yet (looks like Live! might have been a bit busy tonight). After 2.5 hours of playing, I'm having a blast. Tomorrow I've got around 8 people coming over to the house for a little multiplayer bash... should be awesome!

Thanks Aaron...

Aaron gave me a great compliment on his wrapup of Win-Dev... "whose keynote I thoroughly enjoyed - it was the best motivation for rich client applications that I've heard to date"...

Thanks, and congrats on sponsoring a great conference!

Real world .NET smart client

Last week at WinDev I said that you could build smart clients today using .NET... Databeacon ships one! [link from Sells]... minor issue on Sells' site about the problems with their approach to security, but otherwise, pretty interesting animal.

Photostory 3

Just tried out the new Photostory 3 for Windows... very nice. They fixed what I thought was the fatal flaw with the first one - image quality. There are a ton of new effects that look a lot nicer, but now if you have a sufficiently beefy PC you can make videos up to 1024x768... Unfortunately they don't seem to have support for creating 16x9 stories, so you HD HTPC lovers will be slightly out of luck.

I made a quick and crappy story this morning to try it out... i'm looking forward to creating a nicer presentation and burning it to a DVD and trying it out in my hme theater...

WinDev Keynote

First, special thanks to IanG who stepped in to be my code monkey at the last minute!

The presentation went pretty good. I skipped a demo, had a demo fail twice before running successfully, but overall hit the main points I wanted to. The crowd was already pretty pro-smart clients, with probably 3/4 the developers targeting Windows Forms, while less that 1/2 were doing ASP.NET - definitely a different mix than other conferences. It was refreshing! :-)

The transition animations in my slide software did fail (luckily I had given Ian the secret key to make it not suck that much), and I felt I rushed some of the content, while spent too much time on others. I felt bad that I didn't have a better understanding of some of the details of ClickOnce, it was a hot topic for Q&A (what gets deployed with a new version, what can you control, etc.). At one point I had a much better grasp on this, but it has been long enough that it got paged out of the brain... oh well, Cathi Gero is diong a whole session on ClickOnce, so people shouldn't go away from the conference without the right information.

One thing I did is show the progression of the smart client from today (.NET 1.x), tomorrow (Whidbey), and the future (WinFX/Avalon). It seemed to resonate with people, it is a progression.

Cost cutting... profit increasing...

It's good to see that all the cost cutting is helping the bottom line...

WinDev... going better...

Slight problem with my new slide-software, but all of my demos are mostly working. I'm trying to talk someone into being my code monkey for the morning, but given that I have probably 30 minutes of talking before coding, it might not work out. However, at this point I think a code monkey could only help make things go smoother.

WinDev... slight panic...

I have something like 20 hours until I talk... 2 of my demos aren't working now... my smart client demo isn't acting so smart... The joys of using lots of pre-alpha software... hopefully when I'm back from lunch things will be working better...

WinDev in the morning

Looks like Monday at WinDev is officially the "Day of" day. There is a "Day of Windows Forms", "Day of ASP.NET", "Day of CLR", etc. These primers cover the basics of the Everett (2003/1.1) generation of products. Ian and Brian are doing the day of Windows Forms. I've hung out there for a couple hours so far... it brings back a lot of memories. Horrible design decisions (like requiring 3 style bits for double buffering to work) and good ones (like consitent property change notification)...

I've spent some time getting my demos working. Unfortunately I didn't fully test the pure WinForms/Whidbey deployment demos before I left, and my VS installation is slightly hosed (luckily my C# Express install is solid) which means that I'll have to use a little bailing wire tomorrow. I'm planning on doing 4 demos:

  • Whidbey Windows Forms "professional" look
  • Whidbey Windows Forms deployment (ClickOnce)
  • Avalon windows/web unification
  • Avalon smart client application

Right now the deployment demo is probably the roughest... I'll practice it a few more times today.

Sox win... Chris loses...

Flew into Boston today for WinDev. On the way down the pilot gave us an update on the game. When we were loading into the plane I ran into Mark Fussell who is also going to WinDev, to present on XQuery and XML. After we got into Boston we discovered that the conference is in Quincy, not Boston. We hoped a cab.

Quincy is not Boston. After a non-trivial cab ride we arrived at the hotel. I went to go to the bar... it was closed. A hotel bar closed at 11pm. The game wasn't even over yet. I asked the bartender if there was anything around to go to - "yeah", she replied "about a 10 minute drive away"... hmm... not working out well.

Anyway, the Sox won, which will make my GM happy, and in the end I headed to bed earlier than anticipated... so I guess I should count that as a win.

[fixed spelling error]

Ego link... Rory's take on me...

Just becuase I like myself so much, I feel I have to link to Rory's take on my presentation...

You did what with XML?

Don't look directly into the picture... You did what with XML?

XmlDevCon talk done

Starting a talk at an XML conference with the title "Developers hate XML" right after Tim Bray said that everything I'm about to say is bunk was a little challenging. It was a fun talk, and an interesting format... good questions and feedback... I think that I should have just done a talk on the design of XAML though... the overly advesarial tone of the topic probably wasn't a net positive... oh well, live and learn.

[fixed typo]

XmlDevCon

<warning>useless post ahead</warning>

Probably not the first, but I figure I have to post a blog entry from the XmlDevCon... Right now Tim Bray is presenting on RSS & blogs... you can follow along, his slides are actually a web page :)

Panic++

Well, not really panic, but it's now October, and I have two presentations to give. I have a good idea of what each one is about, but I need to get cracking and get the presentations written early this week. I've let me day job keep me fairly busy over the past couple weeks, we are working hard to finish planning out V1 of Avalon, so I haven't gotten to these.

I promise Chris, I'll get my presentation done really soon! Honestly!

Brian Pepin's view on WinFX downlevel

Brian Pepin (architect on WinForms) gives us his opinion on WinFX, Avalon, and WinForms... "People buy Windows because of the apps they can run on Windows. Developers write apps for Windows because it is the most pervasive platform so they get the broadest reach. Producing a brand-new API and only exposing it on a version of Windows that no one has does not encourage developers to spend valuable time writing apps for it, especially if they can write to an existing API and support both the old and new operating systems."

New monitor

As part of my recent buying spree, I bought a new monitor from Dell... Using GotApex I got a screaming deal... the monitor arrived on Friday (earlier than expected), but it wasn't until tonight that I could get it from the UPS dudes and get it plugged in... oh my god this thing is amazing! I mean, I know there are a lot cooler monitors out there, but for under $800 it seems pretty nice!

FlexWiki source release

David announced yesterday that FlexWiki would move to SourceForge, marking another source release for Microsoft... pretty cool. Congratulations!

Is Windows Forms Dead?

Mike Harsh takes a stab at answering the question, Is Windows Forms Dead? Mike is a PM on the WinForms team, so he probably has a good inside track on this one ;-)

How to start presenting...

Caterina gives some hints on how to get out of the audience and onto the stage...

Cliff Atkinson to publish...

Beyond Bullets is going to break free of the shackles of bytes and be bound... in paper that is. Congrats!

Netflix RSS

Finally, RSS for my movies... [link from Scripting News]

Chris Pratley's History of Word

What a great post about the history of Word, and specifically host Microsoft tackled the Japenese market... "So, that in a nutshell is the Microsoft method. Understand the market, and the customers, and then go pedal to the metal, with release after release focused on what the customers need, incorporating their feedback" [Chris Pratley]

Don and XML

Mr. Box gives me some more ammo for my SellsCon talk...

Security, Complexities, and Standards

Thanks for the response Miguel... I'm still trying to digest the Slashdot thread also (I'll respond on Slashdot for that thread... )...

Before I start, I'm not taking any of this personally - I really enjoy debate, regardless of the opinions. As far as I'm concerned, bring it on! More Feedback == Better.

Security

The low-tech (aka phishing, aka con artist) attacks are being worked on. The social engineering and human behavior/interaction research is happening, it's just not on my team.

As for the "weakest link" characterization of ClickOnce, I think you are confusing some things.

ClickOnce is a deployment technology that improves upon the base technology introduced in .NET 1.0 for downloading and loading code. ClickOnce supports a subscription and application manifest. A principle advantage to the approach is that a customer can establish a subscription to an application and get automatic updates. In addition, the application manifest creates a complete descriptions of the parts of the application - enabling both validation and download/install/uninstall to be implemented by the system.

Next in the stack is CAS - Code Access Security. This is the security system built into the CLR. This technology has been in place since .NET 1.0, and we are continuing to iterate on it. In addition in Whidbey (the version of the CLR that we are talking about here) has a new level of application level security that can "lock back" the permissions of the loaded assemblies to that of the application, further limiting attack vectors.

In the middle of this is the TrustManager. This is a piece of code that provides a user with a single consistent prompt to determine what they want an application to be allowed to do. For example the application might request higher permissions or local installation. The goal here is to remove the half dozen security dialogs that users get prompted with today, and messy installation wizards, with a consistent user experience, giving them complete information.

All of this technology together, gives us the user experience that is (as you put it) one of the fundamental reasons for Avalon to exist. A perfect (or much more secure) computer would be one that you never plug into any network and have no software installed. You wristwatch is pretty secure is my guess.

We are doing usability studies on all of this, to validate that this is going to improve the situation... I'll keep you posted.

Complexity

I've used a handfull of GUI libraries; VB6, IE, WFC, AWT, Swing (limited exposure), KDE/QT (very limited exposure), and Cocco (limited exposure). Cocco was amazingly complex in my usage, the library felt like MVC on steroids with a pretty cool UI designer. KDE/QT felt a lot like WFC in C++, fairly straight forward. Swing, was, well, swing. MVC everywhere, powerfull, but very complex. I found that at JavaOne most of the Swing sessions started with a 15 minute talk on how you really can make Swing fast if you just understand MVC more. I think that the recent versions of Swing are much improved on this, my data is a little dated here. AWT was simple, but I felt that the event adapter model and peer model didn't lend itself to good usability, toolability, or performance. Anyway, I could go on... I'll try to take a look at Tk and XView, if they offer better simplicity, it would be great to learn from them.

The point about abstracting implementation from API is very interesting. The COM model has a very clear abstract, but removes the ability to deal with implementation inheritance. The AWT model of peers supported inheritance, but the real meat of what you wanted to deal with was locked away in the peer. We really wanted to embrace the "component framework" model that is present in ASP.NET and Windows Forms (yes, I know they have a peer model because of the HWND, but the WndProc is directly accessible, etc.)... the idea was to provide component developers full access to the implementation and not special case any Microsoft code as much as possible. The idea being, anyone should be able to implement "Button" and do all the same features we did, with no penalties.

This does come at the cost of more public exposure, but we hoped it would be worth it.

I know that Button is too trivial of an example to really talk about, so lets talk about lists, or more specifically ListBox. In most programming models that I've used the ListBox has a data model of providing strings - this is the Win32/AWT way (I think Cocco also?). Windows Forms added support for "object", but basically you had to .ToString() the thing to get it to display... unless you implement your own custom rendering. In all the systems I've seen the custom rendering is implemented in a completely different programming model - paint code in most systems.

Avalon has a simple "scalable" model. When I say scalable I mean to imply that the API starts simple but can scale up to support complex scenarios without requiring a massive leap in understanding - pay for play in complexity.

<ListBox>
    <string>Hello</string>
    <Image Source="http://..." />
    <Button>Hello</Button>
</ListBox>

You then can get into styles to manipulate all of this:

<Style>
    <ListItem />
    <Style.VisualTree>
        ....
        <Rectangle RadiusX="5" RadiusY="5" />
        ...
    </Style.VisualTree>
</Style>

The key thing is that I never had to switch programming models. Yes, if you try to digest everything at once (styling, binding, commanding, visual trees, etc.) then the system is complex - but the goal was scalability - Make simple things simple, and hard things possible.

Standards

First, an old post from Joe Beda about SVG and XAML.

Second, dismissing the CSS debate isn't really fair. A critical part of our design is unification. We didn't want one markup model for vector graphics, one for styling, one for 3D, one for data, etc. Another part of the unification was "Markup == OM", that is, we didn't want a separate markup programming model from code. HTML is this way, the markup and the code have a loose relationship. If we ignore the unification debate, I can understand how it seems simple to say "you should have used SVG".

Avalon is a developer platform. We want to enable an entirely new breed of applications that span UI, graphics, and media. Integration of typography with imaging with video with controls with styling is a core part of our value proposition. We aren't trying to create a new 3D system or animation system, we are creating a new developer platform.

MediaPlayer 10

I really wanted to link to a great review by one of my subscribed blogs, but unfortunately I'm technology challenged this morning... regardless, I wanted to share my feelings about it...

The new visuals are OK, not spectacular but clean and consistent. Gone are the XBOX like green on black displays. Playlist management, auto playlists, are all much improved. The new device support for syncing is awesome - I no longer have to use the mediocre CreativeLabs provided software for syncing my Nomad 40GB player. Unfortunately "auto sync" won't work, so I have to manually sync when I dock. The improved simplicity (Burn, Rip, Sync tabs across the top) is a huge improvement - this is really starting to feel like a consumer application!

I've also been trying out iTunes these days. iTunes feels much more polished. Little things like transitions between functions and the cool center display at the top are totally solid. A big plus for iTunes - a one click way to burn an MP3 CD. MediaPlayer supports burnings audo CDs really easily, but I couldn't find any way to do an MP3 disc.

Now MSN Music vs. iTunes. OK, here I need to rant a bit.

<rant>From what I can tell the MSN Music integration in Media Player is done by hosting a web page. Usability is mediocre and integration with the player bites. Compare that to iTunes, where the music service looks like another folder on your harddrive. You get a great listview control to cycle through things, when downloading music it is fully integrated just like you were ripping or burning. Totally polished.

The Apple folks have done a couple of these great smart client applications - Sherlock, and iTunes to name a few. They get it. Use the power of the local platform and don't rely on HTML as the presentation. It's really frustrating that MSN Music missed the boat here.</rant>

Overall the player seems faster, simpler, and has all the features that I want. I would recommend WMP10 to anyone that listens to music on their PC. Device integration rocks!

Why don't I recommend iTunes? Mostly because it doesn't play WMAs and uses yet another proprietary format (AAC). Maybe if I had ripped everything to MP3 my recommendation would change...  

Five down, Meetings to go

I've mostly finished Five Dysfunctions, and now I'm moving on to Death by Meeting. Both are Lencioni books, who uses a great "fable" style to present the message of the book. A common theme in both books is that of a solid team, and meetings as a core way of communicating with that team.

Mini-Microsoft

The blog is anonymous, so you have to take things said with a grain of salt, but over at Mini-Microsoft there are some pretty interesting posts, about reviews, attritition, and trying to make microsoft "slim down ... into a lean, mean, efficient customer pleasing profit making machine!"

Of course, I can't agree with everything said... "And Microsoft is bent over, dithering in its Avalon / XAML garden." [link]

Simplicity and Cars

I like IanG's post on Complexity of APIs: "I think the key is identifying abstractions that can be implemented convincingly. Some abstractions work so well you don't ever really notice any leaks. Virtual memory is a pretty good abstraction. The instruction set and programming model of any modern CPU is a great abstraction. So is binary - how many of you noticed when PC motherboards switched over from using 5v to around 3v as the standard way of representing '1'? (Most people weren't even aware that this happened. It occurred some time in the mid 1990s in case you're wondering.) Managed object references in the CLR are another pretty leak-resistant abstraction. VB6 on the other hand is, to my mind, the automatic transmission of the computing world - it works really well for straightforward stuff, and some people love it, but as soon as you start pushing the limits, the leakiness of the abstraction gets in your way far more than it helps. For a great many tasks it's just fine, and a lot less effort than the lower level alternatives, but the disconnect between the abstract model and the underlying reality will bite you from time to time."

Ego check...

(while talking to another senior person at Microsoft)

ChrisAn: "Have you driven a feature from scratch?"

Other: "Uhm, yes. I've worked on various platforms for the past 30 years, worked on the first release of DOS for Arabic and Windows for the Middle East".

ChrisAn: "I'll take that as a yes"

Remember to self, you are never the smartest person in the room... ever.

Joe goes to Google...

Joe Beda, one of the developers on the Avalon team, is leaving Microsoft to join some old friends of his working in a new Google group in Seattle. I talked with Joe, and it seems this has been in the works for a while and the timing is a bit odd because of the new announcements. I feel bad that Joe is leaving, I think he is going to miss one of the most exciting parts of the product cycle, but I'm happy he is going to do something he seems excited about.

It's funny, at his farewell lunch today we talked about how moving groups inside Microsoft is something like moving companies outside of Microsoft. I switched divisions just over 2 years ago, and it was a great experience. New development models, new people, new problems. From this perspective I totally respect Joe's decision to move on to something new.

Good luck Joe, and keep in touch!

New challenge... create a team...

I have a new challenge at work. It's not one I've tried before. I found what I believe to be a critical hole in some technology that we are shipping. I'm not directly involved in all of it, but I want to make sure that we address the problem. So, I've decided to see if I can get a team created to solve the problem. Luckily, I don't need to get a big group formed, nor do I want to be the lead of the organization (no empire building! <G>)... so, at this point I just have to get the right people to believe in it. Sorry to be so vague...

I'm a technical guy, so attempting business strategy is an interesting stretch for me. Today I started writing up a proposal for the schedule, costing, and features. A bunch of people in the related organizations already had similiar thoughts, so at this point I can't tell if I'm leading or following, but at a minimum I'm going to keep paddling.

One of the things I find most interesting is the newness of the whole process. I really hope I can stay involved for long enough to see how real business people tear up the proposal, because I think it would be a great learning experience. Of course, I still hope it happens.

I'll help!

I'd happily help Benjamin out on his OSCOM 4 challenge... Just drop me a line!

Soma's advice

Soma (you know, the VP that runs the developer tools division at Microsoft) sez "keep writing managed code on the .NET Framework today", and I can't agree more!

I hope I get a list like this...

I don't know Larry, but after reading his post on 20 years, I hope I have that good of a list in 12 more years... so far I'm off to a good start! [link from Todd Bishop]

Shipping hello world...

While I thought that WinFX and Longhorn where much more than that, I really like Peter Torr's Hello World post to illustrate the trials and tribulation of shipping.

My 3D Education begin...

Daniel has started up his series of intro to Avalon 3D... which he called 3D for the Rest of Us. Of course, the first thing I want is the source to all his samples!

3D Tutorial...

I have a confession to make... I'm not a 3D expert. I know the basics of 3D using Maya. I've dabbled with just enough math to know the names of some of the things I need to do 3D. But, I have another confession - I lust after 3D. I've always wanted to be the guy who could build cool 3D worlds. But alas, I haven't ever taken the time to get down and dirty with Direct3D. Now, of course, I have a job requirement to understand 3D.

Because of my lack of deep understanding, I went straight to the source and cornered Daniel in the hallways and asked what material I should start studying. He offer to give me a short tutorial on how to build 3D using Avalon, on the condition that he could post it to his blog. I had to accept.

Anyway, the first tutorial isn't posted yet, but keep an eye on Daniel's Blog...

Pragmatic programming

A great set of resources and information on The Pragmatic Programmers.

Communication, part II

Almost all the games I buy for XBOX these days has a little "XBOX Live Enabled!" logo somewhere on the box. My latest game, Riddick, does nothing more than enable you to logon to XBOX live so your friends know you are online. Which is actually pretty cool - I can get invited to play Ghost Recon, or something else, while in the middle of playing Riddick. Splinter Cell supports content download - as does Ghost Recon, and many others.

I logged onto a friends laptop today using my normal Microsoft credentials. I was able to logon and start up Outlook. After typing in my Exchange server name, outlook downloaded my content and started letting me browse my mail. I used terminal services client to connect to another machine of mine also. All without ever getting granted any elevated permission above "guest".

Two different experiences, however they highlight something i've been thinking about a lot lately.

Connectivity as a selling point is dead.

In video games, online support isn't a selling point - it is a base service. On personal computers all software is just expected to work with the network. DHCP, 802.11b, and single login have moved us to a point where people just assume it will work. Connectivity is the "air" of modern computing.

Looking back, there was a time that mouse support, VGA graphics, or sound support was a value add for software. Today it is just assumed that software will support every peripheral on your computer. High-color display and 16bit sound are required to just meet the minimum bar for software.

Today, I believe, communication is the differentiating factor.

The effectiveness of your software to communicate to your users, adminsitrators, and other software is the key aspect that consumers are looking for. Web pages don't cut it. SOA isn't enough. Flashy animations don't do it.

It's about communication, stupid

I often get the question about what architects do. Over the past year or so, I've begun to see the critical pattern. It turns out is the same thing that good managers do.

Communication

As an architect I have no one that reports to me. I have no ability to directly "order" someone to do anything. Oddly enough, that is actually true for people that manage also. Anyone who manages from a power base rooted in the review process is generally a bad manager. The review process, the ability to fire, are all tools of last resort. These are the nuclear weapons of leadership and should never be used as methods of persuasion. Instead, in the end, it's about our ability to communicate ideas, infect people with our views, and build a groundswell of support.

Today I was giving someone advice about using PowerPoint to convey an idea. It wasn't about flashy graphics (quite the opposite) but rather about using the right tool for the job. They wanted to create a click through of some design time experience for some Windows Form feature. I went through the quick methodology for doing it, and in the end it took about 25% of the time that he had originally thought it would, and was (hopefully) going to convey the idea much better than before.

My model for presentations has drastically changed in the past 12 months. My methodology now is to start with a brian dump whitepaper. Rework the paper to tell a story, build headlines for the major sections, and then use that to drive a slideshow. I don't religiously follow this, however the idea of focusing on the story, the key points, and simplicity remains the same.

I recently had a "test" of my communication skills. I gave a presentation on versioning to the Avalon team. Around 80 people showed up. I tried to remove as much information from the talk, reduce it to it's simplest concepts. The questions I got indicated to me that people understood the topic. Now, the big test - in two months will people remember anything about it?

30" drool machine

I want one.

Tiger...

Spent tonight watching Jobs' WWDC Keynote and hearing about Tiger. Unfortunately my QT player died on me about 20 minutes before the end, but I still got a good flavor of what they are doing. Amazing stuff. The CoreImage/Video demo was very cool. Spotlight, awesome. Not sure how much of this is shipping code, but it looks like they are making some awesome technology down in Cupertino.

Reliability from COM+/MTS/EnterpriseServices

The COM+ folks have an interesting solution to dealing with out of memory (OOM) issues. They don't. Their approach is to use "memory gates" to not accept work if their is memory pressure on the system. Once they pass through a memory gate all future memory allocations are assumed to succeed. If any allocation fails, the system "fails fast" (think blue screen for your component). They treat any fail fast as a pri-0 bug that must be fixed.

Taking this approach and applying it to managed code seems reasonable. Given that backout code needs to allocate to execute, we can use memory gates to convert a hard OOM failure to a soft failure of a memory gate that applications can then deal with and write backout code. Of course, to apply this correctly you need testing infrastructure, reporting, and a good strategy about where to put memory gates.

We are still debating internally if we think that a memory gate approach will produce a reliable enough platform for the core of Windows. There is some concern that the statistical nature of memory gates (there is a possibility of a race condition since the gates don't reserve any memory for the work item) will produce a system that will fall over too easily when running in stress conditions.

At this point I'm tempted to just try it... writing a simple memory gate implementation isn't too hard, and seeing how it behaves under stress on the client would be an interesting excercise...

Joel on the Windows API

Joel thinks we've lost it... I'm still trying to absorb and understand everything he's talking about, but it is definetly worth reading...

No JavaOne this year...

Sorry Luke, I'll be missing JavaOne this year, for the first time in several years. I've enjoyed JavaOne the last several years, but last year I found a lack of enough new stuff. I got the pamphlet for this year, and it was talking about Tiger (1.5) and other content that I remember from last year. It's funny, because I know that next PDC will be (probably, just my guess, normal caveats apply) about Longhorn. Hopefully we'll make the content not be a repeat of last PDC, but I imagine that a lot of people will have the same debate.

Anyway, for JavaOne this year I decided to stay home... you'll have to have fun without me :-(

Ah, review season yet again...

Review season again... This friday is my groups "write your review day". It's a bit frustrating that it takes 3 months from the time you write your review to the time you get your first paycheck with any changes, but I've seen the schedule of reviews of reviews and reviews of those reviews that it takes. Microsoft puts a pretty high priority on people reviews, and so they like to make sure that everyone puts thought into it.

This year I've been involved in a training program that has involved several classes, the upshot is that I've spent the better part of this year focused almost completely on myself. I find myself feeling like the squeaky wheel with my manager, constantly asking to talk about my career, direction, and future. Hopefully next year will be a bit more balanced.

the culling

I still believe in the relative ranking system at Microsoft. After reading Straight from the Gut I feel even more strongly. Not only is regular turn over healthy for an organization - it is required.

I would almost take this to another extreme (but not quite) - your bottom 5% should be cut, your top 5% should be given away. A strong organization should be growing new talent, and should be farming them out to the rest of the company. If you have super star performers in your team, give some away (not all of them).

Ok, before you call me insane... people need to see opportunity for growth. If you work under the best developer (or program manager, or tester, or...) in the company, you have no hope of ever being the "big cheese". By letting these top tier people go off and build new farm teams you help the company as a whole, and your organization now has better opportunity for people to grow. Of course, everything must be done in moderation. Getting rid of all of your talent would be devestating.

critical feedback

I've always been the type of person to beg for critical feedback. In a way I don't care what people think I did well - I want to know what I can improve on. What did I screw up? One of my classes talked about leading from your values. In addition I read Now, Discover your strengths. The common thread that I walked away with was - be mindful of the things you do well, and do them more often. I am often far too dismissive of positive feedback (other than the good feeling everyone gets from praise). You can learn as much from positive feedback as critical.

consistency

For probably the 4 year in a row, there is a substantial change in the review process. This start in 2000, and has continued each year. Sometimes the changes are larger, sometimes smaller. But every year there has been non-trivial changes. Large enough changes that I often feel that last year's review isn't as applicable to this year's. I wish I understood the eventual place we were headed. So far, in general, I think most of the changes are for the better (I really like the changes for this year, for example), however at some point I would rather have consistency for a couple review cycles than "improvement.

final thoughts

I get grief for this all the time, but even with the changes, even with some of the belt tightning (this is not new), I still find this to be the absolute best company to work for. The people are passionate and smart, the problems we tackle are massive, and I still believe we have the best "deal" anywhere.

For a historical perspective, last year's posts... My views on the curve system... And the review system...

Reliability from the master...

Chris Brumme posted several reliability related posts a couple months back... Reliability, and more recently Hosting. Hosting is related to reliability because the host of the CLR can determine the escalation policy of exceptions.

"But one day the CLR will harden itself so it can tolerate these exceptions without requiring a FailFast escape hatch. And the CLR will do some (unspecified) fancy work with stack reserves and unwinding so that there's enough stack available for managed code to process StackOverflowExceptions more like regular exceptions.

At that point, managed code could process asynchronous exceptions just like normal exceptions." [CBrumme]

This addresses the StackOverflowExceptions, but doesn't dive into the idea of reserved memory for backout. In conversations with Chris, the problem appears to be with reserved memory is when to dip into it, how much to reserve, and when to know to stop using it. Imagine in a multi-thread multi-appdomain situation and one thread in an appdomain runs out of memory. I'm sure this is solvable, we just don't have the solution in hand yet.

Anti-Spam

Justin takes issue with my methodology for spam protection...

I spent about 90 minutes implementing the spam protection and a few other minor tweaks to blogx (like the ability to disable comments completely from the site.config file).

First, let me explain the goals of my spam protection. My goal was fairly simple, remove the maximum number of spam comments in my blog. I had two approaches in mind, 1) remove commenting from the site, 2) provide some security.

When I went down the security route, I actually figured that even plain text security (just making someone/thing read the text and parse out a word). I doubt anyone is really using a OCR system to post spam comments on my site. Without anything it is just too easy to post. If people start hacking on the site again, i'll just remove comments - no money is at risk here, i'm not going to spend sleepless nights trying to prevent spammers.

As for the process I use, it is a simple uniform gradient behind the text. Any artifacts are from the jpeg compression. The words are stored in a plain text file on the server, and I use System.Security.Cryptography.RandomNumberGenerator to pick the word. The only thing sent to the client is the offset of the word.

Simple threat modeling excercise... Of course, since I have a small dictionary on the server, it would be easy to visit the site often enough and form a complete duplicate of the words from the server. Since the offset is round triped to the client, both in the URL of the image and in the ViewState, these are both susceptible to attack. In addition, the image pattern is simple, as you point out, so OCR against it would be relatively straight forward.

With all of these threats, and basically no mitigations, it is pretty clear that someone can hack around my "security". The intent isn't to provide robust security that I would expect from a bank or anything else (I'm not even running HTTPs, I don't authorize commentors, etc.)... the goal is just to make my site less attractive to spammers.

 

 

Do you really have the memory?

While reliability issues come in many flavors (reentrancy, exception handling, dead locks, etc.), the current most popular reliability issue to debate (at least inside of Microsoft) is out of memory, aka OOM.

In .NET 1.0 and 1.1 the CLR wasn't hardned to OOM. Basically if you hit a hard out of memory failure (couldn't grow the page file, GC running doesn't free resources) the CLR falls over. For Whidbey the CLR execution engine and a small percentage of mscorlib has been "hardened" to OOM.

Ah, first, define harden.

One of the architects on the Indigo team had a great definition (I probably can't come up with verbatim his definition, but i'll try): Hardening means tolerating a fault and leaving the component in a consistent state. That consistent state might be unavailable, but the component is never left in a corrupted state.

In the overly simple example I did the other day, it was easy to make the component hardened to any failures.

Ah, next define failures.

Here is a great one - how should your component behave if the power cable is unplugged? Power loss is a failure. Hard disk crashing is a failure. Running out of memory is a failure. You see the pattern. There are extremely reliable systems out there. I heard anecdotally about a banking system that had a reliability policy that if a nuclear bomb went off in one city and pending transactions would be automatically rerouted to another city. That's a pretty high bar.

So, back to our little out of memory problem. Because of the dynamic nature of the CLR - virtual method calls, dynamic JIT, boxing, etc - it is extremely hard to write code that is guaranteed to never require an allocation. In unmanaged code this tends to be easier (not easy, but easier) because allocations are always explicit and never asynchronous. With that, hitting a hard memory failure (you can't allocate a byte) means that you basically can't continue to run managed code.

Of course, nothing is ever so simple. In Whidbey the notion of "constrained execution regions" (CER) was introduced with reliability policy which allows for writing managed code that is in fact hardened to hard out of memory failures. But writing that type of code is truly rocket science.

So what is a component to do?

Caveat: I'm talking here just about the problems in this space... there is no need to panic.

Thinking about reliability

I work on a fairly large project, and end up having scope over a great number of areas. Unfortunately this normally means I get to think about the breadth of things and not the depth of things. While folks like Daniel get to do the cool work of building our 3D code, I get to think about how all of this hangs together.

One of the "big" things I've gotten tasked with lately is working on our reliability plans. Lets take the simple sample (assume this code is inside of Avalon for the moment):

private InternalMeasure(Size availableSize)
{
    if (_dirty)
    {
        _dirty = false;
        MeasureCore(availableSize);
    }
}
protected virtual MeasureCore(Size availableSize) { ... }

Of course, the failure here is obvious (uhm, yeah). If a 3rd party deriving from this class has bad code inside of their MeasureCore method and throw an exception, the _dirty bit will incorrectly set to false. So, the next time layout tries to run (assuming the application decided to swallow the exception, more on that later), we are in an bad state.

This is a vast oversimplification of the problem, but for the next couple days I'd like to talk about some of the issues and dillemas that we are hitting while trying to write really robust managed code. There are debates about how to deal with out of memory conditions (remember, if _dirty was typed as an object than the CLR would have had to allocate memory to assign false to it when it boxed the bool <G>), stack overflow, thread abort, user exceptions, global exception handlers, and more.

I'm not the best expert at this, I've been learning a lot about the various options over the past several weeks, so it should be interesting to hear what everyone thinks...

Software Developers Group, II

After finishing the talk, they decided that I didn't show enough code (well, not any) and that I might want to talk for more that 45 minutes (<G>), so they invited me to do an hour long session that night in about 6 hours. Cool.

Later that evening in the bar I start trying to arrange for my transportation to the airport the next morning. I talk to Joop (remember, the guy who woke me up) to get a ride.

I relate to everyone who will listen my fun story of not knowing the hotel, location, or time of the conference or speach. Many people laugh at me.

Joop comes back "Your flight is 11pm tomorrow, not 11am".

I've had enough. "I'm going to get my ticket". Danny Thorpe from Borland catches this critical moment on film (digital, of course):

Yes, in fact my flight was 11am.

Software Developers Group

Ahh... the post conference trip report...

So I flew into Amsterdam on Northwest airlines. Oddly, I ran into another speaker (Cathi Gero (sp?)) on the plane - she asked if I was staying at the speaker hotel?

OK. Lets flash back a bit.

Organizing my trip to Amsterdam was a bit of a circus. It took me several weeks to figure out if I was going or not, and then another several weeks to get enough information to book the trip. I was confused as to the day I was speaking, and lots of other details. Even the day I flew out I was still trying to figure out what I was going to talk about.

Ok, back on the plane with Cathi asking me about the hotel. You see, I had asked Ewoud (the MS Dutch Sub employee who was my contact) if there was some special place I should stay or what. "No", he said, "You should let the travel folks find you a place." So, naturally I was curious what Cathi asked about the hotel.

It turns out Cathi was also being picked up by folks from the conference and being wisked away to the hotel direct from the airport.

I have to get in on this, I thought to myself.

So I bum a ride with the nice folks from SDGN and go to the Victory (Victoria?) hotel in Amsterdam where I proceed to beg for a room for the night. After getting a room I call the hotel I was supposed to stay at to cancel my reservation - which convienently they have no record of.

You see, ever since PDC 2003 and getting stranded in Las Vegas 17 hours before I had to speak in LA I believe all travel is an adventure, so this didn't bother me.

Anyway, so I impose myself on all the fun speakers and hang around and generally have a good time.

"Hey, you are taking the bus to Papendal tomorrow?" One of the speakers ask me. Hmm... I don't know what Papendal is, or where, but it sounds interesting.

Well, it turns out that the actual conference that I was speaking at was 1.5 hours away from Amsterdam. I didn't know this. Remember, if I hadn't have bumped into Cathi I wouldn't have been at the speaker hotel and wouldn't have had this question asked of me - in short I would have been sitting in Amsterdam instead of the conference.

At this point I need to flash back again... this time to Saturday (which is when I arrived in Amsterdam). I have a belief that you must strictly adhere to local time zones when traveling. When arriving in Amsterdam at 8am local time (around 11pm body time) I decided that sleep wouldn't arrive until that evening. I almost made it - only a 1 hour nap - and eventually stayed out drinking with the other speakers until 1am. The next morning (sunday) I woke up with the wake up call at 8am no poblem. Time zone adjustment complete.

Now, back to the bus trip.

Arriving in Papendal we talked a bit, I wrote my slides and finished the talk, and eventually ended up dining and drinking with the folks until 1am again. As I went to bed (the next day I would be speaking at 1pm) I decided that I should let myself sleep as late as I needed... so no wake up call. I went to sleep.

My phone rang.

Fumble.

"Huh?"

"Chris, this is Joop. Your talk is in 8 minutes"

"F#$!k" (hang up)

Panic. Rush to bathroom. Start shower. No time. Stop shower. Put in contacts. Check list... pants - needed, shirt - needed, socks - no time, underwear - slightly optional, but lets get some.

My phone rang.

"What?!"

"Chris, This is Joop, your talk is in 5 minutes"

"Yes, I'll be there!" (hang up)

More panic. Boot laptop, run out of room. So as I walk on stage I realize that you should always set a wake up call for at least 1 hour before your talk.

The conference was fun, the people were great. Hanging out with the attendees was great, and getting to spend a bunch of time with the speakers was a blast.

My bet with Clemens

I made a bet with Clemens while I was in Amsterdam... the bet was (details are hazzy because I forgot to write them down the next day, and maybe I had a beer or two) that I would convince him that Client application developer was *the* key thing within 14 months of May 10, 2004... Now I had to deliver.

Daniel joins the fray

Daniel Lehenbauer joins the fray... Daniel is a dev working on the Avalon 3D support...

Comment spam

I'm going to cut comments if the spam continues... sucks...

In Amsterdam

First, I haven't been posting for a while for several reasons - busy, sick, etc. Turns out that my previous post was basically a taunt to my illness, so it came back with a vengence.

Anyway, I'm in Amsterdam to speak at a conference. I flew in early today and I'll be back in the US on Tuesday... just a quick trip across the pond :).

A lot of blinking lights... the IBM T221

I have good news and bad news...

The good news is that I found out today the real specs for the IBM T221, one of the super high density displays (204dpi)... IBM's display is 22.2 inches with a max resolution of 3840x2400... this thing is truely spectacular in person (there is one floating around the hallways in my building)... It can accept anywhere from 1 to 4 DVI inputs... very cool...

The bad news is that I also found out that I misquoted just about every one of the specs in my blinking lights article... Hopefully it will be relatively trivial to get MSDN to post an update...

Sorry for any confusion, and if anyone finds any other glaring technical issues please let me know!

System.ComponentModel

Brian Pepin dives into the depths of System.ComponentModel over on UrbanPotato...

Enter the Context

So IanG and Jason Olson have run across the glorious Avalon UIContext.

There is some debate internally about if we should allow UIContext.Enter() at all. The problem is that your context may get pinned to a specific thread (for example, if you host an HWND or use COM). Once you have a pinned context you need to marshal the call to the right thread, you can't just call enter.

The question is then: Should we have an API that works depending on the state of the context but provides occasionally the simple pattern (UIContext.Enter()) or should we have one API that is always guaranteed to work but is harder to use (UIContext.Invoke/BeginInvoke)? 

XAML vs. Serialization

Marc Clifton seems a bit frustrated that XAML isn't the end all be all serialization engine. XAML is a general purpose markup format, but in Longhorn there will be a new general purpose serialization engine.

XAML was designed to be a compromise markup format, that balanced the toolability and readability aspects of a markup. You can think of HTML as a markup that was squarely designed to be readable, but not very toolable. SOAP on the other hand is very toolable, but almost impossible to read. In the design of XAML we constantly walk the line between the two. XAML has support for inline code, customer parser extensions, and multiple representations of the same structure.

In Longhorn there will be a new serialization engine in WinFX. The goal of this new engine is to unify the scenarios addressed by the XmlSerializer, SoapFormatter, and BinaryFormatter.  This engine (residing in the existing System.Runtime.Serialization namespace) will allow serialization and deserialization of any CLR object graph (graph is a carefully chosen word here) to a variety of different formats (including XML and your own custom ones, if you wish).

Lets compare the two methods:

XAML

  • Objects must conform to a specific contract (public properties, empty public constructor)
  • Extensions done through interfaces on objects (in other words you must load CLR types to serialize or deserialize the format)
  • Only supports object trees (no graph support)

System.Runtime.Serialization

  • Any object regardless of shape can be serialized (properties, fields, events, private or public data)
    Extensions done through declarative metadata (DataContract attribute), which means you only need metadata or schema to parse
  • Graph or tree structure

XAML is designed to be more of a mix between a document and a programming language (something like ASP.NET's markup) with a fixed grammar where as System.Serialization is designed to consume and produce arbitrary XML and CLR graphs.

Channel 9

Ah yes, the infamous Channel 9.

Seattle PI knows about it... Scoble links, and links, and links to it... Sam links to it, but gives no opinion (other than "liking" it, which is big for Sam to say)... TheServerSide.NET knows about it... Rory replaces his comic with real content... Chris Sells links to it...  Marc chimes in... even Dave Winer links to it... It's been called muzak... Coworkers of mine are linking and being interviewed by it... Dare gives it some space...

What is it???

It's got a Wiki... It's got Videos... It's got Forums...

With all the press it's getting, I'm sure it is going to solve every problem (technically, legally, and orangely) that we've ever heard of...

Seriously, so far I dig it.

What is it?

It's an experiment... come, take the red pill.

MVP presentation in 45 minutes...

My last meeting was down near the conference center so I'm hanging out in the back of the room for Steve Lasker's presentation. There are a lot of MVPs here. I hope that Don & I will be entertaining for the group... I think this group of folks have been in presentations all day, which makes for some tired MVPs... maybe we should serve beer in our presentation?

Enterprise Mobile Dev...

...it's about the end to end developer experience.

Russell hits the nail on the head here. Regardless of whether you dig the Microsoft Mobile platform offering, the end to end developer experience is amazing. Visual Studio + .NET CF makes for a powerful platform. All the stuff that we demo'd at MDC makes it even more compelling, adding great native support (including COM interop) and moving the mobile platform into a first class position with respect to the desktop. The new SQL Mobile stuff is also amazing... It should be interesting to see how J2ME + Eclipse (or whatever else) stacks up in the coming months and years...

Behind the Technology: Clippy

Rory gets the scoop of a lifetime and does an in depth hard hitting interview with the rock star of the 90's - Clippy.

Russell Beattie jumps on TiVo

Russell bought his first TiVo, welcome to the club! Of course, I feel that Russell is missing out on the "prefered" TiVo usage. First, DirectTV is the only way to fly. TiVo will actually record the satalite feed directly (since it is already compressed) meaning that your playback is at 100% quality. Second, for your primary TiVo I think you need at least 2 tuners and 80GB min hard drive (I have about 100GB on mine).

People that haven't used TiVo have a hard time understanding. When I got my HD sat reciever it took me about 30 minutes to remember how to watch live TV. My first thought - what are the chances of there being anything to watch on TV when *I* want to watch it? Something a TiVo user takes for granted is that TiVo puts the viewer in control of the TV schedule. I never have to "try to get home in time" for a show.

Keith Short on Whitehorse

Keith has been blogging for a couple months now, talking about the "high end" of developer tools from Microsoft. Of course, Keith hates it when I call them "high end" tools, because (at least in some of our conversations) he really sees MDA, UML, and SOA as concepts that every developer will want to use. Keith is working hard to make good design and architecture be something that is easy and natural to do.

He has some great posts about the class designer and the service designer.

 

Mozilla is cool... ?

One of my coworkers that has been talking with me about FireFox pointed me over to Sonya's list of goodness in Mozilla... interesting...

Scoble's take on WinForms and Avalon

Not sure I really agree with Scoble here. I talk with the WinForms and Avalon folks a lot on a regular basis, and I think trying to pick a date in the future like "2012" or "2014" is a Bad Thing.

I spent many years working on WinForms and I love that technology dearly. I know almost all of the current development team on WinForms. I talk with them all the time, and I try to have a good grasp on their plans for the future.

I have been working on or with Avalon for a couple years now. I think I have a relatively good handle on what we are producing and how this maps to the WinForms technology.

The idea that people should adopt WinForms because Avalon is 8 years out is just ridiculous. People should adopt WinForms because it is a great development platform for creating smart client applications. People should adopt WinForms because it puts them in a great position for transitioning to Avalon when they choose to.

I think that customers should move to managed code because of all the things that Scoble mentions - it is our future platform, where we are investing in going forward, and the best platform for writing applications (productivity, power, etc.).

Developers know when they are ready to adopt new technologies based upon *their* customer's feedback. For some developers they will have customers that want Longhorn exploitive apps on day 1. For other developers they will have to wait. There are still people writing code (lots of it!) for mainframes, Win98, and OS/2.

Avalon isn't just flash

Ian correctly points out that Avalon is more than just eye candy [link fixed]. I'm glad he made this point - all the flash in Avalon is really about providing easier ways to have computers interact with people (both on the input and output side).

One point that I have to disagree with, is this unnatural belief that everyone seems to have that it's not code if it has angle brackets. I hear people say this about XAML, HTML, XSL/T, and more. Just because it's markup doesn't mean it isn't code. Pure HTML + CSS, that I would classify as much more "document" than code... XAML and XSL/T, those are both pretty clearly in the code space. What is the line between Perl, C#, XAML, XSL/T, etc?

The key aspect isn't about if the language is declarative, imperitive, a mix, or what... the key aspect is the abstraction layer that you program to, and the number of constructs that you have to understand to intepret the code. XAML is a declarative abstract language with a very few number of constructs... all making it simple to understand (hopefully).

The declarative thing is nice (especially for tools), and I think it is a key aspect. But declarative isn't some magic powder... i look at looping constructs in XSL/T and I get truly scared... it is often better to have a combination of declarative and imperitive code that try to go with a "pure" declarative model.

Career testers

I had a friend that runs a QA (aka Tester, aka STE, etc.) contracting firm. One of their company's attribute is that the entire company is dedicated to testing, which means they offers testers a career path. I've often heard (and seen) that QA as a discipline inside of Microsoft (and I believe the industry) isn't viewed as a long term career. Of course, I think this is a horrible place for us to be, QA is a critical part of the product development cycle (as is PM, UE [docs], Usability, etc.).

It's a challenge to try and figure out why QA is sometimes seen as a second class citizen. I was happy to see Greg Chappell start a blog as an STE [link from Technical Careers @ Microsoft]. I love Greg's description about his job from his first post "My Job is to be an advocate for our users."

Rory's helping people try Windows...

Rory has talked Christopher Anthony into trying Windows... "It looks like he's giving Windows a shot. While I don't expect him to actually become a dedicated Windows user any sooner than I'll become a dedicated Linux user, it is nice to see that he's at least making an effort to see what's on the "other side of the fence." Making arguments about things you don't understand (Windows, for example) will just damage your credibility and people won't even care what you have to say about Linux. All in all, I think this is a good move for Christopher because it will strengthen his position no matter what."

Firefox and Mozilla

I installed FireFox on one of my machines to see what the hubub was all about. So far I don't see much difference. Part of that is that I see browsing as a mundane task, I don't see a lot of things I'm lacking. Tabbed browsing is interesting, but FireFox doesn't seem to auto-validate against my NTLM credentials, which means that I really can't use it to browse our corporate intranet.

One of my coworkers suggested that I also read up on Mozilla itself... he recommended Creating Applications with Mozilla.

Computers suck

We have a long way to go until computers (hardware and software) are really there - but for today, computers suck.

XAML v. Flex (MXML)

Jon posts hist own comparison of MXML and XAML, to which Rob responds...

The CSS debate was a huge one internally, and in the end I think you will find visual triggers, timelines, and visual trees to be a powerful way to change the appearance of controls... One of my big issues with CSS is that it really only works for "already known" customization points. With VisualTrees you can specify arbitrary new appearance using vectors, images, video, text, etc.

Flex is for enterprise apps

Christophe says that Flex is designed for enterprise customers...

"

  1. Integrates with existing development processes in IT organizations (version control systems, etc.)
  2. Supports traditional development methodologies, application architecture, design patterns, etc.
  3. Supports team development
  4. The programming model supports the development and maintenance of large scale applications
  5. Provides flexible integration with back end systems: Web Services, Remote Object, HTTPService, Session Object, etc.
  6. Provides built-in security features and/or integration with existing security infrastructure
  7. Provides debugging / profiling capabilities. Not only code debugging, but also debugging network traffic, SOAP packages, etc.
  8. Provides flexible deployment options, via deployment descriptors.
  9. Scales within an Enterprise server infrastructure.
  10. Comes with focused, high quality services."

Mary Jo Tomorrow

Tomorrow I'm talking with Mary Jo on the phone... I missed her at MDC (I heard she wanted to chat but it didn't work out)... I did my first real "press" discussion when I went over to London earlier this year... typically Microsoft gets worries letting the unwashed masses like me talk with press folks... should be fun to see what she thinks of me!

MDC in retrospect

MDC was absolutely amazing. It was my first chance to be the "anchor" of a keynote, and I think it went pretty well. Happily, the planned theme of the keynote was to educate the idiot, and since I didn't know anything about the mobile space beforehand, it worked well! :)

Seth, Ori, And Kevin Collins did an amazing job.

I can't wait to see what the audience thought about the presentation. I'm sure some thought the whole "I don't know what I'm doing" thing was a put on. I can tell you, it wasn't.

The funniest thing (for me) had to be when I asked Ori if I should ask MapPoint for coordinates on the Moon or in North America. During rehersals he kept stressing how fragile everything was and that I shouldn't try things out on stage. I had selected the moon previously (during other dry runs) but I'm pretty sure that he wanted to go with the "safe" answer of North America. I love being contrary ;-)

Anyway, I really want to thank the entire mobile team (from VS, MDD, SQL CE, to CF) for the chance to do the presentation. It was so much fun, I really learned a lot, and it helped me to really get clear in my mind what I deeply care about (smart clients, regardless of size <G>).

Hacking XAML

In my previous post I don't think I was clear about the methodology that Avalon uses to hack (err, customize) the XAML parsing. This caused Pete Cole to observe:

"That a hack is 'by design' doesn't make it any less of an inelegant, unsatisfactory hack. This does explain some of the bizarre syntax I have previously complained about. One wonders if the implementation of XAML is becoming like writing Word Processors - you end up putting in kludges/hacks in the code to cope with particular strange cases. That's OK a) the hack works and b) its invisible to the 'user' (they just see the programming formatting correctly as they expect) - hacking implementation of a 'programming' language ain't going to work." [Pete Cole]

The interesting to note, it is actually the Style object that implements the custom parsing and serialization of markup to support the "as use" syntax. This interface is documented and discoverable (both by tools and developers). In addition any component can implement the interface and customize their parsing.

Hack, maybe. Invisible, no.

Is XAML really a build engine?

Marku (over at Codito ergo sum) has figure out that XAML is really a thinly disguised build engine... heh heh... Seriously though, it is a good observation that XAML is really just a way to persist a set of CLR objects (of course, a specific set of objects with a specific gramar... not to be confused with a general purpose serialization engine... )

Clemens talking about open source and free

To start Clemens Vasters writes a letter to a fictional Aiden about open source... Responses ensue, and Clemens retorts talking about free stuff vs. free stuff.

I debated if I even wanted to post this, because the debate seems tired. Free stuff (as opposed to open source) is about communism (little "c" communism not the evil red stuff that we supposedly fought in the cold war). Communism (still little "c", although at the start of a sentence I have to capitalize it) is not a good or bad thing, it is just a thing. It is a model for getting along with everyone and having everyone contribute to a common goal with the expectation that everyone will take care of everyone else. Communism at it's heart requires supreme trust in the other members of your commune to do their part with the same enthusiams as you.

Open source is about (in my mind) a business model that lets you release source code, and more critically take changes back. Releasing source code has been the model for frameworks for a long time (MFC, OWL, etc.). The key innovation in open source is the notion that the community can contribute back directly. Well, not so directly - they must go through a gatekeeper or insanity normally ensues (Linus for the Linux kernel for example).

Because open source asks the community for contribution back, there is an assumption (rightly so) that everyone in the contribution community should get compensation, normally in the form of credit, etc. However, if someone were to start selling the product for profit, many of the contributors (I would imagine) would feel they have the right to share in the profit.

It is this final point that I believe ties open source to free stuff.

Because of this, the business model (we all have to eat) for open source is limited to either companies that can profit indirectly from the open source product (i.e. by selling services or packaging like Red Hat, or a different product that benefits from the open source product like IBM and DB2 on Linux) or companies that want to donate to a loss leader to make another attack on a competitor (for example by commoditizing a competitors primary source of revenue). Of course, the final place that open source will probably always have a good place is in public works projects. Here the government provides the funding and therefore the People are expected to have ownership of the result.

The debate is tired. Open source is neither good nor bad, it is just a model. If open source works for your business and social needs, great. If shareware works, great. If retail licensing works, great. There is no one pure righteous business model.

Interviewing at Microsoft...

Gretchen (over on Technical Careers @ Microsoft) takes Scoble to task for complaining about the core competency interview...

On Friendster...

Best quotes... "Microsoft has gone a step further and created a social network that no one can join making it the most sought after..." and "In my version of Friendster you would have to pick me up from the airport before you could be my friend" (all quotes slightly paraphrased)... Ze Frank on Friendster... link from Joi.

Is it bollixed up?

From Chris Sells...

"Marc Clifton, author of the MyXaml open source project, publishes a series of articles exploring opportunities for improvement for the Avalon architects to consider:

I hate to defend stuff, generally I like the debate more than one sided... hopefully Marc will hear some of my responses and respond...

First, generally about style. Yep, Marc, you are right Style is messed up. Before we dive into the tag names are class names issues, lets address "Set"... right now it looks like we are fixing that one in a future release (I say looks like because of the standard caveats, etc... current plans always subject to change and still looking for feedback from customers, blah blah...).

The tag name issue - which for style we call "As Use" syntax - was a concious decision where Avalon broke the XAML rules.

Yes, as we have said many times, XAML is broader than Avalon. Don Box and I have shown XAML being used for console apps and more. In this case, Avalon decided that the markup model for style, strictly following the XAML rules, would have been horrible.

The problem starts with cloning. Since styles are effectively defining templates that need to be applied to multiple elements, you have the issue of defining what things need to be copied, and what can be assigned. In early builds of Avalon we used an implicit cloning model. We would create an instance of the element tree and then clone the tree, using several models for accomplishing this. It turned out not to work very well.

As part of the Avalon rearchitecture last year we moved to an explicit cloning model - enter FrameworkElementFactory. The element factor was an explicit object that would create new instances of another class and apply that style to it. Hence we could now create elements in a reasonable fashion. Of course, the markup ended up looking horrible:

<Style>
    <Style.VisualTree>
        <FrameworkElementFactory Type="DockPanel" ... />

So we came up with an alternative - what if Style had special parsing logic (by implementing an interface) and would basically switch the parser over from generating elements, to generating factories. Ah... now from an imperitive code model, we had explicit cloning, but from a markup model we had code you could understand. We then applied the same hack (uhm, i mean design) to the element explar - which gave us "<Button Background='Red' />"

I agree completely that the style tag breaks a bunch of XAML rules, and this was by design. The correct way to parse XAML is to instantiate the appropriate CLR types and inspect them for the various interfaces (IAddChild, IParseContent [or was it IParseLiteralContent?])... XAML is a way of binding XML to CLR objects.

And for the last bit - the magic missing collections... here is a continued debate on the Avalon team. Having a collection specified for every tag is a pain, so we introduced IAddChild as a way for a specific object to control the parsing of child elements and text. If we are using this interface too much, we should fix it - however the interface (and capability) is needed to support the final leaf nodes of the tree - eventually someone has to consume the text nodes in the XML document ;-)

Anyway, some of the issues that Marc brought up we are actively addressing, some we think are there by design... regardless, lets keep the conversation going and keep the feedback coming... we are listening!

Sharing with your friends

A new spin on file swaping, only sharing with your friends... [link from Russell Beattie] (hmm... the direct link is just a login... you should read Russell's article for the scoop)

Eclipse M8 is released

Lots of new stuff... Eclipe's latest release - M8 - is now available, you can check out what's new, or just download it. [Links from TheServerSide]

The UI looks really cool, with some nice features... it's looking really polished - the start page for the app is nice and minimalistic.

Mozilla futures

Looks like some cool features coming up for the Mozilla engine...

"Platform improvements

  • SVG on new rendering architecture
  • JS2, Python, other languages/runtimes
  • XUL app builder IDE, built on Eclipse
  • More native widget/desktop integration
  • developer.mozilla.org for platform docs"

SVG on the Linux desktop

Over in OSNews there is a great article about the history and future of vector graphics (specifically SVG) on the Linux desktop...

"Another thing we hope to engage the wider community in is the concept of scalable GUI's. As screens get higher and higher resolutions, many people want and need high-resolution, scalable GUIs. Using traditional bitmaps, this would quickly give GUI's with rather pixellated look - for instance, consider the double-size mode of XMMS. Using SVG graphics, we will be able to offer this with icons that scale up nicely. Work on this is already underway in some of the GNOME games. Hopefully the games will become ambassadors for the usefulness of such a feature."

Congratulation to the Flex team!

Looks like today is the big day for the Flex team... Congratulations, should be interesting to play with this once it's out in the wild!

Stutz and Ozzie

Meeting Ray Ozzie last year was pretty cool. It was one of those events that helped cement in my brain how little I knew about the history of the profession that I'm in. In some ways it seems that computing is so focused on the future, that we rarely look into the past.

Ray starts this latest discussion with some observations about WinFS. Which inspired Stutz to respond with his Natural History of Software Platforms. And then most recently Ray has a short reply...

When you read Stutz's essary, be sure to follow the link to Butler Lampson's presentation on components... Talking with Butler is always a bizare experience - it sometimes feels as if he has tried everything we are currently thinking about in the future, and he can give you the pros and cons of each option!

So, is there anything really new going on, or are we just repeating the cycle of features, platforms, and decreasing value?

Fun programming...

Michael's slightly tongue-in-cheek (i think) post about Microsoft taking the fun out of programming:

"So, as with everything in the development universe, Microsoft and its endless supply of freakin' geniuses has saved the day. This is the frustrating part about being a modern day programmer. Sure the pay is good, but with Microsoft solving all of the problems for us, we're left with all the boring business implementation details."

It's interesting, as with anything it all evolves. At one point you had to buy a separate memory manager for your computer. Now one is built in. We are all moving up the abstraction levels - no longer do you talk to the VRAM directly, you use DirectX or OpenGL.

The value that people can add when standing on other's shoulders is absolutely amazing. What looks like boring business implementation details today, is tomorrows future...

Cargo-cult programming

Eric Lippert has some great posts about cargo-cult programming (and continued here and here)... [link from Brain.Save]

Latest "Inside Avalon" posted...

My latest article seems to have appeared up on MSDN... The Blinking Lights Division is this month's (or bi-month's) column in Inside Avalon...

Pair Programming...

Roy points to an article and whitepaper on pair programming, sounds like an interesting study in the XP practice... of course I can't read the PDF right now because I'm download the 6.01 upgrade to PDF :)

Performance in moderation

Performance is all about moderation and deliberate decisions, and Paul Vick nails it again. People get too obsessed about the "perfectly" performing systems. All too often there is a "good enough" metric for performance. Trying to make a window appear in 50ms instead of 150ms is probably not worth it, given that the delta is almost imperceptable to most people... of course, if this turns into a problem where your complex window takes 1500ms then you are in trouble.

Performance must be combined with product scenarios to have any meat.

InfoPath update...

I love InfoPath, it's ability to provide "VB for XML" is just amazing, and now there is an update (preview) with VS support and .NET... very cool [link from Eli]

Ref counting in .NET

Still going through a backlog of blog posts...

Chris Sells got ref counting working in Rotor... pretty cool, although he does clarify that he isn't convinced it would be a good thing to do for real!

Sneak peek at MDC

Seth Demsy has some of the earliest pictures of MDC... Seth is going to be one of the fine folks that do all the real work in my presentation on Thursday...

3D Bob?

I haven't tried it either, but looking at the link from Scoble, this is really reminiscent of some of the desktop stuff that came out in response (or at the same time) as MS Bob... Hmm, maybe we should be looking at bringing Bob back?

Smart client echo

David Gristwood sees the .NET framework as a key enabler of smart clients, and is looking to new features in Whidbey to make it even better...

Combining Struts and Flex

No, this isn't a new workout program. Christophe over at Macromedia wrote a sample that shows how to make Struts and Flex play nicely together... He even published his source code. I still need to figure out how I can actually play with Flex without getting in trouble... :)

What is a smart client?

David Hill has a pretty good definition of what a smart client is [link from Chris Sells]... it's especially fitting because of my upcoming MDC talk:

"In addition, the client platform has moved on in the past few years and now includes many different types of client devices, not just desktop PCs. Such devices include PDA's, SmartPhones, Tablet PCs, Laptops, set-top boxes, automotive devices, retail terminals, and so on. Smart client applications can be built to take maximum advantage of the features provided by the host device and tuned to provide the best user experience for the typical users of these devices."

He also has a great check list:

"

  • Utilizes Local Resources
  • Connected
  • Offline Capable
  • Intelligent Install and Update
  • Client Device Flexibility  

"

This is one of the more clear definitions of smart clients... too often people get too trapped into specific features. Using Office doesn't make your application a smart client, writing with the .NET Framework doesn't make it smart either. The key is to offer a great user experience with compelling functionality.

Make a ten year product plan...

Joel makes a good point - Good software takes ten years. His advice is that you should make ten year product plans. It's interesting, I have some personal goals that are up to 20 years out, some that are in the 10 year time frame, and more that are in the 2-5 year span. Most products I have seen have an outlook of at most 2 years (well, normally 1 version). It's hard to convince people to try to spend the time to think about ten years out - after all, all good ideas should be implemented in the next milestone.

More on presentations...

Harry (a while ago) posted about his view on slides - try not to use them. Which I generally agree with. Of course, to show differeing views Sascha wants to make sure appropriate use of slides.

While preping for my MDC session, I got the advice that for a big talk having some slides to orient the audience is a good thing. Originally we were thinking of having absolutely no slides in the presentation - however with 45+ minutes of demos (mostly coding), I think 5 minutes of slides should be tollerable.

GNOME and more...

"hp has started the formal future of GNOME discussion apparently. I have a lot of respect for him, but his article disappointed me in several ways. Unfortunately, this will be largely decided by the corporate backers of GNOME, with a lot of business reasons for the decision instead of the more traditional technical reasons. I have a lot to say about this so here goes. Note, I am biased in that I prefer C# over Java but I stand to make no gain if one is chosen over the other (except productivity)." [from John Luke]

Another entry in the markup based UI category...

Ahh, we had HTML, SVG, XFORMS, XUL, XAML, MXML, and more... now, AUIML enters the stage... Abstract User Interface Markup Language seems to allow people to author Swing or web based apps with one UI definition... looks interesting... [link via TheServerSide]

No code is an island

Don Box always says "No program is an island"... Raymond has a different view on that...

Java generics support polymorphism...

Reading through the "Generics in the Java Programming Language" [from TheServerSide] document that Sun released, I was interested to see generic polymorphism, something that .NET generics (I don't believe) support...

void doSomething(List<? extends Foo> list) { ... }

Pretty cool...

Documentation (aka Technical communication) myths

I'm sure everyone has seen this (since it came to me via Scoble), but I really dug this (I'm trying to clear my backlog of "blog this" items)...

"

  • Myth #1: Knowledge of Specific Tools Is Vitally Important
  • Myth #2: Sans Serif Fonts are Always More Legible Online
  • Myth #3: Audiences are Static
  • Myth #4: Minimalism Means Keeping Text as Short as Possible
  • Myth #5: The Optimum Number of Steps in a Procedure is 7 Plus or Minus 2
  • Myth #6: You Can Make a Bad Interface Easy to Use Through Superior Documentation
  • Myth #7: We Can't Talk to the SMEs
  • Myth #8: Usability Testing is Prohibitively Expensive and Difficult
  • Myth #9: Single-sourcing Means Dumping Printed Documents Online
  • Myth #10: Documentation is a Cost Center

" TECHWR-L

I often get frustrated at Microsoft's lack of focus on documentation. We have some great writers, but we always seem to underfund our documentation teams (internally called "User Education" or "User Assistance" depending on the org)...

Technical presentation advice

Generally I agree with what Joseph is saying... "I know this might sound really obvious, but if I had done this instead of trying to cram in demos for everything that I wanted to show I think my presentation would have been a lot better."

The other one I like (which Don gave me) - "Facts obscure the truth.", it was troubling for me at first, but now I really believe it. It is almost always better to omit the minutia about a topic and just talk about the key messages or ideas you want to get across. If you presentation really is about the obscure details of some small topic, great, but most presentations aren't.

Porting BlogX to .NET CF

As everyone probably guessed, my last post was generated directly on my iPAQ talking over my wireless network at home...

Some interesting observations...

  • You get very wierd behavior if you take an assembly that was compiled against the desktop framework and run it on the device. Visual Studio will silently let you do this, compile, and try to run - however you will get odd errors. I saw "You need a new version of the framework", "Unexpected error", and "TypeLoadException". In the end I had to copy all my shared code from BlogX (the service proxies and runtime helper classes) into new CF projects.
  • Guid.NewGuid doesn't exist, but it took 1 google search to find the right hack for this. I'll have to follow up with the device folks to see if this is fixed in Whidbey.
  • XmlSerialization isn't in the .NET CF... I'm suprised they didn't just write a reflection based version, but I bet it would have been way too slow. This made me comment out a bunch of stuff from my shared BlogX libraries.
  • TabOrder isn't supported (or maybe my machine is broken). I couldn't get the TabOrder UI in VS to show up, so tabbing around between the fields on the device isn't in the right order (I can fix this in code though). Of course, many devices don't have keyboards so this probably isn't that big of a deal.

Overall, I'm pretty amazed that it only took 1 hour to get a smart client blog posting app written, of course I'll credit this to the great modularity of BlogX (ha ha!!!).

BlogX Client For .NET CF

It took about an hour, but I can now post blog entries directly from my iPAQ... the built in keyboard actually makes it somewhat tolerable!

test

test

XP SP2

I'm installing XP SP2 right now at home (well, actually downloading the 273MB install right now)... I've been running a build of SP2 on my laptop for a whlie and there are some pretty great new features in there (popup blocker, better firewall, etc.) overall I've been pretty happy with it. My only stumbling block has been that Microsoft's IT group deployed a very restrictive policy on the firewall earlier in the testing phase that locked out many of my applications (the XP SP2 firewall is completely configurable by group policy, very cool).

Thanks for the link Scoble (I know that scoble is collecting links, so I want to make sure he keeps a high google pagerank).

.NET Compact Framework...

I've been attending JavaOne for several years, and every year one of the things that amaze me is all the device stuff. I knew about all of the Microsoft device stuff, but I never really appreciated it until this week. On Tuesday or so I got asked to talk at MDC, and since then I've been diving into our mobile technology offerings.

First, I have always seen that smart mobile devices are a key component in the smart client ecosystem. You are not always going to have your laptop or desktop with you, and you need something to access your information. In the past I've played with several CE devices, the Apple Newton, and at least half-a-dozen different cell phones. In their day, the various devices always seemed pretty cool, but I never really had such a desire to program for these until yesterday.

The folks at the MDC gave me a HP iPAQ 4355 to get me up to speed and get an appreciation for where we are today. It is absolutely amazing. I remember seeing the Sharp Zaurus a couple years ago at JavaOne and I was amazed. The device was running a Linux variant with J2ME running on it. I was so frustrated that Microsoft was doing so poorly with our device offerings.

No more.

On thursday I picked up my new device and installed VS .NET 2003, and then the Pocket PC 2003 SDK. Within 5 minutes I had written my first application - using WinForms, and about 1 minute later I was querying web services, browsing the file system, it was amazing.

I talked a bit with the compact framework team when they were developing it (I worked on the WinForms and then .NET Framework class libraries team at the time) and we talked about how they were doing the port, etc. I never really got into programming on the devices, mostly because at the time I was so focused on the desktop, and the device stuff was so immature from a platform sense.

These new devices are absolutely stunning. With built in WiFi and Bluetooth I was syncing mail, running managed code, and talking to web services as I walked the hall. I know this sounds like a commercial, but it was an experience.

I've already run into a bunch of issues with the existing tools and platform though. Accessing data on the device, talking to the contact database, etc - all are really tough today. It is going to be a blast to go down to MDC and talk about what we are doing to make this stuff even better in the future.

In the mean time - I tried using the InTheHand POOM library, but I get a missing method exception when I try to run it on the device... anyone know how to fix it?

Thursday, a day of preparation

Looks like I'm going to be presenting at MDC... today is an excercise in being submerged into technology...

Markup for WinForms...

Joe writes a sample showing markup for WinForms... [link from Mike Harsh]

Teach yourself programming in 10 years

Early adopter reminded me about this gem... Teach yourself programming in 10 years [link from Early Adopter]

What is a color?

Wesner has been spending time with color, the good old color from WinForms. Interestingly enough, there are reasons for the odd behavior he describes...

When working on WinForms and ASP.NET we really wanted to unify some of the system types, and color was a pretty problematic one. The issue was that ASP.NET wanted to allow all the oddities of HTML (including the ability to use bogus or out of range values) for color, while WinForms wanted to allow all the oddities of User and GDI+ (including system colors that represent a logical color). The solution - lets to it all!

So the Color class was born.

We debated a lot internally if Color should be 64-bit scRGB or 32-bit RGB... in the end GDI+ (if i recall correctly) ended up punting on full 64-bit support for color, however we knew in the future they would want to move there. The internal data structure of color therefore uses a 64-bit value to store the color, but only ever utalizes the first 32-bits.

Next, to support the various ASP.NET round tripping issues, we needed to store the string name of the color.

Finally, we have a state bit to determine what is determining the color - basically is this a natural RGB, known color, or named color. Known colors are just the magic colors that are part of the web and win32 built in color set (Red, ControlText, etc.). We wanted to track the known colors both for dealing with the whacky Win32 system colors, and to preserve the knowledge that a color was specified as "red" not as 255,0,0.

That is what we have today - a big color class that can do a lot, but has a lot of idosyncricies...

In Avalon we are moving to a full 64-bit color engine (native scRGB support) with support for multiple color spaces (you can specify colors in CMYK, etc.). Our color object won't be shared by ASP.NET, so we don't have some of the name based stuff that we have to worry about, and right now our plan is not to support Win32 system colors - but rather to solve the same problem using our styling and resource system to have a more natural and evolvable system instead of the magic colors.

MVC and WARS

MVC apparently is way to simple ;-)

Now we have "WARS" - Worflow, Action, Representation, and State. The implementation example described by Rupp is pretty simple, which I like. The notion that presentation can be ignored, and boiled down to a detail of "representation" I find to be a little extreme (of course!), but overall this seems like a somewhat sane model.

That said, still not sure how many people would "get" this model - but if you are into MVC, WARS might be a reasonable alternative... [link from TheServerSide]

"Smart" resize...

Joseph wrote a smart resizing sample, where the form doesn't relayout until the window is done being sized by the user.  It's an interesting solution, however the OS already has this functionality - if you turn off full window drag you get the exact behavior that Joseph emulates, but it works in all applications. The problem that I have with this is that a local optimization (Joseph's smart resize) is trying to out guess the global optimization (the system's ability to turn off full window drag)...

I wonder if I can present?

I almost went to Lake Tahoe when I made a wrong turn heading to the PDC (no really, remember the fires... I got stranded in Reno and had to drive to LA)... but since I've never been to Tahoe, I'm curious if I could figure out a way to go? If I was presenting about something then I might be able to get work to foot part of the bill (or at least let me take the time off)... hmm...

Gnomedex 4

Any conference that advertises a 3 day open bar can't be all bad???

Cognitive Dimensions

I really dig this formal way of diagnosing the quality and approachability of an API. I still find that producing a good API is a lot of art, but it's very cool to see a scientific discipline be applied... Steven Clark has posted a couple more of the dimensions:

And from before...

Very interesting stuff...

Steven, if you are reading this - you really should produce an "index" page that people can have as a one stop center for reading your posts about each of the 12 dimensions.

Distributed computing

Sam makes some great points about distributed computing... There is a tough balance, I think, between producing some understandable sample to demonstrate a concept, and to produce a real world working application that scales. The reality is that a lot of applications written don't need to scale, and having every sample contain all the goo needed to be a truly scalable system would make it impossible to find the one line of code needed to render the data grid.

With that sense of moderation, I really agree with Sam. Software is growing, rapidly, and we must all adapt to write code that scales better...

Java and .NET security

Denis Piliptchouk on OnJava is writing a series that compares Java and .NET Security... Part 1, Part 2, and Part 3 are available. Seems to be a pretty even and fair comparison. [Links from TheServerSide]

Linux... and questions

Rick Klau is trying out Linux... I found the post that Rick points to - Eric Raymond's "How to ask smart questions" - to be a fabulous guide on how to ask technical questions and not be a dweeb...

I've found myself getting more lazy about asking questions lately... I'm way more likely to send a random ping to a dev on the team to ask about the status of something then to check the code base... no more excuses, I need to start answering questions myself.

XML perf

Apparently XML processing is faster in Java than .NET [via TheServerSide]... Of course as with all statistics and benchmarks, I"m sure people are already fighting over why this is innacurate...

In the end, the question should really be is your _____ (fill in the blank) technology fast enough for your needs? It doesn't always matter if there is a faster solution, it just matters if you need a faster solution.

Hmm... still stuck...

I'm sure I'm missing something obvious... but I still can't get out, and I have watched the video the whole way through... hmm...

Crimson Room found via Sean.

.NET 1.1 bugs with VisualStyles

From a post on AddressOf it seemse there are a bunch of issues using VisualStyles (themeing) in WinForms with .NET 1.1... Yo, WinForms folks - are these fixed in Whidbey?

Extreme Programming and zero defect software

Martin Fowler's bliki topic on VeryLowDefectProjects got me thinking... we are constantly trying to experiment and figure out new methodologies for tracking progress, rewarding employees, designing products, checking in code, etc. The goal with all of these changes is fundamentally to increase the quality of the eventual product, increase the value of the eventual product, and decrease the cost of producing the product. (features are just a want to increase value... i guess so is quality when you get right down to it)

Martin makes a great caveat in his entry: "I need to stress that so far only a few XP teams are getting the very low bug rates. I have only run into a handful so far. The teams seem to be pretty disciplined and led by people who have a year or two of XP under their belt."

To me this adds a bunch of credibility to his comments in general. First, he recognizes that most XP teams aren't seeing immense decreases in bug rates, and secondly he notes that the teams that do see the decreases generally have people with a bunch of XP experience.

Sometime I worry that we churn on methodologies so much that we never let any one system have a chance to demonstrate if it is actually effective.

XML Versioning

Dare wrote a great piece about XML versioning... right now we are debating versioning on an almost daily basis with respect to XAML. Versioning XML documents is really tough, as Dare's post points out.

Tear down your walls!

Eric Raymond sent a letter to Sun asking them to open source Java, saying they had to choose between ubiquity and control... [From TheServerSide]

Architect personas

Michael Earls talks about two types of architects... the "Purist" and the "Realist"... as with any clasificiation there are a million gradiations between the two, and another thousands axis to think about the problem space...

I often get depressed when I talk with people around Microsoft, you see, I'm not that smart. I know that eventually people will figure it out and then I'm going to get canned. (crap! my boss my read my blog!... uhm, actually I'm really smart and deserve a raise, yeah, that's the ticket). I had the chance to hang around with some of the super-bright folks around Microsoft a couple weeks ago, these are the type of people that worked on virtual systems when they were actually new. I've always said, one of my favorite things about Microsoft is that you are never the smartest person in the room.

If I think about Michael's scale, I'm definetly on the "Realist" side. After spending years working with folks like Anders Hejlsberg I've learned that the simplest and cleanest solution is often the best, and that the overly abstract or pure solutions often don't work out.

More reasons to love the Mac

I had the chance to talk with a developer from the MacIE team, and he talked about the scrapbook feature. I've always wished the Windows version of Office looked as nice as the Mac version. The local paper did an article about Microsoft's Mac BU that got me thinking about this...  

Nikhil is at it again...

A couple points...

  1. Why didn't Nikhil tell me he was doing something this cool?
  2. Yes, Nikhil is the guy that wrote "Web Matrix" in his spare time
  3. Nikhil is one of the few developers that I have met that is also a great graphi designer

Check out his very cool bexier spline designer...

Marc in Orkut...

Even though I would normally want Marc in my friends list in Orkut, I decided today that I had to remove him. Currently it seems that he has just added everyone he can to his friends list, and it seems that introduces a lot of friend-spam... I may have to re-think this, but it seems that social computing breaks down when the "friend" relationship doesn't have meaning... For example, today I declined some people because they weren't really my friends (I had never heard of them in fact)...

How should this work?  Is it purely a networking device (in which case we are all each others friends) or is there supposed to be some relationship present to justify the link? Should their be a quality of the link ("just met", "good friend", "best friend")?

Roy on MVP

Roy's Information hoarding post calls Microsoft to task for not providing a guaranteed answer for every post in every newsgroup. Over the past several years we have been trying to improve our community relationship, most teams have a set of blogs that they try to ensure a reasonable response time. For Avalon we have a goal (still a ways off from making the goal) of answering every post in the Avalon newsgroups within a few days.

The problem to me is that we don't have infinite resources. It's sometimes a shock to people, but inside of Microsoft resources are very tight. Every product that I have seen has had to cut features because they don't have enough time or people. If these same product groups had to staff enough people to answer every question in every newsgroup, there would be no one left to build the products!

That said, we are trying to get better, much better.

For the time being, we are hoping that by helping MVPs get more information, we can get a magnifying effect. By having MVPs that are knowledgable and recognized experts in there area, we can impact even more people.

Roy, keep an eye on us, make sure that we are getting better, and let us know if we don't improve.

Rip XAML out? Sure!

Rory chimes in on some people saying that XAML should go... Of course, if I said something like "Just because you don't like the fact that Microsoft created a new markup language, you want to rip it out and replace it with something else. Did you stop for even a moment to consider what a monumental task that would be? Why don't you just ask for someone to repaint the Empire State Building? Or have it moved a block over? Or transported to Sweden?" people would just assume that I'm lazy and don't want to do the work...

Reflection made easy...

Well, not easy, but it does what you want...

Dino is trying to parse "Gainsboro" and set a property "BackColor":

object o = this;
PropertyDescriptor bg = TypeDescriptor.GetProperties(o)["BackColor"];
TypeConverter c = bg.Converter;
object v = c.ConvertFromString("Red");
bg.SetValue(o, v);

This is using System.ComponentModel, basically the same code that the designers and code generators use inside of Visual Studio...

The Ten Rules of Performance

Paul gave this presentation to a team I worked on many years ago, now he wrote up a great blog post about it - The Ten Rules of Performance. Great read, thanks Paul!

RIA and Flex

While reading this piece on building apps with Flex I began to wonder about how far an application designed with ActionScript can go?  I've been amazed at Outlook Web Access and what that team accomplished using IE and scripting, however I have a harder time believing that something like Word or Photoshop could be built using purely a scripting langauge. Of course, that is what people said about C when it came out :)

Another NIT - I love how everyone has to try and coin new terms. Macromedia is pushing "Rich Internet Applications" while Microsoft is pusing "Smart Clients"... Amazon seems like a pretty freakin' "Rich Internet Application" and my TiVo seems like a "Smart Client"...

I don't mind the term "Smart Client", we have to use some name to talk about our client initiatives... we used call them "Rich Clients" (to differentiate from "Reach Clients") but we got a lot of pushback that "Rich" is a useless term. One person's rich is another's least common denominator. I'm not sure that smart is much better, but it's a lot better than "WinDNA"!!

Ryan's cool Longhorn stuff

Ryan is doing too many cool things to link to them one at a time... Just subscribe to his feed and check out the cool Longhorn (and Avalon!) stuff he is writing...

Tim Anderson about the London ISV event...

Tim comments on the London ISV event [via Scoble]... "I had wondered whether Microsoft might rewrite MSHTML in managed code, or else create a Longhorn web browser that converts HTML to Avalon rich text. Chris said no. He said that MSHTML is a complex body of code which does an extraordinary job of rendering even malformed HTML. Since the Internet works on the assumption that this kind of web page renders successfully, and since there are so many quirks and workarounds in MSHTML, Microsoft's developers did not dare to replace it. I hope I'm representing Chris's comments accurately. In essence, it suggests that IE will remain broadly as-is, well, for ever."

Of course, "for ever" is a mighty long time... but I can say for certain, MSHTML is a complex body of code, and as with User32, GDI, etc., we will think long and hard about the application compatibility bar before we start thinking about rewriting that code... But, as James Bond says, "Never say never"...

dasBlog... don't like the links...

I just tried to copy a link from a dasBlog site... for some reason dasBlog puts a bunch of crap around the link, making it difficult to copy the link... +1 for .Text

XAML attributes

If you are intersted in where we are headed with XAML, you should really read Rob Relyea's blog... in one of his latest posts he outlines one of the debates we are currently having about how we want to expose complex properties (like Brush) in markup...

Code reviews are a Good Thing

We are about to give a class on code reviews to a bunch of the devs on the Avalon team. Code reviews are one of those things that can only help a project. Today we require a code review on every checkin, and in addition have extra tools that validate that each checkin didn't break the build, any suites, or regress perf (still working on getting this one solid <G>)...

Joseph Cooney has some interesting refrences about code reviews...

 

Tasty new media center PC

Sean got a new media center PC... very cool.

Messages, Objects, and Services

It's taken me a while to wrap my head around this whole service orientation thing, and this indigo thing, and... well, everything. Reading Dare's post about Objects and Messaging I can really see how people get this stuff confused. In ObjectiveC all method calls are really sending messages (in the implementation, I believe they really do send messages)... so, does that qualify as service orientation?

Well, remember the 4 pillars of service orientation:

  1. Boundaries are explicit
  2. Services are autonomous
  3. Services share schema and contract, not types
  4. Policy based compatibility

None of these actually say that messaging is part of service orientation. Messaging is one technique to accomplish some of these goals, it isn't a fundamental tenet of service orientation.

Brady (Flex IDE) screenshots...

Christophe posts some screenshots of Brady, showing editing MXML both in text and GUI form, actionscript debugger, all sorts of goodness...

Generics in WinFX

"What excites me is the possibility that generics and other new CLR constructs as they come will also be integrated into the OS. I have not really seen any generic mechanism used at the API level in any operating system, since generics often were a compile-time feature, not a run-time feature as it is in .NET." [Wesner]

We are spending a lot of time these days debating generics in WinFX... generics will be in the CLS for Longhorn, so we are free to use them. Right now there is purely a process/engineering issue where we need to get all the various pieces together to make generics work (NGEN, C++, etc.)... obviously in the PDC build there wasn't a lot of generics, but hopefully in future releases you will see more generics in the APIs...

.NET Linker anyone?

Jason Zander (CLR PUM) responds to Joel's linker request...

Bad programmers...

Signs your company has hired a bad programmer [via StronglyTyped]

Linux security

/. has an interesting thread on security reviews...

One of my favorite comments: "Our model is: review a whole body of code, eventually finding no bugs, and receive a deeper level of appreciation from people who use the code.

I'm sorry, appreciation does not pay bills."

SmartResize for WinForms

Joseph Cooney has a smarter resize for winforms...

Martin on commands

Martin has an interesting bliki entry on commands... we are trying to work through the design of Avalon commands internally... once we get something solid enough, I'll try to post some of the design docs...

Is RSS ready for prime time?

Dare defends RSS from Dylan...

.NET here and now...

Jon's .NET reality check post raises a bunch of interesting questions. Of course, I like to take this further and look back at how many times we have promised in the past (for example "easier deployment" has been a battle cry for almost a decade - MSI anyone?)

I'd like to comment on a few of Jon's questions...

Unified programming model: I beleive Longhorn shows the direction we are going in clearly here. After .NET 1.0, we have released Managed DirectX for example. Whidbey takes this further, and in Longhorn we have the model that all new functionality must be exposed via managed APIs.

Programming language neutrality: I can only comment on what I see, and in my team alone we write components in C# and C++, and often test/demo/use components that derive from these in VB. I believe here we did make huge progress. I'd like to hear if other people are seeing the same thing in their dev shops.

... I could go on, but I guess I really agree with Jon's approach. We should validate that .NET is delivering on the promise (I think it is), and we should use that to help plan our future direction.

XAML as a document format

Wesner has noticed that XAML can be used pretty broadly as a document format "If application developers start writing document-based applications that follow the Avalon model of deriving new classes from existing elements, or even simply reusing existing elements, and turning on some of Avalon's designer services, XAML could quickly become one of the most common file formats."

In fact, if you look at the container support in Longhorn (System.IO.CompoundFile, if I remember right) there is more than just XAML in here. With Longhorn we are doubling down on OLE compound files to have a good way to have complex documents with rich metadata.

UltraMagnifier

Scott found a great little application... sounds very cool...

Brian thinks MVC is the future

Brian talks some more about the evolution of MVC and compares it to building a house... My $0.02, eventually computer programming will be as mature as physical construction, but we have a while...

Want the scoop on WinForms?

Raghavendra (Cool Client Stuff) has a list of the WinForms bloggers... and there are a bunch of them!

WinForms... playing with others...

Maybe you need to interop with SWING:

"Usually when we talk about Java / .NET interop, we're talking about services, messages, SOAP, web services, etc. But here's a cool article by Simon on interoping Java SWING with Windows Forms. Not particulatrly tight interop in this case (it looks like the two forms are in seperate processes), but it gets the job done." [DevHawk]

Or maybe, just with MFC (well, with Whidbey WinForms):

"For Whidbey, we will support the following:

  • Using WinForms Controls as child windows and controls
  • Using WinForms Controls/Forms as MDI child windows
  • Using WinForms Forms as modal/modeless dialogs
  • Using WinForms Forms/Controls as MFC CViews, with command routing" [Cool Client Stuff]

 

Java enums... better than .NET?

Interesting discussion on the relative merits of the new JDK 1.5 enums vs. .NET enums on TheServerSide.NET...

Cognitive dimensions

I really like the cognitive dimension stuff that StevenCl does... his latest post is about premature commitment - and it has nothing to do with men and their failed relationships... or maybe it does?

Rory figures out how important Indigo is

Rory had an epiphany... Indigo is key. As Don says "No program is an island".

Rob is back... now with XAML, BAML, and CAML!

Rob Relyea (master of XAML) is back in force on his blog, and started with a great post about XAML compilation...

Wesner's views on Windows evolution

Windows and Office have often had an interesting leap frog-ing behavior, and Wesner points out that with Longhorn we are pushing the envelope in Windows...

Interestingly I think going forward we will see more innovation from application vendors - Longhorn will give developers so much more to build with that they can build much more distictive looking appliations.

Developers as non-admin

I still haven't taken the plunge, but I really need to... Running as admin is dangerous... Lars wrote a great MSDN article on this... [via TheServerSide.NET]

Standalone applications

"Let me give an example of what I mean. There are a dozen apps on my computer that will let me view a photo, and they each have their own way of letting me pan, zoom, resize, and draw on the photo. On top of that, there are even more apps to let me browse thumbnail listings of photos, and each has its own way of scrolling, selecting, organizing, and sharing the photos. ... What I'd prefer instead is if I could purchase the features of these apps on a more granular level, and plug them into my workspace for working with photos." [Joe Hewitt via Scoble]

Interestingly enough, I think we have been trying to move towards this for quite a while. Although I'm not a huge fan of this approach (basically I think purpose built tools will always succeed over one "universal" tool). The "Shell" in Windows is that application. With namespace extensions people can plug new functionality into that single application.

In Longhorn we are extending this. There will still be namespace extensions, but we will also have the ability to store data in WinFS and have a common access mechanism, you will be able to associate tasks with data (which means you can add those photo editing links right next to the picture). We are also trying to figure out if/how we can let people directly host the shell view in their applications (today you do this with FileOpen/Save dialogs and using the WebOC control or...?).

Anyway, I think we are moving in this direction, but I hope we only go so far.

HTML on the desktop

(I'm catching up on old blog entries...)

Bruce wrote up an interesting solution to creating a simple to use client application. His solution reminds me a lot of the now defunct idea to run ASP.NET on the client (called "MyWeb" if I remember right). When we first announced ASP.NET in PDC 2000, we had a solution that would run a web server on the client and let you take the ASP.NET application offline, etc. The only problem (in my mind) was that you ended up with the worst of both worlds - limited to HTML for presentation, had to deploy a big client, and program with postback semantics (of course, ASP.NET makes the last one much better).

Bruce has an interesting statement "A benefit to this approach is the ease of upgrades, and that's something I anticipate doing. This way, I can email a single Python file to Dad and teach him to drag and drop it out of the email on top of the old file, click "yes" to overwrite, and then we're upgraded.", which of course doesn't work for broad deployments.

Since Python doesn't (to my knowledge) have a rich security system, basically you can send anything and it will run on the client. Of course, this works for Bruce and his Dad because they have a trust relationship (I would guess)...

Way behind on blogs...

I was way behind on email also, but work required that I get caught up... I'm mostly caught up on email, but blogging is a different matter... I had about 1100 unread posts... i've got it below 900 now, but I'm going to work through the rest of the backlog slower.

More importantly I have around 20 items that I've flagged over the past week to blog about... I'm going to try and spend some time this weekend to blog about some stuff other than vacations, pumps, or Longhorn :)

More Longhorn overviews...

For those of you that still want more... Here is the latest .NET Show, include Don and I in another reprise of the Lap...

Pubs, Morning, and the Press

Tonight we headed out for a quick drink at a pub after the bloggers dinner... it's now 12:30am, and at 7:45 we need to head out for the first round of press interviews... they will finish up in Reading around 4pm, with a 1 hour car ride to get back home... that makes for a long day of interviews...

Done: London Bloggers dinner

The Blogger's dinner went off well, with an advertisement from Don and Scoble (not to mention others!)... we had the largest blogger showing that I've ever seen (almost 40 people!)... I'd post pictures but i'm having issues with FTP and Windows...

If you were there (and there were a lot of you!) I didn't catch all your names/blogs... please post here...

Presentation done...

Don & I have finished our presentation now... I did my 10 minute keynote demo (B) and then the first hour of the presentation was focused on the fundamentals (I did the talking, B-)... after lunch we did 2 hours to cover the three pillars of Longhorn (A)... overal, I guess I'd give myself a B+ rating then...

We talked with press for about 30 minutes after Bill's gig, then hung out with the delegates (attendees) for another hour or so - it was great fun. I've really enjoyed the UK gig, however I wish I had done a better job on the first hour of the talk (a B- is below what I'm willing to accept <G>)...

Anyway, tonight is the Blogger's dinner at Masala Zone - we tried to organize a pre-func at a local pub, but unfortunately we never choose a venue... looks like we will have a pretty good showing (40 comments at this point, something around 30+ people claiming they are going to show <G>)... Don's bet is we will hit around 20... still sounds like it will be a smashing good time!

As a side note - Megan (my wife) watched me present for the first time ever today. Very interesting. She's going to be at the blogger's dinner tonight also. An interesting experience to merge facets of your life like this <G>

Blogger dinner update

Let's plan on Marsala Zone in Soho @ 20:30... Please confirm with comments on the first entry so that I can try to get enough space... Looks like we will have a pretty good turnout!

Made it to London

Got to London today around noon local time - or 2am body time. I managed to get some sleep on the plane, so I was a bit rested, but I ended up crashing for a couple hours before heading out for the first scheduled event that we had - an informal drink/socialize/talk with some UK finance folks. What a blast... my 10 minutes of talking was a bit rough (i'm not used to making up a presentation on the fly), but when we got to Q&A I think we hit our stride.

I had dinner with Don at the Vireswammy (sp?) which is probably the best Indian food I've ever had... Don says that we will hit Chutney Mary's later in the trip which is even better.

London blogger dinner?

Both Don and I are in town for a couple days... anyone feel like getting together for a dinner?  We were thinking Monday at some great curry place... Don will provide the location when we see what the response is like...

To write a book?

Many of my coworkers have done it... I've had people ask me to do it... so far I have avoided it...

Should I write a book?

The question I have asked myself is why would I?

  1. To get money
  2. To get fame
  3. To educate people
  4. To get advancement

Money: From everyone I know that has written a book they are a loose loose situation. They consume an amazing amount of time and you never make any significant money beyond your initial advance. Even the most popular books will only make you a trivial amount, and the reality is that most books loose money.

Fame: The glory of having everyone know you... hmm... I guess if your book is seen as the definitive reference you can gain some fame, but again, most books sit on a shelf, rarely do you get any real fame. Oh, and if the book sucks (since I'm not a professional author, we can make this assumption) they you can negative fame for being a self-promoting know-nothing.

Education: The pure goal of educating customers - giving them a quality resource that can make them more productive. A worthy goal.

Advancement: Working with customers, educating them, and getting some amount of fame can help with career advancement. It will give you an entry into the conference circuit, which can also help. Spending your free cycles on a for-profit book can actually hurt you though - basically if you had all this free time why weren't you working on the product? We'll call advancement a wash.

OK, so we have:

  • Money: -1
  • Fame: -1
  • Education: 1
  • Advancement: 0
  • Total == -1

Combined with my lack of writing skills means... I'm still not going to write a book...

Off to London

Tomorrow I'm off to my London trip... depending on internet arrangements I might be blogging infrequently...

Say it isn't so... MikeRoweSoft?

If this is true, it's pretty sad... It's a sad day when people can go around shouting Ni! at harmless 17 year olds...

Flex and MVC

Christophe has an interesting article about MVC and Flex... I've never been a huge fan of MVC - I find it to lead to over-architected applications, things with abstractions for abstractions... however, the more time I spend thinking about it, there is a certain elegance to the model.

The question often comes up about how Longhorn (and specifically Avalon) should deal with these higher level models for applications. As more teams internally start building on Longhorn they begin asking what we are doing for MVC, etc.

My default answer has been - you should layer MVC on top of the platform, not integrate it in.

I think that Swing made a mistake with requiring every developer to learn MVC to do just about anything in the model. AWT was pretty simple to use, but it seems from the little I've seen on it SWT kinda nailed it. MFC obviously had a form of model/view with their document/view architecture, and it seems that they have been trying to tease that out of the system ever since... In .NET we didn't really do MVC at all - WinForms and ASP.NET both just have a direct model, although I've seen MVC implemented on top of both.

One of the architects on Avalon has brought this question up again... should be an interesting discussion...

Avalon MSDN column

Jeff Bogdan is one of the other architects on Avalon... He and I signed up to write a column on MSDN, he got to publish the first article in the series... Hopefully Jeff will keep on me to make sure I don't let this die like the last series I told MSDN that I would do! :)

Every OS Sucks

"Every OS Sucks....a link from Cass. Too Funny!" [StronglyTyped]

Politics and blogging, Meet the Press, meet Jeff

"Jeff Jarvis has some excellent transcriptual commentary on the unintentionally hilarious Tim Russert segment on blogging." - [Joho]

New names for Windows?

It seems that everyone has already read Robert's post about Windows, but be sure to read the suggested new names in his comments!

FlexWiki hits the big time

FlexWiki (and therefore David) gets some press from Dave Winer... "FlexWiki, a .NET Wiki, generates RSS (the flipside of the RSS support ProjectForum has)."

247 WinFX

"From the same folks that brought you dotnet247.com comes winfx247.com. Since half of my .NET coding research yields answers at dotnet247.com, I'm excited to see the Longhorn/WinFX equivalent. It's new, but I'm sure it will be a very useful site over time." [Chris Sells]

DreamFactory web services + xml + designer

Interesting new entry in the GUI space from DreamFactory... Interesting that even in the runtime demos, it appears that you can graphically edit the application at any time... Of course, before Marc beats me to it - Lazlo has some very similiar technology based on the Flash runtime :)

A poet I am not...

Alas Robert, it was not I that wrote that prose...

Another Avalon-er...

David Ornstein (of FlexWiki fame) has a blog... I can't believe that I missed it, I mean he's had the blog for 5 days and I didn't find it... man, I'm getting rusty...

Is adding an enum value a breaking change?

Technically yes - it is possible that adding an enum value will break user code, especially if that enum is returned from a method...

We are debating if this is really a problem or just a theoretical issue... BradA is collecting comments and has more information...

Combating "Not Invented Here"

Bruce has a great writeup about trying to not re-invent the wheel... Boiling it down to # points:

  1. It's never as easy as it seems
  2. It's probably not the battle you should be fighting
  3. Lots of people have tried and failed
  4. Politics matter

Too bad, I'd like reading Mark's feed...

Mark's latest blog entry has the following text in the feed: "Note: The "dive into mark" feed you are currently subscribed to is deprecated. If your aggregator supports it, you should upgrade to my Atom feed, which includes both summaries and full content."

Too bad, I like reading him... I don't really care about this whole ATOM vs. RSS thing, I just wanted to read good content... bummer.

Burke's RSS feed

He doesn't have a link to his feed, but it can be found here... Shawn, dude, exposing your RSS is key! :)

Burke in the house!

Shawn Burke, dev manager of the .NET Client team (that does WinForms) is blogging now... so far, no technology, but lets see where he takes this.

One year anniversary posting...

Just realized that I have about 10 minutes to compose my anniversary posting... One year ago today I started blogging. I've had some times of lots of posting, and some times of not so much posting, but so far I have stuck with this for a while. I did the (seamingly) manditory effort to write my own blogging engine, i've used an aggregator, i spent time talking about what blogging really is...

I'm excited for the next year of blogging...

Creative Zen Xtra 40GB Review

Day One...

I ordered the player late on Sunday from Buy.com, and it arrived today around 11am. I unpacked the box and got it charging. I had to run some errands, so I left it alone. Of course, one of the errands that I needed to run was going to Fry's and picking up a USB 2.0 controller and hub so that I could use the full bandwidth of the device (transfer rates on my old Rio Riot where abysmal through USB 1.1).

Upon returning I installed the USB 2.0 controller (Adaptec 4 port for $29.99 after rebate, and a Micro Plus 4 port hub for $24.99), got the machine back up and running, and jacked the Zen in.

The "Creative MediaSource Organizer" appears to be relatively acceptable. Again I found myself annoyed that yet another audio device required yet another desktop software program that created yet another database of the music I have on my machine (oh, WinFS, please save me in the future!). Songs copied down to the device rather quickly (looks like it will take about 60 minutes to transfer my current 14GB collection). A big plus about the software - it supports a "sync" mode that will update only the new songs onto the device (a feature the Rio lacked). A (maybe) big minus - it seems that songs with duplicate names aren't allowed... but I need to research this one more.

Using the device as a portable hard drive seems a little out of the question, as you have to have the custom software installed on both ends.

The playback on the device seemed great, and so far I haven't experienced the re-indexing bug that Jeff had (basically the player would take 15 minutes to cold boot due to reindexing the entire drive).

The form factor of the device is nice. I like the removable battery, although I'd like it more if I could find out where to buy a spare (I haven't looked that hard <G>). The case for the player that comes with it basically sucks (too big, too stiff, etc.). The headphones seem adequate.

The New York trip will be the real test of the player, so I'll writeup more when we return. So far the player gets an B+...

Presentations...

From Scoble "Doc Searls covers how to do a good presentation, even if you use PowerPoint. "It's the story stupid.""

This year I have a goal to give at least 6 challenging presentations. By "challenging" I mean that I want to work hard on the presentation and do something in the presentation that challenges me to do better. Spending time with Don and some other really good presenters has gotten me wanting to become a good presenter. I've read through Power Presentations and dozens of blog entries. I've watch one of Lessig's presentations. I really want to get to the point where I feel that I can write an entry like Doc's, but I still feel very much like a beginner.

My number one thing I'm working on right now is the performance aspect of a presentation. Everything you bring to a presentation (the slides, demos, handouts, etc.) should all be there to improve and highlight the presenter's performance. A slide deck should not be able to stand on it's own - the slide deck is there to provide support for the presenter.

At the PDC I tried several new things, probably a few too many new things at once. I'm going to be in London in January which will give me another opportunity to try out some new things, and refine the things I think are working.

As with anything, it will take practice to really improve...

Xaml and the holidays...

A new MSDN TV with Don and I is now online... Stay for the holiday cheer at the end...

BlogX, .Text, and dasBlog

Craig asked me in mail, and on his blog, about the move from GDN to a .Text based solution...

When I first started working on BlogX I was just trying to understand blogging. After I made some progress I felt like sharing the source with everyone, and I really wanted to participate in a community development effort. Unfortunately a combination of my interest and a spike of work (uhm, yeah, the PDC took some time <G>) caused me to not make any more progress on BlogX.

I looked around for someone to take over for BlogX and Dare offered to take over. Dare surveyed the land and quickly realized that there were many blogging efforts going around - .Text and dasBlog being two of the major .NET based blogging solutions. Dare's decision, which I supported, was to instead of continuing yet another .NET blogging solution, to "close the doors" so to speak on BlogX.

The source is still freely available, and if anyone wanted to pick it up, they are more than welcome. However, right now I'm recommending people participate in either .Text or dasBlog if they want to contribute.

Video Games vs. Today's Kids

"Electronic Gaming Monthly runs transcripts of encounters between classic video games (think Pong) and modern 10-12 year olds. Very funny and just a little disturbing. (Thanks to Rick Klau for the link.)" from Joho.

The scary thing is I played almost all of these for hours on end in "those days"...

VB should be unique

Keith Pleas isn't happy with the mantra that "VB can do everything that C# can"

Video games for your phone

Lutz made a version of digger that runs on a Smartphone... Very cool... now if I just had a smartphone to run it on...

Delphi, GC, and .NET

Class helpers in Delphi sound like a really cool feature...

Jessica is online!

Jessica, aka JFo, has a blog! And she didn't tell me. Just for that I shouldn't link to her. However, I really want to share about the airspeed of unladen swalows.

One big problem JFo - you need an RSS feed so that I can subscribe.

For those who don't know Jessica, she is one of the developers on the WinForms team, I was lucky enough to work with her for a while before I left the team. She is one of those truly kick ass developers that basically thinks in code. Rock on!

Marathon session...

Don and I had a "meeting" that started at 8am this morning and finished at 2am... At least there is some stuff that we produced that is immediately usefull to everyone (well, at least those of you playing with Longhorn)... Very tired. Must sleep. Brain hurts.

Uhm... Sorry...

I wrote the BitVector32 class long long ago, but apparently I can't do integer math correct... I'll have to follow up with the dev team that owns this code to understand what caused the bug... Appologies to everyone that needed the extra bit... If I had it to do over again I'd call the class "BitVector31" and avoid the whole problem.

Seriously... I bet the bug was that I used a Int32 instead of a UInt32 and ran into some wierd error there... hmm...

My new favorite blog

Rob Relyea sent me this in mail... This is a great blog... unfortunately there isn't an RSS feed...

Keyboard oddities...

Why, oh why, does Microsoft feel it's neccessary to continue to move all the keys around on the keyboard?  Marc comments about the latest trends in rememorize that is being foisted upon us all.

Test Driven in the Cathedral

Randy's (yes, I know I misspelled his link the other day, but for some reason I can't edit the post) team is a small group that is doing some experiments with test driven development... Randy is pretty conflicted about it.

CodeDom fun

Robin is trying to make CodeDom do things that don't quite work... Maybe the current owner of CodeDom will read your post.

Still amazed at the internet

Talking on my way back from coffee with Randy about "third places", which I really don't know anything about other than a few references I've heard here and there. We went back to my office and in 3 google searches I found this. On my first google search I found information about Oldenburg's ideas, but I wanted to find something with a better description:

"Some essential ingredients for successful third places include:
1. They must be free or relatively inexpensive to enter and to purchase food and drinks.
2. They must be highly accessible, ideally one should be able to get there by foot from one’s home.
3. A number of people can be expected to be there on a daily basis.
4. All people should feel welcome, it should be easy to get into a conversation. A person who goes there should be able to find both old and new friends each time they visit.
" - Jerry Kloby

Such a great concept, and I really do wish that we had more "third places" in the US.

 

Reviewing Chris Sells' book

I read the book initially during the tech review process, but I've re-read the first 100+ pages and I really remember how much I like reading Chris' writing... I posted a review on Amazon and I really do believe this is a great book!

"As an architect on the .NET Client Team, that produced Windows Forms, I find Chris' book to be an excellent overview of the breadth of Windows Forms. The first section does such a great job of providing an overview of the basic features, and then the rest of the book serves as a great drill down into each feature area. Throughout the book Chris lets his fun personality shine through, making the book very enjoyable to read.

I highly recommend this for anyone that wants to learn about Windows Forms."

Healthy teams - not all stars

Everyone has a role.  You need people to fill every job.  Not everyone gets to be the pitcher, play first base, be a designated hitter.  I ran into some people from a fairly "top heavy" team - that is, they have mostly senior super stars on their team.  I commented (without thinking) about how great it must be.  He quickly corrected me.

A team of all stars makes for a tough road for a lot of people.  Imagine, he said, if you manager was the best person at his job in the company.  He (or she) had done the job 14 times before, and consistently was recognized as a super star at that job.  What are your chances for advancement?  Obviously your manager is happy where they are, or they would have moved on.  Obviously they are good at their job, or they wouldn't have gotten all the accolades and repeat performances.

Healthy teams have a mix.  They have growth opportunities.  They have a reasonable amount of turn over.  A stagnant pond is a dead pond.

One more day

Friday was the day of dry runs for our team. Lots of practicing and last minute slide changes. Saturday and Sunday we are all flying down to LA. Sunday (for me) will be occupied with final dry runs and setup for the keynotes on Monday. This is it.

New wiki address

http://wiki.simplegeek.com

and, my blog can be accessed now at http://blog.simplegeek.com (but you don't have to... obviously)

Fil joins up

Fil is a PM on the Avalon team... welcome aboard!

Give wiki a chance...

Lets see how this works... Simplegeek Wiki. Nothing much there yet... but, maybe it will be fun :)

Bluetooth update

I sent out mail after my bluetooth rant a couple weeks ago... I started with a few people I knew... slowly grew the circle... eventually got forwarded to someone in the hardware group... eventually got to the right people... and started a conversation...

  • First - confirmation that the current bluetooth stack does not support SPP.
  • Second - confirmation that the hardware will support any profile that the software stack supports.
  • Third - no confirmation on SPP support in the future. Bummer.

The good news - at "some point" in the future they are looking at supporting it, but nothing solid as of now.  I have hope at least...

Double thanks to Allen

1. Thanks for the RSS link

2. Thanks for the pics to help my feeble mind... I remember that night well, that was a great time!

Jedi training sessions

Last night I worked late into the night with master yoda to learn to be at one with the force, to channel the force for good, and above all to stop being so damn low key.

Demo work... and mediocrity...

Presented the current draft Don and my demo to our VP today. Didn't go too well... since we had just gotten the parts put together the night before, we didn't have the polish that we should have. In addition I talked instead of Don.

I have a confession to make - I am mediocre at presenting. I want to be great at it. I aspire to be great. I am falling short of that right now. In my dry run yesterday I did "OK". I managed to get my points across, no one fell asleep, and I believe people understood what I said.

I don't want to give any false modesty - I think I'm good at presenting, better than a lot of people. There are some really bad presenters out there. I would give myself a B rating. The issue is, that just like coding, the best speakers are 100X or 1000X better than the "OK" presenters.

Obviously I can't go from a B to an A in the two weeks between now and PDC. However, as with anything, the key is to recognize your need to improve, formulate a plan, and execute. I am going to nail my demo and my talk.

My plan - practice.

Minimilist Slides... and interesting too!

John Lam sent me a mail with a link to Lawrence Lessig's OSCON 2002 presentation...

I listened to the entire presentation and looked at the slides... The slides where awesome. I've seen other presentations with this same kind of style and I absolutely love it. The message that Lessig has is really interesting also. I still don't know how I personally feel about some of these copyright and patent issues... I totally understand the value of scientific innovations building on past innovations, but I also believe that those that fund innovation should reap the benefit. If nothing else, the talk was amazingly engaging...

It is always good to keep an open mind to new ideas... even if they are from 1790.

Work day

I spent the day working on my PDC presentation that I have to do a dry run on tomorrow. Of course, today I got hit by multiple issues... some hardware, some software, some with released software, others with beta... This always happens right before a deadline...

Went out to dinner with Don at one of his favorite India resteraunts... I showed Don my new camera, so I had to get a correctly lit picture.

Don gave me some great advice on "code centric" presentations... "Never you notepad". If you want to demo something without the magic of VS, then you should use a programmer's editor (Emacs, SlickEdit, etc.)... no one really codes in Notepad, and so you are really just making it that much harder on yourself.

Good advice.

Privacy and picture phones

When I was taking pictures of people today for my Moblog I did make sure they new I was taking their picture... and then I showed the the site (mostly to show how cool it is)... However there are a lot of ethical issues with small mobile cameras that can instantly upload to the internet... Looks like there are some potential software solutions to privacy...

For now, I figure as long as you ask people if you can take their picture, it's ok.

To Moblog or Not?

I really want to try mobloging... and TextAmerica bought me dinner a couple month ago, so I know they do this... are their any other options?  Is TextAmerica good? How much does it cost (TextAmerica doesn't list their prices that I could find)?

Hmm... OK, this was a bit too easy... I now have a moblog: simplegeek.textamerica.com... I didn't have to type a credit card, so it seems this is free... very cool

Self critical

In response to Scoble (well, really Jeremy, but he didn't post his comment in a blog)...

I can't speak for the company as a whole, after all, everything I put here in my blog is just my personal opinion... However, I believe that in general Microsoft (as with most successful companies and groups) is very self critical. Often we have to step back to remind ourselves that our products are good - I don't believe there isn't a product that Microsoft ships that if you asked the development team they wouldn't say it sucks... We always want to do more, make it better, make it simpler, make it faster, make it smaller, etc...

One of our published company values is to be self-critical: "Self-critical, questioning, and committed to personal excellence and self-improvement" [Micrsoft.com]

The funny thing, I think that most companies are like this. You always talk publically about how great your products are, but internally you fret over every detail and can only see the flaws. I have a friend that is a woodworker and he is the same way - he can show you some awesome furniture that he built, and point out every single flaw.

Thanks Allen!

Uhm, Allen said some insanely nice things about me (and I like people to like me so I like that he likes me and I figure that by sharing this you might like me too!).

I've got a confession - I can't for the life of me picture Allen... I can remember meeting him, and that he was smart, etc, but I am drawing a completely blank... ugh - I hate my brain! Regardless of my mental picture, I can remember talking with Allen - so I can at least return the comliment - you rock! :-)

(I'm trying to upload my own mug right now, but alas the gods of FTP aren't helping me... )

Unattributed?

I ran across an interesting entry in a blog out in the wild... the text went something like this:

"Software costs time, money, and resources to produce. The more you skip the initial phases of design, the more you have to pay later. I find this idea to be so simple, and yet so ignored by many managers. There are times, of course, when it is totally OK to go into debt. I went into debt to buy cars, houses, etc... however you always have a plan to get out of debt - and you are alway deliberate (or should be) in your decision to get into debt."

It was interesting to me because it is the exact text that I posted on Oct 5 at 10:51am... From what I can see Stef didn't attribute the text to me, or even link to my blog (excep in a collapsed section in his/her blogroll)... I'm not sure that I care that someone is quoting me without attributing it, it just seems that in the blog the social rule is to cite where you found a link, and always attribute any quotes you take from others blogs.

Perhaps Stef doesn't know about this... i'm guessing that Stef reads my blog, as i'm in his/her blogroll... so, I'll just leave this note as a reminder...

Always give credit when you quote people, always give credit to those that find links.

At least I got it to sync...

After thinking about it some more I tried getting my phone to work with the IrDa port on my laptop - user error. There was a small dialog that I had to dig into (only accessible through an icon in the system tray) that told the Nokia sync software where to search for the phone - nothing is enabled by default (that's a great default!!).

Still no bluetooth, but at least my contacts and calendar items are on my phone now... and I could get my pictures off it (nothing to post yet)...

A Borland Blogger

Maybe old news, but Allen Bauer from Borland is joining the blogging fun...

Ridiculously bad implementation of bluetooth

So yesterday I tried using my new Nokia 3650 with my friend's bluetooth keyboard. Dominic warned me that the MS bluetooth dongle was crap, but alas I didn't listen...

I had my new phone today I headed home from work - I wanted to get this bluetooth thing going. You see, at work I tried the IrDa connection from my laptop to the phone, however for some reason (random Longhorn issue, device issue, sun spots, whatever) the IrDa connection would only last for about 5 seconds and the phone would never successfully connect. With that, I set out on a mission.

I went to the company store and bought a new keyboard and mouse combo - we get a nice discount on the hardware for this, so I figured that even if the keyboard & mouse were just OK, it would still be a reasonably good deal depending on the cost of a bluetooth reciever. I brought the combo home, and searched the web...

You see, the company store has a policy that hardware can only be returned if it is unopened or defective - if I found that a bluetooth reciever was relatively cheap I wouldn't keep the keyboard and mouse, but rather just get the reciever... I searched the web and found that recievers were going for around $50 - so the keyboard & mouse were an OK deal (not a stellar deal, we don't get that good of discounts <G>)

I also research the web and find a MS KB article about hooking up my Nokia phone to the bluetooth reciever [located through RingTonerFest]... At this point I haven't broken the seal on the hardware, and I'm confident that with a little registry hack I will be good to go.

I install the keyboard and mouse... pretty cool actually. The nice electric glow of the blue at the top of the reciever is quite pretty.

Configure the phone. Try to connect. No. Try again. No.

Time for more web research... Ahh, Nokia says that to connect their phone you need the "Serial Port Profile (SPP)", but of course... and I remember reading from Dominic that they only shipped a few profiles... more searching...

Found a thread where someone says they talked to people from MSFT - they don't support SPP and probably won't until later in the year. However, their is a third party that has hacked it - BlueSoleil. Of course the demo version only supports 2MB of transfer, and my keyboard will stop working if I try it. Also, their install gives about 40 warnings about installing it... maybe not.

Tommorrow I'll post some mail and see if I can find out anything internally - this is ridiculous.

Buying phones, moving screens, and working

Today has been a bit busy... I spent the better part of 5 hours today working on a big diagram for the PDC - most of it working in Illustrator doing the all important task of moving a box from one location to another... in the end I think we have a pretty good picture.

In addition we had a big review for my team where we do a check point on all the "feature teams" for the next milestone - basic stuff, what are you doing, how much time will it take, etc. This consumed around 3 hours.

Given that I wanted to get the phone, oh - and I needed to do some screen swaping with a friend (more later), I had to boogie. I went to the local T-Mobile store (not too local though, the one down the street was out) and picked up the Nokia 3650. It is big... and it was expensive (about $80 more than I expected... ugh)... I figure if I don't like it I have something like 15 days to return it.

Anyway, so I have the phone and been playing a little with it (not too much)... unfortunately I haven't been able to suck any pictures off the device to see what they look like, nor have I been able to write any software to download.

... the screen swap. I bought my friend's old (12 month old) Stewart GreyHawk FilmScreen for my theater (100" 16x9)... he was bumping down to a 92" and switching from GreyHawk to FireHawk to move to a more "TV-like" experience... yeah, 92" is a TV :)

The net result is that I have a new screen to install in my "sane-budget" theater. It was funny, when we unpacked the 92" to install at his place we both got a bit worried thinking that it was too small. We put it beside the 100" and it wasn't that much smaller, but it just felt a lot smaller. Once we got it on the wall it looked great, so no worried.

When I unpacked the 100" at my house it looked huge! I mean this thing looked like it would barely fit on the wall, let alone be watchable. I still haven't mounted it (that will be tomorrow), but once I placed it in approximately the same place it will be, it looks great. Size is always relative.

Of course, before I left his house we had to play with his new MS Bluetooth wireless keyboard and mouse. It was pretty cool, installed very easily... the bad news - it wouldn't wake his machine up from sleep (blocking issue) and I couldn't get my new camera to talk with the PC through the adapter (I'm sure that is a user error on my part... given that I spent a total of 10 minutes with the phone and 3 minutes with the bluetooth adapter)...

Now I'm catching up on email, blogs, and starting to read the phone manual. Tomorrow I have to finish the diagram, figure out how to get my phone to sync with Outlook, and sleep... eventually.

Am I a writer?

Reading some of the Vogel's description of BloggerCon (which I didn't attend), I noticed something... In all the descriptions it seems the consensus is that bloggers are "writers". I used to write when I was in high school. Long fiction stories that I never did anything with but print out and read myself. They were horrible and I'm really glad their is no permanent record of them. Looking back at my blog I don't see a writer - I see some random ramblings, with a few mediocre pieces.

I think I want to aspire to be a better writer... I'm going to try and post some larger pieces that actually have something to say - what a concept!

(Of course, this entry doesn't really have a point except for the self-important tone of someone trying to change yet one more thing in their life in a vain attempt to gain control of something in this world to try and stop the earth from spinning out of control into the great unknown where strange and dark things wait around every black hole and the only light is that of the inferno of the sun that will burn you to a crisp if you get to close and will not save you from freezing if you get too far away, rather that you must occupy eternity in that small slice of space that is "just right" - to quote Goldilocks)

Scary, but sometimes true

Cameron calls out us bloggers about the relative quality of the .NET Blogs...

I'm getting out voted!

So Brad and I chatted on the bus ride back from our conference about demo'ing at the PDC. My view was that we should show code and demos that attendees could immediately use - that showing "real" code that would work on the bits they got was the key. Brad felt that we should demo with the latest daily build of Longhorn to show most accurately where we thought we were going. Looking at Brad's posts their appears to be a unanimous vote for using the latest bits.

Of course, everyone says "but the samples should work on the bits that attendees get"... double duty for the presenters, their demos on stage should work with the daily bits, but their samples should work with the PDC build... not a big deal for most people, but a few presenters I'm sure will have demos that can't be done at all on the PDC build...

Time for a new video card

I think I'm going to try and eek out a bit more life from my Dual PIII/1Ghz machine... the problem is that the video drivers available from NVidia are so bad that I can no longer play any games... I'm going to go buy a new video card. I want something relatively cheap, with at least 64MB of vram... I'm thinking about an ATI R9000, the local computer store has them for $140 and it has 128MB... Thoughts?

Technical debt?

Super intersting idea - TechnicalDebt [from Martin Fowler] which, apparently, originally came from Ward.

Software costs time, money, and resources to produce. The more you skip the initial phases of design, the more you have to pay later. I find this idea to be so simple, and yet so ignored by many managers. There are times, of course, when it is totally OK to go into debt. I went into debt to buy cars, houses, etc... however you always have a plan to get out of debt - and you are alway deliberate (or should be) in your decision to get into debt.

I have seen way too many projects that go deep (deep!) into technical debt for no apparent gain, and with no plan to get out of debt. Often these projects go technically bankrupt, however more often than not they transfer their debt to some other project that is in better technical shape.

Nice description of XP

Martin Fowler chats about the PrinciplesOfXP...

Macromedia Central

Old post, but Kevin Lynch talks about the concepts behind central.

5 Minute Madness

I'm at a conference with BradA and about 70 other Microsoft folks... Right now we are doing this really fun thing called - "5 Minute Madness"... the idea is to give anyone 5 minutes to give a presentation on anything they want. One group (spearheaded by Don) just sang a great song about messages!

Another blogger from redmond

Hervey Wilson (yet another softie... yet another Indigo-ian)... joins the blogging world.

This confuses me...

Why have a second blog just for one topic? Isn't that what categories are for?

Avalon again...

Another view on what Avalon is or isn't... Should be interesting to see how much of this is (or isn't) accurate...

Avalon, the nightclub?

Alright! Now there is an Avalon nightclub! Hmm... I wonder if this PDC hype isn't getting out of control ;-)

Thanks to Mary Jo for the link...

I hate my computer

I bought a couple games for my PC the other day... first time I had done that in a while. I spend most of my time these days playing XBox games. So I install the first game... which downloads a patch, but otherwise plays fine after I configure a bunch of options on what to display and how many buffering layers it should use.

Today I'm trying to play Rise of Nations... My machine keeps blue screening. First, Windows directed me to the NVidia site to download a new driver, which I did. Still blue screens. Then Windows (from Windows Update) gave me a different new video driver. Still blue screens. Now the error message says something about my bios maybe needing a new patch.

I know that security is getting all the flak for patch management, etc... But right now I'm just finding my home PC to be almost useless for anything but email and browsing the web. When a Microsoft produced game won't run on my Microsoft operating system I really start to get frustrated.

Now, the big caveat - I built the machine myself. Yes, I put together an ABit motherboard and Intel CPU to build up a machine. It's been working fine for almost 2 years now. Maybe this is all my fault - maybe the only machine that will work reliably is a machine that is put together by one of the big companies. I find it a bit sad that the state of compatability in the PC industry is so bad that you can't build your own machine.

My XBox has never hung, rebooted, or blue screened. If memory serves, the XBox runs a stripped down version of NT, using DirectX, and a NVidia chipset video card. But, I can't upgrade it or configure it. At this point I'm willing to give up a lot to actually get a workable machine.

The scary thing is that I don't think there is even an alternative - Mac still is plagued by crashes, lack of software, and hard to customize... switching to Linux - yeah, I'm sure when my kernel is customizable then my compatabilty problems will go away.

Why can't anyone get this right - I want my home PC to be an appliance. I have a dev machine that I tweak and tinker with, like a fun project car you keep in the garage - I want my home machine to be the workhorse that will get to me to and from work every day.

Avalon community engagement...

After the PDC makes everything that I'm doing public, my team is going to start trying to help out in the community space. We know that there will be tons of questions, suggestions, and cool applications being developed on our technology. Because of my blog experience and previous job over in .NET-land, I've already been asked to help out with forming a community plan.

My first question I'm trying to figure out is if we should have a special web site for our technology, or should there just be one big Longhorn one, or should we just piggy back on the existing sites.

Since I'm lazy, I'd much rather you (the community, duh!) tell me what you really want!

  • Should I encourage my managers to create a web site? 
  • Should that web site be for Avalon, or should we try to have one for Longhorn?
  • Should we not bother creating a web site, but rather let you folks host the web sites and do the work?

I'm complete open to any suggestion about what you think we should do... mailing lists, newsgroups, blogs, forums, anything.

Thoughts?

(Caveat: This is just me asking for ideas, I don't get to control the budget or make all the decisions around this place. I can't promise anything about what we are doing, I'm just hoping that you all will make my job easier <G>)

Demo stories...

This discussion about demos at the PDC has got me thinking... I remember talking with Scott Guthrie about a demo he gave at a keynote a couple years ago. While running the demo on stage he had another PM back stage running through the demo at the exact same speed on an identical machine. The idea was that if something bizarre happened they could switch back to the other machine and not miss a beat. Scott's idea was that when you have 6,000 people watching anything that can fail, will - and you want the attendees to really see a nice polished demo.

I compare this to one of Anders Hejlsberg's keynote demos. He had found a late breaking bug in a component that he wanted to demo, so he got the developer to fix it and give him a private build - which he installed on his personal laptop. So Anders goes on stage in front of 6,000 people using his daily use laptop (that he hadn't reformatted in 3 years) with an untested private build of key component. No saftey net, nothing. It went off without a hitch.

Now I'm faced with giving a keynote demo in front of (what looks to be record breaking numbers) a huge crowd, my biggest audience yet (1,500 was my previous record). Will I do the full on saftey net? Will I fly without a harness?

Production code in demos

"Interesting, what's the definition of "real production code" here? Normally, I would suggest, that implies that is code that is shipping or damn near ready to ship - its not prototype, or alpha or beta, its code in production and in use.

So almost all the Longhorn demos are on real production code? This would imply Longhorn has gone gold - would be a shocker!" [Pete]

Let me clarify what I meant... Typically there are 4 kinds of demos...

  • Demos using "gold" code - using a shipping product to show you something you can do... this is the majority of TechEd demos.
  • Demos using "to be shipped" code - using a alpha/beta/internal/etc product to show you something you will be able to do (or can do with the alpha/beta/etc bits)... this is what the PDC is striving to do with their demos
  • Demos using "hacked" code - using a custom built hand coded build of the product that will never ship and was put together just to show something off that "might" be possible... these are the "smoke and mirror" demos that people always hate. Once in a while we are forced to do these for various reasons (like a late found bug in a build for a "to be shipped" demo that we can't work around, etc). These "hacked" code demos at least show that what is demo'd is possible...
  • Demos using "no" code - using powerpoint, director, videos, etc to show a vision of something. These are used typically to show general direction and get people excited.

Obviously given that Longhorn has a while until it ships, we can't really demo using "gold" bits... however we are all trying (all the presenters I have talked to at least) to use the "to be shipped" bits... we are actually trying to do our demos using the same bits that attendees will get.

Of course, some demos will need private bits, some demos will be done with no code, etc... but most of us are really trying ;-)

More on curves...

I like this comment "If all the replacement candidates fall in the bottom 10%, you don't fire anybody." [Hurricane Blog]... Although I would argue that in some circumstances if your "salespeople" are in the bottom 10% of the world's salespeople, that their presence may do more harm than good, and getting rid of them, even if you can't replace them at all, can be a help.

I agree that automatic application of any policy is a bad idea - humans must always intervene and apply logic to the specific circumstance... policies are a way of having guidelines for people, not a way to program them.

Lenn Pryor on the blog...

Lenn Pryor joins us online... using iBlog through .Mac it appears... Lenn is one of the evangelists (I hope I got that right!) who is working on Longhorn, etc... His blog appears to be design oriented, not about work though... wahoo! 

Interns and Bill Gates

Apparently I need to become an intern if I want into Bill's house... Ash recounts his time in the hiz-ouse.

Architect

Martin has an interesting take on an architect's role...

Paul Vick & Curves...

"It is numerically impossible that every student at a university is above average" [Paul Vick]

Working at home is always good

I managed to get a draft of the AppModel talk that I am doing done, a script for my conference talk that I'm doing next week, and got through most of the demo i'm working on for the PDC keynote. All in all a good day's work for also having someone messing with my audio system all day long.

Megan (my wife) bought some material from Pacific Topsoil for a project this weekend and it was delivered tonight... oddly enough one of the guys delivering the material is the next door neighbor of Darryn, one of the program managers on Avalon... it's really a small world.

Russell and Scoble...

I agree with a bunch of the comments from viewers on Russell's latest entry...

Dave Winer says "But please please don't screw up the Web. He can link to you any way he wants, and you're going to get flames in your comments no matter what you do, or who points to you or how they characterize you. It comes with the turf. It never gets easy to take the abuse people give you, but it does get easier."

Greg Hurlman says "Once you pull out the ol' "M$", well... things like that just beg for a negative reaction from the MS side, and you should be ready & willing to take it."

I also agree with Russell: "I have no patience for anonymous assholes"... I actually agree with a lot more of what Russell says here, but unfortunately he is spinning it as Microsoft is full of these people.

Personally I find jerks and annoying people in every group, I try to avoid being a bigot about it. I know there are people at Microsoft that don't behave, I know there are people at Sun that don't, I know there are people at IBM that don't, etc... The key is to judge each person on their own (or even better, try not to judge, but that can be pretty hard!)

Sister Paul Vick?

At least now we know where some of the stranger ideas come from!

XBox, digital audio and HDTV

Robert, I think that XBox actually does AC-3 (Dolby Digital 5.1) and not DTS... but that is a minor point ;-)

My favorite thing is now that i've got my home theater working right I can play Halo in 480p, Tony Hawk in 720p, and Dragon's Lair 3D (ok, not the best game, but...) in 1080i... HD XBox is so cool...

Sounds like a blast!

DonXML, if you throw the party, can I come?

Russell blocks Scoble