Thursday, November 30, 2017

Caribbean Cruise Adventure - Day 3

[Composed 11/21/2017]

On one hand, the great part of being on a cruise is that you get to visit a number of locations in one vacation. On the other hand, your time in those locations is often ridiculously short. And so it was with today's port of call: Roatan, Honduras. Still, we tried to eke out every bit of adventure we could.

The plan for our day came together when Shira stumbled across a jam tasting that Marble Hill Farms offers. We're not huge fans of wine or beer tastings, but the idea of trying local jams and jellies sounded perfect. Shira picked up the phone and called Jana over at Marble Hill, and the two of them quickly worked out a plan. We'd catch a taxi at the port, drive to the farm, do the jam tasting and figure it out from there.

We walked off the boat, found our driver Wilfredo, and our adventure began. Wilfredo was kind enough to stop at various overlooks so I could snap pics. He even got us on the grounds of a private golf course so we could grab an especially amazing view. Once at the farm, we did indeed have a jam and jelly tasting. Spoiler alert: they were all awesome.

After the tasting, we made our way down to the beach. With a bit of nudging from one of the staff, we rented a kayak and grabbed my snorkeling gear. We made our way a good couple hundred yards out to what was supposed to be a reef and I plunged out of the boat. What I found below was downright magical. It was like stepping into into some fancy dude's aquarium. The coral was really out of this world. We weren't planning on this kayak / snorkeling adventure, but boy am I glad we did it, it was top notch.

After a delicious lunch, we asked our driver for suggestions and he told us he had a friend who could take us on a tour of the mangroves. Before we knew it, we were in a tiny boat, speeding away from the dock. It was nice and all, but I wasn't quite sure where we were going. That is, until we pulled into a side channel and found ourselves in a tunnel of mangrove trees. It was like something out of a romantic movie.

As we made our way back to the boat, I remarked to Wilfredo that the only thing we hadn't seen this trip were any iguana. He took that as a challenge and promised that on our way back we'd search some out. Not 200 yards later, he slowed down and stopped in front of a dingy looking brick wall. A moment later, he told us where to look, and there it was, an honest to goodness, black iguana! He also took us on a side street in search of some green iguanas, which we managed to find as well.

Had I known that Wilfredo was going to effortlessly grant my last wish, perhaps I should have gone a little bigger than an iguana sighting?

All in all, Roatan was a hit. Getting away from the port let us see the lush countryside, and get a quick taste for how much this little island has to offer.

Object in Sky is Larger and Faster than it Appears

That little white dot is none other than the International Space Station making a pass overhead. Its orbit happened to coincide with our location last night, making for excellent viewing.

It's hard to believe, but that itty bitty light is 253 miles away and traveling at 17,153 Mph. Remarkable.

Wednesday, November 29, 2017

Caribbean Cruise Adventure - Days 1 and 2

[Composed 11/20/2017]

There's something magical about stepping on a cruise ship. Perhaps it's the sheer magnitude of the logistics needed to power a floating city; or maybe it's the latent feeling of adventure that our sea going ancestors surely felt; or maybe it's the joy of knowing that you're stepping into a world of free, unlimited, on-demand soft serve ice cream? Regardless of the reason, I was definitely psyched to board the Norwegian Cruise Lines ship, the Getaway.

After spending a day and a half board, I can say that the ship is almost comically large. It took us 7 minutes of walking to get around the perimeter of the state-rooms, which by my crude estimate puts the perimeter of the ship at nearly 1/3 of a mile. The atrium is on deck 6 and the pool is on deck 15, and the schlep up the stairs between the two is nothing to laugh at. At the very top of the ship is a friggin ropes course.

So far, we've only found two disappointments with the ship itself. The first is the sad excuse of a 'jogging track' they offer. It's a relatively short loop (8 times around is one mile) and the track is in a high traffic area around a restaurant and lounge chairs. I know that cruise companies want to check off as many boxes as possible when describing the amenities of a boat, but this is pushing it. We found strolling was much better on deck 8, where we could walk around most of the perimeter of the boat without having to dodge sun-bathers and such.

The second let down, is that they offer smoking in the casino. It appears to be the only location inside the boat where you can smoke, and while I can guess why they offer this, it's still a let down. The use of auto-shufflers for Black Jack is another strike against the casino. But, the minimum bets are quite a bit smaller than around here, so maybe that will lure us in for a little gambling time.

The food and entertainment on the boat has been solid, so far. We enjoyed the Howl at the Moon, Dueling Pianos Show, even though I'm pretty sure they didn't know the Garth Brooks song we requested (and bribed tipped them to play!). The behind the scenes talk by the cruise director was, as always, interesting. Shira and I even managed to catch a bit of a rehearsal of the Burn the Floor Musical. This wasn't open to the public, but a cleaning person saw me peeking through the glass and let us in. What a treat it was to get to see some of the behind the scenes action of the show, and kudos to the cleaning person who put the happiness of the guests over everything else.

We did the ship's version of Hibachi for dinner tonight and it was tasty enough, the folks we shared the table with were enjoyable company and the chef attentive enough to cook our vegetarian options first. In general, we've been enjoying the food and the buffet has plenty of veggie options for us to try.

Tomorrow morning we'll arrive in Roatan, Honduras, and all this low key fun will come to a crashing halt.


Tuesday, November 28, 2017

Traveling Picture Backup Solution 2.0 - Overcoming Android's Permission Annoyances

We just got back from cruise in the Caribbean where I shot a hefty number of both DSLR and cell phone pics. On the ship, WiFi is both pricey and sluggish, so I couldn't rely on the Cloud as a backup solution for the images. Given the close call I had on trip last year, I couldn't go without some sort of backup solution either.

That left me with copying files between various media cards. In the past, I used FolderSync to automate this procedure. However, changes in Android 6.0 vastly complicate matters, because you need to grant external permission to gain write access to an SD card. In FolderSync you can only grant write permission to one SD card, and in my scenario, I needed both SD cards writeable. So FolderSync was a no-go.

Using the file manager, I could manually copy folders to the various cards, but that was error prone to say the least.

Ultimately, Termux saved the day. Termux is a Unix command line environment, that's effortless to install rsync on (pkg install rsync should do the trick). With rsync to do the heavy lifting, and bash to do the scripting, I was able to put together an automatic backup solution that was as easy to use as FolderSync.

The only catch is that Termux has the same SD card writing limitations that FolderSync has. Heck, they're worse, because in FolderSync you can grant access to one SD card. In Termux, there appeared no way to grant permission to any cards. What saved the day was actually reading the instructions. It's not that Android doesn't give you access to the SD card, it's that it doesn't give you write access to the *whole* card. It does, however, grant you write access to a particular folder. In the case of Termux, that folder was:

  /storage/[SD CARD ID]/Android/data/com.termux/files/

When you run the termux-setup-storage command, this directory is created and permissions are setup properly. By popping my DSLR's Micro SD card into the phone and running termux-setup-storage I was able to initialize the Android/data directory structure. Once this was done, accessing my Camera's Micro SD card via a USB-C card reader allowed me write access to this 'files' directory.

Here's a screenshot of the /storage/ directory with the Phone's SD card mounted internally in the phone, and the camera's SD card mounted via a reader:

The funky looking identifiers (6EFF-8FBA and 5564-3C29) uniquely identify the micro SD card, and ultimately give you read-only access to the entire card, and write access to the specific directory noted above.

Once I had all this untangled, writing the script to rsync files around was easy:

#!/data/data/com.termux/files/usr/bin/bash

##
## Backup phone and dslr pics to each other's card
##

SD_IDS="5564-3C29 6EFF-8FBA"

skipping() {
  src_id=$1 ; shift
  dest_id=$1 ; shift
  msg="$@"
  
  echo "Skipping: $src_id => $dest_id"
  echo "  $msg"
}

for src_id in $SD_IDS ; do
  for dest_id in $SD_IDS ; do
    if [ "$src_id" = "$dest_id" ] ; then
     continue
    fi
    src_path=/storage/$src_id/DCIM
    dest_base=/storage/$dest_id/Android/data/com.termux/files
    if [ ! -d $src_path ] ; then
     skipping $src_id $dest_id "$src_path does not exist"
     continue
    fi

    if [ ! -d $dest_base ] ; then
     skipping $src_id $dest_id "$dest_base does not exist"
     continue
    fi
    dest_path="$dest_base/dcim_backup/$src_id"
    mkdir -p $dest_path

    if [ ! -d $dest_path ] ; then
     skipping $src_id $dest "Unable to create backup path $dest_path"
     continue
    fi

    echo "Backing up: $src_id => $dest_id"
    rsync -vr --size-only $src_path/ $dest_path
  done
done

Note the specific SD card identifiers at the top of the script. The script attempts to copy files between every available drive (in this case, there's only two). My plan is to add at least a third card which will server as backup only location.

Termux offers a slick widget add-on which gives you home-screen access to run arbitrary commands. Using it to launch this backup script means that I don't have to type anything at the Termux prompt to perform the backup. I need only plug in the various cards, and click on the widget:

In short: Termux rocks, rsync rocks, Android permissions are hell but deal-able, and using the command line from your phone is more than just a party trick. Now if only I could write some code that made my vacation longer...