Monday, March 30, 2020

From Office Supplies To Ninja Armaments

Times are tough. Toilet paper, eggs and even flour are scare around here. School is canceled and we're effectively sheltering in place. But here's useful tip: if you have two sheets of printer paper and a few minutes of time, you can have a throwing star. You can also have a boomerang. Welcome to COVID-19 arts and crafts time baby!

I consider my origami skills beginner at best, so I was pleased how approachable the throwing stars tutorial is. Another fun project: make a treasure chest using two origami boxes.

Sunday, March 29, 2020

Make With Care: Protein Packed Hot Chocolate

I've had the idea a number of times: I bet I can make my morning hot chocolate more nutritionally significant by adding whey protein powder to it. My reasoning goes: whey comes from milk, and milk goes with hot chocolate. And the flavor of the chocolate should overpower the whey. The result: a solid hit of protein in a hot and tasty drink.

And yet early attempts at making whey hot chocolate were disastrous. I'd mix the whey and hot chocolate packet easily enough and then I'd add boiling water. The whey immediately formed nasty clumps and no matter how much I stirred the mixture, wouldn't dissolve. And trying to drink clumpy hot chocolate? Yuck to put it mildly.

Still, I tried this a couple of times before I got the hint: adding boiling water to whey is a bad idea. A little Internet research explains:

If it’s whey protein powder, you might want to avoid boiling it with milk. Most of the whey that is sold in market, is acid whey, which will cause curding of milk. It’s not harmful for health, but you might find the end product difficult to consume.

Difficult to consume is an understatement.

All isn't lost, however. If you're a more strategic about it, you can warm up the hot chocolate and whey so that you don't end up with a curdled mess. Here's what's been working for me:

  • Mix the hot chocolate and whey protein powder in a mug
  • Put some water on to boil, and turn on your sink's hot water tap
  • When the tap water is running as hot as can be, use it to fill the mug a quarter of the way
  • Mix the hot tap water with the whey and hot chocolate powders to form a thick sludge. The goal is get the powder completely dissolved at this point
  • Once the water is done boiling, let it cool for a minute, then add it to your mug, filling it to the top
  • Stir and enjoy!

The hot tap water should help both powders dissolve and the recently-boiled water should be hot enough to make the drink enjoyable, but not so hot that it curdles the why protein.

Mmmm....delicious and nutritious.

Monday, March 23, 2020

This Buds For You | Savoring Signs of Spring

Last Friday Shira, the little one and I logged a 6 mile walk along the Virginia side of the Potomac. It was a perfect day and signs of Spring busting out were everywhere. With the steady drumbeat of pandemic news it was nice to step outside and forget that we're in the middle of a global crisis.

Speaking of being outside, over the weekend DC closed the National Mall, something I didn't imagine was possible. But if you surround an area with enough police and National Guard, I suppose anything is possible.

These are truly remarkable times.

Thursday, March 19, 2020

Musings From Within a Pandemic

COVID-19 is turning our world upside down. It seems only appropriate to jot down a few notes to my future self. Self, when you recount these days, folks simply aren't going to believe you.

Thought 1: our 'new normal' has descended upon us at break neck speed. Two weeks ago I was shaking hands with folks at shul and discussing whether coronavirus would be more dramatic than the flu. Last week, we held services with each of the chairs spaced three feet apart, I washed my hands three times during services, and the Rabbi repeatedly reminding us not to touch each other or the Torah. This week, shul is closed indefinitely. We've had friends' Bar and Bat Mitzvah's go from happening, to 'we understand if you can't make it', to called off all in a matter of weeks.

What seems impossible one day, schools closing for months, Metro working tirelessly to lower ridership, DC shuttering all bars and restaurants, is our normal the next. The CDC continues to lower its recommended maximum group assembly count. It's gone from 500, to 250, to 50 and is now at 10. It would shock no one if we awoke tomorrow with instructions not to leave our homes at all.

If a movie came out three weeks ago suggesting a mysterious illness required the world to shutter schools and businesses and mandate groups of no more than 10 assemble, I'd have written it off as ridiculous. Yet, that's where we are today.

Thought 2: the impact on businesses, especially small businesses, is catastrophic. Walking down Columbia Pike and seeing closed business after business is heartbreaking. Being online comes with its own challenges. Suddenly the customers you serve have no income, making your business prospects just as bleak. The more essential the service you provide, the more likely you'll have to offer it at no charge. While this generous gesture will earn you good will, it won't bring in funds to pay your employees or operating expenses.

As terrifying a time as it is for entrepreneurs, it's also every bit exciting. I'm seeing organizations refashion and even invent new business models seemingly on the fly. Companies are seizing the opportunity to help others and continue finding ways to eek out an existence. The very small businesses that are getting crushed are also going to help us get through this. In a small way, it's very heartening.

Thought 3: we're still in the calm before the storm. As of today, we have 14 known cases of coronavirus, a number that seems low when compared to the unprecedented measures being taken (see above). Yet, we're all bracing for this to get bad. Really bad.

Monday, March 16, 2020

Crafting Music | Building and Playing the Canjo

The Canjo is a one stringed instrument that uses a can as a resonator. It has a reputation for being easy to build and easy to play.

A few weeks ago, when 10 year old J was visiting us, we put these claims to the test.

Before J arrived, I'd purchased a couple of Canjo kits and a song book. Surprisingly, I was able to find all the tools we'd need for assembly around the house.

When we had a couple of hours free, we dove into the project.

On the surface, assembly looks trivial. You're doing little more than attaching a can and string to a stick. In practice, we found the build process more on the challenging side. Most of the holes are not pre-drilled, so you need to take your time and assemble with care. This complexity is far more feature than bug. We felt like we were really creating something, not just snapping together a toy. In about 30 minutes, we had the our first of two Canjo's complete. It was awesome.

Playing the thing, like assembly, looks simple. As suggested, we numbered the frets on the Canjo's neck to correspond to the song-book's instructions. In theory, to play a song all one has to do is hold down the string at the number that's listed under the word you're singing, and strum. In practice, it's tricky! Even playing slowly, it takes time to position your fingers and even then, you've got to hold down the string just right to get the best sound. Still, with practice, we were definitely able to make music!

Here's me busting out the Canjo and taking a few attempts at one of the songs in the book:

I know that's screechingly bad, but still, you can hear the tune in there right? That's music. I made music!

As my Brother David noted, the Canjo is effectively an offline version of Rock Band. And he's right; as addictive as it is to try to hit the notes when they are scrolling by on screen, it's even more so when you're the one making the music.

10 year old J really enjoyed the Canjo project, from the measuring and drilling to just noodling around on the finished instrument. If I'd had my act truly together, we'd have hit the local hardware store and would have picked up a set of tools just for him. I would have also picked up some blocks of wood we could have tested the drill and awl on. Not too long ago, it would have been normal for a 10 year old to mess around with hand tools, now it's a novel experience. Want to get your kids to put down that phone? My suggestion: buy them some power tools and other sharp implements, and have them make stuff.

Another suggestion for having a successful Canjo experience: pick up some extra strings at the time you place your order. They are cheap and we quickly broke two of four that were provided. Finally, I'd suggest picking up a digital tuner. This sounds like an extravagance, but $12 for a device which ensures your Canjo sounds as good as it can is a bargain.

So, is the Canjo easy to build and easy to play? Not for me and J it wasn't. But this lack of ease only served to make the project more rewarding. Canjos rock!

Thursday, March 12, 2020

Wrestling with a Google Play Services Error

Last week I got the Android 10 update on my Galaxy S9+. Whoo! Then, a few days later, I went to update a Tasker action that used the Spreadsheet Tasker Plugin and got the following error:

Spreadsheet Tasker Plugin requires one or more Google Play services that are not currently available. Please contact the developer for assistance.

I did the usual things: rebooted my phone, re-installed the Spreadsheet Tasker Plugin, made sure all my apps were up to date, searched Google for others having similar problems and cursed the universe. None of this did any good.

Surely the upgrade to Android 10 broke things. I grabbed an old Android device and installed Tasker, the Spreadsheet Tasker Plugin and did a restore from Google Drive to import Profiles and Actions. To my shock and great annoyance, I got the same exact error. Whatever was going on, it wasn't due to the Android 10 update. Even my crusty Android 8.1.0 phone was failing with the same error.

The only hint that others had into this issue was a couple of threads related to Android Auto. Deep in one of those discussions was this advice:

I had this issue but was able to fix it by going to settings > apps > google play services > storage and then clearing the cache. Once I did that and reinstalled Android Auto I no longer got that error. I uninstalled the app, then cleared the cache, then reinstalled the app.

With nothing to lose, i gave this a try:

For maximum impact, I cleared both the cache and the app's data. After doing this and rebooting, my problem was solved!

So what the heck happened? I've got no idea. But if you get the above error, before you curse the universe, try clearing the Google Play Service's cache & data.

Wednesday, March 11, 2020

One Plaque. So many questions.

I'm walking through Gravelly Point when I notice a plaque affixed to a tree:

It reads:

This is the Isle.
Devoted, Dedicated and
never Quits.

Why is the plaque there? What does the inscription mean? Who went through the trouble of installing it?

Searching the internet for the exact text reveals no hits. None of the surrounding trees have been modified.

It's a good old fashion public poetry mystery. I love it.

Tuesday, March 10, 2020

Review: The Disappearing Spoon

Looking at the periodic table, you could imagine that each cluster of elements would have some sort of story behind them. And you could imagine in the hands of the right story teller, those tales would be riveting.

The Disappearing Spoon: And Other True Tales of Madness, Love, and the History of the World from the Periodic Table of the Elements by Sam Keans takes this hypothesis and kicks it into overdrive. Keans not only takes you on a tour of the elements by way of various tales, he manages to weave them together so the whole book flows.

The range of topics is staggering. For every subject you'd expect to find in this type of book (the discovery of DNA, the advent of transistors) there's even more that are surprising (the impact of Gandhi's involvement with salt; the commoditization of aluminum). Whether you count yourself interested in science or not, I have to think that the storytelling is so on point that you'll find yourself enjoying the book.

The various stories seems to be the right length: detailed enough to let you appreciate the element being discussed, but not so detailed that you'll lose interest. Of course, all these narratives add up and the audio version of the book felt long. But again, thanks to the quality of the writing, this is mere fact, not complaint.

Overall, this was a terrific read (well, technically listen) and one I keep finding myself recommending to others.

Tuesday, February 25, 2020

Catching Some Air at iFly

Two weekends ago we schlepped out to Gaithersburg for a truly unique experience: indoor skydiving at iFly. Ever since we passed the oddly shaped building a few years ago I'd known I'd be back. Personally, I could do without the experience, but I had a hunch that this would be the perfect activity for the various teens and pre-teens in our life.

We showed up at our 11am time slot with quite the crew: two sleep deprived parents, a high school freshman and senior, as well as a 10 year old. We also had a two week old, but his job was just to chill in the stroller.

In an act of sheer courage, I'm proud to say I didn't opt out of this experience. All 5 of us donned flight suits, took in a how-to-fly briefing and strapped on our safety goggles and helmets. Before we knew it, we were queued up in a staging area right outside the massive, cylindrical wind tunnel.

Up first was 10 year old J. He leaned into the wind as instructed and the guide helped position him for maximal stability. After a few moments, he was doing it; he was flying! A minute later, his turn was completed. Then M and P went, with equal degrees of success. Finally, it was my turn.

I approached the entrance to the wind tunnel and tried to relax as much as possible. On one hand, this was obviously safe: I'd have an instructor literally holding me, and I'd be hovering among a wire-mesh floor at waist level. There wasn't anywhere to actually fall to. Still, a small voice in my brain looked for ways to panic. I did my best to ignore it.

I leaned into the tunnel and whoosh, I was in the thick of it! As instructed, I kept my chin up and and looked straight ahead. Between this head position and the massive amount of wind noise, I really had no idea what was going on. As far as I could tell, I was floating with perfect grace. I pretty quickly relaxed when I realized that the whole experience was going to be pretty smooth. I did do a number of rotations which again, that voice in my head wanted to panic about, but I shushed it and just went with it. Before I knew it, my time was up and I was high-fiving everyone in the tunnel.

I switched places with Shira who was watching the baby so she could have a turn. Like the boys, she totally crushed it.

We had bought a package of 10 flights with the intent that we'd each get two flights. I was fine with a single flight, so the kids worked it out who would take a bonus 3rd flight.

At $34 per minute, the experience is sort of ridiculous. And yet, I have to say I'm quite glad we did it. The experience was wholly unique and was enjoyed by adults, teens and pre-teen alike. And personally, I got to push my adventure comfort zone, challenging an experience I'd normally chicken out of. Given the crazy price tag, I doubt we'll be back any time soon. But man, we all got to fly!

Incidentally, the only negative part of the experience came after the fact. While you're flying, the crew at iFly shoots photos and videos. Last night we finally logged in to access these and I was blown away that they charge for the content. You're telling me after I've payed hundreds of dollars for the privilege of 10 minutes of flying time, I need to pay another $30 ~ $60 to get zero-cost-to-you media? Media, by the way, which I'm going to turn around and share with friends and family and will serve as an advertisement for iFly. That just strikes me as sleazy.

With that complaint lodged, I will say that the package we bought did entitle us to 5 free videos and 2 photos. So yes, I was able to get a video of each of us flying without paying anything extra.

So here it is, proof that we really did go indoor skydiving:

Monday, February 10, 2020

Tracking all those Bottles, Diapers and Formula

Now that our days are all about eating, sleeping and pooping, I wanted an easy way to track this. Of course the simplest thing to do would be to download a baby tracking app; I'm sure there are great ones out there. But I couldn't resist rolling my own with Tasker and Google Sheets.

Here's what I did. First, I created a new task to track a generic 'baby event.' The task depends on two useful plugins: Tasker Spreadsheets Plugin and Mail Task. The former plugin allows for writing data to a Google Sheet, the latter allows Tasker to send e-mail. The only thing resembling a complication in this plugin is that I need a Google Sheet friendly timestamp. To get this, I did a string replacement on the %TIME variable to convert '.' to ':'. I then added in the %DATE variable to get a timestamp.

Once I had this general purpose logging task, I made a series of specific tasks. Each one contains a Perform Task action which calls the main task.

Finally, I setup a widget page on my home screen to host a series of Tasker widgets. Each one logs a different event:

Now, logging nap time is as easy as clicking the appropriate icons. If only putting the kid down for a nap was this simple.

Sunday, February 09, 2020

Bottles, Diapers and Formula, Oh My!

It was a fleeting thought. And certainly rhetorical. I didn't mean anything by it, I promise.

The thought: look at my precious baby nephew! How hard could it be to care for such a perfect angel?

Little did I know the universe was going to give me an answer.

Let's step back in time to last Monday at 5:00pm. Shira and I are standing in the baby aisle at CVS trying to figure out which formula to buy. Why are there so many choices? Earlier in the day we'd been asked if we would care for a newborn that may be coming into foster care. We said yes. Then at 4:30pm we'd gotten another call: it was official, the child was coming into care and would be dropped off at our home in an hour and a half. While we didn't know all the particulars of parenting a newborn, we were pretty sure formula was essential. So off to CVS we went.

Now it's 5:45pm. Our foster care placement arrives! I pepper the poor CPS worker with questions, which she can't possibly know the answer to. And just like that, we've got an itty bitty bundle of joy to take care of. I may be biased, but he's exactly as cute as my nephew. Two fine looking young men.

We have no choice but to jump right in! The first night goes OK. Though I would like to find the masochist who thought making baby clothes with 300 tiny snaps was a good idea and give him or her a stern talking to.

The past few days have been a blur of feeding, diapering, bottle washing and Amazon ordering. The boy is perfect. I mean, his idea of when and how much to sleep and eat doesn't typically align with my preferences. But we're in active negotiations on the subject and I'm confident he'll come around to seeing things my way.

Like all foster care scenarios, this is temporary. Especially this early on in the process, there's tons we don't know. But if you see us cruising around town with a baby, know that you're not out of the loop. We're just as surprised to be parents as you are. Or, by the time you see us this little angel may not be in our home.

My suggestion: be careful with the thoughts you send out in the universe. You may get more than you bargained for in terms of a response.

Wednesday, February 05, 2020

Carrying Sunglasses | A Cheap, Simple and Lightweight Approach

I've struggled to find the best way to carry sunglasses. More often than not, they end up at the bottom of the main compartment of my bag, the last place they belong.

I've considered sewing a special pouch for them, or other novel ways to store them in my bag, but I'd yet to find an ideal solution.

A few days ago I realized that the 1/8" elastic cord and double-hole cord locks I'd bought for another project may solve the problem.

I trimmed a short length of elastic, wrapped it around my bag's shoulder strap and put on a cord lock. I then slid the sunglasses half-way through the loop so the bridge of the sunglasses lined up with the cord lock. I then cinched the loop close. To my delight, the sunglasses were securely attached.

Here's the setup in action:

This method is cheap, lightweight, secure and trivial to attach and detach. I can move my sunglasses from a shoulder strap to a lash point on the back of my bag in a few seconds.

The big catch: my sunglasses are left exposed to the elements. Considering my specs cost all of $20, I'll take my chances. I wouldn't recommend you try this with your $200 Oakleys.

Here's to simple solutions!

Monday, February 03, 2020

Bushcraft Map Making Meets JavaSript Hacking

Let's say you wanted map a relatively large area (a few miles square) and had no GPS. How could you create a scale sketch of the area using nothing but a compass, ruler, notebook, pencil and string?

One answer, as this Coalcracker Bushcraft video suggests, is to use a mapping technique referred to as PAUL Mapping. While I wasn't able to figure out what the acronym PAUL stands for, I have to admit the approach is clever. The quick version is this: you record the heading and pace count to notable points in the area. For example:

120°, 80, Stream Crossing
240°, 43, Double Oak
65°, 120, Cabin
280°, 30, Spring

In the above data, I'm suggesting that 'Stream Crossing' is 80 paces, on a bearing of 120°, from an arbitrary start point. The 'Double Oak' is 43 paces, on a bearing of 240°, from the 'Stream Crossing' and so on.

While I imagined collecting up this data was useful, it wasn't obvious to me how this could be turned into a field expedient map. The video goes on to explain: you install a wooden peg and call that your start point. You then use a ruler to measure out a proportional amount of string. Say, 1 inch is 10 paces. To mark off 80 paces you'd unspool a piece of string 8 inches long. Using your compass as a protractor, and string as a measuring device, you can you install the "Stream Crossing" peg 120° and 8 inches from the first peg. You then repeat the process till all points are plotted.

While the explanation is long winded, the technique is straightforward. And when you're done, you have a string and peg scaled map of the area. Want more information on your map? Measure off more points and add them to the map. Because the map is to scale it's possible to make navigation and other assumptions from it.

To experiment with this technique, I wrote some code that turns the logged data into an on screen drawing. You can feed the above chart of information into my PAUL Mapping demo and see the following output:

This was a humbling project. I expected I could turn it out in no time, but got tripped up by the nuances of the HTML canvas and the need to transform points for the various coordinate systems. As it stands, it's still buggy and not rendering the data right. Though I have confidence I'll get this figured out.

Once I get it working, I'll have to try my hand at some local map making.

Wednesday, January 29, 2020

What Should a Runner Eat? A Rock Climber's Answer

What should a runner eat? The Internet, you won't be surprised to learn, has every conceivable answer. From, whatever you want to nothing (aka, intermittent fasting).

My latest take on diet is encapsulated by one of Dave MacLeod's vlogs*: 20 years of depression resolved.

On the surface, the very premise of this video seems like a click-bait mess. Dave's telling the world that he cured himself of depression by making one change: going keto! So there you go, if you want to cure your depression you should stop eating carbs the rest will take care of itself.

Thankfully, that message is the furthest thing from Dave's point. Yes, it's true he changed to a ketogenic diet and it appears to have positively impacted his mental health. But Dave goes to great lengths to make it clear that he lacks evidence to definitively link the two. Also, Dave's choice of ketogenic diet is optimized for his sport: rock climbing. His goal of starting a low carb diet was to cut body fat percentage, which on its surface makes sense. Having less fat to haul up a rock face, and more muscle to help you do so, is an obvious advantage.

I'm not wrestling with depression, nor am I interested in optimizing my body to be in climbing shape. Yet, I still find quite a bit of wisdom in Dave's video. My main takeaway: the answer to what should a runner eat? is to turn to science.

I mean 'science' in at least two senses. First, Dave promotes the idea of running experiments on yourself. This of course, is at the heart of science. Make a change, observe the outcome, document the results, repeat.

For Dave, the experiment was following a ketogenic diet. For me, it's been doing things like focusing on consuming more complex carbs, varying meal times before a run and starting the day with a protein shake. Some of these experiments have had promising results (carbs = good!), others not so much (I'm looking at you, morning protein shake). I strive not to think of these experiments in terms of success or failure; just as more data.

Of course, you need not rely solely on self experimentation. That's the other way science saves the day: with a bit of digging, you can find papers and other resources that have tackled topics you're interested. As a runner, what role do carbs play? A huge one. Which is better for runners, a low or high GI diet? From a performance perspective, it doesn't matter. Should I be avoiding gluten? No. Of course, no one study should be taken as gospel. But they are a far better option than taking some YouTube'ers word for it. In short: Look for evidence, make informed decisions.

I've been collecting up notable articles and papers here:

It's been empowering to look at diet as a journey, rather than a set of must-do-rules.

So what should a runner eat? I'm still not sure, but I'm having fun figuring it out.

Check out Dave's video for inspiration:


*Side note: Dave's vlogs are terrific. He frequently takes questions which you'd expect a flippant response to, and provides a meaningful and insightful answer. I'm not a rock climber, but I love all the wisdom he drops.

Tuesday, January 28, 2020

Google Photos API Giveth, and Then Promptly Taketh Away

Last week I was psyched: the Google Photos API had added the functionality I needed to allow for command line album management. No longer would I clumsily create and add photos to albums in a web interface. No, I'd only have to kick off a single shell script that would do all the work for me.

Using the API, I'd built out the support for querying album and images. And this week I added support for creating albums. It was all going so very well:

# Make a new album
$ gphoto_tools -a album-new -n "gphoto_tool test" 
AHnaBgvE-lqCduDAiPiMmDEIKyeEwcRALqCoK8bn-oOdZFMju06qrT8VbopDIGs-9Wh0XAmZs8ei

# Add heaps of photos to it
$ gphoto_tools -a media-list | sed 's/|.*//' | \
  gphoto_tools -a album-add -i 'AHnaBgvE-lqCduDAiPiMmDEIKyeEwcRALqCoK8bn-oOdZFMju06qrT8VbopDIGs-9Wh0XAmZs8ei'

Except, the above code doesn't work. It gives me a 400 error:

{
  "error": {
    "code": 400,
    "message": "Request contains an invalid media item id.",
    "status": "INVALID_ARGUMENT"
  }
}

I checked and re-checked the album and media IDs. Everything seemed right. I then tried using the API Explorer in the docs and got the same error. Uh, oh.

A bit of searching explained the problem. The Manage Albums Developer Guide includes this fine print (emphasis added):

Note that you can only add media items that have been uploaded by your application to albums that your application has created. Media items must also be in the user's library. For albums that are shared, they must either be owned by the user or the user must be a collaborator who has already joined the album.

In other words: adding previously uploaded photos to an album created by the API is a no-no. Why, Google?! Why?!

I suppose this is some sort of security protection, but I don't get. I'm all for sandboxing apps to protect users, but this seems to go too far. Effectively you can write an app that uploads and organizes photos, but you can't write an app who's primary job is just to organize. This seems short sighted, especially because album creation and organization is totally separate from the act of uploading photos.

And really Google, you can't include this critical limitation in the API reference pages?

Below is the latest version of the gphoto_tools script I've been working on. It includes the operations album-new and album-add, though obviously this doesn't work.

Ugh. You're killing me Google Photos API, you're kill me.

#!/bin/bash

##
## command line tool for working with the google photos API.
## https://developers.google.com/photos/library/guides/overview
##

API_BASE=https://photoslibrary.googleapis.com/v1
AUTH_TOKEN=`gphoto_auth token`
ID_COL=.id

function usage {
  echo -n "Usage: `basename $0` "
  echo -n "-a {album-list|album-get|media-list|media-get|album-new|album-add|album-rm} [-q json-query] [-i id] [-u] [-n name]"
  echo ""
  exit
}

while getopts ":a:q:i:n:vu" opt; do
  case $opt in
    a) ACTION=$OPTARG ;;
    q) QUERY=$OPTARG  ;;
    i) ID=$OPTARG     ;;
    n) NAME=$OPTARG   ;;
    v) VERBOSE=yes    ;;
    u) ID_COL=.productUrl ;;
    \?) usage         ;;
  esac
done

function invoke {
  buffer=/tmp/gphoto.buffer.$$
  curl -s -H "Authorization: Bearer $AUTH_TOKEN" "$@" > $buffer
  cat $buffer
}

function filter {
  if [ -z "$VERBOSE" ] ; then
    jq "$@"
  else
    cat
  fi
}

case $ACTION in
  album-list)
    invoke -G $API_BASE/albums | filter -r ".albums[] | $ID_COL + \"|\" + .title"
    ;;
  album-get)
    if [ -z "$ID" ] ; then
      echo "Missing -i album-id"
      usage
    else
      invoke -G $API_BASE/albums/$ID | filter -r '.productUrl'
    fi
    ;;
  media-list)
    if [ -z "$QUERY" ] ; then
      invoke $API_BASE/mediaItems | filter -r ".mediaItems[] | $ID_COL + \"|\" + .filename"
    else
      invoke -X POST $API_BASE/mediaItems:search -H "Content-Type: application/json" -d "$QUERY" | filter -r ".mediaItems[] | $ID_COL + \"|\" + .filename"
    fi
    ;;
  album-new)
    if [ -z "$NAME" ] ; then
      echo "Missing -n album-name"
      usage
    else
      invoke -X POST $API_BASE/albums -H "Content-Type: application/json" -d "{\"album\" : { \"title\" : \"$NAME\" } }" | filter -r "$ID_COL"
    fi
    ;;
  album-add)
    if [ -z "$ID" ] ; then
      echo "Missing -i album-id"
      usage
    else
      echo '{ "mediaItemIds" : [' > /tmp/body.$$
      sep=''
      while read line ; do
        echo $line | sed -e "s/^/${sep}\"/" -e 's/$/"/' >> /tmp/body.$$
        sep=','
      done
      echo '] }' >> /tmp/body.$$
      invoke -X POST $API_BASE/albums/$ID:batchAddMediaItems -H "Content-Type: application/json" -d @/tmp/body.$$
      rm /tmp/body.$$
    fi
    ;;
  media-get)
    if [ -z "$ID" ] ; then
      echo "Missing -i <id> value"
      usage
    else
      invoke $API_BASE/mediaItems/$ID | filter -r '.productUrl'
    fi
    ;;
  *)
    usage
    ;;
esac

Monday, January 27, 2020

Man-Bag Dump, January 2020 Edition

I think it's interesting to see how my gear choices have evolved (or not). So here it is, a bag dump as we head in 2020. Much of this gear hasn't changed since I last posted on the topic, back January of 2018. Many details about the items below can be found in that snapshot.

I'm currently rocking a Finnish Gas Mask Bag to hold my stuff. It's large enough to fit a Chromebook and other extras when needed, but small enough to use as an every day carry bag. The goofy looking waist strap does a surprisingly good job of making the bag comfortable to wear for long periods. It's also been indestructible, and the snap-like closure convenient to use.

Two new items I've been carrying are a cell phone telephoto lens and a backup phone. I've experimented with carrying a number of photography accessories, but the only keeper has been the lens. It lets me capture photos that would normally be way out of reach from my cell phone. The backup phone has also served me well, especially during oh crap, I thought I grabbed my cell phone but I don't have it moments.

When you look at the list of items below you'll note that one of them is crossed out and handful of them are in italics. That's because I made this list from memory and then went back adjusted it to match the actual contents. As you can see, I could mentally recall most of the contents, but forgot a few obvious items like my car keys and headphones. Also, in my mind's eye, I carry Dayquil and yet I don't.

This little game of concentration stresses a key bit of gear philosophy: it's massively useful to know what you're actually carrying. You may have the most tricked out collection of gear, but if you don't actually know what's in your bag (not to mention, have experience using it) then your kit is far less useful.

This perspective partially explains why I typically bring the same bag, with the same stuff everywhere: I get to know what I'm carrying. I don't have to wonder if I've got a hair tie, or USB C cable or a backup credit card; because if I have my bag, I've got those items. I also know that I'm not carrying a knife or other contraband which will get me stopped by TSA. Sure, it means that at times I'm carrying gear I almost certainly won't use: an SOL Heatsheet while grocery shopping or a Bluetooth keyboard while hiking in the woods. For now, the extra weight and bulk is offset by the confidence of knowing what's in my bag.

Whether it's a photography kit, knitting kit, or any other collection of gear you depend on, I'd encourage you try this memory exercise. If you don't think you are carrying an item, then you effectively aren't. And if you think you're carrying an item and you're not, that's even a bigger recipe of disaster.

Everyday

  • Carabiner
  • Sunglasses
  • Flip & Tumble Bag
  • Buff
  • TIP Flashlight
  • Kleenex
  • Sharpie
  • Everclear Spritzer
  • Hair tie
  • Binder clip
  • Cash
  • Credit Card
  • Mirror
  • Cell phone telephoto lens
  • Lens cloth
  • Clif Builder Bar
  • Fruit Strips
  • Electrolyte Tablets
  • Car keys and Res-q-Me
  • A-SPAN Street Guide
  • Extra 1 quart Ziploc bag to protect my phone from rain

Medical

  • Gloves
  • CPR Mask
  • KT Tape
  • Duct Tape
  • Gorilla Tape
  • Leukotape
  • Ibuprofen
  • Aspirin
  • Claritin D
  • Dayquil
  • Nightquil
  • Benadryl
  • Anti-diarrhea
  • Anti-motion sickness
  • Migraine Medications
  • Ear plugs
  • Dental floss
  • Bandaids
  • SWAT Tourniquet

Electronics

  • Bluetooth Keyboard
  • Battery Pack
  • USB C Cable
  • Micro USB Cable
  • Garmin Watch Cable
  • Micro USB to Audio Jack Cable
  • Micro SD Card and adapter
  • USB C Micro SD Card Reader
  • USB C Host on the Go adapter
  • Backup Phone
  • Earbud Headphones
  • USB Wall Charger

Outdoor

  • Heatsheet
  • Bic Lighter
  • Cordage
  • Tea
  • Water purification tabs
  • Fresnel Lens
  • Aluminum Foil
  • True Liberty Plastic Bag
  • 1x1 meter orange signal panel
  • Large sewing needle

Wednesday, January 22, 2020

Review: The Garmin Vivoactive 3

Shira's been a fan of the Garmin Vivoactive 3 watch for years, and with her recent upgrade to the Vivoactive 4, it meant that I could take her 3 for a spin. I've been using it for little over a month and here's my take: I like it. A lot.

I've dabbled with a number of watches, from the full featured ASUS Zenwatch to the quirky and minimalist Martian Notifier. It's been interesting to experiment in the world of wearables, but ultimately none of the devices stuck. The Vivoactive 3 shows real promise for bucking this trend and looks to be sticking around. Here's why.

First, the Vivoactive nails being a wristwatch. It's comfortable to wear and sleep in. I find that if I plug the watch in while I'm showering, its battery remains topped up enough that I can forget about its power needs. The Direct Watchface let's me configure a clean and informative main display that shows time, date, daily steps, daily distance and next sunrise/sunset. The watch does alarms, a stopwatch and a count down timer as one would expect.

Second, the watch is a joy to run with. Garmin has designed the flow of recording an activity well, including smart use of both on screen controls and the physical button. I like that I can setup the real-time information screens to be as verbose or terse as I want. Currently, I've got two screens worth of four fields each. On screen one, I see elapsed time, time of day, distance and pace, while on screen two I see heart rate, ascent, battery percent and calories burned. And when I inevitably decide that this is too much noise on my wrist, I can easily dial this information back to just time and distance.

The Vivoactive 3 has a pretty complete set of 3rd party addons such that any feature I've wanted that wasn't built in, I've been able to add. For example, Garmin neglected to offer battery percentage as an activity field (something that's critical for a full day of hiking or running), yet this was easily addressed by installing the battery data field.

The Garmin Connect software seamlessly integrates with 3rd party services. So while I've stopped using the Runkeeper app on my phone to track my runs, Garmin still keeps Runkeeper.com up to date with my activities.

Finally, the watch shows real promise for use while hiking and backpacking. Admittedly, I've yet to fully test this behavior. However, the dynamic.watch app and website allow you to push a GPX map to your wrist so you can visually track your progress. This combined with the myABC widget, which gives you quick access to the watch's altimeter, barometer and compass, mean that the watch is useful for both tracking and navigating in the backcountry. While the Vivoactive 3's battery is great for day-to-day use it doesn't pack enough juice to power the GPS for extended recording (say, 12+ hours). The watch does, however, continue to function when charging. So one should be able to plug the watch into a USB powerpack while in the field to continue to use it as both nav aid and tracker.

I'm still wrapping my head around the fact that the watch functions so independently from my phone. I can now hit the trail without my bulky Galaxy S9+ and yet record stats of my journey and leverage a GPS to find my way. More realistically, I could leave my Android back at the car and take my credit card sized M5 with me in a pocket. This gives me a way to place calls and send text messages without the heft of my main phone. The big catch: I like taking pics while I'm out. So while I could run with either a slimmed down phone or no phone at all, I don't see myself doing this any time soon.

Two features which are nice, but haven't prove their worth yet are the integration with Tasker and the health stats functionality.

I was psyched to see that the watch does at least basic Tasker integration. Yet, I haven't found a scenario where I need this capability. Though it does make the programmer in me happy to know it's there.

Knowing that I took 16,135 steps yesterday, burned 3,307 calories and had a resting heart of 48/bpm is certainly interesting, but I'm not sure what practical value any of this is. Yes, the watch tracks my sleep. But it's no surprise that on nights I stay up late programming I feel zapped the next day, and when the weekend rolls around and I can log extra zzz's I feel better. I'm already motivated to run so the gamification of my health data feels more like a sleazy trick than useful life hack. Still, the watch collects an impressive amount of the data and perhaps I'll think of a clever way to put it to use.

In short, the Vivoactive 3 has served me well over the last month and I can see why Shira's a fan of the device. Now I just need Garmin to come up with a Vivoactive 5, so I can get Shira's 4 as a hand me down.

LinkWithin

Related Posts with Thumbnails