Posted 2 months ago

clockgif for Ignite-style presentations


If you want to use Google Slides to make an Ignite-style presentation where the 20 slides are each 15 seconds, throw this animated GIF in the corner of the master. Want to make your own? Check out the repository and customize it.

There are 20 copies of the 15-second sequence in the GIF. This is for two reasons. First, Slides doesn’t reload the GIF between transitions, so if you had a single 15-second non-looping GIF, it would halt after the first slide. Using a non-looping GIF lets you add some slide-to-slide animations, such as a yellow progress bar telling you how far you are in the presentation.

Posted 2 months ago

Trezor setup for the paranoid


  • A regular sheet of paper, preferably acid-free
  • A piece of cardboard that you don’t want anymore
  • Four different pens
  • Four security envelopes (kids: a security envelope is an envelope that has patterns printed on the inside to make it hard for people to hold the envelope up to a light and see what’s written inside)


  1. Fold the paper in half, then in half again, so that you have four quadrants.
  2. Set the folded paper on top of the cardboard as a writing surface.
  3. Go through the first part of Trezor setup, writing the 24 recovery words on Quadrant #1 with Pen #1. Halt at the point where you’ve written down the 24th word and it’s asking you to verify them.
  4. Copy the words from Quadrant #1 to Quadrant #2 using Pen #2. The reason you use a different pen is that one pen’s ink type might be defective and fade over the years.
  5. Copy the words from Quadrant #2 to Quadrant #3 using Pen #3.
  6. Copy the words from Quadrant #3 to Quadrant #4 using Pen #4.
  7. Now go through the Trezor verification process, but check Quadrant #4. This way, if you made any errors in copying from 1-2-3-4, you’ll probably notice them.
  8. Rip up the cardboard (which now contains faint impressions of the recovery words). Flush some of it down the toilet, put some in the trash, put one piece in the garbage disposal… be creative.
  9. Rip the quadrants into separate pieces and put each in a separate envelope.
  10. Seal the four envelopes.
  11. Write something meaningful on the envelopes so you will know what it is when you find it five years from now, but that doesn’t alert anyone else that this is a copy of your recovery words.
  12. Sign the sealed part of the envelope, which will make it slightly more likely you’ll notice if someone tried to open it.
  13. Put each of the four envelopes in different places.
  14. Start using your Trezor!
Posted 2 months ago

My Minilock ID


Posted 3 months ago

Chrome Apps I/O Bytes Video: The Extras

This video was lots of fun to prepare and record. But to be honest, when your main goal is to talk about your teammates’ accomplishments, it’s always going to be fun!

François Beaufort linked to the video on Google+, and in the comments I promised to list all the products and technologies shown or used during production. There is a lot of paperwork involved in getting the permission and rights to explicitly reference other people’s products in a Google-produced video, but there’s nothing wrong with using them in the video, so that’s what I did! Here’s the list.

  • Slide deck produced in Google Slides.
  • Almost all photos were cropped and color-balanced in Pixlr.
  • Slide 4: Google+ Photos Chrome App running on a Dell Chromebook 11. All the backgrounds are the ones included with stock Chrome OS. I selected different ones to provide good contrast for different photos.
  • Slide 5: Sparkfun RedBoard, mounted on Adafruit plastic mounting plate, driving a SainSmart 1.8 ST7735R LCD using the Adafruit ST7735 Arduino library, with the sample app altered to say “Hello I/O 2014!” Dell Chromebook 11 in background, running the Serial Monitor Chrome App from Glen Arrowsmith.
  • Slide 6: Acer C7 Chromebook. One of the few Chromebooks with a built-in Ethernet port.
  • Slide 7: Looks like WeVideo won the carousel spin-off. I took a bunch of pictures for this slide, and because the carousel rotates, many different apps were in the background.
  • Slide 8: a fairly standard Chrome App Launcher pane on the Dell Chromebook. Pinned apps include Secure Shell, Caret, Happynine, ScanQR, and Keep. There’s also a not-very-visible icon for Spark, which was the code name for the just-unveiled Chrome Dev Editor. Those are some of the apps I personally use, so that’s why they’re on my shelf!
  • Slide 9: Google Now. There’s also an out-of-focus fire pit in the background. It’s in my yard.
  • Slide 10: Chromebook Pixel. Also a Nexus 5 phone. If you look very carefully along the right lengthwise side of this phone, you’ll notice the frame is bent. I destroyed that phone while go-karting. But it’s still good as a photo prop.
  • Slide 13: The blog post announcing the launch of the Chrome Apps platform.
  • Slides 14-22: Code and doc snippets rendered using a slightly customized version of François’s Marmoset Chrome App. I changed the app to move the camera position so that the text appeared in the proper place on the slide, and I changed the color to match the slide theme.
  • Slide 23: Chrome Apps & Extensions Developer Tool.
  • Slide 24: Spark, again.
  • Slides 27-28: Same shelf of apps, but also a reference to the very cool Sunrise Calendar Chrome App.
  • Slide 30: An Akai MPK mini, which I use when I pretend to produce music.
  • Slide 31: My wife’s JayBird BlueBuds X Bluetooth headphones. Continuity flaw! These headphones aren’t BLE — they’re Bluetooth 2.1. I didn’t have any hardware at home that was both genuine BLE and generic-looking enough that it wouldn’t look like a product endorsement, so I chose the headphones as the lesser evil.
  • Slide 32: JavaScript Promises on html5rocks.
  • Slide 33: A Beaglebone Black.
  • Slide 35: Alex Russell’s Service Worker explainer.
  • Slide 37: How Many People Are In Space Right Now? One of many amusing websites found on /r/internetisbeautiful.
  • Slide 38: Toshiba Chromebook, model CB35. I don’t know whether there’s a difference between the CB30 and CB35.

That’s it for slide content. I’ve gotten a lot of questions about the photography. It’s a Canon DSLR with a 50mm f/1.4 prime lens. This lens is tricky to use because the depth of field is very narrow for many closeups, but if you can manage to focus the specific part of the subject you want to highlight, then you get a lot of bokeh for free, whether you like it or not.

Posted 7 months ago

How to play Minecraft on a Chromebook

First Time

  1. Get your Chromebook into Developer Mode.
  2. Install Crouton. This guide will assume the installation command you use is sudo sh -e ~/Downloads/crouton -t unity -r saucy and that when you are asked for a new username/password, you enter user/user.
  3. sudo apt-get install gnome-terminal (to avoid going crazy)
  4. sudo apt-get install python-software-properties software-properties-common
  5. sudo add-apt-repository ppa:minecraft-installer-peeps/minecraft-installer
  6. sudo apt-get update
  7. sudo apt-get install minecraft-installer
  8. Just to be sure you start from a good place, reboot your Chromebook at this point.

Each Time

  1. Power up your Chromebook.
  2. Type Control-D at the scary screen or wait 30 seconds.
  3. Sign in as yourself or guest or whoever. Doesn’t matter.
  4. Control-Alt-T to get into crosh (or better install the Crosh Window utility and use that).
  5. shell
  6. sudo enter-chroot
  7. startunity
  8. Click on the Ubuntu circle in the upper-left and start typing minecraft. The icon should appear. Click on it.
  9. Play Minecraft.
  10. To switch back and forth between your Linux and ChromeOS environments, use control-alt-shift-back/forward (where back/forward are either the keys between esc and refresh on your Chromebook keyboard, or else F1 and F2 on your standard PC keyboard).
Posted 10 months ago


Supercapacitor + incredibly high efficiency LED. The light switch is actually an inductive-charging receiver. To switch on the light, you place your phone near the switch. The phone charges the supercapacitor, and the light stays on for a reasonable amount of time.

Application: a picture frame, hung on the wall, where you want to be able to provide spot lighting for the picture but don’t want to run wires to it.

Posted 1 year ago
Dad, you smell like science.

— My four-year-old daughter

(Perhaps my proudest moment as a parent. She said this after I’d been working with etching chemicals for a few hours.)

Posted 1 year ago

Generating elliptic-curve keys in OpenSSL

  • Generate a key: openssl ecparam -name prime256v1 -out new-ecdsa-key.pem -genkey -noout
  • Show the key just generated: openssl asn1parse -in new-ecdsa-key.pem
  • Generate the public key corresponding to the given private one: openssl ec -in new-ecdsa-key.pem -pubout -text -noout
Posted 1 year ago

paSSSphrase: safely store secrets for your successors

My latest GitHub project, paSSSphrase, was inspired by a recent Instructable about electroetching digital assets.


The basic idea is to split a strong passphrase among multiple shares according to Shamir’s Secret Sharing algorithm, then generate an inverted/mirrored image of the shares as QR codes. The image transformations make for an easy electroetching stencil.

So far I haven’t actually done this process for a secret I care about. But I thought electroetching was interesting enough to want to spend a few evenings working on it. I wrote up what I learned from my experience in the project README.

If you try this, let me know! (But don’t send me pictures, please, unless you want to share your secrets with me.)

Update: The poor man’s version is lines=( $( LC_CTYPE=C </dev/urandom tr -dc ‘[:alnum:]’ | head -c32 | ssss-split -t3 -n5 -Q ) ) ; for line in “${lines[@]}”; do qrencode -o share-${line:0:1}.png $line; done. This version just spits out the shares as individual PNGs that you can print on regular paper. You can verify the results even if you don’t have a QR-code scanner with zbarimg —raw share-*.png | ssss-combine -t3 -q.

Posted 1 year ago

Ten Things I Believe About Bitcoin

  1. Bitcoin is not anonymous. The sooner everyone accepts this and stops saying otherwise, the better. Bitcoin is like cash, except every person you ever do business with writes down the serial numbers of each bill in a ledger that’s available to everyone forever. That’s not what most people would call anonymous.

  2. Bitcoin will not stick it to The Man. It’s romantic to think that Satoshi invented a parallel world where we can lead normal lives by day and rent nuclear-powered tax-free hookers at night. In the real world, MP3 singles are 99 cents, which represents 15 years of progress in the music industry. Bitcoin is probably the end of Western Union and money orders. It will lead to a day of reckoning for Mastercard/Visa,, and PayPal. It is not, however, the harbinger of your libertarian utopia.

  3. The final number of Satoshis is numerically capable of representing the amount of all the wealth in the world, in U.S. dimes. It is also true that I can write a personal check for $999 billion if I write narrowly enough in the little box. These are useless facts. Stop repeating them. The currency has more than enough precision for any practical purpose. If it doesn’t, it’s easy to fix in code.

  4. If Bitcoin represents just 1% of 1% of the total world’s wealth, each Bitcoin will be worth about $1,000. And if the novel I’m writing gets finished, then gets published, then makes it to the Amazon Top 100, I’ll make a pile of money. This is useless conjecture. Stop repeating it. For Bitcoin to succeed, it needs more time, more infrastructure, more acceptance, more smart people paying attention to it, and a huge amount of luck. This would be true no matter how big the world was.

  5. Bitcoin will be responsible for at least one suicide in the next five years. This is an evocative way of saying that end users are not capable of managing private keys. Even users that are capable enough sometimes have shit happen to them. The penalty in either case should be something less than irrevocably losing their entire life’s savings. Solving this problem is possibly the largest Bitcoin startup opportunity today.

  6. Bitcoin will be responsible for at least one murder in the next five years. This is an evocative way of saying that irrevocable transactions are not appropriate for every situation. Banks, credit-card companies, and many other entities in the financial industry exist in order to allow customers to choose risk allocation (other than the default choices of zero and all). If you’ve ever disputed a credit-card charge, or stopped a bill payment, or reset your bank website password, or had a stolen ATM card replaced, or paid a penalty for overdrawing a check, then you’ve used the services that the financial industry provides you. And any of these — even if the fees for them were outrageous — is better than handling the matter directly with the other party to the transaction, if that’s even possible.

  7. Bitcoin is an interesting technology in the same way that TCP/IP is an interesting technology. The Internet could not exist without TCP/IP. Yet not a single Internet user in the world cares about TCP/IP. (Full credit to Brian Armstrong of Coinbase for sharing this analogy with me.)

  8. The early miners are wealthy in the same way that early Internet domain squatters were wealthy. Some of the domain squatters made amazing amounts of money with almost no intellectual work, and back in 1998, it was easy to feel like the gold rush was already over. But as with the Internet, the real wealth in Bitcoin will be created by people who figure out the right abstractions on top of Bitcoin that make an economy available, usable, and better than what we have today. Very few people are even close to doing this today. Who will be the Google of Bitcoin? Who will be its Cisco? Who will be its Akamai? Who will be its Facebook?

  9. If Litecoin or any cryptocurrency other than Bitcoin gains traction, then Bitcoin and all other cryptocurrencies will fail. No cryptocurrency today is sufficiently different from Bitcoin. If another of today’s cryptocurrencies succeeds, then smart people will realize that any modern cryptocurrency is subject to devaluation simply because it’s not the Flavor of the Week, and smart people will flee all cryptocurrency. Call this the weak version of the “Screw All This Coin Crap, I’m Selling” Theory. The strong version is that no cryptocurrency other than Bitcoin can succeed, because smart cryptocurrency believers will figure out the weak version on their own and avoid altcoins. This leaves only short-term speculators to put funds into altcoins, which means that altcoins are doomed to nothing more than spiky pump-and-dump cycles. Incidentally, this is at least one reason why Ripple will fail, which is too bad, because if they got rid of XRP and just made it a decentralized high-speed payment network and value store for Bitcoin, it might become an essential layer of the kind imagined in Things 5 and 6.

  10. Bitcoin might never take off in the United States, but it can still succeed. My country is busy chasing its tail over national health care, intellectual property theft, and rendition of domestic-spying whistleblowers, all and more in the name of fighting terrorism. Meanwhile, the world needs a currency to match the power of the Internet and ubiquitous mobile phones. A borderless currency is an essential ingredient to a worldwide information economy. Bitcoin can be that currency, even without uptake in the United States.

    In fact, that’s kind of the point.