natevw proudly presents:

a glob of nerd­ish­ness

powered by work over time.

Damage report

Lately I have fried:

Several nRF24L01+ modules

I've been getting the second iteration of my greenhouse electronics going as well as developing a mostly-finished pure-JavaScript nRF24L01+ driver library. In the process I've managed to downgrade the radio hardware on a few of these little transceiver breakouts:

nRF24L01+ in prototyping environment

It's hard to casually explain what I'm doing with these to family and friends, but the short of it is they're a fairly ideal and very affordable way to wirelessly connect a variety of tiny computers — Arduino, Teensy, Raspberry Pi, Tessel, etc.

My patience with CouchDB

Don't get me wrong, I still use it and love it but I am also getting more shy of always recommending it by default. It's not that CouchDB broken, it's just that it is incomplete in the areas that would truly set it apart.

It's not my only concern, but the biggest struggle has been with document-level read permissions. Turns out this is critical for anything resembling a "Couch App". Filtered replication simply isn't the solution. Cloudant has done some work in this regard, but given the functionality hasn't even made it to their public product's roadmap it seems unreasonable to plan for it in an Apache CouchDB release for a very long time.

In the meantime, I'm just slathering middleware over everything "database" in my production work, where I've had to salvage my original CouchDB-in-theory architectures. There's certainly still plenty Couch improves about these projects, but it can be frustrating to re-implement so much of what it should provide while still constrained by its remaining baggage.

My winter-incompatible tilapia

Cold weather and tropical fish don't mix well. Many of my tilapia are about harvest size but I'd been hoping to keep the full batch until I had conjured a second generation out of them. This plan was decimated as a two week long extra-cold snap left all but the three smallest fish comatose on the bottom of the tank. They may have pulled through, but with travel approaching I didn't want to chance it.

Ben with fish breakfast

The first to succumb got ate for breakfast with a visiting friend; the next four got stored in the freezer. With a second aquarium heater and a closer-to-average climate, the temperatures seem to be in a better range — up from 40–50ºF to the 60–70º range without having to wastefully heat the greenhouse air directly.

A winter-compatible rabbit watering system

We recently added some meat rabbits to our menagerie. Given the cold snap I was eager to install a freeze-proof automatic watering system before it was the neighbors' turn to take care of things.

Rabbits in hutch

Excited by a successful afternoon of assembly, and eager for the glue to cure, I plugged in the heat cable "for just a bit, to test it" — without any water in the system. An hour or two later I realized this was in progress in the hutch right next to our house…

Burnt bucket, molten pipe from rabbit watering system

Yeah that was dumb. Really, really, dangerously, dumb.

Some snails

A dozen of these were hurriedly harvested and snacked upon amidst the final holiday packing. Toby managed the butter sauce mostly by himself, but only Malachi was willing to try the end product with me.

Snails in the jar

I forgot to snag a picture of the actual snack. To be honest, not only were we eating in a hurry but I was also trying not to focus on their entrailish appearance…I hope to keep raising and sampling them, though, as they haven't required too much attention.

Brain cells?

Keeping up with so many outdoor-ish and unbillable-ish projects has been a bit of a challenge while also trying to share brief daylight hours with consulting/development work, but has been incredibly educational. When things "just work" it's only a little empowering. Doing things the wrong way (or the long way) can be tough to swallow, but with persistence feels rewarding in a more satisfying way.



Two browsers walk into a bar. The bartender introduces them, then the horse says to the Ukrainian: "

PouchDB instances talking together


So anyway, you've maybe heard of PouchDB, an IndexedDB (and WebSQL and LevelDB and HTTP…) wrapper that is replication-compatible with CouchDB. And maybe you've heard also of WebRTC, a browser API for "real-time communication" between peers.

Well, I combined the two.

It's called PeerPouch and it seems to work. In theory and practice. Basically it adds still another backend to PouchDB, which proxies all calls on the local instance to one on another peer. Connection setup itself is done via a PouchDB/CouchDB instance too. So it's Pouches all the way down.

CouchDB's all the way down

I'm worried there's no easy-win use case due to the usability issues of combining browser storage (confusing) with peer-to-peer connections (uncertain) while still requiring mutual access to a central server (there's always a catch), but PeerPouch could be helpful for things like:

PeerPouch itself is super simple to use. So I'm thinking combined with an in-memory PouchDB backend it could join the ranks of WebRTC wrappers for generic chat/game/whatever apps disregarding the data storage PouchDB usually offers. The advantage would be not require anything more than a potentially-free IrisCouch or Cloudant pre-hosted server backend for signalling.

To demo/test it, I built a no-frills direct file transfer utility which I hope to get hosted once I get a suitable server backend ready for shared public consumption. Metakaolin is also high up on the list for some peerish collabification. Have you got any projects where this might be useful?


Solar Sousveillance

My solar system designer (and my mom and a sister) arrived tonight. Our solar photovoltaic modules should be arriving tomorrow morning. Then the install begins.

Helium cylinder pressure reading

If the weather and wireless cooperate, you should be able to join the process too. I've got something of a reconnaissance mission waiting on standby. You can tap into the feed at and into any commentary on Twitter.



Nerdly status report commenceth.

Nexus 4

Probably the biggest recent change was selling my iPhone 4 and replacing it with a Nexus 4.

Nexus 4 self-portrait via Pandigital tablet's front facing camera

No, not the cheap old off-brand tablet which it is taking a picture of.

As I found out when I got my Nexus 7 last year, modern Android is an excellent operating system. Seriously. The browsers [yes you have options], the extendable platform, the multitasking and notifications, even the visual design (especially the visual design?!) all put iOS to shame. It came down to: Google creeps me out, Apple pisses me off, and both big evil corporations are snug in bed with our benevolent shadow government (ALL HAIL). So I might as well enjoy a surveillance device with the superior user experience.

Unlike Apple, Google's not afraid of shipping products that do useful things with all the data they collect for the NSA, but I'm still trying to avoid most of those. Plus, many of the core pieces (calendar, contacts, photos) at least in theory will let me connect them to my own services via my own plugins. I'm eager to dabble in that when I find some time.


Speaking of time…

Wristmap showing my current location

To celebrate finally having a pocketable Pebble proxy (my larger Nexus 7 doesn't get cell data and iOS pretty much sucked at all things Pebble), I got my Wristmap watchapp far enough along to share with others. Plenty more improvements to make, but it's already gotten some really encouraging feedback on the Pebble forums. You can read more details and follow along there.

Thanks to an impromptu lunch discussion about SIP with Lance Stout, I figured out how to extend my barebones public IP address site with a very handy new subdomain!

Local IP address being displayed by

The new subdomain uses WebRTC to find not your public IP address, but your network IP address — i.e. the LAN address you need for doing local testing. So it works great in Chrome and Firefox. Which both work great on my AWESOME NEW PHONE by the way :-P

Apparently it's already been making the rounds within the web security community due to how simply it shows the information disclosure, but in my opinion being able to set up peer-to-peer connections inside a LAN is a really cool feature of WebRTC worth the tradeoff. And not just as a handy web-development tool. (PeerPouch is coming.)

Greenhouse progress

It's not there yet, but the fish-feeding/greenhouse-monitoring equipment I mentioned in my last post is coming along fairly well. Over the weekend I got many of the additional sensors coded up and an improved food spout attached.

Demand feeder spout part amongst electronics prototype

I've got to re-architect the Arduino side of things to avoid some long-blocking sensor reads, and shore up the Raspberry Pi side which has not been terribly reliable since an unfortunate wire-wrap accident involving a toddler. And then get it on the web.

Upcoming: Solar PV install!

This month will be busy though, as the next two weeks' schedule involves making this happen:

Diagram of my upcoming solar system (design by my dad)

There may be a floating webcam involved.


On vacation

On vacation, I…


I'm very grateful for clients that I can help from wherever I have a bit of occasional internet connectivity.

Bought a cool domain but just redirected it to some other domain for now

'nuff said

Submitted some talks to Cascadia.js

Though it looks like I wasn't the only one. The conference is in conjunction with a CouchDB conference too, so maybe I should keep submitting proposals!

Got "wristmap" mostly working

wristmap showing a B&W map of Richland on the Pebble wristwatch

My "Hello World" app for my Pebble watch is called wristmap and it pretty much just shows a map of where you are thanks to Stamen's Toner tileset. You can zoom with the buttons and that's about it for now. Something small I should be able to ship, though.

Also contributed some patches to a libpebble fork that's helping me test httpebble usage via my Mac (instead of my Nexus 7) during development.

patches to libpebble

I suspect in practice there's some optimization that will be needed before deploying this. Right now the watch has to make about 50 HTTP requests per screen refresh which Isn't Ideal™. I've been studying Huffman coding and might like to try my hand at an implementation ;-)

Continued progress on Microstates

…specifically, I'm starting to see signs of life with the node.js module I'm putting together to wrap the Raspberry Pi RF24 library.

Didn't forget Fermata

I have an http client named Fermata that I use all the time but haven't urgently needed to improve much lately. Finally found a bit of time to think through the design of some lingering "nice-to-haves" before calling it a stable 1.0 release.

Fed the fish

Prototype fish feeder in place (photo by Hjon)

Before we left, by which I mean still going at it about 10 minutes "before we left", I was testing sketches and flashing firmware and forwarding ports so that I could start using my greenhouse controller remotely. Thanks to some coding on the road a willing mechanical engineer friend back in town, we were able to re-connect the parts in place, find RF reception and FEED THE FISH from a thousand miles a way. Yay internet!


I got a lot of time in with both immediate and extended family too — whoohoo! In case you were wondering.


All posts