July 2004 - Posts
Raymond has a fun story about "The evolution of mascara in Windows UI". Reminded me of my early days of Windows programming. Before I was at Microsoft (and for a bit after) I developed a few (mildly successful) shareware applications for Windows. I think I was one of the very first people to apply 3D effects to controls in Windows applications!
In 1989 I developed at DLL that I used in all of my applications called TDUTIL.DLL that add drop-shadows and other effects to Windows dialog controls. I remember working with Morrie Wilson tons during this time (fun looking up Morrie on Google and finding this link...after all these years).
One of the first programs that I released into the wild, as a freeware app, was Mark30. Here's a picture of it taken running as a Win16 WOW app on XP. It looked a bit different on Windows 3.0, but you get the idea. The "Drop Shadow" effect was my idea.

Mark30 changed a bit in Windows 2.1 applications letting them run in Windows 3.0 without the warning that popped up about potential compatibility problems. You can still download Mark30 from various old sites on the web such as http://garbo.uwasa.fi/windows/util.html.
Later, as this trend continued, I enhanced TDUTIL.DLL. WinPrint, my most successful shareware app looked like this:

You can see that the look evolved so that most controls were "embossed" and group boxes had the "drop shadow". TDUTIL.DLL was completely automatic. All you had to do was call a single initialization API and it automatically added the effects. Just like CTL3D.DLL did. But I did it first (as I recall).
I still use WinPrint to print my source code files even though I never ported it to Win32 and there are probably better solutions out there today.
Funny story about WinPrint: When I sat down to write it I actually had two programs I wanted to write. The first I called WinZip and the other was WinPrint. I decided to write WinPrint first. Niko Mak beat me to WinZip.
My other shareware app, which lots of people liked, but was nowhere as successful as WinPrint was INIedit. Check it out here.
Multiple people have asked me for a sample that illustrates how to talk to MCE Controller from Crestron using SIMPL Windows.
Ask no more: On the MCE Controller site, I've added a SIMPL Windows sample program that illustrates using MCE Controller with a Crestron processor. This sample illustrates using MCE Controller in client mode with a CP2E processor (which is the way that I use it).
When I built my house a few years ago I installed several video cameras for security monitoring. Until recently I was only capturing still images from these. I archived the still images and published the most recent via a URL on my website allowing me to see “the latest” while away from home. I've been using a very nice shareware program to accomplish all of this called SupervisionCam by Peter Kirst. I originally used SupervisionCam for capturing stills of my house being constructed...I still haven't gotten around to encoding all those stills into a time-lapse video...sigh.
Any-hoo, this worked pretty well, but what I really wanted was live video.
I knew I could use Windows Media Services to accomplish this, but never got around to setting it up until last night. Damn, Windows Media Services 9 (built into Windows Server 2003) is easy to use! I used older versions ages ago, but have never played with the 9 Series. Kudos to Bret and everyone else involved. The UI is a bit weird, but it very discoverable, and I found the documentation to be really, really good for what I wanted to do. I have a few beefs (see below), but really solid stuff.
In order to encode and stream live video from a security camera you need the following:
- A camera. In my case my cameras are all analog terminate as S-Video (most people will find that their cameras output composite; I have a fairly bizarre setup which I should blog about sometime).
- A capture device of some sort. I am currently using an AverMedia DVD EasyMaker USB 2.0 device. I went with this because it was cheap and you can plug multiple into a PC at a time and each will have it's own driver loaded. I had lots of problems getting multi-input PCI capture cards working with the software I wanted to use. FWIW, I have found that these things work very well.
- A PC for encoding. This is the PC that the capture device is installed in. Consider the quality of the video you want and the number of different bit-rates you want available simultaneously when deciding which machine to run the encoder on. The encoder machine can be the same machine as the streaming machine. The encoder machine can be running XP or W2K3 (or probably even W2K). You'll need to install the Windows Media Encoder 9 Series.
- A PC that is your streaming server. In my case this is the same W2K3 box that hosts www.kindel.com. From my experiments for this scenario the hardware requirements are not too demanding. Use the Configure Your Server Wizard to add the “Streaming Media Server“ role.
- A hole in your firewall for the RTSP protocol (554) that passes TCP traffic on this port to your streaming server.
I won't go into all the steps require to actually setup WMS and WME. Suffice to say that it took me about 10 minutes to figure it out using the Windows Media Services and Encoder documentation.
I can now view my security cameras from work over the Internet...live! I'm currently encoding at two bit-rates (150kbps and 250kpbs 320x160 .5fps) which is good enuf. I plan on adding a lower bit-rate option so I can view the cameras live on my Windows Powered Smartphone. Now that's cool.
I do have some issues with this setup. First I'm not quite sure what machine to use as my encoder. Right now I'm using my screaming Windows Media Center Edition box, because that's where I was most recently playing with the new AverMedia capture device. I'm seeing about 30% CPU utilization encoding the two streams. I probably don't want to burden my MCE machine like this; probably not good for watching movies. At the same time I'm not sure I want to load my home automation server (running Premise); although it is a single proc server with an empty socket for another processor...
Also, I'm shocked at how hard it appears to be to get the Encoder to run as an NT Service. I assumed it would be a built-in feature, but apparently I have to write code (an NT service that uses the Encoder objects). I tried to find a tool that already does this via Google, but didn't see anything. I guess I get to write some more code which is never really a bad thing.
My next step is to build a web page that lets me control the cameras while I'm watching... Stay tuned.
From the this is just plain cool department: eMachineShop allows you to design any physical "part" you want using a CAD program you download and then submit the plans to them. They will machine the part using any number of processes and ship it to you. You can do quantity one or 1000s. You can use just about any material you can think of.
Now I gotta think of some project that would require me to make a part so I can try this out!
I typically just use .Text's standard edit form for creating my posts, but it does not deal with images well (see my posts from Asia and you'll know what I mean. I've tried both BlogJet (in fact I'm typing this in BlogJet) and w.Bloggar, but they don't do what I want either.
What I want is to be able to point to a picture on my local machine and have the following happen:
- A low resolution version suitable for appearing in a typical blog display is created and saved to the server hosting my blog.
- The high-res version is also uploaded to the host.
- The blog entry gets an <img> tag in it pointing to the low-res version with an <A> tag wrapping it with the link pointing to the hi-res version.
- Since I use .Text, the images should be added to .Text's Gallery.
- I want the low-res version default to the right (I want it to look like www.engadget.com entries).
I want, I want, I want!
I've been thinking a lot about technical enthusaists lately. And I'm really struggling with it. The problem is I'm a super-hard-core technical enthusiast. Probably close to as hard core as you can get. And I know many, many people just like me. This makes me biased. Add to that the fact that I work for Microsoft and live technology.
I should get it out front that I believe “geek“ is synonymous for “technical enthusiast”. Some people (my sister) think geek is a pejorative; it is not.
Here's what I want to know:
How many technical enthusiasts are there in the world? And will the product ideas I'm thinking about be appealing enough to them to cause a purchase?
This raises the question: What exactly do I mean by “technical enthusiast”? So I need to create a taxonomy starting with the broadest definition:
One who enjoys learning about and using technology to improve their life.
Anyone got a beef with that definition?
If you have thoughts on this please post them as comments. I will post more thoughts later...
More Posts