Wednesday, September 28, 2005

To .NET 2.0 or to .NOT 2.0

In my spare time (ha!) one of the things I've been doing is redesigning a pretty significant chunk of the FlexWiki engine. I basically had to because I wanted to add security, and the current design isn't extensible enough to do that without causing a major mess.

 

As I've been going through the code, it has occurred to me that I could benefit from some of the features that .NET 2.0 has to offer. So I'm thinking of upgrading. Here's the catch: it would mean that when I ship the code, everyone's going to have to install .NET 2.0 if they want to use the new version. Hence my dilemma.

 

See, the tricky part is figuring out how big a deal it is to say, "You must have .NET 2.0 to use FlexWiki." Eventually, of course, it won't be a big deal at all. But right now, it's actually a showstopper, since (AFAIK) you can't go live on the version that corresponds to VS2005 RC1.

 

Of course, there's basically no chance I'll finish before .NET 2.0 ships. It's too much work, and I'm progressing too slowly for it to be done before November, so I'm not too worried about the licensing situation. But the question remains: how long after November is long enough? Zero days? A year? Obviously, that answer is going to differ from individual to individual, so the challenge is to figure out an answer that's "right enough".

 

At the moment, I'm thinking that the right thing to do is to go ahead and upgrade. There are a number of reasons why I think this will work. For one thing, like I said, it's not going to be done for a while. For another, there's nothing that says people have to upgrade - they can install it whenever .NET 2.0 becomes an option for them. And finally, because FlexWiki is a web application, and because ASP.NET 1.1 and 2.0 coexist peacefully, the upgrade should be possible for most people.

 

I'm not going to do the conversion until at least October 1st. I announced my intention a few days back on the FlexWiki Users Mailing List, but I thought it might be a good idea to mention it here as well. If you have comments or advice, feel free to leave a comment or contact me.

Tuesday, September 20, 2005

IIS + Skype = Oops

My wife and daughter have been in Asia visiting relatives for the last couple of weeks. Fortunately, she has access to a fast Internet connection and a webcam, so I've gotten to see my girls most days. That's particularly nice when your kid is at the age where she's learning new things pretty much every day.

 

We've been using MSN Instant Messenger for our video conversations, and all in all I've been pretty pleased. It works well enough. My only complaint is the fairly high audio latency - that can lead to awkward conversational collisions. We've gotten pretty good at not stepping on each other, but I thought maybe I'd try a separate VOIP application, hoping that they were doing something with QoS that would get the latency down.

 

My first stop was Skype - I don't know much about VOIP applications, they're free, and they're a big enough name that I felt reasonably okay about installing it. Unfortunately, it completely failed to work - we'd get connected, but then something would happen on Alice's parents' computer and her connection would drop. Oh well - we just went back to the high-latency voice of MSN. She'll be back before we have a chance to try anything else out. Maybe when I start traveling to teach we can explore other options.

 

Well, that would have been the last I thought of it, but a few days later, as I was doing some FlexWiki work, I had some IIS problems. Specifically, I was unable to start my website. Oddly, I could still browse to the URLs I was working on, but all I got back was an empty document. By this point, you've probably figured out what I hadn't: another application was listening on port 80, preventing my website from starting, and serving up bogus documents in response to my requests. Obvious to most perhaps, but I had to google this KB article before I figured it out.

 

One "netstat -ano" later, and I'd discovered it was Skype that was hogging the ports. Sure enough, there was a checkbox in the options labeled "use ports 80 and 443 as alternatives". Unchecking it (and restarting Skype) fixed the problem. Good thing, because I was not looking forward to reinstalling.

Thursday, September 8, 2005

Empathy


When my daughter Ellen was about 6 months old, my sister Kristin came to visit. Ellen was very shy at that point, and often wouldn't let Kristin hold her, especially if my wife was anywhere within earshot or eyesight. That week, Kristin got stung by a wasp at a barbeque we were having, and was obviously in pain. I was holding Ellen and trying to help Kristin. Ellen reached out her hand and touched Kristin, for all the world looking like she was trying to make Kristin feel better. We'll never know if it was just a coincidence, but this article suggests that perhaps it was true empathy on Ellen's part. Interesting stuff.

Thursday, September 1, 2005

I Want to Learn Everything (But Can't)

Clemens, I totally sympathize. Even given that I'm about to transition to a more academic mode, I know I'll never even start with all the technologies in which I'd like to become an expert. This really struck me today when I was looking at some VS2005 functionality for a client. The sheer weight of new features that I wanted to check out was crushing: Indigo support, Avalon support, VSTS integration, web project improvements… And the underlying technologies themselves: WinFS, XML and Web Service innovations, generics…and that's not even counting all the other stuff I'm interested in, like Ruby and LISP. It's just not humanly possible to get to it all. (For me, at least: maybe someone smarter could manage it.)

 

Oh well: while I can't possibly learn everything, at least it'll be fun to try. :)

Wednesday, August 24, 2005

Typing Accents


 

I was working on reformatting my résumé a little bit today, and I wanted to change my MSN IM tag to reflect the fact. So I set it to "Resume" and went off to work. Of course, all that did was draw a smartass remark from Ian about me powering my brain back up after suspending it. :)

 

While we were chatting, I finally remembered the key sequence that would have let me type "résumé" instead of "resume". It's control-' followed by e. Similarly, control-` followed by a letter renders the other accent (although not for all letters). And control-~ a gives ã.

 

Two interesting things about this:


  1. Ian's keyboard gave reversed accents from mine for the same key sequences. But he's in the UK - maybe this has something to do with driving on the wrong side of the road. :)

  2. These key sequences don't work in all text controls. So far, from what I've tested, it works in Word and in MSN IM, but not in notepad, notepad2, nor InfoPath.

 

At any rate, I'm sure I could have found this on Google, but now I know where to look. Also, hopefully blogging this will remind me to make sure I put support for it into my TextEditor control.

Centering with CSS

After all that "I'm so great" in my post yesterday, I figured today would be a good time to show off how little I know about most things. :)

 

I'm an HTML/CSS neophyte. I can manage a basic page okay, but fancy-pants layout is well beyond me. CSS, in particular, is a topic whose further reaches I've never explored. Heck, I've barely wandered a few feet from its parking lot. (Although the FireFox EditCSS extension has made my HTML look loads better by making it easy to experiment.)  

 

One of the things I always have trouble with is figuring out how to center stuff. I'll slap a text-align: center on things sometimes, but that doesn't always accomplish what I want. So today I ran across this little nugget:

 

.centered80

{

  position: absolute;
  left: 10%;
  right: 10%
}

 

It gives me the ability to center something in the middle 80% of the page. It worked so well I wanted to record it here for my own future reference. I'm sure anyone that has spent any time with CSS already knows this (or a better version), but at least now I can find it again when I need it.

Tuesday, August 23, 2005

Transitions (Subtitle: Whore for Rent)

Update: fixed minor typo.

 

Keith just outed me, so I'd better come clean. :)

 

I've been an independent contractor for about the last six years. I love it. One of the great things about it is the flexibility: my schedule is flexible, my working arrangements are flexible, and indeed my very career track is flexible. Of course, all that flexibility comes with a price - I have to self-direct, and sometimes you wind up on the bench for a bit. But I don't mind those.

 

One of the very positive outcomes of all this flexibility has been the ability to alternate between what I think of as an "academic" track, and what I think of as a "practical" track. In my "academic" mode, I spend a lot of time sitting around and looking through docs, playing with betas, and generally examining all the corners of a particular piece of technology. In my "practical" mode, I help my clients build real systems.

 

I can't imagine doing just one or the other. If I were purely academic, then there are all sorts of things that I'd never be forced to do, like write a real build script, fix really difficult bugs, or, generally, ship a product. And if I were purely practical, then I'd almost always be constrained by time pressure to only learn the parts of technology that I actually use, as they became needed. That sort of need-driven education tends to leave big holes in your knowledge, and you never know when the stuff you don't know might come in handy.

 

Teaching for DevelopMentor was a great way to live the academic life. The fear induced by the thought of standing in front of an audience and not knowing what the hell you're talking about is an excellent motivator. I learned tons of things I never would have, simply because I wanted to know the answer in case anyone ever asked me.

 

At the same time, not being forced to apply all that theoretical knowledge means that you can't fully appreciate it. You can think all you want about things like the performance of the .NET garbage collector, but there's no substitute for experience to tell you that in the real world you hardly ever care about it.

 

For roughly the last three years, I've been in a almost purely practical mode, and it's been great. I've worked on a bunch of open source projects (most notably FlexWiki), contributed to the MSDN2 rewrite, and helped my client Integic with a massive .NET port of their workflow product. It has all been highly educational. But the pendulum has swung, and now I miss the academic side of things, particularly now that we're so close to the release of the next version of .NET. So I'm making a change.

 

I'm proud to announce that I will once again be taking on the role of itinerant instructor, this time with Pluralsight. It's a first-rate organization, and I'm really looking forward to working with these guys again. I'm not entirely sure what class(es) I'll be teaching yet, but I'm definitely eager to get to it - diving deep into the details of something and then sharing it with my students.

 

The timing on this is pretty good. I'm ramping down with my existing client as their ship date approaches, so it's a good time to change gears. Which is where you (and the subtitle of this post) come in: I'm also looking for work. I'll be teaching, of course, but that's only a fraction of my time, and as I explained, I don't think I can be the best instructor I can be unless I'm continually applying the knowledge I've gained in the real world.

 

Here's the part where I shamelessly promote myself (you can skip to the last paragraph if you find this sort of thing embarrassing):

 

I graduated with a simultaneous BS/MS in 1995 from MIT. I've got about five years experience working with .NET. I consider my specialty to be the design and implementation of large-scale distributed systems. I'm quite good with C#. I know my way around XML, including web services technologies and XSLT. I've written for MSDN Magazine. I'm a mean debugger. I learn very quickly. I helped rewrite a significant chunk of the fourth biggest website on the planet. I've spoken at conferences around the world on topics from Visual Studio to Direct3D. You can find my resume here.

 

So, if you've got a project you think I could help with, please do contact me. And if not, hopefully I'll see you in class!

 

Like I said, I love being an independent contractor; it makes for interesting transitions. We'll see where this set takes me next!