April 2004 - Posts
First, it should be obvious that I consider myself a geek. I think I'm a pretty big geek. My sister Laurie is constantly calling me a geek; the funny thing is she thinks she's insulting me!
But I don't hold a candle to Phillip Torrone who runs www.flashenabled.com. Wow. This is now one of my favorite sites for blowing time on.
Regarding the term “Geek”, last week there was a thread on channel9 about arrogance. One poster suggested that the definition of a geek is one who's primary motivation in life is to be more clever than someone else and then make sure everyone knows it. I strongly disagreed and posted this:
http://channel9.msdn.com/ShowPost.aspx?PostID=4989#4989
Alec (Hey Alec, long time!), Scoble, & Gartenberg are going back and forth on products designed for the masses vs. “the edge“. I've never used the term “the edge“ to describe the category that geek toys fall into, but it works for me.
This is all related (I think) to my thinking on Technology Complexity. Edge products typically have huge technology surface areas. The producer may have attempted to hide that technology complexity beneath a friendly skin, but Aunt Tillie isn't even going to begin to understand the key concepts. See my previous post for more thoughts.
I'm still an absolute n00b when it comes to regex. Even after reading Mastering Regular Expressions. But man, is it powerful.
Tonight my wife asked me to help her create name badge labels for an org she's in. All she had was an email that had a list of names like this:
DI- PAID IN FULL
Lynn Melton 2
Judy Pake 3
EO-PAID IN FULL
Peggy Ponto 9
ES - PAID IN FULL
Janice Norman 2
Janice Benson 3
...
Where the first two characters of the lines in upper case indicate the chapter the people on the following lines belong to. Each name line has the name followed by the table # they are to sit at.
I could have manually massaged this into a CSV file that I could do a mail merge with, but I figured it would take me about an hour to do. What a great excuse to actually try to write some regular expression code:
open(INFILE, "source.txt");
$chapter = "none";
$line = "";
while ($line = <>)
{
if ($line =~ /^(.*)[*-].*(?=PAID)/)
{
$chapter = $1;
}
if ($line =~ /^(\D*) *(\d+)/)
{
print $1;
print ", ";
print $2;
print ", ";
print $chapter;
print "\n";
}
}
I cheated and didn't bother trying to figure out how to concatinate strings when calling print in Perl, didn't remove whitespace (can someone point out what I should have done?), etc... But this only took me about 15 minutes using the aforementioned book and ActivePerl.
From
Larry
Grab the nearest book. Open the book to page 23. Find the fifth sentence. Post the text of the sentence in your journal along with these instructions.
"Right," I said. "And in Star Wars, no one was from Earth, so everyone, technically, was an alien."
This is from Agent to The Stars by John Scalzi. I went to high-school with John, but haven't talked with since. My buddy Robert Takata (where's your blog Rob so I can link to it!?!) pointed me at John's site and I decided to give his little novel a read. So far I'm really enjoying it!
As I mentioned before I use DFS on my home network to help manage my storage resources.
Almost all of my machines at home are domain joined. You get a lot of management benefits from doing this. You can make Windows Software Update Services (SUS) automatically apply patches to all machines, you can apply Group Policy across machines (e.g. to enforce password complexity requirements, re-directed My Documents, etc...) However, in one case I have choosen not to make a machine domain-joined: The PC in the kitchen that is shared by my wife and kids. The reason for this is we use fast-user-switching which is not supported on Windows XP Pro if the machine is joined to a domain (fast-user-switching is even better when you use a biometric fingerprint login device like the Digital Persona unit we have...just press your thumb and you are at your desktop...great for the wife and kids!).
Recently I noticed that on this machine I was having problems accessing the shares in the DFS namespace (e.g. \\kindel.com\shares\userdata\julie which is where Julie's My Documents is redirected to). Doing a “net use \\kindel.com\shares” was failing.
I tried to debug it using google but couldn't find any clues as to what was going on. So I emailed my buddies in the DFS team. After going back and forth, we discovered that I had disabled the DFS service on one of my domain controllers. I had disabled this service because that particular machine is anemic and I wanted to improve performance. That machine was not the host for my DFS root so I figured it didn't need the service running.
For domain joined machines, the DFS client will go to AD directly to find the DFS root. But for non-domain joined machines here's what happens:
- A non-domain joined DFS client, upon “net use \\kindel.com\shares” will resolve the \\kindel.com using DNS.
- It will talk to the resulting IP address’s DFS service which is smart enough to talk to AD and figure out that there is a DFS root on kindelsrv2 called shares.
- If there is no DFS service at the IP address net use will fail.
I was seeing intermittent problems because I have two DNS servers (each DC hosts DNS for redundancy) and the DNS client randomly chooses between the two (I thought it always picked the 1st in the list, using the others only for backup). Sometimes it would resolve kindel.com to 192.168.0.2 (kindeldc) and sometimes it would resolve to 192.168.0.4 (kindeldc2). Since the DFS service on kindeldc was not started whenever it resovled to 192.168.02 the “net use“ would fail.
Hopefully this post will help others until the DFS team can write a KB article about this (which I've bugged them to do).
[Update 4/28/04]
Here are some links to good DFS documentation (still doesn't address this particular issue, but these are good docs):
If you have a network with lots of storage that includes a Windows 2000 or W2K3 Server the Distributed File System (DFS) is your friend. This very cool technology makes it easy to move around where you store stuff physically while retaining a consistent namespace for your clients.
For example, on my network at home I have several servers, each with many hundreds of GB of strorage. As my data needs grow (and they are always growing as my photo, music, and video collection grows) I find that sometimes I need to move data from one machine to another in order to manage the overall storage pool better. Recently I was running out of space on the one machine (\\kindelsrv2) that held all my music, photos, & video because I was backing up DVDs (and using the Media Center add-on called DVDJukebox). I bought some new 250GB drives for my MCE machine (\\kindelmce) and configured them with RAID 1 (mirroring for reliability). I moved all the videos over there.
My client machines always access video content via this name: \\kindel.com\shares\video. That is a DFS name. There is really no machine named \\kindel.com (that's the name of my AD domain), but DFS manages the namespace below \shares (the DFS root). Once I moved all my videos over to \\kindelmce, all I had to do was create a share (\\kindelmce\video) and change the DFS namespace (using the DFS admin snap-in) to point to \\kindelmce\video instead of \\kindelsrv2\video for the \\kindel.com\shares\video name. All my client machines (and software I've configured on them, like DVDJukebox) continue to work and my family doesn't have to know I changed anything.
This is way cool and very useful. DFS has some limitations (which are being worked on by the DFS team), but for many scenarios like this it's the bomb. Note that I'm using DFS to manage a namespace. It also is useful for load balancing and redundancy: A single DFS name can actually refer to multpile physical shares and the DFS client has the smarts to determine which one is “closer” or if one is down it will automatically take you to another one. DFS utilizes a complimentary technology called FRS (File Replication Service) to replicate the contents between nodes. I don't use this at home, but it's popular in many IT environments.
There are two types of DFS configurations: server based and domain based. In the server based configuration you don't require any AD infrastructure but the machine you choose to host the DFS root cannot be changed (e.g. in my case it would be an actual machine name such as \\kindelsrv2 instead of the “virtual” \\kindel.com). I choose to use domain based DFS because I do have a domain and it gives more flexibility.
Good info on DFS can be found here: http://www.microsoft.com/windowsserver2003/technologies/fileandprint/file/dfs/default.mspx
My next post will be an interesting tid-bit I learned about DFS that doesn't seem to be well documented...
A new site has sprung up that provides a very cool, and very creative, way for helping people construct C# managed code declarations for native code interfaces. http://www.pinvoke.net/
Almost every time I write C# code I end up having to do some native code interop. Even though I used to know the Win32 API as well as anyone, my p/invoke declarations worry me...I find I typically guess on what types to use etc...
Now with www.pinvoke.net I have a place to go where I can not only see the best way, but contribute to helping others do it right once I've figured it out.
Hats off to Adam Nathan for making this happen.
Ravi posted an article on www.hageeks.com on the topic of “thin media clients vs. thick media clients“. He's got the right general idea but fails to talk about the other end of the equation: The thing that is providing the content to these clients. The server.
He says
thin client is used to gain access to content locked away on your computers or even the Internet via the home network.
First, I want to mention a new development in these “thin clients“. Today's “Digital Media Receivers“ (DMR, which is the industy term for this class of device) typically have relatively hefty processors and software sets on them. For example the HP DMR displays it's UI on the the TV. It has roughly the equivalent of WMP or WinAmp on it to do this. The new development I'm talking about is making these “DMRs“ even “thinner“ and “dumber“ by removing ALL application code form the client and having that code run on the “home server“...the UI is remoted to the device via a UI remoting technology. The first (and most important IMHO) example of this are the new Windows Media Center Extenders that will be shipping later this year (and were demonstrated at CES in January). These devices use a version of the Remote Desktop Protocol (RDP) that incorporates audio and video streaming. The UI you see is the great Windows Media Center UI.
The beauty of this approach is that over time the cost of these devices will come down even further because the amount of silicon needed to support them is greatly reduced. The core code can even be added to an existing device like the XBox (there will be a Media Extender kit for XBox...see this link). And users get a more consistent user experience.
Now back to my original point: What will serve up the content that these devices utilize? PCs! In the short term these will mostly be desktop PCs (even if they are in a quiet case and made to look like a stereo component). But in the long term we'll see other form factors that are more dedicated to the task. Because they are PC's (running Windows of course) they will be able to host all sorts of cool application (for exmaple the Premise Home Control software I love to rant and rave about). These things already exist, but only in niches and small quantities. But soon, I predict, the “home server” will become a hot topic...
Premise Systems has been sold (to an unannounced, but apparently BIG, buyer) and they have released preview versions of both thier Hardware and Services Development Kit (HSDK) and MiniBroker that are .NET based.
I've spent some time playing with both the new HSDK.NET and Minibroker.NET and the productivity difference is stunning. It took me weeks to implement my Cestron to Premise bridge driver using the old HSDK. If I were to re-write it using the new HSDK.NET I could probably do it in a day.
The new MiniBroker is the thing that really has my juices going. While I love Premise, I'm not a huge fan of their Automation Browser UI, nor does their mSense technology work for me. Being able to craft my own UI in C# (or Flash or whatever) is key. I have a reasonable solution working today, written in C# against the old Minibroker using COM interop, but the impedence mis-match between C# and the COM interop approach is too high. The new Minibroker.NET is much more natural; to see what I mean look at the sample “Phil DHC“ posted in this thread. If you have Premise installed an you fire it up you'll see that in just a few lines of code Phil was able to have a tree control displaying the Home topology on the left and a VisualStudio like Property Browser on the right.
If you are a home automation enthusiast, dealer, or installer, and you haven't taken a close look at Premise yet, you should.
Wow. I'm impressed. It was just a week or so ago that The Green Button had issues with the hoster and now they have the site up and running on a new host. New look & feel. Most content appears to have moved over. Great work folks!
The Green Button is a community website for Windows Media Center Edition (MCE). MCE is the coolest version of Windows you can get for home use. It includes an amazing UI for dealing with TV (with full digital video recording/personal video recording or PVR), photos, music, and video using a remote control. We call it a "10 foot" experience because you are typically 10' away from the screen when interacting with it.
Right now the only way to get MCE is to buy an OEM PC or subscribe to MSDN Universal. My recommendation if you are buying a PC from an OEM like Dell, HP, Gateway, Etc... for home use, you shoudl buy one with MCE on it. Even if you don't plan on using it for TV. The UI for music in photos is the bomb, even if you are using a mouse & keyboard; but especially if you want to use a remote control from a distance.
I'm a bit partial as I helped create the division that built MCE (eHome) and helped ship the first version in 2002. I also have developed a little shareware app, called MCE Controller, that helps you integrate MCE into your all-house A/V system (e.g. one based on Crestron, AMX, etc...). It basically lets you control MCE using Ethernet instead of relying on infared (IR) blasting. The number of 3rd parties developing add-no products is growing rapidly with some very cool things like MovieLink and ESPN Motion available now. One of my favorite add-ons is the DVD Jukebox.
The Green Button is full of great downloads for MCE and forums about the product. Check it out.
(The Green Button is named as it is because the remote control that comes with MCE PC's has a distinctive green button on it that is roughly equivalent to the Start button on your Windows XP taskbar).
Mostly when I read Don Box's blog I say to myself “Hmmm, interesting. I didn't know that. I wonder how long his hair is these days?” What he's working on (Indigo) is interesting to me (it was my former life), but it's not where my passion currently lies.
Today Don posted a piece as a response to Eric Raymond's article on software usability. I hadn't read Eric's article, but after I did (and John Gruber's analysis of it) I just had to write something myself. You see, I've been thinking quite a bit about technology complexity lately. I'm working on an incubation project at MSFT right now that is all about consumers and cool scenarios enabled by technology (software, hardware, networking). This is actually my 4th attempt at trying to get Microsoft to build this particular “product” (I can't really say what it is at this point), and we have learned a great deal in my previous attempts.
I want to change the world. I want to make all of these cool consumer scenarios that we've talked about for decades become a reality.
One of the most important lessons we learned is that the “typical consumer” (aka “Aunt Tillie”) can barely (if at all) deal with the technology complexity she already has. And the concepts contained in new, super-cool scenarios are so far beyond her reach that trying to introduce a product that enables it for her is laughable. Let me illustrate...
Personal Video Recorders (PVR) such as TiVO or MCE are amazingly cool. If you watch TV and you have one of these products you know it is a “killer-app”. Once you try time-shifting TV you get addicted to it; it is lifestyle changing. My family never watches live TV. My kids hate commercials, and skip them (yay!). As a parent, I can ensure that no matter what time it is or what day it is, if my kids want to watch TV there will be something “on” that they like (and I approve of). Life changing in a very significant way.
The concept of a PVR was introduced into the marketplace roughly 7-8 years ago. Why, if PVR is such a killer app have only ~10 million units from all manufacturers been sold? Price is certainly a factor, but 'cmon, this is a killer app!
Do you have a PVR? Are you hooked? If so, you have probably tried to explain the benefits to non-technical friends and family...to get them to experience what you have. My experience “selling the concept” has been hit-and-miss (much like the manufacturers). The failures all result from the people I'm talking to just not getting it. It's just too complex, given that they already have to think about digital cable v. satellite and the fact that they have to have all these wires and remotes and everything. I'm not saying they are incapable of getting it, but they are already so overloaded with technology that at this point in time they can't handle any more.
Another example: Consider fast-user-switching in Windows XP (and the copycat in OS X). Killer feature. Anyone with a single PC that multiple people use should use this. It just solve sooo many problems. But check around and you'll find that the majority of your non-technical friends/family don't use it. If you explained it to them, showed them the benefits, they probably would. But it would take a lot of energy to explain the concepts of “user accounts” to my in-laws when they are already struggling with how to drag the MSN8 side-bar to the left so that it's big enough to see.
The blinking clock on VCRs also comes to mind...
So what should we do about this when we have an idea for a cool consumer scenario enabling product? I suggest the following:
Segment “consumer“ into smaller buckets. For example, the “Aunt Tillie” bucket is the true techno-novice; my in-laws fit into this bucket. They can turn their PC on, read and write email, play a little hearts, browse the web, but couldn't initiate a “Remote Assistance“ session unless they were “assisted“. The “Media Enthusiast“ bucket has people in it who love ripping CDs and portable music players and home theaters. They can and will dig deeper. The “Geek“ could build a PC from components and maybe even write a little code. The “Super Geek“ is probably a programmer by trade and can figure anything out (unless of course it's Eric Raymond trying to share a printer on Linux).
Once you create these buckets focus on the one that is the most realistic for your product. Sharing a printer on a home network ain't for Aunt Tillie, so don't pretend you're gonna sell the product to her. Focus on nailing it for the enthusiast, but keep an eye on Aunt Tillie.
If it is a V1 product, build it for customers who will actually use it and will be able to help you learn. It would be a shame to enable a whiz-bang new scenario that geeks would get and love, but you've de-tuned it so much by focusing on Aunt Tillie that geeks find it unusable. Aunt Tillie won't buy it because she can't comprehend the concept and geeks won't use it because it's not flexible enough. In the end you won't learn anything (other than the lesson I'm describing here). And most importantly, you will not have moved the world forward
Of course, it's not always possible to be this patient (do a V1 that you learn from, then expand in V2, etc...). So you have to make trade-offs. What I've seen is that product designers tend to pick one extreme or the other. Some companies are better at all this than others.
So while my attitude about enabling new consumer scenarios is somewhat pessimistic, the good news, for us technologists, is that if we follow this formula over time (generations?) the complexity will be “absorbed” and even Aunt Tillie will finally “get it“.
More Posts