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.

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!

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!

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...

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

Russell Beattie apparently is blocking any incoming people from Scroble's blog... Yesterday I linked to Russ... happily he isn't blocking me yet. It seems odd to me that someone would block incoming links... I know that Russ isn't exactly an MSFT fan, but I generally find his posts interesting - I always enjoy the diversity of opinion (I've gone to JavaOne for the past 3 years!)... oh well, to each their own...

What is Avalon?

Wesner gives his view about how important Avalon is...

Forced ranking...

Huricane called me out on my short post about forced ranking... "You simply state that you believe in the curve system, yet you link to a blog entry that makes a number of arguments against the curve system. How would you defend your belief against these arguments?"

Let me give my own personal belief (standard disclaimer, these are my own personal views and don't reflect that of my employer, etc.)...

Ranking on a curve is a good thing. We live in a competitive world and having to compete for the promotion, raise, bonus, review score, is all part of it. I have been asked before about how to get a better review score at Microsoft - find a team of crummy people. The issue is that most people came to Microsoft to work with the best people they could find, not try and eek out a few more bucks.

Now, the next question is that a firing the bottom portion of your staff. That I don't neccessarily agree with. I am not aware of any policy like that at Microsoft. What I do agree with is that companies tend to cary around too much dead weight. If you have a team of 10 super stars, that is awesome - however I don't believe most teams are like that. I see time and time again a combination of problems with teams:

1. Horrible performers - you have one or more people on your team that just don't perform. Sometimes it's a motivational issue, sometimes a raw IHP (intellectual horse power), other times there might be some personal issue. Whatever the issue, you owe it to your company and the employee to attempt to make the employee successful. Of course, this takes time and energy. One bad performer can suck down the performance of an entire team as they rally to try and help that employee up. I'm not saying this is the wrong thing to do, but it takes a lot of energy.

2. Barely acceptable performers - you have one or more people on your team that just barely squeek by. They aren't doing their job adequately, but they do enough that it isn't immediately apparent that they fit into #1. These are the hidden land mines in your team. When the time comes for a big push you will find that they can't deliver...

The #1 group is an obvious problem, and clearly should be either helped to perform up to level, or should be given the opportunity to find a job (either inside your company or outside) where they will be more successful. Teams will automatically take the initiative to resolve the issue with #1.

The #2 group is the one that I think policies like "cut the bottom N%" try to address. In a team of 10 people it takes only 1 or 2 people in the #2 bucket to completely drag the quality of the team down. They say the best developers are 10 or 100X more performant than the average developer. I believe this is true for most industries - and when you have several "low bar" people on the team you suddenly go from a team that can deliver on time and with quality to one that is struggling constantly.

So, to summarize - I don't believe in the draconian enforcement of any policy that says you must fire the bottom N% of your staff... however I do believe that you should be constantly evaluating your team to understand how to make the bottom N% of your staff more successful...

Mobile phones from MS

Russell chimes in about the latest MS phones...

More on the curve...

John continues the discussion... I would further this by saying that you must have far more "B" players than "A" players to succeed... If all you have is leaders and visionaries no one is doing the work... If all you have is people trying to climb the ladder, no one is holding it up  (I could go on forever! <G>)

Folly of Forced Ranking

Personally I believe in the curve system... John has some some great discussion going on about it...

Don, get with the program...

Don says he is running shipping versions of Windows on his main machine... I run Windows XP on my laptop, I just install Virtual PC on my machine so that I can also run Longhorn. Yeah, my dev machines at work are all 100% Longhorn...

Open source in Africa

While catching up on my blog backlog I ran across Dan Gilmor's "Open Source a No-Brainer for Developing World".

Geeking out

You can be a geek about anything, or more specifically "geeking out" can apply to anything. Brian is geeking out on home projects... Right now, I'm geeking out on graphics. I'm a horrible artist. I just picked up Illustrator 10 and so now I'm going to use my Wacom tablet (cheap Graphire model) and try to make some cool vector art.

I've played with Maya and Photoshop, all of which I could barely run... but boy are they fun. Illustrator has some cool export modes (SVG, SWF, etc.) which should make it great to create useful fluff for my web site... next up - a logo for simplegeek! (maybe?)

Time for more work focus

With my race day done with, there is now nothing between me and the PDC but work... oh, except for that 3 day seminar that I signed up for... and I'm presenting at. The seminar is a 3 day event between research, developer division (the people that bring you VS and .NET), and Windows (not sure if other product groups will be there)...

I really need to get to work...

Randy joins the fray!

Randy Kimmerly, of C#, C++, and VS fame, has started blogging... and his first thoughts... are about food?

Randy is working on next generation developer technologies (is that vague enough?)... so hopefully we will get some cool entries in the future... Oh, and Randy has the best wine cellar that I have heard of (almost 1K bottles, with capacity for 2K+!!!)

Review season

As many of the 'softie blogs around have noted - it is review season again. Depending on who you talk to, either Microsoft has a great model, or a horrible one. The core thing at the model here is the notion of relative grading. That terrible (or glorious) curve that you had in school is back. Now, at a given level, you compete with your peers for the top rankings.

Sometimes you get bit by the curve, sometimes you profit. I was once asked how to improve your review score, I gave the flip answer - find a bad team and join it, you will look better. Fundamentally I think most people come to Microsoft to be challenged. Part of that challenge comes from working with great people and being measured against them.

I, like many people here, find the review time to be an opportunity to reflect on how you are progressing on your career. Are you spending your energy in the right place, what can you be doing better. Personally I always find constructive criticism way more useful than vague positive feedback.

When I managed people I found the review to be the hardest part about the management job. I put a lot of weight on my review (from the pro/con feedback), so I made the assumption that my employees did also - so I wanted to give them good feedback. Not sure if I succeeded at that or not, but this year is the first year that I haven't had any reports in a while. It doesn't quite seem like review season without the stress of writing my direct's reviews.

Addicted to blogging

Apparently I got back in the habit of blogging... these last couple days I have continued to think about things I wanted to blog about, only to realize the site was down. MichaelW suggests that I host my DNS server... intresting... i'll forward that suggestion to my ISP <G>.

I'll try to remember some of my revolutionary and amazing ideas from the past couple days... if they seem fuzzy or vague that is meerly because of the time elapsed - i promise, when they were new they were great!

Finally back...

My DNS company (GraniteCanyon) was down for several days... I'm going to switch companies ASAP... turns out that a free DNS company isn't always the most reliable... more later...

Tron 2.0

After my bike ride we went to the Redmond Town Center and I picked up Tron 2.0... I asked the guy if I needed to upgrade my 64MB GeForce 2 Pro... he said it was the "minimum" the game would play on... ouch... He queried back - how much memory do you have? half a gig I responded (thinking that was a good answer)... He recommended that I upgrade to a gig... ouch, again.

I'm thinking that it may be time to upgrade my Dual 1Ghz machine...

I haven't played the game yet, so we will see how it goes...

Long days and late nights

I've been progressively shifting my work schedule earlier and earlier... I'm now getting to work by 6:30am... mostly this is to allow me to get some work done before my meetings start (typically I have a high percentage of meetings from 9-5)...

Around 5:30pm today I headed out, played some xbox with some friends on the .NET Client team (who bring you WinForms), and then we went out to a bar in Kirkland...

Around 9:30pm I got back to the office (why!?)... I decided to upgrade to a new build of Virtual PC, grab some new Longhorn bits that we are work on for PDC, and read my mail... Hmm... turns out that we are working together with another team on a set of changes for some components... the mails are flying fast and furious with fixes, debugging requests, drop locations, fun!

Around 11:00pm an urgent please goes out. Turns out that a checkin tipped over our automated build system (for a really bizarre reason), and so I started trying to help out locally... I walked the hallways... no one to be found. Eventually I found someone, he diagnosed the problem, and away we went... left work around 1:15am.

Interesting highlights from this:

  1. Interactive "extreme programming" session happening between two developers, both at their respective homes, using Terminal Services, eMail, and VPN.
  2. Practically no one in the building - but a lot of activity happening
  3. I didn't have access to our group build lab

#3 is mostly my shame... my architect position has taken me far enough away from the code that I actually have never went into our build lab. I'm going to fix this.

#2 is interesting. There have been lots of articles about the intrusion of work on the home life. The "always on" lifestyle of email, im, and cell phones has made 24x7 be valid work hours. VPN combined with Terminal Services allows developers to sit at home and remotely develop code using their full developer machine.

This remote lifestyle often works good... of course one of my friends IM'd me looking to get me to reboot his machine, but of course his office was locked (yes, most MSFT offices don't have locks, but a few do)...

Hmm... i'm rambling... time for bed.

Cool history lesson of Swing and SWT

"While doing my daily reading of the SWT-port-to-C# reading this morning, found this post that describes the torrid story of Swing and SWT." [From Miguel]

Very interesting...

Work 2.0...

"Life is just too damn precious!
It’s no longer acceptable to say that there’s work and there’s life and it’s up to us to balance the two
" [from Work 2.0, quoted by John]

Flash now works just like VB

Intresting…  

In the past few years I have made a few attempts to learn Flash, but the timeline-focused authoring interface always felt akward to me. In an effort to reach out to developers, Macromedia is releasing a brand new version of the Flash MX authoring environment for developers. Flash now works just like VB!  The new forms-based editor has database connectivity, includes an XML connector, and features a powerful web services connector.  Check out the feature list.
[Live @ Sax.net]

Blogs: Reality web

I’m sure this analogy has been made a thousand times, but I couldn’t help but thinking about it… Tonight I was watching “Newlyweds” on MTV -  basically your chance to watch a spoiled princess become a real person… Blogs are one way that you can see behind the scenes at various people’s lives. Just like reality TV, there is always a filter – always some level of editing and selecting that occurs. I’m not going to tell you about the salmon I had for diner, or the bike ride that I took today from Marymoor to Red Hook, but I will tell you about my fly and ant problems…

Anyway, stay tuned…

Folder browser

Roy asked about the folder browser… yes, it is generally discouraged to use this – not because it is private to designers, but rather it is in the designer assembly, and having your runtime component depend on the design time features can have negative performance impact… not a big deal, but something to be aware of.

The good news – the omission of a folder browser was fixed in Everett (.NET 1.1)…

Newgator BlogX plugin fixed

Took all of 20 seconds to “fix” it… however another 5 minutes to figure out how to register it… heh heh… Unfortunately there is no way to have a distinct description from the body, title, and category (from what I can tell)… basically the Outlook UI seems to only offer Subject and Categories…  oh well, at least now I will just duplicate the title instead of the message body…

Installing VS...

Everyone correctly called my bluf - if I was unhappy with the Newsgator plugin, I should just fix it or write my own... I have been without VS on my home machine since my twin IBM Deskstar drives died... unfortunately my promo copy of VS (which I got for shipping the product <G>), had the last 3 digits of the product key ripped off the sleeve... not sure I even know who to contact to get another... Since we are allowed to install products from work, I just "borrowed" a key and now I'm spending the time to install VS (why is it so slooooow!?!)

Anyway, with that, I should have a fixed version of the BlogX pluggin that is compatible with BlogX rev 20 by EOD today... hopefully :-)

Working today...

I am way behind on my presentations for the PDC, so I decided to labor on labor day... Need to get my app model talk up and running, and at least have a first pass at the slides. This year I'm splitting two app model talks with another speaker, so the amount of collaboration that will be required for that talk will be a lot more than I'm used to...

PDC Bloggers...

I've forgotten my FTP password, so I can't upload these images... so, I won't add these permanently to my site (since I don't want to forever steal their bandwidth), but for now:
PDC 2003 I'm So There
PDCBloggers"

Async programming in ASP.NET

I know that you can program asynchronously in ASP.NET, but I have never done it... Roy is having troubles with it... Any ASP.NET gurus out there that could help him?

Marketting in the product

Ran across John Porcaro commenting on a blog entry by Chris Sells... And I want to add my $0.02...

When the ASP.NET team hired Susan Warren (an absolutely amazing program manager) they got her from marketting. Generally, I think that product teams scoff at marketting because, as Chris quoted "Marketing is not about giving the customer what he wants, or even finding out what the customer wants and trying to get engineering to create it. It's about trying to sell the customer what you already have -- whether that's product, talent, or pre-conceived notions"... I remember one of the early questions I asked Susan about, she replied with a litany of real customer feedback. It turns out that marketting talked to the customers... often! I was shocked that we didn't take better advantage in the product teams of this huge base of knowledge...

Flash forward to last month... I am at the training session/conference... at this class - the title of which is something like "Marketting Business Group Leadering" or something of the sort - we are given lots of excercises. One of the interesting was the amazing amount of diversity in the class. In my group alone we had a couple product group people, a marketter, and someone that worked in a sub.

(Note: Sub is short for subsidiary, the people that work in the locale specific groups, like the UK, or Japan - people in the sub often, I believe, get left out of lots of discussions, etc... too bad, because they (like marketters) have a ton of valuable information)

The amazing thing was that when you got marketting and product group people working together to come up with a plan, you had a completely different solution than when they worked independently. I think that all too often marketting is seen as the "sales force" or the "messaging" people, when in fact they can be a huge factor in designing good products.

Part of this comes from my own belief - you are never the smartest person in a room. There is always something you can learn from. In Fuji, the author says that the only thing that Dev and PM agree on at Microsoft is that they are both better than QA. I will take this a step further - all three disciplines believe they are better than marketting, and all four of those believe they are better than ITG (Microsoft's internal IT department).

I started out working in ITG. I was a contract tester in ITG, and then became a developer. At the time I was shocked by how little the product groups (at the time, SQL Server) talked with ITG. Here we were, a group of people that lived and died by their product every day - and worked for the same company - yet we were never consulted. Interestingly enough, when they released SQL Server 6.0 (i think that was the version), were involved. The product groups realized the value (to some extent) of getting ITG to adopt their technologies, and everyone benefitted.

Oddly enough, when working on the .NET Framework 1.0, I tried to get us more involved with ITG, however it was ITG at this time that wasn't interested. Of course, this has changed drastically, but... oh, that is a story for another post.

Back to the topic - so ITG was an untaped resource, as I believe is marketting. I think that marketting should be much more involved in the early stages of product planning. Now, the question is how?

(Note: I will have a whole other post on the Dev/QA fight... I used to be a tester also! <G>)

Newsgator bug

Turns out that Newsgator stuffs the entire body of your posting into the description... I can't deal with that - i use <xhtml:body> for my rich content, I don't need to duplicate every post on the backend... Oh well, guess I won't post from newsgator... bummer.

Omar fixed my MSDN article for .NET 1.1

Thanks to Omar who posted fixes for one of my old MSDN articles… I’ll see if I can get the code updated…  

Book on presenting

Harry Pierson reflects on a bad presentation. This reminds me of a book I recently read, and loved: Presenting to Win, by Jerry Weissman.  Jerry used to be a Hollywood producer, and was hired by his friend Ben Rosen, founding VC of Compaq, to help Compaq's CEO on the analyst tour before Compaq went public. [from Mike Sax] 

Chris Sells' Book

Apparently Chris’ book is now available [via Don]… I reviewed the book earlier and thought it was really great… at the time they asked me for a quote, which I gave… turns out they put my quote as the top quote on the back cover… over course, looking at the quote now I think I sound like an idiot… basically the gist is “This is a great book, sometimes I forget how much there is to WinForms”…

It is a great book, just ignore the quote and buy the book :)

Blogroll scrub

I went through and got newgator feeding on my blogroll, I then scrubbed the blogroll to remove people that have moved their blog, or no longer post (sorry if I accidentally removed someone!)… Finally I exported from Newsgator back to the site… the only problem I hit was that Newsgator creates OPML with “htmlurl” instead of “htmlUrl”… easy enough to fix. 

Second attempt at Newsgator post

I checked the option to strip font names… lets hope this shows up correctly…  

Newsgator

I’m back to running a RSS Aggregator… I’m trying out Newsgator first… I was amazed to discover that there is a BlogX plugin available… that’s pretty cool! Now, lets see if it worked.

Truck Dismount fun

One of the guys I work with pointed me to Truck Dismount... this is a game with no value at all, but is somehow completely fun... my top score is about 150,000 - which I got by managing to somehow wedge the head of the crash test dummy through the engine block!

Windows Media Mixer

There is a DJ style WMP Mixer that someone wrote in the .NET Framework... pretty cool stuff [from Harry]

I'm not the only one that like them

Apparently I'm late to the game in my love for virtual machines...

MSBlaster people helping out

Michael wanted to see more program managers, product managers and marketting people helping out with blaster (I thought product managers where marketting?)... I know that I saw developers, testers, architects, and senior managers while I was working the phone lines. From conversations I know some program managers that where there. User education (authors) where there. I really believe that there was a broad cross section of the disciplines represented - and I think that it made a massive impact.

(in response to one comment... why didn't we use Remote Control to help people debug MSBlaster... because it reboots the machine when you connected to the internet... <G>)

Virtual PC is awesome

I've been playing around with Virtual PC for the last week or so at work. This is amazing. I know that the technology has been out for a long time, but I had never really used it before.

I have an XP virtual session that i run on my XP laptop. The other day I upgrade the XP virtual machine to run the latest Longhorn build. Very cool. In preparation for the PDC I was trying out some libraries that we were creating. So, I turned on the "Undo Disk" feature - basically you can run the session and then at completion choose to throw away all the changes to the machine, completely. Very cool.

I'm running Virtual PC in about the worst possible situation. Virtual PC runs the CPU at near 100%, network at 100%, but disk I/O at some much less that 100%... given that laptops have slow hard drives to begin with, this makes it pretty bad. On top of that, I'm running Longhorn - which is a not-even-alpha operating system right now. Longhorn is fairly video intensive, which makes Virtual PC's video driver (S3 emulation) get very stressed.

Even with this, I still find it to be such a compelling experience. The ability to host multiple OS on a single box (at one point I was running DOS 6.2, Redhat, and Windows XP at the same time!) is just amazing.

For me, Virtual PC is one of those must-have features for developers.

Lunch with Chris

Had lunch with Chris today... We talked a bunch about Longhorn, MSDN, WinForms, and other fun... I also got the history behind his naked programmer logo... I ate Arroz con Pollo...

(This post inspired by Chris' descriptions of Don's postings)

What do you look for?

First, the standard caveat - I am writing this as my own personal opinion and in no way as a representative of my employer...

Kris asked what qualities I look for in a developer or PM... Personally I think that problem solving skills (not puzzles) is the primary thing I look for. I have a friend that has a great question - "You receive a satalite dish at home (DirectTV), how do you hook it up?"... This isn't a great dev quesiton, but I really like the opened ended and mundane nature of the question.

Do you call someone you know that is an expert? Do you look at other houses to see how they setup their dish? Do you hire someone to install it?

All of these options come up every day when working on a project... make vs. buy decisions... calling up someone else that is a domain expert... etc... People that solve problems are hugely valuable.

The comment that there are "intelligent" people who can't deliver, non-intelligent people who can deliver, and even less intelligent people who can deliver. Having the combination of intellectual horsepower, and drive to deliver, is the mark of a great employee - in any business.

I agree with what was said in Fuji, that today's skills are quickly outdated - I don't care if you know Java, C#, C++, VB, etc. I care that a prospective employe is bright, driven, and passionate. Now, often I would argue that a lack of understanding of the current skills in the industry is a sign that you aren't passionate - however I don't think it is a simple boolean "if you don't know Java you must not care about computing", but rather just one piece of data...

Fuji and Microsoft

Just finished reading How Would You Move Mount Fuji?... An interesting book (with lots of quotes from Chris Sells <G>)

I never got a huge amount of puzzle questions, and I tend to not like giving puzzle questions to candidates... I like much more technically oriented questions, I tend to interview developers mostly, so I stick to coding questions as much as possible. Of course the challenge there is coming up with good questions that candidates haven't heard before...

PDC frenzy

PDC planning is in full swing. The machinery neccessary to take the years and years of work that we have done and distil it down to meaningful messages has started to crank. In addition, on the product teams we are pushing hard for hitting ZBB (zero bug bounce) for the PDC builds.

Building Windows is an amazing thing. I'm sure this has been talked about before, but it turns out that the Windows code base is large. Building that mamoth of a project takes hours and hours to compile on the fastest machines available today (I believe it takes around 17 hours for a clean build on a quad proc machine... something like that...).

The interesting thing, from the stand point of bits for the PDC, is the notion of "build labs"... I say plural because Windows has gotten so large (well over 5000 people working on it!) that we can't live with just a single build lab. So what we have instead is a collection of build labs. When one lab gets a build to a certain quality bar, they promote the build to their parent build lab, thus we actually have a tree of build labs. The result is that while one team is continuously churning on bits in their own private lab, the rest of Windows can continue.

This process of integrating (well, to be precise, reverse integration - integrations go from the parent to the child) builds can take a while. So, with that, even though the PDC is still 2 months away, we are fully focused on getting the last features and bug fixes checked in.

Oddly enough, my focus these days is trying to slow us down :-)

I've been filing bugs while trying to get demos and samples working, which of course means more work for everyone... I'm sure people are oh-so-happy with me at work.

It's actually amazing - this PDC we have more innovative technologies than I have seen before. I know that people keeping over-hyping the PDC, so I will just leave it at that.

Test Driven?

Obviously still having trouble keeping up with blogging...

First, a technical detail... I'm playing with "Test Driven Development" in my spare time. I read an interesting, but slow, book about it. I decided to try and tackle writing a simple shell (like the Windows Explorer) for my first project. Actually, my test framework was the first project... of course!

Hackers and artists

A great response from Paul... I really agree with what he says... his post makes me feel like I do after I read Code Complete or the likes, I always think about the last thing I wrote and feel depressed... as deadlines draw near you always end up comprimising something (this is reality, after all), but people like Paul at least help keep us all honest...

Messenger v6 Beta

Might be old news but, check it out...

Java wear?

Looks like weather is low 60's... given that they always keep the conference center pretty chilly, I think that long pants and T-shirts are in order... My folks just bought me a gag gift that is a Windows-looking error dialog that reads: "We Are Microsoft, Resistance Is Futile, You Will Be Assimiliated"... I don't think I have the audacity to where that - people might not get that it is a joke!

JavaOne starts on monday

Had to scrub up my laptop so that I could continue some of my dev projects while I fly down to JavaOne... I made sure to install J# so that I can brush up on my Java language skills ;-)

Eric Rudder on the blog

I worked for Eric when I was part of the .NET Framework team. Eric is the VP that runs the division that produces Visual Studio, .NET Framework, WinForms, ASP.NET, etc, etc... Should be interesting to see what he has to say!

Eric Rudder on the blog

I worked for Eric when I was part of the .NET Framework team. Eric is the VP that runs the division that produces Visual Studio, .NET Framework, WinForms, ASP.NET, etc, etc... Should be interesting to see what he has to say!

Dr Gui

Very cool...

Nikhil Kothari (of ASP.NET Fame) Blogs

Nikhil is online...

Hackers and Painters

Very interesting article about the spirit of programmers... Still digesting it... lots of it rings true... Of course, architects and painters are normally constrained to working on something that a single human can understand. Architects also have clear distinctions between the people that design the electrical, plumbing, and other systems. The model of independant painters just doesn't scale to a product that requires 4000 "hackers" to write. I still think there is a ton of good information in the article... more later...

Confab virtual and real space combined?

A couple of us were talking at work about how we could get real-time IM and collaboration around a conference or meeting... looks like Ludicorp is doing this exact sort of stuff [via Megnut]

Tasty XML tools

From Chris Sells... XML Tools on GDN...

Another one... ScotG

Scot rocks, what can I say...

JavaOne bound

This year will mark my third treck to JavaOne. Should be, as always, an interesting conference... Last year I wore a C# T-Shirt and got dirty looks in the bar at the "W" hotel... should be fun to see what happens this year!

UrbanPotato - now with Blog

For those of you that don't know - Brian is the master of UrbanPotato (that hosts simplegeek) and also the inventor of .NET designers, on of the main developers of WinForms, and generally one of the "good guys".

Lutz rocks... and now blogs!

Lutz (of .NET Reflector fame) is blogging away...

Old news, but SaraW in the house!

Sara is on a quest to make MSDN better than ever!

All you ever wanted to know about the CLR

Chris Brumme is one of the smartest people I know... I always feel like about the mental equivalent of a rock when I'm around him... He has some of the best content that i have seen about the inner workings of the CLR.

Blogging the blog

My latest post has generated quite a bit of feedback - Jon, Doc, Scoble, Mike Sax, Jim Downing posted a comment that is longer than my entry, and Christopher Coulter also chimed in.

There is some fabulous information in there... tons of data and views... I find it interesting that even though I didn't think about it, I really was using the "overlapping scopes" that Jon talks about.

The internet rocks.

Exchange folders vs. Blogs

Mike Asks: "Question for Chris, Don, and the other blogging Microsofties out there: What's the difference between your internal blog server and an Exchange public folder? Why would internal weblogs be read more, by more people? Haven't you had internal-weblog-like functionality for years in the form of Exchange public folders?"

Off the top of my head:

  1. URL for arcticles. Although you can create some form of shortcut for a posting, it doesn't really work
  2. Searchability. Even with a non-google based search engine, I can search the entire Microsoft intranet faster than I can search my personal Exchange mailbox... let alone all the public folders
  3. Newsgroup vs. Blog... all the arguments that have been made about the delta between a newsgroup and a blog apply for a PF vs. Blog.
  4. Linking... HTML lets me link to other interesting things... yes, you can do this in an email - but it launches another window, etc, - it is very disruptive.

I'll try to think of some more...

I am not a "(fill in persona here)"

Keith Pleas is chatting about the various persona names that Microsoft's developer division uses... the interesting thing I find is that I constantly find myself fitting into the VB persona - the "opportunistic" developer. A developer that wants to get the job done and go about his or her business.

When developing BlogX I employeed that technique. I didn't create a design (you can tell by looking at the code), but it works. It gets the job done. If, in the future, I decide to start creating a more durable version, then I have learned what features the product needs, and how to architect it. Almost every developer I know uses techniques like this. There was a thread a little while ago going around about "Lazy Programmers"...

There are other times, where I find myself fitting into the C# or C++ developer persona. The key thing is that most developers span between the personas. Personas are just one of the many tools that we use to identify with users. Just like every employee at Microsoft is different, every developer that uses VB, C#, C++, Java, or any other language is unique and different.

Personally, I think that Microsoft should publish their personas. We do tons of usability studies on our new APIs (and old ones!) to try and make them more powerful, easier to use, and understandable. I think Microsoft should publish our usability scores (take for example the one that showed how messed up System.IO was <G>)... we have success stories of great API design, and failures. I think it would help other people produce better APIs if they saw which APIs that we wrote that worked and didn't.

BradA owns the group that takes the results of these studies and incorporates them into the design guidelines. If you are writing .NET components, you should really read them.

What is a blog?

This is quoted from my internal blog at work... I know that there are much better experts out there to answer this question... I hope some of them can respond and help me convince people how little I know :-)

First, a confession - I don't understand blogging.

What? You ask. How can you not understand blogging? You have written blogs, read blogs, wrote a blogging tool, talked about it more than you should, and debated the future of blogging with DBox and other luminaries!

I guess I would say that I have just begun to understand what is going on. I know that Winer and Co. have been blogging for years. I understand that permalinks, RSS feeds, and time organized posts are common to all "real" blogs. I have begun to understand the notion of the community as a standards body. Looking at new features like pingback and trackback, along with Sam Ruby's <xhtml:body> features I am begining to understand what an open community is.

However, I have also really begun to understand that these technical blogs are only one corner of the blogsphere. The last number I heard was something like one million people are blogging. Companies are begining to see blogs as the new place for marketting. Corporations are investigating blogs as new way of communicating internally, and externally.

I don't understand blogging.

It is nothing new. FrontPage provides better editing support. SharePoint works way better for document management. Exchange captures conversational dialogs better. Instant Messenger gives much faster change notification.

Why is it catching on? Why should anyone care?

Lets dispense with a buzzword... Democratic journalism. I think people mean this to refer to the features of blogging that allow an individual to post, or publish, their thoughts to the world. The web did this long ago. However blogs have a built in type of reputation system. Because blogs are an ecosystem of links, once you find a blog you trust, you begin to trust the blogs that site links to. Hence, when I post something to my site, I get credibility if influential people link to me. The democratic system means that the more people that link to me (re: vote for me) I get more influence. There are a lot more smarter people than I that talk a lot about this on the blog...

Blogs have been compared to newsgroups. It is interesting. In newsgroups there is no "uber" member. Everyone is equal. At first that seems great - however it makes it hard for people to filter out the noise. In effect, a blog gives me control over the "major" content of my newsgroup. I can post anything I want on the front page... anyone can add comments, link to me, etc - but no one else gets to be on the front. In this way blogs appeal to the ego of the blog owner, but also gives people visiting a blog a built in filter.

The most fundamental building block of blogs is RSS. I don't know how revolutionary RSS is compared to HTML or TCP/IP, but RSS is the heart and soul of blogs. RSS provides a crude "alpha" XML web service. It will evolve and become even better. Today, RSS gives blogs a way to publish their content in a standard way. Sounds simple. Which is what makes it great. With RSS as a standard, you can now have aggregators that troll hundreds of blogs and extract relavant information. You can extend RSS (being XML and all) and add features like full message content, Doublin Core fields, etc.

One reason I believe that blogs are great for corporation internal communication is the question of distribution lists. Inside of Microsoft we live and die by email. However the constant spam of email to large distribution lists ends up drowning out the important information. For many types of communication (but not all) blogs provide a better way of communicating. There are many cases where you as the publisher of a piece of information don't know who would be interested. Blogs are a way to "publish and forget" - you fire the information out there, and interested people will find it. Once I add our internal blog server to the corporate search service, suddenly I could find people that worked on products that I wanted to communicate with. Amazing.

I don't understand blogging.

I have a huge concern. Now that everyone is thinking about blogging - including Microsoft - I am worried that the normal thing will happen. People will spend a few minutes, maybe even read a book, about blogging and then think they get it. They will then spend the next three months figuring out how they can make it better. My advice - first learn. Seek first to understand, then to be understood.

Dumb idea #62314 - Editable documentation

What would have if the MSDN documentation was editable - ala the WikiPedia?

I was talking with some people about this and someone made the statement "It's all about the rule of one in a million. Once you reach a certain size you are guaranteed to have that one in a million person that spoils it".

I can see four possibilities that would happen if documentation was directly editable:

  1. The community would edit the documentation, fix what was broken, improve it and life would be happy
  2. Evil-doers would slam the site crash it and shut it down
  3. Idiots would creatively "edit" the documentation to make it less accurate (yes, that is possible)
  4. The community would edit the documentation, then turn around and sue Microsoft for a percentage of the revenue from MSDN claiming they had rights to the content

I got in trouble one time for critiquing Microsoft's documentation team - but I think it was all a missunderstanding. My problem is that Microsoft doesn't spend enough money to hire a large enough UE/UA (user education/user assistance - our documentation folks) team. It isn't that the UE/UA team don't want to write good documentation, it is that management spends their staffing dollars on developers, testers, program managers, and (yes) architects. Most of the authors that we have on staff are great people.

I guess the fifth option that might occur is that #1 actually happens, but then everyone turns around and potrays Microsoft in a bad light for "taking advantage" of the community by trying to profit from them... Ah, that is already happening ;-)

I just thought it was an interesting idea to think about on a rainy Sunday...

(Of course, standard caveat - this is only my ravings, etc, etc, blah blah blah)

InfoPath from Clemens

Clemens likes it... he really likes it... [from Don]... I would love to see .NET code behind infopath... that would be cool!

2 More Habits

Mike Sanders continues the habits

And, for review:

Feels like I'm just indexing Mike's site... :-)

Is Wiki really that easy?

I wrote a super simple Wiki implementation in about 40 minutes while watching TV... I used the file system as the database, and just stored a file per topic. Regex did the parsing. Am I missing something, or is it really that simple?

I'm obviously missing rollback, history, etc... but it seems that there is some elegance in it's simplicity...

David sent me his Wiki code that he wrote in C# a long time ago, but I haven't dug into it enough yet. He used Access as the backend store. I'll need to talk to him tomorrow to figure out why that was needed.

Nuke?

Following up on today's theme (my ignorance)... I just heard about PHP Nuke.

To answer your question - yes, I live under a rock.

Wiki...

In the category of "Why Chris doesn't know anything about software development?"...

I've been hearing more about an "old" technology - Wiki. I haven't had a chance to dive into this, but apprent this is why it works (I'm putting these links, mostly so that I can find them later).

David (with no blog) was chatting with me at work about what would happen if you used Wiki in combination with a blog (which someone has to have done)... I already had Justin offer to send me a Wiki implementation that a colleague of his wrote and then was integrated into BlogX...

More people using BlogX

It's totally exciting to see people using BlogX. Although I appreciate the offer, I really am not doing this for any financial gains.... At this point "ego-ware" might be the best description... Originally when I started on BlogX I just wanted to stop using Radio's horrible editor... Now I'm just having too much fun writing code...

Zope

Sounds interesting...

Hard core week

On my last project we had these "Hard Core" weeks. The purpose was to get people heads down, clear their schedules, and get shit done. This week has to be a hard core week for me. I've got about 3 big things going on - and it turns out none of them involve blogging. Presentations, design documents, and prototype code. All have deadlines at the end of this week. Must focus.

Don is out...

Don is out jet setting this week, so our little side project is on hold for a week... I talked with Don before he left... I think we are both amazed at how similiar the projects that we work on are (or at least how much synergy there is between them). I'm working on the Windows Client Platform - specifically the user interface technologies - and Don works on the Xml Messaging Team... The infoset bridges the universe...

... or at least that is what Don tells me :-)

Inner workings of XML Schema

I'm embarking on my education of the inner workings on XML... I figure that I should start by digging into the type system of XML... don't get me wrong, I understand the basics - but I want to get the difference between <sequence>, <choice>, etc... the delta between an element and a complex type...

Anyway, I picked up Definitive XML Schema - we'll see how it goes.

Why is an XML-RPC required?

Dave makes a good point, that we should all keep using the accepted standards... I only have one objection... He claims that the XML-RPC Blogger and MetaWeblog APIs are required... seems odd that the editing portion of the blog API set would be required... I understand the value of decoupling the server/presentation from the authoring/editing tool, however so far I've found that my editing API is tailored to my editing tool.

It seems that SOAP is the mechanism of the future, and whatever standard we do should support the latest WS-I specs (WS-Security for authentication, instead of cleartext username/password; etc.). I'd love to have my blog software support WS-Attachments so that I could easily post additional content to the server.

At least Jon has the right idea, leverage the developer knowledge about an API, but at least do it on the modern protocols.

No offense...

Rob, I didn't take offense at all. I actually share the frustration that some people are caling some of our internal "blogging" technologies blogs when they aren't.

XML, late night phone calls, and sleep

Last night was a good night. I left work and headed over to a friend's house to check out his new TV. We watched some TV, played some halo, drank some beer. All was right with the world. I drove home.

I arrived home and began blogging. The time slipped later... soon it was midnight. I checked my work email just before I was ready to head into work.

A mail with the subject "Are you up? If so, give me a call - 555-555-5555" from Don . I was, so I called him.

Don: "Chris, I think I know you well enough to ask this... Could you come into work and talk about some stuff?"

Chris: "Sure"

I drove into work... arrive at building 42 at around 12:30am.

Don and I talked. We started writing code. We had an awesome marathon session of coding. We swapped schemas and C# source files. We wrote web services, XML crawlers, HTML generators...

This was probably some of the most fun programming I have had in years.

5:30am... we were at a stopping point... I had to head home, because my wife would be waking up soon - didn't want her to freak out that I was missing.

Our software was deployed on a server... still have lots of features to work on... but, it is getting close...

I got about 70 minutes of sleep last night... I have a full day of meetings today. But it is OK. I have seen the future... it will be here soon... very soon...

A higher plane of blogging

"Yet when I looked at my writing, I really was not happy with how I wrote and presented myself. That made me pause for thought.  One of the realizations I came to was that the people whose writing I enjoyed reading the most are those who communicated in a clear and organized fashion, and had something relevant to say. They are people like Joel Spolsky and Jon Udell. They are excellent communicators! And those are the writers whose writing style I would like to incorporate into my own." [Anil]

Great goal... so far, it looks great!

Corporate blogging

Not sure why I missed this the first time... Scoble has a must read for every blogger from a company.

Why blog?

Mike sanders is questioning blogging... Starting with the Seven Habits of Highly Effective People

[original link from Scoble]

Blogging at work

I've been hosting people at work on BlogX... well, actually that wasn't really my intention to begin. At first I just wanted to start blogging myself. I grabbed a great computer name and setup my site... after a while a few people asked to be hosted there also... I never really "advertised", but over the last 5 days I'm up to around 15 people hosting their blogs on my server. Most are using BlogX as their software.

In response to Rob, I'll at least defend BlogX as a real blogging solution. I have RSS, permalinks, thin client front end, and smart client editor. I know there is a site of "blogs" internally that doesn't have RSS or permalinks (don't know what their editor is - don't care <G>)... that site doesn't host blogs.

I won't claim to be a blog expert - hell, a couple months ago I didn't know what they were - but I think that RSS and permalinks are a pretty core part of the infrastructure.

Anyway... blogging inside of Microsoft is still new... very new. With all our other mechanisms for communicating - mail, distribution lists, exchange public folders, sharepoint, web sites, instant messenger, and now blogs - it takes time for a new medium to get to a level of understanding so people can use it effectively. Yes, I'm sure there are people out there who will scream "Blogging has been around forever! What is taking you so long!?!?"...

Radio won't upload

The only remaining thing I use radio for is uploading... it is now refusing to upload some tweaks that I've made to BlogX to get the HTML a bit more CSS friendly... oh well, rev 16 can wait until tomorrow.

Joe did send me his uploading software, so maybe this will get me to integrate that code into BlogX and ship it (Joe did give me permission to do this <G>)

Internal blogs linking to externals?

What is the etiquette here? We are starting up a bunch of internal blogs for communication inside of work (well, we are also encouraging people to blog outside of the firewall) - should these internal blogs link out to the rest of the universe? Do people normally strip out intranet names from their referrers?

Advice to new bloggers

Whether from the corporate big-wig world or from hollywood, megnut hit it right on in the Salon article:

"It can be done well or done horribly," said Meg Hourihan, the co-founder of Blogger, who has been maintaining her own site, Megnut, since 1999. "If everything that is interesting about a weblog is stripped away, or put in P.R. speak, there will be anger on the part of webloggers for the commercialization of something they hold pretty dear."

If you are going to blog, then blog...

CSS RSS button

I just need a third _SS acronym... hmm... anyway, I found this link somehow, but now I can only track back to it from Dave's site... irregardless, this is pretty cool:

<a title="RSS 2.0" href="rss.xml"><span style="border:1px solid; border-color:#ffc8a4 #7d3302 #3f1a01 #ff9a57; padding:0px 3px 0px 3px; font:bold 10px verdana,sans-serif; color:#FFFFFF; background-color:#ff6600; text-decoration:none; margin:0px;">XML</span></a> [FromDylan]

But I actually like this one (that I found somewhere??) better:

a.standardsButton
{
    border:1px solid;
    border-color:#ffc8a4 #7d3302 #3f1a01 #ff9a57;
    padding:0px 3px 0px 3px;
    font:bold 10px verdana,sans-serif;
    color:#FFFFFF; background-color:#ff6600;
    text-decoration:none;
    margin:0px;
}

Which does the same thing, but through a style sheet... (I'll update this with the right citation for the above code when I re-find the link...)

 

More WS-Blog repetition...

"Yeah, I mused about this once also. I even talked about it a bit on the bloggerDev list at one point, trying to stir up some thoughts on it. Unfortunately that list is pretty dead, so there wasn't much discussion going on." [Drew]

It looks like there are a lot of people with good work on this up to now... we just need that critical mass to hit the tiping point and make it happen (was that enough buzz words for you!)

WS-Blog Repetition...

Sorry... more link collection, this time from Benjamin - his thoughts on SOAP blogging.

WS-Blog Repetition...

I want to make sure not to loose these great links on the SOAP blogging API... I really want to see this happen...

"...My hope (and expectations, given that Don and I chatted on this) is that what emerges is an API that involves literally sending RSS items. Something along the lines of what I outlined in the Evolution of the Weblog APIs." [Sam Ruby]

 

New Reflector

Lutz published a new version of the popular .NET Reflector.

Recursive?

So the Seattle Times reported on the Google deal tonight... which seems a little late given how long it has been tearing up the blogsphere... But, the Paul talks about the fact that bloggers are all getting the scoop on traditional press... Now I'm blogging about the fact that he was late to the game... think he'll write about it?

I want a new FTP sync

I really want to get Joe's code added to BlogX, so I can get rid of my last use of Radio (as an FTP sync service). However, last time I talked with Joe, he wasn't ready to release his source code under my open source license (zlib)... bummer.

weblogs.com updater?

Anyone have one written in C# that I can steal the code for? I read the description for the SOAP 1.1 version, but there doesn't appear to be any WSDL anywhere for it... isn't WSDL an important part about publishing a web service?...

SOAP Blog API?

Has anyone created a SOAP blogging API? I know that the Blogger API is pretty common, but that is XML-RPC, right? I'm looking for something that I can do with normal web services... thoughts?

Hit counts?

What is the best way to calculate this... I know I can get the raw data from my IIS logs, but it seems that the various new aggregators are hitting my RSS feed a lot... then there are the robots... etc...

Is there a set of "rules" that everyone follows to calculate some real number for hits? Is it unique visitors? Just curious...

Although, now that I don't see a ranking on Userland's site, I don't seem to care about hit count as much as I used to... that's a good thing...

Oh, and sorry about yesterday

I missed posting for the first day since Jan 1... bummer. I was hoping to beat Nolan Ryan's record... anyway, got caught up working most of the day, and then hung out with friends... I guess work/life balance won out over blog/life balance...

As a side question - how many hours a week do you spend blogging?

How to...

... be a programmer. I haven't read it yet, but it sounds interesting [from Dare]

Control key where it *should* be

pretty cool reg script... remaps control to the caps lock key... I don't know how to revert it, but why would you want to? :)

REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00

Thanks Oliver!

Fun at the office...

Rick asks me to pony up some stories like Scott has been... Well, first I have to confess that I don't think I have nearly as interesting stories as Scott has. Sure I have the time that I got an email regarding a failure in the xbox production line due to my code (well, actually it wasn't proven to be my code, but my code was on the call stack <G>), or the late nights porting code to C# when it was still called Cool...

I guess I'll start on the lighter side of stories...

Moving buildings is a common occurance at Microsoft, although it has slowed down lately. It used to be common for people to move around twice a year - scary. Anyway, so my team was moving buildings (from 44 to 41, if I remember correctly) and we decided to do a low budget morale event on the move day. Basically the team rented a bus to drive us up to the ski resort, and then some box lunches and a big bucket of beer (that will play later in the story).

It turns out that on the following Monday we had a BillG review. Bill reviews are things of legend at Microsoft. Urban legend has it that teams have been killed after bad Bill reviews. So most of our PM team decided they had to stay back in a conference room (since we didn't have any offices during the move) and make sure they finished the slide decks and demos.

After a long day of skiing we headed home, and of course started drinking some of the beers in the back of the bus (is that legal?). Anyway, by the time we got back to the office we had all had a couple and we brought the remaining beers into the conference room to share with our hard working PMs.

They were a bit paniced. It turns out they had hit some blocking issues with some of the demos - so we devs jumped into the fray, checked out some code and started making changes to "fix" the problems they were running into.

The funniest part has to be that one of the devs quickly came up with a solution to the bug, but was very worried about checking in (due to couple of beers - note to self, don't drink and code). So he got a code review. Durring the code review a bunch of changes were suggested. Of course the "fixes" to his "fix" broke everything. It took them another 2 hours to actually get the code back to a working state.

In the end, everything worked and the demo went off great. (as a side note, it was well over a year before we shipped, and of course this code was reviewed, etc - don't get the wrong idea that we justed kept this random code in the final product... <G>)

... anyway, i'll do some serious stories later... but I thought with all of Scott's descriptions of processes and big servers that a little fun at the office would be good to share also :-)

XmlSerialization saves you web.config

OK, this is the coolest thing I've seen in a while... using XmlSerialization to create a generic flexible config section handler. [from ScottW]

What temperature is your monitor at?

Our local color expert was explaining to me why televisions always have the brightness so cranked up (and why 9700?)... If you are a videophile at all, the first thing you do with a monitor, tv, or other display technology is adjust the brightness and color to the correct levels. Televisions in stores are always insanely over driven.

It turns out that in the '50s (or somewhere around there) the cheap flourescent bulbs used in japan were creating a yellow effect on the televisions. So the TV manufacturers over there started running at 9700 to compensate for the cheap bulbs, and the rest of the world just ended up getting it.

Question of the day: What would you give to have a correctly calibrated monitor, printer, and digital camera?

Internal blogs... good?

I started an internal blog... I can't quite figure out what to do with it. I'm not sure that anyone would care to see my daily itinerary, or follow my meeting notes. A bunch of the stuff I work on ends up being somewhat sensative, so posting it internally can upset partner teams (or groups within my team)...

Does anyone out there keep an internal blog at their company? What do you use it for?

XML Convert?

Don is threatening to try and convert me to the loosly coupled dynamic world of XML, messaging, and web services. Don't get me wrong, I totally dig all of these - as long as I have a nice strongly typed language to use them from :-)

Is there any money in blogging?

The Google deal has everyone talking... My question is - Where is the money? The software for running, writing, and browsing blogs is a commodity. Given that it took me 7 days to get the basics working, I can't imagine that there is enough IP in blog software for any big upside (yeah, you can definetly make money on the software, but nothing huge). That leaves hosting.

Probably the coolest thing about Radio was that out of the box you got 40MB (or something like that) storage on the server and a URL. The $40 that I shelled out would have probably been worth the storage - if I hadn't used my own storage anyway.

Winser 3.0

Congratulations!

Many small companies...

Eddie Churchill made the comment at BorCon last year (when they announced Delphi for .NET) that Microsoft isn't one large company, they are many smaller companies. I always believed this, and it has never been more apparent than when I switched groups recently. Late last year I move from Developer Division to the Windows Division. The difference between the groups is amazing. Even before this move, I had worked on the VB team, then VJ, then ... anyway the key thing is that every team has been very different than the last.

There has been a lot of bloging going on about Microsoft's community involvement... each little company at Microsoft has a different level of community involvment. The VB team pioneered the "community room" idea recently. They have a room that is staffed all week long by product team members and they answer questions on newsgroups, discussion lists, web sites, etc. The idea has really been picked up by other groups...

ScottGu talked about the code complete process for ASP.NET, which is really only representative of one of the many groups inside of Microsoft. Every team I've been on has different process, policies, and practices. That isn't to say that teams don't share (almost everyone uses the same build tools), but teams do definetly reinvent the wheel sometimes.

The great thing is that this internal diversity is that it seems to push us to continually improve our process. I like the fact that we continuallly question, analyze, and improve our software processes.

False software for blogging?

I have to agree with megnut. Software for blogging should be designed for blogging. There are way too many "one size fits all" solutions. Personally one of the things I like about Web Matrix is that it is designed for a specific purpose, instead of trying to solve world hunger.

You know you're a geek when...

You do a google search for "touch" but you aren't looking for porn...

Then you find the thing you are looking for, but realize it will be quicker to just rewrite the tool yourself...

namespace touch
{
    using System;
    using System.IO;

    class Touch
    {
        [STAThread]
        static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(".");
            TouchDir(di, args[0]);
        }

        static void TouchDir(DirectoryInfo dir, string pattern)
        {
            foreach (FileInfo fi in dir.GetFiles(pattern))
            {
                Console.WriteLine(fi.FullName);
                fi.CreationTime = fi.LastWriteTime = fi.LastAccessTime = DateTime.Now;
            }
        }
    }
}

Sourceforge or GotDotNet workspaces?

I think I want to move the source code for BlogX up to some shared space... has anyone had any expierence with either sourceforge or gotdotnet workspaces... GDN seemed to offer a nice GUI interface, but WinCVS worked nicely also, and I seem to remember hearing that Sourceforge runs CVS over the internet (I can't validate because they are offline right now... not a good sign <G>).

Thoughts?

I guess another question - does anyone care if I put the source on a public server, or is dropping the source enough?

Debugger support

Ted, you should checked out .NET... You got to love .NET for solving problems... In addition there is complete support for programatically walking the stack... :)

ASP.NET calendar control w/ CSS?

The title for the calendar control ends up getting rendered with a nested table in the header (it appears), which causes the font properties to not get applied correctly. I'm setting the TitleStyle's CssStyle property, but it doesn't affect the text. If I specifically set the font on the TitleStyle it works... but I want to drive everything with CSS. Any thoughts?

Google indexing dynamic pages?

Is there a way to convince google to index dynamic pages? Basically I want google to index something like "default.aspx?date=2/16/2003"...

Brian on blogging

Brian rants about blogging... obviously I believe that blogging is the end of society as we know it... I just don't know if it is for the better :)

ScottGu speaks out

ScottGu writes about the fun and joys of driving to code complete on a milestone. I think that ScottW missinterpreted ScottGu - the ASP.NET team is hitting code complete for a milestone - not the whole product :)

BlogX 1.0.0001.0004

Final source for the day. This marks 1 week of working on the software. I think i'm going to slow down and not play with it for a while (or if I do, I won't be uploading it contastantly).

Added some more RSS features and made sure it works correctly in Syndirella. I still can't figure out why the WinForms front end is so slow once I go against my real server. The expierence of using the web services in IE is much faster than what I'm seeing. Oh well, it gives me something to work on.

Note the last post was done through the WinForms front end, this one was done through the WebForms front end. I love technology!

Radio is gone!

Wahoo! BlogX is now my primary software. I think this is good enough. You can get to the old homepage here, and all the comments, etc, are still live there - however I won't be adding new entries.

My new RSS feed is here.

I just tried (for the first time) using my WinForms front end across the internet. Queries are a bit slow. Running off local host is almost instantaneous, so I have to imagine that this is due to network issues. I'll probably have to tweak the application to do more automatic caching.

I'll post new source once I get the bugs ironed out from my live dogfooding!

License for BlogX?

Dare asked a good question in the comments below. What is the license for BlogX? I put a copyright at the top of each file, but I didn't think about enough of what I really want here. I guess I'm looking for a license that provides the following:

  • Free (no charge) use by anyone with or without modification (free)
  • Anyone using the source or binaries I provide must hold me harmless (no warranties)
  • Any product that uses the source or binaries can use any license they wish (no viral licensing)
  • No limitations on usage in acedemic or commercial spaces (for your use anywhere)

Given that it only took me ~15 hours of coding, I can't imagine there is all that much IP in the source, but I don't want this to come around and bite me in the ass. :)

Any suggestions on a good license? GPL won't work because of the viral stuff... MS Shared Source won't work because of the acedemic limitations... other suggestions?

Better HTML

Thanks to Jorge I got my HTML for BlogX better for accessibility... before I was using spans with classes on them for everything... now I'm using H1...H7 for headings...

Also, I switched the calendar navigation from being a viewstate postback to links with a querystring... better bookmark-ability and navigtion expierence... also F5 isn't broken anymore...

Comment view fixes

Fixed a minor issue with comment view (wasn't showing the comment author)... I guess the last things that is preventing me from switching over is some utility for bi-directional synchronization... i want to be able to edit on the client or server and have both get updated... that seems like it's going to be a bit tricky...

Comments for BlogX

Added comment support to the web frontend for BlogX... wahoo!

Xml Serialization

Hmm... I tried to have BlogX save everything as UTC, however for some reason Xml Serialization seems to have no way to serialize as UTC, so I ended up losing 8 hours between serialize and deserialize... anyone have any thoughts here?

If not I'll ask someone at work tomorrow...

BlogX update

Restructured the UI to use a lot more user controls (such as a single control for viewing an entry) and also fixed the CSS for floating the right pane (thanks!).

Also added basic editing (requires write access for the ASP.NET account on the server to the file system). You can see my first entry that I did with the web front end here.

I tried to follow Michael's advice for using WSYSIWIG HTML editing, but I couldn't get the HTML posted back to the server, so the editing is done via raw HTML. Of course I have great editing in the WinForms front end :)

ok... so i'm not a web designer...

... but I've got BlogX look a bit nicer... and it's all done with CSS, no tables! :)

Don't know how it looks in anything but IE...

BlogX

I'm still using the unpopular day-per-file data model, however I've added web support for categories, permalinks, and history browsing.

Here is the latest.

Next steps...

  1. Category view in winforms
  2. Comments in webforms
  3. Web UI that doesn't look like crap :)

Scalable success

I find it humorous that Dare thinks that our APIs are too "RAD". We continually get feedback that our APIs aren't easy enough. I think that having large "cliffs" between APIs (i.e. having a distinct expert vs. RAD API) is the wrong design. 

The problem here is that developers are never just a RAD or expert developer. Personally I like to use RAD tools and APIs at the start of a project, then dig into the expert APIs as I need them. The problem is that when you have two completely different APIs (like VB for RAD, and MFC for expert) you can't easily move between the two. If you start with the wrong technology there is a huge cost to try and switch - and more often than not it can mean completely scrapping a project.

Good API design means serving many different masters.

Syndirella likes it!

Syndirella can read my RSS feed without errors... wahoo! In addition I got comment adding working in the winform front end.

Next steps:

  1. Browsing to more than just today in the web viewer
  2. Comments in the web viewer
  3. Permalinks
  4. Category browsing in both viewers

I'm going to try and not make any progress on this for the rest of the week... I need more sleep... and I've got to start working on work projects at night instead of blog software :)

Work life bal... nevermind.

Debugging, what a concept

Brian got me hooked up with the right error messages and I got my BlogX web view working... still fairly limited. For some reason the RSS feed is coming off as text/html, even though I do:

Response.Clear();
Response.ContentType = "text/xml";

In my Page_Load... this works on my local machine and when hitting the machine with localhost at the site... however when we hit it from the machine name it reports text/html... hmm...

BlogX Scalability

rchildress talks about scalability of xml vs. dbms, etc... just as an example, my test data for BlogX was some dummy data with 24 months of data, 28 days per month, 17 entries per day, average of 8 comments per day... overall it was several hundred megs of data. The system was still fast in the winforms front end...

ASP.NET errors

I'm running into lots of ASP.NET errors with my blog stuff... it works great locally, but when I let Radio FTP it up to the server it gets hosed... i'll have to follow up with my admin tomorrow (that's you Brian! <G>)

BlogX minor updates

Still not ready to release my source for my blogging stuff i'm playing with, but I did get a brain dead simple RSS feed working... (again, this is all temporary, so don't subscribe)...

I thought I'd get some feedback from my architecture...

There is one XML file (*.dayentry.xml) per date. There are multiple entries per date. This allows for queries about what days have logs without ever parsing any files. This means the calendar can be populated with a simple file system query. In addition there is an "extra" file (*.dayextra.xml) per date that contains the user editable stuff (comments, trackbacks, etc.). Each entry can have n categories associated with it, and the system auto-generates a categoryCache.xml file when any entry is modified.

One thing that I need to do is have a mapping from the entry id (guid) to a URL. I figure that I could either change my architecture to have a single file per entry (like Radio), or build some cache. I'm trying to figure out the frequency of hits. I'm guessing that 80% of the hits are on the homepage, so I want to optimize around populating the home page entries and calendar. However, it seems that permanent links are often followed... hmm...

The basic layout for a "dayentry" file is:

<DayEntry>
  <Date>GMT date</Date>
  <Entries>
    <Entry>
      <Content>...</Content>
      <Created>GMT date/time</Created>
      <Modified>GMT date/time</Modified>
      <UniqueId>GUID</UniqueId>
      <Title>...</Title>
      <Categories>semicolon demlited list</Categories>
    </Entry>
    <Entry>...</Entry>
  </Entries>
</DayEntry>

 

What OS am I...

Does this mean I have to move to California?

Which OS are You?
Which OS are You?

As a side note...

Of course, the link from my last posting is completely temporary... so please don't link to it.

Any real blogger...

There was a saying at Microsoft for a while that to be a real team you had to write you own XML parser... luckily that time has passed. However it seems today that if you aren't writing your own blogging tool, then you aren't a real blogger.

I decided to play around this in my free time this weekend... basically I wrote a set of Xml serializable objects to define my OM. Figured out the basic features, and wrote a WinForms browsing and authoring tool. I got basic browsing, editing, comments (well, 50% of commenting), and categories working.

Finally I wrote a super simple web browser experience... no pretty formatting, RSS, links, etc right now. However I did write a converter to move all my Radio feeds into my new stuff.

I have no clue what I'm going to do with this, but it made for a fun weekend. I haven't been writing a lot of code lately :(

Release cycles... the information side

As Dare pointed out in his comment on my previous post, I only talked about the product bits portion of the problem... what about releasing product information early, often, and releasing control.

Lets look at two extremes - the Xml Web Services team who are working on all the WSI/GXA/etc stuff, and the Windows organization.

The Xml Web Services team is publishing their specifications (and prototypes) to the public, and then working with a working group to actually get broad approval for the spec before integrating it into the product. (Note: this is my understanding, I'm not on that team). Design by process greatly slows the development and design process down. However, it has the benefit that they will get great interoperability with other systems, since everyone will have the same lead time on the implementation of the specifications.

The Windows team isn't (to my knowledge) publishing the specs for the next version of Windows. This has the advantage that they can innovate faster, but of course their aren't the same opportunities for third parties to implement the same specifications to get great interoperability (i.e. getting a Linux version of whatever the next new thing is in Windows).

Of course, the Windows team does engage with a small group of partners to get feedback. The question always is how big of a group, and under what NDAs the discussion occurs. Some people think it is silly to have all these NDAs, but it is a way for a team like Windows to share their designs without having to go fully public - yes?

I understand both of these models to some level. The "design in public view" approach is optimized for interoperability and lack of differentiation. Basically the goal is to have a lot of people able to implement the same designs and work together. The only differentiating factor would be non-standard additions, and implementation quality. To my understanding this is the JCP model. I'd bet that a huge problem in the J2EE space is product differentiation. When you get the Sun execs telling everyone to only target "standard" features, how can one product provide value add features?

The "design in private" model is optimized for differentiation, I would argue. Your competitive advantage is your first to market with design innovations. If every feature that Office or Windows added was first publish with complete specs to the public, would those products ever have time to benefit from their innovation?

As with product bit releases, I don't think there is a black and white choice between the design in public vs. design in private models. I think you want to be somewhere in the middle. Your features that are designed for interoperability should obviously be designed in public, and you competitive advantage features should be help back and designed in private to leverage your innovation. I guess in my heart I'm a capitalist and think that people should be able to make money from the design and implementation of software - not just the servicing of software.

I do believe that Microsoft does too much "design in private"... but I also think that Sun does too much "design in public". I think that the optimal solution for Microsoft and it's customers is for them to move closer to the center.

Moderation is the key.

More on release cycles

Dare sent me an email reply, which I won't repost, but I would like to clarify some things that I said.

First, I believe that MSFT does release to infrequently and not early enough in product cycles. The problem is that nothing is black or white. Large products require large release cycles. Back when we first started on the .NET Framework (then called COM+, Project 42, Lightning, etc.) my team was one of the early internal adopters of the technology - and it was rough. No debuggers, lack of basic functionality, constantly dealing with GC and JIT bugs, interop that worked sometimes, etc. Releasing the product that early would have been devestating. The problem is you can only make a first impression once. If you talk to people that worked on a product like Access that had horrible performance in their first release - they did massive performance improvements, but it still took years for the stigma of the bad release to go away.

I know of projects that took internal customers too early and it is taking an enormous toll. Once you release something (in alpha, beta, or release quality) you have to provide some level of support. Even the act of a release takes weeks. You have to drive the team to reach a quality bar, get full test passes, produce redistributable binaries, etc. Doing a source release is even more taxing - you have to make a pass over the code to make sure it is ready for public consumption (you know, like no swearing in the source code! <G>).

Windows is huge. The source base measures in the tens of millions of lines of source code (I think I heard it is over 50 million?). Driving the thousands of people working on Windows to produce a customer ready (even alpha quality!) build takes time. If you ever managed a large software project, you know that not every build, every day, is ready to distribute to people.

Second, I love source code release. Personally I don't believe that the value of any company (Microsoft, IBM, Sun, etc.) is tied up in it's magic source code. I think that the value of the product is in the support, continued evolution, and innovation in the product. But again, nothing is this simple. There are huge costs to releasing source code. Yes, lots of people do it, and they have structured their organization and development processes around this. Yes, Microsoft is planning on making more and more source code available to certain customers (I read something about smart card access over the web? I really don't know what the plan is there).

In reality I think that Dare and I agree - I just think that I'm a bit more pragmatic about the costs and benefits of releases (both binary and source code). I really do want more frequent, early releases, and I would love to see more source code releases. You just have to understand that these are features - which means that other features would have to be cut.

Bob Dole...

Was just thinking about a funny story... used to work with Marc who liked to have fun with his code... He was known to have creative variable names so when we came across code that looked like:

void SomeClass::SomeMethod(...)
{
    BOOL fBobDoleIsGod;
    ...
    if (fBobDoleIsGod)
    {
...

I always laugh when I think of the code review!

.NET and an industry shift

David Bau talks about .NET as a response to an industry shift [from Scoble]

Release cycles

From Dare:

    1. Release Early.
    2. Release Often.
    3. Release Control.

Good advice, but not always practical when you are tackling big problems. I can really understand how you could release minor versions of applications early, often, and give up control. But when you want to tackle huge issues (like producing a new runtime (CLR)) it is hard to do - especially when you have to support every release for 7 years.

Granted, you could argue that by following the OSS model and giving each customer the source you could relieve the support burden from Microsoft. However, you now have to ask every customer to sign up to support all the software they purchase... not something very friendly either.

I don't know the right balance - I think that Microsoft should release more often, etc - however there is a hefty cost for each release... hmm...

Super stars in the blogsphere

From Megnut:

"Clay Shirky's got a new essay examining Shirky: Power Laws, Weblogs, and Inequality. I've only briefly skimed it but it looks very interesting."

Clay's observations about power laws is really interesting. I especially like the implications of power laws on stardom - "Freedom of Choice Makes Stars Inevitable". What I inferred from this was that given that there are so many people that want to entertain (and be entertained) then you naturally get super stars, primarily because people's choices affect each other. Clay uses this to justify the disparity in the blog community, but it can easily be applied to all sorts of arenas.

Borland does .NET

From Chris Sells... SideWinder - the .NET IDE from Borland... looks interesting...

MVC

Of course doug sides against me... But I mostly agree with Steve Tibbett's comment on Luke's post "MVC is something you build on top of the framework, not something you build into it.."

The building blocks of the platform shouldn't require something as high policy as MVC - but a having an application framework like MFC provide a default implementation of MVC is a good thing.

MVC

Luke chimes in on the discussion

Should Microsoft make a blogging tool?

Rob thinks so [updated link]

Microsoft and the community

I'm still digesting this, so I don't have a good response, but I think this is a posting worth reading...

Nikhil's Book

Forgot to mention Nikhil's book: Developing Microsoft ASP.NET Server Controls and Components. For those of you that don't know Nikhil wrote the ASP.NET data controls, was one of the principle dev leads for all of the ASP.NET controls, and is just a super star all around developer.

Joe moves to Boise...

... but doesn't support perma-links... Joe - fix it!

Owning your own data

John points out:

"That said, the challenges involved in building a "scalable API" are considerably greater than "let's not do MVC". One of the things that I hated about the way classic Windows controls operated was the fact that they held a copy of the data that they owned, rather than delegating ownership of that data to some (and almost always more appropriate) application data structure."

I agree - it's all about the balance... while you want to support cases where the developer keeps an optimized data store (like for a ListView, etc.), you want to continue to support the simple case where the dev pushes the data into the control (like text into a TextBox).

An example of this is the difference between the ListBox and DataGrid in WinForms. Even in the case of data binding we still ended up copying the string data into the ListBox because of the underlying control implementations, while the DataGrid never copies the data, just reads it from the bound source when render is required.

RichTextBox brings up an interesting question. Given the rich editing expierence for the RichTextBox, how could you provide a virtualized store? Perhaps a "ITextProvider" interface that could allow reading RTF from some user store? To make this even trickier, lets imagine the virtual store model for an HTML editor... Trident (sorry, codename for MSHTML which is the system component that does all the HTML rendering, parsing, etc, in Internet Explorer) handles the data and display - using the HTML elements as the model. This is needed for a rich editing experience. How could Trident provide the rich editing expierence with a virtualized store?  - unless you virtualize just on the HTML text (with that same "ITextProvider" model)...

... sorry, i'm rambling...

Why aren't blogs exposed with WSDL ?

Are there any plans to create a WS-Blog spec that uses WSDL, etc ?

Microsoft Bloggers being Watched?

Mary Jo is keeping a list of all the 'softie bloggers out there... it's a pretty good comprehensive list... Josh is also keeping a pretty good list...

ASP.NET meets WinForms

I'm sure this is ancient news, but since I gave a shout out to SharpDevelop, I figure I'd do the same for Web Matrix... Nikhil started this tool in his spare time while working at the 'Soft, everyone thought it was so great they gave him a team and he shipped it as a free tool on the web... pretty cool stuff!

WindowsForms.com... now with Forums!

WindowsForms.com has added discussion forums for questions, answers, information, and rants... I know the product team is hanging out there so give them a holler! (well, they also hang out at a bunch of other sites, but I digress...)...

Bedlam DL3

I'd like to add a few more email pet peves to my rant...

First, check where you are sending mail. In Outlook you hit Ctrl-K and it resolves the names - make sure they are right.

Two, limit the number of people on a mail thread to the people that care. Don't CC a mailing list of 1000 people

Third, and most importantly, never respond to a large mailing list with "Me too" when someone asks you to be removed from it.

Why can't smart people figure out these basics?

Scalable APIs

I hate MVC. I mentioned this earlier, but I think I need to expand on this a little. It's not that I'm lazy or haven't read Design Patterns. I just believe that simplicity wins. There are times when using abstraction models like MVC actually make your solution simpler. For example, when creating a word processor and you need to have multiple views of your document available at the same time - this is a great time that MVC will save you.

There are times when having design patterns baked into the platform just make it too hard to do simple things. Swing forces you to learn MVC to do simple tasks. I've heard that SWT fixes some of this, but I haven't got to play with that yet. (In truth, I haven't got to play with Swing yet - I've read some books and attended some JavaOne panels on Swing though).

You can always add complexity to systems, you can never remove it. Once you force a design pattern into a system it always shows through. You can provide layers to try and hide it, but it is always here.

This kind of debate comes up all the time at work. We have such a variety of developer customers some people wonder if we will ever be able to produce an API that works for everyone. People talk about producing a "RAD" API and an "Expert" API... personally I find that a bit insulting - I think that experts are exactly the people that have figured out how important it is to use RAD tools when they are appropraite.

I believe instead in an approach of producing scalable APIs. The API should scale from the begining scenario up to the expert. The API should reward people that learn the inner workings of it. In the same way that a user of EMACS can become 10X more efficient by learning all the archaic commands, so should an API provide unlimited headroom (ok, maybe i'm going a little off the deep end here...)

When designing APIs people should think - How will this be exposed in a tool? How will developers discover the features? What features are the 80% case, and how can I make that simpler? How can a developer progress from the simplest scenario into the full features of the API? Good API design is tough. It is a skill.

To you project managers out there: Good API design costs money. Pay up or the developers will stop using your technology - no matter how good it is.

UI Separation

Interesting article... i'm a big believer in practical programming, so I generally move away from complex MVC type stuff… however the notion of a UI programming language sounds kind of interesting… would be interesting in reading more on this… Thanks for the link Dare.

More on good management...

I know that I sound like a broken record, but I continue to be proud to work at Microsoft. This weekend I found out about an employee (who will remain anonymous until this is announced internally) who needed to move to be with his family. At some companies this would mean having to choose the company over family (an easy choice, your job is always replacable). This guy's manager is working out a deal to let him work remotely. I don't know the details of the arrangement, but it makes me happy to know that if I needed something like this that there are people in the company that will make the right thing happen.

BlogChalking

Interesting, adding queryable physical information to your blog with BlogChalking [from GeekFishing]. I've blogchalked my site... although I guess i'll have to update it once I move.

Apple "switch" parodies

Dare found one about linux super villians, but my favorite is the dark side switch one!

I've had it...

This makes the fourth time that Radio has screwed me out of a post. I spent 20 minutes composing a long response and when I hit submit - Radio's bastard child of a local web server decided to crap out. Of course, back button didn't save me.

Too much going on right now to do this, but I will be getting rid of Radio - soon.

Not too excited about Movable Type or City Desk... I think I'll give one of the ASP.NET blogs a try - provided that they have a Smart Client editor - enough of this "using the browser as a smart client app" crap. Turns out that my Dual Proc 1Ghz (yeah, a little slow) 512MB machine can provide a little better editing expierence than IE.

New about blogs?

Martin: I hear another theory - given that google loves blogs, this is the way to bump your google search-ability ;-)

www.GotDotNet.com !

I know I should resist this bizarre discussion around 101 reasons why Java (or .NET, or animal crackers, or fudge) is better (or worse) than something else... However I did come across one comment that I really wanted to defend:

"Want to see what I mean? Go visit GotDotNet sometime if you haven't already been there. It's the grassroots community website that Microsoft put up to support .NET just in case there wasn't any grassroots community who actually wanted to do it. Or maybe just in case there was and they couldn't control it." -- John Munsch

Found this quote from Carlos' site.

I know the people that started GotDotNet. I have an opinion as to why we started it (I can only say my opinion, as I'm sure there were lots of reasons that I wasn't privy to). It had nothing to do with fear that there would be no community for .NET - at the time there was already huge community support. I believe that GotDotNet was a way for the product teams (like the "ASP.NET", "Windows Forms", and "C#" teams) to directly be able to engage with their customers.

The ASP.NET team started a lot of this when they began working hard to engage directly with the community. Microsoft has long been critized that we don't work enough with communities, and we are trying to fix that. The reality is that Microsoft is a large corporation. They are a lot of smaller companies trying to do the right thing. The MSDN team (who own the "official" developer portal for Microsoft) has been trying to provide a more "welcoming" experience.

GotDotNet, ASP.NET, and WindowsForms.NET our places that Microsoft tries to work with the community. In addition to these destination sites I believe they spend a huge amount of time on third party sites, newsgroups, and public mailing lists. My hats off to Sara and her team that created GotDotNet!

Oh well, I know that I shouldn't let myself get dragged down into this...

Note Per my disclaimer this is only my opinion, please don't take this as anything more than my own ramblings...

Congrats Dave...

You got my $40... I really hate the design of the software, but you know, it works.

Read the fine print

Scott: Glad you have the disclaimer on this one - pretty scary stuff. It's when I see this kind of flexibility that I really appreciate the CLR!

Microsoft Watch

Mary Jo's site of rumors, rumblings, etc... reminds all of us 'softies that the press is reading our blogs :)

XML Everywhere... well, maybe for data

Dare: I'll buy that the infoset provides a much better data interop story than... well, there isn't anything else really. I am a big believe in XML (infoset) as a way to exchange data between entities (software nodes, companies, etc.). I still believe that data is only one portion of an application. My apps consist of data, presentation, interactivity, services, etc. Data is an important part of the functionality, but it is only one of the parts. T-SQL still isn't my language of choice, nor will XSLT be.

(oh, and I updated the entry to fix the spelling... another reason Radio sucks - no spell or grammar checker)

More email fun

Marybeth takes a stand against unwanted forwards... I think i'll forward this along to everyone that sends me unsolicited forwards :)

Radio sucks

Another post lost because of the crappy HTML interface... can't we get real blogging software... Joe/Dare/anyone!? Smart client editing - please.

What is the core of your application?

This question came up at the blogger dinner. Whenever I talk with some group about applications they always see their technology as the core of their customer's application. You talk to the SQL Server group and everything is about data. You talk with the Web Servicecs team and they see everything as messages. The Windows Client team sees the world revolving around client presentation...

Although there are some applications that are based around a single technology, I believe that most applications use a variety of technologies. I don't think most people will disagree with this, however the discussion last night turned into an interesting discussion about how you can model data access through messaging. Client presentation can also be modeled as messaging - Keith & Don argued (both of who work on the Web Services team).

This brings up another interesting trend that I have seen - everyone thinks they are defining the abstraction layer onto which everything else can be plugged in. OLEDB provided a "data access abstraction" from which you could talk to SQL Server, the file system, or anything else. So when ADO.NET came out it provided a higher layer of abstraction - it could talk to OLEDB and other providers. All you had to do was hook into ADO.NET and everything was grand. You can also see this pattern in almost every API set - everyone wants to be the layer that all developers target, and all the other technology can just plug into it...

Developers want technology that solves their problem - not solves every problem.

Microsoft Blogger Dinner

Lots of fun - great to meet everyone in person (and see those again that I've met in the past)... Most memorable quote: Keith sez "XSD is the type system handed down from God".

Zen of programming

From Scott Hanselman... interesting idea of Shu Ha Ri by Jim Little.

Running out of letters for XML

From this list it looks like every three letter (and 4) combination will soon be taken for various XML related topics! Pretty soon we will need a registry of XML names somewhere... [link from Matt Croydon]

Typing speed?

Matt: I only really typed fast in the first session... I slowed down a lot. Turns out if you type for 8-10 hours a day for 6 days a week for 5 years you get to type fast... also helps if you give presentations a lot :-)

Glad you liked the content.

Sealed defended...

Chris: The attitude that you should open up classes for derivation "just in case" someone wants to derive from it is a great philosophy if the only cost you consider is the development. Once you allow for derivation you must test the derivation, document it, version it, etc. Basically you should only ship non-sealed classes if you have considered the ramifications of someone deriving from it.

The counter argument to this goes something like: "If you only have public and private members, then sealing or not has no impact on the class". Since there are no protected members (or virtuals) then it is perfectly safe to allow derivation. I have to agree with this logic. But, this also meets my requirement that you have considered the ramifications of somone deriving from it.

I had this debate around the Graphics class for WinForms. There was a customer request to derive from Graphics to customize it. Since the Graphics class is actually a thin wrapper on a GDI+ device context, we felt it didn't make sense. In fact it would lead to more confusion because you would try to derive from the class in hopes of customizing the behavior (for example, to do custom image rendering), however it wouldn't work. The only thing you could do would be to add methods that called other already existing methods on the graphics object. In addition, since we don't support factory methods to create the new Graphics object, you would always have to wrap the default graphics object with your custom one, leading to code like:

protected override void OnPaint(PaintEventArgs e) {
    MyGraphics g = new MyGraphics(e.Graphics);
    g.DrawSomethingCool(...);
    base.OnPaint(e);
}

instead of:

protected override void OnPaint(PaintEventArgs e) {
    MyGraphics.DrawSomethingCool(e.Graphics, ...);
    base.OnPaint(e);
}

Sure, the advantage to the first code is that you can pass your "MyGraphics" instace to other functions. However, since there are no virtuals or protected members, then you can't customize the behavior of any of these callers. Really all you are getting is being able to pass some extra context around. Oddly, only you (the provider of the extended class) will ever be able to down cast and access the new functionality - which you could always do without the derivation.

Basically, non-sealed classes that aren't well designed introduce a higher testing burden for negative developer benefit (confusion, complexity, etc.). In a perfect world we would have enough time to design all APIs for derivation, but sometimes we have to ship.

 

Presentation done...

Did my presentation and demo today... bumped into Harry who razed me a little about not getting enough sleep. I think everything went well - although Harry can probably give a better review since he was in the audience. I love working at Microsoft - we get to work on such cool technology.

Demos...

I managed to get to bed by 4am... up by 6:30. Now I need to get my coffee and work on my other presentation. At least one of the demos will rock beyond belief. Too bad I'll be sleeping through it! :-)

Doing demos on the night before... just say no

OK, I know the rule. I try to live by the rule. But here I am the night before I demo and I'm improvising. After hitting a bout of BSODs I managed to get back to the point where everything works. Now I just need to clean up and stop mucking with things...

Presentations...

I speaking tomorrow at a internal Microsoft event. I've spoken at tons of conferences (PDC, TechEd, etc.) and for groups ranging form 1 to 2000. Today I did the rehearsal for one of the demos i'm going and it didn't really work... I had tomorrow blocked off to run through all the presentations to make sure i'm ready, but sometimes its good to get a little slap in the face to remind me to prepare adequatly... it's easy to get a little cavalier about these things...

Scott made a good posting about presentations also...

There can be only one... with data

Sean & Scott [fixed link]: The example you gave is great, although I would suggest something a little more robust, specifically you probably want to allow data to pass between the already running instance and the new one created (this allows you to marshal the command line arguments). I wrote an article on this last year... however supporting data marhsalling makes the code much much more nasty.

BTW, there were some minor bugs in the single instance logic that were fixed in next article in the series.

Quaker votes

Jerry (no blog) has been telling us all about a process they use for consensus [link from Michael] building in some standards meetings... apparently the Quaker vote is done by everyone voting on each item as one of:

a) Prefer
b) Can live with
c) Can't live with

The idea being that reasonable people will more quickly come to a decision with they understand what people are willing to tolerate and not. Seems interesting.

Several of us in my group are going off to do some architecture planning and I think we will have lots of challenges around consensus - we may have to put this to the test.

Japan and Management

I have always wanted to move to Japan. More specifically I have always wanted to live in a foreign country for long enough that I'm not just a tourist. I’ve been fortunate enough to travel a fair amount. I have been able to see Japan, Spain, USSR (while it still existed), etc. I find travel to be one of the most exciting and invigorating things you can do.

So the other day when an old friend called from Japan and said he had some open positions... To cut to the chase, I'm not moving to Japan.  What is worth writing about?

[Note to other 'Softies - don't expect me to be moving anytime in the near future, i've got product to ship! <G>]

Good managers.

Before I had decided, I walked into my manager's office and started the conversation with "So, I've always wanted to move to Japan". He responded by asking about my motivations for considering this. I told him about how I had been thinking about this idea for a long time, it has been kind of a life goal. I told him that I was really happy where I was and that the only reason that I was considering this was that the opportunity had presented itself, and it was something I had always told myself that I would do at some point.

He told me that (of course) now would be a tough time for me to leave - however that if this was something that I really wanted to do that it was something we could talk about in the future. He described some other employees that had spent time in other countries.

I share this story to offer a counter to Emby's horror story. My manager didn't freak out, or anything else (or hid it well <G>) - rather he took the time to understand my reasoning and tried to offer potential solutions. Not only has my current manager done great things like this, but my past managers have also done things like this.

Management is about more that just ordering people to do things. Management is about having your success being measured by those that work for you. It is about spending time working for their career. It is by their achievements that you can accomplish great things.

I am always amazed at people that equate management and large organization with more power and control. As you get more employees you have to give up control. A good manager cannot dictate decisions. Your influence as a manager is done through investing in good employees. Good managers don't dictate - they lead. Management and leadership are very different skills.

Microsoft has really recognized the need for high quality managers. I've actually been participating in a new education program that they run internally that helps employees understand the pros and cons about becoming a manager. I am providing the perspective of someone that used to manage and now work as an individual contributor. Companies have to offer advancement paths inside and outside of management - happily Microsoft has done that.

XP and code reviews

CrazyBob and Chiara are debating XP... I haven't done true XP, however I can comment on some of the principles...

Many developers have massive egos. The simple practice of requiring every checkin to have a code review seems like a basic rule. Peer review should be a requirement. I have actually heard a developer say "No one can code review my changes, they are too complex."

I agree with CrazyBob about having someone review your changes keeps you honest. When I review changes I try to set a really high bar - and I want people to do the same for me. When you get caught up in writing tons of code, it is so easy to cut corners. I believe that we all need someone looking over our sholders to keep us honest. Maybe I'm the freak :)

I'm not sure that "pair programming" is the solution to this - but injecting some process into development is a good thing. It is all about balancing process and productivity.

A (very) little ASP.NET

Starting to inject some ASP.NET code into my site... I sure wish that Radio had a mode that evaluated it's script on the server with ASP.NET - i'd love to be able to add some more dynamic content to the server.

The first content - my list of movies.

Aggregators rock!

Wow... I hadn't played with any aggregators enough before, but Syndirella is really cool. The ability to fly through blogs with a simple space-space-space browsing is just awesome... it kills me that one or two my links don't have RSS feeds.

Another .NET RSS aggregator

Syndirella is pretty cool - nice UI, small download, lots of features... very cool!  [Dave Winer]

Free C# IDE

SharpDevelop looks like a really cool tool. I thought it was pretty neat that I could switch the language for the IDE (English, Japanese, etc.) on the fly in the tool and the UI would automatically update. Pretty complete tool... forms designer, statement completion, project system, etc. Very slick!

Mary Jo Foley

From "Microsoft Watch" (newsletter):

"More and more Microsofties (past and present) are setting up Weblogs. Some are chronicling the debates inside Microsoft and the rest of the software industry. Others completely shy away from any mentions of their employer.

We've been building out our collection of Microsoft blogger bookmarks. Not too surprisingly, many of these folks are connected to Microsoft's developer/Web services divisions.

Here are a few of our favorites:

Joshua Allen's Better Living Through Software

(Allen's site includes a list of other Microsoft bloggers)

Simple Geek: Chris Anderson's Blog

Microsoft Web Services Kingpin Don Box

For more Microsoft Web Services-related blogs, check this site.

New Microsoft Hire Peter Drayton

Dare "Carnage4Life" Obasanjo"

No commentary on the rest of the article, but it is interesting to see how much blogging is in the mainstream (more reason I'm frustrated at my complete ignorance of this before december...)

.NET Strongly typed collection generator

Pretty nice implementation...However it is a bit hard to find the setup... It works great though.

Interesting .NET read...

OutBlob 0.1... Exchange + Outlook + Blog...

Scott W: Looks like a very nice blogging solution using Outlook as the editor and Exchange as the blog store.

Integration and Simplicity

My frustration over upgrading my in-laws PC drove me to write "Integration and Simplicity Upgrades". I wrote it as a Radio "story" instead of a rant, because I hadn't used that feature yet :)

China "say no" to blogging

Dave's got a great list of links about this... scary...

Blogs at work

InfoWorld sees blogs in the enterprise [from Dave Winer]. Amar (coworker) brought this up to me (the idea of using a blog for internal communication) and it seemed really interesting. It would be a great way for people to see what execs are up to and thinking about...

Personalities

Jason: I'm never a huge fan of string based designs, primarily because of their lack of compile time validation, etc... however, lets think about modifying your "Personality" pattern to work in .NET...

If you made the data type of "Personality" be a System.Type object, then you could do a reasonable assignment:

machine.Personality = typeof(ScanSideways);

This presents a could of interesting problems. First, you have a compile time dependancy on the ScanSideways class. Easily fixable by a slight change:

machine.Personality = Type.GetType("ScanSideways");

Which you can now parameterize, load from a file, whatever. So far, this is cake. My problem is that we have lots all the type checking. At some point the program will take the type object (even the strongly typed version) and do an Activator.CreateInstance call followed by a cast to the correct data type. Boom.

Personally, I wish there was a way of specifying the constraints of a particular type, some form of validation rules that could be applied (hey, wait! you mentioned that earlier in your post <G>). For example I could say:

public class Machine {
    [BaseType(typeof(Personality))]
    Type Personality { get; set; }
}

Which could then give me compile time validation for the first example, and a more deterministic error for the second one. Oh well... can't extend the compiler...

Just to restate (to make sure I understand the pattern); the goals of the Personality pattern is to provide a set of property adjustments and validations that are applied on function execution. Kinda like a pre/post condition on methods bundled with a CSS sheet.

Cool.

Video games

Wired: At least i'm not the only one that sees arena of video game fans as an interesting thing to write about.

As a side note - is it arrogant to link to your own blog?

CVS on the Web

Just to truly demonstrate how sheltered of a life that I have lived... tonight I installed WinCVS and connected to Joe Beda's (coworker, blog coming soon!) CVS server over the internet. I checked out a module, made a change, and submitted it. I'm so used to the internal systems at MSFT that it just blows my mind to use a source control system that works seamlessly over the internet through multiple firewalls, etc... technology rocks!

The web is read/write

Dan: "Hollywood and the other members of the entertainment cartel do not believe in a two-way or multi-directional Web. They believe they are sending their content to consumers, not customers who want to build their own content or, crucially, communities."

Unfortunately that applies to way to many large corporate web presences also...

Why I hate Radio

Why, oh why, did Radio decide that an HTML page was the way to implement a client application?? I have lost 2 large entries so far with Radio... once I commited the "sin" of clicking an icon on my desktop... IE navigated to that page, my entry was gone... just now, I accidentally clicked the back button on my mouse, boom! another entry gone.

Given that Radio is a "smart client" application (being that it runs a complete WEB SERVER) on my machine, why couldn't they actually write a real client application to do editing?

Oh well... i really need to write my own blog authoring tool...

Safari on the blog

As Dave Winer points out, this is exactly what the web is about... (not to be too biased, i'll also point out that this ASP.NET site is pretty cool also...) in both cases you have one to one communication between the community developers and the product team developers. Of course, one of the best things about the Safari link is that Dave Hyatt is actually posting patches in almost real time! That is damn cool!

Another test

uhm... this time actually using the wireless portion of the wireless hub... kinda cheating when you still have a cable plugged in...

New wireless test

Since the Linksys wouldn't let me blob, I borrowed a friend's Microsoft wireless hub... if this post appears, then all is working happily!

Logging in .NET

Question from my brother Brent:

Is there a way to determine what file and method called my function?  I have a logging object that I would like to be able to automatically add the function, file, and line number of the caller.

Also, I'd like to automatically generate debug output when a function begins and exits

there are a couple options here...
 
If you want to profile, there are several profilers (Rational, Numega, etc.) and they are are managed aware. Given that you want this for logging, etc, there are even more options, read on...
  • You can use context bound objects and produce a somewhat heavy, but really cool framework for auto-logging, which can give you the begin/exit outputs
  • You can use the StackTrace class to get file, line, and function name information at any point during execution

The caution I would give about either of these is performance. ContextBoundObject has some significant performance implication, as does using the StackTrace class. In addition, the StackTrace class will only give file and line information if the PDB is available.

Since C# doesn't support macros (a good thing, btw), you are faced with either hand coding a lot of Debug.Write*(...) method calls, or living without this feature.

Maybe this is something we should think about adding to .NET? you could imagine something that plugs into the JIT and lets you compile in pre/post code for any method... ouch, and API into the JIT - that sounds scary. Maybe we shouldn't consider this :)

Parsing things you don't understand

Jon's fascination with libraries has given him a deep understanding of the ISBN format. This reminds me of all the people that "whip" together a XML parser and forget to support all the complex corners of it. Everything is much more complicated than it first seems once you have understood it completely.

Favorite bug of the day: Someone was parsing version numbers and thought the format was always 4 sets of 1-4 digits separated by periods. (1.23.456.5678)... of course, the actual format for version numbers is 4 DWORDs, which, when printed can be many more characters long... boy I wish people would read specs before writing code!

Macworld

Wow... a lot of traffic about macworld... Keynote, Safari, and a 17" Powerbook. oh my!

The most interesting news (to me, at least) - Safari being an open source web browser based on KHTML... awesome to see Apple take on something like this.

 

Windows Media Player

ok... this may be against blog-ettiquete... Windows Media 9 released today... coolest player feature - the ability to have a minized player appear in your taskbar... I appologize in advance it the mention of this has offended, angered, or otherwise pissed you off... now, get over it! :)

And if Don likes it, it can't be all bad.

Real World Applications

Drew: I'm glad you liked the sample. I was supposed to do one entry a month, but I've fallen way - way! - behind...

GameBoy Advanced Advanced?

Did you ever want to pimp out your gameboy?

Email Responsiveness

I'm not sure if this is a universal truth or not, but I suspect it is.

People can't manage their email.

This isn't a spam problem or tool problem. This is about people that don't understand how to deal with mail in a timely fashion and manage their time. I have seen people that proclaim proudly that they have 4,000 messages in their inbox with 1,000 unread items. It must make them feel important to be so popular?

It is time to take a stand. We must demand action.

Jeff Bogdan (a coworker) and I have been trying a new system. We basically compete with each other to keep our inbox as small as possible. We read mail several times a day and try to respond, file, or delete each mail as we read it. The goal - less that 20 messages in your inbox.

It's amazing - Once you get your email under control the frustration you feel when someone isn't responsive to your mail is even worse. We are hoping that we can use shame and humiliation as a tool to convince others to follow our lead on agressively managing mail.

This is such a huge deal at a company like Microsoft. We communicate almost exclusively through email. It is not uncommon for people to get 200 mails a day, with some people toping at over 500. I'm sure that many other large companies out there are the same way. People get bogged down in mail, stop responding, and next thing you know you are always walking down to someone's office asking them to read you mail right away. Or, even worse, you start tagging every mail with a !

  1. Read mail several times a day (not continuosly, but also not only in the AM or PM)
  2. When reading mail try to respond, file, or delete the mail when you first read it. The goal is to touch each mail only once.
  3. Use Outlook (or whatever program is your favorite) to auto-file large mass mailing lists into folders so that they don't pile up in your inbox and hide important mails.
  4. Keep less than 20 mails in your inbox.

Next soapbox... Meeting etiquette, but i'll save that for later.

C# for Eclipse

Spoke too soon... need to read blogs more carefully...

Java VM for .NET?

Chris: that is one of the coolest things that I've seen in a long time! I love the idea behind Eclipse (open source pluggable IDE), it's just too bad it doesn't have support for C# <G>

Msft blog on

Chris: Count me in... i'm always up for a night on the town!

Back in seattle

Chris Sells is hanging around Seattle today and tomorrow... hmm... that can only spell trouble :)

A little friendly competition...

Turns out that Dare isn't the only 'softie writing a .NET RSS browser... Joe Beda (no blog to speak of, yet!) also wrote one and forwarded me the code, etc... hopefully he'll let me post it. As a side note - Joe wins for the best product name "Aggregator of Syndicated Sites" or "ASS" for short.

Dare, Joe, can't we all work together on this?  :)

.NET News Aggregator?

Dare Obasanjo: Can I get a copy of your .NET code? looks pretty promissing...

Apple Switch

Should apple switch? It would be pretty cool to see OS/X running on an Intel!

Compatability

I got to meet Ray Ozzie last month and we got on talking about his history and the computer industry. He happened to have an old copy of the original VisiCalc lying around, so he mailed it around later. The amazing thing is that sucker still runs. It runs on XP and the internal versions of Longhorn... very cool. When thinking about building platforms, that kind of compatability is amazing.

UI design

Since Doug mentioned me doing lots of GUI stuff, I thought I'd mention an interesting UI design book - About Face. It's worth a read, although I think that Cooper goes a little bit far in saying that the "File" menu should be nuked. There are some things that don't always follow a rational model, but get ingrained into the system so deeply that you shouldn't try to change them. I agree with probably 80% of the book though - self describing UI, error messages with intelligible text (and solutions), etc... basically stuff that MS typically does poorly... although hopefully we are starting to show signs of improving.

The question for Doug is - are you going to JavaOne this year?

Outlook does blogs?

Greg Reinacker: Has a weblog integrated into Outlook... i'd give it a try!

Linksys WAP11 + Radio == no work

What ever black magic made this work last night isn't working right now. For the time being I have to plug my machine directly into my cable modem to get publish to work. Otherwise the FTP connection just times out. I've tried every combination of SPI, DMZ, PASV, etc, that I can think of. If anyone has a suggestion, let me know!

New site

Well, after banging on pipes enough I finally got this whole thing working. Black voodoo magic.

Thanks to Brian for getting the server side going...

Computers, Wireless, and FTP

OK, another reason to hate computers.

1. Radio bites that it uses a crapy HTML interface to type in entries. I just lost another log entry because I accidentally doubled clicked a link on my desktop and POW!

2. I can't convince my Linksys WAP11 router to let FTP (as a client) work. Still can't quite understand this posting that should theoretically help.

3. My friend that is hosting my site to be can't get Win2K's server to actually allow a non-admin FTP only account to login through FTP... that's useful.

Ugh...

www.simplegeek.com

My new site is at least on the web. Next step, move my blog over to that box! yeah!

Ransom

Ransom as a software business model... how interesting. Found this article from a link on Kuro5hin.

Generics and .NET

Microsoft research has a CLI implementation with generics support... At several conferences we have publically said that generics will be added to some future version of .NET. With those two pieces of data, I pose the question - how wide spread should generics be used? Was ATL goodness, or something taken a bit too far?

For those of you unfamiliar with generics, they are basically C++ templates implemented at the runtime level. I'm not a compiler wonk, so I have to go with my most basic understanding - essentially the CLR would do dynamic class generation at runtime, thuse preventing code bloat, but giving you the performance benefit of strongly typed classes. In addition, since the runtime maintains the identity of the class being a generic, features like reflection actually work correctly.

Chris Sells

So if you read my career history (which isn't mandetory to understand the rest of this post) you will see that I spent a bunch of time working on Microsoft's WFC and then WinForms for .NET. In the later part of this, I got the chance to meet Chris Sells. Chris wrote, debugged, and deployed what I believe to be the first real over-the-web Windows Forms application (wahoo). In the process he continued to find bugs and issues with our deployment and security model. Hopefully with the release of Everett (.NET 1.1, should be out "soon") most of these issues will be resolved. Just had to give chris props... you rock! :)

Computing rant

Ugh... i know we have all heard it before. I'm the IT administrator for my home network, I have to debug all my friends and family's tech problems. The latest. My wireless network is flaky downstairs. On top of that, the cablemodem drops it's IP address and refuses to renew unless I hard boot the bugger. I finally moved my wireless hub... just a little. My reception downstairs went from a "low" or "no signal" or a "good" (4 bars!) wahoo!

Next, of course, is my mother-in-law's home computer. Here is a great example of why computers are horrible. She turned on her computer, got some wierd error about running "scandisk" (yes, I know what it is, but she doesn't) rebooted the thing, and now it won't start at all. Computers are horrible. Since the computer is several years old I just want to replace the whole thing, but it does seem a little ridiculous that you have to replace a machine every couple of years when all she wants to do is browse the web and send email.

XBox, History, and Houses

Spent a big chunk of today playing 6 player Halo over at a friend’s house. That game is so amazing. We talk a little bit about the idea of video games being a spectator sport. Not a new or novel concept. In fact there are people getting paid to play video games today. There are, of course, professional testers and play testers, but then there are also those people paid to play massively multiplayer games (like Everquest and Ashron’s Call). I have a friend that was given free online time with AC if he agreed to tutor people online. The interesting thing was that there was a team meeting for a large division at work where there were probably 100 spectators watching a Halo tournament. How long until there is an arena? :)

Finished the weasel, but guns is taking longer. A very interesting thing in guns is the idea of history in the large. I remember reading the Foundation books (well, some of them) and in that (if memory serves) Asimov has this concept of future history. That you can basically predict the behavior of the human species over a long enough time. In the book they perfect this technique and can really predict the future. In guns Diamond talks about history using these broad strokes of time. He talks about “short” time spans being 1,000 years. Distances are measured in the time it takes for ideas and people to populate an area, saying that the Americas were populated in a short 8,000 years from the time the first people came across the straight.

There are some great passages in the book where Diamond talks about the fact that historians can’t agree on a reason for why certain people adopt technologies. He lists of a litany of alternative ideas, and then states that since no one can agree, and there are so many options, that this can be seen as a random occurrence and therefore he can look at this in the large scale. Heh heh.

Another very interesting part discusses the creation of written language. He has a really interesting narrative about a Cherokee Indian named Sequoyah that invented a written language for the Cherokee around 1820. Sequoyah had seen English writing, but didn’t understand it. He saw the value, and therefore created his own version. Makes what we all do each day seem like a bit trivial – did you invent written language today?

On a final note, we are thinking of buying a new house. We just refinanced, but given the low interest rates and our desire to start a family in the next year or so is making it seem like a reasonable option. Our agent sent us a bunch of listings tonight. We aren’t in a great rush, or really convinced that we should do it, but we’ll see…

Career history

Reading “On Becoming a Leader” has been really interesting, mostly because it suggests that a key differentiator of leaders is the vision that leaders provide, while others are content to be driven. Interestingly I have been spending a lot of time at work trying to determine what I should be trying to do... I have been asking a lot of people to try and understand what my role should be, but instead I should have been defining my vision. Coincidentally enough I’ve been working on a vision document around developers as a core customer base...

Thinking about my career path is interesting. I started software development in grade school. I wrote a math quiz program that we used for about 1 day in class. I wrote some interesting stuff in middle school; Snake Bit, a Nibbles clone – although at the time I was cloning Snake Byte, an Apple II program, and a GUI environment... although I may have wrote that closer to high school... In high school I decided that I was going into architecture and took several classes. Eventually I determined that I spent more time configuring and learning AutoCAD than I was learning about architecture, so I decided to continue down the software course.

I have worked a bunch of fastfood/retail jobs, but the one of interest for this story is Waldensoftware. When I left they had just been bought out by Electronic Boutique (now EBX). It was interesting to watch a brick and mortar bookseller like Waldenbooks run a software store... anyway, more on that later – the interesting note is that it was at Waldensoftware that I began talking with lots of software people. At the time Waldensoftware was a fairly book oriented store, so we got lots of actual developers in. Here I met Jim Flippin. He was a regular customer.

Years later (literally) I got a call out of the blue from Jim. At the time I was managing a mail order role playing game selling company (RPGI, which has sense gone out of business). Jim offered me a chance to interview at Microsoft, which I jumped at. I bought a suit, and showed up for interviews as a contract tester in the IT department. I barely got the job... apparently I only got 1 hire out of 4 interviews.

I spent about 6 months working as a tester. I read books on how to test software, I wrote a new front end to our test case management software and learned about T-SQL (since we were testing a database system). During this time I got to know the development team pretty well, and eventually they approached me about going full time and becoming a developer. I interviewed and got hired.

About 2 months later a couple guys started talking to me about starting their own company, and wanted to know if I was interested. After some soul searching I decided that if I was ever going to do it, now would be the best time. I have the least to loose. So, I quit Microsoft and joined Versametrix – although we didn’t think of that name for another week or so. Oddly enough, that was a couple months before my wedding... needless to say, my wife-to-be’s family was a tad bit concerned about me striking off on my own.

We spent about 5 months doing some pretty hard core development. We were building a relational OLAP system and I was the primary coder. I wrote in IDL, C++, VB, and some Java – although Java was somewhat new, and we weren’t to sure where that would go. We still had a lot of contacts in at Microsoft and we started to hear about some new developments in the OLAP space that Microsoft was going to be doing. We got a bit scared, decided that we couldn’t really sell our software to people if we didn’t believe it would last for years, and in the end I decided to return to Microsoft. Of course, with hindsight, I can see that not much came of the MS OLAP solution, and we could have competed fairly well. However, I was happy to return to Microsoft, as I discovered that I really missed the company.

I came back to MSFT as a developer in developer division working on controls in the Visual Basic group. It was odd... when I left MS I was just starting as a developer, when I returned I was seen as a junior (but not green) developer. The people at MS really respected that I started my own company, and the experience of doing it gave me a lot of credibility that college hires didn’t have. (did I mention that during my first turn at MS was when I decided to drop out of college?)

Anyway, the controls team split, I worked on Ironwood – which then became WFC, Microsoft’s Windows Foundation Classes, a Win32 library for Java that shipped in Visual J++ 6.0. That was an amazing time. We had a great small team working under a huge deadline. The team had originally bet on AWT, but we were unable to produce reasonably performant code and the AWT stuff was just too limited. We spent some time investigating AFC (another Microsoft Java library). That was feature rich, but was amazingly slow and hard to build tools on. In the end we decided to create our own framework. I say “we”, but I had no part in the decision. I was just along for the ride at that point.

After we shipped VJ6 (and then had Sun sue us, get enjoined, recalled product, etc, etc) the bulk of the WFC team moved onto working on the .NET project. At that time it didn’t have much of a name or identity. There was a lot of interesting discussions going on about frameworks and runtime libraries (like a new virtual machine for VB, etc.). The WFC team was part of the VB team at the time, and we had a whole new branch added to the WFC team that was focused on server development.

After a reorg or two, we ended up merging a bunch of teams, and moving over into what would become the .NET Developer Platform (NDP) team. We had two main pieces, the Framework team (FX) and the Runtime team (CLR). The WFC/Server team became the web services, diagnostics, server process, etc, team… basically a collection of feature teams on the FX team, while the WFC team became the WinForms team. We added the ASP.NET team, Net classes library (NCL), and the Base class library (BCL) team eventually.

We shipped .NET Framework 1.0 with a bang... well, a really long bang. One that started in 2000 at the PDC when we shipped Beta 1, but went on for a long time as we shipped finally in February 2002. Near the end of the V1 schedule I moved from a development lead on the team to a development manager – mostly because I don’t think anyone else wanted the job . I was managing a team of 40 people through a massive security push during the final 4 months of the product. It was a really fun and challenging task. Once we finished, I decided to go back to being a technical contributor instead of a manager, and was offered an architect position on the newly formed .NET Client team.

A couple of interesting notes – Microsoft loves reorgs. We reorganize teams all the time. I think it is one of the strengths of the company. When we finished .NET 1.0 we knew that we needed to focus more on customers, and the growing size of the framework. So we created separate product units for the server portions of the framework (ASP.NET) and the client portions (.NET Client). In addition, we moved a large team that was working in incubation mode into the NDP group. This is the team that has since produced all the GXA specs, and is driving web services for Microsoft.

The second interesting note is more of a sidebar: the title of Architect. I’m not sure how other companies treat this, but at Microsoft it is a kind of religion. There are huge proponents of architects and people that think they are fluffy big sky thinkers that can’t ship anything to save their lives. Real product team architects are somewhat rare – probably less that 5% of any development organization. I had always wanted to be an architect as a career goal – but I always saw it as something far off in the ether. I looked at someone like Anders Heljsberg as what an architect really was. This is someone that could ship product, has created multiple languages in his career, and can captivate an audience of any size. I feel that although I finally got the architect title, I was very much an apprentice. I hope that in another 10 or 15 years I can measure up to someone like Anders, Dave Cutler, Ray Ozzie, or any of the other architects in the industry.

After some time working as an architect on the Client team, I decided to move over to the core Windows Client Platform team. This group was working on the next generation of client presentation technologies (I avoid the word “UI” because of internal bickering between the “Document” folks and “UI” folks...). Here I began to really get a feel for how little of Microsoft I really knew about.

Anyway, that is it, in a rather large nutshell. Here I sit as an architect in the Windows Client Platform team, still an apprentice. Trying to figure out what I should do. I’ve been with Microsoft for over 6 years now. I still feel like a newbi. My recent introduction to blogs and the rest of the industry has made be very aware of the “ivory tower” that people always accuse Microsoft of living in.

My first and biggest passion has been learning. When I first got the opportunity to interview at Microsoft I was told this was a job working with SQL. So I went out and bought a book on T-SQL and taught myself as much as I could over the weekend. I am continually confronted with new opportunities to learn about things and I love it!