Saturday, December 30, 2017

Four Days of Fun with Four Amazing Kids from Boston

What a whirlwind week it's been! It all started Sunday night when the 4 Boston Kids arrived (thanks to their nanny for escorting them on the plane!).

Our first full day of play was Monday, Christmas. We didn't have a whole lot of options for open indoor activities. Even the traditional Chinese meal was out, as DC no longer has a Kosher Chinese restaurant. One classic choice in the area is to visit the Botanic Gardens which are open every day of the year. Not only are the gardens open, but there's a holiday train display as well as models of DC monuments and sites to oggle. Everybody found something to enjoy there. The kids relished seeing the Thomas themed trains in the model train display, and enjoyed playing 'eye spy' with a series of stamp-stations. I enjoyed the impressive craftsmanship of the models and loved being among the plants. And Shira was happy we weren't out in the bitter cold trying to hike.

After the gardens we made our way to a good friend's house for a Christmas celebration. Our friends' two kids got along with the Boston Four quite well. At one point I peeked in on the kids playing in the basement and saw a full-scale nerf / sword battle going on. Alas, I had to be a responsible adult and return to the table, but they looked to be having a grand time! Don't feel too bad for me, as an adult I had nearly unlimited access to the delicious Christmas cookies that were served for desert. So tasty! As if the day of fun weren't enough, the toys that the kids got in a gift exchange were the icing on the cake.

Monday night was the only near catastrophe of the trip. No, we didn't need to go to the ER with a child. Instead it was Shira's sanity on the line. At one point after dinner, Shira noticed that our newly painted kitchen wall was smeared with a unknown red food. Her first thought was baked beans, which we had had that night. None of the children volunteered to explain how the wall had gotten "painted." Shira put the kids to bed with a thinly veiled threat that a new kitchen might be necessary. I busted out a Mr. Clean Magic Eraser. In a few minutes, I had the wall back to spotlessly clean. I'm not sure what they put in that magic eraser, but I think it saved my marriage, my kitchen, my bank account and possibly 4 children. If you have kids, it is a must have.

Tuesday morning Shira and I intended to work, while the nanny had the kids do homework. I worked exactly 14 minutes that day, so yeah, my plan of logging a few hours of work was laughable. Instead, I spent time giving the kids breafast and reading with the girls. By mid morning Shira was home and it was time to head out. We settled on the Udvar Hazy Air and Space Museum for the day's activity. While the kids liked all the planes (Dovid was quite impressed with the SR-71 Blackbird), and of course, the shuttle, I think they were a little disappointed with the lack of hands-on activities. Dovid kept wanting to know when we'd get to go *inside* the planes (uh, sorry Dovid, that's not how it works). They all enjoyed going up in the tower and watching the planes land at nearby Dulles Airport.

Wednesday was a truly adventurous day. We hit the road with some friends and visited Skyline Caverns. The original plan was to do Luray Caverns. I'd been there before and recalled that they were essentially the same temperature underground all year. That seemed like the perfect way to spend a freezing cold day. Ultimately, we opted for Skyline over Luray because (a) we'd never been there before, (b) the presence of anthrodite and (c) it was 30 minutes closer than Luray. It turned out to be an excellent choice.

Before leaving the house, the kids asked for flashlights, which if you're descending into a cave seems like a reasonable request. I ended giving each of them a light up necklace with a keychain light attached. This turned out to be a good recipe, as the kids could play with their lights during the tour without bothering other participants.

For about the first half of the Skyline Caverns tour it definitely felt like Luray's little brother. Yes, the rock formations are amazing, but they aren't at the scale of Luray's. But then you enter the section of the cave with anthrodite deposits. Wow. I'd never seen anything like that before. This cave definitely stands on its own as a truly unique and must see location, and being closer to DC definitely gives it bonus points if you have younger kids to keep occupied in the car.

After visiting the cave and talking with the kids, it became clear what their highlight was. Was it the amazing flowstone or breathtaking anthrodite crystals? Nope, it was this fun fact:

[Skyline caverns] is home of the Valentine beetle which is believed to be only found in these caverns. According to our tour guide, the Valentine Beetle lacks optic nerves so it is completely blind. Seven beetles were found by scientists, but when they were exposed to outside light and temperatures, all seven beetles died; none has been found ever since. The Valentine Beetle is now believed to be extinct. The said beetles are now on exhibit at the Smithsonian in Washington, D.C.

Or as our tour guide put it, on the same day scientists discovered a new species, they also caused it to go extinct. Oops. Yeah, the kids just loved this story.

Thursday was supposed to be another partial work day for me. But yeah, this time I didn't even log 14 minutes of work. Who has time to work when there are four fun kids to play with (and feed and help with their homework). Tzipora drove a hard bargain with me: in exchange for me listening to her read English and Hebrew, she'd get to show me the Brave story on her iPad. And so she did. It was apparently a short summary of the movie, which now I'm really interested in seeing.

Thursday afternoon we went to a production of Charlotte's Web at Imagination Stage. I have to admit, I had pretty low expectations. We had kids ranging from 8 to 4 years old, so I wasn't sure it was going to hold everyone's attention. On top of that, the tickets weren't particularly cheap, so even if it was good, would it be that good? As soon as the lights went down and the play began, I knew this was going work. The play held the kids rapt attention. The music, the humor, the costumes; it all worked to make a great show. The kids had seen the movie, so they went in knowing the plot, still, they truly enjoyed it.

For my part, I thoroughly enjoyed it as well. I'm sure we read Charlotte's web in school or something, as I know part of the story. But I realized as the show was finishing up, I didn't know how it ended. What a powerful and profound story. I can see why it's such a classic. I also enjoyed the technical nature of the show, with nearly all the actors playing multiple rows to perfection.

Of course we all loved watching the aerial acrobatics performed by 'Charlotte.' It's amazing what the actress managed to accomplish using nothing but one long piece of fabric, remarkable strength and I'm going to guess, tons of practice.

Thursday night we celebrated Tzipora's 7th birthday a couple of days early. She was in charge of designing and decorating her birthday cupcakes, which she did to perfection. She selected yellow frosting with sprinkles in the shape of a 7. When asked, she explained that yellow was her fourth favorite color. Who has a fourth favorite color? (Shira was out of blue food coloring, which is how we arrived at yellow).

Throughout this trip we had a new challenge to deal with, helping Dovid managing his Type I diabetes. By 'we' I firmly mean Shira. After a lesson from the nanny, Shira took over finger-sticking and shot-giving responsibilities. She also carefully architected Dovid's meals to smooth out his sugar levels as much as possible. I'm convinced that for Shira it was one long video game, with the glucose monitor relentlessly keeping score. All throughout the day and night Shira kept an eye on that number, practically willing it to behave. I naturally helped by mostly staying out of the way, and having restful sleep when she couldn't (yeah, I'm not sure how that helped, but I did it anyway). Dovid is such a trooper when it comes to his new diabetes routine. He's just rolling with the whole thing so well. Of course, it's not all bad, he did get a couple of chocolate chip cookies before bed one night because he was trending low.

All in all, it was a truly fun and adventurous week for all. The kids are already talking about summer time. As for me, I'm going to need a couple days to recover before I can start planning our next adventure.

Selected photos below. Full album for Mom and Grandmas found here.

Tuesday, December 26, 2017

The Four Things Keeping Us Busy This Week

For the next 55 hours or so, we've got the 4 Boston Kids in town. Today we hit the Air and Space museum. Yesterday we did the holiday train exhibit at the National Botanic Gardens and chilled with a friend. Tomorrow the adventure continues!

Way more pics and stories coming soon!

Friday, December 22, 2017

Weekly Discoveries of Biblical Proportions

Last week I tripped over The Sound You Need's YouTube channel and found a whole bunch of funky new tunes to enjoy. My favorite, however, has to be Wolf Country by Durante. Wolf Country is proof that you can overlay a biblical sermon on a beat and get a sweet track. Well done Durante.

I'm also really digging Old Man Canyon's Wiser. Though I have to admit that I was a surprised that more of their music didn't resonate with me. But hey, maybe it'll do it for you?

Rock out to all the tunes here:

Thursday, December 21, 2017

Three Tasty Treats - A Honey and Two Teas

At the end of October I added the zest of my Etrog from Sukkot to honey and plopped it on the window sill. For nearly a month, every morning I flipped the container over, in attempt to fully infuse the honey. I then strained the honey into a fresh container:

And the result was: honey with a hint of etrog. It worked! Seriously, the honey definitely took on the distinct flavor of an etrog. I suppose to anyone who's done infusing before this is probably obvious. But to a newbie, I'm really surprised how well it worked.

I also tried infusing some basil and mint into honey, and that worked as well (though I'm not sure how badly I need basil tasting honey).

Of all the experiments I've done with etrogs this one has been the most successful. It was easy to do and the results were tasty. As a bonus, unlike say etrog liqueur, it's quite practical.

I'm a sucker for crazy interesting sounding teas. I keep an eye out for them when I travel, which explains why I've got anise, cactus and even oregano (yes, oregano) tea in my cabinet. Sure, most of the flavors end up being an acquired taste, but that doesn't stop me from continuing my search. A friend who was traveling to Jordan embraced my tea challenge and sent me a variety of boxes. One of the stand out selections was this guy:

First off, I love that the only bit of English on the top of the box is the directive to not add sugar. One has to ask, what exactly happens if you add sugar?

Fortunately, half the box is English so it was trivial to figure out what the flavor of the tea was. Any guesses?

It's Cumin and Lemon. Yes, cumin. Sniffing a tea bag was like sniffing a teaspoon of cumin you're about to add to that chili recipe. I have to admit, I didn't have high hopes for this tea.

I boiled some water, dropped in a tea bag and let it sit for 3 minutes. And then I took a sip.

Whoa! I can honestly say, this tasted unlike any tea I'd ever had. The flavor that came immediately to mind was that of chicken soup. The strong cumin flavor from the dry tea was gone, but it was replaced by a salty, savory flavor. I was sure that the ingredients included chicken stock, but no, it's just cumin, citric acid and salt. I'd never seen tea with salt in it, but the salt content was small enough that the box claims there's 0 grams of sodium present:

I'm not exactly sure what pairs best with cumin tea, but I'm thinking that it would be especially tasty on a chilly night while camping.

Naturally, I had to google Cumin Tea to see what others had to say about this drink. And what do you know, it's a cure-all food. From weight loss, to reducing stress, to killing intestinal worms, cumin tea does it all. I can't guarantee any of the health benefits, but I can promise you a unique tea drinking experience.

Another stand out tea from my friend's trip to Jordan was this guy:

So that picture didn't mean much to me. But at least I think it's safe to add sugar. Flipping the box over, the English name didn't exactly clear things up. It's called Zhourat Shamia. The ingredient list did look promising:

It isn't often one gets to drink Lemon Flowers, Marshmallow Flowers and Damask Roses. I brewed up a cup of tea and took a sip. It was far milder than the cumin and lemon, but still unique. And most importantly, quite delicious. I think what makes it work for me is the green tea base with the flavors of the flowers kicking things up a notch. I want to love herbal teas, but most of them just don't do it for me. Give me a good o'l cup of black Lipton, thank you very much. But Zhourat was tea'y enough, that I could really enjoy the additional favors.

A quick search on the web showed me that I wasn't the only discoverer of Zhourat tea. Yulia had a similar experience, though she made her discovery by actually moving to Lebanon. Me, I just had to have a friend visit Jordan.

A search for Zhourat tea turned up another oddity, mainly an article in NIH's pubmed database. The scientific paper in question reports that a number cultures have recipes for Zhourat tea, but thanks to the research conducted, they confirmed that all variants have enough in common to justify the medical claims that go with the drink. Look at that, another super health food to add to the checklist.

Next time I'm at a truly authentic middle eastern restaurant I'll have to keep an eye out for Zhourat tea. And you should too. This is a winner.

Wednesday, December 20, 2017

Helping bash and tinyscheme get along | Friendlier command line execution of scheme code

I was looking for a cleaner way to manage SDR Touch radio frequencies and I thought I'd give Scheme S-expressions a go.

I quickly arrived at this 'format':


(("Arl,VA"
  (166.9 "DC Police?")
  (166.7 "Dc Police?"))

 ("OnABoat"
  (462 "FRS Low")
  (467 "FRS High")
  (457.5 "Marine1")
  (467.5 "Marine2")
  (467.7 "Marine3"))

 ("NCL"
  (457.5250 "Bridge Ops")
  (457.5500 "Engineering")
  (457.5750 "???"))

Because I programmed the solution in Scheme, turning this basic set of S-expressions into the required mess of XML was straightforward. You can find the solution here. I have to say, it was a real delight using S-Expressions to solve this one. XML, JSON and raw text all jumped out at me as options, but in this case, S-Expressions were the clear way to go.

I coded this solution on my Android device using Termux, emacs and Tinyscheme.

While the solution worked great under emacs' interactive scheme mode, I decided I wanted the ability to run the conversion command from a bash prompt. While tinyscheme has some basic command line handling, it was lacking a few details, such as the ability to get the script's working directory. This may seem like an obscure requirement, but with this value I'm able to reliably (load ...) files without worrying about running the script from a specific directory.

To make tinyscheme more command line friendly, I created tsexec, a small script below that kicks off tinyscheme with a number of helpful functions predefined. These include:

(cmd-arg0) - returns the name of scheme script that is currently executing.

(cmd-args) - returns the list of command line arguments passed to the currently executing script.

(cmd-dir . path) - when invoked with no arguments, returns the directory the currently executing script lives in. When an argument is provided, the value is prefixed with the source script's directory.

Using these functions I'm was able to write a command line friendly version of my scheme code to generate XML.

(load (cmd-dir "utils.scm"))  ;; utils.scm is now imported in a location independent way

(define (make-presets frequency-file xml-file)
  (with-output-to-file xml-file
    (lambda ()
      (with-data-from-file frequency-file
       (lambda (data)
  (show "<?xml version='1.0' encoding='UTF-8'?>")
  (show "<sdr_presets version='1'>")
  (for-each (lambda (category)
       (show "<category id='" (gen-id) "' name='" (car category) "'>")
       (for-each (lambda (preset)
     (show "<preset id='" (gen-id) "' ")
     (show "        name='" (cadr preset) "' ")
     (show "        freq='" (freqval (car preset)) "' ")
     (show "        centfreq='" (freqval (car preset)) "' ")
     (show "        offset='0'")
     (show "        order='" (gen-id) "' ")
     (show "        filter='10508' ")
     (show "        dem='1' ")
     (show "/>"))
          (cdr category))
       (show "</category>"))
     data)
  (show "</sdr_presets>"))))))
  

;; Simple argument handling below
(cond
 ((= 1 (length (cmd-args)))
  (make-presets (car (cmd-args)) "SDRTouchPresets.xml"))
 ((= 2 (length (cmd-args)))
  (make-presets (car (cmd-args)) (cadr (cmd-args))))
 (else
  (show "Need to provide frequency and output file to continue.")))

Here's a few screenshots of me running this code:

Termux has a handy add-on that allows you to invoke shell scripts from your phone's home screen. I'm thinking tsexec may be an ideal way to connect up this short-cut ability to tinyscheme.

Finally, here's the source code for tsexec. Enjoy!

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

##
## Execute a tinyscheme script. Setup various functions that can
## be used to access command line args and such
##

if [ ! -f "$1" ] ; then
    echo "Refusing to run non-existant script [$1]"
    exit 1
fi

CMD_DIR=$(pwd)/$(dirname $1)
CMD_ARG0=$(basename $1)
CMD_MAIN="$CMD_DIR/$CMD_ARG0"
shift

CMD_ARGS=""
for arg in "$@" ; do
  CMD_ARGS="$CMD_ARGS \"$arg\""
done


if [ ! -f "$CMD_MAIN" ] ; then
    echo "Failed to derive CMD_DIR, guessed: $CMD_DIR"
    exit 2
fi

wrapper() {
  cat <<EOF
;; Autogenerated scheme wrapper script
(define (cmd-arg0) 
  "$CMD_ARG0")

(define (cmd-dir . path)
  (if (null? path)
      "$CMD_DIR"
      (string-append "$CMD_DIR/" (car path))))

(define (cmd-args)
  (list $CMD_ARGS))

(load "$CMD_MAIN")
EOF
}

wrapper > $HOME/.ts.$$
tinyscheme $HOME/.ts.$$
rm $HOME/.ts.$$

Tuesday, December 19, 2017

Behold! The Custom Made Tactical Yoga Mat Carrier

I'm not exactly sure how my original request went down, or how I got so lucky to receive this. I must have seen the pretty and functional yoga mat bag that Dawn made for Shira and remarked that I needed a manly version. And thus was born the Tactical Yoga Mat Carrier 2000™:

Features include:

  • Fits longer style yoga mats perfectly
  • Two generous pockets for holding keys, phone or workout nutrition
  • Authentic Woodland camouflage to help maintain maximum testosterone levels while attending a beginner's Yoga class
  • Two inch wide strap for the ultimate in comfortable carrying
  • Quick release buckle to decrease the odds of a catastrophic failure while accessing mat
  • NATO approved MOLLE Webbing attachment points to allow for easy accessory expansion
  • Discrete button attachment point allows for low profile carry of badges and other sensitive material
  • Earth Friendly, as it's made from authentic upcycled military materials*

Seriously, this bag rocks! And after having dabbled with a sewing project or two, I'm even more amazed at the flawless craftsmanship. So well done, Dawn!

*Thanks Grant for donating one of your old uniform shirts to the effort. You rock!

Monday, December 18, 2017

Insulin Calculations for the Lazy and Math phobic

In another week we'll have our Boston Nieces and Nephews in town. This will be our first solo trip with Dovid since he was diagnosed with Type I diabetes. In the notes my Sister-in-Law passed us regarding his care, she included a worksheet on how to calculate how much insulin he gets. Naturally, I converted those manual instructions into a Google Sheet.

If you find yourself in a situation where you need to caculate insulin dosage, perhaps it will be useful? If so, make a copy of the sheet here and plugin in the appropriate values under the 'Settings' section.

Happy Carb Counting!

Disclaimer: Dammit Jim, I'm a computer programmer, not a doctor! So yeah, don't use the above sheet without first carefully verifying it.

Wednesday, December 13, 2017

Overrun Inbox? Not today. Bulk Gmail Management from the Command Line

Every so often an errant program (often powered by cron) will flood my inbox with messages. I use Google to manage my e-mail, so this isn't typically a difficult problem to solve. I run a search like this:

label:inbox subject:(cron /usr/local/bin/badscript)

While Google only shows me the first hundred messages there's an option to select all messages, even those not visible. I click this option, hit the archive button, and bam! my inbox is back to usable.

There's a catch to this: the 'select all' option does not exist in Google's Mail app. This means that if I find myself with a overrun inbox and I'm away from a desktop computer, I'm out of luck.

This happened to me after my last vacation. I found myself on an airplane with the chance to respond to e-mail, but an inbox so overwhelmed with cruft that navigating it was painful. While I made do in that scenario, I promised myself I'd come back to this problem and solve it for good. Here's that solution.

I give you: gmail_tool. gmail_tool is inspired by youtube_tool, a command line program for managing YouTube playlists, but with an emphasis on Gmail. In the same way youtube_tool is a curl command line wrapper around Google's YouTube API, gmail_tool connects up curl and the Gmail API.

Here's some examples of it in use:

# Get a list of all messages from John that talk about Linux
# Note that the -q option takes in any valid search that works
# inside of the GMail Search Box. This is powerful stuff.
$ gmail_tool -a list -q "from:john subject:(linux)" 
....

# Google wants label changes to reference IDs, so get this list of IDs
$ gmail_tool -a labels  | head 
Label_11:designer request
Label_9:chatter
CATEGORY_PERSONAL:CATEGORY_PERSONAL
Label_3:foo stuff
Label_10:cron
IMPORTANT:IMPORTANT
CHAT:CHAT
SENT:SENT
INBOX:INBOX
TRASH:TRASH

# Remove a message from my inbox 
$ gmail_tool -a update -i 1604fdca6faf6497  -r INBOX

# Loop through all messages that meet some search criteria,
# file them under a label and remove them from the inbox.
# The -p insures that all pages of the results will be retrieved,
# not just the first page.
./gmail_tool -p -a list -q 'label:inbox subject:(cron update-foo)' | \
   sed 's/:.*//' | \
  while read id ; do gmail_tool -a update -i $id -l Label_9 -r INBOX ; done

That last recipe is the one I need to rescue my inbox from an exploding script.

I can't tell you how psyched I am to add this tool to my toolbox. I'm actually looking forward to the next time I SPAM myself by accident. There's nothing quite like that feeling of kicking off a single command that replaces tedious work.

You can grab the scripts that power the above here. Feel free to use and customize them as you see fit.

Tuesday, December 12, 2017

Good Friends, Good Hiking and an Epic Simcha

Man, what a weekend.

It started with a delicious lunch with my college buddy Jen in NYC. She works in Times Square, and after lunch, we took a stroll through the surrounding streets. I've been to the area a number of times now, but I still stand in amazement at the diversity and energy in the area.

After lunch, we made our way to White Plains, NY, where we would be celebrating Ariella's Bat Mitzvah! This was a momentous occasion for us, as this was the Bat Mitzvah of the daughter of Shira's oldest friend. Literally, oldest friend (they've known each other since they were born). Shabbat Morning, Ariella just killed it. She lead services, read from the Torah and did a masterful job with her Haftarah. Services were held at Bet Am Shalom, a Reconstructionist shul. I can't recall ever having attended a Reconstructionist service, and I have to admit I was expecting it to be wildly different from the Conservative shul I attend. Instead, I found that the services were nearly an exact match.

Ariella and Keith, both of whom spoke about the weekly Torah portion, had an additional challenge to deal with. Mainly that the topic of the reading was the story of Tamar. As Keith deftly put it, the story of Tamar has less in common with the folksy bible stories you may recall, and more in common with Game of Thrones (and I don't even watch Game of Thrones). Both of them found powerful lessons in this R-rated story.

The Rabbi who conducted Ariella's Bat Miztvah, not only officiated at Becky and Keith's wedding, but officiated at Becky's Bat Mitzvah. With all four grandparents in attendance, and with a set of great grandparents there, one couldn't help but be amazed at the connections on display in front of us. Truly, l'dor v'dor.

Saturday night, we tore up the dance floor and partied as best as a bunch of old folks could (though, can you really call yourself old when Ariella's great-grandparents, who have been married for *74 years* were in attendance?). Mostly we couldn't stop being amazed how the itty bitty bundle of joy we still remember had turned into the young woman in front of us, dancing with her friends. The night, like the service earlier in the day, was just perfect.

As I told Becky, if we ever get a foster placement that needs a Bar/Bat Miztvah planned, our first phone call is going to be to her. What an amazing job she did!

Sunday morning, the responsible thing to do would have been to pack up and head home. But thanks to a friendly salesman at Westchester Road Runner, I had got my hands on a map of the Rockefeller State Park Preserve. The trails were just too enticing not to explore. And so with a couple of inches of snow on the ground, we made our way through this winter wonderland. Sure, it was 35°F, but the perfect snow covered scenery more than made up for the chill in the air.

After a couple of hours of hiking, it was time to call it a trip. I definitely feel like there's more to explore at the Preserve, so I'll be lobbying to get back if we find ourselves in the area.