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: