Skip to content

2006

Why no HTPC?

I've been a dedicated TiVo fanatic for 6 years now. The concept of consulting a TV guide and arranging my daily life so i can sit down in front of the TV in accordance with somebodies idea of appropriate scheduling is one I can no longer accept. I'd rather not watch TV than watch it on someone else's schedule.

At the same time, the fear of being an evangelist for technology is always "will my technology be Betamax?" I.e. will its implementational superiority finally mean nothing in the face of someone else's mass market delivery?

And because of TiVo, I have become somewhat of a HiFi Luddite. Sure I own an HDTV, but i take crappy lodef cable and then stretch and crop it to fit in 16:9. And 5.1 sound? Bah, stereo is good enough for me. If my TiVo can't do it, I don't want it. I don't care if the gore in CSI is so much crisper in HD, if I can't record it and watch it with Pause button in hand, it's not worth it. I've been tempted by the Timewarner DVR a number of times and prefer the concept of renting a DVR over buying and paying a monthly fee. But while the non-TiVo products are DVRs, it's the little things in the way TiVo behaves that make it hard to give up. I know plenty of people who have the HD DVR for HD, but still use the TiVo for everything else.

So why no HD TiVo? Or why not build my own, being the card-carrying geek that I am. Well, Ars Technica has a very nice article why we are stuck in a consumer hell where all the cool new toys don't really do what you'd expect them to do as a consumer.

Sure, I hope that I'll have the opportunity to buy and use a Series3, but I'm not holding my breath. If the leadtime of hearing about HD HTPC that's worthwhile is as long as the time between seeing the first HDTV and buying one (and not watching HD on it), then I got some time to go still. Truly, I still think Cablecard is about as likely to hit mass market as SDMI

C# closures

Just after starting to play with closures in javascript (to fake delegates), i run across an excellent series of articles on closures and anonymous functions in C# 2.0, complete with pitfalls. Cool stuff...

The implementation of anonymous methods in C# and its consequences

Part 1

Part 2

Part 3

Delegates in Javascript

I've recently been doing javascript coding again. Being the object bigot that I am, everything that interacts with a DOM element gets wrapped in an object that becomes responsible for that element's behavior. Well, then i tried to move all the event handler code from the procedural side to the object side and things broke, and hard.

At first I was confused why it wouldn't call my this._InternalMethod inside my event handler. Then I remembered that i've been spoiled by the CLR and that I was dealing with plain old function pointers, not delegates.

While the Atlas framework provides delegate functionality (along with a lot of other useful things), this was not for a .NET 2.0 project and I didn't want to graft the Atlas clientside onto it as a dependency. But knowing that Atlas does delegates, i knew it was possible.. but how?

I found the answer in this article which basically uses closures in javascript to allow the persistent of the object context in event handlers.

So basically to create an event handler that maintains its object context do this:

function MyObject = function(name)
{
  this._name = name;
  var _this = this;

  this.MyEventHandler = function()
  {
    alert("My name is "+_this._name;
  }
}

Great. Now I can avoid all procedural code and just have my object subscribe themselves to element and document events and handle them in their own context

It's getting harder to upgrade that TiVo

When we got a Humax Series 2 TiVo (to replace our faithful Series 1) it almost immediately started making clicking noises that usually signify the imminent death of disk. We figured, if we sent it in, they'd just see it working and send it back. So we started the TiVo deathwatch. 2 years later it still hadn't died, but now, about once a week, the clicking is followed by the machine rebooting. The warranty expired a while back, so time to replace the the disk.

Being a Series 2, I decided to use a disk larger than 137GB. Quick trip to Fry's and I had a shiny 200GB disk. Now, it's been a while since I put the 120GB in the trusty Series 1 (which is still running strong and better than the Series 2), so my other PCs have gone through some changes. Turns out that all my new machines use SATA and have only one ATA port. And the DVD is hooked to that port, which leaves only one more available connection.

Right, you need at least 3 -- CD, source HD, target HD. Ok, no problem, I have an old box that's the home file server. That one not only has two ATA, but it also has a PCI card with another 2 ATAs (for large disk support). A couple of minutes later, I booted into the weaknees CD and all seemed fine. The boot messages showed all disks properly set up. But apparently the setup that weaknees used did not have any devices above /dev/hdd. So my disks hooked to /dev/hdf and /dev/hdh were not accessible. And i couldn't use the /dev/hd(a)-(d) because my disk was 200GB and was not recognized as such with the onboard ports.

Fortunately, the server itself runs Fedora, so i copied the mfs tools from the CD onto the HD and booted into Fedora with the tivo disks attached. Everything worked out fine and now i've got a potential 219 hours on tap!

But I guess the lesson is that ATA is going away, so what I used to take for granted is no longer there when the tivo tweaking calls.

PageFlakes

I was digging around atlas.asp.net today and looked at one of their Showcases called Pageflakes. Cool entry in the start-page space.

I've been using Sage to handle my RSS needs, but it doesn't stay in sync between home and my two offices, never mind my laptop. So, I've migrated all my feed needs to Pageflakes to see how well it fills my needs.

Of course I couldn't just use a new tool. I had to figure out how to expand on it. First i just created a web page flake and pointed it at one of my webapps. Kinda the lotek way to get an app onto the grid. I figured there had to be a way to create proper flakes and clicking on the Developers link I was rewarded with step-by-step instructions on how to create custom flakes. Very cool.

What I really need to make this my main page is a way to sync my Palm Desktop to its address book and To do list. Now that would be useful.

ThreadSingleton revisited

I've been using the CallContext for a while now to create thread singletons, especially under ASP.NET since it's a single process and you need to work in a thread context when dealing with per request singletons.

Today a co-worker pointed out this post. Apparently you can't trust CallContext under ASP.NET. You really should stuff your singletons into HttpContext when running under ASP.NET, just to be sure. It's a good read.

LFSLib 0.11b

Two bug fixes.

  • OutSim was broken.. missing the Roll member
  • OutGauge and OutSim would not work right if there was no ID defined in the LFS config, since the packets would be 4 bytes smaller each.

Also added an OutSim form to the Tester app.

As usual, docs, sources, etc. can be found here

New LiveForSpeed Lib v0.10b, refactored

Ok, 0.10b of my lib for Live For Speed is out, but it was refactored quite a bit, so it's not a drop-in replacement.

The refactoring was done in order to let the InSim library receive and handle OutSim and OutGauge events. InSim, OutSim and OutGauge are now all part of one library. The OutSim and OutGauge protocols can be used either via their own standalone handlers or received directly via the InSimHandler.

Here are the breaking changes when switching to this revsion:

  • Renamed namespace LiveForSpeed.* to FullMotion.LiveForSpeed.* so as to not monopolize the LiveForSpeed root namespace.
  • Moved LibVersion to FullMotion.LiveForSpeed.LibVersion
  • Renamed LibVersion.SERIAL to LibVersion.INSIM_SERIAL

As usual, docs, sources, etc. can be found here

New Company: Full Motion Racing

After over a year of working silently on this, finally my new company is coming out of stealth mode.

Introducing: Full Motion Racing

Video Hosting courtesy of vMix

Full Motion Racing is building a Racing Simulations Center in San Diego, CA. Our facility will offer guests networked racing on 3DOF motion platforms. We're still a bit out from the official opening, so check out one of our upcoming public exhibitions