Like many people, I’ve been trying to find an easier way to archive all of my movies and TV shows to hard disk instead of DVD disc. My previous attempt at semi-automated DVD ripping used an autoloader and some scripts, but it still required a lot of intervention because I couldn’t find a way to correctly name and tag my movies automatically. I wished there was something like CDDB or FreeDB for DVDs that would lookup metadata from the disc in the drive.

Windows Media Player does a lookup of the DVD metadata so I figured it had to be possible.

Thankfully, I’ve stumbled across an awesome utility that will get the DVD’s discid in the format Microsoft uses for their media player and media centers. http://dvdid.cjkey.org.uk/

Time to fire up Wireshark (or Ethereal if you’ve been doing this forever) and see where that request is going. I stuck the disc in my DVD drive and opened Windows Media Player. A couple of HTTP 302 redirects later I’ve got a HTTP 200 and the current request and reply.

Looking at the discid and the URL, it looks like it strips out the vertical bar pipe character | that was used in previous versions.

Opening the request gives me the URL. It looks like it’s using “User-Agent: Windows-Media-Player/12.0.7601.18741”. To avoid being ridiculously obvious while abusing this api, it might be a good idea to spoof your useragent as well.

Response is an XML file. Looks really straight forward to parse.

The request URL is super straight forward too. Just replace everything after the CRC= with the output from dvdid, removing the | character.
http://metaservices.windowsmedia.com/pas_dvd_B/template/GetMDRDVDByCRC.xml?CRC=92918cc3b7506a7e

There doesn’t appear to be much of anything prevent this from being abused. It opened in a regular browser without issue. I used IE in this screenshot.

Continuing my current obsession with ripping DVDs is my perlification of jmos1277’s Automated DVD ripping script using DVDFab

I’m using DVDFab to rip since it doesn’t seem to get tripped up as often with weird copy protection crap.

Luckily, Win32::DriveInfo will give me the volume name of the DVD. If I get time, I’ll rewrite so it checks for duplicates and appends the date&time to get a unique filename for output. It’s a little annoying when 3 discs are all named “DVD_VIDEO”.

I’m not setting it as an autorun action for the DVD drive because I’m going to call it from the ripinator script.

ripdisc.pl

Subsonic is pretty awesome

I’ve kept notes for when I end up rebuilding this server.

Start by updating the system

sudo apt-get update
sudo apt-get upgrade

Install Oracle Java 7

sudo apt-get install python-software-properties
sudo apt-get update
sudo apt-get install oracle-java7-installer

Install Subsonic

http://www.subsonic.org/pages/installation.jsp#debian
sudo dpkg -i subsonic-4.7.deb
sudo service subsonic stop

Install musiccabinet

sudo apt-get install unzip
wget http://dilerium.se/musiccabinet/subsonic-installer-standalone.zip
unzip subsonic-installer-standalone.zip

sudo cp ~/subsonic-installer-standalone/subsonic-booter.jar /usr/share/subsonic/subsonic-booter-jar-with-dependencies.jar
sudo cp ~/subsonic-installer-standalonesubsonic-main.war /usr/share/subsonic/subsonic.war

Set a password for the “postgres” database role using the command:

sudo -u postgres psql postgres
\password postgres

Give your password when prompted. The password text will be hidden from the console for security purposes.
Type Control+D to exit the posgreSQL prompt.

https://help.ubuntu.com/community/PostgreSQL

Start Subsonic Service

sudo service subsonic start

I have to agree with the musiccabinet installation instructions for the last step “Start and log in to Subsonic as usual (normally via localhost:4040) and click the big “Configure MusicCabinet” header link. It should be pretty self-explanatory from there.” It really is self-explanatory.

I love iSub for streaming to my iPhone, DSub for streaming to my android tablet. I think “donating” to the project is a good idea, but if you don’t feel like it…
https://gist.github.com/andycandet/1611509 will enable subsonic after the “trial” has ended.

I was lookin to set up some digital signage, nothing too fancy, basically a scaled up digital picture frame with a few extra features. It’s also important that it works well stand-alone.

This is what I came up with

I got bored and started looking at adobe air. I made a clone of HakHouse air using the same chat as hakhouse.com. Since there’s already a HakHouse air app, I named mine HakHaus. Download HERE

How’d I do it? It turns out that getting started with Adobe Air is ridiculously simple. Just…

Install

I followed the “Hello World” example to get started. Pretty simple!

This is what I ended up with… if you wanna take a look
helloworld.zip

Project Requirements
At work we needed a time lapse camera of our new student center construction project. It needs to run continuously for entire length of construction project – approx 18 months. It should run mostly unattended.

Features
It captures 1 picture every 5 minutes. Storage capacity is cheap, so after using excel to make some projections, this worked out to be a reasonable rate for our resources. After some more research, I came to the conclusion that flash video has compatibility with most visitors while being relatively bandwidth efficient, but other codecs could be used. I originally got the idea from http://mydebian.blogdns.org/?p=261 but it wasn’t quite awesome enough, so I rewrote using Perl and expanded upon it.

I am using DWJukebox to run the jukebox I’m building. I liked the Chrome skin, but its labels were off. Here’s a quick fix. Put in the skins\bgrounds folder and that’s it.

So, here’s how it went down:

Since I have an older craptop, I have all the drivers to run Windows 98SE. Windows 9x is great for embedded applications like this. I remember from when I was scheming to build a MAME cabinet with nice arcade controls wired up to a disassembled keyboard. I saw a link on someone’s project page to DWJukebox. I thought it was pretty neat. A recent episode of Systm made me remember MAME and all the cool hackery people have done around it. Anyhoo, Friday evening boredom led to this project.

Here was the plan:

1. Install Windows 98SE
2. Install all required drivers
3. Map a drive to network share containing mp3’s
4. Install and configure DWJukebox
5. Replace explorer.exe with “C:\path\to\wincab.exe” in the shell= line of C:\windows\system.ini
6. Reboot

DWJukebox should now be the only thing running when the computer is turned on. Brilliantly simple! In theory…

Since nothing works as well as originally planned, I had a few snags.

Installing the OS and drivers and mapping network drive all worked perfectly.

Wincab failed to load. It could not initialize digital sound driver or something… I’ve had issues with sound cards before, so one of the first things I tried was reducing the hardware acceleration of the sound card. I adjusted it one increment at a time, and it only works on the no acceleration setting. So, finally, Wincab.exe worked pretty well until I tried to set it as the shell.

It failed with a message about it not finding jbdefptr.ptr. I had been cruising around the support forums for DWJukebox and many posts had portions of jbdebug.log attached, so I enabled logging, but it didn’t put the jbdebug.log in the program folder like I expected, it put it in the root of the C:\ drive!

Since this is a dedicated computer that I’m not going to be using for anything else, I just moved DWJukebox to the root of the C:\ drive, updated the C:\windows\system.ini and rebooted.

It’s ALIVE! Er… well, it boots into DWJukebox and plays mp3’s from a network share.

This is a script that deletes a lot of temporary internet files without any confirmation.

This removes each subdirectory within “content.ie5” within each user profile on a machine. It prints the current time, the directory to be removed, and removes the directory.
NOTE: This is just one long line