TV Guides: mine, mine, mine!

Joshua Gans asks: Who owns TV guide data? Apparently Packer is suing the pants off ICE-TV who provide a TV guide service to users of MythTV, amongst others. Gans reckons its a defensive move to protect Channel Nine’s ad broadcast revenue.

I dunno, it seems to me that this is going to fall on its head. Having a TV listing is copyrighted? Perhaps a particular one is, but recreating the simple facts of one, I don’t see how that violates copyright.

Vista and Visual Studio

Which Microsoft development environments will be supported in Windows Vista?

Not the ones you might think.

  • SUPPORTED: VB 6 — ah, my old friend
  • NOT SUPPORTED: Visual Studio .Net 2002
  • NOT SUPPORTED: Visual Studio .Net 2003
  • SUPPORTED, BUT WITH “COMPATIBILITY ISSUES”: Visual Studio .Net 2005

Good grief.

So, forcing the upgrade path for those older .Net versions? Or is it that they just can’t be bothered making it all work?

Meanwhile, Australian pricing for Vista is out. $751 for Vista Ultimate?! Yowch. Mind you, who really pays for a full version of Windows? Most people would be getting upgrades from previous versions, or OEM copies. Like Office, the full pricing is always exhorbitant.

Celebrity branding

Quick! What’s Scoble’s new company called? Something to do with podcasts. Podcast.net? Podnet.com? Oh, PodTech, that’s right.

Now, what’s interesting is his new ScobleShow which is a bit like the Channel 9 Scoble started up at Microsoft: video blogging things of interest. (Did he start it? He certainly seems to have been in at the start).

ScobleShow is a bit broader, of course.

What’s got me interested is the branding. ScobleShow. Obviously PodTech want to make the most of their investment in Scoble’s geek celebrity status, and they’re doing so with this name.

But what happens when Scoble eventually leaves? Will the brand go with him? Or will it die? Or will someone else try to take it over? Will PodTech have built up their branding and audience enough in the mean time that it doesn’t matter?

The 3210 is dead, long live the 5110

Last week, my Nokia 5110 started acting funny – switching itself off, and so forth. The backup phone, a Nokia 3210 was pressed into service. Gotta love those old Nokias, charger compatability is a lovely thing, even if the battery form-factors aren’t the same.

Anyway, I figured out that the dodgy LiI battery I’d upgraded the 5110 with was the cause of the problems, what with the housing seperating into two pieces and all. I figured I’d get around to fixing it and then the 5110 would then be the backup phone.

Owen proceeded to prove that the 3210 wasn’t as well made as the 5110. The 5110 has suffered hundreds of falls during its service life, due to a clumsy owner. The 3210 was destroyed by a 12 month old child dropping it in the carpark of Bunnings. LCD screen cracked, as well as the protective plastic over the screen. And yes, it was in a protective leatherette case.

With zero operational mobile phones left, I discovered I could repair the dodgy battery for a 5110 by filling it with PVA glue and clamping it for 36 hours.

As good as new. But now I don’t have a spare phone.

Movie Maker’s downfall

I put together a 15 minute compilation video in Windows Movie Maker. Now, WMM is okay… it’s free with XP and does the job of a basic movie editor quite well. Well, as long as you’re happy with it only spitting out WMV. Which I’m not overjoyed about.

WMM’s big problem is it doesn’t like MPEGs. Oh sure, it’ll work with them, but it doesn’t like them. I can’t find any other explanation for how slow it gets when dealing with them. Once you have a few MPEGs in your project, you’ll find it takes an agonisingly long time to re-open the project. Seriously, by the time I got finished I had 15 minute long project with a couple of dozen MPEG-1 clips, and it literally took two hours of “checking project files” before I could do anything.

I thought it was some kind of hideous mistake the first time it happened, and cancelled and rebooted the machine. But it wasn’t. I ended up doing some research (on another PC, since that one was busy burning up CPU and disk cycles) and the word on the forums is that it just doesn’t like MPEGs. Throw a bunch of AVI or WMV videos at it, and it’s fine.

Well, I say fine, but in fact WMM regularly freezes up. My kids describe it as “going out to lunch” and it’s a source of constant frustration.

As it happens I’ve just bought Pinnacle Studio Plus version 10 ($189 via Harris Technology, and widely available elsewhere), something of an upgrade from both WMM and the Pinnacle Studio Quickstart 9 I got with the TV tuner card I just bought. Australian purchases of Studio Plus (and a couple of other Pinnacle products) will get a bonus USB TV tuner if they buy before the end of the year. (Yes, this is a bummer for me. Maybe I’ll put one of them on eBay.) So hopefully the next video project won’t be subject to WMM’s vagaries.

Other lessons: Google Video suggests 640 x 480 is the ideal resolution for uploads. But this resulted in a file close to 100Mb long, which not only took ages to upload, but was also sluggish on playback. Eventually I downsized it to 320×240, and it’s much faster in both cases, though quite pixellated. The default Google player (embedded in a web page) is actually 400×300, though I’m not sure this is actually supported in an AVI or WMV file, since Tmpgenc refused to resize to that, saying that 300 isn’t divisible by 16.

More on Studio Plus when I actually get around to installing and using it.

QueryInterface for interface xxx.yyy failed

My .NET web service – which wraps some legacy COM objects – wasn’t working. Development under VS2003 using .NET 1.1 worked fine in my dev environment, but in test env it just kept whinging:

InvalidCastException: QueryInterface for interface xxx.yyy failed

That’s a pretty basic failure – it couldn’t even obtain a xxx.yyy interface from the COM object. I figured it was a IIS security problem: a .NET desktop app using the same set of COM libraries worked fine.

The thing was, when I set the user account to operate annoymous web users under to local Administrator, it still didn’t help. Perhaps, I thought, this isn’t a permissions problem. Web users are now, after all, Gods.

Perhaps, Glen suggested, I was running .NET 2.0 and .NET 1.1 simultaneously?

No.

It turns out missing part was the

<identity impersonate="true" />

line out of the web.config file in the directory in which my webservice lived. Also, the lack of a web.config file in the directory in which my webservice lived caused a little bit of a problem. I didn’t realise that at the time, but found out that the impersonate setting can also go in one’s machine.config file also – but that has global implications. So I stepped back to putting it in my web service’s own web.config file.

Why does the Web Setup Project fail to include important little files, like my .asmx and web.config files? What is the point in having a wizard that just makes a installer that doesn’t install a working system? And the dependancies tree! God, just let me specify – or figure it out for yourself – the order in which to register the COM objects.

But guess what? All of that is unnecessary, if only your Installer derieved MyEventLogInstaller is set up thusly:

	[RunInstallerAttribute(true)]
	public class MyEventLogInstaller : Installer
	{
		private EventLogInstaller myEventLogInstaller;
		public MyEventLogInstaller()
		{
			//Create Instance of EventLogInstaller
			myEventLogInstaller = new EventLogInstaller();
			// Set the Source of Event Log, to be created.
			myEventLogInstaller.Source = "Josh's Web Service";
			// Set the Log that source is created in
			myEventLogInstaller.Log = "Application";
			// Add myEventLogInstaller to the Installers Collection.
			Installers.Add(myEventLogInstaller);
		}
	}


– with the RunInstallerAttribute being the super important part. Or perhaps it should read RunInstaller. But don’t worry, neither of them actually cause the installer to run them. As such, all you need do is issue the command

installutil "MyStupidWebService.dll"

after the installation program is done and you’ll be cooking with gas.

Simple, huh? No need for that nasty web.config file after all! Especially with it impersonating a dud security context.

Oh! And remember to issue a regsvr32 comcomponent.dll command also!

A dead giveaway that you haven’t run installutil is if you get an exception like this:

System.TypeInitializationException: The type initializer for "MyStupidWebService.Global" threw an exception. ---> 
System.InvalidOperationException: Cannot open log for source {0}. You may not have write access. ---> 
System.ComponentModel.Win32Exception: Access is denied
   --- End of inner exception stack trace ---
   at System.Diagnostics.EventLog.OpenForWrite()
   at System.Diagnostics.EventLog.WriteEvent(Int32 eventID, Int16 category, EventLogEntryType type, String[] strings, Byte[] rawData)
   at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
   at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category)
   at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID)
   at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type)


because installutil will create an entry for Event Logging, if you’ve developed the appropriate installer. And because the person running installutil has decent privileges, it will actually work, as opposed to your web service trying to do it when it’s running in a securely locked down account.

Broken links

A major web site of my acquaintance just got a makeover.

I’m not going to deny it was due for a revamp. Or that (eventually, when it’s all working) the new functionality will be worthwhile.

But apart from the list of data errors (which is as long as your arm), and the functionality they should be providing in this day and age but aren’t, they’ve also changed every single page address, apart from the home page, and so they’re writing to people who link to them to ask them to change hyperlinks.

I’m really trying not to lose my temper and say to them:

“Well WTF did you let your programmers change your URLs in the first place?”

and

“WTF don’t you get your programmers to set up page forwarding so all the old links work?”

I mean really… it’s like changing all the internal phone numbers and telling everybody to ring the switchboard.

Oh, I should mention that this is a public transport information site, with timetables… they have partially-numeric URLs that bear no resemblance to the route numbers.

C# module entry point

I’ve made a C# Web Service. Now I need a deployment project for my Web Service. After installing, it turns out that my Web Service needs to set the security on a registry key to allow the ASPNET user Full Control. Fine. I’ll need some sort of hand-written code to do that, because security is something the installer doesn’t cover. Stumbling around the help and web, I find I need to View | Editor | Custom Actions to create a Custom Action (right-click On the Install event/action, select Primary Output from JoshsPrimaryOutput; on the properties of this new Custom Action set InstallerClass to false and set EntryPoint to JoshsEntryPointFunction). Build.

I get the error:

Unspecified module entry point for custom action ‘<name>’ in JoshsPrimaryOutput.dll

Which the help… helpfully tells me to fix it I need to

…specify a valid entry point within the DLL.

Fine, makes sense. I’m not stoopid, I’ve been a C++/Windows programmer for a very long time. I know DLLs, I know entry points, this holds no fear for me. C# has DLLimport. It seems to be missing DLLexport. I’ve just spent several hours searching online help and the web for an answer, so now I turn to you, our esteemed readers.

How do I specify a module entry point in C#?