Sunday, July 23, 2017

Sun, Sand and Horses - Ocean City and the Eastern Shore

Our goal for day 1 was to make it to Ocean City. However, there was a big chunk of green space on the map that was too interesting to pass up: Blackwater Wildlife Preserve. Blackwater is home to many interesting birds and has wonderful views. The recommended way to see the park is by driving the wildlife loop, which means that for much of this experience we were sitting in a cool, air conditioned, car. As much as I love hiking, this was pretty luxurious.

Turning off from the Wildlife Loop, after seeing Blackwater, we discovered the Harriet Tubman Visitor Center. We stopped in to check it out, and were amply rewarded. The center tells the story of Tubman's life and highlight other sites in the area related to the Underground Railroad. While I know the general story of Harriet Tumbman, getting a chance to learn more details only made me marvel at her more. What an amazing soul. It was also interesting to see her connections to Frederick Douglas and Rochester, NY. I look forward to getting back to the area to explore more of her legacy.

We started day 2 by seeking out a nearby lighthouse and Shipwreck Musuem. Alas, we started the day too early, and so the lighthouse wasn't open yet. We improvised by hitting one of the many mini-golf places along the main drive. While J. had played real golf before, he claims he had never played mini-golf. It took him a few holes to get the setup figured out, but he was a pro in no time.

His favorite obstacle of the course was one where you had to hit the ball up a slight ramp to have it jump some water. In my infinite wisdom, I decided I'd stand near the hole and get a GIF of him making the shot. J. hadn't quite figured out how much oomph he was going to need to make the shot, so he decided to act like he was at the driving range. Needless to say, I almost got nailed pretty badly, but It all worked out OK as the GIF we made was pretty sweet. But yeah, lesson learned: don't stand downrange of an 8 year old newbie golfer.

The lighthouse was a fine specimen and worth a visit, even though you can't climb to the top. However, you can straddle the marker out front which allows you to have one foot in Maryland and the other in Delaware. It's not quite as exciting as straddling the Equator or the date line, but it was fun none the less.

From there we made our way to the Shipwreck Museum. As promised the museum is at the top floor of a shlocky souvenir shop. As we made our way towards the museum, my hopes sank. Surely we were in for little more than a tourist trap.

As we walked through the museum, it appeared as though we were looking at authentic artifacts recovered from real ship wrecks. From dishware to pirate swords, the collection was fairly broad. Still a bit incredulous, I asked the lady manning the front desk if these were really all authentic items. She reported that they were, and were all pulled out of the ocean by the same gentleman. And just then, the treasure hunter himself walked out of a side room and we had a chance to chat.

This guy was awesome! After exchanging a few words, he ducked into a side office and returned with a *massive* Megaldon shark tooth, and a bar of sliver for J. to pose with. We continued to chat and he showed us a few other remarkable specimens and even let J. pose with a real gold bar.

This place is a true gem in Ocean City. In a location so filled with fake and plastic everything, to find real treasures was such a treat.

After a morning filled with history (and mini-golf) it was finally time to hit the beach! Sure, the water was a bit chilly, but once doused, it was definitely a fun time playing among the crashing waves.

It was hard to believe, but after only one full day in O.C. it was time transition to a new part of the Eastern Shore. Our destination for the day would be the Maryland State Park campground on Assateague Island. However, before we setup camp we decided to explore the surrounding area.

First up, we made our way to the other end of Assateague Island, to visit the lighthouse at Chincoteague. This lighthouse, unlike the one visited the day before, is still in use and you can walk to the top. J. made it all of 10 steps before announcing that he was exhausted and couldn't go on. With much effort, the three of us made it to the top. The views were awesome, although my fear of heights insured I wouldn't spend too much time at the top.

We also took a brief hike in Chincoteague where we got to see the park's famous horses off in the distance. On our way back to our car I had J. collect up a big 'ol pile of pine needles for use as tinder for the upcoming night's fire. I may not be able to teach this boy to hit a home run or make a three point jumper, but I do believe I'm doing a top notch job in the fire building department.

After the lighthouse and hike, we made our way to the NASA Wallops Island facility. The visitor's center was relatively small, but it had interesting exhibits and rockets to oggle on the grounds. The hacker in me loves the balloon work they do there. It's a low cost, low tech alternative to launching rockets that's remarkably effective.

From NASA we made our way back to Assateague State Park in Maryland where we found the campground that would be home for about 24 hours.

Camping on Assateauge Island is full of contrasts. On one hand, you're just a few hundred feet from the beach, which you share with wild horses. It also turns out that the bathroom facilities are top notch (earning Shira's coveted A++ status) and our campsite was relatively spacious. On the other hand, there isn't a speck of shade, so between the bugs, sand, wind and sun you have all the makings of a hellscape.

We did our homework and came prepared: we brought a canopy for shade and extra huge sand stakes for the tent. We also arrived relatively late in the day, after the temperature had been at its hottest. The result was an awesome camping experience, and as the sun went down the stars lit up, became even more so.

For reasons I can't fully explain, we were spared a massive electrical storm in the evening, and had no rain at all. Though due to the proximity to the ocean, during evening, every surface gained a thick layer of moisture.

After setting up camp we made our way to the beach, which was nearly empty and had a wonderful sense of calm about it. Perhaps it was lack of people when compared to Ocean City, or maybe the surf was just a little less pounding, but whatever it was, it was like a totally different experience from the day before. J. and I played in the waves and collected up shells. It felt like we were on our own exclusive island.

We used the tinder we collected earlier in the day to make a most righteous fire, and enjoyed hot dogs and marshmallows on sticks. Yum! This kind of camping is easy!

As we were preparing dinner, J. announced that he had seen a kid his own age at a campsite nearby who had an extra (play) sword, and could he go over and play with the kid? And thus J. made a new friend: Luke. They would spend the rest of the trip playing together, whether it was on the beach or around the campground. I had forgotten how quickly 8 year olds can make friends, and how invaluable a spare plastic sword can be.

Luke asked J. if he would be interested in Ghost Crabbing, something I'd never heard about. The kids took flashlights to the beach and searched out little crabs. Each boy found one, so it was a success.

The next morning we awoke to a perfect sunrise and had a little breakfast. It seemed like our 'chilly' morning turned into a hot day in just a few minutes. Ahhhh, there were those hellscape conditions we were promised. Of course, the solution to the heat was obvious: hit the beach, so that's what we did.

While J. played in the surf I did a bit of shell collecting. At one point, I grabbed a handful of sand only to discover a few tiny shells in it. Looking closer, I realized that the shells were intact and that I was actually holding a series of thumbnail sized clams. I shared my discover with J., who put them in the moat of the castle he was constructing.

A few minutes later J. remarked that the clams had moved! Sure they did J. No, seriously, he promised they did. OK, show me.

He took one of the tiny clams and laid it on its side. He prodded it a bit. And wouldn't you know it, but a tiny membrane came out of the shell, flitted to life, and the clam both righted and burrowed itself in the sand. How did it do that?! It was an awesome display of nature's prowess, in tiny form, anyway.

Before we knew it, it was time to pack up camp and hit the road. Our Eastern Shore adventure had come to a close. As if to give us one more chance at a memory, a group of horses staged themselves at the exit of the park so we could snap one last set of pics.

Sunday, July 16, 2017

A Sailboat in our Microwave - Adventures in Sneaky Art

We have a good friend's 8 year old visiting us, and before his arrival I checked out Sneaky Art: Crafty Surprises to Hide in Plain Sight. Shira had to step out for part of today, which made it the perfect time to put the book to use.

The idea behind Sneaky Art is to create whimsical little projects that will bring a smile to an unsuspecting individual. Just like this guy did at the entrance to the Pentagon. The book offers 24 different ideas to get you started on your career as a sneaky artist.

The first project we tried was crafting a tiny sailboat. We cheated a bit, opting to use rubber bands and tape instead of glue to hold everything together. But the result was, after just a few minutes, a craft ready to set sail. After mulling over our hiding options, we decided to float the S.S. J.J. in a bowl of water in the microwave for Shira to discover. Action shot!

We tried a few of the other projects too, with the cupcake wrapper fortune cookies being another hit:

These were even easier than the boat to make: fold cupcake wrapper, tape and stuff in a strip of paper with a fortune written on it. For bonus points, add some lucky numbers on the back of the fortune.

We had fun both making the creations, and watching Shira discover them. We haven't yet experimented with leaving art projects for the public to find, that's up next.

While I'm a fan of nearly any kind of crafting, I think Sneaky Art is really on to something. When the topic of art comes up, we often focus mainly on mastery of technique. Sneaky Art gives kids (and really, anyone) a chance to focus on impact: how did your creation make a loved one or stranger feel? This is huge as it frames art as a tool to effect change, not just something you work to get good at. In other words, it's not just a tiny sailboat floating in a microwave, it's the seeds to change the world through the power of art.

Thursday, July 13, 2017

Indoor Ballistics: The catapult you need to build today

Did you know that you're only 14 craft sticks and a handful of rubber bands away from having a functioning catapult? It's true! The source for this project is 101 Kids Activities That Are the Bestest, Funnest Ever! (thanks Elana for getting the book for me!), but you can find versions of it all over the web.

Here's what our version came out looking like:

And here's an action shot!

Destruction was never so much fun!

If anyone asks, we built this as a STEM project, and not as a tool for bringing down the Tower of Doom used by Pirates and Ninjas.

Wednesday, July 12, 2017

Weekly Discoveries - On Location Guitar Awesomess, Create your Own 8-bit Music and a 9 Minute Rock Fest

The last couple weeks have been crazy, so here's a twofer: last week's Weekly Discoveries and the week's before. Enjoy!

Apparently dragging a guitar, amp and other equipment out to a beautiful location and playing ambient music is a thing. And it's an awesome thing at that. Check out these examples: Ambient Song #22, AMBIENT GUITAR XIV - Garden #3 and Your Head is a Living Forest. You'd think that once you heard one droning guitar in the wilderness you heard them all, but this isn't so. These videos are both relaxing and quite interesting. It's a genre worth checking out.

Along this theme, check out Arli Ambient Guitar Soundscapes Looping Pedal Demonstration, which shows how one guy can make incredible sounds using a guitar, looping pedals and a few accessories. His on the fly creation is quite remarkable.

I know it's so mainstream, but I'm loving Thunder by Imagine Dragons. OK, the video is a bit too wacky for my taste, but the song is awesome. They keep producing awesome rock-out-music. How do they do that?

Apparently I'm a sucker for clever dancing music videos, and K.Flay's High Enough delivers in that department. The fact that the whole video plays out in a cramped camper only increases my respect for the dancers involved.

I'm not using a fan of 9 minute songs packed with guitar, keyboard and drum instrumentals, but Death of a Coyote Woman by All Them Witches is getting me to re-think my position. This song rocks. It shouldn't work for me, but it does.

You should really take the time to listen to all of Chuck Cannon's songs over at EOP Live. There's plenty of creativity in his songs, and he's got the voice to make them sound great. It was a toss up as to which song to add to last week's Weekly Discoveries. Ultimately, I chose Money Don't Matter, but I could easily have picked half a dozen others. At the moment, Money Don't Matter has 35(!) views. In a universe where a song can have millions, if not hundreds of millions of views, it's easy to forget that there's plenty of music out there that isn't getting much of any love at all.

This last week's discoveries include two videos that talk about creating 8-bit music. One takes the approach of using a JavaScript library, and the other uses beepbox.co. If you're interested in creating 8-bit music (of course you are!), then these two videos provide a simple, non-musician friendly way, to get in the game. Beepbox.co is an especially clever solution, because all you need is a browser window and you're off an running. See, here's what you get if you spend 20 seconds creating a tune. Cool, right?

Check out all the discoveries here and here:

Tuesday, July 11, 2017

TRS-80 Model 100 Hacking - Getting Connected

While it was fun firing up my Dad's TRS-80 Model 100 and writing a bit of code for it, I was left with a choice: leave this as a fun little experiment, or continue hacking away. After weighing the alternatives, I've opted for the latter: let's hack on the Model 100!

I made this decision for two reasons. First, I've always had an interest in playing with small systems. I could easily imagine an Arduino chip and simple form of output (maybe an LCD, maybe just a bunch of LEDs) that would let me run Forth or Lua in an embedded way. It would be sweet to see how much functionality I could wring out of such a small platform. Heck, the pieces are almost there to make this a wearable. Just imagine it: a watch running on your wrist that was little more than a Forth interpreter? Alas, the devil is in the details, and I've never found quite the right combination of hardware to justify jumping into this project.

The TRS-80 Model 100 is one form of this this hardware dream. Think of it as a computer, and it's a joke. Think of it as microprocessor, plus a simple LCD screen and a keyboard, and it's exactly what I describe above. Why build my own embedded system when I have one right in front of me?

Maybe one day I'll get to that Lua or Forth powered watch, but for now, I've got plenty I can learn about embedded systems right from the Model 100. Heck, the Model 100 is powered by an Intel 8085 processor, which was apparently used in the Mars rover Sojourner. If it's good enough for NASA, it's good enough for me.

The other reason to continue to hack on the Model 100 is more philosophical. In some many ways, the computer is a collection of constraints: it has a tiny amount of RAM, a terribly slow processor and is powered by horrendous programming language (line number BASIC). But, as any Haiku author or Twitter novelist can tell you, constraints bring out creativity. My hope is that by learning to operate in such a hostile environment, I'll stretch my skills and change my perspective as a programmer. At the very least, I'll be more thankful for the modern hardware and programming languages I have at my disposal.

OK, so I'm doing this.

The next challenge to tackle was finding some way to hook the Model 100 up my computer to transfer files. I figured if I could set up a basic serial connection, then I can be confident that I can use the Model 100 knowing that I can publish and save my work with relative ease. A google search on the topic came up with some interesting leads, but it was ultimately this article that saved the day: Surfing the Internet… from my TRS-80 Model 100. Sean Gallagher had a more audacious goal than me: he want to surf the web from his Model 100. I just wanted to send bytes back and forth to another device.

The invaluable recommendation in his article was to suggest that you can buy the necessary null model cable to connect a Model 100 serial port to a USB device at RetroFloppy.com. I headed over there, and at 12:26am dropped an e-mail to the company asking for advice. I specifically linked to Sean's article.

12 minutes(!) later, I had an e-mail back in my inbox. David at Retro Floppy told me exactly what I needed, and even confirmed the cables used in the article. Now that's customer service! I bought the cables and waited.

A few days later, the cables showed up, and I was eager to see if I could get my Mac and the Model 100 to exchanges some bytes. Everything fit when plugged in. That was a good sign.

This StackOverflow article suggested a few apps for doing low level serial communication on a Mac. From the command line, I ran:

sudo screen  /dev/tty.usbserial-A105ZB14 9600

On the Model 100 side, I opened up Telecom. It took a few tries, but I was able to use the Stat command to setup the device in use. I typed Hello World on my Model 100 keyboard, and text appeared in the screen session! It was corrupted, putting some junk between each character, but it worked!

Rather than debug this further, I downloaded and kicked off Serial. It allowed me to select the USB serial port and showed me what settings to use (9600.N.8.1). I set those values on the Model 100, and tried connecting both again. Success!

We've got the world's most primitive data connection!

That's all I had time for today. Next up, I need to figure out a reliable way to transfer files between the two devices. And once I've done that, I can start on my first hacking project: doing music creation on the Model 100.

Thursday, July 06, 2017

Review: Flying Lessons and Other Stories

A few weeks back, at around 2am, I was done programming but too wired (if you'll pardon the pun) to fall asleep. So I did what I often do and opened up Overdrive, rented an audio book and set it to play for 30 minutes while I dozed. I've done this in the past, and I usually try not over-think what book I listen to. I grab the first one that looks interesting, and it's usually good enough.

Imagine my surprise and delight when I randomly picked Flying Lessons and Other Stories and fairly quickly discovered that I had stumbled on a gem. As is my usual practice, I skipped listening to the introduction, and just jumped into the book.

It didn't take long for me to realize that I was listening to a collection of short stories. After more listening, I realized that they were all targeted to kids. And finally, in the credits of the book, I learned that this book was published in partnership with WeNeedDiverseBooks.com. Sure enough, all the stories involved kids who would be defined as some sort of minority (be it based on skin color, ability or something else).

One of my favorite joys is starting a random book and slowly having the story come into focus. With this collection of short stories, I got to experience that effect over and over again. And in all but one story, I found myself truly loving the tale. At the end of each story I kept thinking, man, how did the author do that? I felt totally invested and connected to these characters, and yet, these were all short stories. Whatever devices the authors used to give the illusion of a sweeping story arc worked well.

Amazon reports that this book is targeted to ages 8 to 12. I'd quibble with that, because as an adult I thoroughly enjoyed it. But still, on the surface it seems that writing short stories for kids wouldn't be that tricky. They're short, after all? And they're kids, how much depth can they expect from a story?

And yet, even a cursory examination of this task makes you appreciate how tricky it is. As I mentioned above, these short stories don't feel short. That means that the author needs to work overtime to make a brief text seem much longer. And theme wise, targeting kids isn't so easy either. Go too light, and kids will recognize it as patronizing and uninteresting. Go to deep, and you'll loose kids. The stories in this collection seemed to nail this aspect. There's traditional kid themes, like fitting in at school and dealing with a crush. But there's also dense topics, like racism, poverty and the death of a parent to deal with. Whether it's the lighter stuff (which, to a kid, isn't light) or the heavy stuff, the book manages to find the right balance of treating these themes with respect, yet, keeping it age appropriate.

The diversity aspect of this book is another tightrope to walk. Do you shun all stereotypes, or embrace them? Again, the book seems to find a good balance here, both rolling with, ignoring and at other times challenging stereotypical behavior.

In the closing chapter of the book, where I got confirmation that diversity was a key theme in the stories, I learned about the work of Walter Dean Myers and a pivotal op-ed he published in 2014: Where Are the People of Color in Children's books? I'd highly recommend taking a few minutes to read the op-ed. Meyers makes a strong case for how diversity in books isn't just important for minorities, but for those kids who count themselves in the majority.

I've already picked up a copy for a friend's 7th grader who remarked to me that he didn't yet have firm reading plans for the summer. I'll have to get him to give me his own take on the stories and share them here.

Wednesday, July 05, 2017

A Digital Walk Down Memory Lane: Hacking the TRS 80 Model 100

Any list of Greatest Computing Devices of All Time needs, in my opinion, to feature the TRS 80 Model 100 near the top. My Dad had one of these laptops growing up, and it was truly revolutionary. It was remarkably light (especially when compared to the Luggable of the day), ran for 20 hours on 4 double AA batteries and had an exceptionally high quality keyboard (even by today's standards). It included a built in 300 baud modem, which meant you can shuffle data on and off the device either by serial port or telephone line. In exchange for these remarkable features, you had to deal with a screen that was a measly 8 lines, and a system with 32KB of storage. (Though apparently, both of those limits were hackable to some degree.)

A couple of weeks back my Dad gifted me his original Model 100. In my experience, most computing hardware doesn't age well. What was once cutting edge tech, turns into bulky, plastic junk through no fault of its own. But not the Model 100. Slipping it from its black leather-like case, I couldn't help but feel like I was still holding a premium piece of computing tech.

(The banana is provided for scale)

I popped in 4 AA batteries, flicked the on switch, and the device immediately snapped to life. Oh yeah, I had forgotten that the Model 100 had nearly instantaneous 'on' with effectively no noticeable boot procedure.

I'd always thought of the Model 100 as the ultimate writer's tool, as it provided a high degree of portability with nothing to distract the author.

But, having spent a little over an hour playing with the device, I have a new found respect for it. This is a geek's dream. The computer appears to be essentially a Basic powered Read-Eval-Print-Loop. Sure, there's a text editor, and some sort of address and scheduling app, but really, this computer is little more than a Basic interpreter. There's no shell of any kind, just a Basic prompt. Want to delete a file? Use a Basic expression. Want to set the current time and date? Again, execute some Basic.

The quick reference guide for using the computer is a Basic programming reference manual, which hearkens back to a day when you really had to read the manual.

The Basic interpreter wasn't just a crude OS shell. As books like 44 Programs for the TRS-80 Model 100 Portable Computer show, it was intended to let you whip up little apps like you might find on your computer and phone today. Want to do cash flow analysis, calculate earnings on your investments or keep track of your running? A little Basic program was the answer.

I typed in the 'Daily Codes' program from the above text, and sure enough, it worked:

The codes program generates random numbers which can be used by a business as a 'secret' code for the week. Man, it must have been sweet to spend a few minutes typing this program in and then have the compute take over this tedious task.

I also experimented a bit with having the computer generate tones. I had high hopes of having it generate some musical tunes, but alas, I got stuck on it and decided I'd sleep on the problem for now.

After having fiddled with Basic for an hour, I have to say that using a line-number based programming language seems like an exceptionally idiotic choice. Either forth or lisp, both of which existed in the 1980's, would have been an infinitely better option than Microsoft Basic. There's a certain simplicity to GOTO 250 I suppose, but there's almost no support for modularity of any kind, which means that the system simply can't scale.

But the real demise of a programming environment as Kill App has to be the spreadsheet. Even the most primitive spreadsheets could trounce Basic (and other programming languages) in terms of ease of use and business-problem-solving bang for their buck.

Despite Basic being a nightmare, I'm still impressed with the device and what the makers were trying to accomplish.

But what's the next move? Do I find a way to hook up the Model 100 to my desktop or cell phone over a serial connection? Getting data on and off the laptop is going to be essential to using it. Once I can do that, I can install forth on it and potentially have a far better programming environment at the ready. And then? Oh, who knows.

Regardless of how functional the Model 100 is today, I'll say that it's definitely been an interesting glimpse in the past of computing and no doubt still has room to inspire.

Monday, July 03, 2017

All-Business - An info first watch face (including my wife's current mood)

A couple of weeks back I heaped major praise on WatchMaker for being a sweet development tool for Android Wear watches. My first attempt at building a watch face for my Zenwatch 3 showed that I could write modular and interesting code that ran effortlessly on my watch. What it didn't do is provide me with much of a usable watch face.

With a bit more work, I was able to correct that. I give you my very first usable watch face: All Business. Let's walk through it (clockwise, of course):

690 - The current number of steps I've taken according to my phone's pedometer. The Zenwatch 3 has a pedometer built in, and WatchMaker allows easy access to this value, but the numbers seem absolutely random. I'd walk 50 steps and the watch wouldn't recognize any movement, or I'd be sitting at the dinner table and notice that I'd taken 6 steps. The algorithm the Zenwatch uses may ultimately be OK. Perhaps over a day, it's reasonably accurate. But my LG G6's pedometer is scary accurate. Walk 10 steps, register 10 steps. To power this number on the watch, I use Taser. Effectively, every 10 steps taken on the phone, I push the value to the watch.

Pressing the number of steps clears it. This allows me to use the step count for individual activities, and effectively makes the watch face interactive.

2017 - The current year.

11:22 - The current time in UTC. Useful for dealing with other programmers I work with overseas. My initial instinct was to add an AM/PM designation to the time, but as a Pebble watch face taught me earlier, I don't really need it. I don't tend to wake up in windowless rooms without any idea of what time it is.

20:37 - The time the sun will set this evening. Pressing this value triggers a Tasker Action which sends Shira my current location. Useful if I get abducted by aliens, or if I'm running late.

99% - My phone's current battery level.

Sun Icon - The current weather graphic as provided by WatchMaker. Pressing this icon explicitly refreshes the weather data on the watch.

99% - My watch's current battery level.

85°F - The current temperature in my location.

7:22 - The current time. Again, there's no AM/PM designation to save space.

Mon Jul 3 - The current date. Pressing this value launches OK Google on the watch. I'm still figuring out the fastest way to get answers from the watch, and this may very well be it.

While not especially sexy, I've found that the above cover most, if not all, my watch informational needs. But wait, there's more!.

While I was describing my new watch face to Shira, she suggested I build something in where she could send me an emjoi to feature in the background of the watch. I couldn't think of an easy way to do that, so I went a different route. I've setup a web page that uses AutoRemote and Tasker to allow Shira to set the background color of the watch at any time. In other words, she can express her current mood on my watch face, whether she's next to me or 2,000 miles away.

My original plan was to pickup the color via an SMS message. However, Google's SMS replacement (RCS) is apparently not compatible with Tasker's SMS handling. The result is that when Shira would send me a text message, it would be invisible to Tasker. Ultimately, I think using AutoRemote is a better solution anyway.

So there you go, a fully functional watch face with a few extras.

I still think WatchMaker is a sweet tool, and I'm really impressed with how effortlessly it integrates with Tasker. If you can imagine it, Tasker and WatchMaker can turn it into watch face.