Friday, August 31, 2018

PawPaw Season Has Begun

Last year I explicitly went hunting for them. And yesterday I nearly tripped over one while running on Theodore Roosevelt Island. Check him out:

That there is a PawPaw, and the tree he came from. And he was delish! They're not called Hillbilly Mangos for nothing.

So if you're in the DC area, keep an eye out. These are a treat!

Thursday, August 30, 2018

Simple but Works | How Not To Forget Your Mouth Guard When Traveling

After forgetting to bring my mouth guard on a few trips I realized I needed some sort of strategy so I'd be sure to pack it. The problem is that we typically pack the night before a trip, which means that I have to remember to add the mouth guard to my bag in the morning. I considered having a second mouth guard made so that I could keep one permanently with my travel stuff, but those bad boys are expensive!

Instead, I found a far cheaper and simple strategy. Here, check it out:

In my standard travel equipment pile is an empty mouth guard container with a string threaded through it. When I'm done packing up my bag, I girth hitch the container to the outside of whatever bag I'm taking.

In the morning, or whenever I grab my bag to go, I can't help but see this reminder. I then pack my actual mouth guard and return the empty case back to my travel pile.

It's a simple procedure, but man, has it been effective.

Wednesday, August 29, 2018

Fun with Tyvek | I Made It, but I've Got No Idea What It's Good For

In a fit of inspiration I grabbed a Tyvek mailer and flipped it inside out. I also grabbed my Spiderman Lunchbox:

I crammed the lunch box into the bag, flattening the bottom out:

With this bag design, two triangles appear in the base of the bag. I marked them off with pen, and then went over the lines with the sewing machine:

I sliced off the now extraneous triangle and flipped the bag inside out:

I now had myself a neat little sack. The challenge: how to turn this into a functional bag? It needs a closure and perhaps straps.

One attempt I made was to add a barrel hitch into the mix:

While functional, it's too fragile to use in a real-life context.

I'm calling the project incomplete: it's interesting and shows promise, but I'm not sure for what. Any suggestions on where to take this?

Tuesday, August 28, 2018

It Ticks! The Trip Timer Gets Deployed

First there was the prototype. Then hardware failures, followed by hardware successes followed by software failures. But finally, the project is complete: I give you my simple car trip timer:

The timer is hands free, as it's plugged into a USB outlet and turns on when the car turns on. The ESP32 chip and 2.4" display are overkill for this project, but it does give me room to add some cool features. More importantly, it's been a chance to get to know a very functional yet easy to work with set of components. I could see going back to this platform for future projects.

I'm not in love with the color scheme I've currently got going. But fixing that is another project for another day.

I also struggled to develop some sort of case to hold the device, but ultimately left the components bare. This seems to be OK in the car, but future projects will call for a case. Perhaps this is my excuse to buy a 3D printer!

I'm mostly excited that I was able to take this project from vision to functioning device. Hurray for follow thru!

Here's the source code that powers this timer:

/*
 * See:
 *  https://raw.githubusercontent.com/adafruit/Adafruit_ILI9341/master/examples/touchpaint_featherwing/touchpaint_featherwing.ino
 * https://learn.adafruit.com/adafruit-2-4-tft-touch-screen-featherwing/resistive-touch-screen
 */
 

#include <Adafruit_STMPE610.h>
#include <SPI.h>
#include <Wire.h>      // this is needed even tho we aren't using it

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ILI9341.h> // Hardware-specific library
#include <Adafruit_STMPE610.h>

#define STMPE_CS 32
#define TFT_CS   15
#define TFT_DC   33
#define SD_CS    14

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS);


long started = millis() / 1000;

void setup(void) {
  Serial.begin(115200);

  delay(10);
  Serial.println("Timer Time!");
  

  if (!ts.begin()) {
    Serial.println("Couldn't start touchscreen controller");
    while (1);
  }
}

void loop(void) {
  long remaining = (millis() / 1000) - started;
  int hours = remaining / (60 * 60);
  remaining = hours == 0 ? remaining : remaining % (hours * 60 * 60);
  int minutes = remaining / 60;
  remaining = minutes == 0 ? remaining : remaining % (60 * minutes);
  int seconds = remaining;

  int fg = textFg(hours, minutes, seconds);
  int bg = textBg(hours, minutes, seconds);
  int y   = (tft.height() / 3) - 60;
  
  tft.begin();
  tft.setRotation(2);
  tft.fillScreen(fg);
  tft.setTextColor(bg);
  tft.setTextSize(7);

  showTime(tft, hours, "h", y);
  showTime(tft, minutes, "m", y + 90);
  showTime(tft, seconds, "s", y + 180);
  

  delay(750);
}

void showTime(Adafruit_ILI9341 tft, int value, String unit, int y) {
  tft.setCursor(40, y);
  if(value > 0) {
    if(value < 10) {
      tft.print("0");
    }
    tft.print(value);
    tft.print(unit);
    tft.println();
  }
}
int textFg(int hours, int minutes, int seconds) {
  int red = minutes/2;
  int green = 61 - minutes;
  int blue = 31;
  return ((red) << 11) | ((green) << 6) | blue;
}

int textBg(int hours, int minutes, int seconds) {
  return ~ textFg(hours, minutes, seconds);
}

Monday, August 27, 2018

Blackwater Falls Adventure - Days 1 and 2

[Composed 8/18/2018]

You might think that a trip to West Virginia following a trip to Costa Rica would be a recipe for travel envy; but as I've found out first hand, you'd be wrong. Yesterday morning, I picked up two of our nieces from Boston and flew them to DC. There I found Shira in a packed-to-the-gills car ready to whisk us off to Wild and Wonderful West Virginia. Specifically, we were headed to Blackwater Falls State Park. With Friday afternoon summer traffic, it took us nearly 4 hours to get there.

I had my expectations set low. As long as there were a few trails to hike on, a lake to swim in and a cabin to sleep in, I'd be willing to call this adventure a success. Our first stop, however, changed all that. We arrived at the Lodge in Blackwater falls and checked in. After check-in, we walked outside to to catch a view of the surrounding area. Whoa! What I saw there was quite remarkable. The gorge and surrounding area were massive and picture perfect. I'd expected the waterfall to be the highlight, but what I was seeing in front of me blew me away.

The cabin we rented also exceeded expectations. It was absolutely pristine, and the perfect size to share with another family (who arrived today).

After Shabbat dinner, we called it a night. We were all wiped from a day of travel, and I was especially excited to start exploring the next day.

The weather forecast called for rain in the afternoon, so our first order of business was to get a little lake time in before the weather got too nasty. Shira took C. out in a pedalboat, and I took G. C. can actually reach the pedals, so I think Shira may have chosen wisely! After 30'ish minutes of puttering around the lake, we made our way back to shore and started a hike.

For the first 15 minutes of the hike I found myself hurrying G. along and then I mentally checked myself: what the heck was I rushing for? So G. wanted to go slowly, why not embrace the slow? So I did. And it was delightful! I ended up seeing the forest through a new lens; one where I could notice the little things like patches of mushrooms or an especially well hidden grasshopper. And G.', to her credit, may have gone slowly, but kept on plodding forward. I looked tonight, and I'd walked 24,809 steps! That's a lot of steps for a little 5 year old to keep up with. Kudos to her!

As we returned from the hike, I started talking with C. about a make-believe game she was playing with G. You know, I said, we could turn this idea of yours into a game. She lit up--really? Sure, I explained, as a programmer it's what I do every day. And so for a good portion of our hike we talked about how the game would work, who the characters would be, and what kind of challenges they'd face. After Shabbat, we jotted these ideas down. I now have a bit of homework myself, figuring out what the best platform to help her bring her game idea to life with.

At lunch time, we met up with our friends at the cabin and enjoyed a delightful meal altogether. And then, all of us headed out into the park to explore some more. Our first stop was an overlook, and then from there, we made our way to the nature center. Throughout our hike it would start to rain, at which point we'd all put on jackets or get out our umbrellas. By the time we were prepared for the rain, it would stop. That is, until we thought our luck had truly run out and we huddled under a tree while we found ourselves in a downpour that didn't seem to be going anywhere.

We then had a little debate: do we walk on in the rain, trying to find the waterfall? Or, do we turn back and get to our warm and dry cabin? We decided the best choice was to return to the cabin, and the fastest way there was to walk on the road. Off we went. In a few minutes, we found that the rain had abated once again, and we'd accidentally found our way to the waterfall access trail. Mother nature apparently wanted to get us to this waterfall!

The walk to the waterfall was a bit slick due to all the rain, but totally worth it. While not quite the spectacle of say a Niagara Falls, it was still an impressive set of falls. C. noticed that it looked like an eagle, and after having looked at photos after the fact, I think she's right.

After the falls Nick treated everyone to ice cream (thanks Nick!) and we did finally find our way back to the cabin.

What a fun couple of days, and what a remarkable place Blackwater Falls is! Tomorrow calls for more hiking and exploring, so stay tuned.

(Some of the photos below were taken by Lauren and/or Nick--thanks guys!)

Sunday, August 26, 2018

Costa Rica Adventure - Day 8 and 9 - The Last Days

[Composed 8/7/2018]

Snowflake! How are we going to get Snowflake home?!

That was the thought I was wrestling with as the day started. Snowflake, you may recall, is the stick-horse T. had picked up back on Day 1. Snowflake was too big to fit in our suitcase, and too weapony to bring on as a carry on. How were we going to get her home?

Fortunately, we had allowance for an additional checked bag, and the kind lady at the ticket counter was up to the challenge of packing up Snowflake for a ride in the plane's belly. Spoiler alert: Snowflake made it back to Boston with nary a scratch on her. In fact, our excitement at seeing Snowflake in the luggage collection area in Boston was so contagious, that even the baggage handler who had hand carried her out to the floor was eager to see if she made it through the flight unharmed. It was a fun moment. It was then followed by me opening up one of our checked bags to re-arrange something only to find that a box of cheerios had exploded mid-flight. That was a less fun moment. Better on the return home, than on the way there. No big deal.

As we waited at the hotel in San Jose for the airport shuttle to arrive, Shira had her final exam in traveling-with-a-type-1-diabetic-child. Her test consisted of having to prepare breakfast for D. on the fly and then give him his shot of insulin while he ate his oatmeal standing up at the bus stop. Shira passed with flying colors!

Our short flight to Panama was on a newer plane and so we were treated to the enhanced entertainment systems I had hoped we'd have on the flights to Costa Rica. As I expected, everyone, including myself, zoned out by watching TV or playing games. It was glorious. For the 5 hour flight to Boston, however, we found ourselves on yet another old school plane.

I sat with T., and using Scotch Tape, bound the Snoopy comic she drew from scratch. We also played a version of pictionary, taking turns drawing different things we'd seen on our trip. Shira sat with J. and D. J. was happy to log hours playing his DS while D.'s favorite activity was monitoring our airspeed and altitude using his phone's GPS. If this sounds geeky, it's because it is. Finally, we Scotch Taped the phone to the window and he went to work documenting our descent. That is, until we finally lost GPS signal. I'm telling you, with the determination and precision this boy showed for data, he's going to have a bright future as a scientist. Lookout cancer, D.'s going to be coming for you!

After landing in Boston, we handed T. and D. back to their parents and hit a nearby hotel for a quick night's sleep. Before we knew it, it was time to put J. on a flight home (his second time flying unaccompanied) and for us to snag our flight back to DC. A few hours later, everyone was back to where they were supposed to be.

Costa Rica was truly a fun and beautiful country to visit, and an ideal locale to use as D. and T.'s first overseas trip.