How “Silicon Valley” Nails Silicon Valley

If Washington, D.C. is Hollywood for ugly people then Silicon Valley must be Hollywood for nerds. This article shows how desperate many of those nerds are to be part of a cultural moment, and how frustrated they can be when their Valley-famous bubble is burst by actual fame.

“Some Valley big shots have no idea how to react to the show,” [T. J.] Miller told me. “They can’t decide whether to be offended or flattered. And they’re mystified by the fact that actors have a kind of celebrity that they will never have—there’s no rhyme or reason to it, but that’s the way it is, and it kills them.” Miller met Musk at the after-party in Redwood City. “I think he was thrown by the fact that I wasn’t being sycophantic—which I couldn’t be, because I didn’t realize who he was at the time. He said, ‘I have some advice for your show,’ and I went, ‘No thanks, we don’t need any advice,’ which threw him even more. And then, while we’re talking, some woman comes up and says ‘Can I have a picture?’ and he starts to pose—it was kinda sad, honestly—and instead she hands the camera to him and starts to pose with me. It was, like, Sorry, dude, I know you’re a big deal—and, in his case, he actually is a big deal—but I’m the guy from ‘Yogi Bear 3-D,’ and apparently that’s who she wants a picture with.”

— July 16, 2016

Take it from me: Your local library needs a cat

Yes, yes it does.

— July 14, 2016

Displaying Emoji in git log

tl;dr: Upgrade less to a more recent version to see emoji in git log.

If you've ever seen a git commit message that included emoji, you may have noticed it doesn't display correctly when you use git log:

$ git log
commit bad43bf2d75cc0c75f0d2731a9c9672adfa01160
Author: Luke Francl <>
Date:   Sun Jun 19 09:40:49 2016 -0700

    First commit! <U+1F389>

Recently, I decided to try to figure this out. The first thing I noticed is that if you set --no-pager the emoji is displayed correctly:

$ git --no-pager log
commit bad43bf2d75cc0c75f0d2731a9c9672adfa01160
Author: Luke Francl <>
Date:   Sun Jun 19 09:40:49 2016 -0700

    First commit! 🎉

Git's pager defaults to less. I tried displaying the same emoji with less:

$ echo "🎉" | less

I found a post on Stack Overflow that said to set the LESSCHARSET environment variable to "utf-8". However, that didn't fix the problem:

$ echo "🎉" | LESSCHARSET=utf-8 less

Other characters work, though, like the Euro symbol used on Stack Overflow:

$ echo "€" | less

I don't even need LESSCHARSET because it turns out my locale is set for UTF-8 already:

$ locale

This made me wonder if I could upgrade less (or in more desperate straits, fix the code). I found the source at the less home page and noticed that the version that came installed with OS X (er, macOS) was very out of date. I had version 458 and the current version is 481. I downloaded and compiled version 481 and it was able to display emoji!

The easiest way to get less version 481 on OS X is to use homebrew's dupes repository:

$ brew install homebrew/dupes/less

After installing, make sure you're actually using version 481:

$ less --version
less 481 (POSIX regular expressions)
Copyright (C) 1984-2015  Mark Nudelman

You can force Bash to re-hash the location of less by executing hash -r, or open a new terminal.

Now, you should be able to see your log messages in their full emoji glory!

— June 19, 2016

Faced With Today's NIMBYs, What Would Jane Jacobs Do?

Janette Sadik-Khan and Seth Solomonow argue that to complete Jane Jacobs's urban vision, we must overcome community objections to change:

We should honor Jacobs’s memory today by redesigning our cities as she might have. It’s not just a matter of livability or quality of life, but a long-term strategy for a denser urban future, one that is environmentally rational and economically vital....

But the process to fulfill Jacobs’s vision may require revolutionary action instead of a merely evolutionary course. As city leaders attempt to adapt their cities for the future, they must face down passionate resistance from residents who perversely invoke Jane Jacobs and cite environmentalism, safety, local economics, and community autonomy not merely to oppose out-of-scale mega-projects, but to defeat proposals that Jacobs herself may have supported. Known as NIMBYs (Not In My Back Yard), local residents at official city meetings reliably oppose dense new housing, new public space, bike lanes, or redesigned streets to combat dangerous driving. By using Jane-Jacobs-like language of neighborhood preservation as a decoy to oppose Jane-Jacobs-like projects, many communities are effectively fighting to keep streets exactly the way that Robert Moses left them....

The impact of this NIMBYism doesn’t end with a defeated apartment building or bike lane. Opposing dense, accessible neighborhoods pushes residential development into ever-expanding suburbs and shrinking greenbelts around cities. The fight to leave our streets as they are condemns our nation to a sprawling future, longer and more congested commutes, and escalating infrastructure costs that combine for a $1 trillion drag on the national economy.

Would Jacobs support this? Maybe, maybe not. She has been claimed both by pro-development urbanists and NIMBYs, and has been called out by some as a NIMBY herself. Her legacy lives on in community groups which have both stopped freeways and keep them up. She had some personal experience as a developer and the results were widely panned. Perhaps this taught her about the compromises necessary in development? She also helped create the zoning that infilled the King-Spadina and King-Parliament areas in Toronto:

The results have been breathtaking — and might surprise those for whom Jane is a hero for stopping bulldozers. Not only have the “Two Kings” not lost jobs, as many industrial lands taken out of production have, but the number of jobs has increased by 58%. Even more impressively, 46,000 dwelling units have been permitted in the Two Kings, many of them in very large new high-rises.

The truth is that sometimes stopping development is the right thing. Everyone is glad that the Golden Gate freeway was stopped and that Marincello never despoiled the Marin Headlans. But making our cities better will require repairing them, and that means new development, and it should follow the urban template that Jane Jacobs described so well.

— May 8, 2016

Frog and Toad are Co-Founders

Frog and Toad was one of my favorite books as a child. Now, they are "all grown up and working in San Francisco" as co-founders. The parody is really well done. It captures the current silliness of Silicon Valley in a pitch-perfect imitation of the original stories' style.

Speaking of Frog and Toad, I recently saw an exhibition of Arnold Lobel's work at the Contemporary Jewish Museum. It made me aware of some of the other things he worked on, including the cat-based Whiskers & Rhymes which seems right up my alley.

— April 10, 2016

My favorite books of 2015

We're a quarter of the way into the new year, so it's about par for the course to get my list of books read from the previous year up. Last year I didn't read as much as I have lately. There's one good reason for that, but it's not the only one. Besides chewing off some long books, also abandoned more books last year. I think I am getting pickier.

Here's a few books that stood out last year:

Book Cover

Unbroken: A World War II Story of Survival, Resilience, and Redemption, Laura Hillenbrand

Louis Zamperini story is almost unbelievable. After his Olympic dreams are ruined by the onset of World War II, he became a bomber crewman in the Pacific theater. He survived ditching the Pacific, then 47 days adrift without food or water. Rescued by the Japanese, he then survived the rest of the war in burtal conditions in Japanese POW camps. The book continues after the war, revealing Zamperini's struggle to come to terms with his experience.

Book Cover

The Adjacent, Christopher Priest

This interwoven story of love and war across "adjacent" timelines reminds me of Cloud Atlas by a better writer. This is the only book that has ever gotten me to make a spreadsheet to better appreciate it.

The Adjacent brings in many of Christopher Priest's interests including alternative history and magic as well as his Dream Archipelago setting, which I have not read. I enjoyed the book regardless, but it would probably be more rewarding if you're familiar with his work (I had only read two of his books previously.)

Book Cover

The Thrilling Adventures of Lovelace and Babbage: The (Mostly) True Story of the First Computer, Sydney Padua

Charles Babbage's Analytical Engine is one of the great what-ifs of history, and Ada Lovelace is known as the "first computer programmer". The reality is more complicated, and this wonderfully drawn graphic novel with loads of footnotes and selections from primary source documents lays out the evidence in a fun, entertaining way. You can get a taste of the book on the author's website.

Book Cover

Honorable mention: The Water Knife, Paolo Bacigalupi

Bacigalupi latest entry in the eco-dystopia genre feels brutally real as the states in the American Southwest squabble over the dwindling supply of the Colorado River and regular people are caught in the crossfire. I can't wholeheartedly recommend it because I thought the violence was completely gratuitous. The best part about this book is it led me to read Cadillac Desert.

And here's the complete list of books I read in 2015:

The Life-Changing Magic of Tidying Up: the Japanese Art of Decluttering and Organizing, Marie Kondo

Ancillary Sword, Ann Leckie

Unbroken: A World War II Story of Survival, Resilience, and Redemption, Laura Hillenbrand

A Place of Greater Safety, Hilary Mantel

The Rise and Fall of the Great Powers: Economic Change and Military Conflict from 1500 to 2000, Paul Kennedy

Our Man in Havanna, Graham Greene

Bringing Up Bébé: One American Mother Discovers the Wisdom of French Parenting, Pamela Bruckerman

The Door Into Summer, Robert A. Heinlein

Corporate Confidential: 50 Secrets Your Company Doesn't Want You to Know -- And What to Do About Them, Cynthia Shapiro

Revolt in 2100, Robert A. Heinlein

The Reluctant Father, Phillip Toledano

The Right Stuff, Tom Wolfe

Season of the Witch: Enchantment, Terror, and Deliverance in the City of Love, David Talbot

Democracy and Populism: Fear and Hatred, John Lukacs

The Martian, Andy Weir

The Alliance: Managing Talent in the Networked Age, Reid Hoffman, Ben Casnocha, and Chris Yeh

The Adjacent, Christopher Priest

The Absolutely True Diary of a Part-Time Indian, Sherman Alexie

The Water Knife, Paolo Bacigalupi

The Complete Persepolis, Marjane Strapi

Tuf Voyaging, George R. R. Martin

The Thrilling Adventures of Lovelace and Babbage: The (Mostly) True Story of the First Computer, Sydney Padua

Ancillary Mercy, Ann Leckie

The Song Machine: Inside the Hit Factory, John Seabrook

You can also check out lists from previous years: 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, and 2014.

— April 4, 2016

Getting around in a wheelchair must be very frustrating

In 15 things I’ve Learned in 1500 Miles of Stroller Running, Evan Roberts notes:

A lot of our city must be awful to navigate in a wheelchair or with other mobility impairments, and especially in winter.

I don't have any experience with stroller running, but I can attest that if you spend 10 minutes pushing a stroller around your city, you'll quickly realize how hard and frustrating it must be to get around in a wheelchair. Fixing all those curbs would make a great public works project.

— January 7, 2016

Functional programming semantics

This bit from Federico Carrone's interview with Jesper Louis Andersen is insightful:

You tweeted:

Functional programming semantics are far more important than static typing for removing errors from programs.

Why? Could you elaborate?

I’ve somewhat alluded to this before, but never in more than 140 characters. In an imperative program a function depends on two things: the parameters it is passed and also the current state of the machine store. In a functional language, only the former matters. The consequence of this choice if far reaching:

One, the state space we have to reason about as human beings is far smaller for FP, which makes it harder to make a programming mistake. Two, we can test functions in isolation and be rather confident we have covered the functions execution well. Three, data processing is inductive in nature, recursing over the structure of data rather than manipulating the store from afar. The programming is closer to a proof by induction, which force the programmer to handle corner cases rigorously.

The ease of reasoning also comes into play once you have found a bug. It is often easier to figure out what the program is doing wrong just by taking a close look. It is rare you need to attach a debugger, which you can’t in a concurrent and/or distributed system where some parts are outside of your direct control.

When you add typing to the above, you obtain another dimension where your system is (automatically) checked for additional rigor. But I often find people forget how much power there is to be had just by functional programming on its own, with no regard to types. From my own experience, functional programs tend to have an order of magnitude fewer errors than imperative counterpart programs, especially when these are subtle corner-case errors, types or not. Naturally, types + functional programming help even more. But had I the choice between imperative programming with types or functional without, I know what I’d pick without hesitation.

Writing pure functions makes code much easier to reason about, so I try to do it as much as possible even when not using a functional programming language. I often find myself wishing for static typing when modifying a big Ruby program, but as Andersen says, I'd rather use a dynamic functional language than a typed imperative language.

— December 28, 2015

What can a technologist do about climate change? A personal view.

Bret Victor wrote an incredible interactive essay about what technologists can do about climate change. I really appreciate the effort he put into this, because it is a topic that has been on my mind a lot lately. I think climate change is the defining challenge of our time. And I think I ought to be focusing more on what I can do about it.

— November 27, 2015

Charles Babbage, perfectionist engineer

I recently finished Sydney Padua's entertaining and educational The Thrilling Adventures of Lovelace and Babbage. Several of the stories are available online, but the book is well put together (not to mention much easier to read than the web version) and includes a bunch of integrated source materials and illustrated footnotes.

The Thrilling Adventures of Lovelace and Babbage

Babbage completing his Analytical Engine is one of history's great "what ifs", but is is perhaps more unfortunate that he didn't finish the Difference Engine. He had a working prototype of part of it, and we know that it would have worked, because two have been built. I had the good fortune to see one in action at the Computer History Museum several years ago, and watching it work was mesmerizing.

One of the primary documents included in The Thrilling Adventures of Lovelace and Babbage is part of a talk given by John Fletcher Moulton to honor Napier. Moulton recounts a visit he paid to Babbage, and contrasts Babbage's flightiness with Napier's ability to see his task to completion.

That which impresses me most deeply is [Napier's] tenacity of aim, combined with his receptivity of new ideas in attaining it. From first to last it was a Table of Logarithms of sines that he proposed to make, and he did not permit himself to be turned aside from that purpose till it was accomplished. His concepts evidently widened as he proceeded, and he must have been sorely tempted to turn from his comparatively restricted task to larger schemes. But he wisely resisted the temptation. He saw that he must create an actual table and give it to the world, or his task was imperformed. Would that other inventors had been equally wise! One of the sad memories of my life is a visit to the celebrated mathematician and inventor, Mr Babbage. He was far advanced in age, but his mind was still as vigorous as ever. He took me through his work-rooms. In the first room I saw the parts of the original Calculating Machine, which had been shown in an incomplete state many years before and had even been put to some use. I asked him about its present form. 'I have not finished it because in working at it I came on the idea of my Analytical Machine, which would do all that it was capable of doing and much more. Indeed, the idea was so much simpler that it would have taken more work to complete the Calculating Machine than to design and construct the other in its entirety, so I turned my attention to the Analytical Machine.' After a few minutes' talk we went into the next work- room, where he showed and explained to me the working of the elements of the Analytical Machine. I asked if I could see it. 'I have never completed it,' he said, 'because I hit upon an idea of doing the same thing by a different and far more effective method, and this rendered it useless to proceed on the old lines.' Then we went into the third room. There lay scattered bits of mechanism, but I saw no trace of any working machine. Very cautiously I approached the subject, and received the dreaded answer, 'It is not constructed yet, but I am working at it, and it will take less time to construct it altogether than it would have taken to complete the Analytical Machine from the stage in which I left it.' I took leave of the old man with a heavy heart.

As a programmer, this rings true to me, to the point of being painful. How many projects are left undone because something better came along? It's important to take a step back and recognize the value of finishing things.

— November 22, 2015