GoPro Video + Dive Computer Data (part 1)

I’ve been scuba diving since 2002 and taking pictures underwater since about 2003. I’ve been using a dive computer for as long as I’ve been diving. My first dive computer was an Aeris Atmos Ai. The data cable for that computer was expensive and I didn’t see much value in what it provided. I’ve used paper logs since my training dives and been happy with them.

Last year I got a Shearwater Perdix Ai, which I really love. It uses Bluetooth to transfer data. Shearwater provides multi-platform software (iOS, Android, PC, Mac) for syncing your data to their cloud. This makes editing my dive logs electronically pretty convenient (I still keep paper logs).

I got a GoPro this summer and have used it to shoot video the entirety of a few dives. The Shearwater dive-log software can can export a time-series CSV log of a dive (time, depth, tank pressure, etc.). Data can be collected in 2, 5, or 10 second intervals.

I decided I wanted to figure out how to overlay the data from my dive computer’s logs onto the whole-dive videos I’d shot.

I did some searching and the best solution I came up with was DashWare. DashWare looked like it might meet my most basic needs, but it had some serious drawbacks.

  1. It is no longer under development. The company is now working with GoPro and no longer supporting or developing DashWare. It is now free if you want to try it.
  2. It’s a Windows-only application. While I do have a Windows box, my primary laptop and desktop are both Mac. I edit while I’m traveling and I don’t really want to produce video in a VM.
  3. It either bakes the (data + existing video) into a new video or it will produce a green-screen video from your data which you can then combine other video editing software. I believe I need to be able to edit after the overlay is in place (so I can edit the source video and overlay at the same time). If I allow DashWare to bake the overlay into the video, it will incur an addition re-encoding when I edit. If I use the green-screen output, I will incur reduced quality as that video will undergo an additional encoding and will likely have green-screen-related artifacts.

Since the drawbacks seem to be pretty big, I kept looking.

I already own Final Cut Pro X and would likely want to do any editing in that tool, so I started to look at how it would be with FCPX.

As best as I can tell, “Plugins” for Final Cut Pro are generally made with Apple’s Motion application. I bit the bullet and bought Motion.

Will it Final Cut Pro X along with Motion allow me to overlay data from my dive computer’s logs onto my GoPro video?

Tune in next time to find out more!

Cory Doctorow – With A Little Help

One of my favorite authors, Cory Doctorow, has a new book out titled With A Little Help. As always, Cory FREELY gives away his eBook versions (although you must pay for physical paper versions or audiobook versions). Cory encourages people to make alternative formats of his books and distribute them freely. Sadly, he only publishes (on his website) the first submitted version of any individual file format. I tried the .Mobi (for Kindle and others) and .ePub (Sony, Nook, and others) that he has made available on his website and found them to have some serious formatting issues, missing cover images, etc. I’ve done some massaging of his HTML version and produced my own .Mobi and .ePub versions and believe they are superior. Please give them a try. I welcome your comments.

These files were updated on Dec. 20, 2010 and include typo corrections up through Dec. 17, 2010.

Shure SE315 Headphones Review

I’m a big fan of “In Ear”, sound-isolating headphones. I’ve previously owned the Etymotics ER-6, and Shure SE210, SE310, and SE530. All of these headphones have amazing sound reproduction, but the fragile part of any pair of headphone is the cable itself. Both Etymotics and Shure have pretty decent warranty, but replacing the cable outside of the warranty is nearly as expensive as buying a new pair of headphones. While My SE310’s are still in good shape, all the others needed cable replacements, received at least one replacement under warranty, and are now “out of service”.

The Shure SE315 continue are true to the Shure branding and are marvelous headphones. After using them for about a day, it appears Shure has solved almost every issue with their previous headphones.

Pros:
  • They’re Shure headphones, so they sound great and come with lots of different tips for nearly any preference.
  • The in-ear comfort is exactly the same has previous Shure entries. If you’ve owned Shure before, you know what you are getting into for fit.
  • The replaceable cable is something that was SORELY needed. Nothing is worse than paying $200+ on a pair of headphones and having the cord break out of warranty and have it cost nearly the original purchase price to have them replaced by Shure. Now, just replace the cable with a new $50 cable.  Admittedly, $50 isn’t cheap, but that’s a lot less than it would have been with previous Shure headphones. Replacing the entire cable is SUPER easy.
  • The body of the headphone itself is angled better than with previous models, so they are more flush to your ear. They should work better with earmufs, ear on a pillow, etc.
  • The “over the ear” part of the cable is now covered in a thin foam(-like) sheath, so hopefully less cord breakage should occur around the ear, which seems to have plagued previous Shure headphones.
  • The 1/8″ jack now seems sturdier than previous models and is angled, so it should last longer.

Cons

  • Yup, they’re Shure. Yup, they’re expensive.
  • I loved that on my previous  Shure headphones that the cord split in the MIDDLE, so if the part of the cord that connected to the 1/8″ jack needed to be replaced, it was a pretty cheap replacement. Also, if the cord gets jerked away (caught on something), it just disconnected in the middle. This feature is gone. The cord is one single piece like with other headphones.
  • The 1/8″ jack itself, while beefy and angled (both great features) is REALLY fat – about 1 cm wide. If you don’t use a case (like I do for my iPhone), you’ll be fine, but if you do use a case, I think there is an excellent chance you won’t be able to plug in the headphones unless you ream the case hole wider (which is what did, using a knife), get a case with a huge headphone jack hole, or stop using a case (not an option for me).
The SE315’s are three steps forward (yay replaceable cable) and one step back (huge headphone jack and a single piece cable instead of a split cable design). I do intend to get the “CBL-M+-K” for the iPhone mic and music controls and maybe that will have a more svelte 1/8″ jack.

Overall, I’d mark the SE315’s a 4.5/5.

Kindle / ebook Transcript

On the morning of November 2, 2010, the Supreme Court heard oral arguments regarding Schwarzenegger v. EMA. You can read details about this on Wikipedia, but in short, it regards a California law that tries to make deviant / violent video games illegal to sell to minors and places legal penalties (fines, etc.) on such sales.

I originally got the transcript in PDF format from Scribd thanks to Christopher Grant who posted it there. It’s a very interesting read.

For easy viewing on the Kindle and other ebook readers I’ve converted it to .mobi format (click the link to download). I’ve made a few very minor formatting changes to increase readability for the ebook format and fixed one or two typos or added missing letters but I’ve tried to keep the text exactly as it came from the original PDF I got from Scribd.

To install this on your Kindle, just download the .mobi file, connect the USB cable to your Kindle, and place the .mobi file in your Kindle’s “documents” directory or email it to your Kindle email address.

An update, launching mrxvt (or urxvt)

The latest Cygwin update seems to have broken how I launch mrxvt… my shortcut no longer worked. I tried countless permutations and nothing helped. After a lot of searching, I found that back on February 21, 2007 Angelo Graziosi posted a solution to the Cygwin mailing list that works for me (Hooray Google! Hooray Angelo!). His instructions were for launching urxvt, but I’ve brought them up to date and modified them for mrxvt.

First create a shell script. The one I created was named /usr/local/bin/start_mrxvt.sh

#!/bin/bash

export DISPLAY=:0

/usr/bin/checkx || startxwin

exec /usr/local/bin/mrxvt -e /usr/bin/bash -l

Next, create a shortcut to run the script with the following parameters

Target:   C:\cygwin\bin\run.exe -p /usr/X11R6/bin bash --login -c /usr/local/bin/start_mrxvt.sh
Start in: C:\cygwin\bin

This method works especially well because if X isn’t already running, the script will start X before running mrxvt.

Setting jqGrid column width from titles

Lately I’ve been playing a lot with jqGrid, a very nice Grid / Table plugin for jQuery / jQuery UI. It does some really amazing things including allowing you to have a scrollbar that replaces the standard “next page” / “previous page” that you see in most web applications. I have tables that are sortable on multiple columns that have tens of thousands of results and I can scroll through them easily. It is also easy to leverage filtering, etc. All this takes a touch of server-side code, but it is all astoundingly easy.

The one trick I couldn’t figure out how to do was to set the column with based on the Title. In most grids with just a few columns, this isn’t an issue – you set the size (in pixels) and go on your way. But what if you don’t know the column names ahead of time (they come from the database) and you just want to make sure the column with is a minimum of a number but a maximum big enough to hold the title plus a bit of padding?

After the grid has been created, you cannot programmatically set the width of columns, so it has to be done before the grid is created. Normally you create a jqGrid as such:

    <table id="list"></table>
    <div id="pager"></div>
    <script type="text/javascript">
        var colNamesData = ['Inv No','Date Of the Transaction', 'Amount That Is Owed'];
        var colModelData = [
            {name:'invid', index:'invid', width:55},
            {name:'invdate', index:'invdate', width:90},
            {name:'amount', index:'amount', width:80, align:'right'}];
        jQuery(document).ready(function(){
        jQuery("#list").jqGrid({
            ...
            colNames: colNamesData,
            colModel: colModelData,
            ...
        });
    </script>

To set the column widths automatically to the title, for any column in the column model I added a new boolean attribute resizeToTitleWidth and only resized the column if this was set to true. Here is the new code that resizes the desired columns.

    <table id="list"></table>
    <div id="pager"></div>
    <span id='ruler' class='ui-th-column' style='visibility:hidden;font-weight:bold'></span>
    <script type="text/javascript">
        var colNamesData = ['Inv No','Date Of the Transaction', 'Amount That Is Owed'];
        var colModelData = [
            {name:'invid', index:'invid', width:55},
            {name:'invdate', index:'invdate', resizeToTitleWidth:true},
            {name:'amount', index:'amount', align:'right', resizeToTitleWidth:true}];
        jQuery(document).ready(function() {
            var ruler = document.getElementById('ruler');
            for (var i in colNamesData) {
                if (colModelData[i].resizeToTitleWidth != true) {
                    continue;
                }
                // Measure the title using the ruler span
                ruler.innerHTML = colNamesData[i];
                // The +26 allows for padding and to fit the sorting UI
                var newWidth = ruler.offsetWidth + 26;
                if (newWidth < 100) {
                    // Nothing smaller than 100 pixels
                    newWidth = 100;
                }
                colModelData[i].width = newWidth;
            }
            jQuery("#list").jqGrid({
                ...
                colNames: colNamesData,
                colModel: colModelData,
                shrinkToFit:false,
                ...
        });
    </script>

The key to obtaining the width is the additional hidden HTML span tag with the id of ruler.  This hidden span has the same CSS style as the column header, so we can place the column title text into this span and obtain the width of the text geting the span‘s offsetWidth. After we have the width, we pad the width with enough extra space to hold the sorting UI.

It would have been nice if the column had an attribute that forced the width to accommodate the the columns title (but allowed for a minimum width, here 100 pixels) but we find that it isn’t too difficult to add the functionality ourselves.

The above example is meant to be illustrative rather that a complete working sample. I’ve put together what should be a simple, working sample you can try.

Console, Cygwin, and Windows 7

My DOS and Unix roots often show – I like using the command line. On all of my Windows-based systems I have Cygwin installed to provide many of the luxuries of Unix / Linux right from my windows system but the window that contains the Windows command line interface (cmd.exe) and Cygwin’s bash leave something to be desired. Copy and Paste is a pain and after growing so accustomed to having tabs in my browser, not having tabs to different command lines is a pain (especially when you connect to multiple systems which I often do, especially at work). A few years ago I discovered an open source project called Console. Console is a great little program. It supports copy and paste much like XTerm (just select text and it is copied, middle click and it pastes). I’ve been using it daily and loving it. It has one major drawback, though, in that it isn’t actively updated / worked on. Through Windows Vista that was fine, it didn’t really need any work but starting with Windows 7 there is some conflict that keeps it from working correctly. I did some searching but had a hard time coming up with a suitable alternative until I discovered mrxvt. mrxvt isn’t actually a Windows program at all but rather is a Unix program written in X that can be compiled and run using Cygwin.

mrxvt

Ultimately, what mrxvt provides is a tabbed xterm (well, a tabbed rxvt to be more precise). Getting it running isn’t quite as easy as just clicking install because -a- it isn’t a Windows program, they don’t provide Windows binaries for it, and because it isn’t a package that is distributed by Cygwin… but, it isn’t all that difficult. The steps are as follows:

  • FIRST! If you are installing on Windows 7, start with Cygwin 1.7. This may still be in beta, you might want to look here for the beta.
  • Download the Cygwin installer and install Cygwin including X. Follow these instructions to get Cygwin and X installed. You will need the following Cygwin packages (some of which are mentioned in the previous Cygwin/X instructions)
      X-start-menu-icons
      xorg-server
      xinit
      inetutils
      openssh
      xterm
      gcc
      make
      autoconf
      automake
      libiconv
      font-misc-misc (probably already there from the earlier X packages)
      libX11-devel
      all of the cygwin rxvt packages
  • Copy the “XWin Server” shortcut from the “Cygwin-X” program group to “Startup” so Windows automatically starts XWindows at bootup
  • Download the latest (0.5.4 at the time of this writing) mrxvt into your Cygwin
  • Move the mrxvt .tar.gz file to your Cygwin home directory. If the Windows user you are logged in as is named “Kevin”, your Cygwin home directory will be “c:\cygwin\home\Kevin”.
  • Start rxvt or xterm. The shortcuts for these should be in Start | Programs | Cygwin or Cygwin-X – it should start you in your Cygwin home directory (in Cygwin if your Windows user name is Kevin you will be in ~/Kevin or /home/Kevin – which are the same thing)
  • Extract the files from the .tar.gz with the command, change into the newly created directory
      tar zxvf mrxvt-0.5.4.tar.gz
      cd mrxvt-0.5.4
  • Configure before compilation – if you are missing any Cygwin packages you will probably learn about them here
      ./configure --enable-everything --disable-debug --with-save-lines=99999
  • Compile and install
      make
      make install
  • You can now make a shortcut on the Start menu to launch mrxvt. The Target of the shortcut should be
      C:\cygwin\bin\run.exe -p /usr/local/bin/ mrxvt -display 127.0.0.1:0.0 -ls
  • If you prefer to run CMD.exe (Windows Commmand shell) instead of Bash, you can set the Target of the shortcut to
      C:\cygwin\bin\run.exe -p /usr/local/bin/ mrxvt -display 127.0.0.1:0.0 -e cmd.exe
  • Finally, mrxvt is very customizable. The easiest way to customize it is to create a file named “.mrxvtrc” in your Cygwin home directory. My .mrxvtrc file contains the following content
      Mrxvt.foreground: black
      Mrxvt.background: AntiqueWhite
      Mrxvt.scrollbarStyle: next
      Mrxvt.scrollbarRight: True
      Mrxvt.xft: True
      Mrxvt.xftSize: 16
      Mrxvt.xftAntialias: True
      Mrxvt.command: /usr/bin/bash -l

Hopefully one day soon Console will be updated and support Windows 7. I don’t really love having to run XWindows to get a tabbed console that supports nice copy and paste, but for now this solution works.

Know of a better, simpler solution? Let me know!

Amazing Movie, New TV Shows

I saw the previews for Zombieland a few weeks ago. It showed some promise, but too many movies show promise and fail to deliver. I am happy to say that Zombieland delivers and in spades. I went to see it at the local gigaplex… they were offering it on normal screens and on “Giant Screen” which means they project it on their IMAX screen but without the extra IMAX features – it’s large but it doesn’t consume the whole screen. Anyway. It was a fun, funny movie: Dripping in style, great writing, nice effects. There isn’t a single thing I would change about it. If you like comedy zombie films like Sean of the Dead you should check this out. Woody H. was a perfect choice for co-lead on this film. Jesse Eisenberg was also a very good choice although I kept thinking he was going for a Michael Cera thing throughout the movie – I could almost hear the director shouting “do more Michael Cera!”. Not to be missed (but probably not for the kiddies).

On to some new TV shows (or new to us, anyway). We finally started watching Lie To Me after my sisters urging since it started. We’re really enjoying it and trying to catch up so we can start season 2 which the TiVo is recording for us. We’re enjoying Glee – sort of an American Idol meets sit-com. The first episode of Community was a huge train wreck, in our opinion (which is too bad, we like most of the people), but the second episode redeemed it self a bit and was watchable – we’ll see how it shapes up. Parks and Recreation is still “pretty new” and is continuing to show promise. The Forgotten is very Cold Case-ish but we’re enjoying it. Sons of Anarchy isn’t terribly new to me (I loved season 1) but if you aren’t watching it, go get the season 1 DVDs and get busy. Finally, Flash Forward is showing real promise – very interesting premise and solid execution so far.

Sad, Yet Thankful

My dad, the best man I know, died this last week. He battled cancer for a couple years and finally it got the best of him, although he put up a good fight.

I am thankful for good doctors. Even though he endured surgery, chemo-therapy, and radiation treatments I am thankful that at the end he was only in the hospital for about a week and the suffering was controlled reasonably well. I am thankful his brother Jim and all of my siblings and I made it to see him, talk with him, and laugh with him one last time before he died. He generally appeared to be asleep, but he was often responsive even when you expected he wouldn’t be.  I am thankful for what a great man he was, what a great role model, and what a changer of lives he was.

I am thankful for friends who know how much my father meant to me and have helped and supported me through this, each in their own unique way. I am thankful for my siblings who share my sadness and were able to be with me last week with me, making it that much easier to bear. I am thankful for my amazing wife who is always by my side (and reminds me to come to bed when I am up re-writing my blog at 3am for the 10th time because I can’t seem to write exactly what I am feeling).

I lost my mom in 2001 to cancer. I miss her every day, but I am thankful my dad found Ann. Ann and her family were not only a blessing to my father, but they continue to be a blessing to me and my family. Thank you Ann (and all of your wonderful family).

Not the least of all I am thankful my parents chose me. They loved me unconditionally and even through great distances of time, space, or life they have never and will never leave my side or my heart.

Foaming Hand Soap

I love the foaming hand soap. I don’t recall where I used it first but over the last couple years it has become very popular – we use it exclusively at home (we evening use foaming dish soap when we do dishes in the sink) and we find it in more and more resturants, etc.  I think the soap folks know that people really like the foamy stuff so they charge a premium for it. I just did a search on FreshDirect (which I am sad that I cannot use at our new apartment because we’re too far away) and I found that 7.5 ouces of Dial Antibacterial Liquid Soap is $2.19 while 7.5 ouces of Dial Antibacterial Foaming Hand Wash is $2.99. In the past I have paid the premium for the foaming stuff becase I really do like it better, but I’ll let you in on a secret I learned not long ago…

What makes this foaming soap special is not the soap – it is, I believe, the exact same soap! The difference is the pump’s dispenser. Make a one time purchase of the soap in the foaming soap dispenser and but then when it is empty keep the bottle. For all future purchases buy the less expensive non-foaming variety. What is even better is that you don’t use the entire bottle! Put about 1/8 of the non-foaming liquid in the foaming bottle and then fill the rest of the bottle with water (this is a necessary step – the non-diluted soap is too thick for the foaming dispencer). Give the bottle a little shake and now you have foaming soap. For $2.99 + $2.19, a total of $5.18, you now have nine bottles of foaming soap – that’s about $0.58 a bottle. Just continually refill the foaming bottle with this soap-water mixture until the pump breaks.