Mar 27, 2004

Cargo-cult programming

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

Trump's 7 Rules of Success...

John posted Trump's rules... in summary:

  1. You have to be born with enough brainpower.
  2. Once you have that, you have to love what you're doing. I've never seen anyone succeed who didn't love what they were doing.
  3. You cannot stop. If there is a concrete wall in front of you, you have to go through it. You can never, ever give up or even think in terms of giving up.
  4. Confidence is a very important thing. But confidence isn't something you just develop by saying "I'm going to do this or that." You really have to believe it.
  5. I love pitting people against each other. My whole life is based on that. It brings out the best in people and the worst in people. If the worst comes out, you don't want them working for you.
  6. You have to remain cool under fire and let criticism roll off you. Good leaders handle conflict easily and bad ones are eaten up by it.
  7. You must work well with others and be loyal to your team. Disloyalty is the worst of all traits. I seldom use the words "You're fired!" in business, unless somebody is really scum and stole from me.

Latest "Inside Avalon" posted...

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

Mar 23, 2004

Pair Programming...

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

Performance in moderation

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

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

InfoPath update...

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

Ref counting in .NET

Still going through a backlog of blog posts...

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

Sneak peek at MDC

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

3D Bob?

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

Smart client echo

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

Combining Struts and Flex

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

What is a smart client?

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

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

He also has a great check list:

"

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

"

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

Mar 22, 2004

Make a ten year product plan...

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

More on presentations...

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

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

GNOME and more...

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

Another entry in the markup based UI category...

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

No code is an island

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

Java generics support polymorphism...

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

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

Pretty cool...

Documentation (aka Technical communication) myths

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

"

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

" TECHWR-L

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

Technical presentation advice

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

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

Mar 20, 2004

Porting BlogX to .NET CF

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

Some interesting observations...

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

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

BlogX Client For .NET CF

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

test

test

XP SP2

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

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

Mar 19, 2004

.NET Compact Framework...

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

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

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

No more.

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

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

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

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

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

Mar 18, 2004

Thursday, a day of preparation

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

Mar 17, 2004

Woodworking 102

I wanted to build a coffee table for my office at work... initially the goal was to just build a really simple design and just bang it out. Given that the table was supposed to be small, we figure we would go insane on the wood... the result was an African Paduak top and legs, with Babinga stretchers. I went for fixed tenons for something new, and did a nice route on the top for a good accent. The beaded stretchers and round top don't quite fit with the blocky legs, but it works.

We started with 8/4 stock of paduak that we resawed to create the bookmatched top.  Given the width and density of the wood, we actually double resawed it - first cutting the stock in half with the grain before splitting it. The top is approximately 36"x22", the table is approximately 18" tall. 

Hours in the shop: ~15 hours
Finish time: 3 hours
Tools used: Band saw, router, table saw, double belt sander
Mechanical fastners: 6 figure 8 clips

The paduak is an amazing deep red that I finished with several coats of tung/lindseed oil finish. The babinga is a dark brown.