Friday, December 17, 2010

WtvWatcher: Year One Down, and On...

Version / .46

So last week I had some time to post a new version of WtvWatcher. The update list below is pretty much point-for-point a list of the fixes and enhancements that came from the community feedback.
  • FIXED: Error codes 2 and 5
    Would occur when file was HD H.264 encoded, but not always...more a wtvconverter.exe issue, but it seems that after an update to the parameter mask, a few test recording are converting properly now.
  • FIXED: Starts converting show too early
    Updated process to listen for file changes, not just look at file modification date/time. Apparently, Media Center doesn't update the original file consistently throughout the recording process, but that's OK now because WtvWatcher sees all file I/O operations in the source location.
  • ADDED: Preference 'delete to recycle bin' after success
    For testing or diagnosing scenarios, when something on the system isn't working as expected. Much easier that waiting for another program to record! :)
  • ADDED: Preference 'temporary working directory'
    If you want to optimize WtvWatcher to split the file I/O read/write between physical drives, then when done converting, copy the resulting DVR-MS file back into the source location.
  • ADDED: Preference 'verbose logging' and 'view logs'
    For when something's not working and you need to see what's happening. Also sometimes in order for me to help people in CodePlex discussion threads, it helps to see how WtvWatcher is behaving.
  • UPDATED: Documentation and Tutorials
Wow, it doesn't look like alot, but I can tell you it was at least 8 hours of late-night geeking.

Stats / Growth

From the looks of it, I now receive around 300 source code downloads per month (or around 10 per day) from the CodePlex site, and 20-30 first-time installs of the click-once application from my website. I know it's not much, but it lets me know I have had some impact on the anonymous community of Media Center enthusiasts.

[Wishful Thinking]

Hey, you never know, maybe even people like Scott Hanselman or (my undeclared idol) Brian Beckman have seen it. I know, not realistic to think they watch enough TV to warrant commercial cutting, but a guy can wonder, is all.

However, dispite the anonymity the software ensures to users, getting constant positive feedback from the community of users I do have is indeed satisfying too. You don't have to be a name or wear a fancy hat to be a developer's friend.

The Next Leg

It was never supposed to be a regular maintenance thing for me, and I have even less time now that I'm going to be a new dad in March 2011, but I can't forsake the community completely. Come on.

The next ideas I have for WtvWatcher is to include more support for non "to DVR-MS" format. It's an old format, and to down-convert the 'new format' (which is now almost 3 years RTM) was always a 'hack'. It's now become more like saying:

we don't need these new fangled "phone" contraptions, we have the postal service...[gnash, gnash]. next thing you'll tell us common folk is that you can ask your car to tell you how to get somewhere. damn kids and their flying cars and robot servants. the robot eat all my medication and their arms are strong and i can't break free of their death grip. i just want to be under my afghan and watch my jerry lewis and walter chroncite before the clock chimes 8pm.

So yeah, this down-conversion thing is getting old for me.

However, there are quite a few things I really *don't* like about the new format (ahem,, and lets not forget that as awesome as HD TV is, it's just another excuse for the networks to play antitrust and demigog over a new medium, leaving us enthusiasts in an oft lurch. H.264 is great and all, but update your damned utilities Microsoft!

If I had my way, all my content on my network would be MP3 and MPEG files. Every video device made since 2000 can decode these formats, and I'd rather have a seamless 10 foot experience over all of my content than have only HD on some of my content.

Drag-N-Drop Processing Pipeline

That being said, the next step is to allow WtvWatcher users to drag-n-drop 'processing blocks' onto each of 4 or 5 process step placeholders. Want to pre-process or post-process WTV files? Just inject the right blocks, and you're on your way. A few intelligent defaults for this 'pipeline' approach, and WtvWatcher will remain as easy to use as before whilst becoming more flexible and intuitive at the same time.

GraphEdit Integration

The more advanced community uses the Windows SDK utility 'GraphEdit' to fix muxing issues and diagnose output errors all the time. I've seen so many variants of this utility that the value is clear: WtvWatcher should be able to use a custom graph (or content translation wiring diagram) during both the decode and encode process. It should also be wicked easy to jump between fixing a graph and testing the edit back in WtvWatcher. If this were a feature, the community could use and share custom graphs to accomodate new formats and changes to content delivery faster than I could ever patch side-project software initiatives.

Enhanced Metadata Support

Currently, the 'processing rules' feature only works when certain media elements are correctly set on the original WTV file, which doesn't always happen in practice. More work should be done to fix this.

Also, and while this is no fault of WtvWatcher but rather Lifextender, after commercials are cut from the DVR-MS file, media file attributes such as thumbnail and recompiled program length are often missing. I'm sure that WtvWatcher could retain the original WTV metadata, wait around for the commercials to be cut from the DVR-MS file by some other program, then re-apply them after post-processing occurs.

Yet another concession I make to older format support on behalf of the bleating community (and my wife too)!

Feedback / Donation

Really the best thing you can do to better WtvWatcher is to provide your support via feedback and donations. The feedback lets me know what's important and what really needs to be fixed. The donations are a way to let me know you care enough and that I should get off my arse and respect that you gave some of your hard earned money.

While it's on CodePlex for educational and open source reasons, it's such a small project that more than one contributing developer and the potential for code branching...frankly...wearies me. No need to over complicate things is all I'm sayin', but I do appreciate the offers for sure.

My initial goal was to A) fix a small problem I had with my home entertainment, and B) post an open source project to ascertain the value of free community feedback. Both goals were reached long ago, and it's been a great learning experience for me to maintain such a popular niche software app. The community has been, beyond my wildest expectations, incredibly encouraging and patient with updates.

Best wishes to the community and good holiday cheers,


Friday, June 11, 2010

An Oed to the Life of a US Developer

Exerpt from a random email between business partners:

"OK, so after a really epicurean, long belated dinner, complete with 4 johnny blacks on the the rocks shaken over ice, gin and tonic, and bourbon with lime soda, it occurs to me.

Instead of designing software under the assumption that the people using it are sober and logical, I should assume the worst of the average user.

Namely, they’re drunk and pounding fingers on their iPods expecting shit to work as if, in their unrealistic, dysfunctional irrational dreams, the world was as simple as their puny brains could comprehend.

When you’re not sane (as most of our issues from MSA come in) as such (re. this morning’s inexplicable use of irrationality), I guess it’s only fair to absorb the force major that our current client base suggests and just plain give up.

Human kind is a moronic reduction of an evolutionary cluster fuck. A diarrhea of a convergence between implicit complexity and desirable simplicity.

I’m done now, mostly because I need sleep like the dead do, anyway. Call me tomorrow…if you dare. I’ll be coding the evaluations functionality.

Good luck to me."

Saturday, May 1, 2010

Wednesday, March 31, 2010

How to Open SQL Server Mobile / Compact Edition Data Files on a PC

After alot of mis-information and redirection, I finally found a way to open and view the contents of a SQL Server Mobile (or Compact) Edition data file.

Sometimes with an ".sdf" and sometimes with a ".mdf" (I actually think it's arbitrary what the extention is, so long as the format is good), these compact data files can be opened using Visual Studio. From the File menu, select > Open > File item. Select the mobile database file, then it will show up in the "Data Sources" toolbox. You can navigate artifacts of the database, as well as view the contents, copying out to Excel if necessary.

SInce I was dealing with a mobile database file created using the 3.5 components, I had to open my .mdf file up in VS2008 and not VS2005 (I have them both installed for such circumstances). However, from what I was reading online, VS2005 is required to open CF mobile databases from the 2.0 days.

This was all due to a SQL server publication being accidentally deleted by an automated batch script between production servers. On a side note, after re-creating the [very simple] publication using the same source, name, articles, web synchronization URL, target folder, and publication access list members, the old subscription mobile databases actually successfully synchronized with the 'new' publication.

I'm at a point where the words "who cares" now show up in the wrinkles produced on my forehead due to the permanent smirk I've adopted today.

Light years, though, beyond where I started with Microsoft's replication efforts, back with Access replicas, then on to SQL 2000 replication (f*ing nightmare), 2005 replication (much improved), and now SQL Server 2008 with 2005 mobile components. Thank jebus for experience.

Tuesday, March 2, 2010

Remote Enable RDP and Restart of Windows Server 2008

Learned how to remotely enable Remote Desktop services on a Windows Server 2008 box today. It consists of:
  • Remotely editing the target machine's registry [more]
  • Masquarading as administrative credentials on the remote machine via local command shell [more]
  • Sending the shutdown (restart) command [more]

Sunday, February 28, 2010

SQL 2005 + XP SP3 = WTF

Today I ran into an issue where SQL 2005 Express wouldn't install, and kept giving a 1603 error message.

Further research into the SQL installer logs revealed that it was, in fact, MSXML 6 Service Pack 2 that was failing to install. I tried installing from KB954459, but the setup continued to throw me an "interrupted" error.

After googling around, I found multiple people talking about the "Windows Install Cleanup Utility".
(A few of the salient articles are linked below.)
I used to this utility to remove the MSXML 6 Service Pack 2 installation reference, but after a reboot, still no luck installing the KB hotfix (above).

The trick was, I didn't need to install MSXML 6 anymore, I could just go ahead with the SQL 2005 Express installer, and then it worked without any trouble. Apparently the SQL installer carries its own version of the MSXML 6 Core Services package which doesn't include whatever incompatabilities exist between MSXML 6 SP2 and Windows XP SP3.

Note to self, Aaron Bertrand is totally right about the finger-pointing. Microsoft should have gotten their shit together about this when it was first brought to light on more than a few computers. Dicks.

Wednesday, February 17, 2010

Linq to SQL GetCommand for diagnostics and auditing

To be completed when I [don't] have the time...

The point is, the DataContext.GetCommand' function accepts an IQueryable parameter and returns more ADO.NET style command information.

I was looking for something like this a while ago whilest attempting to audit and inject into the SQL that Linq executes against SQL Server, eventually giving up to the feeling that I had failed miserably at proper google searching.

So this has some potential to that, I'll have to look into it further when I'm not under 'release' mentality.

Tuesday, February 16, 2010

WtvWatcher now in Google AutoComplete!!!

I know it's a small thing, but it's a small victory for such a meager effort on my part.

My lil' app is now a common enough keyword for Google to index it as an auto-complete search term. Joy.

Friday, January 8, 2010


After a bunch of debugging and diagnostics today to figure out why loading an XmlDocument resulted in a '(404) Requested resource not found', I found the solution was to replace any DTD declarations in my XHTML documents that point to 'https://...' urls with equivalent 'http://...' urls.

For some reason, HTTPS confuses the System.Xml.XmlDocument. If I had the time, I'd look into it further.

My hunch is that I'd have to customize the underlying WebRequest context to allow SSL traffic or dynamically load the certificate in code or something.

Since it was not neccessary that this DTD had to be transmitted over HTTPS (in fact I was doing some standard 'wrapping' code, then stripping out all but the BODY contents anyway), I just made a common website serve the content over HTTP port 80 with no SSL.

Thanks XHTML for making my life just a bit more arguous...