Friday, December 24, 2010

Checking-In at GetGlue with MythTV

GetGlue is a leading social network for entertainment. Fans use GetGlue apps to check-in while consuming entertainment to share with friends. I wrote a Python script that enables MythTV to automatically check-in to GetGlue with the recording you are watching.

GetGlue provides an application programming interface (API) that uses OAuth for authorization.

NOTE/RANT: I don't think I'm supposed to share my oAuth developer keys. I don't know how the architects of oAuth expected us to deliver scripts. I guess they assume everything would be web based. Until someone tells me different I'm not going to release my oAuth keys. So, I guess you'll need to apply for developer keys and plug them in to my python script.
To obtain a GetGlue developer key, please e-mail with your name, company name, app name, and OAuth callback (not needed for this), as well as a short description of the application.

Below are the high level steps to get this working and its accompanying video tutorial. These steps were performed on an Ubuntu 10.04 MythTV frontend PC.

  • Download my python script.
  • Apply and receive developer keys from emailing a request to See rant above.
  • Copy and paste your oAuth developer keys in my script variables CONSUMER_KEY and CONSUMER_SECRET.
  • Install Python Setup tools - sudo apt-get install python-setuptools
  • Download and install OAuth library. - sudo python
  • Authorize the app one time in a terminal - python testtest
  • Copy the OAuth token file in to the mythtv user's directory.  sudo cp ~/.MythTVGetGlueCheckin /home/mythtv/.
  • Change owner to mythtv user. sudo chown mythtv /home/mythtv/.MythTVGetGlueCheckin
  • Change group to mythtv user. sudo chgrp mythtv /home/mythtv/.MythTVGetGlueCheckin
  • Set MythTV system event - Playback started
  • Watch some TV recordings and MythTV will automatically check-in to GetGlue. See my GetGlue profile for an example.
  • Saturday, December 18, 2010

    SunRay vs Chrome OS Notebook

    I'm just thinking out loud. Does a Chrome OS like device have a place in the enterprise?

    I received a free Google Chrome OS Notebook December 14, 2010. I like it. It has provoked a comparison of Chrome OS like devices to my employer's SunRay thin client deployment that I helped put together. The infrastructure behind our SunRay deployment is pretty heavy. There are Solaris SunRay server blades, Windows terminal server blades, Active Directory blades, file server blades, storage area network, SunRay thin clients, keyboards, mice, etc... Could we replaced all that with Chrome OS Notebook like devices? We already use Google Apps for email, instant messaging, documents, spreadsheets, and wiki. We have an evolving Intranet. There are several employees working exclusively in the browser now. If we continue to move everything to our Intranet and find a remote desktop solution for the remaining applications, we are there. Our SunRay environment shines in security, mobility, and zero client maintenance. Flash and video playback on the SunRay is painful. A Chrome OS device competes with the SunRay's security and has zero client maintenance. SunRay has a slight edge in the session mobility category. We can take our SunRay card and move to any station picking up right were we left off. A Chrome OS device beats the SunRay on video playback.

    What do you think the possibilities are of a Chrome OS like device working its way in to your enterprise?

    Wednesday, November 24, 2010

    Latest Is Not Always The Greatest

    Sometimes the latest technology is not the greatest. Below is a picture of a fluorescent light bulb that was minutes away from catching on fire. Had I left the house with this light powered on I would have lost all my belongings to a fire.

    Sunday, October 31, 2010

    Sending Countdown Messages

    If you following me on you'll occasionally see some of my daily count down messages. For example right now I'm running a daily count down message to the Charleston Bar Camp. Here is my message from Sunday October 31, 2010: "13 days until BarCamp Charleston Sat Nov 13 2010 #barcampchs". I am also running a reverse countdown since my Nexus One mobile phone was sent off to repair. Here is that message as of October 31, 2010: "5 days since I sent my !NexusOne to @htc for repair. What is taking so long? !Android".

    I send these automated microblog messages by adding cron job entries that call a python script. I pass the python script two parameters the reference date in yyyymmdd format and the message to be sent.

    Below is the cron job entries in my system as of this writing:


    # m h  dom mon dow   command
    1       0       *       *       *       python /home/htplainf/Ubuntu\ One/scripts/ 20101113 "BarCamp Charleston Sat Nov 13 2010 #barcampchs"
    1       0       *       *       *       python /home/htplainf/Ubuntu\ One/scripts/ 20101026 'I sent my !NexusOne to @htc for repair. What is taking so long? !Android'
    Below is the python script I wrote to send these countdown messages.

    Python script

    # Python script to send a countdown message to 
    # Pass a date in yyyymmdd format along with some text for your message. 
    # Example: python 20100611 "SouthEast LinuxFest"
    import sys
    import httplib, urllib
    from datetime import datetime, date, time
    import base64
    username = "YourUserNameGoesHere"
    password = "YourSecretPasswordGoesHere"
    date_format = "%Y%m%d"
    today =
    targetDate = datetime.strptime(sys.argv[1], date_format)
    delta = targetDate - today
    days = delta.days + 1
    if days == -1: 
     verb = " day since " 
    elif days == 1: 
     verb = " day until " 
    elif days < 0: 
     verb = " days since " 
    else: verb = " days until "
    if days == 0:
     message = sys.argv[2] + " is today"
    else: message = str(abs(days)) + verb + sys.argv[2]
    params = urllib.urlencode({'status': message})
    base64string = base64.encodestring('%s:%s' % (username, password))[:-1]
    authorizationString = "Basic " + base64string
    headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain", "Authorization" : authorizationString}
    connection = httplib.HTTPConnection("")
    connection.request("POST", "/api/statuses/update.xml", params, headers)
    response = connection.getresponse()
    print response.status, response.reason 

    Thursday, October 28, 2010

    NETGEAR Powerline Ethernet Adapter vs CAT5e

    I compared local area network bandwidth between the NETGEAR Powerline Ethernet Adapter model XAVB101 and CAT5e with gigabit Ethernet switches. I conducted 6 tests, 3 on each transmission medium. I used the commonly used network testing tool iperf. Bottom line: Pull CAT5e wire or better when feasible.

    Below is a table of the bandwidth results.

    CAT5ePowerline Ethernet
    637 Mbits/sec73.4 Mbits/sec
    629 Mbits/sec74.0 Mbits/sec
    612 Mbits/sec74.5 Mbits/sec

    My tests were conducted to favor the Powerline Ethernet adapter. I placed the two Powerline Ethernet adapters within 8 feet of each other in the same room. No extension cords were involved. The CAT5e circuit was a couple of hundred feet and include 2 Ethernet switches between the computers.

    Here is the raw output from the iperf command:
    Ethernet Over Power
    htplainf@fe0:~$ iperf -c
    Client connecting to, TCP port 5001
    TCP window size: 16.0 KByte (default)
    [  3] local port 34985 connected with port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.2 sec  88.9 MBytes  73.4 Mbits/sec
    htplainf@fe0:~$ iperf -c
    Client connecting to, TCP port 5001
    TCP window size: 16.0 KByte (default)
    [  3] local port 34986 connected with port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.1 sec  89.0 MBytes  74.0 Mbits/sec
    htplainf@fe0:~$ iperf -c
    Client connecting to, TCP port 5001
    TCP window size: 16.0 KByte (default)
    [  3] local port 34987 connected with port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.1 sec  90.2 MBytes  74.5 Mbits/sec
    htplainf@fe0:~$ iperf -c
    Client connecting to, TCP port 5001
    TCP window size: 16.0 KByte (default)
    [  3] local port 41387 connected with port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec    760 MBytes    637 Mbits/sec
    htplainf@fe0:~$ iperf -c
    Client connecting to, TCP port 5001
    TCP window size: 16.0 KByte (default)
    [  3] local port 41388 connected with port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec    750 MBytes    629 Mbits/sec
    htplainf@fe0:~$ iperf -c
    Client connecting to, TCP port 5001
    TCP window size: 16.0 KByte (default)
    [  3] local port 41469 connected with port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec    729 MBytes    612 Mbits/sec

    Here are the specs on the Ethernet adapter in the client computer. Notice it has negotiated at a gig with the Ethernet switch.

    htplainf@fe0:~$ sudo ethtool eth0
    [sudo] password for htplainf: 
    Settings for eth0:
     Supported ports: [ MII ]
     Supported link modes:   10baseT/Half 10baseT/Full 
                             100baseT/Half 100baseT/Full 
     Supports auto-negotiation: Yes
     Advertised link modes:  10baseT/Half 10baseT/Full 
                             100baseT/Half 100baseT/Full 
     Advertised pause frame use: No
     Advertised auto-negotiation: Yes
     Link partner advertised link modes:  Not reported
     Link partner advertised pause frame use: No
     Link partner advertised auto-negotiation: No
     Speed: 1000Mb/s
     Duplex: Full
     Port: MII
     PHYAD: 3
     Transceiver: external
     Auto-negotiation: on
     Supports Wake-on: g
     Wake-on: g
     Link detected: yes

    Here are the specs on the Ethernet adapter in the client computer when connected to the Powerline adapter. Notice it has negotiated at 100Mb/s.

    htplainf@fe0:~$ sudo ethtool eth0
    Settings for eth0:
     Supported ports: [ MII ]
     Supported link modes:   10baseT/Half 10baseT/Full 
                             100baseT/Half 100baseT/Full 
     Supports auto-negotiation: Yes
     Advertised link modes:  10baseT/Half 10baseT/Full 
                             100baseT/Half 100baseT/Full 
     Advertised pause frame use: No
     Advertised auto-negotiation: Yes
     Link partner advertised link modes:  Not reported
     Link partner advertised pause frame use: No
     Link partner advertised auto-negotiation: No
     Speed: 100Mb/s
     Duplex: Full
     Port: MII
     PHYAD: 3
     Transceiver: external
     Auto-negotiation: on
     Supports Wake-on: g
     Wake-on: g
     Link detected: yes

    Saturday, October 23, 2010

    Android Harmony Remote with GoogleTV on a Nexus One

    Below are screenshots of the Harmony Remote on an Android Nexus one. I'm using the app with a Logitech Revue GoogleTV set-top box. The app works great.

    Thursday, October 21, 2010

    Terminator at my Fingertips

    I am big on keyboard shortcuts. For a couple of years now I've set Ctrl-Shift-o to start gnome-terminal. This works great. A little too great. I end up with a dozen gnome-terminal windows scattered across 4 workspaces. I decided to stop the madness. I installed Terminator and wrote the small bash script below. The script below will search for a Terminator session and if found bring it in to focus. If Terminator is not running it will start it.

    if (wmctrl -l | grep Terminator); 
     wmctrl -a Terminator; 
     terminator -T Terminator; 

    If you are using Ubuntu like me you can use the following command to install Terminator and wmctrl.

    sudo apt-get install terminator wmctrl

    If you want to try this copy and paste the script to a file and make the file executable. Then use gconf-editor to set your keyboard shortcut to your script.

    Wednesday, October 20, 2010

    Identica Map - Real-Time Microblog Posts on a Google Map - Video Demo

    Below is a YouTube video demonstration of This web app displays microblogging messages from in real-time on a Google Map. The frequency of messages are sped-up in the video for dramatic affect. The music is Fat Chance Lester's "The Plot To Save The World". Video with created with a combination of ffmpeg for screen capture and Blender for video editing on Ubuntu 10.04 Linux operating system.

    Sunday, October 17, 2010 User Images

    I created a Java servlet to create PNG images of users. You can use this utility on your website or gmail signature. The servlet looks up the user via the API. It uses the user's preferred background and foreground colors. The PNG image includes the user's name, avatar, latest notice and notice date.

    The URL is:

    Here are a few examples:


    I created This web app displays the public timeline on a Google Map with live updates.  The app is GWT based. The backend is running on Tomcat 6 in a Linode VPS. In a separate thread, the dents from are received and stored in a MySQL table. The GWT app queries the database periodically for new dents with location information and displays them on the map.

    Saturday, October 9, 2010 Followers App -

    The web interface requires you scroll through your followers in increments of 20 per page. I wanted a way to display them all on one page. I wrote to do just that. It uses OAuth to gain access to your followers feed without asking for your credentials. The app is a GWT app running on Tomcat. It is hosted on a Linode virtual private server.

    Apache Directive to Prevent Cache of GWT nocache.js File

    <LocationMatch (.*)nocache\.js$>
       Header Set Cache-Control "max-age=0, no-store"

    The Apache directive above will prevent the GWT nocache.js file from being cached. This is critical when you deploy new versions of your GWT apps. If the user does not get the latest version of your app, communication with the server will fail.

    Saturday, September 18, 2010

    MediaInfo Command

    I demoed MythTV at the Charleston, SC Linux Users Group meeting September 18, 2010. One of the questions was how big are the files. MythTV doesn't show file sizes any where that I can see. You can run ls -l on the recordings directory but that is no fun. So, I combined some MySQL tables with the mediainfo command and created a spreadsheet. The mediainfo command provides all kind of information. See an example in the screen shot below.

    Friday, September 17, 2010

    Software Freedom Day September 18, 2010

    Software Freedom Day (SFD) is a celebration of free and open source software all over the world. Each team has their own separate event with separate organizers. CSCLUG's third year as a participant in the world wide Software Freedom day (!

    Place: West Ashley Muddy Waters Coffee House
    Time: 1pm
    Date: 2010-09-18

    Drop by and visit. We will have the following activities and more.

    *Announcement of Summer pyGames winners
    *Check out an Android Dev Setup
    *Myth TV Setup
    *Demos of distributions, software programs, and more!

    Map for West Ashley Muddy Waters Coffee House

    View Larger Map

    Saturday, September 11, 2010

    Watch a Folder and Upload New Files To Picasa

    The bash script below will watch the PicasaWeb folder in your home directory for new files. When a new image is dropped in the folder it is uploaded to Picasa. After the upload is complete the script launches your browser to the direct URL of the uploaded photo. If you want, copy the URL in an email, dent, or tweet.

    Updated Dec 4, 2010 - Now checks Google CL version so it will work in Ubuntu 11.04.

    # Blog post:
    # 1. Watch ~/PicasaWeb folder. 
    # 2. Upload new file to Picasa using Google CLI. 
    # 3. Launch the browser to the direct Picasa URL. 
    googleVersion=$(google --version)
    echo $googleVersion
    while [ 1 ]
      echo 'Watching directory: '$WATCHED_DIR 'for new files'
      while file=$(inotifywait -q -e create "$WATCHED_DIR" --format "%f")
        echo 'New file to upload to PicasaWeb:' $file
        notify-send -i "gtk-go-up" "Picasa Web Monitor" "Uploading image $file"
        mythtvosd --template=alert --alert_text="Uploading image $file"
        google picasa post --title "Drop Box" "$WATCHED_DIR/$file"
        if [ "$googleVersion" = "google 0.9.5" ]; then
         url=$(google picasa list url-direct --title "Drop Box" | grep "$file" | sed -e "s/$file\,//g")
         url=$(google picasa list --fields url-direct --title "Drop Box" | grep "$file" | sed -e "s/$file\,//g")
        echo 'Picasa url: ' $url
        notify-send -i "gtk-home" "Picasa Web Monitor" "Image uploaded. Starting Gwibber widget."
        mythtvosd --template=alert --alert_text="Image uploaded. Starting Gwibber widget."
        python ~/Ubuntu\ One/scripts/ $url

    Prerequisites and Instructions
    • You should be running Linux. I am using Ubuntu
    • You need the command inotifywait. On Ubuntu I installed it via sudo apt-get install inotify-tools
    • You must have a Picasa account
    • Install libnotify-bin for the notify-send command
    • Install Google CLI
    • Create a Picasa web folder called "Drop Box"
    • Create "PicasaWeb" folder in your home directory mkdir ~/PicasaWeb
    • Copy and paste my bash script above into a file. I named mine
    • Make executable chmod +x
    • Start the bash script ./
    • Create some images and save them to the ~/PicasaWeb folder
    • Avoid using spaces and special characters in your picture file names. The Picasa Web direct URL will be encoded and won't match your file name. The grep statement will fail to show you the direct URL.

    Let me know if you find any bugs in this script or if there is a better way to do it.

    Sunday, August 29, 2010

    Wake on LAN with 3 MythTV Frontends

    I have 3 MythTV frontends scattered throughout my house. I put together a script using wakeonlan and ssh to power the frontends on and off. Below is a video demonstration.

    Thursday, July 29, 2010

    Logitech diNovo Mini Keyboard Controlling MythTV, Boxee, and Ubuntu Desktop

    I've been trying out keyboards to control my home theater PCs. I think I've found the near perfect keyboard. My new favorite is the Logitech diNovo Mini. The only negatives are it doesn't have the F1, F2, F3, etc keys. I would prefer to have a dedicated key for the Esc (escape) instead of having to use a function key combination. This is a great keyboard. Check out my demonstration video below.

    PS. I used the YouTube editor to splice the intro I made in Blender with the main content.

    Tuesday, June 22, 2010

    Video Streaming to Android Nexus One using VLC

    After reading a discussion on the MythTV Cast forum I explored VLC video steaming to my Android Nexus One. After some searching I found this helpful page. From that page I got VLC video streaming to my Nexus One working by doing the following:

    I created a html page on my MythTV server called stream.html with the following contents:

    VLC Streaming to Nexus One
    <h1>VLC Streaming to Nexus One</h1>
    <a href="rtsp://">Stream</a>

    I started an http server on my MythTV server using python -m SimpleHTTPServer. I started this command in the same directory I saved the stream.html file in.

    I started the VLC streaming with the following single line command:

    vlc Hot_in_Cleveland_2010-06-16_10-00_PM_Pilot.mpg -I http --sout "#transcode{soverlay,ab=128,samplerate=44100,channels=2,acodec=mp4a,vcodec=h264,width=480,height=270,vfilter="canvas{width=480,height=270,aspect=16:9}",fps=25,vb=800,venc=x264{level=12,no-cabac,subme=20,threads=4,bframes=0,min-keyint=1,keyint=50}}:gather:rtp{mp4a-latm,sdp=rtsp://}"

    Then with my WiFi connected Nexus One I open the browser to

    I clicked on the stream link and watched the video file Hot_in_Cleveland_2010-06-16_10-00_PM_Pilot.mpg specified in the VLC command.

    I've only got an standard definition recording to play so far. My HD recordings playback with a blank screen. I hear the audio. I'm sure there are some settings I need to tweak on the VLC command.

    Below are the specs from the video as provided by the ffmpeg command.

    Input #0, mpeg, from 'Hot_in_Cleveland_2010-06-16_10-00_PM_Pilot.mpg':
    Duration: 00:29:57.80, start: 0.189267, bitrate: 5188 kb/s
    Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 480x480 [PAR 4:3 DAR 4:3], 6000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x1c0]: Audio: mp2, 48000 Hz, 2 channels, s16, 384 kb/s

    Saturday, June 19, 2010

    XBMC Mythbox

    XBMC Mythbox is a script that lets your XBMC home theater PC emulate a MythTV frontend. The features of release candidate 1 of Mythbox are very close to an actual MythTV frontend. You can edit your DVR schedule, play recordings, watch live TV, view the TV guide, and review upcoming recordings. The best feature of XBMC Mythbox is that it honors MythTV commercial flags. It allows the player to skip right over commercials. The Mythbox also resumes where you previously stopped viewing a recording. Below is my video demonstration of XBMC Mythbox.

    Tools used to create the video:
    • Ubuntu Linux
    • Blender 3D graphics application
    • Blackmagic Pro video input adapter
    • MythTV
    • XBMC

    Sunday, June 13, 2010

    SouthEast LinuxFest 2010

    I thoroughly enjoyed the second annual SouthEast LinuxFest.  I met several of my on-line friends and gained a wealth of information from the sessions. A tip of the hat to all the hard working organizers and speakers. Great job!

    This year the event was held at the Marriott at Renaissance Park hotel in Spartanburg, SC. In 2009 it was held at Clemson University.

    The hotel accommodations were great. The Marriott had large meeting rooms and the staff seemed to be there when needed and invisible when they weren't needed.

    There was a great crowd on hand for Saturday's events. The crowd on Sunday was slim. I think next year it should be Friday 1PM through Saturday evening. I would leave Sunday as a travel day.

    The session schedule was varied and packed. There were 6 tracks on Saturday and many Birds of a Feather (BOF) meetings. Below is a list of the sessions I attended:

    • Friday afternoon - UbuCon: Jono Bacon, Rick Spencer and gang demoed Quickly, the python rapid development tool
    • Saturday 9AM - Bradley Kuhn: GPLv3: Better Copyleft for Developers and Users
    • Saturday 10AM - Jon "Maddog" Hall: A Personal History of Free Software (see my video link below).
    • Saturday 11AM - Nick Owen: Securing your network with open-source technologies: Tips & Tricks
    • Saturday 1PM - Cat Allman: Getting Started in Free and Open Source
    • Saturday 2PM - Doug Vann: How Drupal is expanding the role of OpenSource in Government, Private Industry and Beyond!
    • Saturday 3PM - Michael DeHaan: Datacenter Automation Strategies With Puppet
    • Saturday 4PM - Jay Pfaffman: LTSP as a New Model of Ubiquitous Computing for Schools: Fact or Foolishness?
    • Sunday 9AM - Alan Hicks: Introduction to the 802.11 MAC
    If you are interested in Linux/Free and Open Source Software I highly recommend attending SouthEast LinuxFest 2011. Stay tuned to the SouthEast LinuxFest website

    Here is a video clip I put together from my favorite SouthEast LinuxFest 2010 session.

    Monday, May 31, 2010 and Twitter Updates on TV

    MythTV is a free open source home entertainment system. MythTV provides a hook to the On-Screen Display (OSD). With a little Python scripting you can display tweets and dents on the screen while your are watching recordings or live tv. It is interesting to read what the rest of the world thinks while you are watching an event on TV. Here are some use-cases for the microblogging On-Screen Display:

    • Election return twitter feed
    • Popular TV show twitter feed
    • Sporting event twitter feed (see demo below)
    • Stock ticker
    • Weather alerts

    Below are two video demonstrations of displaying microblog messages on my TV. The first video is during the 2010 NASCAR Coca-Cola 600 race with the search term "NASCAR". It displays search results from and Twitter. The second video is just displaying my personal and Twitter messages while watching an episode of SNL.



    Tweets and Dents while watching NASCAR Racing: Coca-Cola 600 2010
    Tweets and Dents while watching SNL

    Saturday, May 15, 2010

    Google To Stop Selling Handsets Online

    I am very disappointed to hear that Google will stop selling mobile phone handsets online. I purchased my Nexus One online and it was a great experience. Is Google being forced by the mobile carriers to cease and desist online sales? There are many of us that know what we want and prefer to purchase online. We don't need to touch the merchandise or have a sales rep hold our hand. Come on Google reverse this backwards decision.

    Thursday, April 29, 2010

    Jabra CLIPPER Bluetooth Device

    Here is my demonstration video of the Jabra CLIPPER bluetooth device. The Jabra CLIPPER was made to clip on to your shirt and use headphones to listen to your music wirelessly. I'm going to use it a little differently. I have a 3.5mm audio jack on my car stereo that I will leave the Jabra CLIPPER bluetooth device connected to. This will enable me to listen to my music and podcasts on my Nexus One phone in my truck without connecting any wires.

    Video created with Blender on Ubuntu.

    Sunday, April 25, 2010

    Two Hummingbirds Feeding Together (Digitally)

    Hummingbirds are very territorial. They are always fighting each other off the feeder. I joined these two hummingbirds together digitally. I used the free open source 3D content creation suite Blender.

    SouthEast LinuxFest Video

    I am looking forward to SouthEast LinuxFest 2010. Last year's fest was fun and informative. I took their promotional audio and built a video around it just for fun. I used the free open source 3D content creation suite Blender to create the video.

    Monday, April 12, 2010

    Video Editing Workflow using Blender with AVCHD Files

    My Canon HF20 high-definition video camera creates AVCHD files with an extension of .MTS. I am using Blender as my video editor. My operating system is Ubuntu 9.10. This blog entry is to document my workflow.

    Blender does not handle AVCHD files well. The only solution I've found to work is to convert the video files into images and add the images to Blender as image sequences. Here is the mkdir and ffmpeg commands I use to convert the video files to jpg images.
    mkdir /tmp/00034
    ffmpeg -i 00034.MTS 00034/image%d.jpg

    Here is the command I use to play back the video during and after rendering.
    mplayer -vo vdpau  -vc ffh264vdpau -fps 60 -geometry 800x450 /tmp/0001_6579.avi

    Here is a a video I created using this method. The video demos my Top 10 Android Live Wallpapers.

    Saturday, April 10, 2010

    Android ROCKS! Video

    I have a Nexus One mobile phone running the Android software stack. Together they ROCK! I put together a tribute video using open source software tools Blender and GIMP on Ubuntu 9.10. The video displays some of the applications that I use all the time on my Nexus One. The music is Joe Satriani's
    "I Just Wanna Rock".

    Tuesday, March 30, 2010

    Interview with Wynn Godbold on Hacker Public Radio

    In episode 532 on Hacker Public Radio I interview my sister Wynn Godbold who recently starting using Ubuntu Linux. She is a kindergarten teacher in SC. We talk about Wynn's experience as a new Linux user. We also discuss open source software adoption in the education field.

    Sunday, March 28, 2010

    Cooper River Bridge Run 2010 - Processing for YouTube

    In a previous blog entry I touted that YouTube can process my camera's raw video files. Well it turns out that it doesn't always work. I uploaded some Cooper River Bridge Run videos and they played back at twice the speed. As a rule you don't want to convert your videos before processing. You never want a copy of a copy but this time I had no choice.
    Here was my workflow for my Cooper River Bridge Run 2010 videos which can be found on my YouTube channel. My computer operating system is Ubuntu 9.10.

    • Charge camera batteries the day before the shoot
    • Pack gear. Include a collapsible chair.
    • Travel to site and find a good location. To avoid traffic, I parked my truck before the Cooper River Bridge and bicycled the rest of the way.
    • Shoot video (on a tri-pod)
    • Return home and connect camera to PC via USB cable
    • Copy MTS AVCHD video files to PC
    • Search for and then download DRM-free music. I chose Cavanshawn on Jamendo.
    • Review video clips
    • Concatenate video clips using the cat command.
      cat scene1.MTS scene2.MTS > bothscenes.MTS.
    • Use ffmpeg to combine the audio and transcode the video to something YouTube can handle consistently.
      ffmpeg -i bothscenes.MTS -i "/var/lib/mythtv/music/Cavashawn/02 Madison.mp3" -vcodec libxvid -b 18000k -shortest -deinterlace -s 1920x1080 -map 0:0 -map 1:0 bothscenes.avi
    • Copy the AVI file to a USB thumb drive
    • Make a trip to work to upload the video to YouTube.
    • I usually set the videos to Private initially. If the video looks OK on YouTube I then change it to Public. The change from private to public is not immediate. So wait before you publicize.
    If you are wondering why I took a trip to work. I have a ATT DSL connection at home. The upload speed is 500kbps at best. Uploading a 3 minute video segment takes hours. If you make a mistake or YouTube fails a weekend project can turn in to a week long project. Upload speed matters when you are publishing video.

    My YouTube channel

    Sunday, March 21, 2010

    Nikon D40X Flash Fix

    I was miffed last weekend when I went to take some photos of my kitchen demolition. The flash on my Nikon D40X camera wasn't working. After some searching it was apparent that many people have had the same issue. Thankfully in the sea of search results I ran across this video that demonstrates the fix. In the photo below I added a red arrow pointing to the problem area. The copper clip had fallen off the black plastic pedestal. The few steps to fix it were:

  • Remove two screws on front of flash housing

  • Carefully remove the back off of the flash housing

  • Place the copper clip back on the plastic pedestal

  • Snap the rear of the flash housing back on carefully

  • Insert and tighten the two screws on the front of the flash housing

  • Have fun taking pictures in low light

  • Nikon D40X with the flash housing removed. Photo taken with my Google Nexus One.

    Sunday, March 7, 2010

    Gesture Search from Google Labs on a Nexus One

    Gesture Search from Google Labs lets you search your Android-powered device by drawing alphabet gestures on the touch screen. It allows you to quickly find a contact, a bookmark, an application, or a music track from hundreds or thousands of items, all in one place. It is fast and fun to use. Check out my demonstration video below.

    Saturday, March 6, 2010

    Google App Engine Java System Properties

    I use Google App Engine (GAE) to run It is an excellent platform for building and running web apps. For historical purposes I'm listing the Google App Engine System Properties as of March 6, 2010. GAE is running a fairly recent version of Java. It will be interesting to see how frequent the Java version is updated. These properties were retrieved via
    Properties properties = System.getProperties();

    java.vendorSun Microsystems Inc.
    java.specification.nameJava Platform API Specification
    java.specification.vendorSun Microsystems Inc.
    java.vm.specification.nameJava Virtual Machine Specification
    java.vm.vendorSun Microsystems Inc.
    java.vm.specification.vendorSun Microsystems Inc.
    java.vm.nameJava HotSpot(TM) Client VM

    Google App Engine logo

    Friday, March 5, 2010

    My Favorite MythTV Feature - Commercial Skipping

    MythTV has a ton of great features but my favorite without a doubt is commercial skipping.

    Gmote Android Application - YouTube Demonstrations

    Gmote turns your Android phone into a remote control for your computer, allowing you to start and control movies and music at a distance. It supports all of the standard remote control features such as play, pause, rewind, volume controls etc. It also has a built-in file browser that lets you view the files that are on your computer and select what you want to play. Gmote can also be used as a wireless Touchpad and keyboard, allowing you to control your computer at distance. Another great feature available in Gmote is the ability to stream music from your computer to your phone!

    Below are two YouTube demonstrations. The first demos the touchpad feature and the second demos music streaming.

    Gmote Music Streaming Demonstration on a Nexus One

    Gmote Touchpad Demonstration On A Nexus One

    Saturday, February 27, 2010

    I combined my joy of Java programming, my desire to give back to the podcasting community, APIs from the great microblogging site of, my craving to try something new (GAE) and I created

    Tools Used

    It will be interesting to see how the site holds up to some traffic. Let me know what you think.

    Sunday, February 21, 2010

    Super Easy Splicing of Video MTS Files

    The high-definition video camera, Canon HF20 creates AVCHD files with an extension of .MTS. A super easy method of splicing scenes together it to use the Unix/Linux command cat, no video editor required. Here is an example:
    cat scene1.MTS scene2.MTS > bothscenes.MTS.
    YouTube processes these concatenated files just fine. Below are links to multiple scene videos I spliced together with the cat command.

    Mythmote Demo on a Nexus One

    Mythmote is an Android application that allows you to use your phone to control your MythTV frontends. This video demonstrates the Mythmote application. If you haven't already check out my instructional video on how to install Mythmote.

    Mythmote Installation on Nexus One Phone

    Mythmote is an Android application that allows you to use your phone to control your MythTV frontends. This is an instructional video on how to install Mythmote on an Android phone. If you haven't already, check out the demonstration video of Mythmote.

    Monday, February 15, 2010

    My MythTV Recording Stats

    MythTV Recording Statistics

    Number of shows:
    Number of episodes:
    First recording:
    Wednesday November 4th, 2009
    Last recording:
    Monday February 15th, 2010
    Total Running Time:
    3 months 11 days 14 hrs 2 mins
    Total Recorded:
    1 month 4 days 20 hrs 31 mins
    Percent of time spent recording:
    TitleRecordedLast Recorded#TitleRecordedLast Recorded
    NBC Nightly News92February 15 20101WCBDDT (WCBD-DT)332February 15 2010
    Today87February 15 20102WCSCDT (WCSC-DT)211February 12 2010
    Late Show With David Letterman68February 12 20103Comedy Central101February 11 2010
    Late Night With Jimmy Fallon66February 12 20104WTATDT (WTAT-DT)55February 14 2010
    The Tonight Show With Conan O'Brien55January 22 20105WCIVDT (WCIV-DT)34February 10 2010
    Live 5 News at 554January 29 20106WITVDT (WITV-DT)4February 14 2010
    The Colbert Report51February 11 20107ESPN3January 31 2010
    The Daily Show With Jon Stewart50February 11 20108WMMPDT (WMMP-DT)1November 5 2009
    NFL Football49February 7 20109CNBC1December 4 2009
    NCIS14February 9 201010VH1 - Video Hits One1February 6 2010
    Fringe13February 4 201011
    NCIS: Los Angeles12February 9 201012
    The Mentalist10January 28 201013
    Cougar Town10February 3 201014
    Saturday Night Live10February 6 201015
    The New Adventures of Old Christine9January 27 201016
    House9February 8 201017
    60 Minutes8January 31 201018
    The Wanda Sykes Show7December 19 200919
    College Football7January 7 201020
    Modern Family7February 3 201021
    The Middle5February 3 201022
    Ugly Betty5February 10 201023
    Chuck4February 8 201024
    244February 8 201025