Cabbage favorite

About six months ago I stumbled across this video recipe for preparing a sort of cabbage omelette. It’s quite simple and takes about 20 minutes to prepare. The trickiest part is flipping the omelette midway through cooking. If you happen to have a two-sided omelette pan like in the video, it’s straightforward. If not, you can invert a dinner plate on top of the frypan, carefully flip over both the plate and pan together leaving omelette on the plate, flip back the pan and set on the burner, and finally slide the now flipped omelette off the plate and back into the pan.

LTE Filter for OTA

SiliconDust LTE Filter

We’ve been pretty committed cord-cutters for a number of years now.

That typically put us on steady diet of Netflix and Prime Video.

This little gizmo, for better or worse, has opened up a new world of over-the-air broadcasts. Before stumbling on it, over-the-air tended to be highly failure prone, in the form of degraded reception during our favorite shows. Since adding the filter, picture drop-outs while not completely gone have largely become a thing of the past.

One of my favorite new discoveries is Localish.

Good Morning!

It’s been a while. How have you been?

This morning I saw a great piece linked from Hacker News called People don’t work as much as you think. It’s a terrific read. For me the salient idea is that there are different types of work, and a work day will often be a composite of those types of work. Perhaps some fractional part of the day will be what the author calls “hard thinky work”. At best it will be a couple of hours and the rest will fit into some other pigeon hole. And that’s ok.

Dentist chair conversations

I paid a visit to my dentist this week.  As I sat in the chair having a sort of half-conversation with her, tubes and picks sticking out of my mouth, it struck me how both unusual and applicable dentist chair conversations are.  Have you ever had a conversation where you’re completely engaged with an idea and just can’t get the words out fast enough, your mind constantly racing ahead?  The pitfall in these situations is that you don’t take the time to listen, appreciate and react to the ideas of the person you’re conversing with.  The conversation may become one-sided, the other person politely nodding their head, hopefully amused by your enthusiasm.  The dentist chair turns the situation around, forcing you to communicate nonverbally, listen and think for a minute or two before your next opportunity to slip in a word or two before going silent again.  So if you think you might be prone to rambling on a bit and want to change that, during your next conversation just imagine that you’re sitting in a dentist chair.


Late this week I tried my hand at pastry, using Weekend Bakery’s croissant dough recipe.  It’s a multi-day process.  Thursday night I mixed the dough, the standard flour-water-yeast-salt components that make up all yeast-leavened breads, plus some milk and butter.

Also Thursday, I created the butter sheet.   The goal is to create a square of butter about a half cm thick and 17 cm on a side.  You can actually buy these pre-made — see here or search for “butter sheets”.  But they’re not hard to make.  There are lots of blog posts and videos about how to do this.  The trick is to work quickly while the butter is at an intermediate temperature between refrigerator and room temperatures — soft enough to roll but hard enough that it doesn’t melt and make a mess — flattening it between two pieces of wax paper or inside a large plastic zip top bag.  For the butter I used Plugrá, a high butterfat “European style” butter that is readily available in my local market.

Friday night I did the “laminations”.  The goal is to create a large number of alternating layers of dough and butter, achieved by the same exponential growth law behind folding paper to the moon.  By folding the dough sheet over on itself three times, and repeating the process three times, you get 3^3 = 27 layers.  This process, which looks pretty involved in the videos, is actually quite straightforward.  The main tips are to use plenty of flour, use a measuring tape to achieve the specified dimensions, and put the dough back in the refrigerator for at least 30 minutes between turns.

Finally, Saturday morning, the payoff.  Rather than making croissants, I split the dough and used half for pain au chocolat, and half for morning buns.  The former are shown below.  On retrospect I should have oriented the pastry so that the seam was squarely underneath and they wouldn’t flap out.  For the chocolate, not having any of the fancy “batons” readily available, I used Ghirardelli semi-sweet chips.

The end results were delicious, for both types of pastry.  Not for every weekend though!

Sizing notes: The Weekend Bakery recipe (500g flour) produced enough dough for 6 morning buns (4cm x 15cm) and 8 pain au chocolat (7.5cm x 15cm).

Pain Au Chocolat

Good UX

Here are two recent experiences I had with software, that represent a great experience I’d like to see more of:

  1. Uber mobile app: When entering your credit card information, instead of manually typing in the number, you take a picture of your credit card, and the app OCRs it from the image.
  2. Fitbit Aria: When setting up the scale, software running your computer locates the scale’s wi-fi server, connects to it and automatically syncs your settings, including your home wi-fi login.  No fiddling around tapping things into a keypad on the scale.

Bravo, and encore!



I made my first flan this weekend — from Jaques Pepin’s recipe.  It’s been in the fridge overnight.  The big unmolding happens soon!  I’ll post a follow-up picture when that happens.

In other news, I’ve updated the software that runs this blog and am testing it out.  I’m also pondering, given the alternative places to write and reach people on the web, how I want to engage going forward.  I definitely want to continue to write on my own domain.  WordPress was a great tool for that ten years ago.  Is it the best tool for that now?   We shall see.

Postscript: see picture below.  The flan split on one side as it came out of the pan.  There are paper towels everywhere because the caramel spilled out when I flipped it.  Looking forward to tasting.



I spent some time last night wrapping my head around how bitcoin works.  Here’s a summary that I wrote up for a friend earlier today. The summary is a bit on the technical side.

The heart of the system is a global, public ledger listing all transactions on the network.  The ledger is called the “block chain”, a term derived from the underlying tech.

Balances are held by ‘addresses’ which function much the same way as bank accounts.

  • An “address” is the public side of a public key / private key pair.
  • Transactions can only be initiated by the address owner, who has the private key.
  • Transactions are authenticated by any number of peers on the network, using the address’ public key.
  • New addresses are cheap to create, and can be created by anyone at any time.  It is common for people to use many many addresses.
  • The balance for any address may be derived by locating the first appearance of that address in the block chain, and rolling forward all transactions in the block chain involving that address.

Transactions are committed in batches called “blocks” about every 10 minutes.

  • The network requires an expensive computation to be performed in order for the for transaction set to be committed to the public ledger.
  • The computational cost protects the network against fraudulent transactions.
  • The computation is a hash of the transaction data, the previous block’s hash, and a number called a “nonce”.
  • The fun part: the hash must begin with N zeroes, where N determines the computational difficulty.
  • The higher N is, the harder it is to find a nonce that produces a qualifying hash.
  • Why?  Because we don’t know a-priori what nonce will produce the needed number of zeroes in the hash, and must brute-force the computation by trying different nonces until one is found.
  • The higher N is, the lower the number of qualified hashes, and therefore the harder it is to find a nonce.
  • The network moves N up or down over time as described below.
  • Because each block hash builds on the previous block hash, the blocks form a “chain” which is very computationally expensive to rebuild once it is set.  This protects the network from fraud.
  • The network incentivizes this hard computational work by rewarding the committer with newly minted bitcoins.
    • The people who do this work are called “miners” because the net result of their work is like mining gold.
    • It is a competitive business.
    • Only one miner can commit a block of transactions and get the reward.
    • Miners race to be the first to commit a block, deploying electricity and hardware to gain bitcoins.
    • The network adjusts N to maintain a pre-determined rate of bitcoin creation as hardware improves and miner interest fluctuates.

    Dude, where's my git repo?

    Imagine you’ve joined a startup as the tech lead. The founder has a prototype, which she built with a contractor. Conveniently, the contractor hosted the code on github, so you fork the repository and you’re off and running. Months of building go by. The contractor, while still friendly with everyone, has moved on.

    One day, you go to push your latest commits to github, and you get an error message that the remote repository cannot be found. You log into github, and the repository is gone. All traces of it have disappeared.

    What happened? It turns out that Github treats private repositories in a special and unexpected way: private forks disappear when their ancestor is deleted from github. So when the contractor, needing to free up space in his account, removed the prototype repository, all its children went with it. Caveat emptor.

    This might sound scary, but since every git repository carries its history, it’s actually pretty straightforward to recover so long as you have an up to date clone of the repo handy. Here is the procedure:

    1. On github, create an empty private git repository having the same name as the old one, in the same github account as your fork.
    2. On a machine containing a checkout of the code, make a bare clone of the repo and mirror it to the re-created repo on github:
      git clone --bare /path/to/code /tmp/repo.git
      cd /tmp/repo.git
      git push --mirror
    3. Now you can fetch, pull and push in the original checkout as if nothing happened.

    Fifty-Fifty Spaghetti

    Try this some time: when making spaghetti, use half regular noodles and half whole-wheat noodles.  The latter have lots of fiber making for a hearty and filling meal, but for most sauces I find them to be a little too heavy.  Cutting the whole wheat with regular pasta gives a light taste while retaining some of the good stuff.  My kids, who normally eschew all things fibrous, barely notice the difference and happily wolf it down.