Sunday, June 18, 2023

The Start of a Most Difficult Journey

I'm composing this on a flight back to DC from Rochester. We just left the bedside of my Mother-in-Law, whose health has deteriorated to the point where hospice is our best option.  With great sadness, Shira and I appreciate that the time we have left with her is exceedingly short.

When we said goodbye today, we explained that we were heading to the airport to catch our flight to DC and promise we'd return shortly. I asked if she remembered the good old days of airport security, where the non-flying public could go through security with the person flying and see them off at the gate. Of course she did.

See, my Mother-in-Law had a bit of a reputation when it came to seeing loved ones off at the airport. Not only did she go with them to the gate, but, with her Husband Dan, she'd patiently wait while the plane boarded, pulled away and ultimately took flight. Only then, would they leave the airport and resume her day's activities.

As a kid, this sort of careful devotion seemed a bit excessive. In hindsight, I can see this act as revealing the kind of Mother and person my Mother-in-Law is.  She was quick to go the extra mile for those in her wide circle of loved ones; never being satisfied with Just Enough or doing what everyone else did*. It was this kind of careful attention to detail that made her an amazing Mother-in-Law, and helped her be such an important role model for my wife and myself.

Mom, I'm sorry we can only go as far as the gate. We wish you safe travels on the next leg of your journey.

*Another great example: she was my most devoted blog reader; making sure to never miss a post, even if the subject of that post meant nothing to her.

Wednesday, June 14, 2023

Caption Me: Tidal Basin Edition


This cherry blossom tree: no trunk, no problem.

Political slogans aside, maybe we really do need to drain the swamp.

Tuesday, June 13, 2023

Building your own Noah's Ark. But smaller and for knowledge.

Imagine for a moment: life without the Internet. Along with a heap of other conveniences, gone is effortless access to information on any conceivable topic. While extended periods of time without free and easy access to the web are hard to imagine, the cost for preparing for this contingency is tiny. Doing so takes up no physical space, is essentially free and the content won't expire.

The only real effort involves a thought exercise: what content do I want when our imaginary doomsday hits?

Sites like TruePrepper take a decidedly functional approach to this challenge. They recommend books and manuals to sharpen your survival skills. Survivor Library offers a more holistic approach. While they have an extensive section on individual survival , they have a broader mission: to provide the wisdom needed to power a society. They offer books on everything from accounting to weaving (what, no zoology?).

Initially, I thought I might download the documents on the Survivor Library, copy them to a Micro SD card and be done with this little experiment. But, as I started to think about what documents I'd want access to, it occurred to me that quality, not quantity is the goal. You can see what I've come up here, and the list continues to grow as ideas strike.

Once I had a list of URLs to PDFs, the next step was to write some code that would download these files to my computer. Once downloaded, I can copy them to a Micro SD card for safe, Internet-free keeping. As a bonus, I opted to copy them to an Amazon S3 bucket. This cloud based backup is useful if the original sources on the web become unavailable. The script libraryassist handles these uploading and downloading tasks. Here's the script in action as I ask it to process the 'medical' related documents I added to my catalog:

# Pull down documents from the web
$ ./libraryassist -a get-all
medical: Where_There_Is_No_Doctor.pdf (
medical: nato-emergency-war-surgery.pdf (
medical: Survival_and_Austere_Medicine.pdf (
medical: ditch-medicine-advanced-field-procedures-for-emergencies-1993.pdf (
medical: the_ship_captains_medical_guide_2014.pdf (
medical: Where-There-is-No-Dentist.pdf (
skills: SERE_Handbook.pdf (
skills: The_American_Drawing_Book.pdf (
skills: how-to-find-your-way.pdf (
skills: CERT_Basic_Training.pdf (
skills: Drawing_on_the_Right_Side_of_the_Brain.pdf (
skills: American_Card_Player.pdf (

# Cache the documents in S3, so I don't depend on another website to host them
$ ./libraryassist -a push-all
upload: medical/Where-There-is-No-Dentist.pdf to s3://library-benjisimon-com/medical/Where-There-is-No-Dentist.pdf
upload: medical/the_ship_captains_medical_guide_2014.pdf to s3://library-benjisimon-com/medical/the_ship_captains_medical_guide_2014.pdf
upload: skills/American_Card_Player.pdf to s3://library-benjisimon-com/skills/American_Card_Player.pdf
upload: medical/survival-personal-wilderness-medical-kit.pdf to s3://library-benjisimon-com/medical/survival-personal-wilderness-medical-kit.pdf
upload: medical/nato-emergency-war-surgery.pdf to s3://library-benjisimon-com/medical/nato-emergency-war-surgery.pdf
upload: medical/Survival_and_Austere_Medicine.pdf to s3://library-benjisimon-com/medical/Survival_and_Austere_Medicine.pdf
upload: skills/CERT_Basic_Training.pdf to s3://library-benjisimon-com/skills/CERT_Basic_Training.pdf
upload: medical/ditch-medicine-advanced-field-procedures-for-emergencies-1993.pdf to s3://library-benjisimon-com/medical/ditch-medicine-advanced-field-procedures-for-emergencies-1993.pdf
upload: medical/Where_There_Is_No_Doctor.pdf to s3://library-benjisimon-com/medical/Where_There_Is_No_Doctor.pdf
upload: skills/how-to-find-your-way.pdf to s3://library-benjisimon-com/skills/how-to-find-your-way.pdf
upload: skills/SERE_Handbook.pdf to s3://library-benjisimon-com/skills/SERE_Handbook.pdf
upload: skills/The_American_Drawing_Book.pdf to s3://library-benjisimon-com/skills/The_American_Drawing_Book.pdf
upload: skills/Drawing_on_the_Right_Side_of_the_Brain.pdf to s3://library-benjisimon-com/skills/Drawing_on_the_Right_Side_of_the_Brain.pdf

# Copy these to a Micro SD card

# Make the drive available WSL2
$ sudo mount -t drvfs 'D:' /mnt/d

# Copy the locally downloaded PDF library to the SD card
$ cd pdf
$ tar cf - . | (cd /mnt/d/ ; tar xvf -)

My library currently consists of 62 documents and weighs in at 629 Megabytes. That's about 2% of the space of a $6.00, 32 Gig SD card.

On one hand, the idea of stockpiling digital information is silly. What's the circumstance where resources are so limited that you need a text on say, providing health care without a doctor, yet at the same time you have electricity, a computer and a PDF reader at the ready? If this library is going to save the day, it's most likely because I've found myself at an airport with an extended layer over and nothing to read. And yet, there's something intriguing about this exercise.

Perhaps it's because it helps me appreciate the diverse, yet invisible quantity of wisdom that I depend on every day. Or, maybe it's the fact that I'm able to easily collect, organize and store a massive repository of information on a tiny sliver of plastic the size of my thumbnail.  Practical or not, such a library is a pure wonder.

Friday, June 09, 2023

Garmin and Tasker: Sending an I'm Here message when an activity is complete

One common exercising arrangement is for Shira and I to drive to the gym together. She then attends a class while I use the time to run in the area. Typically, after about an hour hour, we meet back up to compare notes. When she leaves the class, if I happen to be out of sight, she's not sure if I'm done running and walking around the block or if I've opted to overdue it and am still 3 miles away. The courteous thing to do is to text her when I'm done running so she knows where she can find me. After doing this a few times it occurred to me that surely I could automate this process.

A First Attempt: Using the Garmin Tasker App

My first thought was that I could use the Garmin Tasker App to add a notification feature to my Garmin Vivoactive 4 watch. After running I'd click a few buttons on my watch, which would ultimately invoke Tasker, which would send Shira an "I'm here" message and a Google Map link.

I'd been meaning to set up the link between Tasker and my Vivoactive watch, so perhaps this was the perfect example to start with.

One challenge is that the integration between Garmin and Tasker is primitive to say the least. The watch app works by asking the phone to navigate to a synthetic URL. This URL can be intercepted by Tasker and code can be executed. This is a clever work-around but isn't obvious to configure.

A Simple Solution: AutoNotification Intercept Event

While I futzed with the Garmin Tasker watch app, I realized there was an easier solution to my problem. When I finish running I stop the Garmin run activity I started at the beginning of my jog. This records the stats for my run and is now second nature to do. A minute or two after I stop the activity, I get a notification on my phone that "Your activity is ready to view." It occurred to me that I could use the AutoNotification plugin for Tasker to detect this message. I could then send Shira my location based on this event.

To build this out, I need to create a Tasker Profile which is initiated by the AutoNotification Intercept  event.

The tricky is configuring the AutoNotification Intercept event to make it react to the Garmin notification. Thankfully, AutoNotification comes with a nifty "Fill From Current" option that fills in these details for you:

With this profile configured, the rest of the code was straightforward. The AutoNotification Intercept event triggers the Garmin: Activity Complete task, which in turn calls the Text My Location task. You can download the profile and corresponding tasks from Taskernet. You may also need the Text My Location and Where Are You tasks for this to function.

With this code in place, Shira is automatically notified of my location after each run. Life automated; problem solved!

Wednesday, June 07, 2023

Tampa Adventure: Day 4

[Composed 5/22/2023]

This morning we stopped by the kids' school for Grandparents & VIP day. The morning consisted of speeches, short performances by each grade, and a tasty lunch. D, C, and G all sang with their classes. T's class busted out poetry they had written earlier in the semester. Here's one of T's poems that was published for all to see:

An ocean is calmly swaying
It sways in the evening and morning
The ocean is at peace

The sun shines brightly today
The sun is smiling through the clouds
The sun is happily awake

A rose grows in spring
The beautiful rose blooms in the summer
And in fall, rose rests

In the afternoon, we toured the school grounds with the kids and we popped in for various short activities. We built a rocket in science class, learned the parts of the face in Spanish, and created a musical instrument in the maker lab. It was fun flitting around the school with the kids, getting to see where they studied on a daily basis.

After our school experience, we ended up taking D shopping and got him a graduation gift: an upgraded set of binoculars. D is a fan of birding and astronomy, so we're confident the field glasses will be put to good use. We're so proud of you D!

Before we knew it, it was time to head to the airport and our flight back to DC. When we arrived, it looked like some weather may have been rolling in, but it was just some cloud cover which made for a beautiful sunset. I feel like we packed a week's worth of adventure in a few days and am fully spent. Mission: accomplished!

Monday, June 05, 2023

Tampa Adventure: Day 3

[Composed 5/21/2023]

We started our 3rd day in Tampa with an exploration of historic Ybor City. To make this a bit more kid friendly, we purchased an online Scavenger Hunt from Let's Roam. The experience turned out to be a positive one. The scavenger hunt gave the kids little puzzles to track down, which absolutely elevated the experience. This reminded me a bit of our horse and buggy ride hack to explore a city: the kids can enjoy doing something historic without knowing they are doing something historic.

Even if a Let's Roam scavanager hunt isn't available for a city, using Atlas Obscura and the Historic Maker Database (HMDB) it should be possible to compile my own hunt with a mininum of effort. All one has to do is look up a bunch of markers, extract some fact that kids need to determine by standing in front of them, and bam! you're done. I can't believe I've never thought of doing this before.

One near-deal-breaker for the Let's Roam Scavenger Hunts is the cost. The website advertises them as costing about $12.00 *per player*. Not knowing how this all worked, we bought 6 tickets and ended up exploring Ybor City for $72.00. At that price, the game was absolutely not worth it. I reached out to Let's Roam and they explained that it's really $12.00 per device. In a group of 20 something's playing the scavenger hunt competitively, the $12.00 per play may make sense. But in our case, of using it to explore with kids where only Shira had the puzzle on her phone, we needed to only purchase a single ticket. For $12.00, the hunt was perfectly priced. Let's Roam gave me vouchers for 5 future games, so no harm, no foul.

Highlights of Ybor city included seeing chickens roaming around (D is a fan of all birds, even chickens), riding the street car (D got to pull the cord requesting a stop) and stepping into the neighborhood museum, where the kids played dominoes together. We saw various building facades, including the old Cigar Factory which is now a Church of Scientology. As we stood outside the building, someone from the church invited us in for a tour. I'm sure they were being welcome neighbors, but we were in the middle of the scavenger hunt and I wasn't quite sure what to make of the offer.

My biggest highlight of the trip was exploring José Martí Park, a relatively small and unassuming bit of greenspace in the area. What's unique about the park is that it belongs to Cuba. The kids and I were psyched that we got to visit Cuba all without ever leaving Tampa. I couldn't help playing tourist and having the kids pose at the entrance of the park with one foot in Cuba and one foot outside.

After exploring Ybor city, we made our way to T's school play. She was in the production of Willy Wonka, Jr.. As you can probably guess, this is a kids adaptation of Roald Dahl's Charlie and the Cholcolate factory. T had the role of the Candy Man, and she played it outstandingly. We were so proud of her. Unlike the rest of the family, I'd never seen or read Charlie and the Chocolate Factory, so I didn't fully know what to expect. The play had some strange pacing, and so even a few minutes before it ended I was confused about what this was all about. But, when it finally wrapped up, I think I got it. It was a real treat to see T shine and we gave her and her classmates the standing ovation they deserved.

After the play we took my parents, who had joined us for the play, out for Bubble Tea. This was their first time experincing the tapioca powered trend, and I think they really enjoyed it. But, c'mon, who doesn't love bubble tea?