Engineer, traveler, photographer, astronomer. Welcome to my home page on the web.

Untangling my Arduino Sketchbook (from the Arduino IDE)

When I started working with Arduino back in 2012 I wanted to be able to do development on any of my computers, anywhere. I was traveling quite a bit for work and had opportunities to tie my Arduino and maker projects into my job, so I wanted not only to be able to do development on my home desktop PC but also my work/travel MacBook. My solution at the time was to setup my Arduino "sketchbook" of projects on Dropbox and sync that across systems. Later on I added another small PC on my electronics workbench so I could do development there too. For years that worked wonderfully, allowing me easy and fluid access to all my projects from everywhere.

Sadly, those days appear to be over. One afternoon not long ago I discovered I couldn't build even the most simple Arduino sketch, at least for some target boards. At first I tried making sense of the error messages being generated about libraries being out of date or installed multiple times, but it eventually dawned on me the problem was fundamental to my setup and, unfortunately, decisions made in the evolution of the Arduino IDE.

In the early days the Arduino IDE installed all the board and library support components it needs in the same folder as your Sketchbook. As you add more libraries and boards to your development environment all the associated tools go right alongside your sketches. Generally that's not been a problem as those components were platform-independent, so sharing all of that across multiple computers via Dropbox wasn't generally a problem. At some point recently, though, the IDE started installing some development and runtime components in a completely separate and private folder that has to be local to the computer running the IDE. That meant, as best I can reconstruct it, all the board and library info in my sketchbook folder got out of sync with these additional local-only components, compounded by me installing or updating board or library files on different machines as I was doing development.

As someone with over forty years of software design and development, if that's indeed true I can only shake my head and say "Yuck." What was once a simple development environment I could easily share across devices and platforms was now a tangled, broken mess. The only thing I could figure to do was uninstall the Arduino IDE everywhere, clean up my mangled sketchbook folder hierarchy on Dropbox, and abandon the "develop anywhere" model I'd grown to enjoy. Instead I'd install the Arduino IDE separatlely and independently on each system I was using and declare one of them as the "keeper of truth". Use of GitHub repositories could give me some form of the multi-computer development capability I needed at the cost of pulls and pushes to manually keep code development efforts in sync. And, if it came down to it, I could still copy Arduino sketches around indirectly through Dropbox.

Wanting to be thorough about it, I took the better part of two days to disentangle my existing Dropbox-based sketchbook, remove and clean install the Arduino IDE everywhere (a non-trivial thing on its own, alas), build the new "keeper of truth" sketchbook collection, create some new GitHub repos, and re-establish everything on my various development machines. I think I can make this new scheme work, but also can't help escaping the thought that it shouldn't be necessary for me to do so. If ONLY the Arduino IDE separated the concepts of where your (inherently platform independent) Sketchbook lives and where it wants to install its own components -- say in two different settings in the preferences dialog -- this could all have been avoided. Obviously, though, my particular use case isn't one the Arduino IDE folks intend to enable. Too bad.

#arduino #maker 

RSVP - IndieWebCamp East 2020

I'll be there!

Looking forward to (attempting) to attend the upcoming IndieWebCamp East 2020 on the weekend of November 14-15, 2020. I say "attempting" as while the event is on-line rather than in person and so I can attend from the comfort of my easy chair, it'll be happening on US Eastern Standard Time and I'm three hours earlier than that. Still, the event takes place over a weekend and the agenda is nicely flexible about remote particiation.

Having attended several IndieWebCamps and IndieWeb Summits, I know what a marvelous opportunity the two days will be in getting web and technology experts together to help me learn about what's new in the IndieWeb and make major progress on something I'm trying to accomplish here on my own personal web site.

All the details are here, and the all-important schedule grid has info on what's happening, who's presenting, and when.

Hope to see you there!

#rsvp #indieweb 

Got email confirmation today from the Santa Cruz County Elections Department that they've received my ballot for the November 3rd election, and that my vote will be counted. "Where's My Ballot?" is is a service of the California Secretary of State through each local county election office, and was enabled as an option I could select on the ballot envelope itself. I'm impressed -- great idea to do this.

Oh, and my wife hand delivered our signed and sealed ballots to the Santa Cruz County Elections Department through one of their official drop boxes. Happy to be able to do that, and to expedite getting our votes into the process to be counted.


Building an Air Quality Monitor
Home-built AQI Monitor

The summer of 2020 has seen record wildfires in the Western US and in addition to being concerned about the direct threat of fire to our home and everything in it, we've suddenly learned how challenging it can be living with heavy smoke and haze as part of daily "weather". While it's easy enough to buy a good air quality measuring device, I couldn't pass up the opportunity to build one. In just the few days since I got it operational we've learned how important and helpful it can be knowing the quality of our air and being able to compare conditions at home with forecasts from local news, weather, and fire-fighting agencies.

If you're interested, I've written a longer article about the project, providing more details on the components used and some of the interesting (and unexpected) math needed to calculate AQI the way the US EPA defines it. Here's a plot of our measured air quality at home during an especially bad period earlier in September, with values into the "Unhealthy" and even Very Unhealthy" ranges:

#maker #environment 


There's been a lot of excitement this month among astronomers, astrophotographers, and sky gazers due to the unexpected arrival of Comet NEOWISE, discovered on March 27th (my birthday!) by scientists studying photos from the Wide-field Infrared Survey Explorer (WISE) space telescope. New comets are discovered quite often, but only occasionally do the orbits and conditions result in a comet bright enough to be easily seen with the unaided eye. Comet NEOWISE is the brightest comet to pass by Earth since Comet Hale-Bopp in 1997.

Cloud cover, mountain fog, lots of nearby hills, and large trees have kept us from seeing Comet NEOWISE so far, but last night we finally had excellent conditions so ventured up the road to a spot with a clear view of the northwest horizon and an area we could safely pull off into. As the sun gradually set we were able to spot NEOWISE, first with binoculars and eventually with the naked eye. Over the course of nearly an hour we watched it become brighter against the darkening twilight sky but also creep lower and lower into the haze. This picture was taken on my Pixel 3a phone (thanks to the magic of Google's Night Mode camera).

You should definitely get out and try spotting Comet NEOWISE if you haven't done so already. While my wife and I were doing our observing a family drove by, spotted us, figured out what we were doing, and pulled over to see if they could see the comet too. We practiced safe-distance comet watching, which involved lots of pointing and verbal "star hopping" from brighter stars everyone could easily see, and they were able to spot it too. (The two brighter stars towards the upper right of my photo are the end of the bowl of the Big Dipper in the constellation Ursa Major -- the Big Bear -- while the two visible stars towards the left of the photo are the Big Bear's front legs.) You can click on the picture to see a larger view.

Happy comet hunting!! The Sky Live web site can help you find Comet NEOWISE if you'd like to give it a try, and a pair of binoculars will definitely enhance the view...

#photo #nightsky 

This morning's weekly email update from the fine folks at Sparkfun, one of my favorite suppliers of electronics components and ideas, alerted me to an effort to rename the signals used in SPI. If you're not familiar with it, SPI is the "Serial Peripheral Interface", a widely used protocol for communicating among devices such as sensors, actuators, and microcontrollers. SPI was introduced in the 1980s and is a de facto standard, stewarded collectively by the industry rather than any formal standards body. At the time it was developed SPI used relativlely common language of the day to characterize the two interoperating devices as "master" and "slave". That's a problem. As Sparkfun puts it, the technology world can do better.

The Open Source Hardware Association (OSHWA) and supporters like Sparkfun have stepped up to propose a new naming scheme for SPI. Going forward we'll refer to the two interoperating devices as "controller" (which is orchestrating the information flow) and "perhipheral" (the recipient), with new names for the signals involved as follows:

More details and an FAQ are on the OSHWA web site. Because SPI is a de facto standard there's no standards working group to convince or formal approval process to navigate. All of us, educators, engineers, designer, and community, can just start using the new names. I am modifying my project code today to embrace this long overdue scheme and look forward to suppliers like Sparkfun doing so in their products and documentation.

And there's much more work to do to address other uses of master/slave terminology, which OSHWA and its supporters are working on too. It'll be good to see those changes come forward, and to eagerly adopt them as they do.

#maker #oshw 

Success! As the result of today's project day at IndieWebCamp West I now have a working color scheme selector. In the upper right corner of this page you'll see a slider that'll let you choose a light or dark color scheme for this and every other page on my site. Most of the implementation is nearly identical to Max Böck's excellent Color Theme Switcher, in my case simplified to just two themes with a simple toggle between them.

Although I continue to be impressed with the power and productivity of Eleventy as a static site generator and Nunjucks templating built into it, I must say the biggest insight from my project today is the huge potential I see for using HTML5 data attributes. I'd not encountered them previously and can already see a number of ways I can attach important semantic info to HTML elements and then extract and use that information in JavaScript or CSS, thereby avoiding having to keep those details manually in sync across HTML page layout in some files, CSS styling in others, and JavaScript functions in even more places.

As an example (beyond the theme switcher I built today), my Environmental Monitors app pulls data from those monitors out of the ThingSpeak cloud database and to do so requires unique identifier attributes for each one. With HTML data attributes I can embed those identifiers just in the HTML file and retrieve them where needed in CSS and JavaScript. And with Nunjucks templating I can pull the data out of a single JSON file and put it everywhere I need it to be -- HTML, CSS, and JavaScript. Awesome!

And so IndieWebCamp West 2020 comes to an end. As usual, the last session of the day was a round of demos recapping everyone's hands-on project efforts. It's so impressive to see what everyone accomplished. A focused day of innovation while surrounded by knowledgeable folks eager to help is a such a powerful thing. Thanks again to all the organizers, volunteers, and participants for a great weekend. See you next time...

#indieweb #webdev #events 

IndieWebCamp West -- Learn + Do

Excellent first day yesterday at IndieWebCamp West with site demos that inspired and sessions that informed. I saw several folks with light/dark color theme selectors on their sites so that's my primary task for today's "hands-on" project day. I also got some great glimpses at site automation tools that can help me with some of the operational chores I've been compensating and which are more difficult to take care of on a statically-generated site like mine. And there was a lot of talk about Webmentions so I have some ideas there too.

This was, I'm told, the largest IndieWebCamp ever. Yesterday's keynote sessions had forty six folks on-line in Zoom plus an additional (unreported) number viewing the live stream. Here's a Zoom group photo just at the end of the Day 1 Keynotes:

IndieWebCamp West group photo

Thanks to Chris, Aaron, David, Tantek and the other organizers/volunteers for an excellent, very smoothly run event, and Cassie, Ryan and Jacky for delightful keynotes (recordings of which are available via the schedule page linked to above).

Back to work on my color theme selector! Gotta be ready for a demo by 4:30pm...

#indieweb #events 

RSVP - IndieWebCamp West 2020

I'll be there!

Looking forward to attending this weekend's IndieWebCamp West 2020. Per my original plan I would have been in Portland, Oregon this weekend for IndieWeb Summit 2020, but with COVID-19 and quarantine the Summit has been reimagined as a (first time ever) all on-line IndieWebCamp West. All the details are here, and the all-important schedule grid has info on what's happening, who's presenting, and when.

If you're not familiar with them, the frequent local IndieWeb Camps are awesome -- you should definitely attend any that happen near you to learn how to create your own independent home on the web.

#rsvp #indieweb 

My work-from-home video camera setup has always been a bit over the top as I couldn't resist geeking out and using my Sony mirrorless camera as a webcam. The intial approach repurposed an old desktop microphone stand as a camera and light mount, which worked but wasn't very adjustable or sturdy. Influenced by some helpful posts and videos, I've upgraded to a much better arrangement that wasn't all that expensive plus was fun to design and put together. If you're curious you can read all about it in my detailed article on the project, complete with the list of parts I used plus some tips on assembly.

#project #streaming 

Today is my birthday. Naturally our plans for a bit of family celebration had to change due to the quarantine, but we made it work thanks to email, text messages, Slack, and good old-fashioned phone calls. Thankfully birthday cake delivery is enough of an essential service for the carrot bundt cake my awesome work colleagues ordered for me to arrive. And I've had unusual birthdays before, none more bizarrely memorable than 1964 when my birthday fell on Good Friday, and was the day of the Great Alaska Earthquake (magnitude 9.2!), and on top of all that I was sick with chickenpox. I still remember that day quite clearly, and am pretty sure I'll long recall this one like that too.


Lessons from Shelter In Place (Week 1)

After one week of "shelter in place" here's what I've learned:

Also, shout out to Summit Store, our little neigborhood grocery here in the Santa Cruz mountains. My only trips outside the house in the last week have been quick runs to Summit Store to reprovision. They've been an oasis of important supplies, surprise special treats, and safe-distance connection to other folks, all of which are vital these days. We've always been fans, but they've stepped up to be an anchor for our community. (And I'm astonished at how well they've been able to scrounge essential items for us all.)


Cuernos del Paine (The Horns), Patagonia
Cuernos del Paine (The Horns), Patagonia

Well, that was an incredible two weeks...

The first seven days of our adventure in Chile, though operating against a backdrop of the growing global COVID-19 pandemic, was simply spectacular. We spent one day laying over in Santiago before heading to the southern end of the country, flying into Punta Arenas and then driving north to Puerto Natales. Two days there let us explore the city and take a boat trip up Ultima Esperanza Sound to see Mount Balmeceda and the two glaciers that enshroud it. From there it was on to Torres del Paine and five days in a very well appointed yurt at Patagonia Camp.

Patagonia Camp offers a variety of daily excursions into the park or just around Camp, and we took advantage of as much as we could physically fit into those five days including glaciers, waterfalls, hikes, lakes, stunning vistas, petroglyphs, guanacos and condors and puma, delicious Chilean food and drink, and lots to learn about Patagonia and Chile from the extraordinarly helpful guides and staff at the Camp. The photo above is one example of the our experiences. If you're interested you'll find lots more in my photo album from the trip.

When not adventuring, though, we were using tiny slices of satellite internet keeping track of the spreading pandemic while talking with other travelers about our increasing concerns and travel implications. Our time at Patagonic Camp came to and end on Sunday the 14th, and we reluctantly but nervously flew back to Santiago with plans to spend a few days there before heading north for our second week of Chilean exploration in the Atacama Desert.

That part of the trip, of course, never happened. We arrived in Santiago to find the airport in disarray as travelers displaced from other countries scrambled to reroute themselves to their next destination, in most cases home. We made a few inquries to see if we could go straight home ourselves, but these days airports are really only set up to help you get on and off your ticketed flights, not help you replan your entire itinerary. Wait times on the phone just to talk to an agent were well over an hour. Best to head for our hotel and continue exploring options from there.

Monday morning was even more anxious. Chilean President Pinera announced the borders would be closing to incoming travel on Wednesday. No specific word about departing travelers, but that was enough for us. Miraculously there was a United office in Santiago so we made haste there and worked with the absolutely marvelous United team to find two open seats on the earliest possible flight -- Wednesday night (the 18th). That left two tense days in Santiago, one discovering just how much of the city (and country) was shutting down and curtailing movement, and one trying to relax at the Santiago airport hoping our plane would arrive and our flight would actually be allowed to depart.

It all went off without a hitch. We flew overnight to Houston, laid over there in a mostly empty airport, and connected onward to San Francisco. By mid afternoon we were at last at home tired, unable to yet comprehend how everything in the world had changed, and thankful beyond words for the extraordinary help we'd gotten and luck we'd had in getting home. (If you ever plan a trip to South America you should work in-country with the folks at Upscape. They were great local guides everywhere and stopped at nothing to help us navigate our way out of the maelstrom and get safely home.)

Now that we are back we begin our search for our new "shelter in place" norm, along with everyone else. We'll also, in quiet moments, reminisce about the magificent week we spent in Chile and anticipate how we might someday go back to see more. Oh, OK, perhaps just a few more pictures from the trip album...

Puerto Natales at sunrise, before sailing
Puerto Natales at sunrise, before sailing
Curious guanacos
Curious guanacos
Serrano Glacier
Serrano Glacier
Torres del Paine (the Towers)
Torres del Paine (the Towers)

#photo #travel 

Travel in the Time of Coronavirus

We flew into Santiago this past weekend as the beginning of our adventure holiday in Chile, and deplaned to see this sign in the arrivals area. The Ministry of Health had quickly established a screening process that checks every arriving passenger's temperature and asks if they had any symptoms of illness as well as what countries they'd visited in the last thirty days. Everyone also gets a bit of paper with a toll-free number to call if you begin to feel sick at any point. The line to be screened was long, adding an extra hour to the arrivals process, but given the Coronavirus outbreak it was both expected and welcome.

It does feel a bit strange to be traveling and we're cautious about everything, but we're well,there are few cases so far in Chile, and we've had this trip planned for almost a year.

#travel #photo 

I love to travel, and want to be able to share photos and stories of my adventures when I do. On the photography side, I long ago learned that capturing my experiences the way I wanted to meant taking a good camera with me everywhere and editing the photos as part of publishing them for friends and family to see online.

I'd like, though, to be able to travel light and in particular not always have to carry a heavy, expensive and fragile laptop. To do that I need to adapt my photo editing workflow (based on Adobe Lightroom and SmugMug) and my blogging workflow (based on Github, Eleventy, and Netlify) to something more mobile than a laptop.

I've also always traveled with an iPad, primarily for easy access to movies and books to help pass the time and inform me about places I'm visiting. Could my iPad adequately replace a laptop in my travel workflows? Apple recently (finally) enabled import of photos from removable SD card media and Adobe added photo import to the iPad version of Lightroom, so my trip is an opportunity to test that combination. Once imported and edited in Lightroom, I can upload photos to SmugMug anywhere I find wifi.

I've also found an app, 'Working Copy', which allows an iPad to be used for software development on Github. I'll be testing its use for posting travel updates here on

Watch this space for the results of those experiments.

#travel #webdev 

RSVP - IndieWeb Summit 2020

I'll be there!

Looking forward to attending IndieWeb Summit 2020 after having such an outstanding experience there in 2019. The frequent local IndieWeb Camps are awesome -- you should definitely attend any that happen near you to learn how to create your own independent home on the web. Each year's overall Summit is icing on the IndieWeb cake, and as it says on the event registration page draws web creators of all kinds from around the world to "to share ideas, create and improve their personal websites, and build upon each other's creations."

This year's Summit is the weekend of June 27th and 28th, and once again is being hosted by Mozilla in their Portland, Oregon office. Come join us!

#rsvp #indieweb 

During our stay in Berlin this past week we had a chance to visit the Berlin Zoo, Germany’s oldest zoological garden and home to the world’s largest variety of species (20,000 animals of around 1,300 species on the zoo grounds). It's also the home to Germany's only Giant Pandas, which were especially popular given the recent arrival of twin cubs.

The weather was rainy and cold so only some of the animals were outside, but we were impressed nonetheless. The Berlin Aquarium is also part of the Zoo experience, with fresh and salt water fish as well as reptiles and amphibians on display. We'll have to come back when we're in Berlin later in the season and the weather is more enjoyable for people and animals alike. In the meantime, you can see a gallery of the photos I took while there (like the pensive chimpanzee above).

#photo #travel 

As part of Mozilla's company wide All Hands meeting in Berlin this past week the Emerging Technologies team of which I am a part gathered everyone for a fun, teambuilding evening. Our creative exercise was learning how to paint street art given Berlin's widespread acclaim for that form of expression, which is the first time I'd ever done anything like that. (I guess you're just going to have to trust me there...) Guided by some patient instructors in a studio surrounded by sections of the old Berlin Wall they'd decorated, this is the wall of art my small group produced.

It was great! Encouraged and inspired, I need to pick up some cans of spray paint when I get back home and find a nice surface upon which to practice.

#photo #travel 

If you've discovered the dark mode preference your operating system enables, you've probably also seen web sites take advantage of it to render in dark or light mode accordingly. Turs out it's easy to do thanks to some nifty CSS magic, which I've just implemented here on and documented in an article should you want to give it a try.


A 3.9 magnitude earthquake struck Morgan Hill, California at 11:17pm yesterday (1 Jan 2020). That's only twenty-two miles from our house, so the signal was pretty strong on our home seismometer as you can see in the helicorder output above.

That said, all of us were asleep here and none of us recalled feeling it. Now if it had hit 24 hours earlier it could have been part of our New Year's Eve celebration...


The Moon and Venus passed close by in the night sky last evening just after sunset. This is the view of that conjunction from our house, through the redwood trees and with a few high clouds.

#photo #nightsky 

2019 is the end of a decade -- the "teens"? -- but it somehow hasn't left much impression on me as the decade of anything in particular. Today's Calvin & Hobbes comic strip captures a bit of how I feel about this past decade, in typical Calvin & Hobbes style.

I read Calvin and Hobbes everyday, thanks to putting a personalized set of comics in my inbox every morning.


Krispy Kreme donuts are a special treat any time, especially for me as I grew up in the heart of Krispy Kreme territory. Naturally they create some special designs for Christmas enjoyment. (The kreme-filled ones are my favorite.)

#donuts #Christmas #photo 

Holidays = Fun + Learning
So how am I spending my time off?

I always have a number of projects underway, but having a solid block of time away from work over the Christmas break means I can be specific about what I want to accomplish. Here's my list as of now:

Christmas is at last upon us, and I'm delighted to have some time to unwind. Thanks to both Christmas and New Years being on a Wednesday I get what amounts to two weeks off as most folks at work are away some combination of Christmas week and New Years week.

Merry Christmas, and Happy New Year!