rlucas.net: The Next Generation Rotating Header Image

The Wile E. Coyote Economy, Part I

In the Road Runner cartoons of my misspent youth, Wile E. Coyote would chase the bird, often right over the side of a cliff. Both would keep running, but at some point, the hapless coyote would look down and realize he was in thin air. Only then did he plummet to the bottom of the canyon.

It’s August 2020. COVID deaths seem to have settled to a steady rate (that is, no longer accelerating, but still a terrifying daily plane crash full of premature deaths).

The stock market is at or near an all-time high. Software revenue multiples are high as ever. VC deal volumes (with a bit of reporting lag) are surging.

It’s not just financial assets. Top-tier market housing prices are strong as ever.

In addition, that venerable barometer of bubbliciousness, the SPAC, is pinging off the charts. Special Purpose Acquisition Companies, the so-called back-door IPO, have gone insane, nearly doubling the deal count and with a markedly increased deal size from 2019 to 2020, despite the pandemic.

My thesis is that the US economy is running on a form of inertia right now — the way Wile E. Coyote would run right past the edge of the cliff — and that an inevitable reckoning is due any moment.

Why haven’t we seen this yet in asset prices (everything from stock tickers to VC deal valuations to house prices and bonds)? Absurd money printing. Money printing of a type and degree that dwarfs the 2008-09 crisis intervention.

In addition, this money printing is so furious it’s overflowing the usual spillways and is seeping or gushing out through all sorts of unconventional pathways (unconventional and, importantly, highly corruptible).

The Fed is literally buying corporate bonds, meaning, lending money to selected corporations. The stated reason here is to support the overall lending market, but the way that happens is literally by making it cheaper for companies to borrow than the market would otherwise price it at. That is, they are directly subsidizing the borrowing of select companies. They are a hair’s breadth from just buying individual stocks to support the price.

Arguably, the Kodak loan fiasco is exactly this, a debt-fired pump and dump directly orchestrated by a presidential crony.

Since that which is unsustainable cannot be sustained, I have a few predictions. They are absolute in effect but uncertain in time, though we have some hints about timing.

First, the current (Trump 1st term) administration will be doing absolutely everything in its power to goose the markets and the money supply through the November election. If 2020 starts to look like 2008, namely, the market tanks going into November, the incumbent will lose in a landslide. The incumbent’s only hope economically is to pump another speedball of easy debt and loose spending in. The administration, however, is so remarkably incompetent that we cannot be assured that they will succeed even in this.

Second, a major reckoning will come in equities, but it will probably be an across-the-board, “risk-off” correction where all assets deflate in price. This will either be sort-of-orderly, in the sense that it may be a reaction to “strong medicine” from the Fed (unlikely until after the election and only in reaction to inflation that might arise from, say, an unexpectedly fast and effective vaccine release). Or, it will be not-at-all orderly, more in the vein of Q4 2008.

Third, public debt will go bananas. Tax revenues will be so screwed for so many jurisdictions that they will need to borrow record amounts. Unemployment coffers are empty, rainy-day funds are being emptied out, and personal and corporate income (and gross / B&O taxes like we have in Washington) will be so impacted that few states or cities are going to balance their budgets.

Fourth, longer term, the inflationary imperative WILL eventually take hold. I admit I expected that vast increase in money supply following 2008-09 would have had this effect, but it didn’t. But that was more of a steady asset price tailwind that went along with reasonably OK public finances and tax receipts. This time, the combined pressures of state and federal debt service levels will create an irresistible impulse for politicians to inflate away the debt.

(A note and a hedge: the risk-off reckoning and the inflationary imperative seem destined each to happen but obviously Washington DC and NYC will be doing their best to overlap them. If they stick that landing, virtuosic if improbable, then we might not see them independently happen. Rather, you might get CPI inflation kicking in for the first time in a while while financial assets stay bounded. But I think it likely that you see them independent: first a financial asset correction and then a scramble to prop it all up which results in the inflation.)

Fifth, the generational effects here are going to drive massive political will to swing the pendulum away from favoring accumulated capital. Since the effects of asset price inflation (even the relatively mild continuous stuff we’ve been seeing) tend to hugely advantage large and leveraged asset owners, those who are currently under age 31 (average first time home buyer) are going to get the double whammy of increased dependency ratio along with basically no benefit from asset inflation. This will be Piketty r<g stuff. They are going to vote the bastards out.

So. It’s going to be a bumpy decade. Hold on to your hats. And hold some cash, TIPS, and gold. (Do NOT buy more beans and ammo than you should already have; there IS no run-for-the-hills scenario because we need each other to feed, heal, supply, counsel, teach, and otherwise keep body and soul together. There is no America if you are shooting neighbors over your canned beans.)

Very soon, and it may be while the heat of summer still rages, Wile E will look down and discover the canyon below. One thing is certain for me though: gravity exists and it will not let the coyote cross the canyon to the other side completely without some kind of reckoning.

In Part II I will have some more specific thoughts about how the Wile E Coyote inertia is affecting specific social relations in the world of entrepreneurial startups.

Exchanging thoughts on a Thoughtexchange investment

I’m very pleased and excited that Thoughtexchange is Voyager Capital‘s first investment in British Columbia out of our new Fund 5. The press coverage has been great, and the company’s mission and traction should always be the primary focus — but here on my personal blog I wanted to share a bit of why I’m so excited to be a part of the Thoughtexchange story.

It starts with a lunch conversation going into overtime, but it might be helpful to understand a little background on why the entire project of Thoughtexchange is so important and so timely, both for me personally and for our society.

I like to describe Thoughtexchange as an antidote to the ills of social media. Where social media have given us distraction, discord, and disinformation, Thoughtexchange enables a positive interaction that tends towards consideration, cooperation, and consensus.

Background – Ills of the Social Media Age

After the 2016 US election, several themes came together for me. Social media’s very architecture was a treadmill demanding attention in a way that drowned out signal in favor of noise (or manipulation). Personalization and prediction had been touted as panaceas, but instead became structural pillars reinforcing this architecture of negativity.

This is not just an annoyance but a major, maybe existential, threat: the biggest problems of our nation and humanity will more and more be solvable only through collective action, so a social media architecture that depletes our individual executive function and our interpersonal goodwill might very well prevent us from solving for climate or other planetary-scale challenges.

These ills are magnified in terms of speed and scale, far beyond all precedent, by the technology that our industry produces. If anybody has the power to help alter this course, it’s the relative handful of technologists, entrepreneurs, and investors making focused, reasoned choices about architectures and products that proliferate, not the atomized mass of consumers responding to what’s on offer. So it’s particularly incumbent on VCs and startup folks to act.

Yet, acting on this imperative presents a challenge for me professionally: my “hammer” as a VC requires me to deliver financial returns to our investors. So, we need to look for “nails.” As promising as any given open source or non-profit effort might be, we would have to turn away and work only on what could be powered by a venture investment. So when I started focusing in earnest in 2018, it was unclear to me that there even could be a for-profit approach that could serve this urgent need.

I was delighted, however, once I started looking, to find that there were many thoughtful and dedicated minds working on aspects of this problem. Some were tackling civility and content moderation. Some were approaching the issue of reputation and pseudonymity. But most were very early, establishing traction only with highly intentional communities of early adopters.

Encountering Team Thoughtexchange

That’s why when I sat down for lunch with Throughtexchange’s Dave MacLeod, I got very excited: “Te” (as they call it) was achieving some truly remarkable results with large organizations from industry, nonprofit, and education.

(I also want to express gratitude to my good friend Minh Le from Silicon Valley Bank for originally connecting us. Minh is a banker at the top of his game and a great person.)

Thoughtexchange’s benign social technology tends to create consensus and cohesion. It’s social media’s non-evil twin — the opposite of the FB/Twitter outrage machine. All this, and people were paying them real money! Hammer, meet nail indeed.

What’s more, the team at Thoughtexchange had managed to strike a very useful balance between being mission-driven and being a great business. Not every great mission is suited to a for-profit venture approach — in fact, few are. But “Te” had married a sustainable business model with the kind of aggressive growth plan that calls for venture capital — all the while sticking to their values and a sense of missionary zeal. Wow.

I was worried Dave thought he was dealing with a crazy man as, during our first lunch together, I got more and more excited and tried to tie in this broader thesis with its threads of fake news, filter bubbles, foreign election interference, leading up to existential threat to humanity. But that might not be so crazy after all.

It turns out that versions of these same dangers and difficulties face any large organization that needs its people all pulling together for the common good, be it a school district, an accountancy, a union, or an airline. Te helps them all.

The Commercial Pitch

If you’ve read this far, I feel like I should give you my best shot at the commercial pitch for Thoughtexchange.

For a senior leader in an organization facing open-ended challenges, Thoughtexchange can uniquely help you find the path ahead by relying on your best dataset and analysts — your own people.

Unlike a survey — which is great if you know that the answer is either A, B, C, or D, and you want to find out which one people prefer — Thoughtexchange empowers leaders when the set of possible answers isn’t even known yet.

This is particularly crucial for the hard, scary, “soft” challenges of large organizations, like changes in workforce composition, big digital transformations, and overhauling broken or problematic cultural issues.

And, leaders who use Thoughtexchange not only get better knowledge to map the way forward, they get teams and communities who are more engaged and respect leadership because of how Thoughtexchange makes them feel engaged and respected themselves.

A Cascadia Story

Finally, a story about Thoughtexchange from a Voyager Capital investor wouldn’t be complete without noting that Thoughtexchange is a classical Pacific Northwest story.

The company’s headquarters are located in far eastern British Columbia, in a ski town (Rossland, B.C.). It’s basically required to be an alpine skier in winter and a MTB aficionado in summer. And along with that stereotypical Canadian niceness, there’s a hearty dose of rural Western self-reliance and weighting substance over fluff.

Proof positive that great things don’t exclusively come from the S.F. Bay Area echo chamber, and a great case study in how Northwest companies can survive and thrive because of, not despite, their location and culture.

Self-learning, fault-tolerant parsing

I was reading this piece on “Human Grade Parsers” from jckarter and it reminded me of something that’s been sticking in my brain for the past 18 months or so and refusing to go away.

The idea is for a fault-tolerant adaptive engine that I can apply to data ingestion, combining the ideas of ML and parsers.

For (what has now become) my side project, I get a lot of data files that come in, typically in CSV but also XLS, fixed width, and some oddball proprietary forms, generally with about a kilobyte of numerical data per record.  Happily, though, they mostly all should resolve to something similar: a rectangle of (mostly) floats.  (Sometimes it’s strings or dates or ints but the interesting bits are largely dollar values.)

As I (or my teammates / contractors) have banged out adhoc parsers for this mess, it gets tedious: over and over again, there is a particular step applied.  Sometimes it’s a bit of code you can copy-paste or, if feeling ambitious, try and abstract into a separate method / function.  Sometimes, it’s a bit of analysis you need to apply, hopefully only once, while writing code, usually by looking at a few of the input files: is this column the unique ID?  Is this column a zip code?  A zip+4?  A “only the first five of the zip, if there’s a +4 it’s in the next column?”  Etc., etc.  Only rarely is there something that’s truly unfamiliar or tricky.

The temptation grows to try to block out these various steps into modules like “try breaking this on commas” or “try breaking this on tabs” or more relevantly, “try using some heuristics and a fitness function to search all the possible fixed-width column boundaries to find a list of column break indices.”

Of course, writing this — even if the code itself is modular — as a series of try/catch blocks that sort of tend to fit the shape of the input file/string/stream is still tedious.  What I get to thinking is this: I should have a grammar that defines valid productions, and goes through like a recdescent parser, and tries to find the best valid production for a given input.  At various steps, there may be fitness measures, and there is an ultimate set of fitness measures (or features?) that can be observed: things like, the number of cols per record, the agreement as to number of cols per record, the average size of a record, the presence of certain characteristics (at least one unique ID column, at least one mostly uniqueish string name column), and the overall number of records per input.

The valid candidate productions from the grammar would basically be programs.  If they execute successfully on an input, they would generate an output.  Some of the productions, though, would be variadic in certain elements.  For example, the “find the column break indices” step would require a list of column breaks.

Is this just recapitulating “genetic programming?”  It’s not quite random.  But it does generate a possibly large number of candidates that I will rely upon ML type techniques to optimize for.

Am I just exercising recency bias to think about it as a parsing type problem now?  Parsers usually (in my limited experience) try to return the first or best production but the rules are kind of binary — works or doesn’t — and I will have some rules that could result in several OK but not optimal productions that will need to later be sorted and picked from.

Copious free time here.  But the allure of writing one CSV/XLS(X)/fixed-width parser to rule them all is strong…



Execsplaining the McSweeny’s “Business Words”

Wendi Aarons over at McSweeny’s has been getting a great deal of attention to this cringe-inducing true-to-life parody of a business bro yelling into his phone at the airport: https://www.mcsweeneys.net/articles/im-going-to-close-this-deal-using-business-words-ive-heard-men-yell-in-airports

It’s quite funny but it also strikes me that after 15 years or so straddling between the wild-west of pre-anything startups and the mainstream corporate/business world, I too have fallen into using some of these phrases or tropes.  Why? I wonder.  And the truth is because these stylized phrases are useful shorthand for repeated patterns — they are, inelegant as they may be, the pattern language of business (here, being the practical craft of persuading and making deals among organizations, as practiced primarily by managerial executives).

(So I decided to “Exec-splain” them.  It won’t make a ton of sense if you don’t read the thing first.)

Who just joined? Did someone just join?

Conference calls are a standard way in which more than two people collaborate in real time; other ways include meetings (face to face) and, more recently, chats / Slack channels. Conference calls are audio-only and generally therefore lack the visual cues of who else is present. Socially it’s very important to know who’s present, especially because the real time collaboration methods often are implicitly the informal deal-making that reflect social capital being accumulated or spent (in contrast to formal methods of setting agendas, circulating memoranda, signing contracts or purchase orders, etc.). Most conference calls have a distinctive “chime” signifying the entry of a new party to the call, which prompts curiosity among the participants as to who has joined. Additionally, many business people re-use conference call “bridges” (phone numbers) and therefore might have unknown or unscheduled folks joining. A strong social norm requires new callers to identify themselves, and this norm becomes almost inviolable if they are asked explicitly.

rally the troops; circle our wagons

Business organizations generally have groups of diversely-motivated agents who pursue their own interests (be they individual or sub-group interests, such as salespersons pursuing their commissions or departments protecting their budgets). Organizational goals will, over time, tend to suffer if these sub-goals take priority. Therefore, periodic exhortations must be made to inspire, cajole, bribe, or threaten subordinates if the organizational goals are to be served. An overly militaristic phraseology is an unfortunate commonplace in this world and is reflected here, but it also serves to indicate the speaker’s desire to evoke an esprit de corps and/or a cohesion-inducing in-group/out-group mentality among the larger organization.

circle back; moving forward; main takeaway

Business conversations often descend into details, the overmuch contemplation of which can delay more important decisions and information exchange. Deferring or avoiding this contemplation can be both a necessary practical matter in many cases (avoiding a “rabbit hole”), as well as a rhetorical judo move meant to move the counterparty away from some unfavorable topic (“glossing over” a defect or sticking point). Circling back might signal a willingness to revisit a topic. (Alternatively, circling back might mean a follow-up communication at some point in the future.)

low-hanging fruit

The desirability of business outcomes often follows a Pareto / power-law / diminishing returns distribution function, and some such outcomes will be relatively obvious or non-controversial. It can often therefore speed up the pace of a negotiation or contemplation to have parties agree to exploit the easier, more lucrative, or more efficient parts of that distribution.


A lot of business deals are mired in inertia; the various pre-existing relationships and obligations seem to “weigh” on the ability of parties to move forward. This term is a shorthand for imagining an ahistoric, unconstrained environment, meant to inspire parties to think beyond a local maximum or a short-term equilibrium point.

white papers

In particular, technological business dealings often require an intermediate level of understanding between a merely verbal or largely graphical/visual presentation and a technical implementation. The use of a prose description of perhaps two to ten pages, often augmented by schematic diagrams, is a crucial tool to communicate these intermediate forms and to persuade audiences who have already “qualified” their interest in the matter, yet who may not be worth the time for a deeper and costlier engagement to inform.

drinking from the fire hose

Modern businesses (though frankly even old timey businesses) typically reach far beyond human scale, meaning that at some managerial level it becomes impossible to intake and understand all of the relevant facts and details about some operation in a reasonable time. This might mean it is never feasible, such as for the manager of a large conglomerate, or it might be relative to a time frame, such as for a newly-appointed technical expert expected to opine on some complex system in a few days.


Business executives generally have broad leeway as to how they spend their time, but are accountable for results. It is socially inappropriate in many spheres to indicate that someone is not worth additional time (which is what this means, if you think about it). A face-saving practical measure is to appeal to the interlocutor as a peer and to plead some external force majeur; surely your peer would also yield to the FAA’s phone mandates, so he or she can be shed with minimal insult.


Most negotiated business deals are conducted in a “multi-coup” game-theoretic environment; that is, one expects to play the same or similar game again, eventually, with the counterparty. Therefore, even when driving a hard bargain, it is not acceptable to drive toward an outcome that potentially destroys, bankrupts, or irreconcilably alienates the counterparty.

So.  The McSweeny’s piece is really funny.  And it makes well deserved mockery of business-bro yelling at his phone.

But are business folks buffoons if we keep saying all those things?  (Assuming we actually mean to say all the puffed-up concepts from my exegesis above; of course you’re a buffoon if you’re just saying the words without trying to mean something useful to your work.)  What else do you say?

I sure won’t yell ’em out in an airport though…

B.S. and an apology for private ownership of capital

Stefano Zorzi at Ribbonfarm writes to rehabilitate Bullshit, that is, teleological speech that is at best unconcerned with corresponding to external reality (“truth”) and at worst actively undermines its very existence.

The Unapologetic Case For Bullshit

The whole idea meshes with some thoughts I’ve been having over the past few months about the role of capital, and specifically, individually privately-owned capital, of the real old-school kind.  I don’t mean capital managed by money managers, I mean real rentier-style personal wealth that produces more of itself faster than it can be spent.  I’ll call it big-C Capital for now.

This Capital can bug a (little-r) republican a bit.  One of the criticisms from the bleeding-heart type is that in a society where people still are hungry and ill-clothed, luxuriating in Capital is profligate or at least morally suspect.  Another criticism, one of my favorites, is that the logic of Capital, when it has been accumulated by an extremely capable individual through some productive activity (whether it is high-leverage labor like Michael Jordan or Michael Jackson, or by some kind of entrepreneurial new venture organization), tends to distract its owner away from their productive talents and toward managing the Capital, thereby depriving the world of the exceptional primary talent.

Technocratic types, those with “meritocracy” on the tips of their tongues, as well as the mere bootlickers of existing hierarchy, tend to be friendlier to capital when it is run by institutions or professionals.  Then, the concentration of wealth can be rationalized as serving various abstractions like the “market” and its idea [sic] of the optimal asset allocation, etc. — plus, it conveniently opens a world of jobs in capital-running for those meritocrats or technocrats (and/or bootlickers).  Even the malcontents of that system that have noisily been attacking it, like Taleb with his condemnation of the “intellectuals yet idiots,” seem to be attacking how *well* (risk-return) the Mandarins do at managing (lacking, as they do, skin in the game and hence being prone to all the principal-agent issues), rather than condemning the idea of managing capital toward some achievable optimality.

But the beautiful thing about Capital is that it is not managed toward optimality.  When it is directed by its true owners at their pleasure, they are expressing preference and exercising power — defining the optimal, not pursuing it.

Without Capital, the not-obviously-optimal (or presently sub-optimal, or facially never-going-to-be-anywhere-near-optimal) doesn’t get funded, but with Capital, it might.

What world provides more avenues for opportunity: a world of perfectly rational managed money, run by a Mandarin class self-sure of its judgment and insight?  Or a world of often irrational Capital, where a pet project of an obsessed heiress, or the greed of a spendthrift nephew, yes, as well as the calculated personal intuition of an industrialist, might be the finger on the scale deciding the funding of some ambitious entrepreneur or artist’s dream?  Certainly, if you are amply degreed and pedigreed, and have the taste of boot polish sticking to the roof of your mouth, those rational capital stewards are going to be your friends.  But what if you’re of the wrong race, or religion, or speak with the wrong accent, or have ambitions too big or too small or too long- or short-termed for the career advancement of the Mandarins?  In that case, you’re going to need someone to take a flyer on you, and Capital is uniquely truly free to do that.

Zorzi talks about Bullshit as potentially having an optimal (non-zero) level, and about some greater amount of Bullshit as being a transitional stage in reaching a higher plateau or local maximum of “real” truth.  Well, maybe the same is true here.  Too little B.S. being in circulation might tend to mean too high of a consensus around truth, which means too much ossification.  Similarly, too little of the nation’s wealth being held as rentier Capital might mean too high of a consensus around technocratic market-worship, and a similar congealing.

I’m not super proud of the fact that this reading probably means more lauding of Elon Musk (nothing against him; just that it would be nice if an idea about capitalism had the fresh characteristic of not lionizing Mr. Musk even more).  But I am happy that it doesn’t rely in any way on any strain of libertarianism or Randianism for its apology for Capital.  All it says is that as wonderful as we money manager Mandarins are, there is risk that we become merely a better dressed set of commissars, and that truly keeping the system fluid as well as providing opportunity (though not “fairness” per se) for socioeconomic advancement may benefit from some proportion of capital decisions made by truly orthogonal, market-defining instead of market-serving, principals expressing preferences with their own dough (hard-earned or not).



When you hear “The Blockchain,” grab your wallet

All the “thoughtful” executive types (VCs, C-levels, analysts) now seem to share the same low-risk opinion about crypto-currencies.  (“Superficial contrarianism,” perhaps)

It goes like this: “Well, Bitcoin itself is in a bit of a speculative frenzy [knowing chuckle, transitioning to sober contemplation] … however, we think there’s tremendous promise in The Blockchain”

A year or three ago, this seemed like a reasonable stance (give or take the adjective “tremendous”). In 2014, mail-order heroin and low-stakes gambling were basically the only uses for Bitcoin itself.

But 2017 has been the year of the ICO, and the major coins have pretty demonstrably become targets of Real Money by now. So, where are all these promising applications?

Here are some real live examples of the cockamamie schemes that are purporting to use “The Blockchain” as of January 2018. Names have been withheld to protect the fatuous:

  • Copyright (or other intellectual property) registration
  • Paying people to look at advertisements on the Internet
  • CARFAX (automobile history)
  • Employment resume / C.V. verification
  • Basically all of corporate finance (M&A, debt, equity)
  • Foreign Exchange

What do all these things have in common? They are real-world difficulties that are worth paying money to solve. What else do they have in common? They are all things that can be very acceptable solved with pencil and paper, or at most, 1990s Oracle RDBMS type technology.

Why would people change their behavior and pay good money to move these processes to The Blockchain? Surely these proponents have a logic: there must be some particularly compelling piece about The Blockchain, right?

  • “It’s decentralized!”
  • “It is totally immutable!”
  • “It’s totally automatic [‘smart contracts!’] with no way to cheat!”

If you hear this level of glib bullshittery being slung your way as rationale for using The Blockchain for some application, better hold onto your wallet.

Thinking about markets, not technology

In a parallel to the abuse of terminology around the word “disruption,” where people misappropriate Clay Christensen’s theory and talk about technologies themselves as “disruptive,” blockchain cheerleaders talk about technological features as if they were ipso facto benefits.

But “decentralized” or “immutable” or “automatic” or whatever – aren’t necessarily benefits, much less unique and transformative catalysts for market value.

Starting with The Blockchain and trying to shoehorn it in to various market needs is backwards-minded and almost always going to fail. Here’s why.

The Blockchain is not a fundamental technological capability on its own. Rather, it’s a clever combination of three particular features – each of which is a well-understood [if arcane] and widely-available capability. If you need these three particular capabilities for your market application, then The Blockchain is your huckleberry:

1. Path-dependent, unchanging history,
… that works decentralized with
2. untrusted nodes and counterparties,
…and wherein you need to have
3. cheating discouraged by math, not by secrets.

What do these three things mean?

Path-dependent, unchanging history – More or less, this is a “ledger,” where the final state is dependent upon all the changes that went before. One key difference, though, is that in ledgers, you can often go back and insert transactions you forgot to record. Another is that, with ledgers, the final state doesn’t really depend on whether you cashed check #101 before #102, as long as they both got cashed before the reporting date. If you need to keep a ledger that can never be changed (fixed; or, in fairness, cooked) and where it really matters what order everything happened, you need yourself one of these. Happily, we more or less have them and we call them “append-only databases.”

Untrusted nodes and counterparties – In other words, do you need to reliably transact while also expecting that each person you deal with is trying to screw you, possibly with the collusion of at least several others? If you do, my apologies, and you should seek better friends, but at least you have the benefit of decades of academic research on things like the “Byzantine Generals problem,” along with algorithms that can be proven to keep things on the level even when dealing with a network of partially treacherous counterparties.

Cheating discouraged by math, not by secrets – Most of the time when we want to discourage cheaters or thieves, we require some secret-ish piece of information, like a PIN number, a password, or even the pattern of notches carved into a physical metal key. As long as you can make sure the non-cheaters have the secrets (and none of the cheaters have the secrets) this works well. If you can’t be sure of this, though, you can make sure that would-be cheaters have to prove that they’ve done lots of long division and shown their work longhand on paper, which takes some amount of time no matter how clever they are. This is more or less the idea of “proof of work.”

[Note: After circulating a draft of this post privately, I realized that I almost certainly read Tim Bray’s “I Don’t Believe in Blockchain” at some point last year and unconsciously plagiarized much of the above.  But, even on a re-read this is still mostly true and definitely how I’ve been thinking about this stuff.  So, although I promise I wrote all the words in the section above, let’s consider most of the ideas, right down to the use of specific phrases, to have come from Tim.]

Here’s the obligatory Venn diagram:


Now, what kind of ice-cream sundae do you make with these three particular scoops? Bitcoin, of course. But what is it really useful for? Well, I would say, a medium-sized economy among participants who expect many of the others to be thieves, who are afraid of getting cheated by welchers yet need to trade with these snakes, and who have no way outside of their interaction to share secrets between themselves.

In other words, you have a technological mélange purpose-built for mail-order heroin. That’s basically it.

OK, snarky guy, are you saying there are absolutely no apps for The Blockchain?

Let’s try to be fair-minded here. What are some use cases that really could leverage (or perhaps even require) all of these core capabilities?

The Domain Name System et al. For example, Namecoin. You can imagine that the DNS might one day be (or is already) too big or unwieldy for ICANN to administer through its ICANN/Registry/Registrar/Registrant system. You might then imagine that it becomes much more practical to allow a blockchain-based system where a node can lay claim to a particular unused name after a proof of work, even if others upon seeing it would like to steal it away. This checks the boxes as being a good fit. However, for DNS (and for ARIN and BGP tables and many other things) simply having a means to definitively establish the truth isn’t enough; there’s also the operational side of giving up to date answers very quickly to billions or trillions of queries, for which the actual blockchain piece is useless.

Voting. If you want to have an actually fair election, being able to prove all the votes in an immutable and universally verifiable way, even with the vote-counters as adversaries, this could be a really good app. (Unfortunately it’s a dismal business.) Consider that here you expect everyone else to be a thief/welcher/vote-rigger, and the scale of the problem begs decentralization, plus, there are real practical issues with handing out secrets ahead of time.

Distributed Computation 1: Storage. For example, Filecoin. If you want censorship-proof storage of information, but you need to incentivize participants, Filecoin seems well thought-through. In order to serve both privacy and censor-resistance needs, you need to treat everyone as a thief, and you need to prevent anyone from changing history to be truly censorship-proof. Finally, in order to be sure someone has earned their incentive you need a proof of work. Very clever. Unfortunately, this is also a dismal business, mainly because the cost of storage keeps dropping, and the sorts of things that you really need to keep in a censor-resistant data store, at least in a rule-of-law Western society, are either truly nasty (kiddie porn, nuclear weapons secrets) or simply not that lucrative (proof of governmental wrongdoing / whistleblower leaks).

Distributed Computation 2: CPU. This isn’t built yet. But you could imagine a Filecoin-type system meant to incentivize participants to conduct computation on their own devices and send the results home – sort of a SETI@Home for the blockchain. The problem here is that to really reach venture scale, you will need to allow not just specialized processing of SETI signals, or protein folding, or various of the other specialized decomposed computation problems that are well known, but truly general computing that allows customers to reliably and securely get ad hoc compute jobs of all sorts done. This is much harder than storage; in storage, I can encrypt files or blocks and have a reasonable certainty that the actual storage nodes will never be able to read or tamper with them. In compute, this gets a lot trickier. Imagine doing, say, massively distributed OCR or video rendering. The algorithms to do the heavy lifting will require the input data in an unencrypted, unobscured form – the OCR will need to actually “see” the image in order to read the words. If you are running a malicious node, you can “see” the page I’m sending to you and you could likewise interfere with the results, without me ever knowing. It seems technologically plausible to be able to transform at least some subset of compute tasks in a way that effectively encrypts or obscures both the computation and the I/O – but to do so in a way that is efficient seems quite tricky. If this nut gets cracked, you could see something truly transformative, as it would have the functional properties of Filecoin but with potentially far more attractive unit economics.

What about applications that are partial fits, using at least 2/3 of these core capabilities?

Title plants (land ownership). In the U.S., thanks to some ancient English traditions we’ve inherited, nobody definitively knows who owns what piece of land. The way we solve for this is the quiet but giant title insurance industry, who guarantees the ownership interest. They in turn underwrite the ownership by accumulating “title plants,” which are basically databases from individual jurisdictions (counties, parishes, states, etc.) going back as far as they possibly can, showing all of the valid changes in title. A title plant is an immutable historical append-only record. It’s presently centralized (and this makes for quite a lot of jobs in county recorders’ offices around the country). But it also means that for transactions that “touch” the title to real estate, there’s a small but significant delay and hassle in recording all such transactions with the centralized keeper of the record. If title plants were maintained on blockchains, you could imagine that real estate transactions – not only sales, but mortgages, liens, etc. – could close in seconds at the swipe of a finger or the call of an API. Is this a venture scale opportunity? Certainly if you controlled it all, you could charge a handsome fee and displace the entire title insurance industry. However, it’s unclear that there is any market pressure to do this: most sales, mortgages, and liens involve many other moving parts and changing the turnaround time from one business day to a few seconds on the recordation is of questionable standalone value.

Anti-spam (and robocalls, etc.). It could be that a mix of the proof-of-work and byzantine generals capabilities might be a great recipe for collaborative approaches to stopping or reducing spam and robocalls, by imposing costs on nodes and sub-networks for bad behavior. There are lots of approaches to this problem, though, and it’s not clear that even 2/3 of the blockchain is important – proof-of-work alone might be enough (or you could also just impose tiny charges on each message without fancy crypto math).

That’s it. I’m sure there are more to be found, but not vast greenfields of more applications.

The Blockchain is more like XML than like the Web.

The Web exposed a way to connect mostly-already-existing information and transactions to millions, and shortly thereafter, billions, of people. Subsequently, and building upon that network, new kinds of interactions that were now possible became commonplace (i.e. “Web 2.0” or “social” and “collaborative” technologies).

But The Blockchain isn’t like that. The Blockchain is a technological mishmash of capabilities or features that, in the right spot, can help solve some tricky coordination problems. It doesn’t, on its own, connect people to things they largely couldn’t do before.

In this way, The Blockchain is more like XML. Does anyone remember the 1998-2003 timeframe and the hoopla about XML? At the time, a very valid point was made that markup languages (well, really just HTML) were part of a huge important wave (Web 1.0), and the thought was that this could be extended to all parts of the information economy. XML, as the sort of generalized version of HTML (pace, markup language nerds, I know “Generalized” has a special meaning to you but work with me here), was going to be transformative! After all, it was:

– Vendor agnostic! (hah)
– Text-based and human readable! (hah)
– Stream or Document parseable with off-the-shelf tools! (hah)

Well, it turns out that those things, even when they were all true, were just capabilities that were well suited for some real-world problems and not so much for others. In fact, it was mainly suited for data interchange in a B2B context, or for certain kinds of document transformations. Not particularly compelling for much else.

What was actually important then was the particular flavor of XML called HTML, and the absurd gold rush around that time surrounding it. HTML seemed approachable and it was El Dorado. Everyone and her brother were “coding” HTML and learning how to FTP GIFs to their servers. Eventually, most of those people and companies failed, but in the midst of that gold rush they created a ton of real value.

[One commenter who was early in the promulgation of XML objected a bit here.  I think this is fair.  I’m not saying HTML came from XML; rather, I’m saying that attempts to generalize the basic underpinnings of HTML/HTTP — the human-readable-ish markup for wide interop — fell short, because the tech underpinnings were less important than the entrepreneurial and speculative frenzy.]

What the real story of Bitcoin is.

The real story here is quite the opposite of the new sober conventional wisdom. It’s not the underlying blockchain technology that’s fundamental, transformative, or even particularly interesting.

What’s interesting is precisely the speculative bubble: the specific crypto-coin(s), or more importantly, the frenzy of activity by fortune-seekers drawn to this El Dorado.

The actual underlying technology happens to be a bunch of particular features and capabilities, some of which have been around decades, that happen to be very useful for the main original Bitcoin use-case (mailing around LSD blotter paper with the “B$” logo, or whatever).

The Blockchain of the dilettante investor’s imagination is some kind of brave new philosopher’s stone that can upend any business process. Bullshit.

The real opportunities here are going to be generated by lots of aggressive and more or less smart people feverishly trying new, heretofore “unfundable” things, financed by their own crypto-currency gains or more likely by the wild gambling of the pilers-on who missed the first wave. Some of these gold-rushers are going to create things of real value and of venture scale, if only by a stochastic process.

s3put fails with ssl.CertificateError suddenly after upgrade

We had been using periods / dots in Amazon S3 bucket names in order to create some semblance of namespace / order. Pretty common convention.

A short while ago a cron job doing backups stopped working after some Python upgrades. Specifically, we were using s3put to upload a file to “my.dotted.bucket“. The error was:

ssl.CertificateError: hostname 'my.dotted.bucket.s3.amazonaws.com' doesn't match either of '*.s3.amazonaws.com', 's3.amazonaws.com'

It turns out that per Boto issue #2836 a recent strictifying of SSL certificate validation breaks the ability to validate the SSL cert when there are extra dots on the LHS of the wildcard. Boo.

If you don’t have the luxury of monkey-patching (or actually patching) the code that sits atop this version of boto, you can put the following section into your (possibly new) ~/.boto config file:

calling_format = boto.s3.connection.OrdinaryCallingFormat

(Of course, expect that all of the nasty MITM attacks that stricter SSL validation is meant to mitigate to come back and bite you!)

DB Transaction “BEGIN” in Django shell

Django provides a handy “shell” which can be invoked using the manage.py for a project, and which will usefully setup the necessary Django environment and even invoke ipython for completion, syntax highlighting, debugger, etc.

Also usefully, but very much separate from the shell functionality, Django provides a nice framework for dealing with database transactions through its ORM. One can use django.db.transaction.rollback() for example.

However, the shell by default will be invoked with autocommit, meaning that each individual SQL statement gets committed. When one is poking around freehand in the shell, this might not be for the best, so one may want to turn off autocommit and resort to the choice of being able to rollback().

Unfortunately for that use case, all of the Django infrastructure for beginning database transactions is focused on how to begin a transaction in your code, where it rightly would be expected to be within a function or at least a “with” block. Hence, the docs and the code focus on using decorators, e.g. “@transaction.commit_on_success” or context managers, e.g. “with transaction.commit_on_success():“. Obviously not helpful in the shell / REPL.

If you are in your “manage.py shell” and need to do some romping around in your single-database Django app while being wrapped up in the warm fuzzy security blanket of a DB transaction lest you fat-finger something, you can get the same effect for your subsequent few commands in the shell with:

from django.db import transaction
# do stuff
imp = my_models.ImportantObject(title="Emabrassing Tpyos In the Titel")
# oops
# this is too stressful, let's quit

Caveats: this only works in a one-database-connection setup where using the default connection does what you want; newer versions of Django may have a nice way to do this; don’t trust my random blog post with your production data!

s3put just stops working with “broken pipe”

So your cron job, which has been dutifully stuffing away into s3 your backups nightly or hourly or whatever, just stops working. s3put just breaks with the unhelpful complaint, “broken pipe.”

You can try running s3put with “–debug 2” added to your flags, and watch the lower protocol-level stuff seem to go along just fine until it barfs with the same error.

Check the size of your file. If you’ve got a backup that’s been slowing creeping up in size and is now over 5.0 GB, that’s your issue. AWS apparently has a 5 GB s3 limit for single-part HTTP PUT.

s3put accepts a “–multipart” option, but only if it can find the necessary Python libraries including “filechunkio,” so install filechunkio and try again. With any luck, you can just add –multipart to your s3put command and it will Just Work.

Python matrix initialization gotcha

If you want to spin up a list of lists — a poor man’s matrix — in Python, you may want to initialize it first. That way you can use indices to point directly (random access) into the matrix, with something like:


without having to worry whether you’ve managed to make the matrix “big enough” through appending , looping, whatever.

If you are an idiot like me, you will skim StackOverflow and come away with the naive use of the “*” operator to create lists.

In [1]: lol = [[[None]*1]*3]*2

In [2]: lol
Out[2]: [[[None], [None], [None]], [[None], [None], [None]]]

That seems to work fine for our case — a small 3-D matrix (trivial in the third dimension I admit) initialized to None, the pseudo-undefined object of Python. Sounds good. Wait…

In [3]: lol[0][0][0] = 'asdf'

In [4]: lol
Out[4]: [[['asdf'], ['asdf'], ['asdf']], [['asdf'], ['asdf'], ['asdf']]]

Um. Since the same singleton None object was assigned to each of the slots in the matrix, changing it in one place changes it everywhere.


To do what you actually want to do, use the list comprehension syntax and leave the monstrosity of the * operator alone:

In [21]: lolfixed = [[[None for k in range(1)] for j in range(3)] for i in range(2)]

In [22]: lolfixed = [[[None for k in range(1)] for j in range(3)] for i in range(2)]

In [22]: lolfixed
Out[22]: [[[None], [None], [None]], [[None], [None], [None]]]

In [23]: lolfixed[0][0][0] = 'asdf'

In [24]: lolfixed
Out[24]: [[['asdf'], [None], [None]], [[None], [None], [None]]]