Humax 4tune

I recently bought a Humax 4tune (hms1000t). I’m rather liking in so far: 4 tuners, a reasonable UI.

I would like to be able to get it to do a bit more, so I’ve started investigating it. It shows the following ports as being open:

Port Scan has started…

Port Scanning host: 10.0.1.30

	 Open TCP Port: 	21     		ftp
	 Open TCP Port: 	139    		netbios-ssn
	 Open TCP Port: 	445    		microsoft-ds
	 Open TCP Port: 	9000   		cslistener
	 Open TCP Port: 	9251
	 Open TCP Port: 	9252
	 Open TCP Port: 	36666
	 Open TCP Port: 	36667
	 Open TCP Port: 	48629
	 Open TCP Port: 	50001
	 Open TCP Port: 	55200
	 Open TCP Port: 	56789
	 Open TCP Port: 	56790
	 Open TCP Port: 	58816
	 Open TCP Port: 	60001

Port Scan has completed…

Obviously, I’ve turned on the FTP and Samba services.

Port 9000 appears to be an RTSP service:

$ curl http://<ip-address>:9000
RTSP

Ports 9251 and 9252 respond with:

{"errorCode": 404, "errorDescription":"Specified WID not found"}

The latter requires HTTPS, but uses a certificate for the domain name htvdev.humaxtvportal.com. The humaxtvportal.com domain is registered.

Port 36666 responds with:

RTSP/1.0 200 OK
CSeq: (null)
Apple-Jack-Status: connected; type=analog

Port 50001 responds with an XML document:

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="urn:schemas-upnp-org:device-1-0" xmlns:dlna="urn:schemas-dlna-org:device-1-0" xmlns:hmx="urn:schemas-humax-co-kr:metadata-1-0"  >
  <specVersion>
    <major>1</major>
    <minor>0</minor>
  </specVersion>
  <device>
    <deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType>
    <hmx:X_HMXCAP>TSR,MULTIVALUE,RCUTYPE_LIME,HX_N_ALL_P</hmx:X_HMXCAP>
    <dlna:X_DLNACAP xmlns:dlna="urn:schemas-dlna-org:device-1-0"></dlna:X_DLNACAP>
    <dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMS-1.50</dlna:X_DLNADOC>
    <friendlyName>Lounge 10.0.1.30</friendlyName>
    <manufacturer>HUMAX</manufacturer>
    <manufacturerURL>www.humaxdigital.com</manufacturerURL>
    <modelDescription>HUMAX Set-Top Box OCTO2.0 Platform</modelDescription>
    <modelName>HMS1000T</modelName>
    <modelNumber>undefined</modelNumber>
    <modelURL>http://www.humaxdigital.com</modelURL>
    <serialNumber>None</serialNumber>
    <UDN>uuid:B38D5042-B86E-44F0-A758-F4F8BD6E3053</UDN>
    <icube:X_WOON_PAIRING xmlns:icube="urn:schemas-icube-co-kr:WoonDevice-1-0">hmx_base_08eb74e20b66</icube:X_WOON_PAIRING>
    <iconList>
      <icon>
        <mimetype>image/jpeg</mimetype>
        <width>48</width>
        <height>48</height>
        <depth>24</depth>
        <url>/icon/dms_48.jpg</url>
      </icon>
      <icon>
        <mimetype>image/png</mimetype>
        <width>48</width>
        <height>48</height>
        <depth>24</depth>
        <url>/icon/dms_48.png</url>
      </icon>
      <icon>
        <mimetype>image/jpeg</mimetype>
        <width>120</width>
        <height>120</height>
        <depth>24</depth>
        <url>/icon/dms_120.jpg</url>
      </icon>
      <icon>
        <mimetype>image/png</mimetype>
        <width>120</width>
        <height>120</height>
        <depth>24</depth>
        <url>/icon/dms_120.png</url>
      </icon>
    </iconList>
    <serviceList>
      <service>
        <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
        <SCPDURL>ConnectionManager/scpd.xml</SCPDURL>
        <controlURL>ConnectionManager/control</controlURL>
        <eventSubURL>ConnectionManager/event</eventSubURL>
      </service>
      <service>
        <serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:ContentDirectory</serviceId>
        <SCPDURL>ContentDirectory/scpd.xml</SCPDURL>
        <controlURL>ContentDirectory/control</controlURL>
        <eventSubURL>ContentDirectory/event</eventSubURL>
      </service>
    </serviceList>
  </device>
</root>

This appears to be DLNA-related.

Likewise with port 55200:

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
  <specVersion>
    <major>1</major>
    <minor>0</minor>
  </specVersion>
  <device>
    <dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMR-1.50</dlna:X_DLNADOC>
    <deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
    <friendlyName>Lounge</friendlyName>
    <manufacturer>HUMAX</manufacturer>
    <manufacturerURL>http://www.humaxdigital.com</manufacturerURL>
    <modelDescription>HUMAX Set-Top Box OCTO2.0 Platform</modelDescription>
    <modelName>HMS1000T</modelName>
    <modelNumber>undefined</modelNumber>
    <modelURL>http://www.humaxdigital.com</modelURL>
    <serialNumber>[redacted]</serialNumber>
    <UDN>uuid:B38D5042-B86E-44F0-A758-F4F8BD6E3053</UDN>
    <serviceList>
      <service>
        <serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
        <SCPDURL>AVTransport/scpd.xml</SCPDURL>
        <controlURL>AVTransport/control</controlURL>
        <eventSubURL>AVTransport/event</eventSubURL>
      </service>
      <service>
        <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
        <SCPDURL>ConnectionManager/scpd.xml</SCPDURL>
        <controlURL>ConnectionManager/control</controlURL>
        <eventSubURL>ConnectionManager/event</eventSubURL>
      </service>
      <service>
        <serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
        <SCPDURL>RenderingControl/scpd.xml</SCPDURL>
        <controlURL>RenderingControl/control</controlURL>
        <eventSubURL>RenderingControl/event</eventSubURL>
      </service>
    </serviceList>
  </device>
</root>

Port 56789 returns a 404: I’m guessing we can figure out a path that might work.

Port 56790 is a “DIAL SERVER”:

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="urn:schemas-upnp-org:device-1-0" xmlns:r="urn:restful-tv-org:schemas:upnp-dd">
  <specVersion>
    <major>1</major>
    <minor>0</minor>
  </specVersion>
  <device>
    <deviceType>urn:schemas-upnp-org:device:tvdevice:1</deviceType>
    <friendlyName>HMS1000T - DIAL SERVER:10.0.1.30</friendlyName>
    <manufacturer>HUMAX</manufacturer>
    <manufacturerURL>http://www.humaxdigital.com</manufacturerURL>
    <modelDescription>HUMAX Set-Top Box OCTO2.0 Platform</modelDescription>
    <modelName>HMS1000T</modelName>
    <modelNumber>undefined</modelNumber>
    <modelURL>http://www.humaxdigital.com</modelURL>
    <serialNumber>[redacted]</serialNumber>
    <UDN>uuid:B38D5042-B86E-44F0-A758-F4F8BD6E3053</UDN>
    <serviceList>
      <service>
        <serviceType>urn:dial-multiscreen-org:service:dial:1</serviceType>
        <serviceId>urn:dial-multiscreen-org:serviceId:dialControl</serviceId>
        <SCPDURL>dial/scpd.xml</SCPDURL>
        <controlURL/>
        <eventSubURL/>
      </service>
    </serviceList>
  </device>
</root>

Port 58816 rejects connections, but port 60001 is an interesting one:

$ telnet [address] 60001
Trying [address]...
Connected to [address].
Escape character is '^]'.
root:> help
* help [root:]
** registered process list
    corsair                     homma                       prism                       obama
    sama                        ipepg
** helpall : display all command set
root:> helpall
* help all
[corsair]
  [mem]
     printmem         :  print memory usage to outputfile
     memconf          :  configuration of printmem
     memcheck         :  check memory corruption - if corrupted, log in corrupted.log
     currsec          :  print the current second from the boot
  [RLIB]
     print_rsc        :  print Resource Info
  [OAPI]
     oapi_output_vid  :  oapi_output_video debug api call
     oapi_output_hdm  :  oapi_output_hdmi debug api call
[homma]
  [mem]
     printmem         :  print memory usage to outputfile
     memconf          :  configuration of printmem
     memcheck         :  check memory corruption - if corrupted, log in corrupted.log
     currsec          :  print the current second from the boot
  [RLIB]
     print_rsc        :  print Resource Info
[prism]
  [mem]
     printmem         :  print memory usage to outputfile
     memconf          :  configuration of printmem
     memcheck         :  check memory corruption - if corrupted, log in corrupted.log
     currsec          :  print the current second from the boot
  [ONDK]
     hello            :  help..
     vkcmd            :  vkcmd [mem/sem/task/timer]
     timerlist        :  timerlist
     gwmlist          :  gwmlist
  [OAPI]
     oapi_output_hdm  :  oapi_output_hdmi debug api call
[obama]
  [mem]
     printmem         :  print memory usage to outputfile
     memconf          :  configuration of printmem
     memcheck         :  check memory corruption - if corrupted, log in corrupted.log
     currsec          :  print the current second from the boot
  [pal_hdmi]
     hdcp_enable      :  HDCP on/off
     status           :  Print HDMI status.
     capa             :  Print HDMI TV capability.
     hdcp_event       :  Send HDCP event to appkit
     output           :  Enable/Disable HDMI output.
     avinfo           :  Set AVI infoframe.
  [OM]
     om_output_hdmi   :  om_output_hdmi debug api call
     om_output_video  :  om_output_video debug api call
  [PAL]
     pal_scl          :  pal scaler debug api call
     pal_scart        :  pal scart debug api call
     pal_out          :  pal out debug api call
     pal_video        :  pal video debug api call
     pal_audio        :  pal audio debug api call
  [RLIB]
     print_rsc        :  print Resource Info
  [SVC]
     svc_av           :  tv service /AV debug api call
     svc_out          :  svc out debug api call
[sama]
  [mem]
     printmem         :  print memory usage to outputfile
     memconf          :  configuration of printmem
     memcheck         :  check memory corruption - if corrupted, log in corrupted.log
     currsec          :  print the current second from the boot
  [RLIB]
     print_rsc        :  print Resource Info
  [SamaCmd]
     print_systime    :  print system time
     print_rpc        :  print SAMA rpc
     print_slot       :  print SAMA slot status
     print_sch        :  print SAMA Schedules
     print_timer      :  print SAMA Timer
     make_sch         :  make SAMA Schedule
     del_sch          :  delete SAMA Schedule
     make_ransch      :  make SAMA Schedule (TBR)
     del_sch_all      :  delete ALL SAMA Schedule
[ipepg]
  [mem]
     printmem         :  print memory usage to outputfile
     memconf          :  configuration of printmem
     memcheck         :  check memory corruption - if corrupted, log in corrupted.log
     currsec          :  print the current second from the boot
  [RLIB]
     print_rsc        :  print Resource Info
root:>

Oh my. More to come, I suspect…

Why Dexter is Awesome.

    Tags:
  • tv

The greatest TV show I have seen in a very long time is Dexter.

Channel 10 here in Australia decided to show the first season earlier this year, after Rove, but after watching it, and seeing that they don’t seem to be planning to “Fasttrack” it like some other, less worthy programs, I downloaded Season 2.

We finished watching the last episode last night.

There are so many reasons that this is a great show. I’ll try to be general enough not to create spoilers from season 2, but I can’t promise anything.

Firstly, Dexter breaks lots of rules. We are forced to identify with (and like) a person who is truly evil. Lets face it - Dexter kills people. I can’t even bring myself to accept killing people who have been legitimately convicted of murder, or even the Bali bombers. I’m not saying I support them in any way: I do not, but I also do not believe that any person or government has the right to take the lives of any other person. Under any circumstances. Even if they take more than 12 items through the 12 item or less isle at the supermarket. Yet, even after a couple of episodes, the likeableness of the monster that is Dexter grows on us. It’s not really his fault he is a monster - he just deals with it the only way he knows.

Secondly, the plot is well written, and the writers still manage to throw in heaps of surprises. When we first discover that Rudy is Dexter’s brother, Jaq and I both looked at one another, and it was a bit like the time you first saw “The Sixth Sense,” and played back all of the scenes with Bruce Willis and his wife, thinking about how well it was all done. Far too often the suspense is not hidden from the viewers, and it is based simply on the lack of knowledge of one or more characters. Indeed, this is the case with how Dexter is living amongst the police he works with, and we all know something about him, yet everyone else doesn’t.

Many of the characters in Dexter annoy me, or at least did to begin with. Debra is kind of funny looking, and a bit dopey at times. Doakes appears to be simplistic, and the only member of a whole department of police who even have any inkling that Dexter is strange. LaGuerta and most of the rest of the cops are single-dimensional, and it’s really only Angel and Misuka who have much of a character development arc. However, Paul, Rita and her family are all very “real,” and we can’t help but feel bad for them when things go against them. Even Paul. Having said that, I really like Doakes and Angel, and when the lives of these two men are put in danger, one can’t help be worried about their fate. There is another character in Season 2 who I really felt no connection with - but I won’t give away too much by saying their name. (wink).

The other thing I really respect about Dexter, over something like Heroes or Lost is the realisation that not every episode needs to end with a cliffhanger. Sometimes it does, which keeps you watching, but the reliance on “I have to know what comes next” wears thin. This was what turned me off Lost, since the cliffhanger what not really resolved. With Heroes, too, I stopped watching, because the complexity meant the only way to watch it was to watch it all in one go. Which I did for Season 1, and most of Season 2, but one does not always have time to watch 22 hours of television in one sitting. Dexter, on the other hand, was happy to resolve “everything” at the end of each season, and often have resolution at the end of episodes. This makes for a healthier viewing schedule, and less annoyance!

Without giving too much more away, the first season is about Dexter learning about his past, and how he deals with the Ice Truck killer. The implications of the story are that he has been killing for years, but the interesting times come when he is put under the pressure of someone else knowing about “his work”, and how he struggles to deal with this. The second season starts with his “corpus of work” being found, and how he deals with the fact the FBI are tracking him down. Both of these are real times in his life of upheaval, and the underlying increasing memory of his early childhood complicates how he deals with these. But what does that leave us to learn from Season 3? How can things possibly continue to ramp up?

I have faith they will manage to make Dexter Season 3 interesting…

Panasonic, your logic is full of fail.

Heard on a TV ad just now:

Because the Olympics are filmed using Panasonic video technology, then it makes sense that you watch them on a Panasonic Plasma or LCD TV.

Clearly, someone at Panasonic can’t figure out that tricky logic stuff.

“Because you shit food out of your arse, it only makes sense that to eat it you should shove it up there too!”

World's Fattest

One good thing about doing benchmarking of algorithms for homework is that I have time to watch TV while I wait for code to run.

And then I see things like the World’s Fattest Man, and World’s Heaviest Teenager.

How the fuck does someone get to 1000 pounds. And you can’t tell me that the teenager’s Mother isn’t to blame for him being so large.

I just couldn’t see the point of living if I could not move around.

Best. Ringtone. Ever

I’m not even going to tell you what it is. You must just listen to it. And laugh.

Tear-jerkiest TV. Ever.

    Tags:
  • tv

Channel 10 is pretty crap about how it plays House. They’ll advertise a new episode, and then play two old ones instead. It really pisses me off.

Last night, however, they played the season finale of House. It was truly excellent.

With Amber about to die, they decide to ‘wake her up’ so that Wilson can say goodbye to her. So, she is brought back to consciousness so that she can find out she is about to die.

I wouldn’t want this, or do this to my partner. Even if it means not being able to say goodbye. I think I’d rather never wake up. Jaq knows I love her, regardless of me having to say it.

If we had had a fight, then I was in a bus crash, that might make it different…

Unqualified Statistics

I hate statements that are unqualified, and therefore meaningless, with regard to statistics.

On Sunrise this morning, in the local news, they trotted out the chestnut:

“12% of people charged with drink-driving in the last two years were P-platers.”

This is totally meaningless without an indication of what percentage of the driving population are P-platers. What if it is higher than 12%? Then P-platers are actually more responsible than the rest of us…

Bah.

Review: miglia TVmini2/equinox The Tube

I lashed out yesterday, and bought something that I’ve been wanting for a while.

A USB TV Tuner stick.

I went for the miglia TVmini2, as it was (I thought) fairly inexpensive. I’m not sure I made the right decision right now.

For starters, it doesn’t actually come with the software. Sure, it’s got a CD with some demo software of other stuff, but the actual software (which is actually written by another company, called equinox), The Tube, needs to be downloaded from the internet before installation.

Which wouldn’t be too bad, but it’s a 104Mb download. Which meant I couldn’t (a) start playing with it as soon as I bought it, since I was in town, and not near a free wireless point, and (b) start playing with it as soon as I got home, since it took about 30 minutes to grab.

It gets worse, though. Even though the software really requires a dongle (the USB tuner is really just a dongle, after all), the manufacturers insist that you register the software, using the included key string. And it only works on one machine without de-registration, apparently. Which kind of sucks, because I’d like to have it moved between more than one machine.

The hardware itself seems okay. I haven’t been able to make it work with any other software yet. I’ve tried a couple of downloads, but they wouldn’t recognise it.

System Profiler reports the device as looking like:

TVMini2:

Version: 1.00

Bus Power (mA): 500

Speed: Up to 480 Mb/sec

Manufacturer: Miglia

Product ID: 0x0069

Serial Number: 0000000001

Vendor ID: 0x18f3

The software, on the other hand, seems to have some good features, but quite a few flaws.

The manufacturers have decided to make the application scriptable. This is a very good thing, as it will allow me to, for instance, set up Salling Clicker to be able to control it. Which will be very good. I’d also be able to make a rudimentary controller for network or local remote control. Which I may do: more on that later.

Another good feature is the simplicity of the software. The basic window is shown below.

You basically have a video section, with a controller on the right. This appears to be fixed. Although you can hide the main video area, they resize together. Which is a bad thing, if you like to resize the video to a small size while you write a review of something, for instance. Like I’d like to do now. It means that the controller becomes fairly unusable fairly quickly:

This is as small as the remote area gets. Any further resizing just shrinks the video display in that window. You can hide the Details area (this is shown above), but you can’t hide the record area.

You can hide the remote, too. This makes shrinking the video a bit more usable:

I anticipate being able to build another controller that floats, and can be used in conjunction with the view shown above. More below on some issues that might appear with this, when I discuss the AppleScript interface in a bit of detail.

The controller itself is mostly okay. The main/default view has a list of channels. This is customisable. You can scan for channels, and then delete the ones you don’t watch, and rename the ones you do. Scanning takes a long time, and is probably worth re-doing every now and then, just in case a new station has been added.

The bottom area of the controller is the recording pane. You can pause live TV, record the current stream, and if you have been watching a channel for a little while, skip back through the already viewed stuff. I did a quick test where I watched for a while, then went back to try to record a section from the past. The program developed a spinning beach ball, and I had to Force Quit. I’ll continue to test it again later, as this is a nice feature.

There’s also a button link to their other software, MediaCentral, which totes itself as a total replacement for FrontRow. And, I’ve had a bit of a look at it. It looks pretty good, actually. May be worth investing in, and using this on the Mac Mini when I finally get it, and set it up as my Media Centre. (Typing Central reminds me to just let all of the yanks out there know the correct way to spell centre. Yank is a slang term Australians use to refer to Americans).

If you record live TV, it stores it in the recordings pane.

You can then export from here, in order to be able to view on another device, or in another program. It exports raw DV fairly quickly (almost real time, I think, perhaps even faster), but as expected exporting to m4v takes a bit longer. It appears that these are the only formats it will export: iPod, iPhone and AppleTV are all m4v, and iMovie is DV. I’m still going to record some stuff and see what the quality is like. Gotta wait for some decent content first.

Which brings me nicely to the next topic. Electronic Program Guide and Scheduled Recording. The interface is, again, fairly simple. All programs appear in the one list, there doesn’t appear to be a method of filtering so sort by channels. You can search or filter by title and description. To schedule a recording, simply click the black dot next to the program time.

Clicking on a title will show the details about that program. This is obtained from the digital TV data stream, although it is possible to add in an external TV guide, using the open XMLTV standard. Unfortunately, there doesn’t seem to be a way to subscribe to an XML feed. EPG via RSS, that would be awesome.

If you click on the “Show Recordings” button, it will filter to only display the programs you have scheduled to record. You can then de-select them by re-clicking the red dot. Fairly easy to understand. It also seems to have some smarts about overlapping programs, and will display a different coloured dot when they clash.

Okay, feature list is pretty much done. What doesn’t it do, or what does it do badly?

AppleScript support.

You can do quite a few things with AppleScript, such as pause, play, start recording and so on. It appears that you cannot get decent data from the EPG, for instance. So I can’t build a fully replacement EPG in another application, unless I access the data directly from the file. This file is stored as an SQLite database. So I should be able to grep data out of this using the relevant tools. This seems to be an oversight, since you can schedule recordings, and access the EPG data, but I can’t figure out how to get meaningful data from the EPG. This would be a necessity for a proper Salling Clicker interface, that allowed me to just run the program in full-screen mode and only use the phone for the remote, doing all of the programming with that instead.

You can also export from AppleScript. Not sure if you can choose to export DV, which I would probably want to do. So I can post-process the data and remove advertisements, for instance. But I cannot find a way to choose a channel by channel name. Which would be useful for a remote program, either on phone or computer.

Possibly the biggest annoyance: in every instance I have seen, this application is called The Tube. But to access it in AppleScript, you need to use TheTube. Why do this? You can have spaces in application names in AppleScript and it works fine.

Data file formats.

The channel data is stored as an XML/plist file. Which is a good thing. You can hand-tweak this file, which is much faster than, and less error-prone than deleting them inside the software. Especially since right-clicking to delete doesn’t actually select the channel, so the previously selected channel gets deleted instead.

Scheduled programs are also plist files. You could create these files with another piece of software, and just rely on The Tube to record them. I haven’t tried creating a file and seeing if it automatically records, or whether you need to start/re-start The Tube to get it to notice. Still on the TODO list.

The video data is stored in a package. There are a couple of TIFFs, for preview purposes, but these aren’t always the correct aspect ration. In fact, since most of my Digital TV seems to be broadcast in 16:9, with black bars on the sides, this is always the wrong aspect ratio as these TIFFs are all 4:3.

Bonus points if you can name the song and artist this preview is from!

Inside the package is a plist file with data about the recording. But the actual data is stored in two files, Media.tvi and Media.tvm. I’m still trying to find out what file format these are - VLC doesn’t seem to recognise them, although I suspect they are a standard file format, just hidden. I’d like to be able to get this data without necessarily having to use The Tube. According to one website, this data is just the raw MPEG stream. Changing the file extension to .mpg or .mpeg doesn’t allow for playback Might need more research.

The new Dr Who.

I didn’t really get into the new series(es?) or Dr Who. I used to watch it as a kid, since I only had two TV channels, one of which was the ABC, and this, along with The Goodies and Monkey! were staples of my afternoon/early evening viewing. Then, later on, it was time for The A Team (which, along with Monkey!, I wasn’t really allowed to watch), and the original Battlestar Galactica, Buck Rogers and the like.

So, I wasn’t really that interested in watching Dr Who. Except apparently there is nothing else on any of the other stations at the time it is on, which is a Saturday early evening. So, in the last month, I’ve been tuning in. It just shows you how I don’t have a social life, too.

And the episode aired last night was fantastic. Statues that are really Quantum Assassins, that turn to stone when any living creature looks at them, so they look like statues. But if you look away, then they can sneak up on you, and kill you.

And the time travel aspect was cool. Closed loops of time, effect predating time. Timey-wimey stuff.

Looks like my Saturday nights are now booked. At least 7:30 until 8:15 p.m., anyway.

Heroes

I saw the first episode of Heroes when it was first televised here in Australia, and I thought it was quite cool, but I missed the remainder of them. And then I got access to all of the first season (or at least the first 15-odd episodes), and sat down and started watching. I love it. This is a program that really shines when you sit down and watch it in a big block. I would, I’m sure, be very frustrated if I had to wait a full week after the TO BE CONTINUED… that ends each episode. But being able to follow the characters immediately makes it a very enjoyable experience.