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


Thank you, Erik Wiffin for this contribution to software engineering.

— November 13, 2015

The Longterm Costs of Personal Projects

As one with more than his share of deceased personal and side projects, I read David Hamp-Gonsalves post about the long term maintenance costs of personal projects with interest.

Longterm projects are usually incur a small but on going cost. API’s change, PAAS’s deprecate old stacks, frameworks and libraries die / decay and domains need to be renewed.

When the idea is new and shiny, using a fun new platform and API seems cool (and maybe that was the whole point!) and of course it should have its own domain! But over time these things decay and the maintenance bill comes due. And your project dies.

This site is guilty of many of these. It's hosted on Google App Engine (seemed like a good idea at the time) and I recently had to re-write the web serving part of the application in order to get it running on a new version of App Engine. I've also had to migrate the data store due to changes with App Engine. It would probably have been better to use Jekyll (which I haven't switched to -- yet -- because I still want the ability to edit in my browser).

— November 3, 2015

Copenhagenize names Minneapolis one of top 20 bike cities worldwide

Mikael Colville-Andersen of Copenhagenize created a list of the top 20 bike cities world wide, and the only US city on the list is Minneapolis at number 18.

American cities—often content with baby steps—are in desperate need of leadership, and Minneapolis has emerged as a contender.

Colville-Anderson does call out Minneapolis, though, to stop bragging about how tough its riders are and start laying down some real infrastructure:

What will help the city is to stop talking about the winter and to focus on getting a massive rise in ridership during the rest of the year. Minneapolis would do well to increase its commitment to protected infrastructure and to focus on making the continent’s best on-street network, and the first city NOT to feature sharrows.

Hometown pride aside, I'm not sure I'd rank Minneapolis above Portland. They have different positive attributes, and a little friendly competition never hurt anyone. Just look at this sea of green in Portland!

But the Minneapolis Bicycle Master Plan is looking very nice. The bike infrastructure that has come online in the 3 years since I've been gone has been pretty awesome. Keep it coming, Minneapolis.

— October 30, 2015

The peon lounge

Silence is now offered as a luxury good. In the business-class lounge at Charles de Gaulle airport, what you hear is the occasional tinkling of a spoon against china. There are no advertisements on the walls, and no TVs. This silence, more than any other feature of the space, is what makes it feel genuinely luxurious. When you step inside and the automatic airtight doors whoosh shut behind you, the difference is nearly tactile, like slipping out of haircloth into satin. Your brow unfurrows itself, your neck muscles relax; after twenty minutes you no longer feel exhausted. The hassle lifts.

Outside the lounge is the usual airport cacophony. Because we have allowed our attention to be monetized, if you want yours back you're going to have to pay for it.

As the commons gets appropriated, one solution, for those who have the means, is to leave the commons for private clubs such as the business-class lounge. Consider that it is those in the business lounge who make the decisions that determine the character of the peon lounge and we may start to see these things in a political light. To engage in playful, inventive thinking, and possibly create wealth for oneself during those idle hours spent at an airport, requires silence. But other people's minds, over in the peon lounge (or at the bus stop) can be treated as a resource—a standing reserve of purchasing power to be steered according to innovative marketing ideas hatched by the "creatives" in the business lounge. When some people treat the minds of other people as a resource, this is not "creating wealth," it is a transfer.

— Matthew B. Crawford, The World Beyond Your Head

— October 30, 2015