Smart Disorganized (incoming)

October 06, 2015

Mark Bernstein

The Pumpkins Of Disaster

The tree of nonsense is watered with error, and from its branches swing the pumpkins of disaster. – Nick Harkaway, The Gone-Away World

October 06, 2015 02:48 PM

Dave Winer

Comments work here on Scripting News

I, like many other people gave up on comments, but I kept missing them, and decided to try a new approach. Set up some guidelines and impassionately delete the ones that don't conform.

As a result, comments here are for briefly stating a point of view, with some justification, or providing an additional fact or link to an idea that is on-topic for the post.

If it's not responsive, or just an uttering, indulges in name-calling, or is blog-post length, I sometimes will comment so the person gets an email explaining what happened, and then I delete both the comment and my response.

This makes comments here more like a Letter to the Editor, but saves me the trouble of having to copy an email into a web page and edit it.

As a result our discussions here may be brief or even non-existent, but they are interesting and respectful of everyone. And I don't worry about provoking shitstorms with my posts, the controllers don't get a foothold here. They are welcome to complain about me at length in their own space. (They seem to never do that, I wonder why.)

Here's an example of a good set of comments on a recent post.

October 06, 2015 12:15 PM

Tim Ferriss


Richard Betts

“Wine is a grocery, not a luxury.”  Richard Betts

Richard Betts (@yobetts) served as the wine director at The Little Nell in Aspen from 2000 to 2008. Much more interesting to me, Richard passed the Court of Master Sommeliers’ Masters Exam on his first attempt, becoming the ninth person in history ever to do so.

I first met Richard through investing wunderkind Chris Sacca, and we immediately hit it off. Richard can help you train your senses for anything, including wine, whiskey, his current love of mezcal, and far beyond.

He’s also done a lot of wild experiments, gotten a lot of tattoos, almost been shot in Mexico, and developed an incredible ability to simplify the complex. We get along.

In this conversation, we talk about nearly everything, ranging from the value of quitting to tricks of the trade, travel tips (he’s traveling 300+ days per year), and “starter” wines.

We also drink a boat-load of whiskey, me tasting and Richard teaching. The pictures below show a sample. Side note and cool rule of thumb: did you know it’s spelled “whiskey” when from countries that have “e” in their names (e.g. America) but “whisky” when from countries that don’t have an “e” in their names (e.g. Scotland, Japan)? Richard taught me that.




Last but not least, Richard is the author of a brand-new book, “The Essential Scratch & Sniff Guide to Becoming a Whiskey Know-It-All,” which is sitting on my kitchen table with whiskey stains all over it. It distils (see what I did there?) a couple of lifetimes worth of study down to 24 pages…then makes them smell good. Definitely check it out. At the very least, it gives you a bunch of rules of thumb (like the whiskey vs. whisky trick), so you can impress your friends and not look like a dumb-ass at the bar. Sweet! Less dumb-ass and more smart-ass is always good. Get ‘er done.



Want to hear another conversation that leaves no topic uncovered? — Listen to my conversation with Chris Sacca. In this episode, we discuss being different and making billions (stream below or right-click here to download):

This podcast is brought to you by MeUndiesIf I’m not going commando, then I’m wearing MeUndies. I’ve been testing out pairs for about 3 or 4 months now, and, as a result, I’ve thrown out my other underwear. They look good, feel good, have options for men and women, and their materials are 2x softer than cotton, as evaluated using the Kawabata method. Not only does MeUndies offer underwear, but they also have incredible lounge pants. I wear them when I record the podcast, and when I’m out and about grabbing coffee.

If by some chance you’re not happy with the first pair you try on, they’ll refund your purchase completely. Check out to see my current faves (some are awesomely ridiculous) and, while you’re at it, don’t miss lots of hot ladies wearing MeUndies.

This podcast is also brought to you by Athletic Greens. I get asked all the time, “If you could only use one supplement, what would it be?” My answer is, inevitably, Athletic Greens. It is my all-in-one nutritional insurance. I recommended it in The 4-Hour Body and did not get paid to do so. Get 50% off your order at Athletic

QUESTION(S) OF THE DAY: What is your favorite whiskey or wine? What is it about the brand(s) that make it a favorite? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode

Siete Leguas | Tequila Ocho | Tequila Astral

The Breakfast Club | Baraka

Twitter | Instagram | Facebook | Wine Specific

Wine Mentioned in this Episode:

Whiskey/Whisky Mentioned in this Episode:

Show Notes

  • Why Richard Betts got into wine? [7:22]
  • Characteristics of those who would excel as line cooks [20:15]
  • On the decision between culinary school and getting a job [21:40]
  • The story of falling in love with wine and becoming a sommelier [22:55]
  • Lessons learned as a sommelier [36:55]
  • The importance of the observation process [43:50]
  • Visual cues for seeing alcohol levels in wine [44:45]
  • How to correctly taste wine [36:50]
  • Understanding wine flavor characteristics [52:20]
  • Favorite zinfandels [45:50]
  • Common misconceptions about wine [58:15]
  • The sweet spot in terms of cost and value of wine [59:35]
  • What is the difference between bourbon and whiskey? [1:11:29]
  • Taste testing whisk(e)y [1:18:54]
  • The story of the convoy: explaining mezcal [1:52:14]
  • Rapid fire questions: Who is successful, when do you lose track of time, most gifted books, and fear of failure [2:00:24]
  • If Richard Betts was teaching a 9th-grade class, what would the subject be? [2:05:14]
  • Morning rituals for staying healthy while traveling [2:10:24]
  • A purchase of $100 or less that had the biggest impact [2:16:24]
  • Favorite movies and documentaries [2:18:09]
  • Advice for your 25- and 30-year-old self [2:23:54]
  • If you could put up a billboard anywhere and write anything on it, where would it be and what would it say? [2:30:39]
  • Describing The Essential Scratch & Sniff Guide to Whiskey [2:31:29]
  • An ask of the audience [2:35:39]

People Mentioned

by Tim Ferriss at October 06, 2015 03:24 AM

October 05, 2015

Dave Winer

Congrats to Jack

I hope Jack Dorsey does a great job as CEO of Twitter. The users and developers need to get a real feedback loop going. When Twitter has worked, been growing and exciting, it's been because ideas could develop in the user community, and then make their way back into the product. That part stopped working a number of years ago, and imho that's been why Twitter has been stagnating. No source of fresh wild ideas to be tamed and presented to and used by the people.

It's so obvious, to me at least, the biggest thing the community has been trying to get Twitter to see is that the channel of communication needs to include not just images and movies, but text too. Tweetstorms, as illustrated by Jack's announcement this morning, pioneered by Marc Andreessen, codified by my own Little Pork Chop, say clearly that a better way to communicate a chain of written ideas is much needed.

There are lots of possible approaches. I suggested one on Saturday in a little bit of code I hacked together, the idea borrowed from Facebook, which has had this working for quite some time, without much user pain, I assume.

Why this expansion is needed: simply, people don't click links, news needs to flow better, esp in light of the problems with ads and blockers, spyware, etc. This is all part of a swirl of issues that interrelate, and clearly limit Twitter's utility and obviously its growth.

I hope Jack sees the problem and has the guts to take it on.

PS: And please don't make developers wait for the new functionality. We should get access as soon as the features are public in the platform, or even better, before. That'll take some guts too, because some developers grow up to be Instagram. But maybe that's a good thing!

PPS: Cross-posted in full text without links on Facebook.

October 05, 2015 02:11 PM

Fog Creek – Interview with Dusty Phillips

In, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.

Today’s guest is Dusty Phillips, Production Engineer at Facebook. A long-time Arch Linux contributor, Dusty is the author of ‘Python 3 Object-Oriented Programming‘ and ‘Creating Apps In Kivy‘. He also wrote ‘Hacking Happy‘, which explains psychological techniques through the use of programming and systems administration concepts, so that you can optimize for happiness in your work and personal life.

Dusty Phillips
Location: Seattle, WA, US
Current Role: Production Engineer at Facebook

How did you get into software development?

My parents got an i386 with Windows 3.1.1 when I was 8 or 9. Dad told us it was for “doing productive things” and “making money”, not playing games. Perhaps because of this, I’ve never played games seriously, but we all partook of the default games that came with the machine. Minesweeper and Solitaire were there, of course, but we also played Tetris and a few others.

That machine had QBasic preinstalled, and at some point, we discovered that we could load nibbles.bas and gorilla.bas. I know now that these games were designed to illustrate the possibilities of the Basic programming language. At the time I only knew we had access to two new games that we didn’t know about.

One day, I accidentally deleted the first character of a line. Worse, when I went to exit QBasic, it asked if I wanted to save my changes. I didn’t understand what I’d changed, but you should always save your changes, right? Otherwise, the file won’t stay up to date. The game no longer ran, but at least it told me what line was broken. I replaced the missing apostrophe with a comma (which looks about the same), but it didn’t fix the problem, it only changed the error message. I didn’t know about documentation and I didn’t have the Internet, so I was on my own. Eventually, I figured out what key to press to insert the same character that was first on nearby lines. The program worked and I was able to make snakes eat numbers again.

I knew then that I wanted to code, but I didn’t start studying it until I took a ‘Computer Science’ course in grade 9. It was QBasic again; later I graduated to Visual Basic in grade 12.

While I studied coding in high school and university, I consider myself largely self-taught. My local library had a book on programming for Commodore64 in their dialect of BASIC. I spent a lot of time translating the programs into QBasic, mostly by trial and error. My learning accelerated in my 16th year when we got the Internet.


Tell us a little about your current role

I work on the team that tracks all the data centers, racks, servers, and components at Facebook. I spend a lot of time in detailed code review, helping my teammates improve their Python skills. I also spend a ton of time writing new code. However, the largest percentage of each day is spent thinking about how I’m going to write that code!

Outside of work, I’m taking a rest between projects right now. I spent the last year on the second edition of my book, ‘Python 3 Object-oriented programming‘. I had to restructure two of the chapters to make them flow more clearly, but the most interesting part was adding a new chapter on concurrency. Concurrency doesn’t have a lot to do with OOP, but I wanted to study asyncio, so I threw it in as a bonus.

I also have a handful of mobile applications that I’d like to develop. I’ll probably be using Kivy to make sure I’m up-to-date for a future second edition of ‘Creating Apps In Kivy‘. But I’d also like to experiment with React Native.


When are you at your happiest whilst coding?

I like making code beautiful. Performance matters and code has to do what it’s supposed to do, but for me, the fun part is finding the most elegant way to solve a problem. I am most frustrated when I have to create a kludge to make something work, either because I can’t find a way to do it cleanly, or because I don’t have time to do it right.

I don’t often get bored while coding; if I find a task repetitive or boring, I generally take the time to build a tool that does that task or a more generic library that automates it. Building the tool is, of course, not boring.

What is your dev environment?

I run Fedora (relatively unmodified) on ThinkPads. I’ve been using Sublime for quite a while, but recently switched back to Vim because I do a ton of work on remote machines. I only need a few Vim plugins (supertab, syntastic, and airline are the must-haves) to make it do exactly what I want. The absolute killer app for me is FZF (fuzzy finder), which works with Vim and on the command line to quickly find files, folders, and tags I need to access. I prefer git for version control, zsh as my shell and tmux for terminal job management.

I have a convertible desk at work and switch between sitting and standing every half hour or so. I wear earplugs with noise canceling headphones connected to myNoise to minimize distractions.

What are your favorite books or resources about development?

I’m currently working my way through ‘The Art Of Computer Programming‘, and I’m really impressed with how accessible Knuth’s writing is, considering how intimidating the content is.

I think the most influential book in my history was Bruce Eckel’s ‘Thinking In Java‘, second edition. It was the first book I read that had a friendly, rather than academic, attitude toward the reader. More importantly, it had a small footnote that suggested Python’s exception handling was better than Java’s checked exceptions. That got me started on Python and I haven’t looked back.

Another foundational article in my early Python development was David Goodger’s ‘Code Like a Pythonista‘. I read it once a month for at least a year before I finally found I didn’t learn anything new from it. It’s hopelessly out of date now, but I’ve put some work towards a “Code Like a Python3sta” sequel.

What technologies are you currently trying out or want an excuse to try?

I’m currently studying the Nim programming language. Not for any particular reason; it just looks interesting. It’s the only whitespace-aware compiled language I know of. It’s rare for me to come across problems that I can’t solve in Python 3, but when I do, I think Nim is a good solution.

I haven’t worked with them much, but I’m super excited about React and ECMAscript 6. I have hopes that the latter will reverse many of the bad coding trends we’ve seen over the past two decades.


When not coding, what do you like to do?

I live in Washington State, so hiking is pretty high on the list. Unfortunately, it’s also high on everybody else’s list, so the trails can get pretty crowded!

I love writing; I already have two new tech books bouncing erratically around the interior walls of my head. If I had more free time, I’d probably also write fiction.

I tend towards any hobby that allows me to be creative or productive, and away from activities that are largely consumptive. I’ve taken up sketching again since I finished editing my book. I haven’t had access to tools since moving into a city apartment, but I also enjoy woodworking. I’ve started knitting and will probably do a lot of that through the winter months. It’s pretty challenging and a lot of fun. I especially enjoy designing my own patterns, which can result in hilarity since I only know enough about the subject to hurt myself.

I’m co-founder and co-organizer of the Puget Sound Programming Python user group. I try to regularly attend weekly hacknights and our monthly meetups as well as coming up with new plans to help local Pythonistas engage and connect
with each other.

What advice would you give to a younger version of yourself starting out in development?

It’s not development related, but if I could go back in time, the first thing I would do is convince myself to get treated for depression and anxiety at a much younger age. I could have accomplished so much more and enjoyed so many more moments in my life if I’d faced that sooner.

I wish David Burns had written ‘Feeling Good Together‘ 10 years earlier and that someone had recommended I read it, instead of Carnegie’s ‘How To Win Friends And Influence People’. Basically, I wish someone had taught me how to be a decent human being: more polite, less defensive, more confident, less anxious, more encouraging, less creepy.

From a development perspective, I’d tell myself to be a lot more conscious about technical opinions. Apply the robustness principle: “Be conservative in what you send, be liberal in what you accept.” Basically, don’t be too vocal about your opinions, I assure you that you’ll change your mind. But also, listen to the opinions of others and consider the useful information that is in the ones you disagree with.

Write code you don’t know how to write, tackle problems you don’t know how to solve. More importantly, learn things you don’t want to learn. If it looks boring or if it looks too hard, study it. Do things before you don’t know how to.


Thanks to Dusty for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.

Recent Interviews

Richard Schneeman
Richard Schneeman
Dayle Rees
Dayle Rees
Chris Fidao
Chris Fidao
Mary Rose Cook
Mary Rose Cook

by Gareth Wilson at October 05, 2015 10:31 AM

October 04, 2015

Lambda the Ultimate

Optimizing Closures in O(0) time

Optimizing Closures in O(0) time, by Andrew W. Keep, Alex Hearn, R. Kent Dybvig:

The flat-closure model for the representation of first-class procedures is simple, safe-for-space, and efficient, allowing the values or locations of free variables to be accessed with a single memory indirect. It is a straightforward model for programmers to understand, allowing programmers to predict the worst-case behavior of their programs. This paper presents a set of optimizations that improve upon the flat-closure model along with an algorithm that implements them, and it shows that the optimizations together eliminate over 50% of run-time closure-creation and free-variable access overhead in practice, with insignificant compile-time overhead. The optimizations never add overhead and remain safe-for-space, thus preserving the benefits of the flat-closure model.

Looks like a nice and simple set of optimizations for probably the most widely deployed closure representation.

October 04, 2015 05:46 PM

Dave Winer

What became of Trade Secrets

I did a podcast in 2004 with Adam Curry called Trade Secrets.

The website is archived here.

Originally it was at, a domain which I later gave away. The links to the MP3s on that site are broken.

However, I have a separate zip archive of the MP3s.

And an OPML file with descriptions of each of the episodes.

PS: It's somewhat demonstrative of the archiving problem to note that in 2008 I thought I had rescued these files once and for all, for all posterity, only to find that I remapped the domain, and in doing so broke all the links. This time it's all on That will be the last domain I decommission. But in a couple of years this stuff will probably all be gone, yet again.

October 04, 2015 11:00 AM

October 03, 2015

Dave Winer

The problem with archiving

  1. I've been writing about future-safe archives here for quite a while.

  2. Summary: Our archives suck. We're losing lots of history all the time.

  3. We should get systematic about it, so it's easy, so you don't even have to think about it.

  4. Because: We almost never do think about archiving. Myself included. I always want to dig new holes, not create archives of the ones I dug in the past.

  5. It's a constant drag, in the back of my mind, making me wonder if any of this work is worth it, because if it doesn't exist a couple of years from now, no one can learn from it, build on it. Why not make pottery? It's likely to last longer.

  6. I have gotten somewhat systematic about it, and the archive of is reasonably complete going back to 1994. But the things that hang off it, they're largely gone, the further back you go. For a demo have a look at the archive for a history-filled month, September 2001. Click on some links. You'll get a quick idea of how bad things are, how ephemeral our work is.

  7. What to do? See below.

Actually, I do have some ideas

  1. Keep an archive for your own blog. Perhaps download a rendering of the site to a folder in dropbox once a week. If you don't know how to do this, find out how. There's software that can do it for you. It may be hard to find, but it's there.

  2. Work with the developers of your blogging or content management software to add automatic archiving. Make sure everything you create for the site is stored safely on a backed up server.

  3. Create static pages when possible, and use formats that lots of others use. There's safety in numbers.

  4. Speak up when platform vendors deprecate popular formats or protocols. When they do this, often large amounts of archived material becomes inaccessible. Also object when they label technology that your site depends on as "legacy."

October 03, 2015 03:09 PM

Tim Ferriss



I get asked a lot about investing.

This is mostly due to start-up investing and the hoopla around it, but I’ve expanded my experiments to late-stage deals, real estate, and more. So far, my startup bets are 10x+ more successful (on paper) than my publishing career. Based on cashed-out positions, they’re still several times more successful. I’ve had a lucky stretch.

By no means am I an elite investor, but I’ve borrowed from elite investors since 2007. I’m incredibly fortunate that amazing people have been very generous with their time. Thank you, all!

I’ve made hundreds of survivable mistakes, networked my little bald head off, and–net-net–I’m happy with the results.

In this short podcast episode, I’ll explain the five (or so) steps I took to become a better investor, starting at ground zero.

Caveat emptor: I am NOT a financial advisor, and none of this advice should be taken without speaking to a qualified professional first. Also, my results could be due to pure luck and zero skill. M’kay? M’kay.

The episode’s only 40 minutes long, despite it saying 2 hours. If the below player doesn’t work, just click here.


QUESTION(S) OF THE DAY: Hope you enjoy, and please let me know in the comments if you’d like more of this. Or what you’d like more of. Please correct me if I made mistakes in this episode!

Related reading that I mention in the audio:
Rethinking Investing
How I Created a Real-World MBA
Things I Learned and Loved in 2008 (Lots of Financial Lessons)

This podcast is brought to you by Wealthfront. Wealthfront is a massively disruptive (in a good way) set-it-and-forget-it investing service, led by world-famous investors technologists from places like Apple. It has exploded in popularity in the last two years, and they now have more than $2.5B under management. In fact, some of my good investor friends in Silicon Valley have millions of their own money in Wealthfront. Why? Because you can get services previously limited to the ultra-wealthy and only pay pennies on the dollar for them, and it’s all through smarter software instead of retail locations and bloated sales teams.

Check out, take their risk assessment quiz, which only takes 2-5 minutes, and they’ll show you—for free–exactly the portfolio they’d put you in. If you want to grab their advice and do it yourself, you can. Or, as I would, you can set it and forget it.  Well worth a few minutes:

Mandatory disclaimer: Wealthfront Inc. is an SEC registered Investment Advisor.

Investing in securities involves risks, and there is the possibility of losing money. Past performance is no guarantee of future results. Please visit to read their full disclosure.

This podcast is also brought to you by 99Designs, the world’s largest marketplace of graphic designers. Did you know I used 99Designs to rapid prototype the cover for The 4-Hour Body? Here are some of the impressive results.  Click this link and get a free $99 upgrade.  Give it a test run…

by Tim Ferriss at October 03, 2015 03:24 AM

October 02, 2015

Mark Bernstein

Breaking The Page

We’ve been thinking about electronic books, and what comes after them, for decades. We’ve got lots of important (albeit difficult) thinking about the nature and practice of reading – Barthes, Derrida, Bolter, Landow, and much else. We’ve got lots of invaluable research on actual reading practice with actual ebooks, much of it capably reviewed by Cathy Marshall in her Reading And Writing The Electronic Book. Little of this body of knowledge finds its way into this book, and the book provides almost no guidance to those hoping to learn more than it contains.

Peter Meyer loves books, but when he talks about the sorts of books he reads, his interests do not seem notably broad -- memoir, thrillers, history of science, anthropology, cookbooks -- and his reading style apparently relies heavily on skimming. He’s an inspiring graphic designer and some of his ideas for implementing graphical tables of contents and overviews – a concept introduced in Intermedia (van Dam, Meyrowitz, Yankelovoch, Landow) back in the mid-1980s -- look great. He’s big on reader’s dashboards; on the one hand, his dashboards look nicer than the sort of thing people have been doing in Tinderbox for the past decade, but then, those Tinderbox dashboards actually work.

In one chapter, Meyer (rightly) eviscerates the design of front matter in the eBook implementation of the elegant Maine Summers Cookbook. What he overlooks is the purpose of the elegant design in the print edition. That purpose, simply, is to sell the book, to coax the shopper in the bookstore to plunk down $30. If matching the blue of the endpaper to the blue of the table of contents convinces the reader that “care has been taken here, and the authors, like you, have sophisticated good taste,” then that helps achieve the goal. Ebooks aren’t sold in stores, they don’t have to compete for attention on the shelf, and by the time the reader is browsing through an ebook, the sale is pretty much made: they’re kicking the tires or checking their wallets. Design serves a purpose, the purpose of cookbook design is to sell the book, and for ebooks that purpose is best addressed on the Web page, not between the virtual covers.

Meyer adores Christoph Niemann’s Petting Zoo. So do I. I doubt it's a model for the future of books, though there’s a trace of Petting Zoo in The Sailor’s Dream. This leads to a focus on books for young children, books with sound tracks, books that have something

even greater than these individual bleeps and warbles. How the app’s sounds – its action-specific effects, its ambient background – feel integrated with the visual composition are key to the pleasure it delivers.

If I follow this – a misfortune has happened to this sentence, but we can make allowances – this is orthodox McLuhan, except McLuhan would have noticed that we’ve stopped talking about a book and begun to talk about a visual composition with a sound track, which may be a very good thing indeed, but whatever it is, it’s not going to be teaching you about partial differential equations. Julian Opie’s moving electronic portraits are fascinating, but they’re not books.

“I choose books in a fairly pell-mell fashion,” Meyer explains. I can imagine people – Nick Hornby, say, or Michael Dirda – choosing books in a way that recalls a bustling upscale thoroughfare, but I think Meyer really means “haphazard” or “helter-skelter”. “Fairly” doesn’t buy us anything, and “fashion” isn’t quite right, either. “I buy a lot of books” might have served.

Meyer isn’t particularly interested in links. I am. That’s a disappointment. The disinterest isn’t argued or discussed, so there’s not much to say.

This is a crippled book, a book whose author has compressed and simplified ideas until they are nearly unrecognizable. Some of the ideas are interesting, though like the Reader’s Dashboard we might learn more by building and using the thing than by merely talking about it. Some ideas are small and esoteric: yes, front-matter in eBooks is a mess, but the people who can do something about that are a small professional fraternity; there’s not much point in complaining to us, especially not when you’re a publishing consultant and you can complain to the people in a position to address the problem.

Many ideas in Breaking The Page will be familiar to people who know the literature. The literature isn’t always accessible and integrative reviews are always very welcome, but it would help to know where things come from and -- more important still -- to engage previous writers rather than simply erasing them. Instead of mixing McLuhan with some warmed-over Bolter, why not roll up your sleeves, show us what the master said, and show us why the master was wrong?

October 02, 2015 03:02 PM

High School

Former Green Bay Packers coach Mike Sherman is coaching a small Cape Cod high school this year. In a nifty piece for SI, Emily Kaplan captures what that’s like:

October 02, 2015 01:45 PM

Greg Linden

Not working at Google

It was a surprise, to me at least, that I wasn't able to find a good fit at Google Seattle.

Google nowadays is different than I expected, and, after four months of trying hard to find any way to make it what I wanted, I resigned.

I'm saddened and disappointed. On the bright side, I did get a chance to work with many remarkable people, which I think made it worthwhile.

by Greg Linden ( at October 02, 2015 07:43 AM

October 01, 2015

Mark Bernstein

Progress Report

Progress Report

Well, that’s something, anyway.

I said, “I’m going to drive this car until the wheels fall off.” OK: the wheels fell off. Only one wheel, technically, and only partly off. Still, not a good thing at all. Damn.

It’s nice to reach the target on the draft of Getting Started With Hypertext Narrative on the first of the month. (Note the nice new target feature in Tinderbox plots. Tiny steps.)

October 01, 2015 07:25 PM

Dave Winer

The Yelp for People?

There's a lot of buzz about a new app that lets you rate people.

Maybe this isn't what we signed up for, people wonder.

I think it might be just the thing to cure the net of its habit of punishing people for being different. If it happens to you, if you learn what it feels like to be singled out and held to account for other people's values, people who say they have the right to hound you, maybe they do, but it's a choice, they don't have to punish you for not meeting their expectations. Maybe if they understand that it can happen to them, because it has happened to them, they won't be so quick to judge others.

So bring it on. Let's find out what people think of you.

October 01, 2015 05:15 PM

Blue Sky on Mars

Remote-First vs. Remote-Friendly

Yeah! We’re remote friendly! We got Bob who lives in San Diego, we’re based in San Francisco, and we have a Slack room, and people usually can come in to work at ANY time (between 8am and 9am), but really fuck Bob he’s kind of a loner and we’re going to probably let him go soon anyway, but yeah you can totes work remote!

We’re kind of in the surly teenager phase of remote work right now. A lot of companies are using tools like Slack, Hangouts, and GitLab, so our technical chops are heading in the right direction… but our processes and workflows still have a long way towards maturity.

Just because you happen to use chat rooms doesn’t mean you’ve suddenly become a glorious haven for remote workers, dammit.

Tools- and process-first

Look: to some extent, I don’t even really care if everyone on your team actually lives in the same city. That’s great — they could live on the same block for all I care. Maybe you chain them to their desks in some sort of twisted open office floor plan perversion, who knows. The point is that our tools have come a long way, but unless we adjust our processes, we won’t use those tools to their fullest extent.

xubbers meetup

I think there’s a split between being remote-friendly — hiring some workers in a different city — and remote-first, meaning you build your development team around a workflow that embraces the concepts of remote work, whether or not your employees are remote.

By forcing yourself to use chat instead of meetings, by forcing yourself to use chatops to mercilessly automate every single manual action, you end up creating things faster, with more built-in context, and greater ability to share your knowledge across the organization.

If you’re not working in a remote-first environment today, not only are you not going to have a remote-friendly environment tomorrow, but you’re going to eventually have a hard time retaining talent and keeping competitive pace in the future.

The world of work is changing. That's just the way it is.

Other ways to not fuck up remote work

Assuming you are operating in a remote-first environment and you want to dip your toes into hiring some remote workers, here’s a couple pointers that you might want to keep in mind:

Geographical makeup of teams

The number one indicator of well-functioning remote teams inside of a company is a reinforcement of remote employees in the structure of the team itself.

In simpler words:

Teams with one or two remote employees on them are fucked, and teams with a larger proportion tend to do better.

I’ve seen this play out again and again across many different spectrums of companies. It seems to be such a clear indicator that if you’re the only remote employee on a team, I’d recommend you might be proactive and try moving to a different team entirely (unless the team itself is particularly adept at working in a remote-first environment).

I think the rationale behind this perspective makes sense, and I don’t think it’s inherently mean-spirited, either: if seven people are in the same room in San Francisco and someone else is in Singapore, the seven locals are naturally going to have more informal and formal conversations about the product, unless they go out of their way to move their conversation online. It’s doable, but it takes a dedicated team to do that.

If you’re going to have a go at fostering a strong remote culture in your company, try structuring a diverse representation of geographies on a team. If you don’t have enough of one or the other, aim for either all-remote or all-local teams… it’s better than having the odd person stuck as the de facto outcast.

Timezones, not just geography

Having remote workers is one thing, but having remote workers across timezones is another.

I’ve seen some companies proudly say their culture is remote, but their workers tend to line up between Seattle, Portland, and San Francisco, all in one timezone. Even if they’re stretched across the United States or Europe, that’s still only three or four hours across, and that’s close enough to enforce a culture of a “work day”.

Distributed map

Again, that’s fine if that’s the culture you’re looking to be. But if you’re really aiming for a remote-first culture, spreading your team across really varying timezones will force you to use tools differently. You’ll lean more heavily on email, chat, pull requests and other asynchronous work rather than relying upon meetings, daily standups, and power work luncheons.

Just like the aforementioned diversity of remote/local ratio splits on teams, try to enforce a split of timezones as well, where possible. Baking that into the structure of the team itself helps you stay remote-first by default.

Face time

Lastly, and very simply: you can't be digital all the time. If you want to build a great remote environment, you need to front the dough to have some in-person face time from time to time. Fly people in, get them meeting each other in meatspace, and make things a little more human.

Hack house

It's amazing what you can accomplish in a two day trip. Creative problem solving becomes easier, people identify closer to real faces instead of just avatars, and all around it can be a great experience than sitting around computers all the time.

I’m pretty ecstatic that so many companies are getting better at remote work… I really am. When I first wrote How GitHub Works, a lot of this stuff was still a little amorphous at the time. Seeing the blistering growth of Slack and other tools over the last few years has been really lovely; I think people are really starting to get it.

But there’s always room to improve, of course! There really is a big gulf between being remote-friendly and being remote-first when you’re helping to build your culture, and it’s important to focus on ingraining these things into your process early and often.

October 01, 2015 12:00 AM

September 30, 2015

Dave Winer

A podcast about podcasting

I hear today is Podcast Day. And to celebrate, Harvard has a story which acknowledges that much of the early work of podcasting happened there. It's true, but I think the story, and the role that Harvard played, and others, is somehow lost.

So I recorded a 20-minute re-telling of the tale of podcasting, from my point of view. Starting with my meeting with Adam Curry in 2000 in NYC, early experiments with Grateful Dead music, Berkman, BloggerCon, Chris Lydon, with a hat-tip to Doug Kaye and Steve Gillmor who were also doing early podcasts at the same time.

Then to the summer of 2004, when I started Morning Coffee Notes, and proved that someone who isn't a radio star can make something interesting enough to listen to, and that roughly is when the idea really started to take off. Adam's Daily Source Code came in August, then Trade Secrets, the iPodder mail list, the term podcasting, Tony Kahn and WGBH, and the first 20 podcasts. Someone should make a list and put those names on a wall, because when they started, that's when podcasting really was ready to go. All the previous steps were necessary, the technology, the idea of a series of interviews, the talk show format, and the involvement of NPR.

Harvard provided an environment where this could happen, where the people could come together. I would say you have to credit Charlie Nesson, Jon Zittrain and John Palfrey for setting up that environment, trusting us to do something good with it. I remember the day I started there, they gave me a key to the office so I could use it any time I wanted. JP got me the space I needed for BloggerCon and the Thursday evening meetups, and helped explain what we were doing to the other parts of the university that wondered if all this would lead to something worth doing. Now we can close the loop, clearly Harvard feels it was. So we should do more of it! Let's keep digging. A campus like Harvard's is an incredible experimental kitchen for cooking up new stuff like podcasting.

PS: As with all my podcasts this one is imperfect. The last minute or so was cut off. How did it happen? No clue! But the story is still there, and I think it's a good one.

PPS: I cross-posted this piece on Facebook using the new Notes feature.

September 30, 2015 07:55 PM

Ian Bicking

Don’t Invest More Emotion Than You Are Willing To Sacrifice

At some point in a podcast series by Seth Godin he advises that you never give your house for collateral on a loan for your business. Of course you don’t want to lose your house, but that wasn’t his reason. If you put your house on the line – and put your family on the line – then you are putting up something you aren’t willing to lose. And so you have an upper bound on your risk: you no longer will be willing to make the decisions that could bankrupt your business.

I’ve been thinking about emotional labor lately. In management it’s one of the more challenging things for me: because there’s a lot more emotional labor to be done in management, but also because I feel I can fuck it up much worse. I also see all the missed opportunities to put in emotional labor, and I wonder about what I can or should ask of my reports in addition to what I ask of myself. Emotional labor is checking in with how people feel (explicitly or implicitly). It’s not letting conflict slide. It’s making sure to explicitly appreciate your coworkers. It’s giving bad news fast. And negative feedback. It’s hard work, an uncomfortable hard.

Emotional investment is something different. It’s what you expect of yourself. It’s caring. I find the emotional labor hard; it is because of my emotional investment that I want to do it anyway.

I’ve started to question the value of emotional investments. There’s passion, yes. And some degree of having skin in the game – not just wanting to perform sufficiently, or be well regarded, but a direct interest in the success of the project. But you can make the wrong kinds of investments, invest something that’s too hard to lose. Your self-worth, your identity… these are investments you shouldn’t ask yourself to make, and I’d say no thank you when I see someone else offering that kind of investment if I could. It’s the kind of investment that will lead to bad decisions: sticking with safe choices, avoiding bad feedback, being afraid to ship, being afraid to do the work you think is important but you aren’t sure you can achieve successfully. Or it may embolden you to drive off an emotional cliff, to burn out.

Sadness, frustration, even anger are okay emotions to have about our work. It’s okay for work to make us feel, so long as we can bounce back from those feelings. One kind of emotional labor is to own and respond to your feelings.

With a growing skepticism of emotional investment I find myself valuing professionalism a bit more: professionalism as action and impact through discipline. But I also think discipline can used as a substitute for engagement. I’m still wary of professionalism… wary of finding a substitute for passion, skeptical those substitutes are genuine, unsure if “performance” is a good criteria. But I’m feeling more open. (And of course I much rather Accounting be staffed professionally than with passion, so it must depend on desired outcomes.)

At this moment I am trying to disinvest. For my own health, but I also hope to improve my effectiveness. It’s uncomfortable, feels cold, like I have to withdraw in order to set new terms of engagement. But what do I have to lose? Maybe a little less.

by Ian Bicking at September 30, 2015 05:00 AM

Tim Ferriss


Picture of Tim Ferriss, Seth Rogen and Evan Goldberg

No, we are not in jail. And am I really that short?!

“If we can write a high school movie, then we can make a high school movie.”
— Seth Rogen

This episode features a dynamic duo. Seth Rogen (@SethRogen) is an actor, writer, producer, and director. Evan Goldberg (@EvanDGoldberg) is a Canadian director, screenwriter, and producer. Together, they get into a lot of mischief and create amazing comedy.

They’ve collaborated on films such as Superbad (which they first conceived as teenagers), Knocked UpPineapple ExpressThe Green Hornet, and Funny People. They have also written for Da Ali G Show and The Simpsons.

In 2013, Evan and Seth released their directorial debut, This Is the End.  In 2014, Seth starred in and produced (alongside Evan) Neighbors, which was a worldwide comedy hit and has taken in more than $268 million.

In December 2014, Rogen and Goldberg’s film, The Interview, became the most-talked-about news story around the world. Under extremely difficult circumstances, the film persevered to become Sony Pictures’ #1 digital title of all time.

Neighbors 2 is shooting now and will be released next May. Seth and Evan are also in production on Sausage Party, a raunchy animated movie for adults about one sausage’s quest to discover the truth about his existence. Seth and Evan are producing the film with Megan Ellison and Conrad Vernon.

In our conversation, we discuss all manner of tactics and silliness, including:

  • Kyokushin karate
  • Writer’s block and related debates
  • Their writing process
  • Who are the most underrated comedians and comedy writers?
  • How Superbad got made… after they first drafted it around age 13
  • The odd book Judd Apatow recommended to them (also Woody Allen’s favorite)
  • How The Kids in the Hall influenced them
  • The movie they both wish they’d written
  • Common pot mistakes
  • Recommended newb pot for working versus relaxing
  • Will there be a McLovin spinoff?
  • And much more…

TF-ItunesButton TF-StitcherButton

Want to hear another podcast related to comedy? — Listen to my conversation with Bryan Callen, who is a world-class comic and prolific actor. Stream this episode below or right-click here to download.

This podcast is brought to you by Vimeo Pro, which is the ideal video hosting platform for entrepreneurs. In fact, a bunch of my start-ups are already using Vimeo Pro. WealthFront uses it to explain how WealthFront works. TaskRabbit uses it to tell the company’s story. There are many other names who you would recognize among their customers (AirBnB, Etsy, etc.) Why do they use it? Vimeo Pro provides enterprise level video hosting for a fraction of the usual cost. Features include:

  • Gorgeous high-quality playback with no ads
  • Up to 20 GB of video storage every week
  • Unlimited plays and views
  • A fully customizable video player, which can include your company logo, custom outro, and more

You get all this for just $199 per year (that’s only $17 per/mo.). There are no complicated bandwidth calculations or hidden fees. Try it risk-free for 30 days. Just go to to check it out. If you like it, you can use the promo code “Tim” to get 25% off. This is a special discount just for you guys.

This podcast is also brought to you by Athletic Greens. I get asked all the time, “If you could only use one supplement, what would it be?” My answer is, inevitably, Athletic Greens. It is my all-in-one nutritional insurance. I recommended it in The 4-Hour Body and did not get paid to do so. Get 50% off your order at Athletic

QUESTION(S) OF THE DAY: If you could interview any comedian, who would it be and why? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode

Twitter (@Sethrogen) | Facebook | Instagram (@sethrogen)

Show Notes

  • The story of how Seth Rogen and Evan Goldberg got into karate and beat the shit out of each other [06:42]
  • How their view of competitive violence changed after karate [10:58]
  • How Seth and Evan first met and when they first started collaborating [12:08]
  • How Seth and Evan decided to write Superbad [16:05]
  • The differences between standup comedy and movie writing [19:30]
  • How Seth and Evan’s writing process works [25:03]
  • How This Is The End came together, and how they created the film [27:01]
  • How the Superbad script came to life [33:24]
  • Being hired to write for Da Ali G Show and other acting roles [40:06]
  • The lessons Seth and Evan learned from Judd Apatow [44:06]
  • Thoughts on the concept of writer’s block [48:29]
  • Today’s most underrated comedy writers [52:04]
  • The first person who comes to mind when Seth and Evan think of the word successful [57:52]
  • The habit Evan picked up when working with Snoop Dogg [1:03:01]
  • The advice Evan and Seth would give their 25-year-old selves [1:05:07]
  • The reason nearly all involved in Freaks and Geeks ended up being so successful [1:11:06]
  • Weed and productivity [1:14:20]
  • The types of pot for different situations [1:17:30]

People Mentioned

by Tim Ferriss at September 30, 2015 04:27 AM

September 29, 2015

Mark Bernstein

Bird By Bird

I began this writer’s handbook years ago, stalled, and it’s been somewhere in my stack ever since. I saw a nice used copy at Herridge’s Books

in Wellfleet – a very pleasant and intelligently-stocked store, incidentally – and this time saw my way through. There is good advice here, and some very fine writing, and Lamott’s humor makes her good company.

Bird by Bird describes a path to a good book, but I’m not convinced it’s the broad way. A career of work that might reach the pinnacle of publication, but whose rewards must even then be merely the work itself because, after all, how many published books get any notice: is that really the best literary world for which we can hope?

September 29, 2015 02:57 PM

Fog Creek

Becoming the Leader Your Engineers Need – Interview with Oren Ellenbogen

.little {font-size: 75%} .video { margin-right: 15px; height: 56px; }
Becoming the Leader Your Engineers Need – Interview with Oren Ellenbogen

Looking for audio only? Listen on and subscribe

Up Next
Why We’re Bad at Interviewing Developers

In this interview with Oren Ellenbogen, author of ‘Leading Snowflakes’, we discuss development team leadership. We dive into the things great engineering managers focus on, how to ‘code review’ management decisions, keep code quality high and developers happy, as well as work effectively with other teams. You can keep up with Oren’s thoughts and resources about Engineering Leadership via his newsletter, Software Lead Weekly.

Content and Timings

  • Introduction (0:00)
  • Engineering Management (0:45)
  • Managers Who Code (3:28)
  • Code Reviewing Decisions (4:58)
  • Maintaining Code Quality and Keeping Developers Happy (8:38)
  • Working with Other Teams (11:28)
  • Recommended Resources (12:54)



Oren Ellenbogen is an experienced engineering leader who is currently Head of Engineering at Forter. He is also the builder and curator Software Lead Weekly newsletter and author of ‘Leading Snowflakes: The Engineering Managers Handbook’. Oren, thank you so much for taking the time to join us here today. Do you have a bit more to share about yourself?

I spent most of my career in the startup scene, this is actually my fourth one. In the past eight years I find myself more and more enjoying the world of building teams and companies just as much as building product and software.

“If you are finding yourself always shutting down and getting back to writing code all the time, that is a red flag”

Engineering Management

To be a great engineering manager what are the main things you should be focused on?

Honestly, it’s a really long list. I’d like to touch on some ideas I might have. I would definitely advise you to earn your teammates’ trust first. Don’t take it for granted. If you want them to follow your authority as a manager you have to make sure you know how to build the trust of others, starting with your teammates. Figure out a way to earn their trust, maybe it’s your technical skills, maybe it’s your business understanding, maybe its a mix of everything. Don’t take it for granted and think because you have a title that everyone should do what you say. This is first.

Second, I think that as engineers we have the luxury of a really fast feedback cycle. Where we have code review and we can deploy the code, and see tests running, and run in production. We have so many different feedback loops and when you are moving into the management world, it sounds scary right? Kind of feeling alone, it’s kind of a journey where you don’t really know the rules. You have a Computer Science degree, but there is nobody to teach you precisely what it actually means to lead others. I’m definitely thinking you should clear the path to getting more feedback. I think it is great engineering management for managers to have good ways to bring in feedback. Rather than sitting in the dark and feeling alone.

Third, I would talk about getting to know the business inside out. I know there are many engineers and engineering managers that feel that business is not our job – it’s the sales guys, it’s the marketing guys. It’s not my job I’m just here to build software. I believe this is B.S. because you can spend many, many days at the office writing software just to find out that nobody uses it right. If you are trying to protect your teammates then you should really understand the business and think how can your team help the business scale. I have been working in a few startups where we build products, we build features, and eventually nobody used it. We can say we don’t have technical debt, the software is great, but if nobody uses it then what is the point? So figure out the business, understand the risks, understand the current capabilities that will help your business scale and how you can convey the message to your teammates.

Managers Who Code

Engineering managers need to be able to switch between being a manager and being a maker. What is the right balance of time to spend in each mode?

It really depends on the size of the team and your experience as a manager. Say if you have a really small team, like one or two people, then you can probably spend at least 50% of your time still writing code. I would advise to focus on feeling comfortable with your role as an engineering manager first. So if you are finding yourself always shutting down and getting back to writing code all the time, that is kind of a red flag. That means you should probably just avoid writing code and focus more on the people aspect, on the business aspect, and stop writing code, even for a few months. You have to feel like your teammates are being productive and you are not being called to save the day everyday. Once you are feeling more comfortable with that you can go back to writing code.

It can be difficult for managers to get time to code and focus on specific tasks. What types of maker things should you own as a manager?

I would focus on fixing bugs. Dealing with nasty performance issues, reducing technical debt. Doing customer support is a good one. And also work on tools that will increase the productivity of your teammates. The idea is to keep your technical skills at a high level so you will be able to help with prioritization and make sure you are a part of the conversation when your teammates need you, but you should avoid being on the critical path.

Code Reviewing Decisions

You say you should code review your management decisions. What do you mean by that, and why is it important?

It is kind of a trick that has really worked well for me. I was referring before about lack of feedback that we are missing as managers. One thing that I try to say and think of is, “How can I take the concept of code review and apply it to management?” So what happens in code review? You are talking about a problem and you share it with someone else. You show them the code and the solution you have and you have a discussion around it. Is it the right approach? Do you have some comments about the way the code is written? Can I make it better?

In terms of management I was thinking to use the same thing. Meaning I tried to capture one or two dilemmas I had during the day and then what I did is I had some peers in the company, and I had my boss in the company, and I would ask them what they would do in this situation. What questions would you ask? Only then I would say how I handled the dilemma and the answer I gave them and we had a conversation around that. Just having a discussion around the dilemmas you have can really open up the way you are thinking and asking questions and also provide some feedback because in the beginning my boss always told me that I tended to fix everything on my own. I tended to provide solutions too fast. Ask more questions, let them lead the conversation.

To get the best out of our teams we sometimes need to push members out of their comfort zones. How can you go about doing that successfully?

I would start by setting an example that people can emotionally connect with. When I was a manager I had a lot of struggles and I really tried… Well not in the beginning because I was kind of bad at it in the beginning, but later on I shared my struggles with the team. So when things didn’t work so well for me as a manager, when I wasn’t sure what was the right path for the team, or how to deal with the technical debt, or how to prioritize the technical debt. I was just honest with my teammates and people thought I was really struggling and later on when I talked with them about pushing them out of their comfort zone, just being able to relate to the way that I have been honest about my struggles just made the conversation a lot easier with them.

Next I would try to provide examples inside of the organization so they can see how it could be. For example, if I want to push someone out of their comfort zone regarding the way they are communicating their progress, I would forward emails from other teammates or other teams in the organization who are doing a brilliant job at it, and say “Hey, look, this is a great way to summarize the status of a feature or the version. Check the way he wrote it, see if you can pick a few things and lets talk about it next time in our one on one and have a discussion around that.” So, use someone inside of the organization.

Third, I would really try to focus on making sure they understand their career growth really means a lot to me. Making sure they understand that I truly believe that if we are putting our people at the front it will make everyone’s lives much easier and much better. Make sure you send them to conferences. Try to help them prepare if they want to provide or give technical talks. Just be their biggest fan and make sure they understand you are there for them. This in the long term will help them and also help the company attract more talent.

“Earn your teammates’ trust first. Don’t take it for granted.”

Maintaining Code Quality and Keeping Developers Happy

A difficult management task is scaling an engineering team, like you mentioned you had experience with before, but doing that while keeping code quality high and developers happy, how can you go about doing this well?

One thing that I would focus on is … We usually have, as engineering managers, we have technical leads inside of the team. These are the people who are the architects or technical leads. So my focus is making sure they are accountable for the code quality instead of trying to own it myself. Most often engineering managers try to own everything, they try to own the people aspect, try to own technical aspects, strategy aspect, business. I think that what you can do if leverage the fact that you have great people working with you and say, “Hey, the code quality is something on you. Yes I am going to be here if you want to talk about how to prioritize things or to make sure we have enough time to reduce technical debt, but I don’t want you to only point fingers and say hey, everything is really bad. I want to make sure you are part of the solution and that you are owning it.” So this is first.

Second I would make it very clear that I take technical debt seriously. That means I would definitely say to my teammates, “hey, if we have no technical debt then we are in trouble”. That means we are just writing code and probably nobody is using it because we are moving so slow and we are only focused on making the code better and better. The problem is there is no business around it. If we have too much technical debt then people probably just hate their job and leave. So you have to find some balance.

The way that I do that is to make sure that every time someone comes to me and says, “Hey we have a problem here we need to fix that.” I write it down. I never ignore it and say that it is not important. I make sure we write it down. I make sure we pick a few things we want to work at every couple of weeks or every month so the teammates can see that they are putting in new technical debt and we are removing it every week, every month. So they feel things are not being ignored and things are actually getting done. On your one on one with them make sure you ask them if they feel it’s under control. What I feel about technical debt is that it’s really hard to measure … there’s no real, like … We have no technical debt or we have 100% technical debt. When it comes to the feeling that we have a problem in our technical debt, make sure you own these feelings by acknowledging it and paying attention to it. That for me is like 80% of the solution.

“You can spend many, many days at the office writing software just to find out that nobody uses it”

Working with Other Teams

A common source of inefficiency and problems for engineering teams is a lack of trust between engineering and the teams they depend on. How can you build trust with other teams?

It might sound obvious, but from my experience very few do it, is to share your plan for the next few months, next few weeks with your peers. Talk about the constraints that you have. They may be people related or technical issues but make sure that you are saying, “Hey, I am trying to go this way.” Try to share as much as you can with others so they can at least understand what’s the plan, where you are heading, instead of just shutting down and not saying anything.

Second, I would ask for their opinion. Like, “Do you think that the prioritization I have in place sounds right? Do you feel that I have forgot something? Is there something I am not seeing in terms of business? In terms of technical aspect that I am neglecting? Do you hear something else from my teammates that I am missing that they felt comfortable sharing with you, but maybe they are not sharing it with me?” Ask your peers and your boss’s opinion about the plan that you just shared with them.

Third is, make sure you are communicating the changes that you have in the plan. Let’s say that you are communicating for the next two months I am going to work on this and that. If things change, and that is alright, make sure that you keep everyone in the loop.

Recommended Resources

Beyond the book, what resources can you recommend for those seeking to become a better engineering manager and leader?

There is a great Slack channel you can join by Michael Lopp. Also there is a wonderful blog post by Jason Evanish. It is filled with great, great leadership books. And lastly, it is just a shameless plug, I would add my weekly email Software Lead Weekly.

Oren, thank you so much for joining us.

Thank you so much. Thank you.

by Gareth Wilson at September 29, 2015 09:27 AM

September 28, 2015

Lambda the Ultimate

Dependent Types for Low-Level Programming

Dependent Types for Low-Level Programming by Jeremy Condit, Matthew Harren, Zachary Anderson, David Gay, and George C. Necula:

In this paper, we describe the key principles of a dependent type system for low-level imperative languages. The major contributions of this work are (1) a sound type system that combines dependent types and mutation for variables and for heap-allocated structures in a more flexible way than before and (2) a technique for automatically inferring dependent types for local variables. We have applied these general principles to design Deputy, a dependent type system for C that allows the user to describe bounded pointers and tagged unions. Deputy has been used to annotate and check a number of real-world C programs.

A conceptually simple approach to verifying the safety of C programs, which proceeeds in 3 phases: 1. infer locals that hold pointer bounds, 2. flow-insensitive checking introduces runtime assertions using these locals, 3. flow-sensitive optimization that removes the assertions that it can prove always hold.

You're left with a program that ensures runtime safety with as few runtime checks as possible, and the resulting C program is compiled with gcc which can perform its own optimizations.

This work is from 2007, and the project grew into the Ivy language, which is a C dialect that is fully backwards compatible with C if you #include a small header file that includes the extensions.

It's application to C probably won't get much uptake at this point, but I can see this as a useful compiler plugin to verify unsafe Rust code.

September 28, 2015 01:58 PM

Dave Winer

News orgs can, once again, be businesses

Re this column by Public Editor Margaret Sullivan.

A NYT senior editor, Trish Hall, has a new assignment: 1. Watching for articles that might lend themselves to sponsorship and 2. Develop projects that will be attractive to sponsors.

Some thoughts

  1. This is good, it's time to try out new ideas.

  2. Re sponsorship, I believe the owners of the NYT should be the sponsors of all articles and projects.

  3. Bring more creativity into the news process. Look for unobvious stories that don't have commercial proponents (yet) but obviously have business potential, because of change.

  4. That's where the ownership should invest. In the new business opportunities the reporters dig up (because they should be looking for them, that's real news).

  5. I don't think it's a conflict for the owners of the newspaper to read their own product.

  6. News is about change. Go find related businesses, and invest.

  7. I think the breakthrough that's available is so obvious it's hard to see. The people who own the news org are business people. They must think that way. Use, and manipulate the info flow, but maintain its independence. The facts you uncover will be open to everyone, even competition.

  8. How do you make money? Buy low, sell high.

Really is an idea here

Not sure how coherent all this is. There's an idea here, and expressing it involves some hand-waving, and eye contact. Or maybe you have to stare at the page. Or go for a walk. Breathe some fresh air. Sleep on it?

But there really is an idea, and it doesn't compromise the independence of journalism, but the role of journalism is different, and the people who own the news org must think like people starting new businesses.

The owners

BTW, to amplify on this item: "I believe the owners of the NYT should be the sponsors of all articles and projects."

The owners would be all the shareholders. If I saw the NYT intelligently investing in businesses that start up because of new things happening in the NYT community, then I would be very likely to want to own the stock. So to think of "owners" as a static thing would be to miss the opportunity.

September 28, 2015 01:28 PM

John Udell

Microsoft doesn't get collaboration -- but it might

Cruise the hallways of Microsoft's Redmond campus, peer into doorways, and observe what kinds of collaborative apps are running on the multiple monitors attached to every PC.

Here are some you won't often see: Yammer, SharePoint, Skype, and the Web versions of Word, Excel, Outlook, and PowerPoint. On a developer's machine you'll always see Visual Studio. On a product or program manager's machine you might see Word, Excel, or PowerPoint.

[ Also on InfoWorld: Slack gets a real-world teamwork test. | Cut to the key news in technology trends and IT breakthroughs with the InfoWorld Daily newsletter, our summary of the top tech happenings. ]

But there's one app you'll always see. It dominates all others, it runs everywhere, it's the first app you install on a fresh PC, and it's the one you'll call support in the middle of the night to fix. It's deeply wired into the company's DNA, and it remains, as it has always been, the bedrock of online collaboration at Microsoft.

To read this article in full or to leave a comment, please click here

by Jon Udell at September 28, 2015 10:00 AM

September 27, 2015

Dave Winer

What's a good router?

I haven't bought a new router since 2007 or so. I wonder if routers have gotten better? And if they have, why not spend $100 or so to get a new one? I could always use a little more speed copying stuff around the LAN.

So I did a little looking, and judging from the reviews on Amazon, most of the popular routers came out four or five years ago. And they cost about $30. Is that right?

I have modest needs. Just need to hook up a few computers over wifi. They're all Macs, iOS or Android devices. No need for USB or multiple networks, etc.

What's a good router to get?

Update: October 4

I got the router recommended by Wirecutter.

For now I just plugged it into the old Airport Extreme, which has worked without problem since 2007 or so. The new router is providing access for my desktop iMac, my new MacBook Pro, and my various iOS and Android devices. All are working fine.

September 27, 2015 09:24 PM

Mark Bernstein

A Hat Full Of Sky

Long-overdue homework for last July’s Readercon. Tiffany Aching is twelve, a young witch whom the local pictsies have adopted. They are the Nac Mac Feeble, a rambunctious crew who are fond of strong liquor and who can get into and out of anything – except they do have trouble getting out of a pub.

Was Terry Pratchett the P. G. Wodehouse of our era? I’ve never quite warmed to Pratchett as intensely as most, but then I find Jeeves cracks the occasional smile and the very occasional guffaw but mostly leaves me scratching my head. There’s lots here that is schematic, sentimental, mawkish, or simply silly, but it’s presented with such a charming a lovely voice that it scarcely matters.

September 27, 2015 03:50 PM

Dave Winer

The 140-char limit is getting ridiculous

Look at this screen shot.

See what Twitter is doing? I replied to my own tweet with more info, Twitter must have thought it was part of a tweetstorm so they linked the two messages. How about letting me type a few paragraphs with a nice expand/collapse wedge next to the extra stuff, instead of jumping through these ridiculous hoops.

Optimize! Factor! Pave the cow paths! Do your freaking jobs! Software is supposed to follow the users. Here the users have been leading for years, and the product refuses to follow. Bad software evolution.

PS: For comparison, look at how I did the very same thing on Facebook. Much more natural, easier on everyone.

September 27, 2015 11:26 AM

September 26, 2015

Dave Winer

Twitter plus TV has huge potential

First, check out this article in Variety. I had not heard of any of this.

I do think Twitter plus TV is potentially huge. But I also think this opportunity has been out there for a long time. They could have moved so much more decisively.

Imagine for example a "Twitter for Breaking Bad" -- when the show was on you could log on to it, and not have to worry about spoilers. Also there would be no need for hashtags. Just stream of consciousness of barks, sniffles, bluster and agony.

The TV show would almost certainly have had to use and promote the Twitter channel, a couple of years ago, because of Twitter's dominance. But that might be fading a bit, Twitter might not be the best way to do this for much longer.

There's no doubt that the back-channel of TV is going to be huge. The biggest thing ever. It should have already happened it's so huge.

PS: Cross-posted on Facebook using their new Medium-like editor.

September 26, 2015 05:33 PM

September 25, 2015

Mark Bernstein

Gone Home

Fulbright’s Gone Home is a fascinating transitional artifact. The main story is a linear tale that is carefully contrived to appear to be a hypertext – indeed, it looks exactly the sort of hypertext that Bolter imagined in his “memory palace” keynote at ECHT90, but the network is contrived to force you to experience the story linearly. The subplot, though, is a real hypertext, told in artifactual cues scattered throughout the house. (In a good GDC talk, the lead writer and lead architect agree that some of the cues, and some of the artifacts, were too subtle).

There main story is the return of our player-protagonist, Katie, from her student backpacking excursion across Europe. She arrives at the family’s new home – they’ve moved while she’s been away – past midnight. It’s empty. The family is gone, and Katie wanders through the empty house trying to find out what’s happened.

What’s happened involves Katie’s younger sister, Sam. And it involves – as family stories do – her father’s own damaged and broken family. Sam’s story is told from audio journal entries (with superb voice acting); Dad’s story through old letters and scraps and newspaper clippings and, in the end, through the environment of the house.

There’s a third story, too: the question of what sort of story this actually is. Katie’s wandering through an empty house; in the end, we expect that she could find (a) a ghost, or the Elder Gods, or a madwoman in the attic, (b) a body – either her sister’s or her father’s, or (c) the story that explains everything. We don’t know if this is horror, mystery, or romantic melodrama, and Gone Home is very careful not to let you know until very, very late in the game.

September 25, 2015 09:50 PM

Tim Ferriss

The Tim Ferriss Show with Jocko Willink

The Tim Ferriss Show with Jocko Willink

John “Jocko” Willink

“Discipline equals freedom.”
– Jocko Willink

Jocko Willink (@jockowillink) is one of the scariest human beings imaginable.

He is a lean 230 pounds. He is a Brazilian jiu-jitsu expert who used to tap out 20 Navy SEALs per workout. He is a legend in the Special Operations world. His eyes look through you more than at you.

He rarely does interviews, if ever. But, a few weeks ago, Jocko ended up staying at my house and we had a caffeinated mind meld. Here’s some background…

Jocko enlisted in the Navy after high school and spent 20 years in the SEAL Teams, first as an enlisted SEAL operator and then as a SEAL officer. During his second tour in Iraq, he led SEAL Task Unit Bruiser in the Battle of Ramadi — some of the toughest and most sustained combat by the SEAL Teams since Vietnam.

Under his leadership, Task Unit Bruiser became the most highly decorated Special Operations Unit of the entire war in Iraq and helped bring stability to Ramadi. Jocko was awarded the Bronze Star and a Silver Star.

Upon returning to the United States, Jocko served as the Officer-in-Charge of training for all West Coast SEAL Teams, designing and implementing some of the most challenging and realistic combat training in the world.

So why is Jocko opening up? Well, in part, we have mutual friends. Second, he is the co-author of an incredible new book — Extreme Ownership: How U.S. Navy SEALs Lead and Win — which I’ve been loving. Trust me. Buy it.

This is his first mainstream interview and one you won’t want to miss.

“Leadership is infinitely more about brains than it is about brawn. The brawn stuff is from the movies and it doesn’t work in reality.” – Jocko Willink


Want to hear another podcast related to leadership in the military from a decorated officer? — Listen to my conversations with General Stan McChrystal. In this episode, we discuss eating one meal per day, special ops, and mental toughness (stream below or right-click here to download):

This podcast is brought to you by Wealthfront. Wealthfront is a massively disruptive (in a good way) set-it-and-forget-it investing service, led by technologists from places like Apple and world-famous investors. It has exploded in popularity in the last 2 years, and now has more than $2.5B under management. In fact, some of my good investor friends in Silicon Valley have millions of their own money in Wealthfront. Why? Because you can get services previously limited to the ultra-wealthy and only pay pennies on the dollar for them, and it’s all through smarter software instead of retail locations and bloated sales teams

Check out, take their risk assessment quiz, which only takes 2-5 minutes, and they’ll show you—for free–exactly the portfolio they’d put you in. If you want to just take their advice and do it yourself, you can. Or, as I would, you can set it and forget it.  Well worth a few minutes:

Mandatory disclaimer: Wealthfront Inc. is an SEC registered Investment Advisor.

Investing in securities involves risks, and there is the possibility of losing money. Past performance is no guarantee of future results. Please visit Wealthfront dot com to read their full disclosure.

This podcast is also brought to you by 99Designs, the world’s largest marketplace of graphic designers. Did you know I used 99Designs to rapid prototype the cover for The 4-Hour Body? Here are some of the impressive results.  Click this link and get a free $99 upgrade.  Give it a test run…

QUESTION(S) OF THE DAY: How has discipline supported your entrepreneurial goals? What aspects could still use improvement? Please let me know in the comments.

Scroll below for links and show notes…


The Tim Ferriss Show with Jocko Willink

Selected Links from the Episode

@Xtremeownership | @jockowillink | @echelonfront

  • Connect with Jocko and his organizations on Facebook:

Extreme Ownership | Jocko Willink | Echelon Front

Show Notes

  • How Jocko would design training for someone who wants to add lean muscle mass [13:49]
  • The story of how Jocko Willink got involved in jiu-jitsu [15:44]
  • How Jocko Willink’s SEAL military experience influenced his business [19:24]
  • The story of how Jocko Willink became a SEAL [22:14]
  • Where mental toughness comes from [30:04]
  • Describing the Battle of Ramadi [31:04]
  • On the leadership and strategy required to take over a city [47:14]
  • The great tacticians that Jocko Willink respects, [52:44]
  • What makes a good leader and the things to look for when identifying good leaders [53:59]
  • How to teach the skill of detachment [1:01:34]
  • Jocko Willink’s workout that would cause entire platoons to “tap out” [1:09:14]
  • What are you world-class at that people might not know? [1:12:49]
  • Morning rituals [1:14:49]
  • When you think of the word successful, who are the first people that come to mind? [1:18:54]
  • Non-military leaders that Jocko Willink admires and considers role models [1:29:45]
  • Skills and/or experiences that every man should have [1:33:34]
  • Fear inoculation for civilians [1:40:14]
  • The books Jocko likes to give as gifts [1:42:20]
  • Common misconceptions about Navy SEALs [1:49:34]
  • If you could have one billboard anywhere, where would it be and what would it say? [1:55:59]
  • Explaining the purpose of his business, Extreme Ownership [2:00:14]
  • Discussing lessons from Extreme Ownership and the value it brings to private companies [2:06:19]
  • What SEALs discuss between themselves that they don’t discuss with civilians [2:12:44]
  • Which historical figure does Jocko Willink identify with? [2:18:29]
  • Something people would be surprised to learn about Jocko Willink [2:19:22]
  • Cheesy questions: What do you order at a bar, favorite music, advice for your 25- and 35-year-old self [2:22:49]

People Mentioned

by Tim Ferriss at September 25, 2015 06:55 PM

Mark Bernstein


Don’t miss the Strandbeests at the Peabody Essex Museum. We went to the member’s breakfast last week, which meant we got to meet Theo Jansen – a fascinating fellow – and play a bit with these PVC critters.

Also worth mentioning: the Peabody Essex members breakfast had great food and very thoughtful logistics; everyone got face time with the artist, and everyone had very tasty little scones (clotted cream) and worthwhile brunch sandwiches (lox, cucumber, egg) and tiny little potato pancakes. The docents were absolutely the best docents I’ve ever seen – knowledgable and helpful, with real expertise about the construction and maintenance of these kinetic sculptures.

September 25, 2015 06:54 PM

Waitress: the musical

Broadway tryout, now at the ART, and certainly worth seeing. Some nifty singing and inspired sets, a book that stays one step ahead of the game, and some fine actresses; this is what Diane Paulus does, and she does it well.

I’m still not quite sure why Harvard’s repertory company needs to stage Broadway tryouts, but this one’s a keeper.

September 25, 2015 06:50 PM

September 24, 2015

Mark Bernstein

The Watch

Antigone in Afghanistan, part of a planned cycle that will include novels based on Seven Against Thebes and Ajax. Skillful and showy writing teases out the many strands of conflict outside a US Army outpost in Kandahar province, where a legless but determined young woman has come to bury the body of her slain brother.

The Watch appears to be the most highly-regarded story of our recent wars, and one of the few stories that do not chiefly concern the tribulations of the damaged soldier returned from battle. It’s well done, if somewhat schematic; the prequel based on Seven Against Thebes will be interesting. (Eteocles is Lt. Nick Frobenius, a Vassar graduate who has let his wife slip away and who carries a copy of Antigone through Kandahar province.)

Still, at this point after WW2 we had The Naked And The Dead and The Caine Mutiny and From Here to Eternity.

September 24, 2015 09:59 PM

Fog Creek

The Process of Creating Trello – Tech Talk

The Process of Creating Trello – Tech Talk

This week, Fog Creek turns 15. So we thought you’d be interested in hearing this Tech Talk with Justin Gallagher, a former Program Manager here at Fog Creek, now VP Product at Trello, in which he describes the process we went through in creating Trello. He starts with a few sketches in a notebook, noodling with Joel’s idea for a visual way to organize anything. He goes into detail about the important parts of the next few months, right up to launch at Tech Crunch Disrupt. He covers the development of the idea and initial prototype, how the team worked within Fog Creek, the benefits of setting out a clear vision for the product and the mistakes we learned from along the way.

About Fog Creek Tech Talks

At Fog Creek, we have weekly Tech Talks from our own staff and invited guests. These are short, informal presentations on something of interest to those involved in software development. We try to share these with you whenever we can.

Content and Timings

  • Introduction (0:00)
  • UI-first Development (1:04)
  • Setting the Product Vision (4:20)
  • Getting User Feedback (5:48)
  • Iterating Quickly (7:46)
  • Mistakes We Made (11:20)



We sort of sat down, and we did two thing that I thought, looking back, played a big role in what Trello would become. The two things there are – one, we tried a bunch of different UIs, so we had this, which kind of looks like Trello, but we tried a bunch of different crazy random things. I have some sketches and stuff that I’ll show you in a minute. We also sat down as a team, with Joel and Michael, and we talked a lot about what it meant. What was Trellis (this is what Trello was originally known as), what it needs to be that thing. What was it going to be in the future? What was going to guide us as we built it? We still refer back to those things constantly. I talk about those things all the time, still. I think those are really important.

“Don’t try to think of what other people are going to do in a year, just focus on what they’re going to do now”

UI-first Development

I’ll start with the UI ideas. This is a notebook from out of my office. There’s like twenty sketches, at least, and I have many others all over the place. What I was doing here, and Bobby did some of this too, was we just tried to think of, alright, given the things that we had, like this physical nature of things, and we want to show progress. We want there to be like a status that people can see. What else could it be, besides the thing that we made, what else could it be? The top left one there is this idea that things could be much freer. Might be that in a grid generally in the background, but your thing would snap to it. We had this weird circle idea, where there were eyes. You’d have the statuses across the top, and you could add them to the … each thing was like a dish. You could pile people and files and stuff on it. The bottom left one there is like things get longer, the more complete they are.

What we’re doing here is really just picking a constraint of some sort. The top one was that there was no … The constraint was a lack of a positional constraint. The second one was the constraint where there had to be a circle. Different ones, I use shape … We would pick other random things like Windows phone and old Metro things, new at the time. If we were designed for this platform, what would it look like? I have another page, at least two, and there’s another one here where it’s like masonry. There’s like this JS masonry thing, which was new and cool at the time. If we were to do a masonry type thing, what would that look like? There’s different ways for grouping cards that were a little more free-form than past ideas, what would that look like?

We took some of these ideas, and we made them into Photoshop mock-ups. They were pretty bad, but there were like … This was very quick. Those first ideas all came within, probably, an hour. We did that a few times, where it was like, just sit down and pick something and take five minutes to design an idea around that. We tried to make them into more, not pixel perfect, but mock-ups anyway.

This was the one where they could free. The idea was, within a given stage, if they were related, piled on top of each other … if there was a card that was in development but was ready to go to Q&A, you could have it overlap the border. People working on Q&A, they’re like, ‘oh that ones ready’, pull it over. This was the one where the things got a little weird. This was the masonry, where you take back the cards to the point where the cards are more like lines. They expanded.

This one sort of looks like Trello. This was the first time we had put the members on the side there. This was where the idea that you could drag a … like there would be a pile of members somewhere, and you could drag them onto cards, came from, and they would hang off the bottom. This was the one where it was circles, and you’d have these weird stages, files, and stuff. This was the first mock-up that had an activity feed on the sidebar, and also had the little green lights that tell you if people are online or not.

What I remember about this was that most of these ideas were terrible. Some of them had an interesting little bit there, forcing ourselves to think in terms of a different way of doing things, than just force ourselves out of the path we were on to try something completely different. It didn’t yield like that completely … complete change in direction, but it did give us some good ideas, that we might not have otherwise thought of if we were still on that same pathway.

Setting the Product Vision

The other thing I mentioned was we sat down as a team. We talked about, what does it mean to be Trello? The things that we mentioned were: it’s going to be free, it’s always to get lots of people using it and have one percent of them pay us $100 a year, and it’s on mobile, it’s on any size of thing. It’s on mobile, desktops, tablets, plasma screens, whatever. It’s a piece of work, and you can use it on all of those devices. It should be real time, was one that we were really stuck on at the beginning. Anything that ever changes, changes on every device at the same time. There’s no reloading the image.

Another thing, where we don’t have any confirmation, it should never be like, are you sure you want to delete that thing or whatever. We’ve gone away from that one since, but that was the thing. We talked a lot about only building for the latest technologies and picking technologies that were going to be great in five years, ten years. We’re not worrying about that at the moment. We have no users, so what was the point of worrying about that.

Those really informed a lot of things. The fact that we said Trello was free, and that Trello was going to be a hundred million users, meant that there was also a converse that it couldn’t just be for one specific people, couldn’t be just for software developers, wedding planners, or whatever. It had to be for everybody. That forced us to think that the features we had and the ways we approached the product. We can’t add agile story points. That’s going to, eventually, be useful to three percent of our users or something. It’s not a good use of our time right now. Maybe there’s a certain or generic way that we can solve that problem for people who want that, in a way that’s helpful to other people too.

“We just took the activity feed out of the sidebar one day. It was just gone. People screamed, immediately. We got emails, immediately”

Getting User Feedback

We iterated on the product, a little bit. We started using it internally. We had areas that create accounts, logins, and stuff like that. The next thing we did, we got a little group of users using it, which was super interesting and useful to … They were just people in our companies, our friends, people that Stack Overflow. I think we had not that many, like three hundred people total, using it. This was going to be … We talked to them a lot. We asked them things. We asked them if they were using … We looked at stats like how often are people coming back. Are they using it every day or just using it once, then going away? Are they inviting other people to their boards? Is that part working? Not even from a technical sense, but do people want to invite other people to their boards?

There was a law firm that used Trello early on. We went there, and we sat with them. We talked about how we’re using it. We saw what they were doing. That actually made us build due dates, right away, because they were like, we’re struggling with this part. We have dates, and we had to do things for certain times. We could totally be better there. We built that feature, at that point. It was always something we thought about, that we added right away, because it helped them immediately. We thought it was something that could be, generally, useful in almost anything. Most work has some kind of due date, of some sort, at some point. Just talking to them and being there was super useful.

It was also interesting … Of course I say again, going back to the other thing, think about who are our users and who are not our users. So Trello is for everybody. The other thing we used to say was, Trello is not just for software developers. It’s not a tool for software development. We way over-emphasized that because we knew our tendency as software people and developers would be to build features that we want, that are going to help us build Trello. We didn’t want to pigeon-hole it into that role early on. Having those users in a law firm has nothing to do with software development and seeing how they use it, and what they like to do.

Iterating Quickly

Joel gave us this idea for gamma rays, at the time. Joel used to always say ‘shoot gamma rays’. What he meant by that was change stuff, just change it. We would change all kinds of things, and it was great at the time. We had so few users. We had a small tight-knit team. We could move really fast. We just took the activity feed out of the sidebar one day. It was just gone. People screamed, immediately. We got emails, immediately. We only had three hundred users, and we got five emails right away. We knew immediately that, that was something people actually used and cared if it was there, so we put it right back.

We changed other things, I don’t even remember why. We did all kinds of little changes here and there. We tried to get rid of things. Nobody noticed or nobody cared. We probably just left those changes. We didn’t go back and reinstate those things. It gave us an insight, yeah we still do that. Now, the problem is we made the labels five pixels taller, and we got a hundred emails in an hour. We can’t do it the same way that we use to do it. We still do try to change things.

We had planned, applied, and gotten into TechCrunch Disrupt a few months prior to that. Having that launch deadline was actually really effective too. Having a day where we were going to have the app out that day, no matter what, was important. That forced us to do a couple things. We hired a freelancer to help us write an iOS app. He stopped calling us back at some point. That was one of the things we had said, Trello works on any size screen, and we didn’t have a mobile app. We had six weeks to go, so we just made one … I made one, an iOS app that was terrible at the beginning. It was read-only, and it didn’t do anything besides look at your data. That was important. We knew that we had this deadline. We had that mobile app, so it had to be a crappy one, but we were going to have one and get that there. That was one of our first reference points and this date’s coming up.

A few weeks leading up to that, we cut scope a lot. We had plans for different features that we were going to build, but we’re not building them right now. Daniel and Brett spent a lot of time making sure that if we got 100,000 users on the first day, it wasn’t going to crash and fall apart. We had some features in there.

Audience Member:
Did it crash?

A little bit. Not too bad though, it was pretty good. It was mostly up. We had some plan features on there, and public boards where it showed you how many people were viewing the board at the same time. We thought this would be an awesome demo, like when Joel was doing the Disrupt demo, and it would show thousands of people were looking at the board, hopefully. Then, we created a test and then we panicked that that was not going to work at high scale. We ended up taking that out. These were all … It gave us a thing to shoot for, it’s very easy to just keep going, knowing, and adding stuff and having that date coming up was very useful.

It also forced us to look at … to step back again and look at the new user flow, we’re going to have at least some amount of attention on that day. We went back and looked at the new sign-up flow. We didn’t have any sign-up. There was no sign-up for Trello at the time. You just had to be given an account. Essentially, you could be invited by an existing member, or you were given an account. We did a page where you can sign-up. Then we had to evaluate that flow. That’s where the idea of the Welcome Board came from, which still exists. You sign up, you get the board that tells you how to use Trello, that’s where that came from. When you signed up, it was awful, you just got dumped into nothing, and you didn’t know what to do.

Again, that deadline forced us to think about what’s happening on this date, that’s different, and what do we need to do to prepare for it. This is just a history of what we did. I’m not saying it’s the only way to make a product, or the best way or anything. Those are some of the things that we did, that I thought looking back, were useful.

“We tried to do too much, to be too clever early on”

Mistakes We Made

We still did make a ton of mistakes. We way over-thought some stuff. Checklists are still way over-engineered here. We had this crazy idea that you had a checklist and it lived on the board. Then you have this pile of checklists on the board, and at any given time, you could take one and put it on a card. Then you might want this checklist on another card, so you can go back and put it on there. We way over engineered this, so it was terrible. We had to re-engineer it like five times since.

I would say, don’t try to think of what other people are going to do in a year, just focus on what they’re going to do now. We made that mistake multiple times. We way over invented in a lot of cases. The key to Trello was the UI, the visual nature, and the interactions that you have there. We invented our own terminology for everything, that we’re now trying to back up a little bit on. Things like ‘organization’ is a way confusing word, even members, like that’s confusing to people. We got very overly clever with the business model, initially. The first idea we tried to implement, but we started thinking that like all these power-ups that you get a dollar for, and it was, back then, monthly or something. I don’t know, we tried to do too much, to be too clever early on there. Over thinking that stuff and over planning for the future was something we still had to back-track on, recently.

Finally, we said that we made the decision that we were not building Trello just for developers. We would over-ignore all feedback. The one particular thing, this is later, but with stickers. Every developer said that stickers were way too big. We kept saying, you’re a developer, of course you want everything small. You want to fit five billion lines of texts on the screen. Normal people want big stickers. We released it, the normal people said the same thing, stickers are too big and we threw the baby out with the bathwater. There were certain things that we didn’t want to build like story points, that were very developer specific. That didn’t mean, we had to discount all feedback, just because somebody was a developer. What it came down to was we just didn’t have a good way of segmenting feedback and getting a good range of feedback from people. If we had that earlier, I think it would’ve been more effective.

Those are what comes to mind as like early on and anywhere throughout the first year or two of building Tello. That kind of stuff that we thought about, that I thought, looking back, worked.

by Gareth Wilson at September 24, 2015 10:06 AM

September 23, 2015

Dave Winer

A Harbin & Yogi story

Harbin Hot Springs and Yogi Berra are much on my mind this morning.

Harbin, because I used to go there regularly in the 90s. I was exploring massage, meditation, shiatsu, myself, existence, stuff like that. And I've always been a baseball fan, and coming from NYC, Yogi Berra always loomed large.

Anyway, the two met. I told my Harbin friends, many of whom had been to India, and generally knew more about spirituality than baseball, about our famous American teacher, Yogi Berra. I recited some of his teachings, which made a lot of sense in the Harbin context. Things like "you can observe a lot just by watching" -- one of the hits.

At Harbin we were trying to get out of our trance, our movie, and into the moment. It may sound cute, but there are a lot of times where you can benefit from a reminder that you must observe existence, not your story about what existence is.

American spirituality was perfectly captured by the great baseball teacher Yogi Berra.

Harbin died last week in the Valley Fire, and Yogi died yesterday, in New Jersey.

Namaste y'all!


September 23, 2015 04:01 PM

Everything is coming up Slack

Every so often a product comes along and focuses a huge amount of attention on itself.

Twitter was like that. Before that Netscape and its offshoots. Before that Sidekick and before that spreadsheets. These are just in my own area, I'm sure games have their own products that completely gain the focus. And graphic software like Photoshop. Cars and living room furniture too.

They influence everything that follows, I think in a good way.

Slack is doing that now.

There A picture named rose.pngare going to be a huge number of Slack-like things. We will get tired of hearing people say that. But there are some important ideas in there.

Most important imho are the integrations.They define a set of web services that could plug into lots of things. And lots of things could be created to have those services plug into them. That's the part that interests me the most.

Slack has the potential to be one of the biggest coral reefs of all time. Honestly I don't see how it could not become a coral reef. But I always am one to wear the rose-colored glasses. Things never turn out as well as I think they should.

Slack's influence and the new open interface we got a look at from Facebook, are making the end of 2015 shape up as one of the most interesting times.

September 23, 2015 02:56 PM

Facebook uses RSS for Instant Articles

Late yesterday Facebook released docs explaining how Instant Articles works for publishers. It's good news. They have, as I speculated earlier, built their system around RSS. This means there can be interop between all the big companies --Twitter, Google, Apple, Facebook -- now building new news systems.

This comes with a caveat. I haven't yet been able to test Facebook's RSS support. Once I have, I will be able to say that Facebook is a fantastic company for having the guts to use an open format for their new publishing system.

To publishers and bloggers -- this is a big deal because it means that the same feeds you generate to post stories to Facebook can be used for other sites. It's a very strong statement. No publishing silos. Let news flow where it wants to. And let competitors arise who may do more interesting and useful things with news than the big companies can.

By betting on RSS, Facebook says bring on the innovation. Startups, news corps, open source developers, kids in Dallas high schools, anyone can experiment. It's too early to lock down innovation in the flow of news.

New editing tools that publish to all the systems can come about. Finally! Let's get some new life in blogging software.

The same feeds you that provide data to Feedly, and to my rivers, can be used for Facebook.

I wrote about this in my piece about balkanization last week. It's possible, even likely, that we'll avoid the mess that seemed likely only a week ago.

Stay tuned for more news.

PS: Cross-posted on Facebook.

September 23, 2015 12:26 PM

September 22, 2015

Mark Bernstein

Memorable Days: The Selected Letters of James Salter and Robert Phelps

Just when my bookstack seems completely insupportable – as it threatens to collapse entirely in a thunderous clatter causing further damage to the joists and unexpected medical bills – Michael Dirda suggests a volume of letters by two writers I have not (yet) read. Naturally, I order this volume immediately, forcing the Kipling back onto the queue. This means that, at the moment, I am reading (and enjoying) give books at once. Is this any way to live, I ask you?

I’m a sucker for reading volumes of letters. So is Dirda: he’s the only fellow I know who reliably writes about letters, and he led me to the Mitford-Waugh correspondence which is absolutely first class.

Salter and Phelps were two talented writers who happened to meet, in passing almost, in New York. They hit it off. Phelps lived mostly in New York, Salter in Aspen before it was quite Aspen. These are good, companionable letters, not filled with advice like Shaw’s or with gossip like Mitford’s, but they’re fun to read.

September 22, 2015 02:32 PM

Tim Ferriss



“Be useful.” – Scott Adams

Scott Adams (@scottadamssays) is the creator of the Dilbert comic strip, which has been published in more than 2,000 newspapers in 57 countries and in 19 languages.

In my conversation with Scott, we cover topics ranging from the rise of Dilbert, to how he uses affirmations to impact stock market decisions, success with women, and building his career. 

We also talk about Scott’s interest in hypnosis and its relationship to his writing process. Plus, we dive into his current fascination with Donald Trump. 

You’ll also find out more about:

  • Goals vs. systems, and how he has used the latter to get what he wants in life
  • His first ever Dilbert paycheck
  • The six dimensions of humor
  • How he got into the best shape of his life at age 58, and much, much more.

It is a really fun conversation. Scott is one hell of a character and a hilarious guy.


Want to hear a podcast related to creativity? — Listen to my conversation with Ed Catmull, who is President and Co-Founder of Pixar and author of Creativity, Inc. Stream this episode below or right-click here to download:

This podcast is brought to you by Vimeo Pro, which is the ideal video hosting platform for entrepreneurs. In fact, a bunch of my start-ups are already using Vimeo Pro. WealthFront uses it to explain how WealthFront works. TaskRabbit uses it to tell the company’s story. There are many other names who you would recognize among their customers (AirBnB, Etsy, etc.) Why do they use it? Vimeo Pro provides enterprise level video hosting for a fraction of the usual cost. Features include:

  • Gorgeous high-quality playback with no ads
  • Up to 20 GB of video storage every week
  • Unlimited plays and views
  • A fully customizable video player, which can include your company logo, custom outro, and more

You get all this for just $199 per year (that’s only $17 per/mo.). There are no complicated bandwidth calculations or hidden fees. Try it risk-free for 30 days. Just go to to check it out. If you like it, you can use the promo code “Tim” to get 25% off. This is a special discount just for you guys.

This episode is also sponsored by 99Designs, the world’s largest marketplace of graphic designers. Did you know I used 99Designs to rapid prototype the cover for The 4-Hour Body? Here are some of the impressive resultsClick this link and get a free $99 upgrade. Give it a test run…

QUESTION(S) OF THE DAY: What is your biggest struggle with the creative process? Which experts would you like me to interview about their methods? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode

Wacom Cintiq monitor | Photoshop

F Minus | Pearls Before Swine

@ScottAdamsSays | | Calendar Tree

Show Notes

  • How Scott started using affirmations [08:45]
  • The beginning stages of Scott’s journey as a cartoonist [20:45]
  • The process Scott uses to create his affirmations and the reasons they work [22:39]
  • How God’s Debris came about [32:01]
  • How Scott incorporates hypnosis into his life [35:25]
  • Scott’s first hypnosis experience and why he started [39:15]
  • Scott’s definition of hypnosis [45:50]
  • How writing has helped his practice of hypnosis [48:41]
  • Hypnosis, NLP, and Donald Trump [51:00]
  • How the way Trump phrases his statements help him in the media [59:43]
  • Scott’s view on goals vs. systems, and why each approach can work [1:02:39]
  • Scott’s practical approach to dieting [1:12:29]
  • The first time Scott was paid for Dilbert, his ‘day job,’ and where his first ideas came from [1:18:27]
  • How he came up with the name Dogbert [1:21:51]
  • The aspects of Dilbert that have changed over time and what the characters mean to Scott [1:23:07]
  • Scott’s techniques to help Dilbert succeed and gain a competitive advantage over other cartoon strips [1:24:31]
  • The tools and routines Scott uses to get in the creative mood [1:30:42]
  • Scott’s morning routine [1:34:09]
  • Scott’s six elements of humor [1:37:26]
  • Other cartoons Scott respects and reads [1:41:26]
  • How Scott got his voice back after identifying he had spasmodic dysphonia [1:42:36]
  • The book Scott would recommend everyone read [1:51:30]
  • When Scott thinks of the word “successful,” who is the first person that comes to mind? [1:58:58]
  • The advice Scott would give his 30-year old self [2:01:54]

People Mentioned

by Tim Ferriss at September 22, 2015 02:30 PM

Mark Bernstein

Unbroken Link

For years, Xerox PARC hosted a summary and slides of Frank Halasz’s important keynote, “Seven Issues” Revisited, from the ACM Hypertext ’91 conference. That link broke recently. With the help of Mark Anderson, a reconstituted pdf is now available at .

September 22, 2015 02:21 PM

Fog Creek

Success and Failure at Fog Creek – Podcast

.video { margin-right: 15px; height: 70px; } article { margin-bottom: 0em; border-bottom: none; }


In this podcast, coinciding with Fog Creek’s 15th Anniversary, we take a look back over the years at the various successes and failures we’ve had at Fog Creek.

We discuss the early days of Fog Creek and how we recovered from a doomed first product. As well as dealing with technical debt, the missed opportunities we’ve had along the way, and what we’ve learned from them. We also get into how we develop new products and the impact of bootstrapping, before finishing with tips for those starting companies themselves.


Joel Spolsky – Co-Founder of Fog Creek, CEO of Stack Overflow and Founder of Trello

Michael Pryor – Co-Founder and President of Fog Creek, Board Member at Stack Overflow and Trello Founder and CEO

David Fullerton – Former Fog Creek Developer, now VP Engineering at Stack Overflow

Justin Gallagher – Former Fog Creek Program Manager, now VP Product at Trello

Jack Bowman – Veteran FogBugz Developer at Fog Creek

Allie Schwartz – Host of the Podcast and VP People at Fog Creek

Content and Timings

  • Introduction (0:00)
  • Early Successes and Failures at Fog Creek (2:00)
  • Developing Products for the Long-term (15:00)
  • Missed Opportunities (25:02)
  • The Impact of Venture Funding (36:12)
  • Hiring Smart People Who Get Stuff Done (41:27)



Welcome. My name is Allie and I am the VP of People at Fog Creek Software. This is a conversation about Fog Creek’s first 15 years, some of our big successes, how they happened, and some of our failures and what we learned about them. With us today are a bunch of people who worked at Fog Creek or still work at Fog Creek, and who were involved in the spinning off of the two products that came from Fog Creek and are now currently huge, successful companies of their own. I am going to introduce them and then they’re going to say a little hello, so that you can hear their voices. First, on my left, is Joel Spolsky. He is one of the founders of Fog Creek, Trello and Stack Overflow. Say hi, Joel.

Hi, Allie.

Hi. Next, we have David Fullerton, who is the VP of Engineering at Stack Overflow and he started his career at Fog Creek.

That’s true, as an intern.

As an intern.


Hello. Then we have Justin Gallagher, who came to Fog Creek in 2010 as a designer.

PM at the time.


Yeah. On Stack Exchange Enterprise.

Which I didn’t even know.

That’s right. He worked on Stack Overflow too.

Wow. Stack Overflow and FogBugz, and is currently the VP of Product at Trello. Hi, Justin.


Hello. Now we have Jack Bowman, who also came to Fog Creek in 2010. First job straight out of college and he is one of our developers on FogBugz.

Hi, Allie.

Hi, Jack. He’s five years at Fog Creek, and he’s one of our old-timers, hilariously.


Last, but certainly not least, we have Michael Pryor, also one of the founders of Fog Creek, Trello and Stack Overflow.

I’m just more like a bookkeeper. I was the bookkeeper at Stack Overflow.

He was the bookkeeper at Stack Overflow and currently, the CEO of Trello. Hi, Michael.

Hi, it’s great to be at this Quinceañera party. It’s awesome.

Yeah. It’s great. Every day is a Quinceañera.

We need music.

Early Successes and Failures at Fog Creek

We’re going to start just talking really broadly. Joel, can you talk to me a little bit about … Fog Creek has had a lot of successes. Probably more than a lot of companies, although there have also been some …

Sure. Companies have gone out of business with fewer successes than we’ve had.

That’s true. We’ve had some failure too, but more successes than most companies. Do you have anything, just off the top of your head, that you think is one of the largest contributors to that?

You mean why we have so many successes?


I guess it could be my brilliance.


That’s what I was going to say, Joel.

Yeah, go on. Sorry, okay. No, it’s really all about the people, Allie.

Yeah, true.

It’s about get the best people first and then good to great things will come from that.

I think that’s the defining … Joel doesn’t want to toot his own horn, but I think the defining feature of a Joel and Michael company is putting people first, choosing people very carefully and then setting them up for success and letting them pursue the ideas. Everybody talks about people first and all that stuff, but I think the way that … The specific way that that’s actually done in Joel and Michael companies is a big piece of the success of all three companies.

It’s also we’re looking at this from hindsight. We’re going to get to the failures, I bet, coming up, but it’s easy to point out the successes when we gloss over all the times that we failed. In fact, if you think about one of the first products that we even created for our company was a giant miss.

Why don’t you talk about the first product you ever created?

When we started Fog Creek, we were consulting and that was actually successful.

Well, for 10 minutes.

Right, it was successful for 10 minutes and then what happened was we were doing consulting and we thought we’re bringing in big bucks. We’re basically bringing in twice as much as we’re paying, and with the extra money, we’re going to invest it in building other products. That was 1999? 2000.

Great time to start a company.

Then, essentially, the market blew up and the first thing that people cut was their spending on outside consultants. There were actually a lot of companies, Scient, Viant…


Razorfish. There were a lot of consulting companies out there.


It was easy for us to get jobs or get a business very early on, and so we hired two people, and then basically when the consulting dried up, we were like [gasp], okay, reset.


Then we thought, we were working on a product at the time. It was a content management system called CityDesk that we were building because it was much too hard to build websites at the time, because you had to install all these Perl scripts and you needed root access on the server. We were like, oh, you can just run it on your desktop. That’ll make it easier. It was, but also the people that were building those tools also realized that it was hard, and so they basically started hosting those things. So you got Blogger and Movable Type and TypePad and all that stuff. It was just a total miss to try to build a desktop app for content management.

We made a reasonable bet, but it was the wrong bet.

Right. We’ve done that a couple times, where we couldn’t get … We’ll probably cover some other things that we did that with.

We certainly will.

It was lucky at the time, because we had this other product that we were building, which was a bug tracking app, that Joel had built previously at a different company and then he used it at Viacom. What was it called then? JoelBugz?


VisBugz. Then we used it a Juno, where Joel and I met.

Where it was JunoBugz.

It was JunoBugz, and then we used it at Fog Creek, so we called it FogBugz, and we’re like, we can make a couple bucks off this.

You guys are really good at names, by the way. I’m just saying.

They all had Zs.

Joel’s a really good namer.

I’m also good at setting prices for things, by the way, we discovered after 15 years.

FogBugz is this slow and steady thing that was slowing gaining ground at the time and we had to cut back the company to just Joel and myself. We’re working out of his grandmother’s basement.

It wasn’t a basement.

I thought it was the brownstone.

Bottom two floors. You’re right. Ground level. Garden apartment.

It had a nice garden. Yeah, exactly. It was a garden.

It was quaint, but it was just the two of us. Not that much money coming in, but every month we would make a little bit more than the previous month, and so that just started to build.

With FogBugz, you talked about CityDesk a little bit and why it didn’t make a lot of sense, but FogBugz is the next thing that came out, it sounds like, from the Fog Creek mini-factory that was there. It still is our flagship product. It’s really been the thing that sustained us for a really long time. I’m wondering if, Joel or Michael, you have any thoughts, if you’ve ever thought about really what is it about FogBugz that’s allowed it to be this one big product that’s kept this company running.

Wow, that’s a good question, I think I’m…

I’m smart, Joel. You hire smart people.

Part of it was that we had the right audience. The important part is not just having the right product, but also being able to market it in some way or get it to the right audience. There were probably 20 bug trackers that you could get in some shape or form when FogBugz first came out. Although, to be fair, probably in those days, those were like Windows apps that you installed and you had to probably get a special server.

Yeah, web-based, there were only a few …

There wasn’t a lot of web-based. There was Bugzilla. Yeah, but it was a matter of the blogging that I was doing at, which gave us a big audience of people that might be willing to use it. Then I think the product sort of hit the right mark, because whenever it took an opinion on something, it took the opinion that, I think, made people more successful with their teams. Some of the things that were kind of hard-coded into the way that FogBugz works and is still hard-coded into it today, like the fact that when you resolve a bug, it doesn’t just disappear, it goes back to the person who opened it so that they can check if you really fixed it. That came from our knowledge since the beginning, that 90% of the time, the person who’s fixing the bug thinks they’ve fixed the bug. They’ve actually either fixed something else or for whatever reason, they haven’t actually 100% eradicated that bug and so it has to go back to the original person who checks it to make sure that what they think was broken is not broken anymore. That’s just built in to FogBugz, and in fact, some of our big competitors have that as a configurable option, as opposed to something that’s built in. FogBugz just kind of tricks you into doing the right thing.

Yeah, so it sounds like FogBugz benefited from the fact that the people who built it were the people that would use it.

Yeah, and also that we had … What I was doing on Joel On Software was writing blog posts for developers, saying, if you’re wondering, a good way to run a development team or how to manage your little software company or how to beat Microsoft at their own game … A lot of those were the kind of blog posts that I was writing in those days, so I got a big readership of people that were interested in improving their software development skills.

Right. David, Stack Overflow, I think is really similar to Fog Creek in that you have this connection to your community, it sounds like, in the way that Joel on Software was a big connector for Fog Creek and the community of people that used FogBugz.

I guess an interesting question for me, sorry … What was different about Stack Overflow from what we were doing on FogBugz? I think the biggest … Well, there were a few shifts. One was the shift to continually releasing software, actually, that FogBugz wasn’t doing at that time that I think led to a natural process of listening to people, taking their bug reports, tweaking things, showing it to them, seeing what they think, taking more feedback, tweaking it and seeing what they think. The other big thing was that really, really close connection with the community. I think it helped that it was developers building something for developers. That always helps, but listening, having that really close relationship to the people using the thing, to the community, was something that just didn’t really exist when we were building FogBugz.

We knew how we used it and we tended to assume, because it was opinionated software that that’s how everybody else used it, but I think, looking back, I never really, as a developer on the FogBugz team, had a really good idea of how different customers were using the software in different ways. Versus with Stack Overflow, with just having this open community involved in building the product, having a site where they can go and talk about it and suggest ideas and report bugs, and talk about what they’d like to see fixed. That gave and gives more insight into what’s wrong with it, what’s not working, what’s working well, what do they like about it, what do they not like.

Right. Justin, I’m wondering, as Trello was growing, you know, Trello now has, what, like 10 million users? Is that right?

Eight, we’re supposed to say publicly right now, until…

Eight million users as of August.

Until tomorrow.

I’m wondering, same question to you. As you were building Trello, was that part of the thing in your mind, the community of users? Because it’s a very different thing, right? Trello is really, of the three, the one that appeals to the biggest community of not developers.

Yeah. We definitely took the stance from the beginning that it wasn’t going to be a tool for just developers. We always had that as part of the plan. Doesn’t mean developers can’t use it, it’s just not only for developers, but it’s for anybody who’s collaborating on something with anybody else and it gives you this nice visual interface for it. That includes us. We are part of that audience. It’s not like we’re building a tool for grocery store managers and none of us manage a grocery store. We do have some example of how people want to use it and how they do use it. We do try to talk to people. We’ve always tried to … We get lots of support emails and things like that, but we try to interview people and talk to them about how they’re using it and build it up in a way that uses that, but still try to stay true to the original vision of the product, as well, those two things.

I just want to bring up something. When you were talking about Stack Overflow and Trello, I was thinking about how Stack actually was almost a big miss, because when we first started out, in typical fashion, we were a software company. We built the software and then we sold it to people. The initial vision of … We built … Stack Overflow existed and we had this huge developer site, and we had built this community engine and our thought was, oh, great. We’ll license this Q&A engine to anyone that wants to build a site for whatever group of people they want. We were headed down that path…

You mean making Stack Overflow into software that you could buy.

Yeah. Basically selling the software behind Stack Overflow and it took us a little bit of time to realize but we did finally realize that the most valuable part of Stack Overflow was this community of developers. It was not the Q&A engine we built. That was cool but the reason the Q&A engine was important was not the code itself, but the thought behind it, the rules and the way that it worked and the things that made it Stack Overflow and not any other Q&A engine. It was opinionated in a way. It’s the same story with Trello. Trello, we actually do sell the software, so we’re back to selling the software, but it’s a very … When we built it, Joel’s vision was very contrary to all the other solutions that were out there, the project management solutions. His vision was, let’s strip it way down and make it this really simple visual metaphor. Everything out there was always just you have a big database of issues or cases or bugs, call them whatever you want. Leads. Even Salesforce is like this. It’s like, you have this giant database and you basically just have to build an interface on top of the database.

Yeah, you look at the app and you see the tables.

Trello was this … It was a totally different, it was like no one’s thinking about it like this. Let’s try this. That’s the valuable part to Trello. It’s not that we wrote a bunch of code. Certainly, we have a headstart because we had this big team. They understand the core mission. We have these mobile apps. If somebody tried to build exactly what Trello is, they could do that. There’s already a clone of Trello and there’s a thousand clones of Stack Overflow. Why are those things successful? I think it’s because a lot of times … This is actually attributable mostly to Joel, is that he has a vision for something that people aren’t understanding right now. It’s about seeing what’s going on in the future and coalescing there or trying something. Actually, sometimes it’s making an Indian job board, for example, was not that successful. It’s our classic mistake, but sometimes you miss and people don’t…

Cowboy job board was pretty good.

The what?

The cowboy job board.

Cowboy job board, yeah.

Developing Products for the Long-term

Lots of cowboys out of work these days. Great. As you were talking, I was thinking, contrary to that, when you’re starting a product and you’re thinking, what do people need right now, and now we’re in this interesting place at Fog Creek where we’re 15 years in on this product FogBugz, that has become this really big thing and there’s a lot of technical debt and it’s a very … It’s like we’re not quite a startup anymore because our product is pretty mature. I was wondering, Jack, if you could talk a little bit about … Also because you were saying, Michael, that the thing about Trello, was that it was very pared down, right? It’s really in contrast to Fog Creek, where the product is very involved and it’s gone through a lot of different changes and there’s a lot of things that you can do in there. I was wondering, Jack, if you could talk a little bit about coming into a company where the product is mature and starting to work on it and what it’s like on the other side of that, where you’re working with a product that has been around a while.

Yeah, it’s really difficult. That’s a fundamental question for a legacy product that you’re continuing to support. I guess technical debt is really interesting for me because it’s a great metaphor to use the word debt and to think of debt as you’re borrowing. That’s why you have debt. How can you capitalize on that? If you have a lot of old debt and it’s just continuing to increase, then you need to pay it down because you don’t want to continue to pay interest on that debt. If you want to do new, exciting things, then maybe you take out some debt, and that’s okay because you need …

Debt is also leverage.

Yeah, exactly. Debt is leverage. The technical side of things is balancing how much leverage you need vs. how much it’s going to crush you ultimately.

Right. One cool thing about Fog Creek, I think, and the reason why we have Stack Overflow and Trello is Fog Creek has always been a place where we’ve continued to innovate and new products are always coming up all the time. Jack, you’re working on a new product right now so I was wondering if you could talk a little bit about as opposed to working … You’re leveraging your technical debt right now, right, working on this new product. What’s that experience like for you?

Yeah, it’s interesting. I guess we’ve been going through a phase of prototyping as well at Fog Creek. Just trying out new ideas, giving ourselves the opportunity to make those same failures that Joel and Michael are alluding to in our past. We tried out a bunch of different new product ideas at the beginning of this year. Some of them seemed really interesting and some of them seemed like this is never going to actually become a product at all. A totally different ballgame. You’re not even thinking about those things like technical debt or your previous customers. You’re just thinking, how can I make a prototype of this product the quickest way possible, just to prove a concept? You want to make that concept as fast as you can and see that it will fail, if it’s going to fail. A lot of them are failures and that’s okay.

For us, thinking back to when we were starting Trello 4 years ago, whatever it was, anytime we tried to think ahead, and tried to plan for the future and develop something in a way that was going to scale better or work out better in 2 years when we had … This was when we had literally hundreds of users. Thinking ahead to thousands or whatever users, we ended up doing it wrong. Checklists was a famous story. I’ve talked about this a hundred times with various people. We had these crazy ideas of how we thought Checklists would work in the future and we built it that way to start.

What were they?

We thought Checklists were going to live on the board and you would

They live in the cards now.

Actually, I forgot about that.

They were templates basically, and you could have a checklist template that you could apply to cards, so if you had the same card that had the same checklist all the time, it’d be real easy to just put that checklist on the card.

I guess we were concerned about … We were building a more complicated model than we needed to.

Yeah, and it ended up backfiring. We had to redo it several times to simplify it. To make it more scalable.

The original reason why you were doing that was because it was something that you would want in 2 years?

Right. We were trying to think ahead and plan ahead for greater scale and more complex use cases and it just backfired.

I think it speaks to, when you have a product that’s been around for 15 years, you realize that all the things everyone bitches about when they have to work on a product that’s 15 years old, are all there for a reason. There were really good reasons it was done that way. In fact, the first version of whatever you’re building, it just doesn’t make sense to build it to last for 20 years because who knows if it’s going to work at all or if anybody’s even going to want it. You make a very simple version of it and it probably has to get rewritten 2 or 3 times, even in the early days, just to get good enough to support a few users, if you have any success whatsoever. Then you’ll discover 5-10 years down the line, the technology is kind of old. We had that approach when we started building Trello, right, when we decided what technologies to use.

Yeah, exactly. We only used the latest stuff. We only supported the latest browsers.

That was, was it 5 years ago now? No, when did Trello start?

We started working on it …


Yeah, January 2011. Then launch was September 2011.

Those decisions were being made 4-5 years ago. We were actually saying, let’s not support IE. What was it? It would have been IE6.

7. It was 7.

IE 7. We don’t even have to support IE7. Today, IE8 is not even a thing. IE9 is barely a thing. It’s interesting that any work that we would have done then to support IE6 or IE7 would be a complete waste of time today. It wouldn’t have had enough value for us.

And it would have prevented us from doing something that exists now.

That’s because today, we got 10 million users and back then we had … Sorry, 8. Today, we have 8 million users and back then, we had 17, so all that work to get from 17 to 19 users is nothing compared to … Those extra 2 users today, are meaningless.

When Jack was talking about stuff, when we’re talking about failures and stuff get thrown away and that culture of just building something and trying it out and testing it, it’s like, even at Trello, we built this whole feature around video chat that we threw out because it was just too janky. It was kind of not work because the WebRTC model that it’s based on is just not … It’s okay but it’s totally not up to speed. Our 8 million users wouldn’t have appreciated it. We do that all the time. I don’t know if they’re still throwing stuff away at Stack Overflow or not. David?

When Joel was talking earlier about, you have to build one to throw away and then rebuild it and so on. I actually think it’s … What makes it harder is, you’re not going to have to rebuild everything. You’re not going to have to throw away everything. You’re going to have to throw away about 25%-50% of it and rebuild it and you don’t know which 25%-50% until it’s too late. Any time you try to guess and overbuild it … I think we see that with Stack Overflow. The things we’ve had to … I’ve actually been thinking about, it’s been surprising how stable the core of Stack Overflow has been. A lot of the core has really held up, but some systems, we’ve had to rebuild. We completely rebuilt the reputation system.

And the tag engine.

And the tag system. We wouldn’t have known that then, that those were the things we were going to have to rebuild. We haven’t really had to rebuild…

Jack did.

Well, we knew we were taking some shortcuts with the tags and stuff but that worked, right? Building the actual tag engine, which is the thing that lets you filter by … Basically generate an arbitrary list of questions based on the tags and some other things. Actually, building that thing was really complicated and you don’t want to do that until you’re sure you need it. That’s one of my favorite hacks that they built early on to handle tag filtering.

Just a LIKE query?

Yeah. Basically. It was, they actually abused SQL server full-text indexing and so they put all the tags … You could have 5 tags in a question. They put 5 tags in one field in the database but full-text treats it like it’s a sentence, right? You’re doing search on a sentence and you say, contains this word but not contains this word, which works great, except the full-text search doesn’t recognize certain characters or it treats them as word breaks because it’s detecting sentences. Hyphens or the # in C#, things like that would just be stripped out by the full-text search. They decided, okay, well, we’ve got these extra characters lying around …

That nobody uses.

That nobody uses. The E with a funny accent over it, or the O with the umlaut.

C# became CE.

Nobody needs those. Yeah, I think that was the O with the umlaut or maybe that was the hyphen that was replaced with that. They just had this switch statement that just replaced characters on the way in and out, and it worked.

Until our first French website.

It worked until we needed to go to the national sites. That part really broke down when we went international, but before then actually, performance broke with the full-text search so we had to half-rebuild it for performance, and then we had to completely get rid of it for internationalization. That was a lot of debt paid down.

How many years did it last?

It was a good shortcut. It lasted a few years. It shortcutted one of the more difficult problems in building. It was just like, yep. Let’s just take this quick path and we’ll pay it off later.

Missed Opportunities

We’ve touched a little bit on failures and talking about features that have failed and different kinds of stuff. I want to just run through a couple other products at Fog Creek that you don’t know about, or that you may never …

Wait, what? Do I know about them?

No, you know about them. We’ve been building this in secret. You know that box fort in the back of the office? That’s what we’re actually doing. Okay, so there was a product called Co-pilot that Fog Creek no longer owns. It still exists.

That definitely was not a failure. That was … One, we made a cool documentary out of it, which is super nerdy and difficult to watch now, but it was really fun and also was a cool marketing thing for us. We sold a bunch of DVDs. That site’s still up and one of the original creators now owns it and is putting a lot of work into it.

Alright. I’ll take that one back.

It’s a failure in the sense of if you think about at the time, we had 3 interns build it and it was …


We were probably right at the moment … That’s right. Four interns. Right at the moment where LogMeIn did not exist as a company at that point.

Co-pilot is screen-sharing software.

Right. We essentially could have built LogMeIn.


Timing-wise, we were ahead of the curve.

The big mistake there, I think, is that we didn’t merchandise it like we did Trello. If the core version had been free and we had charged for a business version, we could have.

That’s right.

It was like $5, right?

Yeah, well, it started at $10 a day.

The whole positioning was also very much around tech support. It wasn’t quite…

Right. We used it for tech support.

It wasn’t like GoToMyPC.

It didn’t take the Trello stance of well, you can do anything with it.

…be for everybody.

That would have been a little bit…

The marketing was a little bit of a miss and the pricing was a little bit of a miss and also, there was a point where it would have taken a decent amount of technical work to make it as fast as it needed to be.

Basically, we went as far as we could just leveraging this VNC protocol, and the next thing to do would be to write a Windows display driver or something, and get into the operating system. That would have been ten times as much work as everything we had done up until then and we just couldn’t afford to do it, really.

Is that when you know when to pull the plug? When the work outweighs the …

We still haven’t pulled the plug, in the sense that the product is still available and you can get it.

Yeah, it was successful but it could have been ridiculously successful.

What about, Michael, you mentioned CityDesk and then there’s WebPutty …

Yeah, CityDesk could never have been …

Yeah, CityDesk could not. It imagined a different future.

You had the right idea but there was a fork in the road and you went the wrong direction. If you had gone the other direction, like the CMS thing

You mean web-based.

Right. A web-based CMS could have been huge.

Right, yeah.

…for a desktop-based CMS.

Or even a hosting service that just hosted TypePad or something until they came along and did it themselves.

Right, so how do you know? Is it different for each product, it sounds like? When do you pull the plug on something that’s just not working?

When do you pull the plug? I don’t know. That’s tough.

Don’t ask us. We’re not experts on…

It’s hard but I think we’re getting better. We’re also getting better at understanding how to build … We were building the right thing but then there were a couple of tweaks we were missing the biggest impact that it could have had. I think we’re getting better at that, right? Understanding how to make the biggest impact.

The hard ones, I think, are like … They’re like, I don’t know who talks about it. They’re like zombie companies or zombie projects, where they’re just successful enough that you keep pouring resources into it but they’re not growing. That’s kind of where Co-pilot was. It was a good product. People used it. It made money, but it flatlined and it would grow a little bit but not very much.

We’ve also got …

That’s when it’s hard, right? Because if it’s an outright failure, then it’s just like, okay, great. Shut it down.

Yeah, when it’s in the middle … We can also talk a little bit about Kiln, which is …

That was kind of in the middle.

Sort of in the middle too.

The bet there, the miss was, we bet on Mercurial and Git won even though … It was like VHS over Betamax.

I think that was part of it. I think actually, the second mistake we made, and I was there for that, was we … I think actually, it was a mistake to bet so much on FogBugz integration. Tying it so closely to Fogbugz, if it had been built more as a standalone thing, it may have done better.

David, you want to tell us what Kiln is for anybody who might not know?

Kiln is GitHub without the social parts.

It’s code reviews and version control.

It’s code reviews and version control, that’s right. It was built originally on Mercurial, which is like Git but…

Only better.

Slightly simpler/less powerful. Anyway, at the time that it was made, distributed version control, which is what Git and Mercurial and a few others are, was clearly on the rise. Everyone was starting to recognize that this was probably a slightly better model than the centralized version control for certain things for most companies. It’s probably the direction people are moving, but you can only really pick one source control system. You never want to have two in your software company. That was the bet that Michael was talking about, that Fog Creek, we looked at it and we said, nope. Mercurial is going to win. It’s simpler. It’s easier to pick up. It’s way harder to shoot yourself in the foot with it. This is where things are going to go, so we’re going to build it on Mercurial, and GitHub had bet on Git and …

Git won. We made a second mistake. Yeah, Git won because GitHub won. Where we made a second mistake was, we were like, okay, now we’re going to support Git because Kiln does support Git and has for a very long period of time.

Was that Harmony?

Well, our first idea was, we’ll support Git. We’ll do that work. With a little bit more work, we’ll allow companies to be agnostic. Anyone and their team can use either one. We’ll do all the hard work on the backend. Like David alluded to, people just pick. A team just picks. There was no market for this. If we had gone out and asked people …

They might have told us.

Yeah, we might have been able to find this out. We did…

I think it’s the sort of thing that they would be like, yeah, that sounds great. In theory, but in practice …

Right. Pay for it then and they wouldn’t … We accumulated a lot of technical debt because we over-engineered that product. We built something very complicated that we’ve now ripped out and now we either support Git or we support Mercurial.


There was a lot of opportunity cost of time spent doing both.

Solving a problem that turned out to not really exist, basically.


It sounds like with Kiln, what you’re saying is if we had just gone out and asked people, and it sounds like that’s a huge thing of what David was talking about…

We just got unlucky a little bit there.

We made mistakes in retrospect. It’s easy to see the mistakes in retrospect. Just asking people, I don’t know if they would have told you the right answer. Like I said before, I think actually, tying it to FogBugz seemed like a good idea at the time, because it’s like, oh, we can leverage all our FogBugz customers and just get them to add Kiln and it’ll be this awesome upgrade for FogBugz, but then it didn’t … It prevented it from standing on its own as a product and it forced it into some … I think it ended up in weird UI that was trying to look like FogBugz but not, and then eventually, that was abandoned.

It had its own bird.

It still has a bird.

It actually took a lot more work in the initial work to make it plug into FogBugz and act like a plugin.

Right, which is not something we did with Trello.

A one-time initial release, which didn’t add that much value for customers, really. I think the clean break of Stack Overflow, the clean break of Trello was just like, no. Build a new thing. Build it separate.

Then you can build an integration.

Then, yeah. Then you’ll know if you want integration.

I guess I agree with what David was saying about Kiln and its …

Did you work on Kiln ever?

No, I worked on Kiln briefly, but not to a great extent. One of the things that we missed out on, which Michael was alluding to GitHub, Git winning because GitHub won. It was this social aspect of it. That’s exactly what the FogBugz integration with Kiln prevented, right, is that we couldn’t grow by becoming this social thing. That’s clearly the opposite of what we’re doing in Trello, because Trello is saying, hey, let’s give this away for free and everyone can use it. You can use it with your friends. That’s a great way to grow interest in something.

I think if you look closely at Trello, one of the reasons it wins and it’s hard to notice that because we forced it, but we decided early on, the idea is you have your Trello account and with your Trello account, you can access boards that are your own boards, but you can also access boards from other organizations. It’s interesting because you can compare it and contrast it to Slack, where with Slack, you have to be part of an organization and you end up with 7 Slack accounts for all 7 organizations that you’re in, and if you’re not in an organization, you can’t use Slack even if you want to communicate with people. In the Slack-y way, there is no way. It’s this weird thing that I think we got right in Trello and part of that was looking at Kiln and saying, we got to give you something that creates a social network-type aspect to it here.

It’s funny because we’ve been building out an enterprise product recently at Trello and having a lot of these discussions on how that works and how the security model works and all that. We’ve been reviewing and thinking a lot about the way we do accounts and the fact that we start user first instead of team first, even though it is a collaboration tool, which is different than most project management collaboration-y tools. You have to create a team and then you join a team, and then you invite people to your team.

We would get into these debates with investors who would say, we only invest in network things with network effect. We would say, we have network effect. They’re like, what network effects do you have? We’re like, well, you will want to use Trello because you’re on these different teams and they’re all using Trello for different reasons, and you need to collaborate with all of them. They just didn’t see it. They saw it as … Well, some of them saw it and some of them didn’t.

It enables both though.

Some of them just didn’t buy it.

We hear these stories all the time where you’re using Trello at your company, whatever, doing whatever. You get it and you see the value and use. Then you create a board to use with your spouse or whatever and you invite the contractor who’s helping you remodel your kitchen. Was actually a real story that we heard.

We did that when we remodelled the kitchen at the Fog Creek office.


Our guy was on that Trello board.

The fact that you can take it and use it with a different group of people without having to create another entity for those people, because you don’t need a team for your wife and your contractor or whatever it is. You’re just going to have one project once and then that thing can go away when you’re done. It feels very heavyweight to have to create that higher level thing and then invite people to it. I think it constrains it to grow in that way, from growing that way.

The Impact of Venture Funding

Great. I’m wondering, one of the differences between Fog Creek and Trello and Stack Overflow, is Fog Creek is totally bootstrapped and has never taken any venture capital. I’m wondering, when talking about failures or different products or just things that haven’t hit, or when you’re trying to figure out what direction a product is going to go, how, Michael and Joel, do you feel like you’re able to take the same kind of risks when you have investors or are you more inhibited, or what are the differences, I guess?

Think about Co-pilot for example. We’re bringing in, at some point, say we’re bringing in 30 grand a month in revenue for Co-pilot. We’re like, wow.

Free money.

This is awesome. Yay. Paid for a couple devs. You’re like, yay. But the problem was, that was real money to us because we’re a small, profitable software company, right? Then in some ways, I think that prevented … There was a little bit of that prevented you from taking this big leap and saying, hey, let’s just make Co-pilot free. Right? Because we got to pay the bills. The cash balance, the bank account can’t go below zero. Later on, when we knew we had something that was going be successful and it was going to be big, and we had proven the product a little bit, it was much easier to say, okay, let’s go for the gold. Let’s build the big thing and do the things that are necessary in order to make this hugely successful.

I think that’s maybe the difference also between Trello and Kiln, right? I think Kiln, the decision to tie it to FogBugz was a safe, short-term bet for quickly getting to some revenue, instead of dreaming big. To build GitHub, you have to have a much bigger vision for what this thing is going to do, and like you said, to justify giving it away for free. I don’t think you have to be that way if you’re bootstrapped, but the tendency is going to be to dream small and be happy with a smaller revenue stream. Of course, then the tendency in venture capital is to go big and bust, right?


There’s a downside to it too.

For Trello, it was actually, it keeps a lot of … Somebody could recreate Trello with a decent amount of work, but it’s not impossible. It prevents this tiny group of people from doing that, right, because they’d have to charge for it and because it’s free.

Actually, there are a lot of people in that category. I remember in the early days of Trello, a lot of clones were showing up and a lot of other Kanban boards for software developers were showing up for some reason. It was a popular thing that year. I would go check them out every single time. There would be a Hacker News headline saying, look at the Trello that I made or something. I would click on it and be like, oh no. I would click through and I would see one of two things. One, I would see terminology from the software development world, and then I’d be like, oh whew. They missed that boat. They would just be like, and we have burndown charts or something that’s specific to software developers. I knew they could never meet Trello. More commonly, I would look for the little pricing button and I’d click on that and they’d say, it’s only $19.95 a month per person. I’d be like, oh, excellent.

That works with a winner-takes-all product, right? I don’t know. Is that the same thing with … Well, I don’t know.

They’ll make a little lifestyle business if they can support 3 people, like FogBugz.

Yeah, that’s true. You make a niche product.

Which was bigger and it supported more people and they could get to that, but they won’t make it GitHub type, like this could change the world and everybody knows it and everybody uses it type product, if they’re going to charge every single person.

Have you ever given thought to if you had to do it over again, would you have taken money at Fog Creek?

Oh, I wouldn’t have taken money at Fog Creek.

You were pretty anti taking money for a while.

For sure, because I think that you can lose control and a bunch of things changed. One is, cases at both Stack Overflow and Trello. We had much better opportunities for the investors, meaning that we got to dictate our terms. We did not lose control. The other thing that changed is there is a very small and limited group of VCs out there who now understand what it means to be entrepreneur-friendly, which didn’t exist or we were afraid didn’t exist at the time that we started Fog Creek. I still wouldn’t have taken VC. If I knew what I know now, I probably would have immediately gone straight to some much better products. In the year 2000, what would you build? First, you build Git.


Yeah, Facebook. There you go.

Twitter? AirBnB?

I literally had a friend who kept explaining something and it didn’t make sense to anybody and years later, I realized that what he was describing was Facebook, only instead of saying you have a wall and people come and write on your wall, he said you have a couch and people come and leave things on your couch. I was like, what? This is ridiculous. It was only after Facebook came out that I realized that much.

Who likes people to leave stuff on their couch? Nobody.

What he was describing, other than the fact that he used the word couch instead of wall, was just Facebook.

Hiring Smart People Who Get Stuff Done

Okay, so we are nearing the end of our time here so I just wanted to see maybe if we could go around the table and maybe say like, if you had one piece of advice for somebody starting out …

Have a brilliant idea at the right time and execute on it really well. It’s easy. Two things.

Make a website. Make it really popular.

No, it’s two things.

Start with a super popular blog.

You have to think about the world and imagine it in a different way in the future, and then prepare for that, right, in order to be a big winner because people aren’t … Basically, the idea is not that many people are going to see it that way. It’s like AirBnB. You’re trying to pitch it a couple years ago. You’re like, yeah, it’s cool. People rent out rooms in their houses and people are like, ugh. You’re crazy.

That’s gross.

I’m not going to have some weirdo stay in my house. Then it actually does work in New York and then it starts to take on some of the vacation rental stuff and it actually grows into this big thing and the world changes and the way people trust each other changes. So there’s that. The second thing, which is more along the lines of what you guys were saying was find an amazing co-founder who’s really smart and amazing person.

Just generally hire good people that are smart and get things done.

That’s one thing that you can actually do, right? Go have a brilliant idea is like, good luck. Where do I start? Gather a really good team is something you can actually work at and figure out and solve.

Yeah, hire smart people. Give them room to operate. I think you have to have a lot of optimism, think about what could exist and try it.

We also have tried 15 or 16 things over the years between these 3 companies.

Yeah, when it doesn’t work out, think about why.

Three or 4 of them are huge and …

What do you do with the people who fail? Where are they now? Are they in a cave?

We killed them.

There is always an opportunity in the dog-walking of Taco, and washing of my car departments.

Anybody else have any final words?

Happy anniversary.

Happy anniversary, Fog Creek.


Alright. Thank you, guys.

Thank you.

Bye, everyone.


by Gareth Wilson at September 22, 2015 09:44 AM

Tim Ferriss

Tim Ferriss

This episode of The Random Show is full of accidental sexual references. There are dozens of topics covered in this wine-infused session of scatterbrained nonsense.

Like what? To start off: Okinawa, new diets, dog training, booze finds, accidental golden showers, tech, recommended books, people to follow on Twitter, and much more. O-tanoshimi dane!

For all previous episodes of The Random Show, including the infamous China Scam episode, click here.

Can’t see the video above? Click here.


If anyone would like to add show notes with links in the comments, I’m happy to thank you with a link to your site. I’ll choose the best 1-2 people who are among the first to post.

QUESTION OF THE DAY:  What would you like to see in future episodes of The Random Show? Please let us know in the comments!

by Tim Ferriss at September 22, 2015 05:41 AM

September 21, 2015

Mark Bernstein

Stormy Wiki Weather

I’m in favor of responsible participation in places like Wikipedia and Twitter. If you’re going to publish things, you should take responsibility for what you say. In particular, you should not hide between anonymity to threaten to rape or murder your opponents, to spread rumors about their sex lives, or to extort their silence.

One of the main Gamergate targets at Wikipedia, Tarc, has been banned from Wikipedia over something he twittered which Wikipedia’s arbitration committee has termed “harassment”. Tarc is a responsible editor: his work at Wikipedia is connected to his real work. I’m responsible in this way, too.

The problem with accepting responsibility on Wikipedia is that tea-party movement conservatives who are not responsible are free to threaten and harass you, but you must not retaliate in kind or you will be permanently cast out. (In practice, is helps to be a well-connected guy who supports the libertarian GOP, while progressives, women, and gay editors seem to be more vulnerable.) This asymmetry alone may explain Wikipedia's increasing tendency to embrace right-wing fantasies: for example, 14-year-old clockmaker Ahmed Mohamed has a page which the usual suspects want to see deleted: one Gamergater suggested that the page be deleted and "if he uses his clock to blow something up, we can add it later."

The decision to be responsible is probably irrevocable and should not be made lightly. It must be made when you set up your Wikipedia account. Children cannot make this sort of choice. Just as we keep children from signing up for anonymous chat rooms, it’s getting to be time to think about the importance of keeping Reddit and Wikipedia accounts away from children. Permitting kids to use Wikipedia could tempt them to sign up, with dangerous consequences.

Wikipedia won’t address this voluntarily. I’d welcome opinions on whether this problem is best addressed through legislation, regulation or education.

September 21, 2015 03:33 PM

Browsings: A Year of Reading, Collecting, and Living with Books

A delightful collection of a year’s worth of brief notes about reading by a consummate bookman, originally written as a weekly Web column for The American Scholar. Dirda’s embrace of forgotten writers and, especially, old plot-driven adventures is instructive, and his central concerns – where to put all these book? how on earth to pay for them? – are refreshingly familiar. I was particularly interested in the way Dirda arranges his future reading by project, with piles and cartons of books all set for the day when some long-awaited project begins.

September 21, 2015 03:33 PM

Dave Winer

Silver lining Mets book

  1. I've A picture named mrmet.pngbeen a Mets fan since 1962.

  2. The Mets have a philosophy. Winning isn't everything. If we didn't have this philosophy we'd break.

  3. That said, there is a feeling that "this is the year." The year for what? Well, it could go either way. It could be a year of triumph of good over evil, or it could be yet another mile on the Mets trail of tears.

  4. Reminds me of a story from the final game of the 2000 World Series. A boy on the 7-train riding into the city, wearing a Mets hat and jersey. Crying. Why oh why? I imagined the kid following the games all season as I did when I was his age. An older wiser man said: "Son if you're going to love the Mets you're going to be doing a lot of that."

  5. I was puzzled as to why the Mets tore down Shea Stadium. At first I thought it was a bad idea. Does the Catholic Church tear down the Vatican to get some new restaurants? Then I realized we had to tear down the stadium. Once the Yankees celebrated their world championship in Shea in 2000, its fate was decided. We can't play here. It's tainted. A dirty place. So down comes Shea and up goes CitiField. They brought the stupid home run apple thing along. Not sure that was a good idea.

  6. Well the Yankees beat the Mets two games out of three in the weekend Subway Series. It was the way we lost that made me wonder if this is the year for triumph of philosophy, or one more defeat at the hand of the infidels.

  7. Then I remembered the next games are with the Braves, Phillies and the Reds. Three teams the Mets can beat. I think. I hope. Please. I don't want to cry again this year!

Your humble servant,


September 21, 2015 11:50 AM

Fog Creek

Fog Creek Software Turns 15!

.timeline { position: relative; width: 660px; margin: 0 auto; margin-top: 20px; padding: 1em 0; list-style-type: none; } .timeline:before { position: absolute; left: 50%; top: 0; content: ' '; display: block; width: 6px; height: 100%; margin-left: -3px; background: rgb(80,80,80); background: -moz-linear-gradient(top, rgba(80,80,80,0) 0%, rgb(80,80,80) 8%, rgb(80,80,80) 92%, rgba(80,80,80,0) 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(30,87,153,1)), color-stop(100%,rgba(125,185,232,1))); background: -webkit-linear-gradient(top, rgba(80,80,80,0) 0%, rgb(80,80,80) 8%, rgb(80,80,80) 92%, rgba(80,80,80,0) 100%); background: -o-linear-gradient(top, rgba(80,80,80,0) 0%, rgb(80,80,80) 8%, rgb(80,80,80) 92%, rgba(80,80,80,0) 100%); background: -ms-linear-gradient(top, rgba(80,80,80,0) 0%, rgb(80,80,80) 8%, rgb(80,80,80) 92%, rgba(80,80,80,0) 100%); background: linear-gradient(to bottom, rgba(80,80,80,0) 0%, rgb(80,80,80) 8%, rgb(80,80,80) 92%, rgba(80,80,80,0) 100%); z-index: 5; } .timeline li { padding: 1em 0; } .timeline li:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .direction-l { position: relative; width: 300px; float: left; text-align: right; } .direction-r { position: relative; width: 300px; float: right; } .flag-wrapper { position: relative; display: inline-block; text-align: center; } .flag { position: relative; display: inline; background: rgb(248,248,248); padding: 6px 10px; border-radius: 5px; font-weight: 600; text-align: left; } .direction-l .flag { -webkit-box-shadow: -1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15); -moz-box-shadow: -1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15); box-shadow: -1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15); } .direction-r .flag { -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15); -moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15); box-shadow: 1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15); } .direction-l .flag:before, .direction-r .flag:before { position: absolute; top: 50%; right: -40px; content: ' '; display: block; width: 12px; height: 12px; margin-top: -10px; background: #fff; border-radius: 10px; border: 4px solid #006592; z-index: 10; } .direction-r .flag:before { left: -40px; } .direction-l .flag:after { content: ""; position: absolute; left: 100%; top: 50%; height: 0; width: 0; margin-top: -8px; border: solid transparent; border-left-color: rgb(248,248,248); border-width: 8px; pointer-events: none; } .direction-r .flag:after { content: ""; position: absolute; right: 100%; top: 50%; height: 0; width: 0; margin-top: -8px; border: solid transparent; border-right-color: rgb(248,248,248); border-width: 8px; pointer-events: none; } .time-wrapper { display: inline; line-height: 1em; font-size: 0.66666em; color: #006592; vertical-align: middle; } .direction-l .time-wrapper { float: left; } .direction-r .time-wrapper { float: right; } .time { display: inline-block; padding: 4px 6px; background: rgb(248,248,248); } .desc { margin: 0em 0.75em 0 0; font-size: 0.77777em; font-style: italic; line-height: 1.5em; } .direction-r .desc { margin: 0em 0 0 0.75em; } @media screen and (max-width: 660px) { .timeline { width: 100%; padding: 4em 0 1em 0; } .timeline li { padding: 2em 0; } .direction-l, .direction-r { float: none; width: 100%; text-align: center; } .flag-wrapper { text-align: center; } .flag { background: rgb(255,255,255); z-index: 15; } .direction-l .flag:before, .direction-r .flag:before { position: absolute; top: -30px; left: 50%; content: ' '; display: block; width: 12px; height: 12px; margin-left: -9px; background: #fff; border-radius: 10px; border: 4px solid #006592; z-index: 10; } .direction-l .flag:after, .direction-r .flag:after { content: ""; position: absolute; left: 50%; top: -8px; height: 0; width: 0; margin-left: -8px; border: solid transparent; border-bottom-color: rgb(255,255,255); border-width: 8px; pointer-events: none; } .time-wrapper { display: block; position: relative; margin: 4px 0 0 0; z-index: 14; } .direction-l .time-wrapper { float: none; } .direction-r .time-wrapper { float: none; } .desc { position: relative; margin: 1em 0 0 0; padding: 1em; background: rgb(245,245,245); -webkit-box-shadow: 0 0 1px rgba(0,0,0,0.20); -moz-box-shadow: 0 0 1px rgba(0,0,0,0.20); box-shadow: 0 0 1px rgba(0,0,0,0.20); z-index: 15; } .direction-l .desc, .direction-r .desc { position: relative; margin: 1em 1em 0 1em; padding: 1em; z-index: 15; } } @media screen and (min-width: 400px ?? max-width: 660px) { .direction-l .desc, .direction-r .desc { margin: 1em 4em 0 4em; } }

Fog Creek Software turns 15 today. It was all the way back in 2000 when our founders, Joel Spolsky and Michael Pryor, then colleagues at Juno Online, decided to work together and start their own company. Skip forward to now, and we can look back on 15 great years, which have seen us launch products like FogBugz, Kiln, Stack Overflow and Trello, and help millions of developers to make better software.

We’re Going To Party Like It’s… 2000

At Fog Creek, we’re celebrating by throwing an Alumni party – gathering together more than a hundred current and former employees from over the years, to share stories and reminisce. We’d like you to share in this too, and have created some great content that we hope you’ll enjoy. Later this week we’ll be publishing a podcast with Joel Spolsky, Michael Pryor and some fellow Creekers from past and present, in which we discuss our successes and failures over the years. We’ll also be releasing a Tech Talk with Justin Gallagher, VP Product at Trello, that goes into the process we used to create Trello.

For now, below we have an annotated timeline of the history of Fog Creek. There are links to further information and videos that explain how we got started and what we’ve created over the years. I hope you’ll indulge us in what’s frankly a thinly veiled excuse to break out some old, embarrassing photographs! Enjoy!

Fog Creek: An Annotated History

  • Fog Creek Founded
    Starting out as a consulting company and working out of Joel’s Grandma’s brownstone apartment, Fog Creek was founded with the goal of creating the best place for developers to work.
  • Joel on Software Started
    Joel starts the ‘Joel on Software’ blog, one of the first blogs set up by a business owner.
  • Screen Shot 2015-09-17 at 14.03.48
  • Screen Shot 2015-09-17 at 14.03.48
  • FogBugz and CityDesk Released
    As the dot-com bubble bursts, consulting work dries up. In response, Fog Creek releases FogBugz, a hitherto internal tool used for tracking bugs, and CityDesk, a content management client.
  • Screen Shot 2015-09-17 at 14.54.46
  • We Move Into the Bionic Office
    FogBugz is well received, the company grows and the brownstone is soon filled beyond capacity. It’s time to move, so Joel along with architect, Roy Leone, design a new office, providing a private office for each developer.
  • Bionic-New
  • Screen Shot 2015-09-17 at 14.27.15
  • Screen Shot 2015-09-17 at 14.55.50
  • Copilot and Aardvark’d Released
    Fog Creek interns star in the documentary film, ‘Aardvark’d: 12 Weeks with Geeks‘, covering the development and release of the remote assistance tool, Copilot.
  • Screen Shot 2015-09-18 at 11.07.31
  • Screen Shot 2015-09-17 at 14.27.01
  • StackOverflow Created
    We team up with Jeff Atwood to create StackOverflow. It would go on to become the largest Q&A site for programmers in the world.
  • Screen Shot 2015-09-18 at 11.24.49
  • Screen Shot 2015-09-17 at 14.31.03
  • We Move Office to 55 Broadway
    The Bionic Office was designed to fit 18 people, but now had 24 squeezed into it. So Joel and DeRosa Group architects went back to the drawing board, designing a new, better office.
  • Screen Shot 2015-09-18 at 10.03.30
  • Kiln Released
    The way software teams collaborate is changing, so we release Kiln, a system for distributed version control to help programmers work together effectively.
  • internJude1
  • Stack Exchange Spun-off
    With the success of Stack Overflow, things soon get a little too cosy at HQ. So we boot out Stack Exchange into their own office, they become Stack Exchange Inc. and raise $6 million in funding.
  • stackExchange
  • Trello Launched
    Initially called ‘Trellis’, we release Trello at Tech Crunch Disrupt San Francisco. It’s now one of the fastest growing team productivity tools with more than 10M users.
  • Screen Shot 2015-09-18 at 11.19.21
  • tees
  • Hurricane Sandy Hits
    With the power out, staff haul buckets of diesel up 17 flights of stairs all night long to the generators, and make sure the datacenter stays online.
  • screen-shot-2012-11-01-at-10-51-08-pm
  • Trello Spun-off
    Trello is spun-off as its own company, becoming Trello, Inc. and they raise $10.3 million in funding. They remain in the Fog Creek office thanks to the promise of free swag.
  • trellists
  • Fog Creek Fellowship Begins
    We team up with the Flatiron School and the Recurse Center, to help encourage more women into software development.
  • fellowship
  • What’s Next?
    We’re actively working on exciting new products that we hope you’ll love!
  • company_2014

    Here’s to the next 15 years!

    by Gareth Wilson at September 21, 2015 08:30 AM

    September 20, 2015

    Dave Winer

    WNYC leads NY biking

    I love riding in NYC. Both on my own bike and using CitiBike. It's exciting times, because CitiBike is moving uptown. Now it's possible to ride from anywhere in lower Manhattan or Brooklyn to the uptown museums on both sides of the park. There's also a new connection to Queens.

    Last week I heard WNYC, the local public radio station, asking for bike riders to take pictures of cars blocking bike lanes. They want to understand and document the extent of the problem. I love this so much, both as a bike rider, it makes it possible for me to help make riding work in the city, and as a news developer, I strongly believe this is the kind of project news organizations must undertake, to provide more value in the new context of news.

    Not everyone in NY will agree, but I want to see bike riding work here as I've seen it work in Copenhagen and Amsterdam. There, if you, as a pedestrian, step out into bike traffic, you're as likely to get injured as if you walked out into car traffic. This is a good thing! It makes biking work as a means of transport in these cities, equal to cars in every way. That makes for a more human and more sustainable city.

    In NYC, pedestrians often use the bike lanes as extensions of the sidewalk. And drivers park cars, buses, trucks and ambulances in bike lanes. I've never seen a cop giving tickets for this.

    So I've taken two sets of pictures. One on West 54th St, an west-east bike lane street, and the other on Central Park West, an excellent south-north route, if the bike lane wasn't blocked by cars. This will become even more important now that there are three CitiBike stations at 66th, 72nd and 77th streets.

    I've published all my pictures both on the WNYC site and on Facebook.

    Why this is so important

    This is a perfect example of the kind of project news will thrive on in the future. Helping citizens be active in bringing about change. They don't have to be pro bike or pro car. Just help everyone share what they see and think. I love taking the pictures and sending them to WNYC -- makes me feel powerful.

    September 20, 2015 07:50 PM

    Why I've never run ads on Scripting News

    People often ask why I don't run ads on Scripting News.

    Basically, I don't want to compete for the attention of my readers.

    A story to illustrate. Imagine you're a car salesman. You have a customer doing a test drive. In the car, the engine is running. This is the moment you prepared for! You're about to close the deal and be a sales hero for your team!

    But first, you turn on the radio and play a Starbucks ad. It offers a special price on a latte if they drive to the store. Great, you just sold them a $3 drink, but I was going to sell them a $35K car.

    I see running ads on my blog as picking up loose change that's fallen out of peoples' pockets. I want to hit a home run. I'm swinging for the fences. Not picking up litter.

    September 20, 2015 02:51 PM

    Advertising is unwanted, day 2

    Yesterday's piece about web advertising was a big hit in the tech industry, and drew questions and criticism from people in the news industry. All of it is good. I like it when my writing gets people thinking. That's the greatest reward. So now here are some more, hopefully thought-provoking, observations.

    1. In a piece I wrote in 1997 about web economics, I offered Netscape as an example of a news site with a solid business model. Everyone coming to the site needed a web browser, and Netscape was selling one. Perfect. So just by promoting news through their site, no matter what the topic, they built demand for a revenue-producing product. They were also building the connection in the market between their brand and the activity of seeking out news. Just drawing people to the site made the name Netscape more famous and therefore more valuable.

    2. I offer my own experience as an example. I started writing my blog because I loved to share what I learned about technology and the people using and creating the new medium. But along the way I also created products, some of which were sold, generating a fair amount of revenue. In the end I was very well compensated, financially, for the writing I did.

    3. I am still doing that here. Writing blog posts and writing software. I hope to make more money, but that isn't why I do it. I do it because writing software and writing about software is what I want to do. I would do it even if it didn't pay.

    4. John Gruber of Daring Fireball did a similar sort of thing with Markdown. Could he have created such a powerful standard, on his own, without his widely read blog? (BTW, I'm using Markdown to write this post. I like the way it handles numbered lists.)

    5. Joel Spolsky wrote blog posts and books that captivated the imagination of developers. He turned that into Stack Exchange, a very valuable company, and Trello, a popular and presumably profitable product.

    6. I just read an article about how Slack was used at a conference to facilitate pre- and post-conference discussions, and (key point) helped people meet more interesting people at the conference. This is really what the net is about.

    7. Conferences and networking, same thing. Exactly the same thing. All real-world conferences should have semi-permanent installations on the net. There's no reason that XOXO 2015 can't keep going for years and years.

    8. This is how I first met Robert Scoble. He was the chair of a conference I was going to speak at. He ran a mail list for the speakers, before the meetup, and pushed on-topic links to us. When we got to the show the discussion was already underway.

    9. I used to run my blog posts through email. I'd send each piece to random groups-of-eight. Sometimes long interesting discussions would grow in the small groups. Randomness can be a great connector. It helps you meet people with widely varying backgrounds.

    10. People often ask why I don't run ads on Scripting News. Basically, I don't want to compete for the attention of my readers. More here.

    11. Here's an idea for a geography-based news org (i.e. a newspaper) -- give readers a place to talk about movies, and then sponsor movie nights based on their interests. Encourage people to provide lists of their favorite movies and do some collaborative filtering. Then collate the reviews and present them alongside your professional reviewer's post. Work with the movie industry. It can have incredible promotional value, for the movie, the theater, you, the whole idea of going to the movies (as opposed to watching on your home TV, phone or tablet). What's great for your community is they get to meet people who like the same kinds of movies they do. And you get to know who they are! It's such a huge, easy win, all-around. That more local news orgs haven't done it tell you how stuck in old print models we still are. This is an example of a kind of idea that really can only blossom online.

    12. And once you do one activity there can be dozens more. Amateur car and cat shows. Bowling night. Ski trips. Outings to baseball games.

    13. No doubt a lot of this will ultimately be about sex (which is good!), but there are also intellectual and athletic activities that people enjoy too. We're a social species, and we're more isolated these days because of the net, and that makes us yearn for more gratifying social experiences. The net can help there too. Facebook is a huge first step in that direction, but there will be lots of new, more specific activities, all around making human connections, in the years to come. And news can and should play a big role in bringing that about.

    14. If you can create a service, news or otherwise, that helps people meet new friends, you've got a printing press for money. And most news orgs, if they just think about it, can find a lot of ways to make introductions between their readers.

    PS: Cross-posted in full text without links on Facebook.

    September 20, 2015 12:00 PM


    Emscripten Experience Part II – Optimizing the GLSL-Optimizer

    There are many ways to love Emscripten. You could take an existing piece of C code or library and turn that into Javascript code that has benchmark speeds close to compiling and running native (thanks non garbage collected asm.js). You could use it to code with the type-safety of C. You could bring an application which previously requires compilation or installation to anyone on the internet simply by loading a webpage. You could even use browser developer tools to profile C++ code.

    One reason I’ve been intrigued by Emscripten is the possibilities that happen with an application’s portability by the JS cross-compilation target. That has also spark off more interest in me to learn more about languages, C, LLVM or even Javascript itself.

    Despite all the interest, I had a slow start with Emscripten – which was the topic in my last post. Overcoming some of the difficulties was I able to enjoy some fun and success with it. Still challenges lurked along the journey, and at end of the previous post I had 2 problems to solve:

    a) getting link-time optimizations on glsl-optimizer

    b) difficultly of porting a wavetable midi synthesizer to the web browser

    One day @thespite mentioned to incorporate my emscripten port of GLSL-optimizer into his cool WebGL Shader Editor extension for Chrome, and that prompted me to revisit my project and Emscripten. So I continued the journey with a couple more tales to tell but as these stories become slightly unwieldy, I decided to cover the second section in another post.


    Have you tried playing old games on emulators? A decade or more ago, I used to follow development on emulators (eg. playstation) to check out what additional new game compatibility they have made with new releases. Somehow the idea of being able to emulate and play many games from a different platform amazed me.

    This draws a parallel to application of Emscripten. Huge codebase originally written in C or C++ could be “emulated” for the web. It excites me to see stuff like server libraries, desktop applications, graphics platform, codecs, even programming languages ported to JS that runs either on node.js or in the browser. 2 examples of projects I thought was really interesting is emscripten-QT and pypy.js! This wiki page has a great list of projects to check out!

    Excess Code

    While Emscripten has been known to work of huge amount of existing code, it might also mean that it could potentially generate huge amount of code too. Well, like many other cross-compilers or machine generated code, this isn’t new.

    But is that really a big deal? Considering being able re-use most or all of an existing codebase for javascript with relatively little effort and time (compared to re-writing in js). Considering that the equivalent binaries aren’t that small either, especially if you include about shared libaries and dependencies already installed on your system. Considering that different binaries are needed for different platforms, now they would now run on the most universal platform (the web) with additional compilation. Considering without binaries, no installation is needed and runs almost instantaneously. Considering without the web as a platform, how much more difficult it is to acquire users who needs to go the hassle try the software on their computer. Considering these could justify the download wait.

    Yet a casual visitor on your website loading up that fat javascript file wouldn’t appreciate that. The javascript may be so huge the browser is taking time downloading it. The browser may be look it has stop responding taking additional time to parse, interpret or compile the huge script files. The visitor may be wondering if the site is broken, the network is down, whether the code works, and it’s definitely not the best experience.

    Which is why emscripten isn’t always the magic pill, there are other alternatives like hand porting or using other tools – bonsai-c, cheerp (though from some of my initial tests cheerp seems to be generating a bigger code ).

    GLSL Optimizer Releases

    When I first announced my emscripten port of GLSL-Optimizer, the build was 8MB. That’s almost the size of 10 floppy disks. These days though, homes have 1Gbp internet, but running a huge javascript file still takes additional time to get the code running.

    Of course the file size wasn’t satisfactory. One thing I wasn’t doing was to run it at -O1, -O2 or -O3 optimizations. Running with those flags can activate link-time optimizations and runs the resulting code through JS minification which would improve overall file size and performance. Strangely, using these optimization flags resulted in infinite loops during runtime.

    Why weren’t the builds optimized
    One factor I suspected why optimizations were failing was because I was using Embind for bridging JS and C world. I observed that for some strange reasons I was able to run at -O1 instead of -O0 when I had embind disabled, so I decided to revert to non-embind bindings and use function return values to pass back successful and failure values back to JS land.

    But that seem only to be able to get me as far as -O1 optimizations. The resulting JS weren’t even minified so I wanted to check if I could do closure minification without O2. I ended up filing an issue in github because the flags didn’t allow me to do that with emscripten. So even though that might be a bug, minification without link-time optimizations would also have limited effectiveness (besides, running huge code through the minifier tends to end up with crashes).

    Alon Zakai aka kripken asked why the compiler optimizations and pointed me to some compiler settings I could use to trace memory segmentation faults. Those settings turns out to be really useful to debug emscripten code in general.

    Tweaking around the flags, I still couldn’t solve the problem. I started thinking that there’s a possibility it was a bug emscripten. I lay this matter to rest till some time later, there were new versions of emscripten and I decided to give it another shot. I upgraded to 1.30.0, no luck. I decided to git clone master version and try again, still it did not work run time problems.


    Since I was on the master branch, I decided to check out the latest developments. Emterpretor was in. Asyncify was out. Interesting, but what was that?

    I ran Emscripten + Emterpretor anyways and O2 still fails. On the bright side, through the network pane I found the resulting code to be much more compact. Wow! 8.7MB→1.8MB (1.7MB→720KB gzipped) So what happened?

    “We take C/C++ code and convert it to asm.js a subset of JavaScript. Then we convert the asm.js to byte code and spit out an interpreter for it written in JavaScript.

    The JavaScript interpreter is loaded in the usual way into the web page and the bytecode is loaded as data. The big advantage of this scheme is that the byte code doesn’t have to be parsed and this speeds up the entire load process.” (source)

    So from my understanding the Emterpretor is like a virtual machine which interpret and runs your emscripten code. It load code as a binary / bytecode format (like JVM) that is more compressed and concise than Javascript itself. It also allows code to be run even before the entire code can be parsed (unlike asm.js or JS). The virtual machine would also possibly allow some cool stuff like saving the state of the machine, and running virtual threads (green threads). The idea of an interpreted language running interpreted stuff is cool, isn’t it? There are drawbacks though, like preventing AOT optimizations (because instructions would interpreted evaluated at runtime). There’re ways around that, eg using whitelisting, something I may bring up in the next post.

    While uploading the tinier builds to github, I realized something. Github pages weren’t enabling gzip compression with emscripten.js.mem. As a hack, I renamed that to mem.js, make emscripten load the custom memory file sogithub-pages would pull a gzip served asset. Yah!


    At this point, I’m tempted again to derail my topic to talk about the not-too-long ago announced WebAssembly/WebASM/WASM. It has some of the ideas of Emterpretor, AST byte code format solving faster load times and allowing optimizations in the JS engine. I think it’s an exciting topic. It seems like a natural progression for asm.js -> emterpretor -> WebASM which is at the same time backward compatible with polyfills. It’s even greater that all vendors agree on this standard. I believe it is also something that can make the people asm.js bothers happy. It is also awesome that emscripten can also support that with a flick of a switch. But let me go back on topic.

    Real Fix
    Up to now, I’ve been trying to get around fixing the optimization problem looking everywhere, except one place – the code base (one of my emscripten lessons I shared was to understand the original code base, apparently I didn’t heed my own advice). In an issue in three.js, Ben Adams mentioned my project in a thread that leads @tschw to the original optimizing issue I’ve open for glsl-optimizer. With his sorcery (which he denies), he was able to trace to an issue upstream from glsl-optimizer to the MESA glsl compiler that was causing how the optimizations not to work. Whoever tschw is, awesome work there!

    Finally we can perform -O3 optimizations!!!!

    If we stop here for a moment, I think we have a happy ending. The GLSL-optimizer has also been added to the Shader Editor Extension.

    So here we have a little milestone, but I believe there’s more work that can be done. thespite suggested for a tree-shaking pruning (aka dead-code elimination) feature that doesn’t alters the original GLSL variables. I think that’s a absolutely good feature to have, unfortunately it may be difficult to alter MESA GLSL parser or GLSL optimizer to do so. Others have mentioned other tools: peg.js, glsl-unit, glslprep.js, glsl-simulator and the StackGL set of tools: glsl-tokenizer, glsl-parser etc. These suggestions are great, someone just have to look into them and apply them. Maybe one day when I have too much time on my own, I might also write my own parser in JS to play around with the GLSL code. Well, maybe as always.

    So that’s all for “Optimizing the GLSL-Optimizer” in this post, and I’ll try to write about “Setting WildMidi Wild on the Web” into the next post, till then feel free to drop me comments @blurspline 😀

    Related Links / Readings – Slides on “Compiling C/C++ To Javascript GDC 2013″ by Alon Zakai From asm.js to Web Assembly
    The Emterpreter: Run code before it can be parsed Original announcement of glsl-optimizer on twitter
    – Web Assembly (Google, Microsoft, Mozilla And Others Team up, Design FAQ, prototype)
    Javascript is C, not assembly of the Web Twitter News on Emscripten

    by Zz85 at September 20, 2015 10:29 AM

    September 19, 2015

    Reinventing Business

    The Problem with Salaries

    Planet Money #647: Hard Work Is Irrelevant

    I've visited Netflix a number of times, and this is a very interesting perspective that I haven't gotten before. Something just feels wrong about this way of doing things.

    Not that a company should keep people that don't contribute, but they seem so tightly tied to roles, and if we don't need your role anymore or you aren't doing it as well as we think you should, out you go. Any accumulated wisdom you have about the company goes too. The fact that you know how the company works, well, we can just train someone else up. We will ignore all those costs and losses.

    Both Holacracy and Teal organizations de-emphasize specific roles, and emphasize each person having multiple roles. If you have zero roles then your value to the company comes into question, because either no one wants you on their teams or you aren't trying to be on teams, either way you've moved into a no-person's zone (at Zappo's they call it "the beach" and if you're on the beach for two weeks, you're out).

    I wonder if the problem is in the granularity: Netflix defines a single role and pays a salary for that role, so if you fall below the role-salary equation you are out. There is no room for people who might contribute value in a partial way but not the full-bore way, which in my mind means that they are losing out on a lot of possibility.

    The more I think about salaries, the less I like them. They are usually pitched like "as long as you get your tasks done, it doesn't matter how much you work," but for some reason it seems like most salaried people end up working more hours and not less. It has the same smell as companies adopting unlimited vacation because they've discovered that people take less vacation.

    I actually like getting paid for my time. I think the deal has always been that I'm selling some of my life to you. A salary feels like a way for you to cheat and get more of my life. And the expectations are big, so (just like unlimited vacation) if I start actually using the flexibility, I'm "not a team player." It seems to me that paying for time is both more honest and more freeing. If I'm no longer productive today, I should go do something else and not worry about it -- I don't do the hours and I don't get the pay, but I feel OK about that, not like I'm somehow cheating the company as is the case with a salary or unlimited vacation (yes, it requires that everyone live within their means so they have the choice of stopping work when it makes sense, but I personally consider living within your means a very good thing).

    by (Bruce Eckel) at September 19, 2015 08:36 PM

    Dave Winer

    Advertising is unwanted

    1. I think of advertising as "unwanted commercial messages."

    2. The unwanted part is key. I do a lot of seeking of commercial information using the web. We all do, all the time. That's how business works on the web.

    3. It seems to me that news orgs have to figure out how to make people come to their sites seeking commercial information. They are in the information gathering business after all. Let some of the information you seek pertain to me spending money wisely or in fun or gratifying ways.

    4. What if I could go to my local paper to buy a house. I'm always interested in buying real estate. If they sold me a house, then they would make money from the sale. A lot more than a few cents they make off me every year for the ads I ignore.

    5. Maybe not a house. How about Internet connectivity. Or a movie date. Someone interesting to go to a baseball game with. These are things I pay money for. I pay a lot of money to go to games. How much I enjoy it is directly proportional to who I go with. All these things involve connecting people with people. So much money to be made here. Why doesn't the news industry help me meet interesting people?

    6. Maybe that's why Facebook makes so much money. Just sayin.

    7. I also am always in the market for better Internet connectivity. Could the NY Times help me there? We all live in the same city. They help me find good restaurants. Maybe if they helped me find better Internet, or if they can't, because it doesn't exist, if they helped to bring us better Internet by constantly beating the drum for it, which is something they can do and seem to like doing -- that would be worth paying for. Beat the drum for new commerce, and then make it possible to buy the thing through your site?

    8. There are honest ways to make huge money on the Internet. I think the message you're getting from your readers is that advertising is dishonest. The ads you show us net-net are junk. Jokes. Sad. Please stop this.

    9. Maybe the more distilled message is this: Stop talking so much. Listen.


    There's a follow-up to this post.

    September 19, 2015 01:58 PM

    War with your customers?

    The ad blocker thing feels like the user rebellion over copy protection in the late 80s. Disks used to have bad tracks that made it impossible for the OS to copy them. It wasn't hard to write utilities to copy the disks, so it didn't really work. One day the users decided, en masse, all the more impressive because this was before the web, no more. They cut up the disks and mailed them back. Right away we knew it was over. You can't be in business and be so hostile to the people who love your product. It just didn't work.

    September 19, 2015 02:17 AM

    September 18, 2015

    Tim Ferriss


    Morning Rituals

    If you see distraction externally, you end up creating an internally distracted state.” – Tim Ferriss

    This episode of The Tim Ferriss Show is a bit of an experiment. Most the time, I interview world-class people, and I ask them many, many questions to try and figure out what makes them good at what they do.

    Many of you have wondered what would happen if I flipped the script and had to answer my own questions. In this episode, I decided to do just that and answer one of your most common questions: what does your morning routine look like?

    What you’ll find here are the five things I’d like to accomplish within the first 60 to 90 minutes of an “ideal day.” If I can hit at least three of these items, then I’ve won the morning. And, as the saying goes, “If you win the morning, you win the day.”

    Let me know if you like this type of episode by responding to me on Twitter (@tferriss) or Facebook. Please let me know if you want more, never want to hear this type of podcast again, or suggest another question you’d like me to answer.



    Want to learn more about morning routines from a world-class entrepreneur? Listen to my two-part conversation with Tony Robbins. In the episodes below, we discuss Tony’s use of cryotherapy, his daily priming ritual, and how to get out of a slump. (Stream the episodes below or right-click here for part 1 and here for part 2 to download.)

    This podcast is brought to you by Wealthfront. Wealthfront is a massively disruptive (in a good way) set-it-and-forget-it investing service, led by technologists from places like Apple and world-famous investors. It has exploded in popularity in the last 2 years, and now has more than $2.5B under management. In fact, some of my good investor friends in Silicon Valley have millions of their own money in Wealthfront. Why? Because you can get services previously limited to the ultra-wealthy and only pay pennies on the dollar for them, and it’s all through smarter software instead of retail locations and bloated sales teams

    Check out, take their risk assessment quiz, which only takes 2-5 minutes, and they’ll show you—for free–exactly the portfolio they’d put you in. If you want to just take their advice and do it yourself, you can. Or, as I would, you can set it and forget it.  Well worth a few minutes:

    Mandatory disclaimer: Wealthfront Inc. is an SEC registered Investment Advisor.

    Investing in securities involves risks, and there is the possibility of losing money. Past performance is no guarantee of future results. Please visit Wealthfront dot com to read their full disclosure.

    This episode is also sponsored by 99Designs, the world’s largest marketplace of graphic designers. Did you know I used 99Designs to rapid prototype the cover for The 4-Hour Body? Here are some of the impressive resultsClick this link and get a free $99 upgrade. Give it a test run…

    QUESTION(S) OF THE DAY: What other questions would you like me to answer on the podcast? Please let me know in the comments.

    Scroll below for the episode links…

    Selected Links from the Episode

    Pu-erh tea | Turmeric ginger | Green tea

    If you like this type of advice and want more of my insider tips and tricks, as well as the latest of what I’m enjoying, please subscribe to 5-Bullet Friday.

    by Tim Ferriss at September 18, 2015 07:40 PM

    Lambda the Ultimate

    Xavier Leroy will receive the Royal Society's 2016 Milner Award

    The Royal Society will award Xavier Leroy the Milner Award 2016

    ... in recognition of his research on the OCaml functional programming language and on the formal verification of compilers.

    Xavier's replied:

    It is very moving to see how far we have come, from Milner's great ideas of the 1970s to tools as powerful and as widely used as OCaml and Coq.

    September 18, 2015 02:48 PM

    Dave Winer

    Avoiding balkanization in news

    Balkanization is a "pejorative geopolitical term, originally used to describe the process of fragmentation or division of a region or state into smaller regions or states that are often hostile or non-cooperative with one another."

    We're at an interesting junction, with several competing incompatible distribution systems for news about to be introduced. I've probably got as much experience with this process as anyone, and I can see how this is shaping up, in a bad way, for pretty much everyone. Here are some bullet points leading to a conclusion, a set of proposed action items for Facebook.

    1. Each of the major tech companies is planning as if their news system is the only one anyone will ever need. I'm sure it feels that way, from their internal point of view. People who work at big tech companies are greatly affected by the gravitational pull of the social structures of those organizations.

    2. When I visited Microsoft in 2007 as they were about to launch their RSS initiative, they were sure that when their new Windows OS shipped, immediately the vast majority of RSS users would also be Vista users, so they felt free to ignore the installed base and prior art. It didn't work out that way, so there were new ways to do familiar things. Windows did not become the RSS OS as they expected it would. Too bad, RSS could have used a friend in the OS business.

    3. I also saw this play out in the process that led to SOAP, which was simple protocol that was eventually obscured by a maze of messy specification languages. Underneath all the WS-junk there was a beautiful idea, that we could all build systems that worked with each other out of the box. This is known as interop. Balkanization and interop are basically opposing forces.

    4. Big tech companies really are all the same in this way -- they want to be able to claim to be compatible with open standards, without the problems that come from interop. Interop makes it hard to sell expensive software and services when a competitor could undercut your price or provide a more efficient or useful product. Life is easier for the bigco if they can do anything they want at any time and the cost of switching is prohibitively high.

    5. Users, when they are aware of the pitfalls of balkanized markets, are very much in favor of interop. The news industry is on the verge of learning those pitfalls, over the next few years, if things don't turn radically in the next few months.

    6. Balkanization is an important concept. It's what happens when there are several competing confusing ways to do the same thing, each of which has some support in the market. If you want to participate, you have to support them all. It's often impossible, by design, as the vendors try to control their partners by throwing ever more complex requirements at them.

    7. Google has apparently teamed with Twitter making an announcement by leaking it to Re/code. They claim their approach will be "open" but no one but them and their partners (maybe) have seen what this might mean. I'm skeptical. Given past experience I expect there will be a hidden trap door in the open-ness, a way for Google and/or Twitter, to foreclose on it, if it even exists at inception. Both companies have awful track records in this area. Twitter unilaterally nuked their developer community in one day. Google camped out in and dominated the RSS reader market, then killed the product. Nice. You trust these guys? You need to see a shrink. But they have standing, and anything they use will have to be supported, it seems. Google has two excellent news products, Google Now and Google News, and Twitter is the current leader among tech companies in news, but Facebook looks poised to quickly become #1, which is presumably why Twitter is in motion now.

    8. Apple. Their approach builds on RSS, somehow, but again, the track record here is pretty bad. And Apple has never had a successful product in news. But they are Apple. And the mobile market is where the action is, and Apple has a lot of power when it comes to what people do with mobile devices.

    9. Facebook. Their announcement and demo of Instant Articles started the push by all the other big tech companies to try to own news distribution on the net. It's why we're having this discussion in the last part of 2015.

    10. RSS. The open news distribution format, quietly doing as much work as any of the tech companies, controlled by no one, guaranteed not to make your software obsolete, and free to use. RSS could easily be the basis for a new open market with interop everywhere, and no single company controlling anything. No wonder the tech industry hates it!

    11. While I have very little insight into what Apple, Google and Twitter are doing, I have some clue how Facebook's news system works. I signed a NDA last summer, and have been briefed a few times as work has progressed. My opinion: If Facebook wanted to settle this, they could, right now, and prevent the crazy balkanization we're about to embark on. That's why it's a good time to write a blog post. It might inspire them to do something great, or it could serve as a milestone for an I-Told-You-So post in 2018 or 2019. I don't think Apple, Google or Twitter will listen to me, but Facebook might.

    12. I'm pretty sure Facebook's news system is built on RSS. If so, please tell everyone that, now. And show us how to plug in. Not just famous news orgs, also bloggers, and makers of blogging tools like WordPress and Tumblr. I have my own tools that I'd like to be part of the Facebook network. I've seen the impact of having full text on Facebook, vs linking to a story on my site. But I won't give up my blog, it's important to me not to become dependent on Facebook for publishing. Everyone who writes seriously has to feel this way, imho of course.

    13. I want an API so I can publish to those sexy Medium-like Facebook posts. Both because they're beautiful and I know people want to read that way.

    14. Google, Twitter, Facebook and Apple can make an awful mess of news on the net that will take a decade or more to clean up. News won't get back on track until Zuck is in his 50s. Or, Facebook could do the gutsy thing, and tell your big competitors that you're on the side of really irrevocably open systems, with no hidden card up your sleeve (that we all can actually see) and trust developers and your momentum to carry you into the leadership position in this market.

    15. Facebook + RSS would be absolutely unbeatable. Apple and Google would never be able to escape the pull.

    September 18, 2015 12:25 PM

    September 17, 2015

    Decyphering Glyph

    Python Option Types

    NULL has, rightly, been called a “billion dollar mistake”. If that is so, then None is a hundred million dollar mistake, at least.

    Forgetting, for the moment, about the numerous pitfalls of a C-style NULL, Python’s None has a very significant problem of its own. Of course, the problem is not None itself; the fact that the default return value of a function is None is (in my humble opinion, at least) fine; it’s just a marker that means “nothing to see here, move along”. The problem arises from values which might be None, or might be some other, useful thing.

    APIs present values in a number of ways. A value might be exposed as the return value of a method, an attribute of an object, or an entry in a collection data structure such as a list or dictionary. If a value presented in an API might be None or it might be something else, every single client of that API needs to check the type of the value that it’s calling before doing anything.

    Since it is rude to use a “simple suite” (a line of code like if x: y() with no newline after the colon), that means the minimum number of lines of code for interacting with your API is now 4: one for the if statement, one for the then clause, and one for the else clause.

    Worse than the code-bloat required here, the default behavior, if your forget to do this checking, is that it works sometimes (like when you’re testing it), and that other times (like when you put it into production), you get an unhelpful exception like this:

    Traceback (most recent call last):
      File "<your code>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'method'

    Of course NoneType doesn’t have an attribute called method, but why is value a NoneType? Science may never know.

    In languages with static type declarations, there’s a concept of an Option type. Simply put, in a language with option types, the API declares its result value as “maybe something, maybe null”, and then if the caller fails to account for the “null” case, it is a compile-time error.

    Python doesn’t have this kind of ahead-of-time checking though, so what are we to do? In order of my own personal preference, here are three strategies for getting rid of maybe-None-maybe-not data types in your Python code.

    1: Just Say No

    Some APIs - especially those that require building deeply complex nested trees of data structures - use None as a way to provide a convenient mechanism for leaving a space for a future value to be filled out. Using such an API sometimes looks like this:

    value = MyValue() = 1 = 2
    value.baz = 3

    In this case, the way to get rid of None is simple: just stop doing that. Instead of .foo having an implicit type of “int or None”, just make it always be int, like this:

    value = MyValue(
        foo=1, bar=2, baz=3

    Or, if do_something is the only method you’re going to call with this data structure, opt for the even simpler:

    do_something_with_value(foo=1, bar=2, baz=3)

    If MyValue has dozens of fields that need to be initialized with different subsystems, so you actually want to pass around a partially-initialized value object, consider the Builder pattern, which would make this code look like the following:

    builder = MyValueBuilder()
    foo = builder.with_foo(1)
    bar = foo.with_bar(2)
    baz = bar.with_baz(3)
    value =

    This acknowledges that the partially-constructed MyValueBuilder is a different type than MyValue, and, crucially, if you look at its API documentation, it does not misleadingly appear to support the do_something operation which in fact requires foo, bar, and baz all be initialized.

    Wherever possible, just require values of the appropriate type be passed in in the first place, and don’t ever default to None.

    2: Make The Library Handle The Different States, Not The Caller

    Sometimes, None is a placeholder indicating an implicit state machine, where the states are “initialized” and “not initialized”.

    For example, imagine an RPC Client which may or may not be connected. You might have an API you have to use like this:

    def ask_question(self):
        message = {"question":
                   "what is the air speed velocity of an unladen swallow?"}
        if self.rpc_client.connection is None:

    By leaking through the connection attribute, rpc_client is providing an incomplete abstraction and foisting off too much work to its callers. Instead, callers should just have to do this:

    def ask_question(self):
        message = {"question":
                   "what is the air speed velocity of an unladen swallow?"}

    Internally, rpc_client still has to maintain a private _connection attribute which may or may not be present, but by hiding this implementation detail, we centralize the complexity associated with managing that state in one place, rather than polluting every caller with it, which makes for much better API design.

    Hopefully you agree that this is a good idea, but this is more what to do rather than how to do it, so here are two strategies for achieving “make the library do it”:

    2a: Use Placeholder Implementations

    However, rather than using None as the _connection attribute, rpc_client’s internal implementation could instead use a placeholder which provides the same interface. Let’s the expected interface of _connection in this case is just a send method that takes some bytes. We could initialize it initially with this:

    class NotConnectedConnection(object):
        def __init__(self):
            self._buffer = b""
        def send(self, data):
            self._buffer += b

    This allows the code within rpc_client itself to blindly call self._connection.send whether it’s actually connected already or not; upon connection, it could un-buffer that data onto the ready connection.

    2b: Use an Explicit State Machine

    Sometimes, you actually have quite a few states you need to manage, and this starts looking like an ugly proliferation of lots of weird little flags; various values which may be True or False, or None or not-None.

    In those cases it’s best to be clear about the fact that there are multiple states, and enumerating the valid transitions between them. Then, expose a method which always has the same signature and return type.

    Using a state machine library like ClusterHQ’s “machinist” or my Automat can allow you to automate the process of checking all the states.

    Automat, in particular, goes to great lengths to make your objects look like plain old Python objects. Providing an input is just calling a method on your object: my_state_machine.provide_an_input() and receiving an output is just examining its return value. So it’s possible to refactor your code away from having to check for None by using this library.

    For example, the connection-handling example above could be dealt with in the RPC client using Automat like so:

    class RPCClient(object):
        _machine = MethodicalMachine()
        def _connected(self):
            "We have a connection."
        def _not_connected(self):
            "We have no connection."
        def send_message(self, message):
            "Send a message now if we're connected, or later if not."
        def _send_message_now(self, message):
            "Send a message immediately."
            # ...
        def _send_message_later(self, message):
            "Enqueue a message for when we are connected."
            # ...
        def _send_queued_messages(self, connection):
            "send all messages enqueued by _send_message_later"
            # ...
        def connection_established(self, connection):
            "A connection was established."
        _connected.upon(send_message, enter=_connected, output=[_send_message_now])
        _not_connected.upon(send_message, enter=_connected,
        _not_connected.upon(connection_established, enter=_connected,

    3: Make The Caller Account For All Cases With Callbacks

    The absolute lowest-level way to deal with multiple possible states is to, instead of exposing an attribute that the caller has to retrieve and test, expose a function which takes multiple callbacks, one for each case. This way you can provide clear and immediate error feedback if the caller forgets to handle a case - meaning that they forgot to pass a callback. This is only really suitable if you can’t think of any other way to handle it, but it does at least provide a very clear expectation of the interface.

    To re-use our connection-handling logic above, you might do something like this:

    def try_to_send(self):
        def connection_present(connection):
        def connection_not_present():

    Notice that while this is slightly awkward, it has the nice property that the connection_present callback receives the value that it needs, whereas the connection_not_present callback doesn’t receive anything, because there’s nothing for it to receive.

    The Zeroth Strategy

    Of course, the best strategy, if you can get away with it, may be the non-strategy: refuse the temptation to provide a maybe-None, just raise an exception when you are in a state where you can’t handle. If you intentionally raise a specific, meaningful exception type with a good error message, it will be a lot more pleasant to use your API than if return codes that the caller has to check for pop up all over the place, None or otherwise.

    The Principle Of The Thing

    The underlying principle here is the same: when designing an API, always provide a consistent interface to your callers. An API is 1 to N: you have 1 API implementation to N callers. As N→∞, it becomes more important that any task that needs performing frequently is performed on the “1” side of the equation, and that you don’t force callers to repeat the same error checking over and over again. None is just one form of this, but it is a particularly egregious form.

    by Glyph at September 17, 2015 10:04 PM

    Mark Bernstein

    The Martian

    The core problem of science fiction today is that no thoughtful science fiction writer can really envision a future of any sort, much less one that fits with the SF’s expectation that understanding problems will solve them. The Martian attacks the problem by writing a science fiction story that is so thoroughly near-future that it’s scarcely speculative: a Mars landing mission that’s basically a scaled-up long-term Apollo lander gets caught in a windstorm and aborts, losing one astronaut. That astronaut miraculously recovers, wakes up, and there he is, alone, on Mars. He sets out to make the best of things, and things are not quite as dire as you’d think. The science and engineering is mostly familiar and it’s deployed cleverly; indeed, in this world our privatization of space travel hasn’t yet occurred.

    This interesting mix of techno-utopian dreaming, escapism, action, and good sense was written to be a movie and will shortly be one.

    September 17, 2015 04:11 PM

    Lambda the Ultimate

    Coroutines with async and await syntax (Python 3.5)

    With Python 3.5 released, the thing that drew my attention is the support for asynchronous programming through PEP 0492 -- Coroutines with async and await syntax, which added awaitable objects, coroutine functions, asynchronous iteration, and asynchronous context managers. I found the mailing list discussions (look both above and below) particularly helpful in understanding what exactly is going on.

    September 17, 2015 04:08 PM

    Fog Creek

    We’re Bad at Interviewing Developers (and How to Fix It) – Interview with Kerri Miller

    .little {font-size: 75%} .video { margin-right: 15px; height: 56px; }
    Hiring and Interviewing Developers – Interview with Kerri Miller

    Looking for audio only? Listen on and subscribe

    Up Next
    Saving Agile with BDD and Cucumber

    In this interview with Kerri Miller, Lead Software Engineer at LivingSocial, we discuss how to hire and interview developers. We typically don’t get trained on interviewing and we’ve all experienced the haphazard approaches of those new to it – poor organization, repeated questions, fizz-buzz… Kerri tells us how to run interview days, the types of questions to ask, how else we can evaluate candidates and what to do after the interview. For more tips, Kerri writes about software development and hiring on her blog.

    Content and Timings

    • Introduction (0:00)
    • What’s Broken with Developer Hiring? (0:44)
    • How to Structure and Run Interview Day (1:53)
    • Good Types of Questions (2:54)
    • Beyond the Interview – How Else to Evaluate Developers (4:00)
    • After the Interview – Making the Hiring Decision (5:56)
    • Measuring and Improving Your Hiring (9:12)
    • Common Developer Hiring Mistakes (11:23)



    Kerri Miller is lead software engineer at LivingSocial. She is also a RailsBridge instructor and frequent conference speaker. She talks about software development and hiring, including the talk, ‘We’re Bad at Interviewing and How to Fix It’. Kerri, thank you so much for taking time to join us today. Do you have a bit more to share about yourself?

    I am actually in fact a lead software engineer at LivingSocial. Part of that is working with junior developers, or more junior developers, leading software teams and projects, and I also do a fair bit of work in our engineering culture team, so doing things like how do we propagate a good culture for code reviews, post-mortems, and hiring.

    “You want them leaving the interview process regretful that they didn’t get hired, not resentful that they didn’t get hired”

    What’s Broken with Developer Hiring?

    What do you think is broken with the current way a lot of companies hire and interview?

    We don’t do a really good job of hiring with intent. We decide that we need more people, but we don’t do a really good job of figuring out what we need those people to actually do, and who we actually need to hire. I like to think of my software teams as little ecosystems, little, tiny arcologies that exist in a bottle. They’re not entirely a closed environment, and, like any ecosystem, anytime you introduce anything new to that realm, there’s going to be changes. There’s going to be impacts.

    Any time you hire somebody, you’re changing that ecosystem. You’re introducing a new species, or a new variable to things and it’s going to change. Thinking about what you want to change means that you have to have laid that groundwork to understand where you are at the moment. A lot of teams and companies don’t do a really great job of understanding that. They’re just simply, “We need more bodies. Let’s hire bodies.” They don’t go into these things with a conscious sense of where they are and what they need, and how the future’s going to change by adding more people.

    How to Structure and Run Interview Day

    Let’s talk about interview day. How should we structure it, and what are some key aspects you need to get right?

    You need to go into it having a plan, and that plan starts with knowing what questions you’re going to ask and why. Understanding that every question you ask that a candidate can’t answer, or every step of that process is an opportunity for a candidate to filter themselves out of that process, it’s a point for you to get information to make that final decision. I think it’s really important that you take a look at what that plan is going to be. If you have, say, three people, and you’re hiring for a front-end developer, you should have one person ask about JavaScript. You should have one person ask about, perhaps, browser interaction, or working with designers, or what have you. Just splitting up that interview so that you’re not asking the same questions over and over again, you’re really able to get really solid signal on a person’s skill sets, what they’re comfortable with, and what their concerns are. What kinds of decisions are they making?

    Good Types of Questions

    What are good kinds of questions that we should be asking?

    Well, I’m not a big fan of whiteboarding, because I think that’s something that we just automatically do, and we don’t think about, “Well, what questions are we trying to answer by asking a candidate to solve a problem?” Are we dinging people for trivia questions, for not remembering, “Oh, I need this third option flag, or an obscure method from a core library.” Instead, I really want to focus on questions that are asking about decisions that they’ve made, what choices have they made, and what choices would they make again in the future? Are they reflective about mistakes that they’ve made? Are candidates looking for opportunities to improve, and how do they actually go about it? Do they make plans for themselves, like how they would improve a certain skill set, whether that be a technical skill set or a more soft skill set, for example, management, or project shepherding for example. Those are the kinds of questions that I think really get you at the heart of not necessarily what somebody knows, but what they’re capable of.

    Beyond the Interview – How Else to Evaluate Developers

    You’re a proponent of evaluating candidates in other ways than just an interview. How else should we be finding out more about potential employees?

    I’m a really big fan of pairing on projects, like actually working with somebody. It doesn’t have to be a formal or traditional pair programming situation with one computer and two people, talking through the technical choices that they would be making as they programmed on something. At LivingSocial, we do a code challenge like a lot of companies do, using that as, then, a launching pad to have a discussion with a candidate to say, “You solved the problem using this technique. Why didn’t you choose this other technique? Why did you choose this one? How would you do it better? What if we sat down and refactored?” That’s one really good way to really get the heart of why are they making the decisions they’ve made? Not just did they make this choice because they didn’t know, or are ignorant, or did they make this choice because they had a certain belief about what the requirements of a given project were? That’s one way to do it.

    Other ways you can be finding out more about potential employees … I’m a really big fan of asking the employee to explain something to me, or teach something to me. In the past we’ve done this with simply just saying, “You can teach me anything, something that I don’t know, and preferably is non-technical.” How well do they communicate about something that they’re a local expert in but they’re intended audience is not? Could they then go off and go and learn a new framework, or go have a meeting with, perhaps, a stakeholder, or a client, and come back and explain what the actual requirements are to me, to distill down what I need to know and communicate that well? Communication is such a big part of what we do in this job, and so testing for that essential skill in a really clear and explicit way can be really useful and get you a really good signal about who that candidate is and how they’re going to fit into your organization.

    “We don’t do a really good job of hiring with intent”

    After the Interview – Making the Hiring Decision

    After the interview, what are key things that employers should be doing?

    I think it’s really important that we don’t just say, “We’re going to get back to you,” but to say, “We will get back to you by Thursday, end of day.” Then, if you can’t make your decision within those three or four days, communicating that to the candidate so they have expectations that you can meet, because it’s not just good for the candidate, it’s good for you as a company to have that discipline, because you want people to, whether you hire someone or not, you want them leaving the interview process regretful that they didn’t get hired, not resentful that they didn’t get hired. Being professional and upfront and just friendly and encouraging about the entire process is great.

    I try always to make sure that, if we can’t hire somebody for whatever reason, we make sure that we give them constructive advice or feedback afterwards, or at least make that available. If you did like somebody, if it came down to either Joe or Mary, and you hire one or the other, keep that person on file, and follow up with them in a few months to see how are they doing, what’s going on? “Hey, we have an open position, would you like to re-apply, or would you like us to consider you for that?” That gets into part of how you keep metrics on things as well, because if you didn’t hire somebody, figure out why you didn’t hire them and then follow up and see, are they actually doing that work, and did we hire the … Not necessarily the wrong person, but did our process let us down? If you assume that somebody didn’t know anything about, say, SQL, and now they’ve gone on to work on a SQL-heavy project, for example, what in our process missed that step?

    “It’s really hard to look at who you hire and decide that you have a good or bad process. But you can look at who you don’t hire.”

    Great, so we talked about having a plan as part of the hiring process, what’s a good process to follow to make a hiring decision?

    When you split up the interview topics, the questions you’re going to ask, and you’re going to consistently ask all of your candidates, it feels a little bit like reading a script, but it really lets you compare apples to apples as much as possible. Once you’re done with your little section of the interview, you should immediately go back to your desk and not get back to work but write down what your impressions were. What were the pros and cons, the bullet points, and find something good about the candidate and something not-so-good about the candidate, something that you with they did have. Doing that in that moment and passing that back to a central person so as not to … Don’t pass it back to a group, pass it back to a central person, whether that be an HR, or the hiring manager, to collect that, so you’re not coloring the impressions of other people.

    When you get back into that room with everybody else, whether it’s virtual or real, to really discuss your opinions, you’ve got your opinions of the moment and you can’t be swayed by the impressions of somebody else. For example, if you were supposed to interview them about JavaScript, and the senior JavaScript person, who’s got twenty years of experience in JavaScript, just really did not like that person, how would that color your opinion if you had to give your opinion in that moment? If you wrote it down previously, no, this person really is good at JavaScript, then you’ve captured that honestly and you can really give honest feedback about what that person’s qualities are and what their strengths are without being colored by other people in that discussion.

    Measuring and Improving Your Hiring

    You hinted at this earlier, but a key part of your approach to hiring is measuring the process to improve it. How could we go about measuring the effectiveness of our hiring?

    It’s very seldom that we ever hire anybody bad. When you hear horror stories about hiring, it’s always somebody else’s team that hired that one jerk, or that one idiot, so it’s really hard to quantify, because now we know that person, and we’ve worked with them, and we understand their strengths and their weaknesses. It’s really hard to look at who you hire and decide that you have a good or bad process. You can look at who you don’t hire. You can look at that in terms of what were the false negatives? Did we bounce this person out of the process for a specific reason and then it turns out that that reason wasn’t good based on where they ended up going to work?

    It’s really easy to LinkedIn stalk people, and peak into their GitHub profiles if they’re doing that sort of work, to see what they’re doing a few months later. It can be really useful to, four, or five, six months down the road, go back and look at the candidates that you passed over and see what they’re doing to understand, if you keep records of the questions that you ask, and the reasons why you maybe didn’t hire somebody, to see if those reasons are still valid.

    Other metrics that I think are really, really important to an organization are understanding what your pipeline for candidates consists of. At each step, you have a certain amount of leakage, because people just simply don’t make it through the process or they abandon the process, they disappear. How many people are you losing at each step, and is there one step that you’re losing a lot of people at? Maybe you need to refine that step, remove it, or move it earlier or later in the process based on what your organizational needs are. I think it’s also important to look at who you’re losing as well. Are you losing junior developers at a step that you really don’t want to be losing them at? Are you losing more diverse candidates? Are more women abandoning your process at a certain step than men are, and understanding, or questioning at least, your process to see, is that a problem? Can we fix it? How do we fix it?

    “You should immediately go back to your desk, and not get back to work, but write down what your impressions were”

    Common Developer Hiring Mistakes

    What are some common mistakes you see companies making when hiring developers?

    Some of the more common mistakes are hiring from our friend networks. I think that the friend network is such an important part of how we get jobs, but it also tends to reinforce our monocultures a little bit. We tend to be friends with people who are mostly like us, and so those are the people that we’re going to be recommending, and so those are the ones that get hired more often. When I was mentioning earlier how the team is an ecosystem, it’s important to have some diversity there, and not just the diversity we talk about in terms of gender or ethnicity or race, but age, class, looking at people’s technical backgrounds, do they come out of CS programs versus being self taught or a boot camp?

    Industry backgrounds, did they work in, perhaps, consumer electronics testing before they became an SDET at Microsoft? Were they at startups versus large enterprise companies, or somewhere in between? All those pieces of diversity are going to be influential and improve the health of the ecosystem of your team, and so those friend networks are important for getting candidates in the door, but understanding that that sometimes is going to lead to a certain amount of self-selection for candidates.

    You have to, like in soccer, they say, “Run to where the ball will be, rather than where the ball is.” If you have those early conversations about who you need to hire, and what you want to look for, what sort of energy and person do you want to add to your team, to influence it into a good direction? And then go to those people, find them, whether it be through meet ups, or user groups, or extending your extended network, not just your immediate friend network.

    Are there any other resources you can recommend for those looking to improve how they hire developers?

    Looking at the different boot camps you’re doing, and how they’re talking to their students, as well as to their sponsoring companies, or the companies that are hiring. I’m a really big proponent of hiring more junior developers, because no one is ever going to know our exact technology stack and our exact way of working, we always have to teach people, so looking at what those boot camps are doing, and how they’re talking about the industry, because they’re trying to set people up for success over the next five years. There’s a lot of wisdom. They’re spending a lot time to gather wisdom that they can relate to us about who we should be hiring over the next five years, and what skills we should think are important.

    Finally, I tell everybody this, go take a relationship skills class. Although they’re sold as being aimed at couples, a lot of that is really about listening to other people and understanding what their concerns are. Once you can start to build those sorts of skills for understanding the perspectives of other people, just generally improves everything about your hiring process, and your team, and how you work with each other.

    Kerri, thank you so much for joining us today.

    I’m really excited about this topic. I’m glad to see more and more people talking about it. There’s no one size fits all solution. We all face some really unique problems, but there are some commonalities.

    by Gareth Wilson at September 17, 2015 10:34 AM

    Lambda the Ultimate

    Ancient use of generators

    Guido van Rossum reminisces a bit about early discussions of generators in the Python community (read the other messages in the thread as well). I think we talked about the articles he mentions way back when. Earlier still, and beyond the discussion by Guido here, was Icon, a clever little language that I have a soft spot for. i don't think we ever fully assessed its influence on Python and other languages.

    September 17, 2015 05:58 AM

    Portable Efficient Assembly Code-generation in High-level Python

    PeachPy is a Python framework for writing high-performance assembly kernels.

    PeachPy aims to simplify writing optimized assembly kernels while preserving all optimization opportunities of traditional assembly.

    You can use the same code to generate assembly for Windows, Unix, and Golang assembly. The library handles the various ABIs automatically. I haven't seen this cool project before.

    Among the cool features is the ability to invoke the generated assembly as regular Python functions. Nice.

    September 17, 2015 12:53 AM

    September 16, 2015

    Mark Bernstein


    Here’s another part of what I’ve been working on: an approach to painterly hypertext. I want to suggest that it would be interesting to let go of some details of the way scenes are rendered in fiction, much as Impressionism sought to let go of some details of the way scenes are rendered in painting.

    Let me tell you about a party.

    Lady Daphne Laplace surveys her morning room, populated this afternoon by many of the guests she’d invited to this August’s party at Brecon Park. Outside, the splendid African sun shines down on her splendid green lawn, turning her elder daughter Mary that splendid shade of nutty brown she gets each summer. Mary herself has invited a lovely group of young people, all of whom will be heading up to Hill Academy in a few weeks for their final year before University. Mary is not to be head girl, as Lady Daphne had been in her day (Orie was a prefect at Marlton but no husband is perfect) but Mary has taken the blow well, and the headmaster’s surprising choice – an indigent but charmingly spiky young lady named Polly Xena whom Mary has invited and to whom Daphne has assigned her most patient and tactful maid – seems to be a acclimating well.

    On the whole, Lady Laplace thinks this year’s party is doomed. It is not her fault. Last year’s party was very nice, the year before was terrific, and next year, perhaps things will be easier. Right now, everyone is on edge.

    A big part of the problem is that the young people are having a very good time indeed, and their parents don’t quite know what to make of that. From her Head Girl days, Daphne has always been expert at the real mystery of house parties: who is fucking whom, and why. It’s all very well to understand that the kids are grown up now, and most of them are gorgeous, but it’s still very odd. The Hunters both seem especially edgy – Amy’s a dear, though underneath she’s every inch as middle-class as her parents – and poor old Marlow Randolph seems terribly preoccupied even though his girl Cassie (who has been very odd ever since her mother, poor Heshie, died) appears to be sleeping alone. Mary’s given up her friend Mason West – as prefect he belongs with the new head girl if she’ll have him – and Mary is being a sport about it. Daphne suspects that she’s sporting with Jacob Demarr, who is gorgeous and charming and captain of the ball team, though his father is just an administrator of one of the Senneterre’s estates. Daphne reminds herself to have a talk with Mary about the perils of sex with the middle classes.

    The political climate isn’t ideal for a party, either. Orie’s been Minister of Culture for more than two years now and has been having a ball, but no government lasts forever and Daphne can see that they’re all nervous about the coming session. They always get like this, afraid that if once they lose they’ll be cast out forever. Minister of Culture is nice, yes, but it’s not everything, and one can’t move up until you’ve moved out for a bit. She’s tempted to ask Marlow to have a word with Orie, but Marlow himself has been more thoroughly out of sorts than she’s seen him in ages – far worse than when his own Ministry was tottering. Lord Randolph keeps going on about the rebels in the hills.

    There have always been rebels in the hills: that’s what hills are for, and the rebels give the Army something to do.

    There are the usual tensions, of course. The Hunters have never liked the Wests, perhaps because in their wild youth they liked each other rather more than was prudent. Their kids seem to like each other fine; that’s something, anyway. The Cormyns don’t get along – they never have – and Aspen Cormyn is constantly asking advice about anything that comes into her head from anyone who happens to have a title or two in the family. Poor Grenton, the butler here at Brecon, is overstrained by these parties and never hires enough help: Daphne is sure that she’s never laid eyes on the fellow passing those cheese pastries (remember to praise Mrs. Benson), and even for an informal Saturday afternoon, serving in a chef’s jacket and army boots seems a bit much. She won’t mention that to Grenton or to Jackson, the housekeeper; they notice everything, anyway. No doubt there is some unprecedented crisis in the kitchen.

    OK: I told you about the scene. But maybe that’s not the best idea. Perhaps we should show this stuff, carry some of it in dialogue.

    Where do we begin? With poor Lord Randolph, worrying about the rebels and telling any man who will listen what he’d be doing if he were still Prime Minister? With Aspen Cormyn pestering Vic Senneterre for advice on managing maids and daughters – subjects about which Vic has seldom spared a thought? With poor butler Grenton, dragooning some messenger sent to find “Colonel Pasternak,” who is not here and who is not expected, into serving as an extra footman because, if the man must be underfoot, he might at least be of use? Or outside with the kids as they joke and play games and figure out their sleeping arrangements?

    Where do we begin? Who speaks first?

    The received wisdom holds that this question has an answer, that if we write and rewrite, edit and revise, eventually we will arrive at the one true dialogue, the dialogue the rings true. Or, if we can’t find the right answer, we’re just not good enough.

    But perhaps it doesn’t matter. They’re all going to get a chance to talk, we’ll meet them all eventually. Perhaps one sequence is just as good as another. We can just write it one way, and then perhaps convince ourselves and the world that this is the one true way.

    My very bad sketch of a sidewalk scene in Provincetown.

    Sculptural hypertext could let us write this dialogue in all the ways it might work. We write some speeches and some exchanges, perhaps some descriptive passages as well. We add just the constraints needed to keep things coherent: the kids are outdoors, the adults are not, and so kids talk to kids and the grownups talk to each other. Perhaps we add some constraints to keep the discussion on topic, but maybe we don’t; maybe it’s that kind of party.

    What the camera saw. More information, more accuracy, but also less.

    Instead of trying to get the dialogue sequence right, we’re accepting any sequence that isn’t wrong. Moving from the morning room to the lawn without transition is wrong, so we won’t do that. Letting one character drone on without interruption is wrong; we won’t do that, either. But starting with Lady Daphne is fine, and starting with Lord Randolph would be fine, too, as far as I can see: we’ll try it all and see what works and what doesn’t.

    We could start outdoors with the kids, or below stairs where the cook and the butler are coping with the current catastrophe, or we could start with the irritating Aspen Cormyn or with our patient and witty hostess. Let things play out. If we notice a bad combination, we’ll prohibit it. If we need more ways to move indoors and out, we’ll write them.

    In painting, it’s not always necessary to specify everything. Perhaps it’s not necessary in hypertext narrative, either.

    September 16, 2015 09:52 PM


    This short eboo

    k by Micah Joel opens on Matheson Station, orbiting high above an earth where Wall Street now trades probability flows. There, a recently-deceased industrial titan is just entering the next life. “He wasn’t sure what to expect. The wood cannot see the ashes. Above him, a tiny porthole ringed the blackness of space. ‘Oh, wow,’ he said.”

    Steve Jobs is back, and he’s got to put together a product team. He’s got Ada Lovelace to do software. He’s got Bill Shockley to do hardware. He’s got a deadline, too, because the world economy is going to collapse. Good fun is had in this series opener: Jobs is superbly drawn and Shockley is pretty good, too. Ada is, at this point at least, a bit of a problem: just how is a Victorian countess supposed to relate to her manager when her manager is Steve Jobs? Remember, Ada is old enough to be Violet Crawley’s grandmother, and on the whole it might have been easier to reach for Admiral Hopper or NASA’s Margaret Hamilton. Still, the opportunity to have Byron’s daughter on a space station must be hard to resist.

    Currently free at Amazon.

    September 16, 2015 02:46 PM

    Dave Winer

    A tech conference with perspective

    I want to have a tech conference where everyone on stage is over 50. People who accomplished something when they were in their 20s and 30s, talking about what they've seen in their lives.

    It's time to start this process because in tech we throw out so much experience, it's why progress is so slow. Also because these people are approaching retirement, and we've already lost a few of our heroes, people who I would love to have interviewed.

    I'd look for people who were not the widely-heralded heroes of their day, esp people who didn't make billions of dollars. People whose work really added up to a lifetime of achievement.

    This would be a non-commercial conference, and recurring, and very low or no cost. A university would be ideal. I've done similar conferences at Harvard and Stanford. Both schools have excellent facilities for this kind of thing.

    It would be webcast of course, available for perpetuity on YouTube and wherever else people might like to put it.

    We'd encourage young technologists to participate as well, in meaningful ways. To create cross-pollination of ideas, so we don't lose so much of the experience we fought so hard for.

    What would be in it for a university? Having these ideas flow through your campus would give you a public connection with accomplishment in technology, which means a lot more than teaching your kids how to "code." Here we would teach how very successful people thought about technology, and turned those ideas into results on a societal level. At the time, people thought techies were weird, but now we know they were actually visionaries.

    PS: This post began as a Facebook thread.

    September 16, 2015 01:40 PM

    September 15, 2015

    Mark Bernstein

    Why We Link

    It is Friday night dinner again, and the Business Professor asks straight out why anyone would want to bother with hypertext narrative. I handle this question badly in social settings. I understand the underlying family traumas; sorry, Freud, but knowing doesn’t help that much.

    It’s time for a fresh tilt at that windmill; here are some thoughts for an introduction to Getting Started With Hypertext Narrative.

    Comments and improvements welcome: Email me.

    The future of serious writing lies on the computer screen. That future, indeed, is already upon us. We compose on the computers, we read our mail on computers, and increasingly we read our novels and textbooks on computers.

    Today, most of what we read is written as if it would be read on paper. We no longer write on paper and we no longer read on paper, yet our computers, our tablets, and our ebook readers simulate paper. Indeed, they go to great lengths to copy the inconveniences of paper, the awkwardness of turning the page, or the arbitrary limits it imposes on our margin notes. Most significantly, we still write books as if they were to be mass-produced by factories, one page forever following another in a fixed and inalterable sequence, one size fits all. We don’t use links much, and we don’t use them wisely.

    Hypertext is, simply, writing that uses links; hypertext narrative is telling stories (and histories) that use links. Links let us write in new ways for new audiences. Links should let us tell stories that were once difficult to tell. Though links can sometimes let us alter the story, changing “what happens” in different readings, we more frequently will use links to change the plot, changing “how we explain what happened.”

    Why does this matter?

    • The audience is ever more diverse, and the fragility of our planet makes reaching our audience ever more critical. We cannot assume that every reader has attended the same schools, read the same books, or will ask the same questions. The work must be ready to provide answers to each reader.
    • The importance of writing truly for a diverse audience is clear and pressing in nonfiction, especially when writing to influence public policy for an audience of legislators that ranges from experts to cultivators of ignorance. Fiction, which addresses emotional truth, is not less important.
    • Each reader brings to their reading distinct constraints and attitudes. Today, your audience is calm, attentive, and critical. Tomorrow, your audience is agitated, anxious, and eager for distraction. The work must be prepared to satisfy both audiences – especially as they might be the same person. Homer understood this.
    • A central lesson of modernism was that artists should exercise tight control in matters that matter, but may relax their grip elsewhere and let the material or the brushstroke show. Links explore a looser approach to narrative.
    • Serious reading has always encompassed rereading. Hypertext requires rereading, and makes manifest the way changes in the reader change the work.

    These notes explore some lessons we have learned from the first twenty-five years of hypertext narrative.

    September 15, 2015 05:18 PM

    Tim Ferriss



    The iboga plant (Photo: Marco Schmidt)


    “Be curious.” – Dr. Dan Engle

    Martin Polanco (@Martin_Polanco7), M.D., is the founder and program director of Crossroads Treatment Center, based in Rosarito, Mexico. Crossroads specializes in helping patients conquer powerful addictions (heroin, cocaine, etc.) by using the African hallucinogen ibogaine and 5-MeO-DMT, also referred to as “the God molecule.” Martin’s areas of expertise also include addiction medicine and therapeutic neurotechnologies.

    Dan Engle (@drdanengle), M.D., is a psychiatrist and neurologist, who combines functional medicine with integrative psychiatry to enhance regenerative health and peak performance. His prior and relevant experience includes traumatic brain injury (TBI) and working in the Peruvian jungle with plant medicines such as ayahuasca.

    In this episode, we step outside the lines of traditional medicine and discuss impulse control, introspection, and self-awareness through the use of powerful psychedelic and hallucinogenic agents like iboga, ibogaine, and 5-MeO-DMT.

    We also discuss flotation tanks, which can simulate or even replicate many of the benefits that can result from the use of psychedelic and psychotropic agents. So you don’t have to be willing to experiment with these drugs to receive something valuable from this episode.

    If you are interested in optimizing your psychological performance, emotional control, and exploring alternative medicine, then this episode is for you. Enjoy!


    Want to hear more from a world-class scientist? Check out my conversations with James Fadiman, Ph.D. In the below episode, we discuss LSD and micro-dosing for creative problem solving, anxiety reduction, and more (stream below or right-click here to download):

    This podcast is brought to you by TrunkClub. I hate shopping with a passion. And honestly I’m not good at it, which means I end up looking like I’m colorblind or homeless. Enter TrunkClub, which provides you with your own personal stylist and makes it easier than ever to shop for clothes that look great on your body.

    Just go to and answer a few questions, and then you’ll be sent a trunk full of awesome clothes. They base this on your sizes, preferences, etc. The trunk is then delivered free of charge both ways, so you only pay for clothes that you keep. If you keep none, it costs you nothing. To get started, check it out at

    This podcast is also brought to you by Vimeo Pro, which is the ideal video hosting platform for entrepreneurs. In fact, a bunch of my start-ups are already using Vimeo Pro. WealthFront uses it to explain how WealthFront works. TaskRabbit uses it to tell the company’s story. There are many other names who you would recognize among their customers (AirBnB, Etsy, etc.) Why do they use it? Vimeo Pro provides enterprise level video hosting for a fraction of the usual cost. Features include:

    • Gorgeous high-quality playback with no ads
    • Up to 20 GB of video storage every week
    • Unlimited plays and views
    • A fully customizable video player, which can include your company logo, custom outro, and more

    You get all this for just $199 per year (that’s only $17 per/mo.). There are no complicated bandwidth calculations or hidden fees. Try it risk-free for 30 days. Just go to to check it out. If you like it, you can use the promo code “Tim” to get 25% off. This is a special discount just for you guys.

    QUESTION(S) OF THE DAY: What other methods of alternative medicine and therapy are you interested in learning more about? Please let me know in the comments.

    Scroll below for links and show notes…


    Selected Links from the Episode

    • More background and history about the psychedelic iboga.
    • More background and history about the psychedelic ibogaine.
    • More background and history about the psychedelic ayahuasca.
    • Commonly prescribed benzodiazepines:

    klonopin | xanax |  valium

    • More about traditional ayahuasca.
    • Quality resources for people who want to learn more about psychedelic drugs and their uses:


    Twitter | Crossroads Ibogaine Center 

    • Connect with Dr. Dan Engle:

    Twitter | Temple of the Way of Light Ayahuasca Center in Peru | Onnit Labs

    Show Notes

    • Dr. Dan Engle & Dr. Martin Polanco share their background experiences that led them to be working in the field of psychedelics [08:56]
    • Martin’s first experiences with psychedelics and Ibogaine [11:01]
    • The primary differences between Ayahuasca and Ibogaine [14:20]
    • Dan explains what happens when you experiment with Ayahuasca, and the most common characteristics during the experience [19:45]
    • What most people feel during the start of an Iboga experience, and the common characteristics reported after use [23:15]
    • The reasons some people don’t have visions while taking Ibogaine [26:34]
    • The commonly prescribed benzodiazepines that don’t allow people to have visions taking Ibogaine [27:44]
    • What happens to your central nervous system during an ibogaine experience [29:58]
    • How should people view the use of psychedelics? [36:24]
    • The scarier aspects of the iboga experiences, and how to prepare for them? [43:06]
    • Martin explains how iboga works on a chemical level and what types of addictions it can help [46:15]
    • The resources people can use to educate themselves about psychedelic drugs and current research [48:34]
    • The background of 5-MeO-DMT and how it is incorporated into his program [54:48]
    • Different uses for ayahuasca and 5-MeO-DMT [1:00:26]
    • The relative importance of plant medicine and non-traditional treatments [1:08:36]
    • How often should psychedelic treatments be used for the maximum effect [1:11:11]
    • How people can use psychedelics to help with traumatic brain injuries [1:16:30]
    • The first person who comes to mind when Dan and Martin think of the word successful [1:26:39]
    • The books Dan and Martin have given the most as gifts [1:28:45]
    • The quote or statement Dan would have on a billboard [1:31:01]
    • The advice Dan and Martin would give their 30-year-old selves [1:31:49]
    • Who should and shouldn’t try ibogaine [1:34:15]
    • Flotation theory and other entry points for psychedelic experiences [1:35:28]
    • The single ask or recommendation Dan and Martin have for The 4-Hour Workweek audience [1:44:50]

    People Mentioned

    by Tim Ferriss at September 15, 2015 04:38 AM

    September 14, 2015

    Giles Bowkett

    How I Accidentally Falsified The History Of Ruby On Rails

    Once upon a time, I decided to write a book:

    I'd been building Rails apps for seven years at that point. The book did well. I talked about the many insane and poorly-conceived quirks in Rails, and the reasons Rails succeeded despite those quirks. Newbie Rails devs liked it because they wanted to avoid the framework's pitfalls, and understand the real mechanisms behind the so-called "magic." People with deeper experience and perspective liked it because Rails embodies a fascinating balance of inane bullshit and inspired brilliance, and it's a challenge to uncover the unifying themes, or to understand how these two polar opposites combine.

    But I left out something important.

    Who do you think is the second most important person in the history of Rails? Obviously, the first is its creator, David Heinemeier Hansson. And there's a long tail of open source contributors and bloggers who did the important work of developing and documenting Rails. But who would be second in line?

    Would the second most important person in the history of Rails be Yehuda Katz, the architect of the Rails/Merb merge? No. Mr. Katz's work would never have mattered anyway unless Rails had already gotten off the ground. So it's someone who came along earlier. Someone who Mr. Hansson, when blogging, frequently mentioned and quoted. That's a hint. But it wasn't the founder of 37Signals (now Basecamp), Jason Fried.

    Here's another hint, to make it easy. I'll quote an excerpt from my book which describes the effect this person had on Rails:
    Rails "luxuries" are in actuality not luxuries at all, but massive, almost godly productivity boosts. Seriously. The code is a mess in places, and even some of the core ideas are bizarrely twisted, but the design is just genius, especially in terms of the priorities it establishes...

    This, I think, is the most important thing you can learn from Rails: Make Steve Jobs your role model when you design your APIs, and the world will be your oyster.
    I'm not going to say Steve Jobs was the second most important person in the history of Rails, because it wasn't actually Steve Jobs who inspired this stuff.

    Kathy Sierra inspired this stuff, and not only that, but I knew this at the time, because when Rails first came out, DHH often quoted Sierra and linked to her blog all the time. I had a habit of diving deeper into the stuff DHH talked about at the time — for instance, the fantastic book Code Generation In Action — and so I read Sierra's magnificent blog of that era avidly. Every word was genius.

    And every word was the specific type of genius I talked about in my own book, many years later. All of the underappreciated "luxuries" of Rails development — Rake tasks, migrations, ActiveSupport, the design of ActiveRecord's API, and even scaffolding (which was briefly an awesome thing, in the very early days, when Rails was brand spanking new) — stem from Kathy Sierra's gospel of ease-of-use and user empowerment.

    These techniques live on beyond Rails, in countless other frameworks and libraries, as a testament to their usefulness. They made developing Rails apps fun and exciting, and they made every Rails developer quicker, more fluid, and more capable than most had ever been in their lives. The result: staggering popularity, feverish excitement, and an overabundance of eager evangelists. (A few people would claim they'd been equally productive in Scheme or Smalltalk, but even they were still quite excited about Rails.)

    Ms. Sierra's writing predicted that if you focus on making your users incredibly effective, and you focus on getting them from newbie status to productive status quickly and gracefully, you'll produce that popularity, that excitement, and those evangelists. And Mr. Hansson obviously read her work, because he blogged about how great it was. And Ms. Sierra's design philosophy did for Rails exactly what she said it would.

    I noticed all this recently, because I was reading Kathy Sierra's new book. It's excellent, and it's the missing link in understanding Rails. I had somehow forgotten about this, and in the intervening years, I'd written a book of my own where I reduced all of Kathy Sierra's brilliant insights to a brief reference to Steve Jobs instead.

    There's a word for that. It's called erasure.

    Here's a simple example: the current issue of Future Music, a print magazine about making electronic music, features a woman named Emika. She has a degree in music tech and did sound design for two of the best manufacturers of music gear. The interviewer asks her if she feels it's unusual and non-traditional for her to be an electronic music producer, because she's a woman. In fact, one of the greatest pioneers of electronic music was a woman named Delia Derbyshire. But the modern producer's unaware of her historical predecessor, and so is the interviewer. And this is not unusual; the achievements of women often vanish beneath a sea of understatement and undeserved dismissal. Emika has plenty of contemporaries; the Future Music story doesn't mention them.

    I did the same thing to Kathy Sierra. It's important to recognize that, at the time I did so, I would have called myself a feminist in general, and a fan of Ms. Sierra in particular. I had bought a bunch of her Head First books, and based my entire presentation style on them, to wild acclaim. But I not only failed to tell people where I got the style, I honestly forgot, and went on to write blog posts about my presentation style, and to sell a video explaining how it works (which, again, met with wild acclaim, and paid my bills for a while).

    This is something which was hard for me to understand, and I think it's hard for a lot of other guys as well. It's not just that I'm guilty of a sexist revisionist history; I'm also guilty of a sexist forgetting. The guilt is accidental. But it's still guilt. What I did was not the right thing.

    I probably got that understanding from a woman too, and I wish I could remember for sure.

    Anyway, Ms. Sierra's new book is fantastic, and you should read it. And at some point, when I get the time, I hope to revise my own.

    by Giles Bowkett ( at September 14, 2015 07:57 PM

    Dave Winer

    A flash conference on web ads?

    What is a flash conference?

    I've long felt that we need to be able to convene conferences that are timely, when news is happening and change is imminent. So many conferences are stuffy affairs with well-rehearsed positions, they're not as interesting as conferences on topics that are fresh, where the events have just happened or are still happening. When things are coming to a head, it's a good time to have a flash conference.

    It's the kind of thing a university can do well. We did these sometimes when I was at Berkman Center a little over ten years ago. You're starting to see permanent installations around convention centers, evolving toward what I called HyperCamp, a 365-day-a-year conference for bloggers and press people, and people who make news. That's also a context where flash conferences make sense.

    Web ads coming to a head

    You get a sense that things are about to change in a big way because finally the web advertising business has gone too far, users are doing something about it, as is tech.

    When Facebook says we need Instant Articles because mobile latency is such a huge impediment to flow, that's only half the story. The other half is omitted because it's such an uncomfortable topic -- web ads are making the web unusable.

    It would be great to have a 1/2 day series of discussions with people who have been thinking and writing about this stuff. I'd like to see Doc Searls moderate a panel with editorial people from sites with ridiculous advertising. How many editorial people run ad blockers on their own sites? Have you ever been interrupted by a video that starts playing in a tab you opened an hour ago? Did it interfere with something you were doing?

    Is the purpose of the web to pay your salary or does it have some greater mission? (The question should be asked with a certain amount of sarcasm.)

    September 14, 2015 01:56 PM

    John Udell

    Google falls behind the curve in collaboration

    Google's Web-based collaboration suite feels increasingly at odds with modern Web collaboration.

    Exhibit A: Page breaks in Google Docs. You can't get rid of them. Yes, you can trawl through forums and find an obscure workaround based on a browser extension. But there's no built-in off switch. Like a PDF file, a Google Doc yearns to be printed on 8.5-by-11 paper, although that is unlikely ever to happen.

    [ Get the most out of Google with InfoWorld's quick guide "25 tips and tricks for Google Drive power users." Download the PDF today! | Get a digest of the day's top tech stories in the InfoWorld Daily newsletter. ]

    Exhibit B: Images in Google Drive. One of the Slack integrations I've built reports stats for our service by pushing charts to Google Drive and posting messages with links to those charts into a Slack channel. Following those links often isn't frictionless, though; there always seems to be another permissions hoop to jump through.

    To read this article in full or to leave a comment, please click here

    by Jon Udell at September 14, 2015 10:00 AM

    September 13, 2015

    Mark Bernstein

    Old Software

    Moses Malone is dead.

    Dave Winer complains that we can’t run software from just 25 years ago.

    We can still play music written by people who lived in the 1700s. But for some reason we can't run software written 25 years ago. Technically, if we wanted to develop in a way that made this possible, we could. But each generation apparently believes there's not enough value in the software written by previous generations. Which probably has something to do with why so much know-how is lost every decade or so.

    Dave is insightful, intelligent, observant – and wrong.

    This summer, I wrote Storyspace again. The original Storyspace was written by Jay Bolter and Michael Joyce and John B. Smith in the mid-1980s, we ended up publishing it in 1991. It was written in Pascal. Not a line of the original remains in Storyspace 2 or Storyspace 2.5. Not a line of Storyspace 2 remains in the new Storyspace 3.

    Writing Storyspace 3 was easy. Almost all the heavy lifting involved gratuitously eliminating constraints in the old Storyspace that would be inconvenient or simply embarrassing to preserve. Storyspace used to have lots of rigid limits on the length of strings; the young Jay Bolter just didn’t bother with variable-length buffers. Storyspace used to use a file format optimized for rapid unpacking from incredibly slow disk storage, a format that was vulnerable to losing everything, without hope of recovery, if a single bit was written or read incorrectly. Replacing that with XML was a good idea, and added a day or two.

    “OK, Bernstein, if it was easy, where is it?” While I was polishing the brass, I figured out a way to extend the underlying formalism to encompass sculptural hypertexts, as well as the elements we know as “interactive fiction,” and to do so without changing the original Storyspace formalism and without setting a mode switch. Implementing that was fairly straightforward, as it turned out, but documenting it has been a a bear. Soon.”

    Do you have a HyperCard stack you really, really want to run. Come visit, and we’ll run it. Want to run it on your machine, which won’t run HyperCard? Send me the stack and a check, and I’ll write it for you.

    Why don’t we write software that will run 25 years from now without any effort or expense or bother?

    We don’t write software that way because Moses Malone is dead.

    Time’s winged fucking chariot is why we don’t write software that old way. We have things to do, there’s not enough time, and the old way we wrote software was clumsy and slow. It didn’t seem slow to us back then: we didn’t know better. Back then, Dave, you and I were writing English prose without using the letter “e”, and we were good at it – you were better, OK, but we were both pretty good. Sure, Turbo Pascal was dandy, and Think C was terrific, and Zmacs was a revelation. Give me Xcode and the STL and ruby any day, thanks.

    September 13, 2015 03:39 PM

    A Desert Drama

    In a book ripped from the headlines. a group of tourists – a recent Smith graduate and her aunt, a Wall Street attorney, a retired British Special Forces colonel, a Frenchman of means – are enjoying a package tour of the Nile when Moslem extremists swoop down, capture them, and threaten to behead any who do not embrace Islam. Published in 1897, originally as The Tragedy of the Korosko, and recommended tangentially in one of the Michael Dirda collections I’ve been enjoying lately this month. One sometimes wishes the characters had a little more space, and that we had a little more intimacy with them, and that they had a few more ideas and a lot less racism. Still, it’s a rollicking time.

    September 13, 2015 02:55 PM

    Dave Winer

    Why can't we run software that was written 25 years ago?

    I would like to write software that people can run 100 years from now. Clearly that's not going to happen.

    Ward Cunningham tells a story about how he wrote Hypercard apps for his kids as bedtime stories. He would love to be able to run that software today, share it with his kids and grandkids. But there's no way to run it. He says this is wrong. I agree, emphatically.

    We can still play music written by people who lived in the 1700s. You can visit buildings that were built 500 or more years ago, and use them the more or less way they were originally designed to be used. But for some reason we can't run software written 25 years ago. Technically, if we wanted to develop in a way that made this possible, we could. But each generation apparently believes there's not enough value in the software written by previous generations. Which probably has something to do with why so much know-how is lost every decade or so.

    This originated in a Facebook thread started by Doug Purdy.

    PS: Look at this thread about Turbo Pascal for an idea of how much interest there is in the idea of running software that was written not so long ago. When I posted the link, I had no idea the kind of response it would get. Turbo Pascal was wonderful. And they didn't invent new syntax. A very important concept.

    September 13, 2015 02:45 PM

    CitiBike progress

    CitiBike has made it up to 84th St and Columbus Ave.

    A picture named citibikemap.png

    Why don't they have a huge station in front of Zabar's?

    A picture of a slice of cheese cake.

    September 13, 2015 02:29 PM

    Decyphering Glyph

    Connecting To A Server On The Internet [Nightmare Difficulty]

    The Setup

    I recently switched internet service providers, from Comcast to WebPass. Comcast had been progressively upgrading our connection, and I honestly didn’t have any complaints, but WebPass is four times faster. Eight times faster, maybe? It’s so fast that I could demonstrate that my router hardware was the bottleneck and I needed to buy something physically capable of more bits per second. There’s gigabit Ethernet coming straight out of my wall, no modem required. So that’s exciting. The not-exciting part is that WebPass uses what is euphemistically called “carrier grade” NAT to deliver IPv4 service. This means I have no public IPv4 address at all.

    This is exactly the grim meathook future that I predicted over a decade ago.

    One interesting consequence of having no public IPv4 address is that I could no longer make inbound connections to my home network. When I’m roving around with my laptop, I like to be able to check in with my home servers. Plus, I’m like, a networking dude, or something, so I should know how this stuff works, and being able to connect to networks is a good first step to doing interesting things with them.

    The Gear

    I’m using OpenWrt (Chaos Calmer) firmware on my home router (although this also works on Barrier Breaker). If you configure its built-in IPv6 stuff naively, connecting to your home network is no problem at all! Every device on your network suddenly has its own public IP address on the Internet.

    The Problem

    In case it’s not clear: don’t do that. I can guarantee you that all of your computers and some things which aren’t obviously computers (game consoles, “smart” scales, various handheld devices, your “cloud” thermostat, probably your refrigerator, maybe some knives or guns that you didn’t know had internet access: anything that can connect to WiFi) are listening on a surprising array of ports, and every single one of them has some interesting security vulnerability which an attacker could potentially use to do bad stuff. You should of course keep your operating systems and device firmware updated to make sure you’ve always got the latest security patches, but even if you’re perfect at that, many devices simply don’t get updates. So the implicit firewall that NAT gave us is still important; except now we need it as an explicit firewall that actually blocks traffic, and not as an accident of the fact that devices don’t have their own externally-available addresses.

    The Requirements

    Given these parameters, the desired state of my router (and, I hope, some of yours) is:

    1. Explicitly deny all inbound IPv6 connections to all devices that aren’t expecting them, such as embedded devices and laptops.
    2. Explicitly allow all inbound IPv6 connections to specific devices and ports that are expecting them, like home servers.

    Casual Difficulty: Rejecting Incoming Traffic

    OpenWrt has a web interface, called “LuCI”, which has a nice firewall configuration application. You’ll want to use it to reject IPv6 inputs, like so:

    Reject IPv6 Inputs

    It also has a “port forwarding” interface, but forwarding a port is something that only really makes sense in an IPv4 NAT scenario. In an IPv6 scenario you don’t need to “forward” since you already have your own address. Accordingly, the interface populates the various IP address selectors with only your internal IPv4 addresses, and doesn’t work on IPv6 interfaces on the router.

    Now we get to the really tricky part: allowing inbound traffic to that known device.

    Normal Difficulty: Home Server Naming

    First, we need to be able to identify that device. Since residential IPv6 prefix allocations are generally temporary, you can’t rely on your IP address to stay the same forever. This means we need to have some kind of dynamic DNS that updates periodically.

    Personally, I have accomplished this with a little script using Apache libcloud that I have run in a crontab. The key part of that script is this command line, which works only on Linux:

    ip -o -d -6 addr show primary scope global br0

    that enumerates all globally-routable IPv6 addresses on a given interface (where the interface is br0 in that script, but may be something else on your computer; most likely eth0).

    In my crontab, I have something like this:

    @hourly ./.virtualenvs/libcloud/bin/python .../ \
        rackspace_us my.dns.user

    And I ran the script once manually to initialize the keyring entry with my API key in it.

    Note: I would strongly recommend creating a restricted user that only has access to DNS records for this, if you’re doing it on a general cloud provider like Rackspace or Amazon. On Rackspace, this can be accomplished by going to the “Account” menu at the top right, “User Management”, “Create User”, and selecting the “Custom” radio button in the “Product Access” section. Then, log in as that user, go to the “Account Settings”, and copy the API key.

    Nightmare Difficulty: ip6tables suffix matching

    Now we can access the address of from the public Internet, but it doesn’t do us much good; it’s still firewalled off. And since the prefix allocation changes regularly, we can’t simply open up a port in the firewall with a hard-coded address as you might in a regular data-center environment.

    However, we can use a quirk of IPv6 addressing to our advantage.

    In case you’re not already familiar, let me briefly explain the structure of IPv6 addresses. An IPv6 address is a 128-bit number. That is a really, really big number, which means a really, really big set of addresses; unlike IPv4, your ISP doesn’t need to jealously hoard them and hand them out sparingly, one at a time.

    One of the features of IPv6 is the ability to allocate your own individual addresses. When your provider gives you an IPv6 address, they give yo a so-called “prefix allocation”, which is the first half or so - 64 bits - of an address. Devices on your network may then generate their own addresses that begin with those 64 bits.

    Devices on your network then decide on their addresses in one of two ways:

    1. If they’re making an outgoing connection, they choose a random 64-bit number and use that as the suffix; a so-called “temporary” address.
    2. If they’re listening for incoming connections, they generate a 64-bit number based on their Ethernet card’s MAC address; a so-called “primary” address.

    It is this primary address that the above ip command will print out. (If you see two addresses, and one starts with an f, it’s the other one; this post is already long enough without explaining the significance of that other address.)

    Within iptables, the --source and --destination (or -s and -d) matching options are documented as having the syntax “address[/mask]”. The “mask” there is further documented as “... either an ... network mask (for iptables) or a plain number, specifying the number of 1’s at the left side of the network mask.” Normally, sources and destinations are matching network prefixes, because that’s what you would normally want to allow or deny traffic from: a prefix representing a network which in turn represents a specific group of computers. But, given that the IPv6 address for an interface on a given Ethernet card with a given MAC address will have a stable suffix derived from that MAC address, and a prefix who changes based on your current (dynamic) prefix allocation, we can write an ip6tables rule to allow connections based on the suffix by constructing an address that has a mask matching the last 64 bits of the address.

    So, let’s say your ip command, above, output an address like 2001:1111:2222:3333:1234:5678:abcd:ef01. This means the stable part of your address is that trailing 1234:5678:abcd:ef01. And that means we want iptables to allow inbound traffic to a specific port. To allow incoming HTTPS on port 443, in the OpenWRT control panel, go to Network → Firewall, click the “Custom Rules” tab, and input a line something like this:

    ip6tables -A forwarding_rule \
        -d ::1234:5678:abcd:ef01/::ffff:ffff:ffff:ffff \
        -p tcp -m tcp \
        --dport 443 \
        -m comment --comment "Inbound-HTTPS" \
        -o br-lan -j ACCEPT

    This says that we are going to append to the forwarding_rule chain (a chain specific to OpenWRT), a rule matching packets whose destination is our suffix-matching mask with the suffix of the server we want to forward to, for the TCP protocol using the tcp matcher, whose destination port is 443, giving it a comment of “Inbound-HTTPS” so it’s identifiable when we’re looking at the firewall later, sending it out the br-lan interface (again, somewhat specific to OpenWRT), and jumping to the ACCEPT target, because we should let this through.

    Game Over

    Congratulations! You can now connect to a server on a port, in the wonderful world of tomorrow. I hope you look forward as much as I do to the day when this blog post will be totally irrelevant, and all home routers will simply come with a little UI that lets you connect a little picture of a device to a little picture of a cloud representing the internet, and maybe type a port number in.

    by Glyph at September 13, 2015 06:30 AM

    September 12, 2015

    Mark Bernstein

    Wikipedia Update

    At Wikipedia, Gamergate’s been demanding greater attention to its claims that Gamergate is concerned with ethics, demanding that if Wikipedia is to dismiss the ethics claims, it must first explain in detail how Gamergate views itself as a crusade against corruption.

    I respond:

    My local diner might call its fried chicken "world famous", but Wikipedia would want confirmation of that fame in the consensus of reliable sources. Here, the consensus of reliable sources holds that the chicken is not famous, or is only famous because people say it’s famous chicken when it's not particularly famous and probably also not chicken.

    Actually, it’s all about the chicken.

    Since our previous update, Gamergate’s launched two formal efforts to boot your humble correspondent for making funny faces, or perhaps for writing things that people sometimes read. A major plank in the latest case against me was that I intentionally sought a treaty or truce from Gamergate’s most voluble spokesman, which was thought shockingly uncivil. The fact that I include contact information in my business emails is cited on Wikipedia as evidence that I am gay and have established a liaison with certain administrators: I kid you not.

    Back in the real world of Wikipedia, an extortion scam was recently uncovered in which a network of hundreds of sock puppet accounts colluded to demand monthly fees from small businesses to protect their pages from being deleted. This has led to lots of attention to petty fraud in Wikipedia, which I suspect is a snare: the real problem is not the extortion of $30/month from small businesses, it’s the $30,000/mo retainers from big businesses and political campaigns.

    September 12, 2015 04:05 PM

    Everybody Rise

    A wicked satire of social media marketing, as a Evelyn Beegan, a young and underqualified ex-preppie, is hired as director of recruitment by a Facebook clone for the ultra-elite, “People Like Us.” This is in many ways this is an odd and antiquated book, centered on a marriage plot and fixated on Old Money in New York; the book knows it – one character excoriates Evelyn for chasing a social scene out of Edith Wharton – but doesn’t know what to do with its own knowledge. Evelyn desperately wants to shed her upper-middle-class Baltimore background to be accepted by people who have inherited Camps in the Adirondacks and Cottages at Newport, to run with the bright young things who are the children of the Ladies Who Lunch. In that frantic pursuit, she loses herself, becomes a monster, and then (perhaps) finds a future of sorts.

    It’s 2008, the bubble is about to burst, and those bright young things are all in banks and hedge funds: change is in the air but nothing really changes.

    September 12, 2015 03:30 PM

    With the Night Mail: Two Yarns About the Aerial Board of Control

    Kipling’s two science fiction stories, from 1905 and 1912, concerning the year 2000 and the development of a planetary government out of the necessity for an international air traffic control system. The first, “With The Night Mail,” is brilliant fun: a lowbrow magazine feature in which our intrepid reporter journeys with the new dirigible express from London to Quebec, interviewing captains and engineers, experiencing terrifying air storms, witnessing arcane engineering. The story wraps up with all sorts of terrific fake ads from a hobby magazine of the far future – 2000 AD! The later “Easy as A. B. C.” is a story of world-government as seen by a crank, a vision of the future where the leading problem is Kipling’s personal headache: people keep bothering him. The afterword by Bruce Sterling is nearly worth the price of admission.

    September 12, 2015 03:09 PM

    Decyphering Glyph

    Software You Can Use

    Python has a big problem. While it’s easy and fun to produce software in Python, it’s hard to produce software that people - especially laypeople who are not professional software developers - can use.

    In the modern software ecosystem, there are a few places that you might want to use a program:

    1. On a server, by loading a web page.
    2. On a web page, by running it in your browser.
    3. As a command-line tool, on Mac,
    4. ... Windows,
    5. ... or Linux.
    6. As a desktop application, on Mac,
    7. ... Windows,
    8. ... or Linux.
    9. As a mobile application, on iOS,
    10. ... or Android,
    11. ... Or Windows Phone. (Just kidding.)

    Out of these 10 scenarios, Python currently has half of a good deployment story for one of them: running an application on a server, as a back-end. This is a serious problem for the future of Python and one we need to figure out how to face as a community.

    Even the “good” deployment story is somewhat convoluted, as you need to know about at least some Linux distribution’s package manager, and native dependencies, and Pip, and virtualenv, and wheels, and probably docker too.

    If you want to run a Python application in your browser, your best bet right now is probably Brython. However, brython is still in its infancy, and basic faciltiies like preparing your code for production to achieve acceptable start-up performance, and an explanation of how to use libraries are missing. With big chunks like that missing it’s hard to advocate for Brython’s use in production.

    Moving on to scenario 3, this may be one of the best-supported configurations; py2app actually works surprisingly well. But it’s still incredibly confusing for new users. Which native objects (dylibs and frameworks and data files) to bundle are options to py2app itself, and not something that can be handled automatically by libraries. So if, for example, PyGame depends on SDL.framework or libSDL.dylib, you as an application developer need to understand how to figure that out and specify that list.

    On Windows, the situation gets worse. To work as a Windows exectuable, you need to bundle the Python interpreter, but unlike in an OS X application, you can’t just copy in a whole directory. So you end up needing a tool like PyInstaller or cx_Freeze. PyInstaller hasn’t seen a release in the last 2 years; it doesn’t support Python 3. It also doesn’t work: if I try to package the most basic Twisted program possible, with pyinstaller 2.1 I get “no module named zope.interface”, and if I try to package it with pyinstaller trunk, I get “no module named itertools”. cx_Freeze similarly can’t figure out how to include zope.interface no matter what I tell it to do. This problem isn’t specific to libraries that I use; most Python projects will run into it.

    py2exe, on the other hand, only supports Python 3.3+, and so is unusable with a lot of important python libraries.

    For a GUI application for Linux, you might have some small hope of building a distro-specific package that users could install, but that would involve using a distro-specific toolchain that had nothing to do with Python, and you need to repeat that work for Debian, Ubuntu, Fedora, and whatever other distros you want to support.

    All of these same tools are what I would use to build a stand-alone command-line executable for Windows, Mac, or Linux, and they all break down in similar ways.

    In the mobile space, there is absolutely zero tooling included with the language to even get started there. It might be possible to use Kivy to get a build onto iOS or Android. I haven’t had an opportunity to test those. But they still require you to install Homebrew, and a C compiler, and a whole bunch of fairly specific platform tooling to get started, and there are lots of different ways that can go wrong.

    So how do other languages stack up?

    1. In JavaScript, if you want an application in the browser, it’s as simple as ... writing some JavaScript.
    2. In JavaScript, if you want a desktop application, you can just grab Electron and be up and running in a few minutes.
    3. In JavaScript, if you want a command-line UNIX tool, you can grab nar and build something self-contained almost immediately.
    4. And of course, in Go, there’s no way to get anything but a fully functional self-contained executable at the end of the build process. Everything is fully redistributable by default.

    As a community, Python needs a clear, well-documented, well-supported, modern way to produce build artifacts that are easy to create and easy to share. We need to have this for all popular platforms and the browser. This is a tricky problem: it requires knowledge of lots of fiddly build details.

    This wheel has been re-invented, poorly, a dozen or so times. My list above was just a subset. In addition to py2app, py2exe, pyinstaller, cx_Freeze, and the Kivy bundling tools, we’ve also got terrarium, bbfreeze (which is unmaintained), pipsi, pex, and probably some others I don’t know about.

    In order to compete with JavaScript and Go for developers’ attention, Python must be able to become an implementation detail and disappear when the user is running the program. This means that some of these tools (terrarium, pipsi, pex) are not suitable for this purpose because they are envelopes for deployment into an environment with an installed Python interpreter.

    All of the tools I’m aware of that are trying to provide fully self-contained execution, though (pyinstaller, cx_freeze, bb-freeze, py2app) are poorly designed because they value optimized distribution size over actually working by default. Rather than reading setuptools metadata and discovering the full set of dependencies which have been declared to be required, all of these tools use weird AST-parsing heuristics and buggy path-traversal hacks to try to construct a guess as to the minimal set of files that might be required, then require the poor application developer to fill in the gaps. This means none of them work with namespace packages, none of them work properly with plugin systems or runtime configuration systems; generally, they don’t work correctly with late binding, which is one of Python’s greatest strengths. Of course, a full Python interpreter with the whole standard library is quite large. If we had a tool that worked well but produced very large executables, we could of course start adding an “optimized mode” to try to crunch things down for production.

    And all this is to say nothing of the insanely intricate and detailed knowledge that every Python programmer eventually acquires about the C runtime semantics of their chosen platform. When a C compiler is required but missing, most tools still just emit tracebacks. When a shared library goes missing dues to an OS upgrade or package removal, you just see whatever the dynamic linker thinks to report, no explanation of how to fix it or what to do next.

    The Python packaging ecosystem has made great strides in the last few years; Pip, in particular, has gone from a buggy and insecure mess to a mostly workable software delivery mechanism for developers. There are still bugs, but they are getting dealt with at a reasonable clip. However, Pip only delivers software to developers, and still requires you to have a Python runtime, a build environment, and tricky command-line tools to get things in place for development. The Python community has effectively no tools to deliver software to users.

    To sum up, we need a tool which:

    1. works by default, including with “tricky” packages with namespace packages, data files, and native dependencies
    2. produces useful, actionable error messages when something is missing and the build can’t be completed (like “you don’t have a C compiler installed” or “you need to install Homewbrew and then brew install openssl”)
    3. can produce both command-line and GUI executables for the mac, windows, and linux (and, for bonus points, a web browser)

    The bad news is that I don’t have the time to start this project myself, and I’m not sure who does. The worse news is that every day we don’t have this, more and more people are re-writing their user-facing tools and applications in JavaScript or Go or Swift or Java, to suit their target platform, because it is honestly easier to learn an entirely new programming language and toolchain, and rewrite an entire application than to figure out how to build a self-contained executable in Python right now.

    The good news, though, is that it’s a simple matter of programming, and that all the core technologies for doing all the really hard things that need to be done (pip, and zipimport and macholib, for example) already exist. It’s just a simple matter of programming: wiring together the metadata from setuptools, determining native dependencies with something like otool or ldd (or whatever the equivalent is on Windows, I still haven’t figured that out myself), pulling them all into a bundle, tacking the Python interpreter on.

    by Glyph at September 12, 2015 09:24 AM

    Dave Winer

    The news wars of the 20-teens

    I posted this as a tweetstorm using

    This is the moment when news turns into an ugly trench warfare battle ground, as with the famous Java wars or browser wars of the 90s. Only uglier because the barrier to entry is so ridiculously low, so there will be so many more combatants. I think the news execs are babes in the woods. Facebook will win for sure. Google and Apple have nothing to lose. Twitter has everything to lose. Jeff Bezos is sitting this out smiling with his Washington Post above it all. Maybe Rupert Murdoch will sue someone. What an epic mess is brewing! And it's so freaking unnecessary. Getting out my popcorn, because I have no stake in this.

    September 12, 2015 03:34 AM

    September 11, 2015

    Dave Winer

    A good day to think about web history

    14 years ago today was a big news day, including here on Scripting News.

    Under a piece I wrote about future-safety, Adam Gerstein posts a comment suggesting today is a good day to take a look at this.

    Most of the history is gone

    Try clicking on the links in the weblog for this day 14 years ago. You'll find most of the stuff is gone. Gerstein says a lot of it isn't in the Internet Archive either.

    I've tried to sound the alarms. Every day we lose more of the history of the web. Every day is an opportunity to act to make sure we don't lose more of it. And we should be putting systems into place to be more sure we don't lose future history.

    September 11, 2015 03:52 PM

    Tim Ferriss


    Tim cheat day

    100 episodes! Whaaat?!

    This celebratory episode involves me drunk dialing a bunch of you on Skype. We’ll get to that. But first, a little background and thank you…

    My podcast–The Tim Ferriss Show–was started on a whim. It was intended as a break between big book projects. “I’ll do six episodes to get better at interviewing” was the grand goal.

    In the first episode and after two bottles of wine, Kevin Rose nicknamed the show TimTimTalkTalk (damn you, KevKev). Later, after reviewing my ridiculously slurred and iffy questions (“If you were a breakfast cereal, which would you be?”), I let out a long sigh. I’ve always hated the sound of my own voice, but this was the worst. The podcast experiment wouldn’t last a month.

    Or so I thought.

    Now, here we are, passing the 100-episode mark. It’s crazy, and I can say one thing for certain — I’ve only made it this far because of YOU.

    Your amazing feedback, support, questions, and comments are what kept this podcast alive. Amidst self-doubt (similar to this) and many mistakes, I’ve wanted to throw in the towel more than once. But, through thick and thin, you’ve been there, telling my monkey mind to chill the fuck out, to take a deep breath, to go to sleep, or to fight another day.

    Many, many thanks.

    And to celebrate, I decided on a throwback to episode #1. I posted a note on Twitter and Facebook asking fans to put their contact information in a short Google form (note: I’ve deactivated the link):

    The results of this vodka-infused orgy of telephonic idiocy is below!

    We cover a lot of subjects, including:

    • Tantric sex
    • How I view and organize my various income streams
    • Marketing yourself in job interviews
    • My views (and challenges) with family and kids
    • How I dig out of negative downward spirals
    • And much more…

    I also left semi-coherent voicemails for a number of you.

    Once again, thank you so much for listening to this podcast. It means the world to me and keeps me going.

    You guys rock.

    Here’s raising a glass to many more adventures!



    This podcast is brought to you by 99Designs, the world’s largest marketplace of graphic designers. Did you know I used 99Designs to rapid prototype the cover for The 4-Hour Body? Here are some of the impressive results.  Click this link and get a free $99 upgrade. Give it a test run…

    This podcast is also brought to you by Wealthfront. Wealthfront is a massively disruptive (in a good way) set-it-and-forget-it investing service, led by technologists from places like Apple and world-famous investors. It has exploded in popularity in the last 2 years, and now has more than $2.5B under management. In fact, some of my good investor friends in Silicon Valley have millions of their own money in Wealthfront. Why? Because you can get services previously limited to the ultra-wealthy and only pay pennies on the dollar for them, and it’s all through smarter software instead of retail locations and bloated sales teams.

    Check out, take their risk assessment quiz, which only takes 2-5 minutes, and they’ll show you—for free–exactly the portfolio they’d put you in. If you want to just take their advice and do it yourself, you can. Or, as I would, you can set it and forget it.  Well worth a few minutes:

    Mandatory disclaimer: Wealthfront Inc. is an SEC registered Investment Advisor.

    Investing in securities involves risks, and there is the possibility of losing money. Past performance is no guarantee of future results. Please visit Wealthfront dot com to read their full disclosure.

    Selected Links from the Episode

    People Mentioned

    by Tim Ferriss at September 11, 2015 03:25 PM

    Dave Winer

    Twitter's 140-char blink

    This morning, an announcement from Twitter, in conjunction with Google, that they're going to do an "open source" implementation of Facebook's Instant Articles. A few comments.

    1. They continue to chip away at the 140-char limit. Why not just go all the way? The 140-char limit is holding them back in their most important application, news. This is just a complicated way of working around the limit.

    2. Don't confuse "open source" with "open." If it's open source, presumably we'll all know how it works. That's good, of course. But the channel will not be open to anyone who wants to use it. They're careful to disclaim that.

    3. This is a classic second-mover tactic. Facebook went first, Facebook owns the high ground. So challenge Facebook to be "open" by throwing a little confusion at the press. But...

    4. Facebook can and should beat them to it. I'm pretty sure their implementation is just RSS, which is already both open source and open to everyone to use. And stable, easy to build on.

    5. I would like to be able to use this channel to publish, and include the capability in my publishing tools. But Twitter isn't saying anything about that. They're working with another big company, Google. Not encouraging for its wounded developers, a group that Twitter needs to make peace with.

    6. This would be a good time for the leaders of the journalism world to get involved, publicly. No one wins with the tech platforms playing favorites as they like to do. Let's get back to some semblance of the open web. Twitter, Facebook and Google grew out of the open web. Yes, they're all really big now, but they should still be part of the open web, so that new social networks can blossom. We're getting kind of stuck here. Long-term that will not be good for the leaders of the tech world, as history has shown.

    September 11, 2015 02:27 PM

    Fog Creek

    Testing & QA with FogBugz and TestRail

    The ability to integrate many third-party tools has always been a big plus when adding FogBugz to your team’s workflow. You can choose from countless screenshot tools, build systems, crash-reporting services and more, that work with FogBugz. Today we are taking a look at TestRail’s Test Management integration to help your QA team find and log bugs faster.

    This is a guest blog post by Dennis Gurock, Founder of Gurock Software who are the creators of TestRail.

    TestRail is a modern Test Case Management software solution for QA and Development teams. It allows you to efficiently manage test cases, boost testing productivity and get real-time insights into your testing progress. It also integrates with FogBugz. With the integration, you can easily create new FogBugz cases during testing, link test results to bug reports and lookup FogBugz cases directly from within TestRail.

    How and Why Would a Team Use TestRail with FogBugz?

    If you have dedicated testers and a QA team (which you should likely have), tracking your software tests, exploratory testing sessions, and test results can quickly become tedious without a good way to organize your testing efforts. And as many teams learn over time, having a shared Excel file in Dropbox isn’t quite as useful as they initially thought.

    FogBugz is the central hub for many teams to organize all their features, bug reports, sprints and release schedules. By integrating a modern test management tool, like TestRail, you can also easily organize all your related tests and never forget to test an important feature before it goes live. As teams switch to continuous deployments and fast release schedules, keeping an eye on the project’s quality can be challenging. TestRail allows you to create helpful reports to compare results across builds, generate schedule forecasts and visualize your iteration results. Here are three useful ways to use the FogBugz integration in TestRail.


    1. Push Bug Reports to FogBugz

    Have you found a problem during testing? Simply push the test result as a bug report to FogBugz so that your developers can quickly fix it. The included link back to the test result and optional test steps provide useful context details.

    2. Look Up Cases from within TestRail

    Your developers have been busy fixing your reported bugs, so it’s time to go through your tests again to verify the new code. With TestRail’s live lookup, you can quickly review all the latest FogBugz case details with a single click.

    3. Create Coverage and Result Reports

    Are you sure you covered all of the features in your test run and do you need to review the results with your development team? Create reports to track your feature and test coverage, and review test results for your builds and iterations.

    So, if you are looking for a tool to help manage your software tests, you can try TestRail and our FogBugz integration. Getting up and running and configuring the FogBugz link only takes a couple of minutes.

    Be sure to check out all of the other useful integrations and tools that work with FogBugz. We’ll be featuring more integrations in the coming weeks.

    by Gareth Wilson at September 11, 2015 12:40 PM

    September 10, 2015

    Dave Winer

    Twitter's 140-character limit doesn't get you better writing

    There are a couple of well-rehearsed ideas that come up when you say Twitter's 140-character limit is a bad idea.

    1. The limit enforces brevity and makes people better writers.

    2. If they didn't have the limit it wouldn't work with SMS.


    Here, once and for all, are the rebuttals to these ideas.

    1. If you want quality writing, don't look to Twitter. Most of what you read there is crap. Unfunny humor, put-downs, highly abbreviated rallying cries that no one rallies to. Pathetic stuff really. If the goal of Twitter was to promote quality writing, then Twitter is a failure.

    2. The best guarantor of quality is your ability to unfollow. If someone is boring you, or offending you, just unfollow them. If that doesn't do it, mute them. And in true emergencies you can block them. You have all the tools, without the 140-char limit, to keep the too-long writing out of your feed.

    3. If you like SMS, great. You'll get the first 140 and a link to the rest. Which is more or less exactly how it works today, for everyone, even people who never use SMS.


    If the 140-char limit is such a great thing, why do you see posts like this on Twitter??

    September 10, 2015 05:00 PM

    Some comments should become blog posts

    My career as a writer started in the midst of the collapse of the corporate system that seemed certain to dominate open standards for all time, back in the ealry days of the web. I had ridden the wave of the Apple II, IBM PC and then the Mac. Just when it was assumed to be impossible for independents to be independent, boom, there's the web, the product of a single mind, kicking the ass of all the titans of tech. Once I saw that I could draw a line, back to the previous insurrection, the one which my career started with in the late 70s. THis is a cycle! Thank god.

    A comment on a comment

    From a comment on Facebook.

    It's worth noting that the extra space afforded by Facebook (over Twitter) has made it possible for my writing to re-expand after being forced into a very tight corner the last X years. What a relief.

    Twitter's 140-char-limit will go down in history as one of the worst most creativity-stifling ideas ever. Like the equalizing handicaps in that great Kurt Vonnegut story.

    Worst. Idea. Ever.

    September 10, 2015 02:21 PM

    September 09, 2015

    Dave Winer

    I wanted one place to go to get all the news about Major League Baseball.

    That means one thing -- it's time to start a river.

    So I wrote a blog post asking people for links to their favorite baseball feeds.

    I went searching for feeds, by going through all the major league teams, searching for local newspapers and in most cases finding good RSS feeds for their local team.

    And voila, there's now a new river. I had to buy a domain for it, and create a standalone page, with metadata for Twitter and Facebook.

    It's there for everyone to use. If you know someone who loves baseball, now's a good time to point them to the river. We're in the final month of the regular season, with an exciting postseason to look forward to.

    Let's go baseball!

    September 09, 2015 06:27 PM

    Mark Bernstein

    Doubling The Anchor

    I’ve been writing about Getting Started With Hypertext Narrative lately, slogging out my minimum daily adult requirement of a couple of thousand words in addition to my customary duties, and I’m finding there’s a ton we don’t know. Here’s an example.

    Imagine that we’re in the middle of a narrative sequence; default links (pressing Return, using the Next button) got us here and default links will lead us forward. But we could pause here for a bit more explanation, a story inside the story.

    Let’s say we’re with a bunch of college friends waiting for brunch at a bar near Clark and Diversey and we’re talking about our friend Howard, who is late again. Howard is often unlucky in love.

    Since Barbara, Howard had dated Claire (who left him to have a fling with her shrink), Tiff (who took his Xbox as reparations), Steff (who may have been fictitious), Mei (who left him for a job in Palo Alto), and Cassie (who left him to dig dinosaur bones in Idaho after ‘borrowing’ a grand from Amy and $2500 from Bob). Howard told us about them in excruciating and embarrassing detail every Sunday, but we seldom saw them. After Cassie, none of us was that eager. After Cassie, who could afford it? But Barbara, that was a hell of a story.

    We’ve got an optional club story, a useful supplement we can include for the benefit of patient readers, but which we might omit if tonight we’re in a hurry. We offer a text link to the beginning of the story, and perhaps put a guard field on the text link just in case we’ve already told that story.

    Doubling The Anchor

    The reader’s first question when she sees a text link is, “what does this offer? After following a text link, the reader’s first care is to confirm their theory of the link and, if their theory proves to be mistaken, to discover an explanation consistent with what is actually there. This is the core of the first great paper on hypertext writing, Landow’s “Rhetoric of Arrival and Departure” paper from Hypertext ’87, so we’ve known that much for a long time.

    When writing this sort of hypertextual club story, how do we handle this problem? The destination of the text link should typically repeat the link anchor. The repetition need not be literal; we can restate, extend, paraphrase, parody, or invert the link anchor. We can turn the link anchor into a title, or change it from exposition to dialogue. We can occasionally defer the restatement, and sometimes we can omit it, but the restatement is part of the grammar of this kind of text link.

    But where is this written? I’m quite certain this is a rule of craft, and like all rules for writer’s it’s made to be bent and resisted and it’s fun to discuss. But for the life of me, I can’t think of a place I’ve seen this stated. It’s not in the Nanards’ “Should Link Anchors Be Typed”, it’s not in “Scripted Paths,” it’s not in “Patterns of Hypertext” or “Canyons, Deltas and Plains” or, as far as I can see, in Abba and Bjarnason’s new and intriguing hypertext, Writing In The Age Of The Web. We’ve been writing hypertext for a generation and this simple matter of craft seems never to have been codified.

    What else are we missing?

    Well, there’s this: Iain Pears has written a hypertext fiction, reviewed here by the redoubtable Em Short.

    And Stacey Mason, the Eugene Cota-Robles Fellow at UC Santa Cruz, responds to my earlier suggestion that we sometimes want to Let Go Of The Line with an intriguing case for Allusive Games.

    September 09, 2015 02:41 PM

    Dave Winer

    What's the deal with AT&amp;T and DirecTV?

    The commercials for AT&T and DirecTV have become enticing.

    I was aware that AT&T had bought them, but I hadn't really thought about the possible implications of the deal.

    What they're selling in the commercials is this: Now you can watch DirecTV on your cellphone. Presumably if and only if you use AT&T as your provider. However what's not clear is if I have to have DirecTV as my TV provider at home.

    This is interesting for many reasons:

    1. DirecTV has exclusives on a bunch of sporting events.

    2. I've always wanted to be able to watch games on my phone. I have TWC and T-Mobile. TWC has an app for the phone that allows me to watch some programming when I'm out and about, but never the games I want to watch. For those I have to be at home, presumably watching on the big screen.

    3. I might be willing to switch to AT&T over T-Mobile for this!

    4. I'm certainly interested in knowing the terms. The fineprint on the ad offers some clues: "Requires qualifying device, TV plan, and data connection." In other words, it's almost certainly as limited as the TWC plan. Too bad.

    5. The sports leagues may be too smart to let the cellphone providers have mobile distribution, it looks like they want that for themselves. I could be watching every MLB game, on my iPhone or Nexus, for $25 a month. NBA League pass costs about the same. Not sure about other leagues.

    6. This is the convergence they were talking about at tech conferences in the early-mid 90s.

    September 09, 2015 01:57 PM

    Fog Creek

    Saving Agile with BDD and Cucumber – Interview with Matt Wynne

    .little {font-size: 75%} .video { margin-right: 15px; height: 56px; }
    Saving Agile with BDD and Cucumber – Interview with Matt Wynne

    Looking for audio only? Listen on and subscribe

    Up Next
    Secrets Behind Etsy’s Remote Working Success

    In this interview with Matt Wynne, Co-founder of Cucumber Ltd. and author of The Cucumber Book, we discuss Behavior-Driven Development (BDD). We go into the typical problems Agile teams have, and how BDD can help. Including the importance of conversations, automated testing, refactoring and concrete examples. We also discuss common mistakes made by those new to BDD and its drawbacks.

    Content and Timings

    • Introduction (0:00)
    • Common Problems Among Agile Development Teams (0:37)
    • How BDD Can Help (1:50)
    • The Importance of Conversations (2:51)
    • Why Refactoring is Often Forgotten (5:29)
    • Getting Started with BDD (11:33)
    • Common Mistakes with BDD (13:37)
    • Recommended Resources (16:04)



    Matt Wynne is lead developer of Cucumber, the popular open source acceptance testing tool, and one of the founders of Cucumber Limited. He’s also the co-author of two books, The Cucumber Book and Cucumber Recipes. He regularly blogs and speaks at conferences about behavior driven development including the talk “Why BDD can save Agile”. Matt thank you so much for joining us today, it’s really a pleasure. Do you have anything more to share about yourself?

    Actually the lead developer of Cucumber overall is my colleague and business co-founder Aslak Hellesøy, so I shouldn’t take all the credit!

    Common Problems Among Agile Development Teams

    From your experience in working with Agile teams what problems do you typically see them having that Agile needs saving from?

    Honestly I can almost predict when I get a sales call the story they’re going to tell me. They’re going to say “We started using Scrum about 2/3 years ago, we’ve got a lot of small co-located team but we still end up finding a lot of defects. A lot of bugs are getting found by the testers after the sprint’s finished or at the end of the sprint. We’re struggling to finish all of our stories in a sprint because we’re getting a lot of bugs. The stories are turning out to be bigger than we expected. We very often don’t meet our sprint goals. Or we see that our velocity is declining over time. We just generally think that this is a problem with cooperation with communication.”

    Yeah, I see these issues over and over and over again with teams that have adopted Scrum as a sort of project management practice but probably not adopted the rest of the practices that you actually need from extreme programming to make software development, to make Agile software development actually work.

    “If we talked more about cleaning up our mess, rather than refactoring… it would make the conversation… about why it was valuable a lot easier”

    How BDD Can Help

    Okay, so why is BDD the answer?

    What I love about my job is that I come into these companies where basically there’s people that care and they’ve got this new culture of co-location and self-organization and collaboration. They understand that that’s the way things ought to get done but they’ve missed some techniques for how to actually make that fly, especially the collaboration between the technical people who write the code or do the testing and the business people who want the software done. Even chopping things up into small user stories, you can still end up waiting two weeks until the end of a sprint to discover a misunderstanding. You still invested two whole weeks of people cranking code to find that they were cranking out the wrong code, that solved the wrong problem.

    The Importance of Conversations

    What we try and teach when we’re teaching teams how to use Cucumber, is not just how to write tests so that they can be automated using Cucumber the tool, it’s all about getting the business person, the tester and the developer to sit down together and decide and discuss what is it that we want the software to do. When we get to the end of the sprint what’s it going look like, how is it going to behave. That discussion throws up so much of the potential misunderstanding, assumptions that otherwise they would have only come across as they’ve gone through the delivery of the thing.

    Really the magic of BDD is in playing the game of, if we have to explain to the computer how to test the behavior that we want, we have to have figured out the behavior we want. By collaboratively doing that, by sitting down together and doing that we have to thrash out between those three groups what is it that we want so the tester and the developer and the business person are all on the same page about what is it actually going to mean for this story to be done. By the time they get to writing the code it’s a much more straight forward process. A lot of those potential bugs have been ironed out.

    Yeah, having these conversations is a really important part of the process.

    Right. I think we have a combination of… We’re writing the tests, the acceptance tests in a way that they’re completely accessible to everybody, so everybody can get involved in the process. We have that conversation happening early on, but then we can automate those tests, so we’re also able to do test-driven development to drive out the behavior that we want because we’ve figured what the examples are that we want the software to do and now we can very easily turn those examples into automated tests. Actually doing the development test first has all of these benefits about making sure that you build just enough code to make the software testable, getting feedback from the test about whether the code is easy to test and therefore is going to be easy to modify in the future.

    Also you’re able to safely do refactoring, and I think that’s the key benefit that most of these teams that have just adopted Scrum but not the other XP practices, have missed out on is that if you haven’t got good automated tests, it’s impossible to do refactoring. If you can’t do refactoring your code is just going to get gnarlier and gnarlier and more and more expensive to maintain over time.

    “Day to day programmers go to work in this thing that is just… It’s a mess”

    Why Refactoring is Often Forgotten

    You say that refactoring often gets forgotten or put off. Why do you think that that’s the way it is?

    I often think that part of the reason is because it’s invisible. Code quality, code cleanliness is invisible. If you imagine that you run a restaurant and the chefs were producing these meals that were unhygienic, the meals are coming out really slowly now and people are getting ill and complaining about the quality of the food, you would be able to walk into the kitchen and you could see this kitchen’s a mess. There’s shelves hanging off the walls, there’s a sink full of dirty dishes. Nobody can get anything done in this place.

    Most code bases are in that kind of a state and day to day programmers go to work in this thing that is just … It’s a mess. We just kind of cope and get by and grab a pan and scrub it out a little bit and fry an egg in it and then give it out to the customers. We just cope all the time with the chaos and the mess. There’s a little bit of that that’s always got to be tolerated and go on but I think we don’t own up to it. I think, again, using the cooking analogy, it’s impossible to prepare a meal at home and not have to do a little bit of tidying up afterwards. Right?

    But most software engineers will build a feature and go “There you go it’s done.” and they want to move on to the next thing. They don’t take that time to go and accept ‘I’m now going to have to spend a couple of hours here tidying some things up.’ I think that business people not seeing the mess that’s there is part of the thing. I think that business people not understanding the business benefit of doing it is part of the thing. I think the name refactoring is unfortunate because it sounds very technical, doesn’t it? I think if we talked more about cleaning up our mess, rather than refactoring, I think that it would make the conversation between developers and business people about why it was valuable a lot easier.

    Talking about examples, is there an example of a ‘concrete example’?

    I think the concrete example’s become, like really, really concrete, become most useful before you even get to test automation. It’s in the conversation. I very often do this thing in the training world I’ll just say to somebody, or I’ll say to the group “Somebody give me an example of the last time you used a piece of software.” The person will say to me “Okay, I checked my email on my phone.” Then we’ll say “Can you make that example more concrete? Can you tell me more about where you were, why you were checking the email?” Then they’ll say “Okay, I was on my commute to work this morning and I was getting a ride with my colleague. We were in a traffic jam and I pulled my phone out and I checked my email.”

    Now we have a bit more context. The more concrete the example gets, now we know they’re on a phone, what kind of phone were they on? The more concrete the example is, the more vivid it is, the more it helps us to explore the problem domain and see these potential edge cases that we’re going to have to probably build if statements for.

    So asking these questions, really digging in and not just making assumptions about what the process is?

    The more you stay at that “check my email” level of abstraction, the more it becomes okay for everybody to go “Sounds fine.”, and you just miss the chance to dig in and discover those things that are going to end up meaning that you have to stay late on Thursday night to finish the story in time for demo day.

    “The magic of BDD is in playing the game of, if we have to explain to the computer how to test the behavior that we want, we have to have figured out the behavior we want”

    What are the main drawbacks or costs of BDD?

    I think there’s a part of the problem solving space where you don’t understand the problem well enough and this is too rigorous a mechanism to apply. A very good example is that right now the Cucumber team are building a bunch of iterative prototypes for what the next version of Cucumber Pro, our collaboration platform, is going to look like and we’ve been testing those out with our users. Those prototypes haven’t got any tests. We’re just building them, we’re learning about React.js, we’re just knocking them together in the leanest, smallest thing that we can put together in order to put it in front of a user and say “What do you think? Would it be good if it worked like this?”

    But we’re going to throw that code away once we’ve got that feedback from the user and then if it turns out to be stuff that we want to invest in, that’s when we’re going to apply BDD. I think that it can have a drawback if you try and apply it too early, when you still don’t understand the business problem well. I think the other obvious drawback for a team that are in that place where it would be good for them, is that it’s going to slow them down for a bit because they’ve got to learn new skills. It will feel slower anyway because your front loading your process with all of that uncertainty. Rather than putting your finger in your ears and ignoring the problems and misunderstandings that are going to come along later and diving in and starting to write some code and then waiting until the testers tell you everything is wrong with it in the next sprint, you’re trying to figure that stuff out now.

    That figuring stuff out now takes a bit longer than it would have done to just pick up the keyboard and to start hacking and trying to write a test as you go takes a bit longer than just hacking together a solution. The payback comes in the longer term when you need to come back and change that code, it’s easier to change because there’s tests with it. But also the payback comes when you give it over for testing and the testers can’t find anything wrong with it because it does all of the stuff that you agreed they wanted you to make it do.

    Getting Started with BDD

    We’ve talk a lot about BDD here but how do I get it introduced or get it started with my team?

    What we saw a lot of in the early days is that we’d have developers who had picked up Cucumber as a tool and they were trying to draw the business folks or the testers into the process of writing those acceptance tests. They were already developers who were bought into doing TDD and they wanted to have more involvement in writing their tests so they would pull people in. That can be one way. The other way that we often see is where you have a separate silo of testers. You have developers over here writing bugs and then testers over here finding them and the testers start to use Cucumber. I feel like this is a broken situation in the first place, I want them to just work together so that they don’t make the bugs in the first place, but it’s a start.

    If there’s a start that this group now start using Cucumber, then they can start to maybe have the conversations about what should go into the Cucumber tests before the code gets written. That’s really where I think most teams will start to get a foothold in this process is. Simply by sitting down and doing, there’s this pattern a three amigos conversation where you have the business analyst or product owner, the tester and the developer, sitting down together. Just for 20 minutes before a story gets pulled into the sprint to discuss the acceptance criteria and try and give examples of all those acceptance criteria. Make sure we really understand and we’ve really seen the full scope of this story and think about what will those acceptance tests look like. Because if you can sit down and get an agreement before you write the code, you’re a lot more likely to build the if statements right the first time to actually cater for all of the different edge cases. I think that three amigos is the best place to start.

    “If you can’t do refactoring your code is just going to get gnarlier and gnarlier”

    Common Mistakes with BDD

    One mistake I see them do a lot in that session is they’ll try and write an actual Gherkin feature file. They’ll get a laptop and a projector and they’ll try and type it out. It can be pretty boring for a product owner to sit there watching people typing in Gherkin. Definitely not the right way to do it. I think it’s much better to just have the conversation about the examples, go off and write your acceptance tests and then give them to the product owner to read, say “This is my understanding of the system you want me to build. Read this and tell me if I’ve understood it correctly.”

    You’ve mentioned one mistake already in terms of people just starting to jump into a particular tool rather that starting with a more lightweight approach. Are there any other common mistakes you see people making with BDD?

    In the early days the team are going to get sort of addicted to writing examples. They’re going to start to love it. They will try and describe every single thing they can think of that software should do in Gherkin. Then they’re probably going to try and use Cucumber to automate a full stack acceptance test that hits every layer in the system right from the GUI to the database. They’re going to try and use Cucumber to automate that example through all of those layers of the stack.

    Those two things in combination are a real problem in the long run because that’s how you end up with 15 hours of tests. Because you try to document every single example that you want the system to do and you’ve tried to test it through the full stack. Two things can make this better. One thing is to think about, these are all examples of behavior that we want but how many of them do we really need to retain in a business readable format? How many of them could just be pushed down to being written in JUnit or RSpec tests? They could just be unit tests and also even of the ones that we want to retain as business readable, how many of them need to hit the entire stack?

    Could some of these examples that really matter to us actually just pick up part of our domain model and test that bit of the domain model? Those are two ways of thinking about, we’ve defined examples that we want in the behavior but what are good long term ways of making the automated tests that validate that behavior, making them maintainable over the long run.

    Recommended Resources

    Can you recommend any resources for those wanting to learn more about Behavior Driven Development?

    There are a few really good books to read. I think the best book I’ve seen about the overall process is John Smart’s book, “BDD in action”. It’s a really good view of how to make BDD work.

    This is a really good book, it’s quite an oldie now but goodie, “Specification by example” by Gojko Adzic. What’s good about this book is that Gojko went around and interviewed tons of practitioners and discovered the details of what was working and not working for them. What you’ll find in here is lots of evidence about how to do it and how it’s worked in other places, which I think is really valuable if you’re trying to convince some skeptical people in your organization about “Hey, is this just a crazy new fad or something that really works?”

    “Bridging the communication gap”, Gojko’s old ranty book as well, which is also very good. There’s our books, “The Cucumber book” I think is pretty good. From a practical kind of actually using Cucumber point of view, we’ve produced a video series. They get really deep and they’re talking about the stuff about the testing pyramid and the depth of tests. We work through an example. I think Cucumber School as well is a really good resource.

    Matt, thank you so much for joining us today.

    Thanks for having me.

    by Gareth Wilson at September 09, 2015 11:19 AM

    September 08, 2015

    Dave Winer

    People don't click links, that's why the 140-char limit will cripple Twitter

    During the quiet holiday weekend a blog post from a writer named Startup L. Jackson got a lot of circulation. He says that Twitter's product is okay as-is, and people who say the 140-char limit must be eased are indulging in what he calls "magical thinking." As readers of this blog know, I am one of those people.

    I don't say Twitter needs to ease the 140-char limit because it will grow the market, as Mr Jackson suggests, it might or it might not, but that isn't the reason. It's not a grow-the-market move, it's a defensive move.

    I don't really want to repeat my last post on this topic, which ran just five days ago, but what the hell, one more time won't kill me.

    1. Twitter has had real-time news more or less to itself since inception. Facebook was busy doing something else. Apple had the totally wrong idea of how news worked. Google had good products, Google News and Google Now, but they weren't doing exactly what Twitter does.

    2. But things have changed. Facebook and Apple are actively pursuing news, and at least in Facebook's case, their product works better than Twitter's. Flipboard has an excellent product, and while they don't appear to be an immediate threat to Twitter, they could be acquired.

    3. News products that are limited to 140 characters have to use pointers to guide the reader to the rest of the story.

    4. Key point -- the new entrants don't have a 140-char limit.

    5. If you think that clicking on a link to read a story is not a serious disadvantage, then go ahead and keep the 140-char limit. But Facebook claims to have done the research, and my anecdotal experience confirms this: people don't click links.

    6. It's easy and non-disruptive for Twitter to ease the limit. The people who really love Twitter as-is will barely notice a difference. Except when they want to read more, they can just click a link, and the full story loads immediately, because the full article is already there, it's in the Twitter feed, just hidden at first. This is very simple, imho totally non-controversial stuff. Don't breeze by it, and think the limit is insignificant. It just cripples Twitter in relation to its new competition.

    7. I've seen this happen so many times in tech. An early leader thinks there's something magic about their product, a newcomer enters and takes the market because they were wrong about the magic. Users almost always go for new power, esp when it comes to them as performance not complexity. That's all we're talking about here. News stories that load instantly as opposed to news stories that require for a new page to load.

    8. It's pretty basic shit, Mr Jackson.

    PS: To illustrate the point, I posted this story in full text on Facebook. Let's see which version gets more engagement, the one on Twitter, limited to 140, with a link, and the full text piece on FB.

    September 08, 2015 02:45 PM

    Hunting for great MLB feeds

    I love my NBA river, but it's kind of dormant now, since we're in the quiet period between professional basketball seasons. As the NBA is in hiatus, Major League Baseball is revving up for what's looking to be a really interesting postseason. I want to be prepared with a great river of news to keep me up on the latest gossip and speculation. I don't want to rely on the play-by-play announcers of the Mets games, which I am now watching as intently as I watch the NBA as it approached its post-season in April.

    Anyway, if you're into baseball and RSS, you can help out, by joining me in the hunt for interesting baseball-oriented RSS feeds. On the first pass, I'm looking at regional news coverage, on a team-by-team basis. I already have good sources for the NY and Bay Area teams. Washington, Chicago, Pittsburgh, Houston, St Louis, Kansas City, Toronto -- feeds for the teams that appear to have a chance to being headed to the postseason.

    Then I want to find interesting columnists.

    Remember, they have to have a good RSS feed, or they can't play.

    There's no give in that rule unfortunately.

    One more thing..

    Let's go Mets!

    PS: The new river is starting to populate now. Here we go!

    September 08, 2015 02:32 PM

    Fog Creek – Interview with Mary Rose Cook

    In, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.

    Today’s guest is Mary Rose Cook, a Facilitator at the Recurse Center (formerly known as Hacker School). Passionate about sharing her programming knowledge, she is the creator of Code Lauren, a programming environment for beginners, and Isla, a live-coding interface and programming language for young children. She also wrote Gitlet, an implementation of Git written in JavaScript, which includes a heavily annotated version of the source, to help you better understand both the code and how Git works. There’s more on her blog.

    Mary Rose Cook
    Location: New York City, NY, US
    Current Role: Interactive Media Design Facilitator at Recurse Center

    How did you get into software development?

    When I was eight years old, we had a BBC Micro at home. My Dad and I spent hours typing in BASIC code from a book that contained the source for some simple computer games. Inevitably, the games wouldn’t work. Understanding nothing of what we had written, we debugged by going through the source, character by character, to find things we had mistyped.

    When I was thirteen I used ResEdit, the MacOS 7 resource fork editing program, to change icons and keyboard shortcuts on my parents’ Macs. Somehow, that led to me discovering the programming section at the local bookshop. I bought a book called Programming Starter Kit for Macintosh that I found hard to understand. (I remember being confused by functions returning error codes.) I abandoned that book after two hundred baffling pages and bought Mac Programming for Dummies. That was easier. Afterwards, I worked through Foundations of Mac Programming and this led to me writing a word processor, which was really just a window you could type into.


    Tell us a little about your current role

    I work at the Recurse Center (FKA Hacker School).

    The Recurse Center is a three-month programming retreat. The people who attend (“Recursers”) work on projects they choose. Their goal is to get much better at programming. Their experience levels vary widely: some have been programming for a few months, some for thirty years. We give grants to people from groups that are traditionally underrepresented in programming.

    My job title at the Recurse Center is Interactive Media Design Facilitator. I spend part of my time working on my own programming projects, and I spend the rest of my time helping Recursers get better at programming. I help them find the right projects to work on. I pair with them on their projects. I review their code. I help them work out an architectural approach to a problem and I run workshops on subjects that interest me: functional programming, the graph underpinning Git etc. At their best, these activities lead to us diving deep into some code, or practicing systematic debugging, or thinking about some fundamental programming ideas.

    In terms of my own projects, my last one was Gitlet, an implementation of Git in JavaScript. I wrote it to learn how Git works under the covers. I released a heavily annotated version of the source code as well as a long essay about the innards of Git.

    I’ve also been giving free programming lessons in New York, using Code Lauren as a teaching tool. Code Lauren, is a programming environment for beginners, which I’m currently working on. The programmer uses the environment to write animations and small games. They use a simple, Lispy language and their program is re-evaluated on each keystroke. They can step through the execution of their program forwards and backwards.

    The first hard part of this project was trying to make programming easier. I taught my wife some Python and noticed that she found certain things confusing. When should a function be called as a function and when should it be called as a method? What is the difference between literals and variables? In what order will this code execute? What variables are in scope? What value does this variable currently hold?

    I designed the language to fix some of these confusions. I tried various ideas that didn’t work: replacing dot notation with a URL-like syntax, eschewing loop constructs in favor of map and its friends, a Lisp that used line-breaks instead of parentheses, a language that used postfix notation and had a stack with a short memory. And I tried some ideas that did work: creating an animation loop with a special construct that reads as English, using braces consistently to signal a scope and a block, only allowing functions.

    I designed the environment to fix other confusing things about programming. The user can step forwards and backwards through their code to understand its order of execution. They’re able to mouse over things – parts of their animation, variables, pieces of syntax, arguments – to see information about state or what the code is doing. Error messages are written in plain language and are very specific and point out as many problems as possible.

    The second hard part of this project was writing the compiler. I wrote version one to get something working. It used a PEG parser and had a simple, switch-statement-based interpreter. It never yielded to the JavaScript event loop, so it locked up the browser if the user’s program ran for very long. I then wrote version two to avoid locking up the browser and to let the user step forwards through their program. This version used generators to periodically yield to the event loop. Finally, I wrote version three to support stepping backwards through the program and support showing the program state. The generators I used for version two hid their state, which meant it couldn’t be copied and stored. So I wrote a compiler that compiled the parsed code into bytecode and a virtual machine that encoded the state of the user’s program in a call stack. This meant I could copy and store each program state. Stepping backwards is just a matter of restoring the previous state.


    When are you at your happiest whilst coding?

    After I’ve come up with a possible way to solve a tricky problem, I really like writing the code to see if my solution will work.

    What is your dev environment?

    I run OS X on a Retina MacBook Pro 13”. I write code in Emacs and use iTerm 2 as my terminal.

    What technologies are you currently trying out or want an excuse to try?

    The Code Lauren build system uses ES6, which is a lot of fun. I’m also using React, which is making my UI programming reasonably easy.

    A while ago, I wrote an interpreter in Clojure and a synth in ClojureScript. I can’t wait to go back and do another project with ClojureScript.


    When not coding, what do you like to do?

    I go to art galleries a lot, particularly the Met and the Frick. I see lots of films at the Film Forum, a great independent cinema in the West Village.

    What advice would you give to a younger version of yourself starting out in development?

    Be rigorous! When I was younger, I thought the only thing that mattered was having a working project. I think that attitude slowed me down because it kept me from understanding some things deeply. Now, I try and dive deep as much as I can.


    Thanks to Mary for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.

    Recent Interviews

    Jude Allred
    Jude Allred
    Richard Schneeman
    Richard Schneeman
    Dayle Rees
    Dayle Rees
    Chris Fidao
    Chris Fidao

    by Gareth Wilson at September 08, 2015 10:07 AM

    September 07, 2015

    Tim Ferriss


    Wim Hof

    “Breathe, motherfucker.”
    – Wim Hof

    Wim Hof (@Iceman_Hof) is a Dutch world record holder, adventurer and daredevil, commonly nicknamed “The Iceman” for his ability to withstand extreme cold. He is the creator of the Wim Hof Method and holds more than 20 world records. Wim is an outlier of outliers, as he routinely asks scientists to scrutinize and validate his feats. Here are just a few examples:

    • In 2007, he climbed past the “death zone” altitude on Mount Everest (~7,500 meters) wearing nothing but shorts.
    • In 2009, Hof completed a full marathon above the polar circle in Finland, in temperatures close to −20 °C (−4 °F). Dressed in nothing but shorts, Hof finished in 5 hours and 25 minutes.
    • Hof holds the current Guinness World Record for the longest ice bath, now set at 1 hour 53 minutes and 12 seconds.

    But it’s not just cold.

    • In 2011, he ran a full marathon in the Namib Desert without water. The run was performed under the supervision of Dr. Thijs Eijsvogels. He can also run at altitude without suffering from altitude sickness.
    • In the same year, he was injected with toxins under doctor supervision and demonstrated that he could effectively control his autonomic immune response. Wim was able to raise his cortisol levels and lower his blood concentrations of cytokines (inflammatory mediators) using solely his meditation and prep techniques.

    Not only this, but he was able to train others to achieve the same effect… with only 4 days of training!

    We dig into all this and more.  I loved this conversation and hope you do, too…


    Want to hear a podcast related to the science of extreme performance? — Listen to my conversation with Laird Hamilton, who is widely considered the greatest big wave surfer of all-time and who also practices Wim’s techniques. — stream below or right-click here to download:

    This episode is brought to you by Audible, which I have used for years. I love audiobooks. I have two to recommend right off the bat:

    1. The Graveyard Book by Neil Gaiman – Perhaps my favorite audiobook of all time.
    2. Vagabonding by Rolf Potts – This book had a huge impact on my life and formed the basis for a lot of what has become The 4-Hour Workweek.

    To get your free audiobook and a free 30-day trial, go to You can choose from the two audiobooks listed above or from 180,000+ audio programs. They offer audiobooks, magazines, newspapers and even classes. It’s that easy. Go to and grab your free audiobook.

    This podcast is also brought to you by MeUndiesHave you ever wanted to be as powerful as a mullet-wearing ninja from the 1980’s, or as sleek as a black panther in the Amazon? Of course you have, and that’s where MeUndies comes in. I’ve spent the last 2-3 weeks wearing underwear from these guys 24/7, and they are the most comfortable and colorful underwear I’ve ever owned. Their materials are 2x softer than cotton, as evaluated using the Kawabata method. Check out to see my current faves (some are awesomely ridiculous) and, while you’re at it, don’t miss lots of hot ladies wearing MeUndies.

    QUESTION(S) OF THE DAY: What physical feats do you find most impressive? And what physical ability do you wish you could improve? Please let me know in the comments.

    Scroll below for links and show notes…


    Selected Links from the Episode

    Website | Twitter | Facebook

    Show Notes

    • Wim’s first world record & his most challenging cold exposures [07:23]
    • What does Wim say to himself if he ends up in an unexpected situation and how does he deal with them [09:28]
    • How Wim controlled stress hormones and his immune response when he was injected with an endotoxin at the Radboud University [11:34]
    • The activities Wim took his subjects through on the first day of training to control their immune response to being injected with an endotoxin [17:46]
    • The reason Wim’s subjects don’t pass out when the oxygen in their blood reaches very low levels [22:14]
    • How the breathing exercises Wim puts his subjects through are used to control their immune response [26:13]
    • Can Wim control his immune response if he contracts a disease without realizing it? [27:33]
    • Why Wim is able to control his immune system and shield himself from diseases [29:22]
    • The ‘impossibles’ Wim thinks we will be able to prove are possible in the next 5 years [33:10]
    • What Wim recommends for someone who is depressed or a person just wants to lift their mood [38:19]
    • Wim’s eating routine and his typical meals [40:45]
    • Does Wim release more DMT during his breath work [43:58]
    • How Wim lowers his body temperature in a hot climate and trains himself to endure high temperatures [47:47]
    • How Wim learned 10 languages [53:03]
    • Wim discusses why people are fat, and how people can develop more brown fat [54:09]
    • How to start breathing for relaxation [56:49]
    • The person who comes to mind when Wim thinks of the word successful [59:27]
    • The steps Wim would tell someone to take if they don’t feel successful [1:00:02]
    • The book Wim has given to other people the most as a gift [1:02:20]
    • How Wim overcame dark times [1:04:17]
    • Wim’s routine in the first 60 minutes of each day [1:07:16]
    • Wim ‘s favorite exercises [1:11:44]
    • The musician Wim looks up to the most and his favorite albums [1:14:00]
    • The purchase Wim has made in the last year for under $100’s that has positively impacted his life
    • Wim finds his stones [1:15:28]
    • The advice Wim would give his 30-year-old self [1:17:19]

    People Mentioned

    by Tim Ferriss at September 07, 2015 04:51 PM

    September 05, 2015

    Lambda the Ultimate

    Freer Monads, More Extensible Effects

    Freer Monads, More Extensible Effects, by Oleg Kiselyov and Hiromi Ishii:

    We present a rational reconstruction of extensible effects, the recently proposed alternative to monad transformers, as the confluence of efforts to make effectful computations compose. Free monads and then extensible effects emerge from the straightforward term representation of an effectful computation, as more and more boilerplate is abstracted away. The generalization process further leads to freer monads, constructed without the Functor constraint.

    The continuation exposed in freer monads can then be represented as an efficient type-aligned data structure. The end result is the algorithmically efficient extensible effects library, which is not only more comprehensible but also faster than earlier implementations. As an illustration of the new library, we show three surprisingly simple applications: non-determinism with committed choice (LogicT), catching IO exceptions in the presence of other effects, and the semi-automatic management of file handles and other resources through monadic regions.

    We extensively use and promote the new sort of ‘laziness’, which underlies the left Kan extension: instead of performing an operation, keep its operands and pretend it is done.

    This looks very promising, and includes some benchmarks comparing the heavily optimized and special-cased monad transformers against this new formulation of extensible effects using Freer monads.

    See also the reddit discussion.

    September 05, 2015 02:30 PM

    September 03, 2015

    Dave Winer

    Why Twitter must blow past 140

    Mathew Ingram has a post where he looks at the pros and cons of Twitter getting rid of the 140-character limit. I don't think there are any cons, they have to do it. Here's why.

    1. Facebook is right. People don't click on links. It's not just true of mobile readers, it's true of all readers, everywhere, all the time. They. Don't. Click. Links. Memorize that.

    2. Facebook wants to be in the news business. So does Apple. Probably a lot of other big tech companies. Will any of them have a 140-character limit? No need to answer that.

    3. So there's Twitter with a package that can handle pictures, movies, vines, etc. But if you want to read a few paragraphs of text you have to click a link? If that limit lasts much longer it's an example of paralyzed management. Obviously there is no technical limit. If you can embed a video, you can include a few paragraphs.

    4. The user experience would have to change a tiny bit. You'd see the first 200 characters or so, then a See More link, exactly like Facebook has. Or if they want to be a little more beautiful, they could put a triangular wedge there and allow it to expand and collapse with a nice animated effect. None of this is even slightly challenging to program.

    Conclusion. They have to do it. What's amazing is that they've waited this long without doing it.

    September 03, 2015 09:15 PM

    Baseball humor

    I love going to baseball games because, in certain cases, it's okay to be incredibly rude to people, and it's funny.

    For example, we were waiting on the train home from CitiField last night, reveling in a solid Mets win that included an inside-the-park home run, when a group of Phillies fans comes on.

    I said something like "Sorry we humiliated you guys again." There is some honor in being a Phillies fan after all.

    Then I noticed one of them was wearing a Yankees shirt. "What are you doing here?" A few seconds pass: "I guess they'll let anyone in these days."

    PS: This started as a Facebook thread.

    September 03, 2015 04:07 PM

    Update on Slack-like code

    A brief note: The new version of nodeStorage, v0.78, is out.

    This is the first version with Slack-like webhooks.

    I have been able to use my existing Slack webhook code with this, both of which run unmodified with this server. So to that extent this is a clone, but I'm not claiming that at this time. They work like Slack, a subset of Slack's capabilities, and are not complete.

    You can see the results of my testing in this liveblog post.

    September 03, 2015 01:19 PM

    Fog Creek

    Secrets Behind Etsy’s Remote Working Success – Interview with Brad Greenlee

    .little {font-size: 75%} .video { margin-right: 15px; height: 56px; }
    Secrets Behind Etsy’s Remote Working Success – Interview with Brad Greenlee

    Looking for audio only? Listen on and subscribe

    Up Next
    How to Onboard Software Engineers

    In this interview with Brad Greenlee, Senior Software Engineer at Etsy, we talk about remote working. Brad explains how Etsy approaches remote working and makes remote workers feel like first-class citizens. He goes into the tools, processes and culture they have to achieve this. We finish up with common mistakes made by those new to hiring remotes and how remote workers themselves can help improve their effectiveness.

    Content and Timings

    • Introduction (0:00)
    • Etsy’s Successful Approach to Remote Working (0:53)
    • Remote Working Tools (2:47)
    • Culture to Support Effective Communication (4:10)
    • Hiring Remote Workers (5:23)
    • Common Mistakes (9:15)
    • Remote Worker Effectiveness (10:20)



    Brad Greenlee is a Senior Software Engineer at Brooklyn-based Etsy. He’s based in Seattle and works remotely on their data engineering team. He’s worked a number of remote roles throughout his career, but says Etsy does it best. Brad, thank you so much for taking your time to join us today. Do you have a bit to share about yourself?

    I’ve been at Etsy for a little over three years. My past life has been a lot of startups and consulting, working both locally and remote. A interesting tidbit, my most remote working experience was spending four months working out of a Volkswagen bus while my then fiance, now wife, and I were rock-climbing bums traveling around the U.S.

    “Critical mass is the most important thing when it comes to remotes being successful”

    Etsy’s Successful Approach to Remote Working

    That’s fantastic. You don’t hear too much of the Volkswagen bus and rock-climbing stories these days. You say that Etsy does remote working better than any company you’ve worked for. What is it about their approach that has been so successful?

    Generally, the people at Etsy do a great job of making remotes feel included, like first-class citizens. Etsy are heavy users of IRC, so they’re already in a remote by default mode. Even in the Brooklyn office, they’re spread out over many floors and a bunch of different offices, so often, people will first go to IRC to get a hold of someone. We also have built a bunch of our tools around IRC. We deploy our site via, not directly via IRC, but we coordinate deploys via IRC. A lot of other tools are built on that.

    At Etsy, there is a lot of email going back and forth. We have something called, we refer to it is a ‘reply-all culture’, which can be a bit overwhelming at first, especially when you first join and you’ve got a hundred messages in your inbox before you’ve even started. The default is to share more information than not, so that also helps. Things like, we’ve got a really good AV set up now, we’ve settled on a technology that works pretty well, a lot of our conference rooms are set up well for video conferencing. We record all of our large meetings and talks and whatnot and have a video archive of that. If you miss something, it’s easier to catch up on it. A lot of of it has to do with the fact that we’ve grown to the size where we’re pretty distributed anyway, we’ve got offices all over the world, and so it’s just natural that we have started including everybody.

    Remote Working Tools

    Communication is important to the success of any employee, but especially those working remotely. What tools do you use at Etsy to make sure you’re communicating as well as you can?

    IRC, a lot of other companies use other forms of chat, like Slack, email, obviously. The particular video conferencing technology we use is called Vidyo, V-I-D-Y-O, and it works very well. It’s super easy to just jump into a room. We use Google docs a lot for collaborating, especially on architecture docs. Each team settles on their own tools for the most part. We’ve got a lot of common tools, but the design folks are heavy users of Basecamp, GitHub, Trello.

    Also, a couple engineers and I, for a Hack Week a couple years ago, wrote a, what we call Omni-search, to tie a lot of these tools together, so it’s basically searching across IRC and GitHub. One of the problems you have when you’ve got all these different tools is that information tends to get hidden in little corners, and so we try to do our best to bring that back together.

    “It’s better to lean towards communicating more than you think you need to”

    Culture to Support Effective Communication

    That does sound like a pretty neat tool. You talked about tools, but what processes do you have that can support both the remotes, as well as the effective communication?

    I think it’s more about just culture. We’ve got a culture of sharing and being inclusive, documenting meetings, and critical mass is the most important thing when it comes to remotes being successful on a team, meaning just a single remote on a team doesn’t tend to work out as well. You basically need enough people remote that communication defaults to remote-friendly mediums like chat, that or just sending an email, that’s probably the most common thing.

    With the email setup, do you just use distribution groups for all sorts of teams, or is there one or a couple of things that everyone’s on?

    Each team can have their own distribution list. Our email is going through Google, so anyone can create a Google group, but then we’ve gotten larger, like tech-all mailing lists or everyone. But people tend to err on the side of being more inclusive than not.

    Hiring Remote Workers

    Are there any characteristics or skills that Etsy specifically looks for when hiring remotes or you look for?

    Generally, we only hire more experienced people as remotes, and ideally, people who have shown a record of working remotely before, but otherwise, certainly more experienced engineers who are, being self-sufficient is really important, especially if you happen to be in a different time zone. You need to be able to speak up if you need information. Don’t be shy about reaching out and being an excellent communicator, especially written, given that a lot of the communication is through chat or email.

    Having in-person face-to-face time is still really important though. What types of things can you do to make sure you’re encouraging that to happen?

    Probably the biggest thing is we encourage our remotes to visit the Brooklyn offices often as they like, anytime they want to come out, they are welcome. We also encourage, it’s not really in person, but we also encourage face-to-face video, one-on-ones. One of our engineering managers wrote this app called Mixer that you can sign up for and basically just randomly matches you, every two weeks, randomly matches you with one other person who’s signed up for the Mixer app and just sends an email to both of you saying, “Hey, go chat.” That works great for just meeting people who you normally wouldn’t interact with. Another thing is when you’re visiting the Brooklyn office, teams will often have team dinners, we’ll do team meetups in different cities, so I guess that’s a lot of face time.

    How do you handle having employees in different time zones or working on different schedules?

    For the people in Europe, from the ones I’ve talked to, they generally don’t have to alter their schedule too much. Occasionally they’ll stay late for an important meeting or something, but Etsy is pretty good about respecting people’s work-life balance. Generally as long as you have a few hours of overlap, it’s not that big of an issue. Again, I think it’s less of an issue for engineers who tend to do more solo work.

    In your experience, are there any roles that don’t work remotely?

    It’s my personal belief that anything can work if both sides put enough effort into it, but that said, I think those roles that require more interaction with other people tend to be harder to be remote. We’ve got a few remote managers at Etsy, but they’re also largely managers of remote teams, or nearly all remote teams. Even then, it can be difficult if they’ve got a lot of meetings with others. Also, some groups within Etsy, they just haven’t had as much exposure to remote workers, so they’re less likely to hire remotes in the first place. Our design group has I think, we’ve got one remote person and some people in Berlin, but I think maybe because design tends to be a little bit more collaborative, at least in the initial stages, they haven’t really bought in as much to remote working as say, engineering.

    There’s a bit of ramp-up to try to break through that barrier. I guess you have to have a champion there for that.

    Yeah, that definitely helps, having someone in the office who champions remotes and makes sure that people are aware of remote workers.

    “Etsy do a great job of making remotes feel included, like first-class citizens”

    Common Mistakes

    What are common mistakes you’ve seen employers make when working with remote employees?

    Just forgetting about them. For example, chatting about a problem in front of a whiteboard in the office instead of in a more remote-friendly medium. Assuming that people are getting information, that I think is a really common problem. That’s one reason why it’s better to lean towards communicating more than you think you need to, because it may well be that you think someone is getting information but they’re not. Not documenting decisions that are make, or communicating those decisions out. And just inadequate audiovisual setup, or not even having a go-to solution. Even if Vidyo wasn’t as working as well for us as it is, just the fact that this is the tool that we use to do this and this is where you go if you want to talk to someone, that makes a huge difference.

    Remote Worker Effectiveness

    Do you have any advice for remotes on how they can make themselves more successful as a remote employee?

    Probably the biggest thing is just to try to make yourself as visible as possible. As a remote employee, especially if you’re in a situation where the majority of people are local, as is my case, you have to make an extra effort to make yourself known to people. Participate in meetings. I do a lot of postmortem facilitation. Basically when an outage happens at Etsy, or it doesn’t have to be an outage, could be any kind of issue, we get a bunch of people together in a room and we have a facilitator lead people through the discussion, so I spend a lot of time facilitating these meetings.

    I’ve also taught some classes. At Etsy we have something called Etsy School a couple times a year. Anyone in the company can sign up to teach any subject, from wine-tasting to rock-climbing, whatever. I’ve taught a couple of those classes. Just generally making sure that people know who you are, and of course, visiting the office whenever you can. I try to go out at least once a quarter. Also making sure that you have a good home office environment, like you have a space dedicated to working.

    Do you have any other resources you can recommend for those thinking about hiring remotes or those already working remotely?

    The guys at 37 Signals wrote a really good book about remote working, called Remote. It’s more targeted towards convincing employers that they should hire remote people, but I think any remote worker could get something out of it. I would check that out. There’s a bunch of remotes that have formed a little IRC channel on Freenode, that anyone’s welcome to come by. It’s ##remotes, two hashes. You’re welcome to come by and chat with us there. There’s probably 30 people in there now.

    Brad, thank you so much.

    Great, yeah, thanks for having me. I love spreading the remote gospel.

    by Gareth Wilson at September 03, 2015 10:13 AM

    September 02, 2015

    Axis of Eval

    Grokking Reactive Demand Programming

    TL;DR: RDP is an exciting declarative model of how computational processes (behaviors) are connected by continuously updating values (signals) to effect changes on storage and external state (resources).

    I've come a bit closer to understanding David Barbour's Reactive Demand Programming model, and this has confirmed my previous hunch that RDP is one of the most interesting systems designs since Unix. If you're looking for new, better ways to structure dynamic, interactive applications, I strongly recommend checking out RDP.

    I would call RDP an orchestration model, since it cares about how you connect and assemble components of your app, and gives you a lot of freedom in what these components do and how they interact. This also fits with David's description of an RDP application as "a complex symphony of signals and declarative effects orchestrated in space and time".

    In terms of Unix, RDP's behaviors correspond to processes, signals correspond to pipes, and resources correspond to storage and other external, stateful things.

    Signals (pipes, channels)

    A signal continuously delivers a potentially changing value. The current implementation always updates the complete value, but RDP doesn't rule out diff/patch-based signal updates, to model e.g. a large set as a signal value.

    In addition to these simple signals carrying a single value, there are also compound signals, such as (x :&: y) which represents the concurrent, asynchronous product of signals x and y, IOW a signal representing two independently updating signals. Analogously, (x :|: y) represents a disjoint sum of signals, with either x or y being active at any given point in time.

    A signal is either active (carrying a value), or inactive (disrupted). Application-level errors have to be modelled as part of the value, there is no "stderr".

    Behaviors (processes, computation)

    A behavior won't do anything until you place a demand on it. You place a demand on a behavior by applying an input signal (the demand) to it; the behavior will produce an output signal for the duration of this application.

    Multiple demands can be placed on a behavior at the same time. The behavior can either reply to each input signal with a different output signal, or with the same output signal, depending on the purpose of the behavior. For example, a "calculator" behavior may take N input signals with expressions like "1 + 2" and "3 * 5" and deliver a distinct output for each input; on the other hand, a "sum" behavior may take N input signals carrying a number and produce a total sum as the output signal, which would be the same for all inputs.

    Behaviors can be composed into dataflow networks. A simple composition is the pipeline behavior, b1 >>> b2: the input signal of this pipeline behavior will be processed by the behavior b1; b1's output signal becomes the input signal for behavior b2; and finally, b2's output signal becomes the output of the whole pipeline behavior.

    The Sirea Haskell implementation of RDP comes with other behaviors such as bdup, that copies a single signal into both branches of a :&: product, for creating more complex networks of signals and behaviors. There are also primitives like bfirst and bsecond for running different behaviors against the branches of product signals, and bfmap for applying ordinary Haskell functions to signals. (See Arrows.)

    Resources (storage, external state)

    RDP doesn't say anything about state, so it has to come from the outside. Access to stateful resources such as filesystems is abstracted through behaviors: to access a filesystem you use a behavior like readFile "foo.txt" that continuously delivers the contents of the file "foo.txt" as output signal.

    Creating new resources in RDP is impossible, so resource discovery idioms are used: for example, to "create" a file, you use a UUID as its name, and it will be automatically created the first time you write to it.

    I hope this has been helpful. For further reading, check out the extensive README of the Sirea RDP implementation, and David Barbour's blog.

    by Manuel Simoni ( at September 02, 2015 09:09 PM

    Mark Bernstein

    Two Boyfriends

    In an interesting essay in Interactive Digital Narrative (Hartmut Koenitz et al., eds.), Janet Murray works to schematize the romantic plot, “A Tale Of Two Boyfriends” that encompasses all stories about love triangles. (Someone is supposed to have said that the Bloomsbury crowd lived in squares, painted in circles, and loved in triangles.) She starts out by frankly pointing out a problem in McCoy’s highly-respected Prom Week: the dialogue.

    Zack: Do you want to date or whatever?

    Monica: I kinda only should be seen dating people you know popular people.

    Murray complains that these characters are “under-dramatized and over-specified”, and she is not wrong. These characters are backed by a set of thousands of sociocultural considerations and constraints, but not only do the seams show, we can hardly see anything except seams.

    First, we’re using dialect to reinforce the idea that these are high school kids negotiating the prom. Dialect can be powerful, but it’s extremely tricky because it requires close observation and a degree of exactitude. Do high school kids say “date”? Would these high school kids say “date”, not “go out” or “hook up” or “hang out” or “do something”? Wouldn’t a more specific invitation be more sensible: “Do you want to see the new Star Wars, or something?” If “date” is probably wrong era, “whatever” is simply the wrong word; I believe a kid might say that, but no kid would mean to say that. “Whatever” deprecates the activity:

    Mom: Get up dear! We’ve got to go to granny’s flute recital and it starts at 9am.”

    Monica: Whatever.

    Monica’s misplaced hesitations are simply condescending; not only is she shallow, but she doesn’t know how to say “uh” or where to put her “uh’s”. What a doofus.

    Worse, we don’t need to reinforce the notion that these are high school kids. The premise and setting say “kids” at every turn. There’s no imperative that the kids speak with strict realism: Buffy The Vampire Slayer doesn’t. Romeo and Juliet don’t, either. No one has to be reminded that Juliet’s a kid.

    Each line shouts “I am a speech act!” in every sentence: the character has a state and a goal and the line either advances that goal or describes the state. Yes, people say things for a reason, and they do things to get ahead, but it’s more complicated. Zack wants to “date” Monica: OK. It’s that kind of story -- fine. Zack is a guy who wants to date Monica. But, does Zack want to date Monica because he adores Monica, because it’d be prestigious to be dating Monica, because he really wants to sleep with Monica, because he really wants to sleep with someone, because he doesn’t want his Mom to know he’s gay and he thinks she’s beginning to suspect, because Sarah bet him box seats for the Knicks game that he wouldn’t get to second base? And besides Zack being the boy who wants to date Monica, he’s also the boy who is pretty good at Math, has a promising jump shot that might play in Div III, is worried that his uncle’s fooling around with his younger sister, thinks the novels of Susan Sontag are overrated and that Black Lives Matter.

    You may object that neither Susan Sontag and Trayvon Martin will get him forwarder with Project Monica. But my coolest cousin met her husband in jail at Berkeley in the 1960s; you never know. People talk about ideas while they negotiate these things; otherwise, school kids would just ask each other, “wanna fuck sometime?” And they talk about ideas the rest of the time, too; that’s what makes these things love stories and not just genetic records.

    A further problem is that so many interactive narratives – Prom Week, Façade – use a ton of screen space for crudely animated enactments. Others – A Dark Room, Blood and Laurels – avoid most of the artwork but wind up using lots of screen space for mechanics. The result is that almost everything needs to be carried in dialogue, and the dialogues need to be very, very short. There’s just not enough air to let the characters be themselves.

    One alternative involves a lot of words: give the characters some air, let them have ideas. Murray’s most of the way there with her schematic of the Boyfriend of ObliGation (BOG) and the Boyfriend of Desire (BOD – the interactive narrative people love acronyms). We can use archetypes but we don’t want to hear about archetypes: we want to hear about people, and to do that, we have to give the people space to do and say things.

    If all those words are just too much, you could do a lot with art – but again the art is going to have to be very specific because it’s got to convey a ton of information. It’s going to need to tell you about Sontag and Trayvon without the words.

    Two Boyfriends
    Cesar Santos, First Tatoo

    OK: we’ve got very specific people and a very specific moment, and we’ve also got Caravaggio’s Incredulity of St. Thomas. There are ideas here, and there’s narrative. But I think you’re going to need this level of thoughtfulness, and perhaps even more detail in setting, to make it work.

    September 02, 2015 03:29 PM

    The 39 Steps

    John Buchan’s classic thriller begins when young and wealthy Colonial miner Richard Hannay, a man about London, comes home to his Picaddilly flat to meet a terrified neighbor who says that he is a dead man. The neighbor tells Hannay a convincing story of espionage – it’s 1912 – and Hannay gives him refuge. The next day, the visitor is murdered and Hannay, framed, is on the run. A classic.

    September 02, 2015 03:18 PM

    Dave Winer

    Progress on my Slack clone

    I spent the last 1.5 weeks working on a very simple chat app that implements a subset of the Slack API.

    It works!

    I baked the server side of the code into a new version nodeStorage, which is a convenient place to put it because it already has full support for Twitter identity and of course storage, both of which come in handy for this app.

    I'm not expecting to release the client soon. I may use it as a chat function for Scripting News, but first I want to let the whole thing settle in.

    However, I will include the server-side for webhooks in a new release of nodeStorage. That to me is the really interesting part. Chat programs are commonplace, but such a nice simple API implemented in Node.js seems like it might have value to others. (Update: The new version of nodeStorage has been released.)

    It's been a really fun project.

    PS: I wrote about this project last month.

    September 02, 2015 02:40 PM

    CitiBike goes north

    Things are going to get interesting as CitiBike goes north up the west side of Manhattan.

    The yellow markers in the map below are stations that haven't been installed yet. But some of the new ones have already been installed.

    A picture named citibikemap.png

    Places you'll be able to get to by bike: Lincoln Center, Zabar's, Barney Greengrass, the Museum of Natural History, the Metropolitan Museum, 72nd St stores, the Marina, a bunch of new places on the edges of the park. I only wish they put a station near the fountain in the middle of the park. It would probably have to be huge it would be so well-used. (And it would lead to lots of abuse by bikes on walking paths, which is probably why they didn't do it.)


    If you have a restaurant or shop in Manhattan, west Brooklyn or Queens, pay for a CitiBike station outside your business, and let your customers know they can conveniently ride a bike to come eat or shop there. It'll be like having a subway stop in front of your store, soon enough. An investment for the future of the city.

    September 02, 2015 12:37 PM

    Launching a Mac app from Node?

    Back in 1999, I needed to keep Frontier running on a Mac server, so I wrote a little AppleScript that watched to see if the app was still running, and if not, launch it.

    I need the same functionality today, but I'd rather use Node than AppleScript, if possible.

    The question

    Is there a way to make system calls to the Mac OS from Node that allow you to:

    1. Tell if an app is still running.

    2. Launch an app.

    Any help much appreciated.

    PS: Cross-posted on Facebook.


    Ted Howard posted a solution on the Frontier-User list.

    It took a few tries but I got it working on my Mac.

    Problem solved.

    September 02, 2015 11:22 AM

    September 01, 2015

    Dave Winer

    We're still in the Information Dark Ages

    We're still not all the way there with social networking.

    Facebook knows who I'm friends with, at least in a Facebook sense.

    Now let's say I'm driving into San Francisco, going over the Golden Gate Bridge and wondering as I look at the skyline of the city, "Who do I know here?"

    That's the question I had in 1979 when I was moving to the Bay Area from Wisconsin. Of course at the time there was no way to get that information, and I'm pretty sure it's still not possible today.

    This was part of my definition of "information poverty."

    I had another definition, and that part has been solved.

    I was at my brother's house in Palo Alto in 1991. The Mets were playing the Dodgers in LA. Of course we weren't watching it or listening to it on the radio, there was no way to do that.

    I asked a question -- is there a way we can find out the score in the Mets game right now?

    We tried calling the stadium. Called the NY and LA news organizations. We even looked on Compuserve. No scores.

    Of course today you can listen to the game anywhere in the US using the MLB app. And there are a million ways to get the current score. So by that measure of information poverty we're out of the dark ages.

    PS: The Mets won again last night and the Nationals lost, moving the Mets ahead by 6.5 games in first place in the National League East. Lookin pretty good Mookie!

    PPS: Colon pitched a great game through 8. But I have to say I do not like the uniforms they wore last night. I know support the troops, but please this is baseball, not combat.

    PPPS: Another question I'd like to ask Facebook. Do I have any friends who live in DC who are Mets fans?

    September 01, 2015 12:50 PM

    Fog Creek – Interview with Chris Fidao

    In, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.

    Today’s guest is Chris Fidao, a Software Engineer at UserScape. Chris is the creator of Servers for Hackers, which is a both a book and video series that provides programmers with all they need to know about server administration.

    Chris Fidao
    Location: San Antonio, TX, US
    Current Role: Software Engineer at UserScape

    How did you get into software development?

    My father did graphic design and bought one of those tan, flat Macintoshes, a few years before 14.4k modems became a regular household item. If I remember right, it was a Quadra 610. This started me on building web pages, but I didn’t do any “real” (air quotes emphasized) programming on it! So I grew up working on HTML and CSS early, which I later expanded upon after graduating college and learning to program. I didn’t look for work immediately after graduating, instead I took about 9 months to learn to program and find smaller companies to apply for. I intentionally shied away from large corporations after some boring/terrible internships. Whilst I had a basic programming class in college (C++), I didn’t really learn what programming was then. So I ended up learning to program from At first, I was heavily using Flash with ActionScript 3, which is a really great language! I had a good introduction to typing, events and OOP which interacted with visual elements. It was a really great language to use while learning! I also learned PHP and MySQL basics on too. I’d find the pace of learning too slow now, but then each video was a gem.


    Tell us a little about your current role

    I work at UserScape, developing on HelpSpot, doing technical customer support and working partially in DevOps in support of HelpSpot’s Cloud – our hosted solution for HelpSpot. One of the more interesting things I’ve had to do recently was to use Ansible programmatically to help provision servers. This listened for a queue job to tell it what server to provision, along with some variables that we wouldn’t know ahead of time, since every client has some unique information. This was interesting as I had to dive into Ansible fairly deeply and figure something out that wasn’t popularly being done. It’s usually run on the command line instead of from within code.

    But my side projects keep me really busy too! The side projects have all gravitated towards servers and DevOps:

    • Vaprobash, a series of bash scripts useful for provisioning (lots of) software on Vagrant virtual machines. The emphasis is ease of use and understanding, which is nice as a teaching tool (and to get pull requests!).
    • Servers for Hackers eBook – This is a project I made that includes a 300+ page book, case studies and a few videos
    • Servers for Hackers – Lots of videos on what programmers need to know about web servers. This is a little geared towards PHP developers but is has a lot of generally useful videos as well. The topics range from security, deployment, Vagrant, Ansible and a lot more.
    • I’m also creating a series of video courses, starting with Deploy!, which will be all about developing a deployment strategy.


    When are you at your happiest whilst coding?

    Well, nowadays it’s simply when I’m actually coding, instead of doing the things I need to get to the point where I can be programming.

    What is your dev environment?

    I use a Macintosh since it’s the closest I can get to a web server without sacrificing the productivity tools I need (Office, Mail, Photoshop, code editors). I use Vagrant for developing on local servers and PHPStorm for coding in PHP – the shortcuts, code hinting, debugging and other features are too powerful to go without!

    I mostly code sitting, using music to zone-in when I need to concentrate. Even though it doesn’t really prevent me from browsing or losing focus, I do find that I focus much better with good headphones and some music (the fewer lyrics the better).

    What are your favorite books or resources about development?

    I love Uncle Bob’s books on clean, pragmatic code. Some higher level books such as the Domain Driven Design books are overly heavy and in the end not relevant enough to my day to day work (which is generally in very small teams on projects with indefinite deadlines).


    What technologies are you currently trying out or want an excuse to try?

    Golang! I don’t think it’s a good language to build a web application on, but it’s great for system tooling or “services” (plumbing of a web application). Because I am mostly working on the “web” part of web applications, I haven’t had much time/need to dig into it. I also really want to find time to dig more into monitoring/logging tools (Nagios/ELK stack + Elastic’s new “Beats”).

    When not coding, what do you like to do?

    I play some guitar and watch movies, but my side projects keep me so busy that I can’t truly say I do other things.

    What advice would you give to a younger version of yourself starting out in development?

    If you find yourself telling someone that they “should” do something, consider what would convince you to go another route. Try to word advice as “what you would do” instead of “what someone else should do”. That change in mindset leaves you open to change your mind! The amount you don’t know is astounding – the context that someone else is working in, the technologies in play, if they need something long-term or short-term. If you don’t know the trade-offs between different technologies or decisions made in programming, then you don’t know enough to truly give the best advice. The best you can do is let someone know what you would do on a topic based on your current knowledge and understanding.


    Thanks to Chris for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.

    Recent Interviews

    Lindi Emoungu
    Lindi Emoungu
    Jude Allred
    Jude Allred
    Richard Schneeman
    Richard Schneeman
    Dayle Rees
    Dayle Rees

    by Gareth Wilson at September 01, 2015 11:00 AM

    August 31, 2015

    Tim Ferriss


    Reid Hoffman (right) with Ana (top) and Michael (left) McCullough, co-founders of (Photo: Will Miller)

    Reid Hoffman (right) with Ana (top) and Michael (left) McCullough, co-founders of (Photo: Will Miller)

    Reid Hoffman is often referred to as “The Oracle of Silicon Valley” by tech insiders, who look at his company-building and investing track record (Facebook, Airbnb, Flickr, etc.) with awe. Reid is Co-Founder and Executive Chairman of LinkedIn, which has more than 300 million users. He was previously Executive Vice President at PayPal, which was purchased by eBay for $1.5 billion. There, he was nicknamed “firefighter-in-chief” by CEO Peter Thiel.

    Noted venture capitalist David Sze says of Reid, “[he] is arguably the most successful angel investor in the past decade.” They are now both partners at Greylock Partners.

    In this podcast, he is joined by Michael McCullough, MD, a close friend, co-founder of, and a successful investor with training as an ER physician. Michael is as an Assistant Clinical Professor at UCSF and previously served as the on-call ER physician to the Dalai Lama. Michael is also a Rhodes Scholar, Kaufman Fellow, and Ashoka Fellow. An avid meditator, he is particularly interested in investing in technologies and companies pertaining to the mind.

    We cover A LOT, including:

    • Meeting Mark Zuckerberg for the first time and deciding to invest in Facebook
    • “Fire-fighting” in startups and beyond
    • Using board games to develop strategy
    • Reid’s view of what Uber has done well and what they could improve
    • Some of Reid’s suggested philosophers for entrepreneurs
    • Non-technical founders and symbolic systems
    • Going “off algorithm” in the ER to manage life-and-death decisions
    • The 3 types of CEOs
    • What Reid has learned from his network, including the founders of Airbnb,, etc.

    And, of course, we discuss QuestBridge, as Reid and I are both on the advisory board…

    QuestBridge currently supplies more exceptional low-income talent to top universities than all other non-profits combined (more than 2,000 students a year on $500 million in financial aid). QuestBridge has created a single, standardized college application accepted by 36 top universities like Stanford, MIT, Amherst and Yale. This allows them to use innovative campaigns (e.g. laptop giveaway forms that double as college applications) to offer scholarships to kids who might otherwise not even think of college. If you want to break the cycle of poverty, QuestBridge is one of the most fascinating tools I’ve ever seen.

    I’d like to invite all of my readers and listeners to pour benevolent gasoline on this fire by contributing to one of QuestBridge’s prizes in Science (STEM) or the Arts. Just click here to check them out. The “prizes” are giveaway items like laptops or internships, and when kids apply for a prize, they are simultaneously applying to college. Student applications are due September 28, so there’s still time to influence this year.

    If you prefer, you can create your own prize for a group you feel strongly about, like top low-income women, top low-income students from any geographic area (e.g. your home state), or those kids interested in a particular career (e.g. engineering). In effect, you might say, “I’d like to encourage Hispanic kids in Chicago [or girls in Tuscon interested in computer science, etc.] to apply to college. I’m happy to offer three iPads,” or something like that.

    It doesn’t take much, and it really works wonders. For instance, QuestBridge’s Native American prize (20 laptops total) increased the Native American applicant pool from 34 to more than 350 in <12 months.

    To create your own prize, or to simply discuss support or partnership, please reach out directly to Michael [AT] QuestBridge {DOT} org.

    Again, to donate to existing prizes (e.g. STEM, the Arts, Rural), please click here.  That’s a simple and fast way to make a real impact.



    Want to hear another podcast from an early stage investor? — Listen to my conversations with Chris Sacca. In this episode, we discuss unfair advantages, how Chris chooses founders and investments, stories of missed opportunities, and the styles that differentiate Wall Street from Silicon Valley investors (stream below or right-click here to download):

    This podcast is brought to you by MeUndiesHave you ever wanted to be as powerful as a mullet-wearing ninja from the 1980’s, or as sleek as a black panther in the Amazon? Of course you have, and that’s where MeUndies comes in. I’ve spent the last 2-3 weeks wearing underwear from these guys 24/7, and they are the most comfortable and colorful underwear I’ve ever owned. Their materials are 2x softer than cotton, as evaluated using the Kawabata method. Check out to see my current faves (some are awesomely ridiculous) and, while you’re at it, don’t miss lots of hot ladies wearing MeUndies.

    This podcast is also brought to you by 99Designs, the world’s largest marketplace of graphic designers. Did you know I used 99Designs to rapid prototype the cover for The 4-Hour Body? Here are some of the impressive results.  Click this link and get a free $99 upgrade.  Give it a test run…

    QUESTION OF THE DAY: If you had the SAT scores and e-mail addresses of every high school student in the US, how would you increase the number of kids who apply to college? Let me know in the comments.

    Scroll below for links and show notes…


    Selected Links from the Episode

    NYTimes | WSJ

    Show Notes

    • How do you answer the question, “What do you do?”  [7:33]
    • The circumstances of Michael McCullough’s birth [9:08]
    • Lessons learned from Reid Hoffman’s unconventional high school [10:03]
    • How Reid Hoffman evaluates the importance of a founder’s technical skills [11:33]
    • The philosophy of Reid Hoffman [12:58]
    • What it means to Michael McCullough to go off algorithm [17:08]
    • What it’s like to watch a person’s eyes as they pass from alive to not-alive [20:58]
    • What separates a good ER physician from a great ER physician [21:53]
    • What makes a good “entrepreneurial firefighter” and how to work with bureaucracies [24:03]
    • Recommendations for developing strategic thinking [30:13]
    • What Uber has done well and what could have been executed more effectively/strategically [33:08]
    • On meeting Mark Zuckerberg and investing in Facebook [35:28]
    • Mark Pincus’s role in Facebook when Reid Hoffman decided to invest [38:23]
    • On deciding not to take the role of CEO [39:53]
    • What founders should think about when deciding to hire a CEO [42:43]
    • Michael McCullough’s first 60-90 minutes, meditation, and neurofeedback [47:38]
    • Reid Hoffman’s morning rituals and how he works through creative problems [49:53]
    • The first thing that comes to mind when mentioning specific people in Reid Hoffman’s network [54:23]
    • Most gifted book [1:04:28]
    • Questbridge – What it is and what it does [1:26:53]
    • If you could have one billboard anywhere, where would it be and what would it say? [1:19:53]
    • Asks or requests for the listeners [1:20:48]

    People Mentioned

    by Tim Ferriss at August 31, 2015 08:29 PM

    Mark Bernstein

    The Forever War

    A fresh visit to this popular and influential military SF tale, which refracts Haldeman’s experience of Vietnam through an Iowa MFA and also through Starship Troopers. Haldeman, in turn, is clearly the touchstone for such later work as Scalzi’s Old Man’s War and perhaps for Bujold’s Vorkosigan saga. Beyond his adventure-filled but unjingoistic use of combat to drive the narrative, Haldeman’s story of the soldier’s progressive alienation from mankind – by the time he comes back, everyone has changed and the world for which he was fighting is a strange and alien place – anticipate’s Stross’s singularity stories and also anticipates what has become the mainstream narrative form of the Iraq and Afghanistan Wars.

    August 31, 2015 08:16 PM

    Dave Winer

    Twitter NT

    On Saturday I wrote a piece about Windows NT, the operating system Microsoft created to run alongside the original Windows, as its eventual successor.

    In a similar way, that's what Twitter needs. New technology, running off on the side, for pioneering users, the kind of people who were attracted to Twitter in the first place, the people who created the culture of Twitter.

    Let's get the band back together, and this time, let's use what we learned the first time around to do it better.

    New technology for Twitter

    Here's what I would like to see in Twitter NT.

    1. Easy programmability via a scripting language (JavaScript of course) that works directly with Twitter's API, in the browser. This is within reach now.

    2. A more powerful data model. Let us attach any JSON structure to a tweet. There's plenty of prior art here going back to the original Mac toolbox, which allowed developers to add a refcon to a window. From that all kinds of amazing things blossomed.

    3. Allow us to define in-browser callbacks that determine how a tweet is displayed, using the JSON data to either guide the rendering, or to provide the data being rendered. Instead of trying to force uniformity, let a thousand flowers bloom.

    4. This new-technology-Twitter is walled-off from the celebrity version -- the one that entertainers, politicians, sports heroes and their fans use. Our tweets don't exist in their world, and vice versa. What we get is a solid back-end based on Twitter's cloud. And a license to explore and hopefully create the future.

    5. Give it a few years to gestate, new ideas will flow from the place the hippies play to the news system of the future. This is where we've been aching to go with an Internet scale notification system.

    In 2011, Twitter took a turn away from being a platform. This was, imho, the big mistake. Now the right thing to do is become the realtime platform that still does not exist on the Internet. Twitter is in the best position to provide it, for now. That opportunity won't exist forever.

    August 31, 2015 11:54 AM

    August 30, 2015

    Dave Winer

    Why you must watch BoJack Horseman

    Note: There are a few nano-spoilers here, but you can safely read this and still have 100 percent of the fun watching the show, because nothing can begin to explain how spacy and intelligent it actually is.

    This is more of a sales pitch than a disclosure.

    Why you must watch BoJack Horseman

    1. Did you like Breaking Bad? Well, Aaron Paul is one of the stars of this show. He's the guy who played Jesse Pinkman. He's even funnier in this show.

    2. Did you like Fantastic Mr Fox? Well, this is a lot like that too, except there are are more humans, and instead of the star being a fox, he's a horse.

    3. As in Fantastic Mr Fox, the animals know they're animals.

    4. Do you like dogs? One of the main characters is a dog. He has a human wife.

    5. How about JK Simmons, who played Dr Skoda on Law & Order? He's got a nice role, a turtle who is a Hollywoo mogul.

    6. Speaking of Hollywoo, that's where this takes place. You'll be surprised to find out why.

    7. Did you notice that the MSNBSea anchor sounds like like Keith Olbermann? Heh.

    8. I'm going to compare this to Big Lebowski. I think in many ways it's as funny and daring as that great Coen Brothers comedy. There isn't a single character as great as The Dude, but there are so many of them, and it's about LA, and it's really funny.

    9. J.D. Salinger is in the show, and he's funny!

    10. Will Arnett plays BoJack.

    11. Other actors, comedians: Stephen Colbert, Angelica Huston, Kristin Chenoweth, Stanley Tucci.

    Netflix has another hit, but it's a sleeper.

    Most people haven't heard of it. Yet.

    PS: Cross-posted on Facebook.

    August 30, 2015 04:59 PM

    Greg Linden

    Working at Google

    I joined Google a few months ago. I've wanted to work at Google for a long time. I first interviewed there back in 2003!

    I've written on this blog since 2004, during Findory and beyond, but, like many blogs, posts have slowed in recent years. Unfortunately, I don't expect to be able to post much here in the coming months either.

    Thanks for reading all these years. I hope you enjoyed this blog, and I hope to be able to post frequently again at some point in the future.

    by Greg Linden ( at August 30, 2015 02:51 PM

    Dave Winer

    Markus Persson and life after success

    I read today's articles about Markus Persson with interest. I know the story, I experienced it myself a long time ago. Achieving all the success you wanted is not as simple as you might think. I've written about that before here on my blog, that's not the purpose of this piece.

    The three tweets

    Here are the three tweets everyone is quoting:

    #1: "Found a great girl, but she's afraid of me and my lifestyle and went with a normal person instead."

    #2: "I would Musk and try to save the world, but that just exposes me to the same type of assholes that made me sell minecraft again."

    #3: "People who made sudden success are telling me this is normal and will pass. That's good to know! I guess I'll take a shower then!"

    It's #2 that's the most disturbing to me.

    Why couldn't he have continued to work on Minecraft?

    I ask this question because I did the same thing with blogging and RSS. I walked away from it because defending against personal attacks got to be all I was doing. The people who were trying to trash my rep were experts. I had forgotten how bad it was, until (also yesterday) I read my blog archive from late August 2005. I had pointed to it because of the ten-year Katrina anniversary. But also intermixed in there were my responses to all the trashing. No, there was no justification for it, other than people didn't want me to be able to do what I was doing, I guess. Or they were jealous. Or who the fuck knows. All I know for sure is that I wanted to work with other people, and there were people working in the shadows making sure that no one would work with me.

    I think the mistake successful tech people make that people in other arts don't is we tend to believe in the communication tools, and we want to use them the same we did before we became targets. But as your influence, fame and fortune grow, so does your follower count, and so does the hate.

    A guy who was able to create something as wonderful as Minecraft should, if he wants to, be creating the next thing after Minecraft! Did the Beatles stop recording after Sgt Pepper? We need to create safe contexts for our superstars to keep doing what they love to do.

    August 30, 2015 12:34 PM

    August 29, 2015

    Mark Bernstein

    Six Degrees

    Nice 10-minute YouTube video on social graphs, with some decent not-too-handwavy graph theory. Via David Kolb.

    August 29, 2015 07:34 PM

    Dave Winer

    Windows NT

    Flashback to 1995

    It's roughly the 20th anniversary of Windows 95.

    I was there, in Redmond when it rolled out. With Jay Leno and Bill Gates. I got a private demo of Blackbird, which was supposed to be Visual Basic for the Internet.

    Quite a day. It was the one time that Microsoft got an Apple-style euphoria for a product rollout. Long lines outside retail stores. They all wanted to buy a box with a CD inside. Back then you didn't download software from the net.

    Windows 95 was the second to last release of Windows "old" technology, based on MS-DOS, if I recall correctly. Off on the side they had a project called NT. It was the future. On that OS, apps were protected from each other. On Windows OT, if an app went crazy it could kill the OS, and all the apps, and lock up the keyboard and screen. You had to press Ctrl-Alt-Delete or pull the power to reboot to continue using the computer.

    OT was splashy, but it crashed. Jay Leno probably used OT. 20 years ago it was everyone was so excited about.

    New technology for Windows

    NT was cool and wonderful. I was a Mac user, but in a couple of years I would be an NT user. I never used Windows 95 or its descendants. I had used earlier versions of the OS, and wrote software that had to defend against hostile competitors that took advantage of the free-for-all OT approach.

    NT was good. It was built on the tried-and-true principles of minicomputer and mainframe OSes, not from the wonderful free-for-all days of the early PC (it really was cool to have the whole machine at your disposal). Neither was bad or good, but the base to build on was the one where software couldn't go to war with other software, intentionally or unintentionally.

    August 29, 2015 03:47 PM

    August 28, 2015

    Tim Ferriss


    The Tim Ferriss Show with Brené Brown

    Dr. Brené Brown (@BreneBrown) is a research professor at the University of Houston Graduate College of Social Work. Brené’s 2010 TEDx Houston talk, The Power of Vulnerability, has been viewed more than 20 million times and is one of the top five most viewed TED talks in the world.

    She has spent the past 13 years studying vulnerability, courage, worthiness, and shame. Brené is the author of two #1 New York Times bestsellers: Daring Greatly and The Gifts of Imperfection. Her brand-new book is titled Rising Strong. In it, she writes, “If we are brave enough, often enough, we will fall. This is a book about what it takes to get back up.”

    She is also the founder and CEO for The Daring Way™, an organization that brings her work on vulnerability, courage, shame and worthiness to organizations, schools, communities, and families.




    Want to hear another podcast with a world class emotional intelligence practitioner? — Listen to my conversations with Josh Waitzkin. In this episode, we discuss meditation styles, morning rituals and why you should study the artists rather than the art critics (stream below or right-click here to download):


    This podcast is brought to you by Vimeo Pro, which is the ideal video hosting platform for entrepreneurs. In fact, a bunch of my start-ups are already using Vimeo Pro. WealthFront uses it to explain how WealthFront works. TaskRabbit uses it to tell the company’s story. There are many other names who you would recognize among their customers (AirBnB, Etsy, etc.) Why do they use it? Vimeo Pro provides enterprise level video hosting for a fraction of the usual cost. Features include:

    • Gorgeous high-quality playback with no ads
    • Up to 20 GB of video storage every week
    • Unlimited plays and views
    • A fully customizable video player, which can include your company logo, custom outro, and more

    You get all this for just $199 per year (that’s only $17 per/mo.) There are no complicated bandwidth calculations or hidden fees. Try it risk-free for 30 days. Just go to to check it out. If you like it, you can use the promo code “Tim” to get 25% off. This is a special discount just for you guys.

    This podcast is also brought to you by Wealthfront. Wealthfront is a massively disruptive (in a good way) set-it-and-forget-it investing service, led by technologists from places like Apple and world-famous investors. It has exploded in popularity in the last 2 years, and now has more than $2.5B under management. In fact, some of my good investor friends in Silicon Valley have millions of their own money in Wealthfront. Why? Because you can get services previously limited to the ultra-wealthy and only pay pennies on the dollar for them, and it’s all through smarter software instead of retail locations and bloated sales teams

    Check out, take their risk assessment quiz, which only takes 2-5 minutes, and they’ll show you—for free–exactly the portfolio they’d put you in. If you want to just take their advice and do it yourself, you can. Or, as I would, you can set it and forget it.  Well worth a few minutes:

    Mandatory disclaimer: Wealthfront Inc. is an SEC registered Investment Advisor.

    Investing in securities involves risks, and there is the possibility of losing money. Past performance is no guarantee of future results. Please visit Wealthfront dot com to read their full disclosure.

    QUESTION(S) OF THE DAY: What short-term discomfort are you avoiding now? What is preventing you from taking action? Please let me know in the comments.

    Scroll below for links and show notes…


    Selected Links from the Episode

    • Watch Brené Brown’s TED Talks:

    The Power of VulnerabilityListening to Shame

    Twitter | Instagram | Facebook | Courage Works

    Show Notes

    • How Brené Brown answers the question, “What do you do?” [7:38]
    • What make a highly popular TED talk [1:45]
    • How Brené Brown prepares for TED talks [13:16]
    • Defining the terms “vulnerability” and “shame” (Learn more about how to deal with haters) [15:31]
    • Deconstructing shame from an evolutionary standpoint [24:31]
    • How to evaluate the question, “Are you daring greatly today?”[39:06]
    • Which schools of philosophy resonate most with Brown’s research? [46:31]
    • Misinterpretations of vulnerability [49:46]
    • How does vulnerability coexist with masculine virtues and traits? [55:31]
    • What are some daily practices or exercises to develop vulnerability? [1:02:46]
    • Brené Brown’s morning rituals [1:06:16]
    • Most gifted books [1:17:06]
    • Why she wrote Rising Strong [1:08:46]
    • Describing the method for collecting data for Rising Strong [1:09:41]
    • The ideal sequence for reading Brené Brown’s work [1:13:06]
    • The first thing that comes to mind when Brené Brown thinks of the word successful [1:14:31]
    • What purchase of $100 or less has most positively affected your life in recent memory? [1:15:51]
    • If you could have one billboard anywhere, where would it be and what would it say? [1:16:46]
    • Advice for Brené Brown’s thirty-year-old self [1:17:46]
    • Asks or requests for the listeners [1:19:19]

    People Mentioned

    by Tim Ferriss at August 28, 2015 03:27 PM

    August 27, 2015

    Ian Bicking

    Conway’s Corollary

    Conway’s Law states:

    organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations

    I’ve always read this as an accusation: we are doomed to recreate the structure of our organizations in the structure of software projects. And further: projects cannot become their True Selves, cannot realize the most superior design, unless the organization is itself practically structureless. That only without the constraints of structure can the engineer make the truly correct choices. Michelangelo sculpted from marble, a smooth and uniform stone, not from an aggregate, where any hit with the chisel might reveal only the chaotic structure and fault lines of the rock and not his vision.

    But most software is built, not revealed. I’m starting to believe that Conway’s observation is a corollary, not so clearly cause-and-effect. Maybe we should work with it, not struggle against it. (With age I’ve lost the passion for pointless struggle.) It’s not that developers can’t imagine a design that goes contrary to the organizational structure, it’s that they can’t ship those designs. What we’re seeing is natural selection. And when through force of will such a design is shipped, that it survives and is maintained depends on whether that the organization changed in the process, whether a structure was created to support that design.

    A second skepticism: must a particular construction and modularity of code be paramount? Code is malleable, and its modularity is for the purpose of humans. Most of what we do disappears anyway when the machine takes over – functions are inlined, types erased, the pieces become linked, and the machine doesn’t care one whit about everything we’ve done to make the software comprehensible. Modularity is to serve our purposes. And sometimes organization structure serves a purpose; we change it to meet goals, and we shouldn’t assume the people who change it are just busybodies. But those changes are often aspirational, and so those changes are setting ourselves up for conflict as the new structure probably does not mirror the software design.

    If the parts of an organization (e.g. teams, departments, or subdivisions) do not closely reflect the essential parts of the product, or if the relationship between organizations do not reflect the relationships between product parts, then the project will be in trouble… Therefore: Make sure the organization is compatible with the product architecture – Coplien and Harrison

    So change the architecture! There’s more than one way to resolve these tensions.

    A last speculation: as described in the Second System Effect we see teams rearchitect systems with excessive modularity and abstraction. Maybe because they remember all these conflicts, they remember all the times organizational structure and product motivations didn’t match architecture. The team makes an incorrect response by creating an architecture that can simultaneously embody all imagined organizational structures, a granularity that embodies not just current organizational tensions but also organizational boundaries that have come and gone. But the value is only in predicting future changes in structure, and only then if you are lucky.

    Maybe we should look at Conway’s Law as a prescription: projects should only have hard boundaries where there are organizational boundaries. Soft boundaries and definitions still exist everywhere: just like we give local variables meaningful names (even though outside the function no one can tell the difference), we might also create abstractions and modularity that serve immediate and concrete purposes. But they should only be built for the moment and the task at hand. Extra effort should be applied to being ready to refactor in the future, not predicting and embodying those predictions in present modularity. Perhaps this is another rephrasing of Agile and YAGNI. Code is a liability, agency over that code is an asset.

    by Ian Bicking at August 27, 2015 05:00 AM

    August 26, 2015

    Mark Bernstein


    The discussion of hypertext fiction in the past decade has often been dominated by the question of immersion. If the reader is asked to make choices or to follow links, doesn’t that distract them from the perfluent dream, from getting lost in the book?

    Michael Dirda’s essay on reading “After The Golden Age” is a useful reminder here that grownups don’t read the way kids read. In those long mythic afternoons of your Golden Age, sure, maybe you did read Sherlock Holmes and Tolkien, thinking of nothing more than whether Sherlock would solve the puzzle or whether Frodo could ever evade the armies of Mordor.

    You could do that because you didn’t know anything and you didn’t know better. You paid no attention to craft: books happen, like dinner, they’re not something you make, they’re something you expect and, if they don’t appear when needed, something you ask for. You didn’t argue with the author, either, because you were a kid and kids don’t argue with grownups (except their parents of course). You didn’t stop to compare Sherlock to Poirot or Spade or Wimsey or Longmire because you were a kid and you hadn’t yet met the others.

    Sure, you can recapture some of that sense of immersion with the right book at the right moment. You can get something like it for a while in film and theater, and perhaps in some computer games. Wine is the thing that makes us happy for no reason: there’s a reason why sex and drugs and rock ’n’ roll go together. Still, you can’t really go home again, and you only imagine that you want to.

    August 26, 2015 07:07 PM

    Tim Ferriss


    How to build a world class network

    Photo by Ron Herrman

    “Don’t dismiss people, don’t be a dick, and don’t rush. Play the long game.”
    – Tim Ferriss


    Welcome to a special edition of The Tim Ferriss Show. Back in 2007, I experienced a massive tipping point for The 4-Hour Workweek at the South by Southwest (SXSW) conference held in Austin, Texas. Two or three days played a key role in the book becoming a worldwide bestseller in 40+ languages.

    So what exactly happened at the event? How did I optimize those 2-3 days?

    The below audio is a presentation I recently gave about a better, more effective way to network. My suggestions might surprise you or seem counterintuitive–the best way to build a world-class network quickly is to spend very little time networking, at least not in the “ugh, gross” sleazy sense of the word.

    In this episode, you’ll learn:

    • How SXSW played a role in the success of The 4-Hour Workweek
    • How you can “stack the deck” for your own product launches
    • Simple biohacks for handling booze overload and sleep deprivation
    • Why it’s so important to meet people in person  to build your network
    • The most common mistakes people make when attempting to “network”
    • How to interact with A-listers (or opt not to)
    • How to enjoy the ride and not end  up exhausted with a pocket full of business cards that do nothing
    • And much, much more…

    If you are able to apply a few lessons from this talk, you may find that you never have to network again.

    There is a better way.



    Want to hear a podcast relating to mental performance and stamina? — Listen to my conversations with my friend, Ed Cooke, a Grandmaster of Memory. In this episode, we discuss mental performance, imagination, and productive mischief (stream below or right-click part 1 here and part 2 here to download):

    Still looking for more? — Listen to my conversations with Pavel Tsatsouline on the science of strength and art of physical performance (stream below or right-click here to download):

    This episode is brought to you advertisement-free. Want this to happen more often?

    Every Friday, I send out a very short email called 5-Bullet Friday. It includes the coolest things I’ve been playing with that week, such as favorite articles, gizmos and gadgets, movies, and other stuff you can use immediately.

    Sign up for a week and give it a try.  It’s 100% free, super short, and a small dose of awesome to kick off every weekend.

    You can see a lot of people are excited about this on Twitter.  Please check it out here!

    QUESTION(S) OF THE DAY: What’s the most important lesson you’ve ever learned about “networking” or interacting with big wigs? Please share in the comments.

    Scroll below for links and show notes…


    Selected Links from the Episode

    Show Notes

    • Hangovers at important events [7:20]
    • The three core tenants of successful networking [11:45]
    • Don’t make an impression, leave a memento [17:00]
    • Why ignorance can be bliss [18:33]
    • How to pitch “A-listers” [24:44]
    • How to pick people out of a crowd [28:00]
    • What to ask instead of, “What do you do?” [30:00]
    • How to escape conversations [31:10]
    • How to play the long game [34:35]
    • Can you have too many mini-retirements? [36:40]
    • If you were launching a new company with only $1,000, what would you start? [37:30]
    • Do you meditate or do yoga? [38:45]
    • How do you find good events and parties? [39:35]
    • Now that you’re a big deal, what are your goals at SxSW [40:35]
    • What thought leaders do you follow? [41:10]
    • How do you stay focused? [41:45]
    • What part of your 4-hour workweek do you personally find hardest to follow? [42:50]
    • How do you want people to remember you? [43:45]
    • What tricks do you use for retaining info? [44:25]
    • Where is the best place in the world, besides Austin? [46:00]
    • What are you most excited about for this year’s SxSW? [47:00]
    • Have you tried polyphasic sleep? Does it work? [47:40]
    • What’s the most memorable “thank you” note that you’ve received? [48:35]
    • Are you recording a podcast while you’re at SxSW [49:40]
    • What animal best describes you? [50:00]
    • I have a 9-5 job. Can The 4-Hour Workweek actually transform my life? [50:30]
    • What are the 3-4 best bodyweight exercises for business travelers? [51:25]
    • What’s the best way to respond to, “Do you have a business card?” when you don’t have one [52:50]
    • What do most entrepreneurs do wrong? [53:25]
    • What is the most memorable memento you have received? [54:10]
    • Advice for introverts [55:25]
    • What are some of the biggest lessons learned from starting your podcast? [56:00]
    • What are some tips on executing on all the great ideas gathered? [57:25]
    • What questions do you use for reflection and why? [58:30]

    The NorCal Margarita

    Here is a recipe for an excellent cocktail. With this you can reach an appropriate level of intoxication while avoiding the hangover the day after.

    • 2 shots of high-grade tequila
    • Club soda
    • As much lime as possible

    People Mentioned

    by Tim Ferriss at August 26, 2015 05:00 PM

    Mark Bernstein


    Every year, we have a few conferences that concern literary hypertext, electronic literature, hypertext narrative, or what you will.

    At conferences like these, one finds two kinds of papers. We have papers intended to be presented, justifying the author’s travel costs, tenure, and grants, and we occasionally have papers intended to be read, papers that call attention to work the author admires or detests, papers that try to move current practice or change current taste.

    I’m not talking only about papers intended for a broad audience. The second type of paper might be written, for example, for a very small audience of technological experts. But these papers are meant to be read, and perhaps discussed and argued about; the other sort are meant to be admired.

    My desk is now awash in monographs and papers: Mason’s “On Games and Links,” the new(ish) Janet Murray monograph that nobody (literally) mentioned to me, Harmut Koenitz’s collection on Interactive Digital Literature.

    What have I have missed? And where are the arguments over it?

    Email me.

    August 26, 2015 03:39 PM

    Fog Creek

    How to Onboard Software Engineers – Interview with Kate Heddleston

    .little {font-size: 75%} .video { margin-right: 15px; height: 56px; }
    How to Onboard Software Engineers – Interview with Kate Heddleston

    Looking for audio only? Listen on and subscribe

    Up Next
    Building A Culture of Learning

    In this interview with Kate Heddleston, an independent Product Engineer, we discuss technical onboarding. We cover why onboarding is important, the essential elements to effectively onboard engineers, the areas you should focus on, who should do it, as well as common mistakes made. Kate writes about technical onboarding, training and mentoring on her blog.

    Content and Timings

    • Introduction (0:00)
    • The Benefits on Onboarding (1:30)
    • Getting Started with Onboarding (2:36)
    • Creating the Best Environment for Onboarding Junior Developers (8:35)
    • Common Onboarding Mistakes (11:31)



    Kate Heddleston is an independent software engineer in San Francisco. She volunteers at Raphael House and is mentoring with PyLadies and previously at the Hackbright Academy. She also speaks at conferences about a range of software engineering topics including technical onboarding, training and mentoring. Kate, thank you so much for joining us today. Do you have a bit to share about yourself?

    I’m a self-described product engineer, which means I like to build features for people, but I keep building infrastructure tools because I decide that I absolutely have to have something in order to build my websites. I talk about web application development and web application infrastructure.

    With your experience with onboarding specifically, what led you to start talking about it?

    I noticed that there was this discrepancy in the career trajectories of men and women at startups that I was working at. I was trying to figure out why because the people coming in were of the same experience level, which is out of college, so pretty much none, but the guys over and over again would get promoted faster and get to the next level faster. That is a whole separate topic of conversation, but the big thing I noticed first was that without onboarding, women were left behind more than men. I was really confused by that. I was like, “Why is that women are hurt more by a lack of onboarding than the men?” That’s what led me to start researching and putting together my talk.

    “There are 2 ways to get great engineers at your company. You can steal them or you can make them.”

    The Benefits on Onboarding

    With onboarding, if done well, what are some of the benefits?

    Basically the way I think of it is we spend a huge amount of money recruiting and sourcing engineers. We pay them huge sums of money to work for companies, and we bring them in on the first day and then we’re just like, “Whatever. I’m sure you’ll be fine in our massively complicated website that is developed and maintained by many, many people. You’ll figure it out.” We’re under-utilizing people, which is expensive for companies and people are unhappy when they aren’t fulfilling their potential. That can lead to attrition. It’s one of those things where once I saw it, I was like, “This is so incredibly obvious that companies should have onboarding.” The return on investment is incredible. It benefits everyone. I came to it from a place of, “Why are women being left behind?”, but at the end of the day, onboarding is really for all humans. It’s one of those things where you get so much more out of employees who are happy and productive and feel integrated into the team, so why wouldn’t you do it?

    Getting Started with Onboarding

    Who within an organization should be involved in onboarding?

    Pretty much everyone. ‘It takes a village to raise a child’ kind of thing. The common first approach to onboarding is to place new employees with really senior mentors, but mentoring is actually really hard. It’s a lot like teaching in the sense that it’s very emotionally draining. What happens is … This is experience when companies hire a lot of junior engineers. What happens is they burn out all their senior mentors. They get tired because teaching is hard, and they’re like, “We can’t take on any more junior engineers. We can’t take on a lot of new engineers who aren’t really senior.” If you spread out the load, so if instead of pairing every junior who comes in with a super senior engineer, you pair them with the last people who joined, like sophomore engineers, how they do sports in high school and college, you can start to spread out the load because the best person to teach something is usually the last person who did it.

    The best person to help someone set up their development environment is the last person who joined, regardless of seniority. The best person to teach someone about a particular part of the product is the last person who developed on it. That way you can spread out who is helping who so you don’t burn out people emotionally. In fact, really senior people are not necessarily that great at teaching junior people. They’ve forgotten what it was like to learn things for the first time so it can be really painful. It’s nice to have the intermediate people turning around and teaching because they grow a lot.

    Do you just start onboarding a new employee from their first day on the job?

    The way we’ve recommended setting up onboarding plans is setting up goals and then making them happen. For a lot of companies, if they have good enough infrastructure, being able to ship something on the first day is a really good goal. This new engineer comes onboard and in their first day, they actually push something to production. Even if it’s just a small bug fix or I don’t know, some config files that you might need for something, it’s a really nice thing to feel like you can contribute on your first day, especially as a software engineer. Setting up goals like that and setting up goals for when people are able to manage their own projects or work independently, the thing I say, the goal with onboarding is what I call reliable independence. Someone is able to reliably and independently build software on your team. For someone who is really senior, that might take 2 weeks, which is awesome. For someone really junior, that might take more like 6 months.

    What steps or first things do people need to do when implementing employee onboarding?

    There’s no real good literature out there on exactly how to set up an onboarding plan. It varies hugely depending on the size of the company and the quality of their internal tools. I’ve talked to companies where we’ve sat down and the first thing I’ve said is, “You actually need to dedicate probably 2 or 3 engineers to building internal tooling because if everyone has to come in and manually set up everything, what you have is this super painful onboarding process that’s just going to bottleneck your company.” One of the first things, I think as an engineer, that you should do is automate things. Automation is great. People should be able to get set up really easily with their development environment. They shouldn’t spend a lot of time having to do all these installations that you do once that have no learning value. That’s the first thing I think companies should do.

    The second thing is put together a Trello board and come up with some goals of what you want to see. You can section it basically by the rough seniority level of someone coming in: senior, mid level, junior. Just knowing that someone who is junior is going to need a little bit more hands-on attention and someone who is senior is probably going to want freedom earlier. Then just set up goals of what you want to see them doing in the first day, the first week, the first month. I know a lot of people at companies who care a lot about this are often newer employees who went through bad onboarding and junior employees who went through bad onboarding. I think one of the big things for companies that I recommend is executive level signoff because there’s nothing worse at a company than fighting a Director of Engineering who is like, “Do we really need onboarding?” You’re like, “Yes, yes, we do.”

    Beyond those first things, what else can you try?

    There are 3 major categories that people need to develop in in order to become reliably independent. They’re each about a third of what someone needs to know. We focus a lot on technical knowledge. Everyone is like, “Getting someone onboarded is about teaching them about Python or whatever technologies we use.” I say that’s only about a third of what they need to know to be an engineer at your company. Another third is company structure, the internal tools that you have, the way that you build, the way that your code is set up. That’s another third of the knowledge that somebody needs. It’s basically domain specific engineering knowledge which is huge at companies.

    Another third is personal development, things like confidence, the ability to research problems, the ability to debug independently, judgment which is huge. Probably the single most important thing in most engineers is judgment. That’s another third of what people need to develop. I think focusing on each of those areas is really good. People are going to come in stronger in different categories. Everyone is going to come in not knowing that much about your internal company structure, but some people might have more confidence, more debugging skills. Some people might know a lot more about the technologies that you use. Just filling in the gaps in the areas that they aren’t as strong in.

    “If you can’t hire any junior engineers… into your organization, you have serious problems”

    Creating the Best Environment for Onboarding Junior Developers

    Is there anything else somebody could do to create a great experience for junior engineers in onboarding?

    Recognizing a few things about the beginners is very important. First pairing them with someone who is one level above is actually most effective. Second, one of the tenets of expertise is the ability to recognize boundaries and scope really well. One of the tenets of being a beginner is that you cannot recognize boundaries and you are unable to scope problems and scope your world. Expecting a junior engineer to be really good at scoping a feature is unrealistic. That’s one of the skills that they have to learn. Whatever you give them to do, just scope it. Then let them go play. Give them a feature that’s really well defined, that has a clear area where they’re working on and then let them go and fumble around with it. I always tell beginners, “If you come across an issue, research it for an hour and then come talk to me.” It’s not to be mean. I’m happy to answer questions. It’s just that learning to research something on your own is really valuable and figuring out things on your own is also really valuable.

    The final thing for junior engineers and beginners in general is helping to bolster confidence. Some people do come in and they have an overabundance of confidence, but there’s a lot of people who come in who are very insecure. People think that confidence follows skills, but it’s usually the other way around where skills follow confidence. If someone feels good about what they’re doing, they’re more likely to explore it and ask questions and to believe that they’re able to solve the problem.

    You’re a proponent of weekly 1-on-1s, including 1-on-1s with anyone in the company, why do you think that they’re so important?

    I think talking to other people is really valuable. There’s a whole industry where you can pay to go talk to someone for an hour every week about your problems. I think people need to be heard. I also think that a huge part of what managers should be doing is listening. It forces managers to listen, hopefully, and it gives people an outlet to talk about things. I also think that you should have channels of communication that are open at all times. One of the arguments I hear against 1-on-1s is that very often engineers will come in and they’re like, “Everything is great. I’m fine. I’m super happy.”

    I’m like, “That’s awesome. That is so great that your employees are really happy, but if something bad happens, they’re not going to want to have to schedule an emergency meeting with you. You should have open channels of communication so that they can come to you at any time and be like, ‘You know what? Something happened. Things are not good this week. I am unhappy about something.'” Having a constant rapport makes it easier for them to come to you in bad times, which is really what you want. The communication channels and 1-on-1s and things like that are just to set up relationships so that people feel comfortable coming to you with bad news, which is actually a very difficult thing to do.

    “I always tell beginners, ‘If you come across an issue, research it for an hour and then come talk to me.'”

    Common Onboarding Mistakes

    When organizations are onboarding, what are some common mistakes you’ve seen?

    The big ones are burning out senior mentors. Then that leads to, “We can’t take on any more junior engineers,” which is a huge travesty. When I hear companies saying that “We only hire senior engineers,” I’m like, “Who do you think is training all of these senior engineers? Where do you think they come from?” There are 2 ways to get great engineers at your company. You can steal them or you can make them. In this day and age, you’d probably better have outlets for both. You should have a sustainable program of bringing on junior engineers. Depending on the size of your team, sure, you might only be able to handle a few at a time. Totally fair, but if you can’t hire any junior engineers, if you cannot hire any beginners into your organization, you have serious problems with your team structure and your internal tools probably and basically everything that has to do with bringing someone new onboard.

    Let’s see, other common mistakes … Bad internal tooling. This is the whole infrastructure thing that I get on. Having really good infrastructure means not only can you deploy code quickly and reliably, which is what a lot of people talk about, but it means that you can also bring new people onboard. If you have a really easy to use robust system for testing all of your code and deploying it, that is much, much easier for someone new to learn. It’s also a great system for people who are beginners. It’s robust. It’s easy to use. We can train a junior engineer to deploy code. Some of the best things I’ve seen for web applications are 1-click deploys, being able to deploy code to any service with the click of a button is great. Similarly 1-click roll backs, really good, integration testing and things like that.

    Kate, thank you so much for joining us today.

    Thank you so much for having me.

    by Gareth Wilson at August 26, 2015 09:23 AM

    August 25, 2015

    Lambda the Ultimate

    Haskell for Mac

    Available here with hackernews and reddit discussions ongoing.

    Even though I'm not a big fan of Haskell, I'm pretty excited about this. It represents a trend where PL is finally taking holistic programmer experiences seriously, and a move toward interactivity in program development that takes advantage of our (a) rich type systems, and (b) increasing budget of computer cycles. Even that they are trying to sell this is good: if people can get used to paying for tooling, that will encourage even more tooling via a healthy market feedback loop. The only drawback is the MAS sandbox, app stores need to learn how to accept developer tools without crippling them.

    August 25, 2015 11:13 PM

    Mark Bernstein

    Dramatis Personae

    Dramatis Personae

    Here’s a shot from the a corner of one of my Storyspace 3 experiments. It’s a conventional map view, but in one part of the map I’m keeping track of a bunch of characters. (The experiment involves a party at a country house. It’s a quick study, so I’ve got a bunch of names to remember.)

    One distinctive feature of Storyspace has always been its dynamic links – specifically its guard fields, which effectively turn links on and off as the reader moves through the work. Guard fields are indispensable for large hypertexts; you can manage, some of the time, with visited link colors, but guard fields are far more expressive. The classic Storyspace syntax for guard fields was somewhat limited and a bit tricky; Storyspace 3 will make this better.

    Another key feature of Storyspace is the notion of the default link. Most of the time, if you don’t know which link you want to follow, you can just press “return” and let the author choose the link for you. This was controversial in the early days, back when “free and knowing navigation” was widely regarded as the touchstone of hypertext. Now we understand that, much of the time, we don’t know what we want or how to find it: that’s why we’re reading. Even when you’re reading against the grain, the presence of default links is transformative. Again, Storyspace 3 continues to support default links in the conventional way, and also will introduce a new sculptural hypertext facility that makes it easy to provide interesting default links.

    August 25, 2015 10:27 PM

    Dave Winer

    Why blogs are hurting in a nutshell

    Another nutshell post!

    1. Twitter says posts must not have titles and can't be longer than 140 characters. Posts cannot contain HTML markup.

    2. Google Reader said posts must have titles, and are assumed to be essay length. Posts may have HTML markup.

    3. Facebook says posts may not have titles or markup but can be as long as you like.

    4. No discourse on Google Reader, grunts and snorts on Twitter, good engagement on Facebook.

    5. None of these are great for receiving all of what we were posting to our blogs before they came about. The APIs are inconsistent, but at least they have them.

    6. Along comes Medium, which could be great. They handle markup, titles, and lately no titles required. Any length. Great! But no API. Oh geez.

    7. Tumblr and WordPress do a pretty good job of holding onto the energy of blogs, all things considered.

    8. Just imagine if one of Twitter and Facebook had tried to really harmonize with blogs, how much smoother everything would be. We could have archives and post to our friends, who could read our gems in place without clicking on links, which they've proved over and over in so many ways they don't like to do. (How many times do you get comments on Twitter and Facebook that react to the title, ignoring the content probably because they didn't click.)

    9. There seems to be some hope Facebook might put an API on their upcoming Medium-like service, or perhaps this will inspire Medium to put an API on theirs. Or Twitter could ease up on the 140-char limit, allow markup. Any number of things could put blogging back in business.

    10. It would be nice to have a friend among the Silicon Valley tech elite.

    August 25, 2015 05:12 PM

    Twitter in a nutshell

    O'Reilly has a series of books entitled X in a Nutshell.

    They're called that because presumably nut shells are small things. So if you want to understand something in a nut shell, that means you're getting a distillation, a summary, a conclusion without the reasoning.

    We used to call them Busy Developer Guides. Because you're busy and you just want to know how to do something.

    With that windy preamble, here's the story of Twitter, in a nut shell.

    The story

    1. Twitter is the news hub for news makers and news vendors.

    2. Kind of like GitHub for news.

    3. Now Facebook wants to be that, and is moving aggressively.

    The future

    As before, in a nutshell.

    1. Twitter's challenge is technology evolution, not Wall St.

    2. Once users are excited about Twitter again, investors will forget metrics.

    3. Summary: Make the news work better in Twitter, again and again.

    August 25, 2015 04:05 PM

    Mark Bernstein

    Out Of Sorts

    Today, I’m working on a short robotic hypertext, an interactive-fiction flavored confection intended to demonstrate some of Storyspace 3’s facilities, new and old, for manipulating story (what happens) rather than plot (how it’s told).

    This is not really the sort of thing I especially like, and so it’s not congenial work and its hard to bring much conviction to the task. Throughout this project to sketch “Getting Started With Hypertext Narrative,” I’ve been convinced that it’s all crap. Or worse.

    This, I realize, is garden variety Writers Block, and here of the mildest form because despite this exceptionally fierce outbreak of the malady I’m still managing 3 or 4 thousand words a day in the course of finding bugs and inventing new facilities.

    August 25, 2015 03:10 PM

    Rah Rah!

    It’s all right.

    It’s OK.

    You’re gonna work for us one day. – prep school cheer

    Gotta give Stephanie Clifford credit for wicked invention (or, perhaps, close observation?)

    August 25, 2015 03:03 PM

    August 24, 2015

    Lambda the Ultimate

    Reagents: Expressing and Composing Fine-grained Concurrency

    Reagents: Expressing and Composing Fine-grained Concurrency, by Aaron Turon:

    Efficient communication and synchronization is crucial for finegrained parallelism. Libraries providing such features, while indispensable, are difficult to write, and often cannot be tailored or composed to meet the needs of specific users. We introduce reagents, a set of combinators for concisely expressing concurrency algorithms. Reagents scale as well as their hand-coded counterparts, while providing the composability existing libraries lack.

    This is a pretty neat approach to writing concurrent code, which lies somewhere between manually implementing low-level concurrent algorithms and STM. Concurrent algorithms are expressed and composed semi-naively, and Reagents automates the retries for you in case of thread interference (for transient failure of CAS updates), or they block waiting for input from another thread (in case of permanent failure where no input is available).

    The core seems to be k-CAS with synchronous communication between threads to coordinate reactions on shared state. The properties seem rather nice, as Aaron describes:

    When used in isolation, reagents are guaranteed to perform only the CASes that the hand-written algorithm would, so they introduce no overhead on shared-memory operations; by recoding an algorithm use reagents, you lose nothing. Yet unlike hand-written algorithms, reagents can be composed using choice, tailored with new blocking behavior, or combined into larger atomic blocks.

    The benchmarks in section 6 look promising. This appears to be work towards Aaron's thesis which provides many more details.

    August 24, 2015 11:05 PM

    Dave Winer

    Another requirement for future-safety

    How would you feel about an email service that didn't allow you to forward all your email to another account?

    Yet we post our writing and photos to sites that don't provide the ability to redirect to the new location of our work if we think it's time to move.

    So I'd add another requirement. It's an either/or.

    1. Either you let me point my own domain to my content on your service, or

    2. You provide the ability to redirect from my section of your site to whatever site I choose, for the indefinite future.

    I suspect a vendor who wanted future-safe certification would likely go for #1, it's a lot cheaper. The "indefinite future" part in #2 means they'd probably have to buy insurance of some kind (a product that doesn't yet exist, but should).

    PS: See the Aug 17 piece about criteria for future-safety. There's a lot more to this.

    August 24, 2015 02:15 PM

    Mac OS is spyware too

    All of a sudden my Mac is telling me whose birthday is tomorrow. People I don't even know that well. How did that happen.

    I don't like my computer randomly and unpredictably getting all "social" on me. It's a tool.

    Try to imagine a carpenter's hammer starting to nag about an upcoming bar mitzvah.

    A baseball player's bat starting to warn you about overdue bills.

    Who asked for this shit!

    PS: Here's the Facebook thread that inspired this post. Interesting comments.

    August 24, 2015 01:57 PM

    Fog Creek – Interview with Dayle Rees

    In, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.

    Today’s guest is Dayle Rees, Head of Engineering at JustPark. Part of the Laravel PHP framework team, he has written a number of books about programming, including Code Happy about Laravel, PHP Pandas and HTML Hamsters. He’s also the creator of the popular package of themes for text editors, Colour Schemes.

    Dayle Rees
    Location: Cardiff, Wales
    Current Role: Head of Engineering at JustPark

    How did you get into software development?

    Fantastic question! And yet, so difficult to answer. I’ve always been a bit of a nerd. Perhaps not socially, but certainly through interests. My parents bought me my first computer at the age of six. It was a ‘Reeves’ 286SX and came with a really old version of Windows, 2 I think, and obviously MS-DOS.

    I instantly became curious, started playing with the startup scripts and fiddling with the operating system. I can recall destroying the machine a number of times, and in the process of restoring it, learning a lot more about its operation. I was absolutely hooked.

    In my early days, I took part in a lot of customization projects. Those that created themes and skins for applications, and I think that’s where my love of design sprouted. On the development side, I recall some of my earliest projects being the reverse engineering of various messaging protocols using C. Effectively, creating a proxy, learning the request and response shapes for the protocol and attempting to replicate it. Later, I moved on to the .NET stack for the same purpose.

    Based on these projects, I was maintaining a number of websites, and that is where the ‘web development’ portion of my skill-set started to trickle in.

    Because of these activities, and learning through curiosity, I consider myself to be a self-taught developer. However, I did go to Aberystwyth University to study Computer Science… because it’s hard to get a job without one of those shiny certificates these days!


    Tell us a little about your current role

    I’m Head of Engineering for JustPark is a London-based startup (with a Cardiff office) that aims to relieve the stress of parking for the people of the world. We allow property owners to rent out unused space to make extra cash. This allows for the most competitive rate on parking and keeps our hundreds of thousands of drivers happy.

    I manage a team of 14 skilled developers working on a number of different projects. I act as consultant and architect to our developers. I get my hands dirty in the codebase and I do anything from design, front-end development to back-end development and DevOps. Essentially, I’m responsible for all that happens on the tech side of the company.

    In work, I normally opt for the smaller development tasks. As Head of Engineering, I find distractions are common. Technical questions from the team, operational needs, interaction with product and business development teams. Sticking with smaller, non-urgent tasks allows me to be distracted without damaging a project. Normally, if there’s a problem that the team can’t find a solution to, that problem will trickle it’s way down to me. That’s where I step in and come up with a plan of action (be it good or bad, ha!) to keep the team moving forwards.

    In my spare time, I’m working on a series of books teaching the basics of the PHP language, HTML and CSS, all the way up to design patterns and the Laravel framework. I absolutely adore helping people to discover new skills and hearing about the wonderful things that they go on to make with them.

    The books I’m working on right now are ‘HTML Hamsters’ a mini-book to teach newcomers the HyperText Markup Language, and ‘Code Smart‘ which will be the latest instalment in my Laravel series covering version 5 of the framework. The only real challenge is time! My work keeps me busy, and while I love writing, it’s a time-consuming passion.

    In JustPark, some of the challenges that we have involve porting legacy systems across to modern platforms. It’s a challenge that I’m sure many, many developers face. The trick is to keep moving forward with baby steps, finding opportunities to improve what you have, without pushing too hard for that “great rebuild in the sky”. Quick wins are the name of the game. Slowly re-shaping your application, until it’s close to what you dreamed up. The biggest challenge is deciphering (and reverse engineering) the meaning behind the original code!


    When are you at your happiest whilst coding?

    I absolutely love parsing things. Connecting systems by creating common interchange formats. Creating automated systems. It’s super nerdy, but I absolutely love it!

    Outside of that nerdy passion, I love creating tools for other people. Creating systems with intuitive interactions. Using the things I build to inspire others to learn.

    It’s hard to nail it down, but every developer knows that feeling when you’re wired in. You don’t care about deadlines, you’re creating beautiful code on a clean desktop, and you’re using a billion interfaces.

    What is your dev environment?

    Aha! I was once upon a time a Windows lad. Then, I become wise and started using Linux. Now… I’m sad to say it. I’ve fallen to the evil empire. I have a top-end Macbook Pro (the one with the integrated graphics), an iPhone 6+, and an Apple watch. Fortunately, I’ve not started wearing turtlenecks…

    I use my own laptop for development at home and work because I don’t like maintaining two environments. Also, I have a terrible work/life separation!

    I use the Sublime Text editor for anything simple. Day-to-day stuff. I find having less autocomplete keeps my knowledge of the language that little bit sharper. When I’m on a more complex project I’ll open up PHPStorm, wait 10 minutes for it to be ready, and begin my work.

    In Sublime, I can’t live without a couple of plugins. Emmet (generates HTML source from CSS selectors) and Docblockr (generates PHPdoc stubs).

    My interest in design, colour and the emotions they bring stretch to Sublime Text too. One of my most popular creations is my color schemes package, which contains around 150+ colour schemes for a number of different text editors and software. The almost 6.5k stars and 75k installs on Sublime Package Control alone, makes it the most popular thing I’ve ever created. I’ve even seen the schemes show up in conference talks, screencasts, and on TV (hey there Silicon Valley!). If I’d have charged for the themes, I might be a millionaire, and you’d be interviewing me for a different reason, but alas, it was a weekend hack and I’m glad people enjoy them!

    My perfect environment for development, is sitting on the sofa, in a nice cold room, listening to some acoustic rock. You just can’t code without music. Try it. It’s impossible!

    What are your favorite books or resources about development?

    I really like reading development books that have no code in them. The best of all would be The Pragmatic Programmer. I feel that if you want to learn a language or a skill, you’ll find a way to a learning resource. But the day-to-day attitude for a developer, and tips and tricks are more interesting to me.

    I’d be absolutely terrible if I didn’t mention my buddy Alex Garrett’s CodeCourse (previously PHP Academy) project. It’s a wonderful project, and he has a goal that I share, to bring the world of development to newcomers, and lower that entry barrier.

    I find many technical books very formal and dull. I’m a quirky person (some have said insane, they might be right), and I like to have a little fun in everything that I do. It’s my goal to create fun experiences for all developers within my book series.


    What technologies are you currently trying out or want an excuse to try?

    I really need to brush up on my JavaScript. I’ve been playing around with ReactJS, and really enjoying what I’ve built with it so far. It’s definitely a skill I’d like to nurture. Other than that, I’ve been training my Sysadmin side, doing a lot more with AWS and test-driving their latest products.

    I sign up for almost every development related product I find – you never know when you might be missing out on something amazing!

    When not coding, what do you like to do?

    Please elaborate… Not coding?

    Just kidding. When I’m not being nerdy, you’ll find me being nerdy. Playing video games, watching cult TV, or spending time with my exceptionally forgiving girlfriend, Emma. We both buy into ‘nerd-culture’ heavily, so you won’t find us at many sporting events!

    What advice would you give to a younger version of yourself starting out in development?

    Charge money for Colour Schemes…

    Again, just kidding. I’d say chase any opportunities that are presented to you. Everyone has an idea, a passion, or something unique to themselves. Use it to build your own projects, and share your unique talents with the world.

    Shove yourself right into the middle of development communities, make friends and share in projects. Without the support of the Laravel community, I’d never have had the confidence to become an author. Those guys have been fantastic.

    Lastly, don’t try to learn without a purpose. The desire to learn a new skill is driven by curiosity. Try to build something, find a problem, and learn only to solve it. Keep moving forward and improving.


    Thanks to Dayle for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.

    Recent Interviews

    Allie Schwartz
    Allie Schwartz
    Lindi Emoungu
    Lindi Emoungu
    Jude Allred
    Jude Allred
    Richard Schneeman
    Richard Schneeman

    by Gareth Wilson at August 24, 2015 10:41 AM

    Tim Ferriss


    Robert Rodriguez, nicknamed

    Robert Rodriguez, nicknamed “The Wizard.”

    Robert Rodriguez (@Rodriguez) is a film director, screenwriter, producer, cinematographer, editor, and musician. He is also the founder and chairman of El Rey Network, the new genre-busting English-language cable network.

    While a student at the University of Texas at Austin in 1991, Rodriguez wrote the script for his first feature film while he was a paid subject in a clinical experiment at a drug research facility. That paycheck covered the cost of shooting his film.

    The film, “El Mariachi,” went on to win the coveted Audience Award at the Sundance Film Festival, and became the lowest budget movie ever released by a major studio. Rodriguez wrote about these experiences in Rebel Without a Crew, a perennial guide for the independent filmmaker.

    Rodriguez went on to write, produce, and direct a series of successful films including, Desperado, From Dusk Till Dawn, the Spy Kids franchise, Once Upon a Time in Mexico, Frank Miller’s Sin City, and Machete, among many others.

    I hope you find listening to this episode as enjoyable as it was to record.


    Want to hear another podcast with another award-winning movie maker? — Listen to my conversation with Brian Koppelman, co-writer/producer of Rounders, The Illusionist & Ocean’s Thirteen. In this episode, we explore how he got started, how he handles rejection, his big breaks, his creative process, and much more.

    This podcast is brought to you by Athletic Greens. I get asked all the time, “If you could only use one supplement, what would it be?” My answer is, inevitably, Athletic Greens. It is my all-in-one nutritional insurance. I recommended it in The 4-Hour Body and did not get paid to do so. Get 50% off your order at Athletic

    This episode is also sponsored by 99Designs, the world’s largest marketplace of graphic designers. Did you know I used 99Designs to rapid prototype the cover for The 4-Hour Body? Here are some of the impressive results. Click this link and get a free $99 upgrade. Give it a test run.

    QUESTION(S) OF THE DAY: What’s the biggest risk you’ve ever taken and what was the result? Please let me know in the comments.

    Scroll below for links and show notes…


    Selected Links from the Episode

    Twitter: @ElReyNetwork | @Rodriguez | @DuskElRey | @LuchaElRey

    Show Notes

    • How does Robert go about journaling? [05:04]
    • How does Robert keep moral high when working with a crew? [13:29]
    • Being creative on set [14:31]
    • “What clicked” that allowed Robert to be truly creative [15:57]
    • Embracing the creative process “in the moment” [19:28]
    • The amazing story of how El Mariachi was financed? [21:41]
    • What was the story behind El Mariachi getting released by Columbia? [24:45]
    • How to maintain the creative mindset once resources are no longer a creative driver [35:22]
    • How cartooning helped creative endeavors? [39:53]
    • The strange reason Robert changed the name of his production company to Troublemaker Studios [44:11]
    • What book does Robert most frequently gift to other people? [55:35]
    • The Directors Guild, Frank Miller, Sin City & the ‘Special Guest Director’ [57:41]
    • Why setting precedents are important [1:09:59]
    • How Robert spends his downtime [1:14:38]
    • Why was Robert so keen to make the movie Sin City? [1:19:54]
    • What does the first 60 minutes of Roberts’ day look like? [1:26:29]
    • Robert’s TV network, El Rey [1:32:52]
    • What is Robert geeking out on right now? [1:51:56]
    • Tips for early stage filmmakers [1:54:37]
    • What advice does Robert have for his 30-year-old self? [1:58:39]
    • Robert’s one request of you, the listener. [2:01:07]

    People Mentioned

    by Tim Ferriss at August 24, 2015 03:43 AM

    Dave Winer

    The XML-RPC site works again

    There was a lot of breakage in the old XML-RPC site dating back to 1998. I finally have all the tools I need, I think, to get it working again.

    Nice to be able to get this stuff working again. With all that I write about future-safe archives, it's kind of funny that some of the real history I am supposed to be managing is in such poor shape.

    At least this little part is in better shape now.

    A picture of a slice of cheese cake.

    PS: There are still a lot of broken links. Which is what you would expect from a site that's 17 years old.

    PPS: Here's the first link on that has useful information.

    August 24, 2015 03:27 AM

    August 22, 2015

    Dave Winer

    Do people still use libraries?

    John Palfrey, a former colleague at Berkman Center, has a new book about the importance of libraries in the age of Google. Yesterday it got a short writeup in the NY Times. I haven't read the book yet but I plan to.

    When I was a kid, I spent a lot of time in the Queens public libraries. Most often in a local branch, but sometimes when I needed access to more information, particularly microfilm of old newspapers, I would go to the central library in Jamaica. It was a long bus trip, so I must have had good reasons to go.

    I also went to the library as a sanctuary, a way to get away from difficult situations at home. I suspect a lot of kids used libraries this way. A place where the adults were friendly, where it was their job to help you, and they really seemed to enjoy it. Librarians helped cultivate my interest in knowledge, something I am very appreciative for. The librarians also took us seriously, something a lot of adults don't do. We fail to understand that kids are real people. We get confused by their cute faces and small bodies, their childish enthusiasms. The librarians' job was to encourage the intellectual seeker and explorer in every child.

    In college I spent a lot of time at the main library at my school, as a quiet place to read on campus. I didn't really have a good place to study in the various apartments I lived in. Maybe that's still true for college students?

    These days I don't spend much time in libraries. Sometimes I go there to write, because it's a place that gives me ideas, but all the information I would get from a library I get on the net. Of course it's a lot faster and easier. What's missing on the net is serious collaboration. There isn't a place on the net, that I know of, where people are serious, where they try to do their best thinking, and come with open minds prepared to learn from others. Most of what you see are poor attempts at humor, outrageous political opinions. So many examples. This morning a friend on Facebook posted a link to a serious story. Every comment under it was a one-line "joke" none of which were even slightly funny, imho. This is the norm. The net is where the idea of Trump as president originated, where it thrives. I want to go some place where the idea of solving problems collaboratively is on-topic, and snark is frowned on. The net has great reference works, but it isn't a great environment for serious thought and discourse. As one of the early Internet "utopians," I never imagined we'd get to this place.

    Perhaps this is the future role of the library. It's a physical place. In the past it was also the place to seek information, when information had a physical embodiment. But now that information has been disconnected from books and microfilm and stored digitally on disks and SSDs in the cloud, what's left of the library is the philosophy and people. They are still open meeting places for people.

    I have to make some trips to libraries to see what's going on there in the evenings and weekends. Who's there and what are they doing? What do librarians think the role of libraries are? For me, once, they were incredibly valuable places. Do people still use libraries?


    Lots of interesting ideas in the comments on this post!

    One thought came to me, how about putting a podcast studio in every library?

    People could come to the library to interview family members, to record their stories, to be saved by the library.

    Which led to the idea of a network of libraries hosting blogs for everyone, using rules that are fair for people, not designed to create profits for tech investors. The stories have so much more value than the few pennies they make for tech billionaires. It would be great to have a public institution that helped people tell their stories, without any conflicting interests.

    Maybe this is something Bill & Melinda Gates would fund, following the example of a great American philanthropist of the early 20th century. It seems it's time for an update to the concept of the library.

    A picture named whyLibrariesMatter.png

    August 22, 2015 02:25 AM

    August 21, 2015

    Mark Bernstein

    The History of Rock ‘n‘ Roll in Ten Songs

    Stylish, well-written, and engaging, this modest book explores ten songs that shaped or reshaped Rock – often through reinterpretation over many years. One chapter, for example, looks at the saccharine “To Know Him Is To Love Him”, recorded in 1958 by The Teddy Bears and written by their tenor, a very young Phil Spector. The song was completely transformed in 2006 by Amy Winehouse. (

    Another version.)
    When Amy Winehouse sang it in 2006, her music curled around Spector’s, his curled around her, until she found her way back to the beginning of his career, and redeemed it. Whether he has every heard what she did with his music, or whether she ever heard what he thought of what she did, are unanswered questions. He isn’t talking; she can’t.

    August 21, 2015 11:25 PM

    Hugo and Rita

    The much-disputed Hugo travesty comes to a head this weekend, and we’ll find out how (and whether) the prestigious science fiction award can be taken back from the misogynistic Gamergate-inspired crew that used a block-voting loophole to seize the nomination process.

    Meanwhile, the Romance Writers of America nominated Kate Breslin’s For Such A Time in two categories – Best First Book and Best Inspirational Romance. The book’s romance connects a young, blonde, Jewish woman in Dachau with Aric, an SS officer and extermination camp commandant. In the end, the Nazi helps save some Jews, the Jew converts to Christianity, and everything’s cool, right?

    Unsurprisingly, the nomination has been controversial. (More in The Guardian and The Forward)

    "No one considered that the female character’s life at the hands of the male character’s might make it impossible for her to consent. No one considered that this might not be romance but rape. No one considered that after thousands of years of forced conversions, Jewish people might find a novel romanticizing conversion to be problematic. –

    August 21, 2015 10:42 PM

    Lambda the Ultimate

    OcaPic: Programming PIC microcontrollers in OCaml

    Most embedded systems development is done in C. It's rare to see a functional programming language target any kind of microcontroller, let alone an 8-bit microcontroller with only a few kB of RAM. But the team behind the OcaPic project has somehow managed to get OCaml running on a PIC18 microcontroller. To do so, they created an efficient OCaml virtual machine in PIC assembler (~4kB of program memory), and utilized some clever techniques to postprocess the compiled bytecode to reduce heap usage, eliminate unused closures, reduce indirections, and compress the bytecode representation. Even if you're not interested in embedded systems, you may find some interesting ideas there for reducing overheads or dealing with constrained resource budgets.

    August 21, 2015 06:33 AM

    Fog Creek

    Webhooks are now supported in FogBugz On Demand

    Finally, Webhooks are now available in FogBugz On Demand!

    Integrate FogBugz with Other Systems

    This provides you with a way to specify callback URLs for various types of events, allowing integration between FogBugz and other systems. So, for example, when a case status changes in FogBugz you can fire off a Webhook to a build server and trigger a task to begin. Or when a case is closed, this can add an entry to your group chat software, so everyone is made aware of it. But they don’t just work with case events, oh no. There’s support for discussion topic events, like thread and post creation as well as for source control commits, wiki page events like edits and page creation as well as Time Tracking events, like time interval creation and deletion. There are full details on our help site for those who want to dive into the detail.

    Webhooks Replace URL Triggers

    Now, some of you who have been with us for a while might be thinking that you could already do this type of stuff with URL Triggers. And you’d be right! Except that that was our own way of handling things, whereas Webhooks are more widely supported and understood, so we’ve replaced URL Triggers with Webhooks. If you were using URL Triggers then you don’t need to update anything unless we’ve already been in touch with you, as for 99.9% of users, they’re backwards compatible. But in moving to Webhooks we’ve also resolved two long-standing bugs that customers have had to work around, and it puts us in sync with Kiln, which has had Webhooks support for a while. What’s more, this also sets us up for a more reliable and faster integration with our buddies over at Zapier. We’ll have more details about that to come. But in the meantime, Webhooks are available in FogBugz On Demand right now, so enjoy hooking up all the things!

    by Gareth Wilson at August 21, 2015 05:46 AM

    August 20, 2015

    Dave Winer

    I would love an open source Slack clone

    Last Sunday I saw a tweet from TechCrunch founder Mike Arrington that said he missed the old Silicon Valley and might try to do something to bring it back. I was enthusiastic, and suggested what the tech industry needed was a new open platform to grow on. I was thinking of the IBM PC in the 80s and the web in the 90s. What Twitter might have been in the following decade, had they not punted.

    Mike responded that he can't afford to do it, to which I asked if he was an investor in Slack, one of the famous unicorns of the new tech industry. A startup with a market cap in excess of $1 billion. It is both an open platform and a financial juggernaut.

    Let's think about Slack

    That got me thinking. What would it take to fully develop Slack as an open platform, even beyond where it is now. The answer came to me right away. If Slack is the IBM PC, what we need is the Compaq. Or if Slack is Netscape, we need MSIE (the early versions of course, not the malware-infested wasteland that MSIE turned into).

    It must be a clone

    Back in the heyday of PCs, the first round of PC competitors were near-clones, they could run PC software that was modified to work on their systems. The differences weren't huge, but they proved to matter. The near-clones eventually fell by the wayside, because if they didn't run PC software out of the box, users didn't want them.

    The Compaq PC ran most IBM-compatible software out of the box, unmodified. I was a PC software developer at the time, we totally appreciated not having to create a new version for each PC competitor that came along. Compaq grew like a unicorn, and the IBM PC kept growing along with it.

    I think Slack is big enough and important enough that it could serve as a foundation for a great new open ecosystem. A good Slack clone would have to work with the existing base of webhooks, unmodified. Exactly as they are. "Out of the box," as we used to say.

    I don't think this would hurt Slack-the-Company at all. They are clever and moving quickly, and most important they understand and love their users. That's what it takes to maintain leadership of a market. The users have to think of you as the "official" platform, and the others as clones. If they hold to their principles, and I don't see why they shouldn't, the users won't be fooled.

    Personally I'm not particularly interested in cloning the user experience of Slack, however I am interested in being able to run their webhooks in other environments.

    Exactly what is needed

    1. Run incoming and outgoing Slack-compatible webhooks unmodified.

    2. It must be open source, MIT license or equivalent.

    3. Written in JavaScript.

    4. No frameworks, no dependencies.

    5. Runs in Node.js on the server, in browser-standard JavaScript on the desktop.

    6. The layer that runs the webhooks must be a cleanly factored separate module, not integrated with the UI, so it can easily be incorporated in other kinds of software.

    I can't think of anything else at this time, can you?


    Stewart Butterfield, co-founder and CEO of Slack replied: "I would like this! We'd need to clean up our APIs a bit (working on it) and add a few simple capabilities. More the merrier!"

    That's really cool. I was pretty sure he'd go that way.

    A picture of a slice of cheese cake.

    Update August 29

    I've got less than 1/2 of the webhook API implemented.

    There's a lot of text processing that goes on when Slack receives a webhook call. I have a little of that implemented. But I do have an app that receives incoming webhook calls, and does the correct thing with them, distributing the data to all the clients that are hooked into the server.

    I have to say the API is as clean and sensible on the server side as I thought it would be from implementing a client. Slack has a very practical engineering culture. I'm totally enjoying the work.

    August 20, 2015 03:53 PM

    August 19, 2015

    Dave Winer

    Car insurance price based on credit score, shopping habits

    Consumer Reports says that car insurance pricing doesn't work the way it used to. A couple of big differences.

    1. Your credit score is a bigger determinant of insurance price than your driving record. A person with a high credit score and a DUI conviction can get a lower insurance rate than a driver with a perfect record and a low credit score.

    2. Your sensitivity to price also determines your rate. They get this information presumably from credit card companies, supermarkets, department stores, perhaps Amazon. If you tend to buy more expensive things and don't do a lot of price comparisons (something Amazon would know, for example) they give you a higher price. That's why if you call them and ask for a lower price, often you'll get it. This practice is illegal in a few states, it should be illegal everywhere.

    I found #2 shocking, and wanted to share it because I personally didn't care if companies knew what brand of bottled water or canned soup I buy, but now I can see why it costs me money that they do know. If you're a carefree shopper, it costs you more ways than you might think.

    August 19, 2015 12:30 PM

    Bezos on kindness and the NYT willfully tells an incomplete story

    The New York Times ran a remarkable piece about what it's like to work at Amazon HQ in Seattle. I read the story from top to bottom, and was, like a lot of people, fairly disgusted by the way they treat people who work there.

    But there was one story that stood out, near the top of the piece, that seemed out of place. Here's what the Times wrote:

    He wanted his grandmother to stop smoking, he recalled in a 2010 graduation speech at Princeton. He didn’t beg or appeal to sentiment. He just did the math, calculating that every puff cost her a few minutes. “You’ve taken nine years off your life!” he told her. She burst into tears.

    I'm always leery of such obvious appeal to emotion. He made his grandmother cry. He must be a bad person. But he was just a kid. What's significant is not what the 10-year-old Bezos said and did, he wasn't running Amazon, rather what the adult Bezos said, which the Times left out of the story.

    I sat in the backseat and did not know what to do. While my grandmother sat crying, my grandfather, who had been driving in silence, pulled over onto the shoulder of the highway. He got out of the car and came around and opened my door and waited for me to follow. Was I in trouble? My grandfather was a highly intelligent, quiet man. He had never said a harsh word to me, and maybe this was to be the first time? Or maybe he would ask that I get back in the car and apologize to my grandmother. I had no experience in this realm with my grandparents and no way to gauge what the consequences might be. We stopped beside the trailer. My grandfather looked at me, and after a bit of silence, he gently and calmly said, "Jeff, one day you'll understand that it's harder to be kind than clever."

    That bit of wisdom, which we can spend much of our lives learning, would have offered an interesting counterpoint to the thesis of the Times piece. Why did they leave it out? As a lifetime NYT reader, this really requires an explanation, otherwise you have to assume the reporting in the rest of the piece, and in other NYT stories, was just as deceptive and partial.

    The NYT public editor, Margaret Sullivan, wrote about the Amazon story, and provided the full quote, yet she says the Times didn't get any of the facts wrong. "No serious questions have arisen about the hard facts." Might be true if you overlook this clear omission. Maybe not a "hard" fact, if so imho that's an irrelevant hair-split.

    The Times could be so much more than it is, but at times like this it appears to be even less than we thought it was. An omission like this invalidates the rest of the piece. If they can be caught being so manipulative of readers so easily, what about the harder parts, where they quote anonymous sources. How can we know if they omitted important, relevant parts of their stories? We can't, so we have to assume they did.

    As always, when they are so manipulative they lose credibility with readers. And this really is their only asset.

    August 19, 2015 12:30 PM

    Fog Creek

    A Guide to Developer Mentoring – Interview with Rachel Ober

    .little {font-size: 75%} .video { margin-right: 15px; height: 56px; }
    A Guide to Developer Mentoring – Interview with Rachel Ober

    Want audio only? Listen on

    Up Next
    Building A Culture of Learning

    In this interview with Rachel Ober, Senior Developer at Paperless Post, we discuss developer mentoring. Rachel teaches us the lessons learned from mentoring developers at Paperless Post, General Assembly, Turing School and beyond. These cover how to get started, tips on building successful mentor-mentee relationships, the benefits of mentoring as well as common mistakes. She writes more about teaching and mentoring on her blog.

    Content and Timings

    • Introduction (0:00)
    • The Benefits of Mentoring (0:47)
    • Mentoring Myths (3:30)
    • Tips for new Mentors (6:20)
    • Successful Mentor-Mentee Relationships (7:52)
    • Finding Mentors and Mentees (9:53)



    Rachel Ober is a Senior Developer at Paperless Post, and an experienced mentor. She’s a Ruby On Rails instructor for General Assembly, Co-organizer of the Write/Speak/Code conferences, and Founder of the New York chapter of RailsBridge. Rachel, thank you so much for joining us today. Do you have a bit to share about yourself?

    Sure. I work as a a Senior front-end developer at Paperless Post. I work with a team of five other front-end developers building the different pretty things that you see on our website. I feel that it’s really important to kind of build your team around what you want to see in the work that you do.

    “Be fearless and say, ‘Hey, I need help on this!'”

    The Benefits of Mentoring

    I kind of wanted to focus our conversation a bit around mentoring. You seem to have a lot of experience with that, so what are some of the benefits you’ve seen of mentorship?

    Some of the benefits that I’ve seen about mentorship are a two-way street between the mentee and the mentor. For the mentee obviously the biggest benefits that you’ll see is that they will have confidence in their work, they have somebody that they can talk to or just sling questions back and forth. They trust this mentor relationship to be realistic, not just telling you what the mentor thinks the mentee wants to hear. You don’t feel as a mentee, that your trying to impress this other person. It’s a much more open relationship. For the mentor, for me it’s a gigantic reminder of where I’ve come from as well as … I’ve been working with Ruby on Rails now since I think 2005. Wow, that’s like a decade. Every time I meet somebody who’s just learning or is a few years behind me in terms of their career, I learn new ways of thinking about problems. I think mentoring is really a great relationship for both people.

    How should people go about getting started with mentoring within a company?

    As an individual person, it’s great to talk to people and to first gauge other people who would be interested in participating in something like that. Now at Paperless Post we are pretty equal between our Engineering Department as well as the other people in our company. We have people who design cards, people who are in charge of marketing, so it would be good as an individual to kind of weigh whether or not you’re looking for mentoring for the entire company or just to the Engineering department to figure out what your expectations are and what your goals are for your mentoring program. At that point you might get a group of people together to start some type of pilot program.

    I would say even asking HR what their opinions are and whether or not doing some type of mentoring program, an official one, at your company, would be something that they would also support. Obviously having upper management is going to make sure that this is actually going to get integrated into your culture, you company culture. They will support you making sure that you’re following up with them. Maybe it can even be integrated into your review process that might happen once or twice a year.

    “I would advise against having your mentor be your manager”

    Mentoring Myths

    What are some myths that stop people from getting into mentoring?

    The biggest one is that people think that they don’t have anything to offer. I think it’s probably tied into Impostor Syndrome. That they think that they would instead hurt the other person maybe, or that they don’t have any accomplishments to really share with a person to be a role model. I think that is definitely not true. My most successful relationship with a mentor, was whenever I did admit to her my weaknesses and saying, “Hey, I had this issue right out of college. I worked at a place for a year and it was a really bad relationship for both ends. It wasn’t the right hire, it wasn’t the right fit.” She was able to admit to me that one of her biggest challenges, and after that mark in our relationship, I saw a great change in her where she believed then that because I had admit to this great failure in my life or this personal failure that I felt about, that she could kind of open up, admit that she was having difficulties in certain areas, and be able to regain her confidence, move forward, and do an excellent job.

    I think especially with people who are just learning the program, they have this idea … It’s kind of strange because when I was learning how to be a developer, or learning about development in general, there was very stereotypically, you spend all day in front of the computer. Now it seems like it’s turned into something glamorous, because you have this ability to change your life and to earn a lot of money by becoming a computer software developer. My first class that I taught at General Assembly somebody asked me, “What does your daily life look like at Paperless Post?” I said, “Seriously I spend most of my day trying to fix bugs and most of the time it doesn’t work.” I think I blew his mind.

    It was a very interesting experience, but you as a mentor, just by explaining what your daily life is and how you interact with other people on your team, is some really fantastic advice for somebody who is either thinking about becoming a developer, or about to take that step after either graduating college or taking one of these code boot camps. Just giving your experience is very valuable. They want to know how you go about interviews, and obviously if you currently have a job you’ve been through a couple of interviews. Nobody just gives you a job usually. That type of advice is just invaluable for somebody who really has no point in which to reference.

    Tips for new Mentors

    Any additional tips that you can give for new mentors about the types of things that they should be doing with their mentees to help them learn?

    The tips that I give to people that are thinking about getting into mentoring, or people who are looking for mentors, is to really start off the relationship figuring out what the goals of the relationship are. Figuring out how often you’re going to meet, how long these meetings are, whether or not you’re going to have some type of assignment that that this mentee is going to give, and how involved your mentor relationship will be. I’ve had different relationships … Some of it is based on just talking. Talking through issues, and more of the social aspect of becoming a developer or navigating either their job or their learning environment. Other relationships have been very deep into code, working through problems, and learning how to break down problems.

    I think figuring that out earlier, it really puts everything out on the table and saying like, “This is what I’m having issues with. This is what I’d like to improve on,” and just kind of like talking about each other, talking about yourself. I feel like it’s very hard at least for me to go in and start getting advice, if I don’t know at least the motivations for the mentee. What they want to learn, how they want to see themselves in a couple months after we’ve been working together.

    “Having a whole network of people will really help you share your success in achieving your goals”

    Successful Mentor-Mentee Relationships

    What do you think are the essential elements of a successful mentor-mentee relationship?

    I think that successful elements are definitely meeting regularly. I don’t think kind of having on the fly meetings is really helpful for either person. As a mentee you want to make sure that you’re checking in and goal setting. Making sure these goals are met and that you have this accountability person. Your accountability partner, that you are actually fulfilling the things that you set out to do. I think if you are a mentor and you see that your mentee is not fulfilling these requirements, then you have to have like a really good heart-to-heart and say, “Hey, I’m putting in this time. I’m volunteering, I’m not getting paid for this, and I chose to help you because I really believe that you can do some amazing things.”

    Sometimes guilting them helps. If they’re part of a Code school you can contact their teacher or the administration and say, “Hey you know, we set up this relationship and I wanted to check in with them. Have you noticed anything on their side?” You don’t want to be meddling, but you also want to set yourself up for success both as a mentee and as a mentor. Keep assessing the relationship, making sure that it’s working, and also if you are a mentor, being knowlegeable of what they are learning or what their work entails, and anticipating questions that they may have. I think just being yourself and admitting whenever you don’t know what the answer is, or giving them advice on other people to talk to. Just being realistic about yourself, where you’ve been and giving that advice to somebody else, is really the crux of a relationship like that.

    Finding Mentors and Mentees

    Where can people find mentors, or people to mentor?

    That is a very interesting problem. I don’t think it’s easy to find a mentor, because there’s a certain level of trust and understanding. For me, I have always mentored other people. I’ve found mentees with volunteering for Code schools. I’ve mentored students from the Turing School out in Colorado, which may sound odd since I’m in New York city, but I’ve been fairly successful working with people over Google Hangouts and Screen Hero, and Slack, and just leaving myself available over text message and phone. I’ve also mentored people either through organizations that I work through … I would say that’s mentorship even if maybe you haven’t said exactly what that relationship is, or have a steady schedule. Also through the classes that I’ve taught at General Assembly. People asked to meet regularly, they want really advice on where to go next. They become voracious and they want to learn as much as they can.

    For me, I’ve been searching for my own mentor for awhile. I’m particularly looking for somebody who is five to ten years ahead of me in their career. It took me a little while to kind of formulate the idea of what I was looking for in my relationship. As a woman it was important for me to find a woman who was doing the type of thing I wanted to be doing. I had to really extrapolate and think about what I wanted to be doing in five to ten years. Really be honest with myself. Where am I going to be in my family life, where am I going to be maybe in the country. Assess these things that are important to you, and then see if there is somebody out there that you really admire and just ask them, and you don’t have to limit this to one person either.

    Having a whole network of people will really help you share your success in achieving your goals, because you have more accountability partners and more opinions. There’s a couple online services as well. For women there is a site called Glass-breakers, which will link up people, via the LinkedIn Network. There I’ve had a couple introductions, and I actually met somebody in person who happened to be on a business trip from London. We had dinner and it was amazing how well we connected. I would be fearless and say, “Hey, I need help on this,” and admit that you need help, and these natural relationships will form.

    Is there something in that relationship that says your mentor should or should not be your manager?

    I would advise against having your mentor be your manager. Here we do have Technical Managers who are in charge of making sure our project is on time, making sure that everybody’s being productive, and basically are leading the projects, leading the teams. They’re also in charge of writing reviews for the team members. We then have other people who are available such as myself, who are really focused on making sure that the other employees are happy, they’re doing the type of work they want, and then also if there’s something they need to get off their chest, it’s a safe environment because you’re talking to somebody who isn’t reporting on you or needs to also … They’re kind of the neutral Switzerland or something. They’re to necessarily involved in the review process of you and your team, but they’re there to help focus on your happiness and the growth of your career.

    I think whenever you’re the manager you have to constantly have that balance of the best interest of the company and the person, whereas I think an independent party really is concentrating on the person. It doesn’t mean that this relationship with your manager is bad, it just means that maybe you also need to take in a mentor who’s not in a manager role.

    Rachel I think this was really great conversation. I hope a lot of people take the next steps to either find a mentor or become a mentor.

    Great, thank you for having me.

    by Gareth Wilson at August 19, 2015 10:55 AM

    August 18, 2015

    Tim Ferriss


    The Tim Ferriss Show with Naval Ravikant

    “Desire is a contract you make with yourself to be unhappy until you get what you want.” – Naval Ravikant

    Naval Ravikant (@naval) is the CEO and a co-founder of AngelList. He previously co-founded Epinions, which went public as part of, and He is an active angel investor and has invested in more than 100 companies, including more than a few “unicorn” mega-successes.

    His deals include Twitter, Uber, Yammer, Postmates, Wish, Thumbtack, and OpenDNS, which Cisco just bought for $635 million in cash.

    BUT, even if you have zero interest in startups or investing, this episode is well worth your time.  This is really about the habits and beliefs of a highly successful (and happy) person.

    Naval has refined his way of living in very unique ways, and you can borrow what he’s learned, read the books that have changed him, and experiment with the habits he has developed through trial and error.

    Enjoy this conversation with a curious character!



    Want to hear another podcast on meditation and “spirituality”? — Listen to my conversation with Sam Harris, PhD. In the below episode, we discuss “spirituality,” neuroscience, his meditation practice, and more (stream below or right-click here to download):

    This episode is sponsored by 99Designs, the world’s largest marketplace of graphic designers. Did you know I used 99Designs to rapid prototype the cover for The 4-Hour Body? Here are some of the impressive resultsClick this link and get a free $99 upgrade. Give it a test run…

    This podcast is also brought to you by Athletic Greens. I get asked all the time, “If you could only use one supplement, what would it be?” My answer is, inevitably, Athletic Greens. It is my all-in-one nutritional insurance. I recommended it in The 4-Hour Body and did not get paid to do so. Get 50% off your order at Athletic

    QUESTION(S) OF THE DAY: What do you still want to know about investing, whether in startups or elsewhere? Or: What was your favorite takeaway from Naval? Please let me know in the comments.

    Scroll below for links and show notes…


    Selected Links from the Episode

    AngelList | Startup Boy Blog | Twitter

    Show Notes

    • On the intensity of Naval Ravikant [6:55]
    • On uncompromising honesty [16:54]
    • How AngelList and Venture Hacks came to be [20:09]
    • What Naval looks for when deciding to invest in a founder [25:24]
    • Common “wives tales” in venture capital [32:39]
    • What books, outside the startup world, have most improved Naval’s ability to invest? [36:54]
    • Greatest investing hits and misses [51:49]
    • When you think of the successful people, who is the first that comes to mind? [58:19]
    • Meditative practices [1:00:58]
    • How to replace bad habits with good habits [1:07:06]
    • On setting stakes and awards [1:24:49]
    • How to treat your life like a movie [1:34:44]
    • Overused words and phrases [1:39:39]
    • Early life education and the importance of “loving to read” [1:43:19]
    • Advice for his younger self [1:51:09]
    • Describing the first 60 minutes of each day [1:52:40]
    • If you could have one billboard anywhere, where would it be and what would it say? [2:04:19]

    People Mentioned

    by Tim Ferriss at August 18, 2015 11:43 PM

    Lambda the Ultimate

    Eric Lippert's Sharp Regrets

    In an article for InformIT, Eric Lippert runs down his "bottom 10" C# language design decisions:

    When I was on the C# design team, several times a year we would have "meet the team" events at conferences, where we would take questions from C# enthusiasts. Probably the most common question we consistently got was "Are there any language design decisions that you now regret?" and my answer is "Good heavens, yes!"

    This article presents my "bottom 10" list of features in C# that I wish had been designed differently, with the lessons we can learn about language design from each decision.

    The "lessons learned in retrospect" for each one are nicely done.

    August 18, 2015 07:27 PM

    Dave Winer

    Future-safety notes

    A few random items for the future-safe web file.

    1. A commenter on yesterday's post asked about my personal profile page from 1998, which was linked to from the RSS 2.0 spec, which I pointed to as an example of something that seems relatively well set up for longevity. The link was broken. I investigated, and found that it had been broken since I moved from Apache to Amazon S3, a while back. It was a perfect example of how easy it is to lose large amounts of web content. On Amazon S3 I set the default filename to index.html, and on Apache I had set it as default.html. This was almost certainly a mistake. I fixed this link by creating a copy of the home page at index.html and now it works.

    2. Case-sensitive servers are bad for future-safety. I wish Amazon S3 had the option to tell the web server to be unicase. I ported from a server that didn't care about case, Apache on Windows. A lot of the broken links in my old content, migrated to S3, would be fixed if I could set such an option true. It's a lot more difficult to fix with a patch, because folder names need to be case-insensitive too. Discussed in this Facebook thread.

    3. Facebook "notes" could be a boon for future-safety or a new disaster. Yesterday I got lucky and spotted a new Facebook style of notes page, one that looks a bit like the pages produced by Medium. It got a ton of coverage in tech pubs, who saw it as Facebook wanting to attract bloggers. This could be a great thing, or a terrible thing, depending on how good the API is. If I can produce a version of MyWord that works with both Facebook notes and pages on the open web, then we'd have a fairly future-safe system, and one that others can build on. The best of both worlds. But if there is no API, we get another Medium, a nice-looking landfill for ideas, although we believe more in the longevity of Facebook than we do of Medium.

    August 18, 2015 02:49 PM

    Mark Bernstein

    Encyclopedic Hypertext: A Bubbe Meisse?

    I’m working on a big Storyspace project, one that involves revisiting past broils and former controversies. One is Janet Murray’s assertion that digital media are inherently inclined to be encyclopedic. I think that this seems to self-evident that it has seldom been questioned, but it the encyclopedic impulse inherent in the digital, or merely inherent in text?

    In any case, very little has been written about the craft of this encyclopedic impulse, about mastering it in the service of the story. Murray’s own view

    When the encyclopedic affordance is appropriately exploited, large information resources are semantically segmented at multiple levels of granularity, sorted, classified, and labeled with controlled vocabularies. When informational spaces or virtual worlds are well organized with clear boundaries, consistent navigation, and encyclopedic details that reward exploration they create the experience of immersion.

    is a list of Information Architectural virtues, but these virtues are very much at odds with the impulse. The impulse, if it exists, calls for grand vista of vast information spaces, complex and subtle, in which we can lose ourselves; clear boundaries and consistent navigation are something else entirely. We’re arguing that nature in all its wild exuberance and its terrible sublimity is the true subject of art, and so we should all go into the back yard and do some gardening.

    The Yiddish bubbe meisse means a silly story or wishful fantasy. Most people think “bubbe” here is the word from “grandmother” but it’s not: it’s Sir Bevis from the Arthurian cycle, showing up in the shtetl where you wouldn’t really expect him. Go figure.

    Anyway: how do we master the encyclopedic impulse without being sucked into the endless task of creating an infinite world in infinite detail?

    The most straightforward approach to blending narrative and annotation is the Parsifal story, that memory of ritual initiation in which the hero sees a succession of wonders – often frightening, always incomprehensible – which he comes eventually to understand and, in understanding, comes into adulthood. This is the story of going walkabout, of Lyra’s harrowing of Hell, of The Magic Flute, of True Grit and of The Road To Oxiana.

    The Parsifal Story integrates the encyclopedic impulse with narrative by entwining them twice. First, our natural expectation calls for a journey followed by exposition of the marvel we will witness. Afterward, we will journey again, and again we expect a new wonder. Exposition of the marvel we have worked to see is not here an interruption in the story, but becomes a goal of the story, part of what we and the hero are seeking. Moreover, because we understand that the end requires understanding, not simply witnessing, these marvels, the hero’s struggle to decipher and interpret itself becomes a narrative.

    The very convenience of this narrative device is its chief drawback: readers who recognize Parsifal perceive the puppet master behind the characters and naturally resent the master’s manipulations. Why should we sit through this long stream of phony perils and mumbo jumbo? If you’ve got knowledge to impart, why not get on with it? The Yiddish term for a silly story, one only a child would sit still for, is bubbemeise from Sir Bevis, another Parsifal story.

    One way to justify Parsifal is to disable the hero, to so limit their agency that they can do little more than witness and interpret. In True Grit, Mattie Ross is a child and a woman in a man’s world. In Pry, the electronic novella by Danny Cannizzaro and Samantha Gorman, the hero is paralyzed: all he can do is witness and remember. In Tinker Tailor Soldier Spy, George Smiley is old, retired, cast out, a former spy called in to clean up a small mess.

    Finally, when considering the Parsifal structure in hypertext, keep in mind that Parsifal often requires progressive revelation. The psychological impact of the mystery, for example, depends not on our assembling clues and performing deduction, but rather on the hero’s ultimately-successful effort to repair (at least partially) a breach in the world’s proper order. The clues might come in any sequence but the clues don’t matter: what matters is the progressive impact of growing knowledge (both of the rupture and its cure) on the hero. That progress is linear.

    From the new Storyspace project. Comments, corrections, suggestions, and cries of pain and outrage all embraced: Email me.

    August 18, 2015 01:38 PM

    Hereville: How Mirka Got Her Sword

    The cover explains that this graphic novel concerns “yet another troll-fighting 11-year-old orthodox Jewish girl,” and it is not wrong. Hayao Miyazaki meets small-town upstate New York, where Mirka deals with the great decisions of school life (one open button at the uniform collar? two?) and a monstrous magic house in the nearby forest whose ghostly occupant has a terrifying pet monster: a pig.

    August 18, 2015 01:33 PM

    Dave Winer

    The "President Reagan" Show v2.0

    In this clip, Brian Stelter. who has a weekly show on CNN about the news industry, warns reporters not to pay too much attention to the polls in the Presidential "horse race." He's doing this the way a blogger would. Makes me really respect him. Pop out of the bubble says Stelter and look at past experience as a guide to how real any of this is.

    There's always a sports analogy

    I'm a Mets fan, all the way back to the beginning, but I wasn't paying attention this year, too focused on other things, but then there was this story about Wilmer Flores, a Mets infielder. He thought he was being traded. He was signed by the Mets when he was 16, so I guess he grew up on the team. He was crying. On the field, on camera. The next day he hit a walk-off home run. The whole team came out to greet him at home plate. It was a very emotional moment. And that was the beginning of a huge turnaround for the Mets. They're in first place now. (But being a true Mets fan I'm fairly sure it won't last.)

    We Facebook-like Trump

    Same with politics. Human emotions go in waves. We "like" Trump now because his story is interesting. We want to see how it comes out. But as Stelter points out, don't mistake Trump's rise as necessarily significant for the election that's still 447 days away.

    I put "like" in quotes above because the way we're interested in Trump is the way we click "like" in Facebook. Sometimes you click something you don't like. Just to bump it up and tell the algorithm you want to hear more about this. TV has similar signals. They themselves are interested to hear what Trump will say next, so they figure we are too (we are). They probably run focus groups to stay close to where audience interest is.

    Emotions flow in waves

    The last two Presidential campaigns in the US were after the advent of social media, so human waves happened then more like they happen on the net, which is different from how it worked on 20th century TV. It's more wave-oriented, shorter attention-span. But a good long-running meme like Trump obeys new and different rules. The story probably won't flow like Giuliani in 2008, or Bachmann et al in 2012, because Trump has been laying the groundwork longer, he's more interesting, and knows how to keep the interest going. And the net keeps evolving. It changed a lot between 2008 and 2012, and it's evolved from that today.

    But Stelter's point is still interesting, and optimistic. It would be good if we could avoid "President Trump." But I was around in 1980 and had much the same feeling about the concept of "President Reagan" and uhh, well, let's hope we've learned.

    The President Reagan Show starring President Reagan

    Today Reagan is offered as the Republican paragon of American leadership, but he was actually a fair actor who played the role of President in a TV show. He had nice hair. If only they could find an actor like Reagan. But most people my age, before he was elected, thought Reagan would be a disaster. We thought he was as electable as Trump is today (i.e. not). Even more support for Stelter's thesis, not to be too swayed by what's happening in any moment, but also not to look to the past as a guide to the future, too much.

    Program notes

    Note to CNN: Why not allow video embedding as YouTube does. I bet you'd get more circulation. Remember, blogging is on its way back. Time to hone your content to take best advantage of that.

    Another note: Every product should have an easy-to-find page with logos and product shots designed for including in blog posts. They should have transparent backgrounds, be approx 145 pixels wide, and roughly square. A variety of sizes actually would be useful. For candidates and media personalities, nice web-friendly head shots. I asked for this years ago, it hasn't yet materialized. I also asked that advertisers provide their commercials online so we can point to them, and while that isn't systematic yet, you pretty much can find what you're looking for.

    August 18, 2015 01:28 PM

    August 17, 2015

    Lambda the Ultimate

    STABILIZER : Statistically Sound Performance Evaluation

    My colleague Mike Rainey described this paper as one of the nicest he's read in a while.

    STABILIZER : Statistically Sound Performance Evaluation
    Charlie Curtsinger, Emery D. Berger

    Researchers and software developers require effective performance evaluation. Researchers must evaluate optimizations or measure overhead. Software developers use automatic performance regression tests to discover when changes improve or degrade performance. The standard methodology is to compare execution times before and after applying changes.

    Unfortunately, modern architectural features make this approach unsound. Statistically sound evaluation requires multiple samples to test whether one can or cannot (with high confidence) reject the null hypothesis that results are the same before and after. However, caches and branch predictors make performance dependent on machine-specific parameters and the exact layout of code, stack frames, and heap objects. A single binary constitutes just one sample from the space of program layouts, regardless of the number of runs. Since compiler optimizations and code changes also alter layout, it is currently impossible to distinguish the impact of an optimization from that of its layout effects.

    This paper presents STABILIZER, a system that enables the use of the powerful statistical techniques required for sound performance evaluation on modern architectures. STABILIZER forces executions to sample the space of memory configurations by repeatedly re-randomizing layouts of code, stack, and heap objects at runtime. STABILIZER thus makes it possible to control for layout effects. Re-randomization also ensures that layout effects follow a Gaussian distribution, enabling the use of statistical tests like ANOVA. We demonstrate STABILIZER's efficiency (< 7% median overhead) and its effectiveness by evaluating the impact of LLVM’s optimizations on the SPEC CPU2006 benchmark suite. We find that, while -O2 has a significant impact relative to -O1, the performance impact of -O3 over -O2 optimizations is indistinguishable from random noise.

    One take-away of the paper is the following technique for validation: they verify, empirically, that their randomization technique results in a gaussian distribution of execution time. This does not guarantee that they found all the source of measurement noise, but it guarantees that the source of noise they handled are properly randomized, and that their effect can be reasoned about rigorously using the usual tools of statisticians. Having a gaussian distribution gives you much more than just "hey, taking the average over these runs makes you resilient to {weird hardward effect blah}", it lets you compute p-values and in general use statistics.

    August 17, 2015 08:45 PM

    State of the Haskell ecosystem - August 2015

    Interesting survey.

    Based on a brief look I am not sure I agree with all the conclusions/rankings. But most seem to make sense and the Notable Libraries and examples in each category are helpful.

    August 17, 2015 05:54 PM

    Fog Creek – Interview with Richard Schneeman

    In, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.

    Today’s guest is Richard Schneeman, a Software Engineer at Heroku, who is a Rails contributor and co-organizer of the Keep Ruby Weird conference. He also created Code Triage, a tool that encourages you to contribute to open source projects and help out maintainers. There’s more on his blog.

    Richard Schneeman
    Location: Austin, TX, US
    Current Role: Software Engineer at Heroku

    How did you get into software development?

    I got my first real computer when I was 8, I spent hours installing DOS games, my favorites were “Star Wars: Rebel Assault” and the “Kings Quest” series. I dabbled with HTML and CSS in the Geocities days but wasn’t really interested. The first programming language I ever tried was QBasic. I’ve heard it said that you’ll never learn to use an object-oriented language correctly if your first language was BASIC. The QBasic language taught me a ton about logic and flow but did make learning Ruby, my current language of choice, a bit difficult. I still remember when I first discovered methods in another language. I thought “wow, it’s like a named GOTO”. My experience with QBasic also lead me to believe that all programming was inherently difficult and insanely slow, so I decided that it wasn’t for me.

    I went to school at Georgia Tech where I had to use MATLAB for my Mechanical Engineering degree. The procedural nature matched perfectly with QBasic and I was happily writing methods that were hundreds of lines long. It wasn’t until the Sophmore-junior year that I became interested in building dynamic web apps. I asked a friend who was a CS major “how would you build a site like Digg”, he looked into it and apparently they used something called “Ruby on Rails”. I must have gone through a half dozen books just trying to get Ruby installed on my windows machine. The first version I got running was 0.9. From there I slowly fell in love with the Ruby language, it was so expressive and powerful. What would have taken me 10 lines to do in QBasic or MATLAB was a one liner in Ruby. It felt right.

    I dabbled in building web apps for a few years, eventually graduated and got a job at National Instruments where one of the core tenets is learning by teaching. I took that lesson and started offering free Rails courses through a student organization at the University of Texas. That little trick worked. I leveled up on my programming game and got some attention from the Austin developer community. I got my first job programming at a company called Gowalla after they saw some videos I posted online from the course. I haven’t quit writing Ruby professionally since.


    Tell us a little about your current role

    I work in the “Language Team” at Heroku. If you’re not familiar with Heroku, we are a platform that lets you automatically provision and deploy a running version of your web app in minutes instead of hours. Each language we support has at least one dedicated employee. Together with Terence Lee, we maintain the Ruby language experience for the platform. This means we maintain the Ruby buildpack which is responsible for detecting and installing your Ruby version as well as dependencies. We also write and edit platform documentation, answer escalated customer support tickets and advise on best practices. In essence, we’re responsible for making sure anyone using Ruby on the platform is having a good experience.

    We also work with external libraries to solve problems upstream. Most commonly for me this means working in Rails. Recently I’ve been increasingly interested in performance and memory consumption, I’ve spent a good amount of time reading performance textbooks, and writing tooling to help me benchmark performance and memory issues. Most recently I was able to squeeze out a 10% performance improvement in Rails for my test case.

    When I’m not putting out fires or working with open source: I enjoy going to conferences to meet Ruby developers face-to-face. To date, I’ve spoken at 24 conferences in 12 countries, I’m still waiting for someone to throw a “Ruby Antartica” conference.

    I’m currently organizing a conference in Austin at the end of October called Keep Ruby Weird. But in general, I like to think of ways to empower or enhance other developers. My two longest-term projects are and The focus is to give every developer the visibility and motivation to get involved in open source. Codetriage helps you get involved with a repo’s issues and pull requests while DocsDoctor helps you find easy documentation patches that you could submit. Contributing to open source doesn’t have to be a full-time job and every little bit adds up.

    For something more recent, I wrote a project for fun that involves a Ruby program parsing it’s own source code to find performance optimizations. The goal of the project is to find areas where a string literal could be frozen, the project is appropriately named let_it_go. It’s not terribly practical, but I learned a bunch while writing it. I think it’s a good practice to program things when you get the itch, even if they’re not obviously useful. As children we learn when we play, as adults we stop playing and we stop learning as rapidly. While working on this project, I ran into 2 different things that are currently impossible to do in Ruby, which was definitely a challenge. I reached out to the community at large through Stack Overflow (issue 1, 2). I found experts who had written blog posts about those aspects of Ruby and contacted them directly via twitter. I also used ‘git blame‘ to see who wrote some of the code involved and reached out to them. Basically, I was looking for anyone with more experience than me.

    After getting confirmation of what was possible and not, I was able to blend techniques to build a working prototype. Sometimes the best way to move forwards is to figure out all the things you can’t do.


    When are you at your happiest whilst coding?

    I’m the happiest when I’m in the shower thinking about all the code I’m about to write. I usually get really psyched up and write a bunch of code right after. I love the feeling when I’ve got a coffee at my side, headphones turned up, and I know exactly what I need to do to solve a problem I’ve been working on.

    I get really excited about optimizing performance and experiences. I get frustrated very easily, so anytime I can use programming to take away my frustration is a golden opportunity. I love adding constructive errors to projects. I hate when something fails, and it takes me hours to figure out what went wrong when the program easily could have told me.

    I also enjoy deep diving into large libraries using only Ruby, for which the Method class is really useful. I write little mini journal entries to myself as if I’m an archeologist discovering ancient methods and classes. At the end I often find the bug I’m looking to fix and I understand that system much better.

    What is your dev environment?

    My editor is Sublime Text 2. I sometimes teach, so I try to use the same tools as my students. I use a MacBook Air 13″. GitX is my guilty pleasure for viewing unmerged git changes. I abuse Evernote like crazy, I store scripts, notes, todo’s and benchmark results. I don’t think I could program without it. I use Dropbox to store presentations when I’m traveling. This one time in Japan I spilled coffee all over my computer and had to run to the Apple Store in Ginza to get a new one. I’ve been paranoid ever since. Dash is great for viewing docs without an internet connection. I like collaborative editing of non-code writing with Draft.

    I work remotely, so I mostly code sitting on a couch or on a stool in my kitchen. I’ve got a coffee addiction, I have to cut myself off at 2 pm or I won’t be able to fall asleep. I’ve got really large ears, so most headphones are uncomfortable. I use Sennheiser HD 280 PRO at home and Bose QuietComfort 20i when I’m traveling.

    Locally I use chruby, which is a minimal Ruby version switcher. To install rubies either I use ruby-install or compile manually. Iterm 2 is my terminal of choice. I also love bundler. When I’m flying ‘$ bundle install –local‘ is my personal hero. When I’m debugging gems ‘$ bundle open ‘ is super fast. Even when I’m pushing my own gems to I’m able to use the bundle tasks and ‘$ bundle exec rake release‘ to tag, push, and release my gem all at once.

    I’m able to do most of my work locally when I need to get on another machine I use and Heroku’s ‘$ heroku run bash‘ which gives me an ephemeral remote session. When I need to modify scripts remotely I use Vim paired with Heroku Vim. I also find Heroku’s metrics dashboard really useful in high-level performance debugging.

    What are your favorite books or resources about development?

    I really like Ruby Weekly for keeping a pulse on what’s new in Ruby. I’ve really enjoyed Sam Saffron’s blog for some really good memory profiling and debugging. Recently I’ve been digging into Operating System Concepts which has helped merge some of my practical performance optimizing experiences with some OS theory I missed out by not getting a CS degree. Probably my favorite Ruby book would be Metaprogramming Ruby which really helped me solidify many of the core concepts and architectural underpinnings of Ruby.

    What technologies are you currently trying out or want an excuse to try?

    I know that Go and Elixir right now are really popular among Rubyists. I’ve been going trying to go the other way on the programming abstraction tree by getting better at C. I met Joel Scotkin at Devs Love Bacon 2013 who talked about autonomous rocket-powered landers. When asked what amazing language powered the company’s creations, he answered that it was good old-fashioned C. I find the language very understandable and extremely fast. I’ve been increasingly interested in getting into developing in the MRI Ruby interpreter which is written in C too.

    When not coding, what do you like to do?

    I’ve been going cable boarding at Quest ATX. Cable boarding is like wakeboarding without a boat. I’m just learning how to do some jumps off the teflon coated “kickers”. I’ve also been enamored by woodworking, I built a dining room table:


    Right now I’m into hand tools and doing most of the work in my backyard. Building physical things with my hands brings me some peace and balance after spending the whole day wrapped up in my own mind. I just got off of paternity leave and I’ve been enjoying watching my son grow. Right now we’re working on holding eye contact and smiling.

    What advice would you give to a younger version of yourself starting out in development?

    I wish I could have told myself to get involved with the community way earlier. The “Austin on Rails” group has a “socialization practice” after meetings which is shorthand for going to hang out at a bar. I went to meetings for years before I thought I was “good enough” to go to the socialization section. I was somehow convinced that people would grill me about my programming knowledge and unveil my status as a “non-professional” coder. When I went for the first time, I met really great people who were warm and welcoming. Since then, the community has been a constant source of strength.


    Thanks to Richard for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.

    Recent Interviews

    Saron Yitbarek
    Saron Yitbarek
    Allie Schwartz
    Allie Schwartz
    Lindi Emoungu
    Lindi Emoungu
    Jude Allred
    Jude Allred

    by Gareth Wilson at August 17, 2015 01:44 PM

    Lambda the Ultimate

    Using Commutative Assessments to Compare Conceptual Understanding in Blocks-based and Text-based Programs

    Using Commutative Assessments to Compare Conceptual Understanding in Blocks-based and Text-based Programs, David Weintrop, Uri Wilensky. Proceedings of the eleventh annual International Conference on International Computing Education Research. Via Computing Education Blog.

    Blocks-based programming environments are becoming increasingly common in introductory programming courses, but to date, little comparative work has been done to understand if and how this approach affects students' emerging understanding of fundamental programming concepts. In an effort to understand how tools like Scratch and Blockly differ from more conventional text-based introductory programming languages with respect to conceptual understanding, we developed a set of "commutative" assessments. Each multiple-choice question on the assessment includes a short program that can be displayed in either a blocks- based or text-based form. The set of potential answers for each question includes the correct answer along with choices informed by prior research on novice programming misconceptions. In this paper we introduce the Commutative Assessment, discuss the theoretical and practical motivations for the assessment, and present findings from a study that used the assessment. The study had 90 high school students take the assessment at three points over the course of the first ten weeks of an introduction to programming course, alternating the modality (blocks vs. text) for each question over the course of the three administrations of the assessment. Our analysis reveals differences on performance between blocks-based and text-based questions as well as differences in the frequency of misconceptions based on the modality. Future work, potential implications, and limitations of these findings are also discussed.

    August 17, 2015 12:25 PM

    Dave Winer

    Criteria for future-safety

    I've written about a future-safe web many times -- the idea that what we're creating on the web should persist. Will the ideas we publish be there years from now, so others can know who we were, what we did and what we thought?

    The concern is that the record we're creating is fragile and ephemeral, so that to historians of the future, the period of innovation where we moved our intellectual presence from physical to electronic media will be a blank spot, with almost none of it persisting.

    If, for example, this website were to persist, you would be able to read these words, at their permanent address, many years into the future.


    I made a list of some of scenarios that illustrate what I mean by future-safety.

    1. Some sites say you can download a full copy of all your work, but if the format is proprietary that doesn't count for much, and if they make it hard to do, or slow, that takes points off as well. There has to be some easy way to do something with the downloaded content.

    2. The highest-rated system would be one that's hosted in static HTML on the server of a long-lived institution. For example, I think the RSS 2.0 spec is well-situated for longevity. It's hosted on a static server at, along with other static content for the law school. Harvard has been around since 1636, that would seem to bode well for it being around in 2115, one would hope, and perhaps 2215? The Library of Congress, established in 1800, would be an excellent place to put long-lived public hosting.

    3. Dynamic content on my Windows 2003 server running on Rackspace would get a low score for longevity.

    4. Something you publish on Medium would get a low score, since the content is part of the business model of a revenue-free startup that's raised a huge amount of money. Chances that the writing survives long-term, relatively low. And Medium is especially dangerous because people are storing historically significant writing on their servers, with no provisions for longevity.

    5. If a service such as Medium offered a chance to mirror content on another site, that would dramatically improve the rating. If it were automatic, default-on, and the mirroring site was a static site of a long-lived institution, it would get the same rating as the long-lived site.

    6. Another way to achieve longevity would be to add an API that allowed it to be part of an openly implemented web content management system. That way other developers could implement mirroring from the private site to a public, static, long-lived one.

    7. A fantastic case-study is Sourceforge, last generation's GitHub, that's now putting malware in the archives (according to reports). When authors remove repos from their server, they put them back. Open source licenses make that possible.

    8. Services like and would get relatively good ratings because they have extensive APIs allowing them to be part of open content systems. APIs can be used to correct a lot of sins.

    9. No one today would get a perfect score because there's no way to purchase (as far as I know) a service agreement for the indefinite future. That would be a truly future-safe service, if we believe that the vendor is long-lived. (That's a key factor, this is not a service that can, imho, be run by a startup.) The agreement has to include renewing the domain name the content is hosted on.

    10. One more thing, a lot of people say they don't care about future-safety, but there's no reason not to care. Essays are tiny capsules of knowledge compared to video and audio, it is very inexpensive to store writing in ways that it can survive long into the future. If users want this, we will have it. If we had a rating for every service, you could pick and choose based on this feature as well as others that matter: readability, distribution, ease of editing.


    On August 24 I posted another requirement for future-safety.

    August 17, 2015 11:21 AM

    John Udell

    Where GitHub, Slack, and Trello fall short for collaboration

    If you are a small software startup operating in 2015, as we are, you have quite possibly converged, as we have, on Google Apps and the trio of GitHub, Slack, and Trello. In theory that trio could reduce to one. In an earlier post, I explored how GitHub might provide much of the document management, project management, search, and discussion a company -- not only a software company, but any company -- would need.

    To read this article in full or to leave a comment, please click here

    by Jon Udell at August 17, 2015 10:00 AM

    August 16, 2015

    Dave Winer

    Mike: Great tweet, time to put back

    Mike I was pleased to see your tweet yesterday about returning Silicon Valley to its earlier focus on products (and presumably users of those products).

    I think there's a good way to put this idea into action. Create a process where products are funded because they contribute new open formats and protocols to the mix. The last X years have been sucking the life out of the good beginnings of the open web.

    There's a lot of cynicism in the tech industry about keeping choice open for users. The result has been stagnation. As you note, most "tech" news is about shuffling orgcharts, movement of money, me-too products.

    Start some companies with people whose first love is the technology, not IPOs, or capturing users with lock-in. Fund companies who have the guts to give users choice.

    Another way of looking at it, this industry was founded by hippies who created new tech for love. Nowadays the sliderule and pocket calculator crowd have taken over. Not that we don't need them too. But we need some people who do this stuff for love. The money people laugh when you say that. But it's still true.

    August 16, 2015 11:23 AM

    Lambda the Ultimate

    ACM Classic Books Series

    This list of classic books is the result of a poll ACM conducted where members named their favorite computer science books.

    Good list. Bar the last two, which I have nothing against, the list consists of favorites of mine. It is always nice to see how many classics of CS come from work on programming languages. Not a surprise for anyone here, of course, but not always acknowledged. While we are on the subject of classic books, check out Luke's twitter poll here.

    August 16, 2015 06:24 AM

    August 15, 2015

    Dave Winer

    Our deal with the devil

    Sometimes an idea comes out in a sequence of tweets, worth preserving in a blog post.

    1. Reddit censoring sounds sort of sensible. What happens if Github starts? And before you all hand over blog posts to Medium, what if they do?

    2. Giving any tech company exclusive rights to a media type is a bad idea. Sometimes we get something in return, e.g. YouTube.

    3. Video files are huge. But an essay? Tiny. Repositories are tiny too. But there is some compute overhead for running a Git server.

    4. When we collectively give one tech company ownership of a whole media type, we're making a deal with the devil. It can't end well.

    August 15, 2015 10:17 PM

    August 14, 2015

    Dave Winer

    Koch for America?

    I didn't see this coming, and I should have.

    Has the Internet already disintermediated national politicians?

    Maybe Donald Trump is just the first of the former financial backers of candidates to eliminate the middleman and go direct to voters with their appeal and have their own names appear on the ticket?

    Maybe the Koch Brothers, not finding anyone to back that can beat Trump, will decide to run themselves?

    What if Shelly Adelson thinks Trump and the Kochs won't back Israel to the max, and sees no alternative but become a candidate himself?

    Koch For America doesn't seem so weird anymore.


    August 14, 2015 05:05 PM

    Mark Bernstein

    Telling Lies for Fun and Profit

    Lawrence Bloch (When The Sacred Ginmill Closes) is often a terrific writer, and often (The Burglar Who Liked To Quote Kipling) a very funny writer. In his youth, he got a job writing pornographic novels under contract, one a month, and it seems that was not a bad lesson. (David Mamet got started at Penthouse.) For some length of time, Bloch wrote a column for Writers Digest, and this is a book based on those columns. Lots of good ideas for aspiring writers, chiefly urging them not to tie themselves in knots, to write simply and directly and to get on with it.

    August 14, 2015 03:31 PM

    Dave Winer

    Why do smart people say such stupid things?

    Here's an interview with John Mackey, co-founder of Whole Foods.

    He says that intellectuals hate capitalism because they're jealous.

    It's worth watching, imho.

    Obviously Mackey is smart

    I'd love to know how Whole Foods works. How do they keep all those stores supplied with fresh, tasty and expensive food. Their stores in Manhattan are juggernauts, always full, with long lines. I marvel at human systems at that scale. Especially ones that deliver such a good product.

    If you do something unique on a large scale, over a long period of time, something that very few people do, then I think you're smart.

    But he isn't god

    But this crap about reading other people's minds, knowing that intellectuals hate people like him and why they hate him, well that's that just child talk. The world isn't like that. He's smart, but he isn't god. He can't see into other people's minds and souls. He isn't qualified. All the money in the world can't buy you that kind of power.

    I know other people like that, especially in the tech industry. It makes them impossible to be with. It's as if they live in an Ayn Rand novel. But when you live long enough to meet a struggle you can't think your way through, when you can see the end coming, for yourself or someone you love, you start to feel less powerful, self-sufficient, god-like. Rand's philosophy doesn't incorporate that. Yes, people die in her novels, but not the way actual people die.

    Stay in your power, JM

    I love to learn from smart people speaking from their power. John Mackey is definitely a powerful person, when it comes to setting up large human systems, and working within the political and economic system we have today. I would listen to him talk about that as long as he wants to. But on this other crap, that's boring and powerless, it's hubris. Only god can see into other people's souls. The day will come when he'll get his ass kicked, maybe not by another grocery chain, maybe by life, and then he'll be a more interesting person to learn from.

    This isn't capitalism

    We now have bike lanes in Manhattan. No capitalist made or could have made that happen although it was orchestrated by our then-mayor Michael Bloomberg, who in different contexts, says things a lot like Mackey. But he had to get buy-in from other politicians, and ultimately the people, to make it work. And it's still not an accomplished fact. People park their cars in bike lanes, and walk in them. We need police to enforce them, and other people to respect them.

    Mackey has to live in that world too. He depends on the government to clear snow from the streets so his delivery trucks can make it to his stores, so his customers can buy his food. Yes, he pays taxes, but poor people get to use the cleared streets too, even if they don't pay taxes. In other words, there may be some elements of capitalism in our society, but a lot of it is not capitalism.

    Another example, also in Manhattan, he very cleverly places his stores near major subway hubs. People get off the subway on their way home, go shopping, then get back on. Guess who pays for the subways whether or not they use Whole Foods, or are a capitalist? Even intellectuals, who he feels hate him, help contribute to his success. Go figure.

    August 14, 2015 01:51 PM

    Mark Bernstein


    This Twine story of transformation begins unpromisingly with the question, “first things first witchdumpling what’s in your drawers • vagina • penis • what’s it to ya.” This is obviously problematic. Who is being addressed? Does the answer matter? What happened to the punctuation? Does the writer have so little faith in their ability to command the reader’s identification with the protagonist – in a story written in second person present tense, no less – that they can’t get past your underwear? After all, they’ll shortly be writing this:

    > look around your apartment

    what a mess, dishes fill the sink, hair covers the floor. the air is hazy and sharp from the cloud of poison misery that smothers the city outside, the air conditioning unit rattles and whines, and the old tv set softly mumbles static.

    But dishes don’t fill the sink. There is no sink. I’m reading this in my office. (The air conditioner might take the edge off the city haze; why include it? If we don’t have a dishwasher, maybe we don’t have an air conditioner either.) I can get past all this: I can imagine the sink, I can imagine the dishes. I can imagine being the sort of girl who is about to summon the elder gods to her dingy Staten Island walkup: I’d better be able to imagine that, because it’s that kind of story.

    Of course, things are not that simple. The author is (or might be) transexual; the whole question of “what’s in your drawers” matters to them. I’m not sure that ritual transformation into a demonic supernatural being is really the ideal way to explore that question, but what do I know? Eva Problems is also seriously interested in Milton, which is a good thing, but here is chiefly concerned with the meeting between Satan and Sin (his daughter and former lover) and Death (their illegitimate son). (II 629-884)

    The one seem'd Woman to the waste, and fair,

    But ended foul in many a scaly fould

    Voluminous and vast, a Serpent arm'd

    With mortal sting: about her middle round

    A cry of Hell Hounds never ceasing bark'd

    With wide Cerberian mouths full loud, and rung

    A hideous Peal: yet, when they list, would creep,

    If aught disturb'd thir noyse, into her woomb,

    And kennel there, yet there still bark'd and howl'd

    Within unseen.

    I came late to Milton (via His Dark Materials) and he’s great at his best, and Book II is Milton’s best. Still, Homer nods, and young Shakespeare sometimes chimes, and Milton is inclined to go overboard, and if there’s one episode where he loses his head entirely, this is it.

    But if there’s something to take away from Milton here, it’s the ancient morning prayer: “Blessed art thou, Lord our God, King of the Universe, who hast not made me a woman.” Which makes Eva Problems’ focus on the passage particularly interesting, but that’s a discussion we don’t get to have.

    There’s an inventive hypertext trapped in Sabbat and trying to get out. You see hints of it in the finished work, gestures like the end where an attack on capitalism (and perhaps a defense of Stalinist ruthlessness?) seems rushed and unreflective. Almost all the links are story choices, asking what you want to do now, and most of the rest are inconsequential.

    August 14, 2015 01:38 PM

    August 13, 2015

    Fog Creek

    Call for Slack-using Beta Users!

    We’ve been working on a small, new product that can be used by itself in Slack, and as an extension to our current products with Slack too. It has been in use internally for a few weeks, and it’s now time to share it with some of you and get feedback from those beyond our walls.

    This is a beta, so there will be bugs, onboarding is still a little clunky. You get the point. What we’re looking for is feedback from people who use Slack, about how well our new product works, your general impressions as well as any missing features that might impact your use of it. Along with any bugs you find, of course.

    We aim to start adding people who sign up over the next few weeks. So, if you’re interested in taking part, then sign up with your email in the form below. Thanks!


    by Gareth Wilson at August 13, 2015 09:49 AM

    Dave Winer

    I loved Enemy at the Gates

    It was just the right movie for me a few nights ago.

    It got mixed reviews, most critics felt it tried to do too much, but I think they're wrong. The story is about people whose life expectancy is hours. I know the feeling myself, there have been times I've been so sick, or in a bad accident, that I felt like I was about to die. It can be hard to live when you're in that mode, you're so paralyzed with fear. Yet the characters in the movie, in that mode, lived, loved, made new friendships, made enormous sacrifices, had tremendous meaning to their lives. That's all any of us are trying to do at any moment, even when it feels like we have infinite time in front of us (and if you're in good health, and not in a war zone, or in the middle of a natural disaster, no matter how you feel about mortality at a conscious level, at a subconscious level you feel just fine. You don't know real fear until your subconscious believes that the end is near.)

    Had they removed any of the elements of the story, it would just be another war story, or a love story amid the ruins. Because it combined the themes, it was a very special story, and well-told.

    August 13, 2015 04:34 AM

    August 12, 2015

    Dave Winer

    There's a content-editable community

    Contenteditable editors are the rage now. Medium is one. Believe it or not Fargo is based on this browser feature as well. And my latest web editor, MyWord, works with the content-editable feature as well, because it uses medium-editor which builds on it.

    Medium and MyWord both store documents in HTML, Fargo does not, it stores the document in OPML, which is a simple attributed hierarchy. Here's an example of the OPML for my blog, which I edit in Fargo.

    Today I came across a new open source project called ProseMirror, that will produce results like Medium and medium-editor, but will store files in a user-readable non-HTML format. Here's an essay by the author, Marijn Haverbeke, explaining the idea.

    The user-readable idea is not itself new, that's what Markdown does. But presumably this will be different from Markdown, though I'm not clear exactly how it will be different.

    There's a lot of confusion in this world. Most people working here aren't aware of what others are doing. It took me several months to trip across medium-editor, even though I had written several blog posts here casting for references to projects in this area. We can and must do better at avoiding duplication, reusing code, and making things simple for users, especially for the projects that are open source.

    So I thought I'd mention each of these products, with links, in a blog post, and post a link to this piece in the places I know about where this is discussed. If you'd like to point everyone to other projects in this area, post a comment with a link. Maybe we can accelerate the process and create interop where possible.

    August 12, 2015 07:11 PM

    Mark Bernstein


    Danny Cannizzaro and Samantha Gorman

    Winner of the 2015 Coover Award, this iPad app is an art installation that invites the viewer to “pry open a troubled mind and hold its thoughts in your hands.” It’s thoughtful and serious and certainly worth $2.99. What it’s not is precisely what it claims to be: a novella.


    is the story of a demolitions expert, returned from the war in Iraq. The work invites you to either pry open the space between lines, which often reveals hazy video clips, memories of past traumas and their banal surroundings, or to squeeze them shut to reveal impressionistic word animations that (sketchily) represent unconscious or subconscious thought. The interstitial videos — or is this really video with interstitial texts? — are intriguing, but Pry really gets going in the most textual episode, Chapter 6, where prying lines apart leads to more lines and still more lines. This works – at times spectacularly – for the iPad, and it’s the most convincing use of stretchtext I’ve seen. The animation of the revealed text is superb; Polle Zellweger’s research in the late 90s argued that this sort of polished animation would in fact reward the effort, and Pry make that case nicely.

    There might be some sophisticated commentary on hyperfiction here, too, though I can’t quite see where it’s going. The work’s site is “”; is that an allusion to afternoon, a story, or just a way to find a vacant domain? There’s a girl and a scud and broken glasses: is that a nod to Victory Garden or is it just that the broken soldier always has a girl and a scud somewhere? I think there’s a nod to Garp, too, but I’m not sure it goes anywhere. And of course, once again, we have a hypertext of ruptured bodies and crashed vehicles; that could be homage, or it could be showing us all How To Do It, but it could simply be walking into the same tropes again. It’s hard to be sure.

    This is the latest in a line of electronic artist books, starting with Myst and Inigo Gets Out, in which we dimly perceive a depopulated world and in which the poverty of our perception and our lack of agency or reflected in the protagonist’s current paralysis and past impotence. The writing is sometimes fine and sometimes not.

    From a chinese restaurant six blocks away, the sound of frying echoes.

    Are the fried echoes served with rice? Six blocks is nearly a kilometer, and blocks are found in cities: who can hear the echoes(!) of the sound of frying over the song of the city? Writing about his fraught relationship with Jessie, The Girl, we are told that

    Relations between two NCOs were prohibited based on rank, class, and subordination.

    I’m not sure what sort of “class” we’re talking about here, and it looks to me like Section 92 of the Uniform Code of Military Justice could prohibit relations between non-commissioned officers of identical rank. “Relations” is a tricky word here: it suggests specificity but withholds it, it gestures at clarity but remains ambiguous. Why dance around it? This is Forbidden Love – maybe twice forbidden because I think The Girl is already My Brother’s Girl.

    Once again, we apparently have a story about a fellow who goes to war, is changed forever by the war, and who doesn’t do very much or think very much about the war and his place in it. Here, too, we have the conveniently impersonal SCUD missile stand in for the improvised explosive device, perhaps planted in the road by three kids whose sister was hurt in a raid last month, or whose aunt was the collateral damage of a drone attack, or whose grandfather went to Abu Ghraib. No one mentions Bush and Cheney; we play with those silly cards with the drawings of Famous Iraqi Bad Guys but we don’t spend any time on the fact that the whole thing was ginned up, a war in pursuit of a lie, itself in pursuit of a permanent Republican majority.

    Is Pry a novella? Things have happened, yes, but most of those things have already happened. That’s not a merely a framing story: our interest is so often focused on our current helplessness and its contrast to our past as a running kid, a thoughtful soldier, the man in charge of the explosive charges. There are words, sure, and lots of those words are good, but I’m inclined to think Pry a personal video installation which happens to employ a lot of text.

    Despite its awards, this is apparently a work in progress. That, too, seems odd; once you have let your work out into the world, it’s out; you can extend it, you can write a new work that envelops it, but the work is the work. If it was good enough to show without chapters 4 and 5; perhaps there are no such chapters.

    Jhave Johnston has a long and thoughtful review in the LA Review Of Books. It’s among the most intelligent reviews of a new media work I’ve seen in a nonspecialist publication.

    August 12, 2015 12:37 PM

    Fog Creek

    Building a Culture of Learning in Development Teams – Interview with Joe Mastey

    .little {font-size: 75%} .video { margin-right: 15px; height: 65px; }
    Building a Learning Culture – Interview with Joe Mastey

    Looking for audio only? Listen on

    Up Next
    Focusing on Developer Happiness with Humane Development

    In this interview with Joe Mastey, a Consultant who specializes in building a company culture that attracts and retains engineering talent, we discuss how to build out an internal learning program. He talks about what works and what doesn’t, how to get started with learning in development teams and the common mistakes made by teams who just want to constantly learn and improve.

    Content and Timings

    • Introduction (0:00)
    • Can only Teachers teach? (0:38)
    • The problem with on-the-job learning (1:02)
    • Benefits of a Learning Culture (1:55)
    • Phases in Establishing a Learning Culture (2:56)
    • Things to Try (4:33)
    • Common Mistakes (9:25)
    • Recommended Resources (10:56)



    Joe Mastey is a consultant that specializes in building a company culture that attracts and retains engineering talent. Previously led internal learning at Enova, and has held a number of development goals. He blogs and speaks at conferences about software engineering issues, including the talk Building a Culture of Learning. Joe, thank you so much for being here today. Looking forward to what you have to share with us. Do you have anything else to add?

    No. Yeah, thanks for having me on the program. For the last couple of years, I’ve been really getting into the topic. I’m excited to get a chance to talk about it.

    Can only Teachers teach?

    Great. First things first. Do you need to be a teacher to build a learning culture?

    Absolutely not. I very much have an engineering background. I have no teaching background whatsoever. One of the things that I always want to tell people is that when you’re trying to build this part of your culture, you don’t need to have a teaching degree. You don’t need that expertise. Really, if you’re interested, you can figure it out.

    Try a thousand things and monitor how they’re working. Don’t be afraid to throw them out.

    The problem with on-the-job learning

    In most cases, people just learn on the job. Why is that not enough?

    What I’ve seen in training and onboarding a lot of folks is that for the most part, when people try to learn on the job, they really only learn a narrow subset of all the things that they need to about a technology. What that leaves is a big gap in their skills where maybe they know a lot about one particular section of the platform, but then they miss entire other sections. That ends up being a hindrance.

    Specifically, one of the big things that I’ve seen is testing. People just really bad at testing. In the code bases that we work on, a lot of times, we’ll say they aren’t virtuous entirely. Some of the code is not very good. People in fact pick up these terrible patterns and so they internalize the wrong thing instead of learning the right thing.

    Benefits of a Learning Culture

    What could be the benefits of more of a learning culture?

    Basically, the thing that I’ve seen, the thing that interested me the most was that by creating a culture of learning, we actually increase retention, not only of the younger people, but also of the more experienced engineers. There’s this thing where when you’re at a technology company for maybe a couple years, right at the beginning you’re learning new things. It’s very exciting. You get a new platform.

    A couple of years in, you basically are done learning parts of it. You feel like you slow down in that learning. This is the part where a lot of people end up dropping off. By building a culture that continually moves forward and rewards that kind of learning, we can attract really great engineers. We can also retain really great engineers.

    On top of that, it actually reduces waste. One of the things that we’ve seen a lot of is if you aren’t really great with your tools, you’re not leveraging them completely. Because of that, you’re spending more time than you need to. One of the things that’s maybe counter-intuitive is that by spending this extra time, we actually end up saving time in the long run.

    Phases in Establishing a Learning Culture

    In your talk, you describe a multi phased approach in implementing a learning culture. What are the key phases?

    When I originally started out, it was really just a couple of folks who were interested in bringing this to the department. As much as everybody wants to learn on the job, not everybody’s spending the the time doing that.

    The first phase is really building up credibility. In that phase, we are trying to just find these quick wins and things to help people prove to themselves that what we were doing is going to be valuable and going to provide value to the business.

    The second phase, once we build the credibility, people start to understand that what we are doing is going to have a really positive value. In the second phase we start to expand outside of the couple of people and some of those quick wins. We can start to invest time and things that take a little bit longer. By spreading that, now we’re involving entire other teams of people. We’re trying to build links between teams. We can actually invest a little bit more money because people have started to understand what we’re going to get back for that money.

    The third part, which is the really exciting part is essentially making that a permanent part of the culture. Especially when you’re starting out, it can be fragile. It’s one of these things where there are only a couple of people who are actively driving this part of the culture. Like phase three, what you can do is make it a part of people’s job, where they just don’t even remember that it was ever something that they didn’t do. At that part, you have the ability to make really big changes that are incredibly helpful to the company but really need to have everybody on board.

    Focus opportunistically on places where you can have a lot of impact for only a little bit of effort

    Things to Try

    You mentioned these key phases, but for those just getting started out with this, are there some practical steps that they can take to help develop a learning culture?

    The thing that I tell people, first of all, is just get started. I mean one of the things that I go back to all the time is that of all the things that I’ve tried in the past across various companies, a lot of them don’t work. That’s okay. Like that’s part of the process is that we don’t know up front. It’s like Agile software, right? We don’t know up front what’s going to work.

    The first piece of advice is just start doing something. Beyond that, some of the really literal things that you can do, some of the really easy stuff is have a brown bag lunch. Have a book club. Do code review. Literally, you can have two people on different teams, just have those two people do code review between each other. Already, you’re starting to create the links within the organization that are going to support those changes later on.

    It’s really simple stuff that you can do. Post in your company’s chat program that you want to go to a meet up and see if some other people will come with you. It’s stuff where to get started, you want things where you only need a couple of people to buy in. It doesn’t really cost you anything, but you can come back and say, “Okay. I know now about this new Java Script framework. I know now about this tweak that I didn’t understand before.”

    Beyond the first phase, what else can you try?

    You have to try things with a longer term payoff. Things that where you’re doing that investment up front, but that you’re not going to see that payoff for a little while. Cross training is one of the big ones that I love. In a lot of the companies that I’ve worked with, there’s a difference, for instance, between the people who test the software and the people who write it, or maybe you have say database people who are a totally separate role.

    One of the contentions that I have made and I think I’ve seen this bear out in the results is that your UI people should understand that database. Your database people should understand how testing works. That’s something that is tough to do until you have that kind of credibility.

    There’s other stuff like weekly tech talks is one of my favorite examples. In the first company that I did this at, we had an hour long tech talk program, where it was four slots every single week. Every week, we got four new ideas into the organization. That’s something that does take time, and it does take preparation, but when you can start to do that, the effect on the organization is really obvious and it’s really good.

    So, I mean, not everyone’s going to care in an organization, so what should you do if only a few people care about learning?

    This is the challenge, right? Is that at the beginning, it’s usually only a few people who are willing to invest that time. We’re all in organizations where shipping software is a thing. You have to ship software. In the beginning, it really is about finding those wins that take very little investment and very little time, but demonstrate a lot of value out of them.

    My one is always testing, because we’re all bad at testing. Everyone’s just bad at this. Finding just one or two ways to improve people’s test technique, you can do a brown bag lunch and just show them two techniques. When they take that back, it’s going to be really obvious and really evident when they take that back to their work. You use that and say, “Look. I taught this one thing. It took me an hour. Now we’re better at this one thing.” You have to build that credibility.

    The danger here is that if it doesn’t work, you lose credibility, because you didn’t have much to start with. You really want to focus opportunistically on places where you can have a lot of impact for only a little bit of effort. Don’t try upfront to change the world right out of the gate, because you don’t have enough buy in for that yet.

    So, I mean, obviously learning seems to be a good thing, right? Why do you think that more people don’t take this approach?

    The resistance that I’ve seen, it’s really interesting. A lot of the resistance you’ll get is people say that they’re not really interested, but I think that the real reason that they’re rejecting these ideas and spending is they just don’t see the payoff. It feels like when I jump into the pool, or maybe it’s a senior engineer, the way that I learned was being thrown into the pool. Now what I see is okay, well I did well enough, and so clearly if I think I’m doing a good job, then why should we change this process?

    The big thing is really … They just haven’t yet seen the value to doing this in a different way. One of the big things to overcome is how do we demonstrate the results on something that, especially in the later phase kind of stuff, might take six months to payoff. It might be when you teach your database engineers about front end code, how does that payoff? It can take time to build that up, which is where that credibility comes in.

    By creating a culture of learning, we actually increase retention, not only of the younger people but also of the more experienced

    Common Mistakes

    What mistakes have you seen people make in implementing a learning culture?

    I make all kinds of mistakes. It’s one of my favorite topics. A really good example is trying to bite off more than you can chew at the start. One of the things that I wanted to do really early on was take a particular group of people who are existing employees and pulling up their skills really substantially, but they had like schedule pressure, and deadline pressure. I had not built up enough of that trust to really get them to invest the time. Lots of things just didn’t work. I basically had to re-approach it from a totally different angle later on.

    Other than that, one of the things that was interesting is with really new people, in the company where I was doing this, we had say five new people coming into the organization in a given week. Some of them were really green. Some of them were really, really experienced. I do think there’s a lot of value in pairing them together, but for instance, you have to remember that that’s a lot of stress for the really green people. There’s this process where you monitor what you’re doing. Try a thousand things and monitor how they’re working. Don’t be afraid to throw them out.

    What we did is we basically took the greenest of those green people and we just didn’t put them into the same groups anymore. That was effective. That only works because we were willing to not be precious about this original idea that we were positive was going to be a great thing.

    Recommended Resources

    What are some resources you can recommend for those wanting to learn more about encouraging internal learning?

    Dave Hoover’s Apprenticeship Patterns is a good one for that. Again, what I’d say is don’t get stuck on reading and learning everything beforehand, because everyone else’s organization is really different than yours. Whatever you learn is you’re going to have to take with a grain of salt anyway. The best thing to do is really just get in and start getting feedback from your own organization and from your own stakeholders. Don’t think that you’re going to perfect it by reading.

    Joe, thank you so much for joining us today.

    Awesome. Thanks for having me.

    by Gareth Wilson at August 12, 2015 10:51 AM

    August 11, 2015

    Mark Bernstein

    Let Go Of The Line

    Let Go Of The Line

    You are writing a short hypertext.

    Your hypertext will be clear, coherent, and concise. You have something to say: stand up, speak up.

    Tell everyone that you are busy. Find a comfortable place to write. Close the door if you think that will help. Be sure you have a good chair.

    There was a link in the previous note. Perhaps you did not see it. You cannot see it. Only Italo Calvino and his readers can see it, but there it is. In hypertexts, there may be many kinds of links.

    Each of these notes may contain an instruction worth hearing and weighing. Obedience is not required or expected. Rules about writing are made to be broken.

    We are accustomed to writing a fixed line, one that we imagine will be read from its start to its end. Let go of old habits.

    The reader is always thinking about what has been read, and about their reaction to it. The eye jumps ahead, the mind falls behind.

    Some readers have always started in the middle, because this week’s assignment covers pages 113-184. Some start in the middle because they like it like that.

    Coffee may help you focus. More coffee may help you focus more intensely. You may consider decaf. Consider scotch, but not too closely.

    Multivalence is not a vice. One word may mean many things. Won’t you stay just a little bit longer?

    Calligraphic hypertext uses links to connect notes together. Sculptural hypertext assumes that everything might be linked together; the writer adds constraints to remove connections.

    You are a writer. You are writing a short hypertext. You write. You do not author. No man but a blockhead ever authored.

    Links come in many varieties. The slow, static, blue and underlined links of the Web were a mistake. They are neither typical nor ideal. Respect them, but do not venerate them.

    Storyspace introduced the valuable concept of the default link – the link the reader will follow if they have no immediate preference. The default link from a given place may change, depending on what you have read.

    Do not think about the babysitter.

    In Storyspace 3, if a note has no default link, the system looks for sculptural connections. Sculptural connections augment calligraphic link, offering a set of destinations, all connected to each other except where the author has removed the connection.

    A set of sculptural links is like a shuffled deck of cards. The destination is the first playable card.

    From time to time, we might tell the reader to swap the deck she’s reading (or that she’s exhausted) for a new deck. The young Aristotle exchanged the scroll he was reading for a new scroll.

    In sculptural hypertext, a fresh deck signals a new chapter. Time has shifted, or circumstance. Everything has changed. You cannot go home again, not yet.

    The link is the most important new punctuation since the invention of the comma in the late middle ages. There may have been a time, long ago, when you did not know enough about the comma.

    You are not required to tell the reader when their deck has been swapped. If you wish, you may signal the shift by writing a transition that establishes a new place, a new topic, a new time, or a new voice.

    If things don’t make sense, take care. Readers may suspend disbelief, but they always form theories. One theory holds that you are an incompetent bore.

    Would you like another cup of coffee? You might consider the scotch. Or, you could bake some scones: they’ll be out of the oven in 17 minutes. Sometimes, when you are writing and young and merry, the dawn comes soon.

    The link’s guard field is time’s winged chariot, always urging us to move along. Without guard fields, large hypertexts may feel encyclopedic, and large narratives may have trouble getting anywhere.

    In the midst of sculptural hypertext, we find calligraphic links. A sculptural link takes us to the start of a calligraphic sequence – a dramatic dialogue, perhaps, that needs to be performed in a specific order.

    In the midst of calligraphic links, we find sculptural interludes, tangles and split/joins where the writer can ease up and let the reader improvise and chance intervene. Eventually, a new calligraphic link restates the theme and returns us to the tonic key.

    Cause and effect, call and response, point and counterpoint: constraints and calligraphy protect coherence.

    See whether new sequences will work for your hypertext. You may find many paths through your thicket.

    Four tourists are walking down a busy summer street in Ogunquit, Maine, past the boutiques and the bars and the organic bakeries. One of them asks another, “Say, is your husband out of jail yet?”

    Closure is a suspect property.

    “Stand up; speak up.” I said that before. I also told you to focus, to get comfortable, to close the door if you think that will help. Have you done as I asked? Don’t keep the door closed, and don’t keep your work in a drawer. The grave is another fine and private place.

    Comic theorist Scott McCloud describes “closure” as the theory that viewers develop to explain a cinematic cut, to piece together two shots – shots that might have been performed months apart – into a continuous scene. The reader will create a theory; you cannot stop her.

    The patience of the audience can be exhausted. It is greatest at the outset: they have come here for a story and they are inclined to let you tell it.

    While you were trying to get through your college’s legendary reading load, a girl across the dorm hall used to shout, to no one in particular, that she really, really wanted to fuck but how would she ever find the time?

    The patience of the audience may increase when the end is in sight. Even when it is not the end, a glimpse of the goal, the object of desire, can renew their patience.

    Your readers may form theories to explain what you meant, even if what you said cannot be true. You may tell them what they once heard: they know they did not hear that, but they may nod, anyway.

    You may fear that, if you let go of that line, you will fall, lose coherence, be lost to meaning. Your fear may be correct, but until you let go of that line, you will not know what lies beyond.

    August 11, 2015 10:40 PM

    One Way

    Brian Crane takes up the challenge of “How To” in “Web Dialogue: A Sample.”

    He runs up against a limitation of conventional web links: there’s no way to turn them on and off as you progress through a reading. Storyspace does this with guard fields – links can say “I can only be followed if you’ve seen X” or “I can only be followed if you haven’t yet seen Y”.

    Storyspace 3 makes guard fields a bit more powerful than they used to be, too; you can say “I can only be followed if you’ve read X, and then read at least 5 more things.” Or, for that matter, “I can only be followed if you read X at least five minutes ago.” Storyspace 3 also supports the sort of manipulation we like in “interactive fiction”: “I can only be followed if you have the Golden Key and if your Health exceeds 10, and it’ll cost you 50 gold pieces.”

    August 11, 2015 06:21 PM

    August 10, 2015

    Dave Winer

    What's good about Trump

    I know all kinds of social justice warriors are getting ready to punish me for that headline. Go ahead. Make my day. I'm glad that Trump is thumbing his nose at you all.

    You're good at wrecking people's lives because they "offend" you. I put that in quotes because some of the supposed offense is so rote, well-rehearsed, repetitive and boring, it just couldn't be real. More likely you feel powerless and unheard, and think this is a way to feel powerful and important. But there's a limit to how far it goes.

    You should be wrecking Trump's candidacy, but guess what -- you're not. And that's what's good about it. We need more people having the guts to say what they think and if it offends other people, let them be offended. The only way not to offend anyone is to say nothing. There's far too much of that going on these days.

    Before the net, we'd say what we think, and not worry too much about the consequences, because there weren't any. But lately, discourse has been like the great movie The Lives of Others about how hard it was to say anything in East Germany before the wall came down. We all live in that world now. We're all subject to the same rules as Presidential candidates in the US, and you know what -- it sucks! I'm not running for anything. Why should I give up my ability to speak? Why should your fake offense prevent anyone from saying what they think? It shouldn't.

    So while I think Trump is impolite, even rude, I'm glad he's doing it. We could use a little more rudeness. The thought police need to be pushed aside. The source of the rebellion is a guy with a really bad haircut who doesn't give a fuck what you or I think. And that's fine with me.

    Dave Winer

    PS: If you think he's rude, wait because Bernie Sanders says much the same thing, and he's a total gentleman. There will be others.

    August 10, 2015 08:39 PM

    Mark Bernstein

    How To

    How To

    Designing Storyspace Three has required some fresh thinking about writing hypertext, especially the craft of hypertext narrative. Where do you put the links? How do you know whether the links are too plentiful or too sparse? Sure, we can point to some lousy examples – most Web writing today either ignores links or uses them to lie – but cataloging sins and exhorting the audience to sin no more is not entirely convincing. We have examples of good writing with links, too, but talking too much of that makes people envious and tetchy.

    I’ve been inventing writing exercises and making an effort to actually write them out, using both familiar Storyspace features and the new sculptural techniques. One issue here is simply time: I’m finding it quite difficult to sustain more than 3,000 words/day of first draft material, even if the nonfiction is familiar ground. The fiction, well, I’m making that stuff up, so what takes so long? Damn.

    A friend who is a Friend writes on Facebook: “I have enough, I do enough, I am enough.” You’ve got to envy that. I can’t imagine what #2 would feel like.

    There’s a lot of literature that tells people How To Write. There are MFA programs and workshops and English departments and Comp Lit. There are plenty of books about books, many of them good. There are shelves upon shelves of How To Get Published and Write Best Sellers, and some of those stink of the confidence game but not all of them do.

    There’s not a lot of literature about writing with links.

    For example: imagine a long dialogue. The scene is dramatic and consequential: revelations will be made, minds will be changed.

    Now, divide the dialog into many shorter exchanges, as you might present them for reading on a small screen. Link them in sequence. This is easy enough, though someone might ask “How long should the passages be? How do I tell if this one is too long, or that one is too short?” and, if they do ask, I can’t recall a single paper in the twenty-seven year history of hypertext that will help them.

    But maybe no one will ask.

    Now, let’s change that sequence. Specifically: assume that if you were there, holding a microphone behind the arras, you would have heard the first sequence. But that’s not the way we’re going to tell it. Instead, we’re going to start with the first big revelation – lead with the news – and then circle back to explain how we got there, and then talk about what came later. If you like, you can add a framing story: we’re telling the grandchildren what was said, or we’re telling the jury, or we’re telling our friends as we sit around on the deck of our yacht, becalmed in the Thames. You can rewrite transitions, but if you change dialogue you probably want to change it in both places. (Or, perhaps someone misspoke or someone else misheard? Perhaps our narrator is not to be trusted? Hello, Mr. Rashomon -- grab a seat and what’re you drinking?)

    Now you think you’ve done the assignment, but you’re just getting started. Figure out ways to cross from one telling of the story to the other, and figure out ways to get back. Do not step outside the boundaries of the fields we know: magic and lyric, fugue and insanity, noise and nonsense and contradiction are all very nice and I’m sure you do them very well, but let’s keep this simple. Just make it possible to start either sequence and to wind up in the other.

    Finally, figure out how the initial split occurs in the story, and also write a passage – not necessarily the conclusion – which naturally follows either sequence.

    It seems to me this is the sort of thing hypertext writers ought to know how to do. It’s the sort of thing writers, period, ought to do in their sleep. Do we have good models? Where?

    How To

    I can’t draw, but it’s fun to try – in part because I’m not good at it, and because drawing and painting require thinking about the thing rather than the symbol of the thing, and software design is always about those symbols.

    There’s an iOS called Sktchy where people upload selfies and draw each others’. It’s an interesting mix: some school children, some art school students, some pro illustrators who are doing finger exercises or want to pin down some practical details. (If you want to draw ten Thai faces, or twenty colors of blonde, this is the place.) A lot of the discussion is formulaic or sentimental, but sometimes it's unexpectedly good.

    How To

    So, Leigh V’s photo and my sketch. There’s stuff we can talk about. Some of it’s just ineptitude – bad draftsmanship, eyes that are pretty much symbolic, a lack of conviction about the neck, all stuff that deserves a red pencil but that’s pretty much only interesting in terms of “don’t do that if you can help it.” But there are other things, too. The color choices are not harmonized but I think some of them work. The warm shadows aren’t there in the world but they’re interesting, and the cerulean on Leigh’s neck isn’t there either but it looks right in the image. The exaggerated shadows work, too, more or less; some of the drafting errors might actually help, and if they're errors and not intentionally painterly touches, well, that’s why it’s called the intentional fallacy.

    Leigh’s comment was “This remind me of Francis Bacon. But, you know, without the tortured screaming and slabs of meat.” And that’s generally where I meant to go, though maybe more Pearlstein or Freud than Bacon. But that’s an interesting conversation, too.

    But we seldom have these conversations about hypertext writing.

    The 2015 Coover Prize for Electronic Writing went to Samantha Gorman and Danny Cannizzaro for PRY. Sandy Baldwin won the Hayles prize for criticism for “The Internet Unconscious: On the Subject of Electronic Literature”.

    August 10, 2015 03:22 PM


    Discovering Accessibility

    My final project working at the Mozilla Foundation was, which was the first content-based website I’ve helped create in quite some time. During the site’s development, I finally gave myself the time to learn about a practice I’d been procrastinating to learn about for an embarrassingly long time: accessibility.

    One of the problems I’ve had with a lot of guides on accessibility is that they focus on standards instead of people. As a design-driven engineer, I find standards necessary but not sufficient to create compelling user experiences. What I really wanted to know about was not the ARIA markup to use for my code, but how to empathize with the way “extreme users”–people with disabilities–use the Web.

    I finally found a book with such a holistic approach to accessibility called A Web For Everyone by Sarah Horton and Whitney Quesenbery. I’m still not done reading it, but I highly recommend it.

    Stage 1: Accessibility Is Awesome!

    The first thing I did in an attempt to empathize with users of screen readers was to actually be proactive and learn to use a screen reader. The first one I learned how to use was the open-source NVDA screen reader for Windows. Learning how to use it actually reminded me a bit of learning vi and emacs for the first time: for example, because I couldn’t visually scan through a page to see its headings, I had to learn special keyboard commands to advance to the next and previous heading.

    Obviously, however, I am a very particular kind of user when I use a screen reader: because I don’t actually rely on auditory information as much as a blind person, I can’t listen to a screen reader’s narration very fast. And because I’m a highly technical user who is good at remembering keyboard shortcuts, I can remember a lot of them. So it was useful to compare my own use of screen readers against Ginny Redish’s paper on Observing Users Who Work With Screen Readers (PDF).

    After learning the basics of NVDA, I found Terrill Thompson’s blog post on Good Examples of Accessible Web Sites and tried visiting some of them with my shiny new screen reader. Doing this gave me lots of inspiration on how to make my own sites more accessible.

    The web service was also quite helpful in educating me on best practices my existing websites lacked, and The Paciello Group’s Web Components Punch List was helpful when I needed to create or evaluate custom UI widgets.

    All of this has constituted what I’ve begun to call my “honeymoon” with accessibility. It was quite satisfying to empathize with the needs of extreme users, and I was excited about creating sites that were delightful to use with NVDA.

    Stage 2: Accessibility Is Hard!

    What ended up being much harder, though, was actually building a delightful experience for users who might be using any screen reader.

    The second screen reader I learned how to use was Apple’s excellent VoiceOver, which comes built-in with all OS X and iOS devices. And like the early days of the Web, when a delightful experience on one browser was completely unusable in another, I often found that my hard work to improve my site’s usability on NVDA often made the site less usable on VoiceOver. For example, as Steve Faulkner has documented, the behavior of the ARIA role="alert" varies immensely across different browser and screen reader combinations, which led to some frustrating trade-offs on the Teach site.

    One potential short-term solution to this might be for sites to have slightly different code depending on the particular browser/screen-reader combination being used. Aside from being a bad idea for a number of reasons, though, it’s also technically impossible–the current screen reader isn’t reflected in navigator.userAgent or anything else.

    So, that’s the current situation I find myself in with respect to accessibility: creating accessible static content is easy and helps extreme users, but creating accessible rich internet applications is quite difficult because screen readers implement the standards so differently. I’m eagerly hoping that this situation improves over the coming years.

    by Atul at August 10, 2015 02:58 PM

    Dave Winer

    Dear podcast client developers...

    You should be able to gracefully handle feeds in which only some of the items have enclosures.

    Like the feed for this blog.

    Suggested implementation: ignore them if your client really is only for listening to podcasts.

    RSS is a medium that can transmit lots of different kinds of data. If you only care about one kind, just ignore the others. That's the philosophy of XML, as I understood it, when I developed the technology behind podcasting.

    Keep on truckin!

    PS: This post has a podcast attached, as a demo.

    PPS: Another possibility, make it a preference setting for the user. Default to ignoring posts without enclosures, but make it easy for the user to override your choice.

    August 10, 2015 12:55 PM

    Fog Creek – Interview with Jude Allred

    Ordinarily, in, we chat with developers about their passion for programming: how they got into it, what they like to work on and how. But this is – a special interview, introducing Jude Allred, our CTO. Jude is a long-time Creeker, having started here as an Intern and is now one of our new 4-person management team who leads Fog Creek.

    Jude Allred
    Location: New York City, NY, US
    Current Role: CTO at Fog Creek


    How did you get into software development?

    I always had computers around me as I was growing up. As a 7-year-old, my father sent me his old 386 onto which he had preinstalled Windows 3.1 and a handful of educational games (Math Blaster, Reader Rabbit…). Although it had Windows, it was still configured to boot to MS-DOS, so he included a two page printout of step-by-step instructions of how to navigate on the console and open up the games I wanted to play. I broke (and fixed!) that machine countless times. I remember deleting the ‘Windows’ directory at one point because I discovered I was out of disk space and, finding that to be the largest folder on C:\, I figured that clearing it out would help. I was partially right.

    This pattern continued through my young life and each time I broke and subsequently fixed my computers, I grew ever more confident in my abilities with them. I wasn’t a programmer in any sense beyond making little changes to configuration files in the system to help my computer run the games I wanted to play. (`DOS=HIGH,UMB` anyone?). But as I entered high school I started to realize that not everybody was as comfortable with computers as I was, and further there were many people with a lot more money than me who were far less comfortable. This resulted in a number of interesting financial opportunities for me ranging from providing power-levelling services in an MMO (My powerful character reduces an enemy to within inches of its life, wipes its memory, then your younger character delivers the killing blow to receive a ludicrous amount of character advancement points. $25-50 per hour.) to working as the “computer kid” at a local internet cafe ($8/hour, but it came with free soft drinks and air conditioning!)

    My first programming experiences technically occurred in high school. There was an Oracle sponsored database administration class which I’m told was provided for us due to a mix up between the name of my county, Puna, and a city in India, Pune, so I have a fun little certificate of qualification for entry level database operations. There was also an “AP Computer Science” class which ostensibly taught us how to program in Java, although they issued us C++ textbooks (“They’re basically the same”) and my class and I never managed to get past ‘public static void main(String args[]){}’. And so my first real language was C.

    During my summer as a rising senior in high school, I was very fortunate to be accepted into the NASA SHARP summer high school apprenticeship research program. They connected me up with a team of bright kids and a fantastic mentorship experience at Georgia Tech. I spent the summer working with an Aerospace Engineering professor running experiments with his computational fluid dynamics software, NASCART-GT. It was a great experience for me to work with computers to create new things and answer hard questions. Leaving that program, I decided that, yes, Aerospace Engineering is what I would pursue in college. When I started college I quickly learned that what I thought of as AE was actually just one of many applications of a turtle deeper in the stack: computer science. I switched majors within a couple days and never looked back. Even as I’ve found other fields of interest to me, I’ve always found some compelling way to connect my computer science background to enrich my overall understanding and ability.


    Tell us a little about your roles at Fog Creek

    Oh jeez, I’ve hopped around a lot. Through my career at Fog Creek, I’ve generally optimized for impact and learning. As a small company we’ve always had more things to do than time do them, so it’s not uncommon that I’ll spot something that we’re not focusing on which I think could impact Fog Creek at a greater scale than whatever else I might happen to find on my plate. I find and chase these things.

    A couple times, I’ve found myself feeling overly comfortable with whatever task is before me. This most recently happened to me when I realized that I’d spent several years as a dedicated feature developer in FogBugz. While happy and relaxed, I realized that I wasn’t really stretching myself anymore. In response to this I did the scariest thing I could think of – I joined our Sysadmin team. I’d always been a Windows-focused developer, so diving into the sysadmin world and doing well was a huge challenge for me and ended up being a fantastic experience.

    In rough chronological order, my favorite moments in my tour through Fog Creek include:

    • My internship! Working on real shipping code with a team of great peers and fantastic mentors transformed me from my college days of making small apps for myself and my friends to adapting to a software business mentality and really understanding that I could build real software in the real world.
    • Becoming an expert in FogBugz search and search optimization (then backed by Lucene.NET; no longer), improving our query performance by over 100x over the course of my first few months at FC.
    • Building the “Case Event Editor” with our then-PM, Dan Wilson, and hallway testing my first major FogBugz feature, then later iterating with the StackExchange 1.0 community (back when was a thing) on what I’d built.
    • Learning from the great folks at Business of Software (Dharmesh, Patrick, Jason, Peldi…) which lead me to spearhead our first in-depth funnel tracking, A/B testing, and Customer Happiness Index frameworks.
    • Being handed an 80-page report written by Brent Ozar about how Fog Creek could use Microsoft SQL Server more effectively and then figuring out and applying his recommendations to our production systems.
    • Founding and leading my own team of developers (Platform) and building it up from 1 to 8 members following the first principals of Fog Creek teams that I’d grown to love.

    My ongoing enjoyment of being a Creeker perhaps comes most from the trust that Fog Creek has consistently placed in me and the freedom I’ve had to experiment and pursue whatever I think can be most helpful.

    My time at Fog Creek hasn’t been without its challenges, though. Hurricane Sandy was a fun one. Our data center, located in Manhattan’s financial district, got flooded. Our SaaS applications (at the time: FogBugz, Kiln, and Trello) only remained online thanks to a diesel generator on the roof of the building. Unfortunately the fuel for the generator was in the basement, somewhere beneath two floors of water, and the pumps weren’t exactly working. While Manhattan rallied to keep its hospitals and critical services running, Fog Creek (we fortunate few) rallied to keep its SaaS platforms online (there’s even a video about it).

    A couple of years prior, in the aftermath of the 2010 Haiti earthquake, we had received letters from some FogBugz users letting us know that our software had been a big help in assisting a disaster relief team in reestablishing Air Traffic Control for the island. In the absence of other information, this set my base assumption for the duration of Sandy that across all of FogBugz, Kiln, and Trello, we were likely supporting at least some of the organizations involved in NYC disaster relief. This meant to me that in keeping our tools online we were providing a multiplier to the disaster relief efforts at a greater scope than any of us could otherwise provide individually.

    As for what those efforts were, in some cases they involved hackathon-style programming to move critical pieces of our applications out of our datacenter (e.g., during Sandy, Trello moved to a 100% AWS infrastructure) to literally hauling fuel from the street level up to our datacenter’s generator to keep it online. I’ll never forget how walking around the Financial District felt like being in a zombie apocalypse movie. I would not choose this experience for anyone, but personally and retrospectively I’m glad to have had this life experience.

    As a more personal challenge, I think I’ve had to learn to accept many of my weaknesses as strengths. I think in many situations there’s a huge pressure to conform or to go with the crowd, but there are also a huge number of situations in which the crowd isn’t really doing the right thing. The little things that can help you stand out also tend to make it harder to blend in. There are situations in which standing out is unwise (airport security comes to mind), but for the most part I’ve found that the gains from being the odd one out are overwhelming: more people notice you, more people think about what you do, and more people remember you. Don’t be afraid to be a rally post. You’ll be criticized, but you’ll also find your strongest allies.


    When are you at your happiest at Fog Creek?

    My happiest moments usually come in the calm after an important or especially complicated deployment. There’s so much build-up in putting something forward – making sure you’ve handled every dependency, everything worth testing has been tested, everything worth securing is secured. I live in FogBugz during these build-ups and thrive when everything is coming together and telling me that yes, I can have high confidence in what we’ve built and it’s ready to go. Push the button and don’t be afraid, you have logic and diligence telling you that your fears are unwarranted. And then it’s live and you’re braced for impact. What if your logic failed this time around? What if your choices were sound but were built on a crumbling foundation? Is Nagios about to start alerting? You’re waiting for the signal that you were wrong and you need to pull it back, but it doesn’t come. Your system is sound and in the calm and the quiet you smile. Celebrate your quiet programmer success.

    What software tools do you use and couldn’t live without?

    I initially thought of things like compilers and version control, but (although it would be brutal) Fog Creek would keep functioning if a genie wished static types and the concept of file history into nonexistence. I might still be able to play this distributed software company game, but without video chat I’m skeptical.

    Video chat is totally essential for me at Fog Creek. No one provider is consistently good enough for us, so we tend to jump between Google Hangouts,, and GoToMeeting depending on the context. Now that Fog Creek is dominantly remote, video chat is the difference between keeping cultural rapport and working at a company where half of the employees are actually just chat bots using Markov chains to generate a changeset now and again. I’m exaggerating a little, and we do use Slack heavily, but one of the most consistently positive tools I’ve found for working with remote employees is to escalate from text to video chat at every opportunity.

    And, of course, FogBugz is so engrained in all of my productive tasks that it’s hard for me to imagine being effective without it. Any task I have that requires detail, coordination, or accountability is tracked in FogBugz.

    What are a few of your favorite Fog Creek blog posts?

    Girls Go Geek Again was great. I’ve consistently appreciated that Fog Creek has talked openly and worked proactively with issues of diversity in tech and has been doing so for some time. It’s unacceptable that some voices are silenced or some opinions are criticized so heavily as to be evicted from discourse. Part of having a great time building software together involves having a diverse and accepting crowd. I’m really thankful of Liz, Fog Creek’s (now Trello’s) long time head of people, for building bridges like the Fog Creek Fellowship with the Flatiron School.

    Killing Off Wasabi is a recent favorite. I spent a fair amount of time both advocating and iterating with this project and it was very satisfying to watch it ship and receive appropriate fanfare. I’ve been a long-time defender of Wasabi in that I felt that at any given time, we made the correct decisions regarding how it should change or grow. I’m happy to think that our final correct decision was to take it away.

    What technologies are you currently trying out or want an excuse to try?

    I played with Facebook’s React framework not too long ago and was very, very impressed. I felt like they made a lot of great decisions and successfully tackled some of the core web framework problems that I’m used to seeing poorly addressed. On top of that, I was delighted by their tooling. For example, the dedicated Chrome debugging tools are a very nice touch.

    Next up, I think it’s time for me to write something serious with Go. Aside from perhaps being the coolest kid on the block, we’re having a really great experience with it in our new products.


    Outside of Fog Creek, what do you like to do?

    I like to spend most of my time running around in playgrounds with my daughter. After that, I enjoy following small Brooklyn bands through their venue circuits, getting brunch in Cobble Hill, finding small indie plays, or running off into the mountains.

    I keep my 52 board games in my office at FC and for a number of years I organized a weekly game night. I haven’t been able to attend recently, but I’m proud that it’s lived on in my absence. My all-time favorite board game is Twilight Imperium, and my most recent favorite is Hanabi.

    What advice would you give to a younger version of yourself starting out in your career?

    Clout disrupts meaningful discussion.

    If you’re the one with clout (say, you’re a mentor talking to an intern, or you’re some sort of manager or lead) be mindful that until you build a strong rapport with someone, going against your opinion is scary and accepting your criticism constructively can be hard. There will be some people with whom you’ll never gain sufficient rapport. There will be people who bottle up their opinion instead of confronting you. There are many ways to help this, but I have no single recipe. Mindfulness is key, however, because if you’re ignorant of it then your clout can drown out the very voices you depend on.

    If you’re talking to someone with clout, be fearless. I don’t mean to suggest dissent, and by all means give the experts the benefit of the doubt, but ask questions and have a meaningful presence in the discussion. Make sure you really understand them and ask questions if you don’t. It can happen that the most senior people become isolated and rusty if they lose a group of ambitious peers to challenge them.

    And then it comes full circle. Having a reasonable voice will start to give you clout, like it or not. Choose a kind voice.


    Thanks to Jude for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.

    Recent Interviews

    Rich Armstrong
    Rich Armstrong
    Saron Yitbarek
    Saron Yitbarek
    Allie Schwartz
    Allie Schwartz
    Lindi Emoungu
    Lindi Emoungu

    by Gareth Wilson at August 10, 2015 11:16 AM

    August 08, 2015

    Tim Ferriss

    Absolutely the best for flying. But which one? The booze, hat, or weird footwear?


    Absolutely the best for flying. But which one? The booze, hat, or weird footwear?

    Absolutely the best for flying. But which one? The booze, hat, squat, or weird footwear?

    Greetings, friends.

    Here are some popular links, thoughts, and articles that have appeared in my “5-Bullet Friday” e-mail newsletter, which is free and goes out every Friday.  I cheated in this post and gave you six.


    Article I’m enjoying (and pondering)How Bold Entrepreneurs Are Breaking $1 Million In One-Person Businesses by Elaine Pofeldt for

    Clothing I’m loving — Check out Myles’ “everyday shorts.”  I originally got these as a gift from Huckberry, and they are now my go-to shorts for nearly everything. I swim in them (quick drying), I wear them while working at coffee shops, and you can even wear them to a nice dinner if you have decent shoes. Multi-purpose rocks.

    My most popular Facebook post recently — Japan’s Michael Jordan of Day Trading. His “one rule” is quite smart, methinks…

    A quote that’s on my mind — “People think focus means saying yes to the thing you’ve got to focus on. But that’s not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I’m actually as proud of the things we haven’t done as the things I have done. Innovation is saying no to 1,000 things.” – Steve Jobs

    Responses I’ll be practicing (yet again) next week — How to graciously say no to anyone by Austin Kleon. This is worth revisiting constantly.

    New footwear, long overdue — I’ve needed Adidas slip-ons for years. No idea why it took me so long to get them. They’re perfect as indoor Japanese-style slippers, or for wearing outside when you don’t want flip-flops killing your toe webbing. I’m typing this on an airplane, where I’m wearing them with socks. #GermanStyle

    Would you like to get a very short (five-bullet) e-mail from me every Friday with the five coolest things I’ve found that week?

    It might include books, gadgets, albums, articles, new hacks/tricks, and — of course — all sorts of weird stuff I dig up around the world.

    These “5-Bullet Friday” emails are only available if you subscribe to my e-mail newsletter.  They will not be on the blog or anywhere else.  This post is just a teaser to entice you to sign up.

    Try it out for a week! Unsubscribing is easy, and there’s great stuff coming next Friday. Just submit your email address in the opt-in below (or here) and you’re set.

    Sign Up For 5-Bullet Friday


    P.S.  If you haven’t seen this short commencement speech, you’re in for a treat.  Perfect weekend viewing.

    P.P.S. Deal of the week — Why do fast-growing startups like Wealthfront, Airbnb, Etsy, and others use Vimeo PRO instead of YouTube for product demos, customer testimonials, training videos, etc.? No ads, customizable players, you can re-upload new edits without changing URLs, and much more. Check out the goodies here and use code “TIM” for 25% off.

    by Tim Ferriss at August 08, 2015 12:46 AM

    August 07, 2015

    Tim Ferriss


    The Tim Ferriss Show with Kevin Kelly

    “I do think we’ll have designer babies in the future. I’m not so sure people will want blue-eyed babies when they can make green or purple.”
    – Kevin Kelly

    Kevin Kelly (@kevin2kelly) returns to the podcast due to popular demand. Kevin continues to be perhaps the Most Interesting Man in the World.

    He is Senior Maverick at Wired Magazine, which he co-founded in 1993. He also co-founded the All Species Foundation, a non-profit aimed at cataloging and identifying every living species on earth. In his spare time, he writes best selling books, co-founded the Rosetta Project, which is building an archive of all documented human languages, and serves on the board of the Long Now Foundation. As part of the last, he’s investigating how to revive and restore endangered or extinct species, including the Wooly Mammoth.

    As usual, Kevin’s responses and answers are fascinating.



    Want to hear my conversation with Kevin Kelly, in which we discuss population implosions, the Long Now Foundation, organizational methods for learning, and much more? — Listen to it here (stream below or right-click to download part 1 | part 2 | part 3):

    This podcast is brought to you by Vimeo Pro, which is the ideal video hosting platform for entrepreneurs. In fact, a bunch of my start-ups are already using Vimeo Pro. WealthFront uses it to explain how WealthFront works. TaskRabbit uses it to tell the company’s story. There are many other names who you would recognize among their customers (AirBnB, Etsy, etc.) Why do they use it? Vimeo Pro provides enterprise level video hosting for a fraction of the usual cost. Features include:

    • Gorgeous high-quality playback with no ads
    • Up to 20 GB of video storage every week
    • Unlimited plays and views
    • A fully customizable video player, which can include your company logo, custom outro, and more

    You get all this for just $199 per year (that’s only $17 per/mo.) There are no complicated bandwidth calculations or hidden fees. Try it risk-free for 30 days. Just go to to check it out. If you like it, you can use the promo code “Tim” to get 25% off. This is a special discount just for you guys.

    This podcast is also brought to you by Mizzen + Main. These are the only “dress” shirts I now travel with — fancy enough for important dinners but made from athletic, sweat-wicking material. No more ironing, no more steaming, no more hassle. Click here for the exact shirts I wear most often. Don’t forget to use the code “TIM” at checkout.

    QUESTION(S) OF THE DAY: What habit, skill, or hobby do you think could have a life-changing impact? Please let me know in the comments.

    Scroll below for links and show notes…


    Selected Links from the Episode

    Show Notes

    • If you had to invest your entire life savings into one area of technology today, which would it be? What future technology will have the most unexpected impact on our lives? [7:50]
    • What is something (a certain habit/skill/hobby) that you believe can have a life changing impact for most people? [12:50]
    • What current technology in use by general western society would you like to see become obsolete in the next ten years and why? [13:30]
    • What’s the threat – technological, economic, or otherwise – that no one is expecting? [15:50]
    • What’s the thing you most admire about Tim and wish you could make a part of your own life? [18:40]
    • With the proliferation of on-demand apps, products, and technology, how can one add value to people’s lives? [20:00]
    • What are you afraid of?  [22:55]
    • How does your view of the future affect how you live your life in the short term? How do you plan for the future when you know so little about the landscape you will be operating in? [27:00]
    • What is your definition of journalism? What do you think the responsibilities of a journalist should be? [30:30]
    • Have you tried out the Oculus Rift yet? If so, did the experience change your view of the future? [34:55]
    • Do you have some examples of people who drifted along for years without any clear goal, and stumbled upon their “life task” by chance? [36:25]
    • In what ways does technology have the power to make people happy? In what ways does it not? [38:25]
    • How far will technology take us by 2020? [39:35]
    • Do you see possibilities or needs for a new mythology to arise in the coming decades? Something that integrates our new understanding of science, technology, and pace of advancement with the actualities of the human experience today? [39:45]
    • Do you have any tips for finding your purpose or mission in life? [41:15]
    • Do you think the technological singularity will happen? If so, when? [42:00]
    • What do you think will be the impact of designer babies in the future? Will everyone eventually become super intelligent, blue-eyed people? [42:25]


    by Tim Ferriss at August 07, 2015 11:02 PM

    Mark Bernstein

    Faulkner At MGM: A Hypertext

    Brian Crane’s intriguing hypertext on William Faulkner, Faulkner At MGM, is now online. It’s made with Tinderbox. Fascinating notes about the project as well.

    Crane has been anxious that he’d never master Tinderbox export, which is flexible but has a reputation for complexity. In fact, he’d been putting off even attempting to begin.

    So I bit the bullet, cut materials, linked back from dead ends where I found them, left quite a few long notes I’d planned to break up whole, and then last night (less than 24 hours ago!) sat down to see what I could get out of my Tinderbox file.

    It was a revelation.

    Tinderbox’s export is jaw-droopingly, amazing.

    August 07, 2015 02:23 PM

    Dave Winer

    Why use Twitter for identity?

    A new FAQ explains why we're using Twitter for identity in nodeStorage.

    August 07, 2015 12:43 PM

    August 06, 2015

    Dave Winer

    What is nodeStorage and why should you care?

    Yesterday I wrote a checklist that shows you how to install nodeStorage on a Ubuntu server, from scratch. It doesn't assume you have Node.js installed or a Git client.

    It shows you how to set up a connection with Twitter, and it stores user data, both public and private, in the filesystem of the Ubuntu machine. No need to hook it up to Amazon S3.


    Now, that's great -- but why should you care?

    1. With nodeStorage and the open source MyWord Editor, you can have a beautiful writing environment, like Medium, without the lock-in. Each user has an RSS feed. All the data is on your server, to do with as you please.

    2. The software, all of it, from top to bottom, is open source. So it can go where ever the open Internet wants it to go.

    3. It provides the basic back-end services that all apps need. I use the same back-end for Little Card Editor, Happy Friends, Radio3 and Little Pork Chop.

    4. If there were such a thing as an Internet operating system, something like nodeStorage would be the core of it.

    5. I wrote it because it didn't exist, and felt strongly that it should.

    6. It's been running on my servers for users of my software since June 2014. That's a pretty good burn-in. There probably still are bugs in the software, because I've been adding features ever since. But I am confident, and am depending on it myself.

    August 06, 2015 03:18 PM

    Fog Creek

    Building Resilient Services with Go – Tech Talk

    In this Tech Talk from GopherCon 2015, Blake Caldwell, a former Software Engineer here at Fog Creek who worked on the Kiln team, explains how he used Go to re-write and speed up KilnProxy, our SSH Reverse Proxy. Hear how he was able to re-write the service and reduce clone times by half, whilst making it more reliable and less noisy.

    Blake writes about Go and software development on his blog. He has open-sourced the profiler mentioned and you can get the slides from the talk on his GitHub.

    About Fog Creek Tech Talks

    At Fog Creek, we have weekly Tech Talks from our own staff and invited guests. These are short, informal presentations on something of interest to those involved in software development. We try to share these with you whenever we can.

    Content and Timings

    • Introduction (0:00)
    • Background (0:22)
    • About KilnProxy – SSH Reverse Proxy (1:33)
    • Results (3:35)
    • Handling Errors (5:20)
    • Channels (7:17)
    • Handling Panics (8:09)
    • Avoiding Race Conditions (10:00)
    • Implementing Timeouts (11:20)
    • Profiling (13:44)
    • Logging (21:20)



    Hello. This is another rewrite story that it went so well that I want to share with everybody. Like many talks, I’m going to be touching on a lot of things, I’m not going to deep dive on any, I just want to give you as much exposure as I can to things and tools and techniques that I found very helpful when writing my first Go production service.


    To give you some background, last year I was working at Fog Creek Software out of New York. If you guys have heard of us, you might be familiar with Kiwi. This is the FogBugz mascot. I was working on Kiln. Kiln is Fog Creek’s Git and Mercurial source code hosting service, it’s like a GitHub that works with Git and Mercurial. Before I worked there I hadn’t heard of Mercurial. I’m very familiar with it now. Most of my work was in C# and Python, I tried to gravitate more towards the back end stuff.

    Also last year I was lucky to attend Google I/O. I went there having no idea what Go was, I actually had never heard of it. Now everywhere you look, it’s everywhere. I don’t have to explain to you why I fell in love with it so quickly. I went to every one of the Go talks I could, I met some of the Go authors, and it was awesome. I knew that I had a solution to a problem that might come up some day.

    I needed to ship something awesome in Go. There’re hobbies, there’re fun things I could do in my spare time, but I wanted to prove something at work, I wanted to use Go to make something awesome for Kiln and to make Kiln better. I looked around for something to rewrite, there’s always something you can rewrite. I settled on our SSH Reverse Proxy. I also didn’t know what a reverse proxy was when I started working there.

    About KilnProxy – SSH Reverse Proxy

    To give you some background on what this is, when you’re dealing with Git or Mercurial there’re two ways to interact with a remote server. There’s HTTP and SSH. SSH uses public-private keys, it’s more secure. If you’re going to be cloning a repository from Kiln and you’re using SSH, you’re going to be talking to KilnProxy. You’re one of those people on the left there. When you talk to KilnProxy, KilnProxy has to make sure you are who you say you are by authenticating with your key and then it looks up to see where your data’s actually stored, we have lots of backend servers so it finds out which one is yours, where your repository sits. It opens up a connection to the backend server, it has a connection to you and then all it has to do at this point is proxy all the communication back and forth.

    Why would I rewrite this? It was working. At the time, our SSH clones were a lot slower than HTTP and this really shouldn’t be. If anything, it feels like SSH should be faster. Also, we had some stability issues and because of this, our system administrators decided to just restart the service every day. You can imagine if you have a giant repository and you’re trying to clone it, you’re twenty minutes into a clone and then it’s time for us to restart the whole server. You’ve just lost everything, you have to start over, it’s not cool.

    This actually turned out to be a perfect project for Go because there’s tons of concurrency. To give you an idea of this, when you first connect, we’re listening on a loop, we kick off a Go routine. That Go routine is responsible for authenticating your public and private key, or your private key. It then connects to the backend server and once it’s got that connection, it then proxies standard in, standard out and standard error, each on their own Go routine.


    How’d it go? It went well. Way better than I could’ve imagined. I just wanted to get it to work and things went very well. Let me show you how well they went. Every few minutes or so, we would clone a small repository and we would keep track of the timing. This right here is when we transitioned from our Python implementation to Go. I’ll let you guess where it is, it’s a little bit past the pink mark there. This is just at the launch of the rewrite. At this point now, SSH and HTTP have parity.

    You could see before, this was like a 1-megabyte repository but before it was taking about one and a half seconds, afterward it was down to .75. It was almost exactly twice as fast as before. This does scale up as the repository gets bigger, so we saw some pretty good gains here. Also, you can notice that there’s a lot less noise also. What we have is a faster, more reliable, less noisy service.

    Being my first Go service, I had to figure out how to write a stable service in Go and I’d like to share some of these tips here. What are we talking about with resiliency? We’re talking about writing a service that doesn’t crash, that doesn’t have to be restarted every day. It doesn’t leak memory and it doesn’t hang. Doesn’t get stuck. Obviously, this is a big process, there’s no magic bullet here. This is a process that spans development, profiling before launch and then after launch monitoring the service.

    Handling Errors

    Let’s start with error handling. Luckily, not too many speakers have talked about … Have had to say we should handle every error. I think everyone here understands we should handle every error. I came from Java where I’m used to very terse code with exceptions that I have no idea if they’re thrown or how to handle them. We just don’t worry about that in Java.

    We’ve all seen this, this is the pattern. You get a resource or you get a return value from a function and its error and you don’t use it under score for the error. Then after we check the error, we break out of the function if there’s an error. We defer the clean-up or the close. One thing I always make sure is to put no new lines in this little block here as I visually scan code, I want to see that this is one unit that can’t be broken apart.

    It looks like here we’re handling all the errors and so we’re good. We know that we should be checking for nil sometimes. Back to our example, what if OpenResourceA can return nil and what if it’s not an error condition? Maybe it’s a rare case that we’re trying to open the resource and for some reason it’s offline but this is not an error technically. Within our defer statement, could panic.

    Not necessarily, of course we have the technology to avoid this and one way we can do this is with an inline function, an anonymous function. We can just do our little check there and if it’s not nil, then we’ll close. The one problem I find with this is that it’s gross. I don’t like this. Can everybody see this? I don’t know if that’s big enough.

    One way I like to handle this is for methods that I know will be deferred, I like terse defers, I like that to be nice and clean. One thing I actually forgot until recently is that if a method on a struct receives its struct by a pointer. If that struct pointer is nil, that function’s still called and it’s passed in a nil for its pointer. In this case here, I’m making my deferred statement, the statement that I know will be the clean-up method. I actually check for nil here and then we get back to our original example where DeferResourceA.close is actually nil proof. I find this to be a good pattern.


    Let’s talk about channels. We all are familiar with channels and how much fun they are and they are fun, they are awesome but if you don’t know what you’re doing, you’re going to cause problems. I’m not going to deep dive on this because deep diving on channels would require half a day but I like to reference Dave Cheney’s blog post here which has gotten me through some tough times. It’s entitled Channel Axioms and literally every time I touch a channel, I just review this. I had it written down somewhere because I want to make sure that I don’t misstep with channels.

    The first three here are the ones I want to focus on is that if you have a nil channel and you try to write or read from it, it’s just going to block forever. When you block forever on a go-routine, that go-routine never exits and when a go-routine never exits it never frees up its resources and any resources like local variables it’s holding onto. When you send to a closed channel, you get a panic.

    Handling Panics

    Let’s talk about panics. They’re usually due, maybe always due, to program our error and if you get a panic it’s going to crash your service. I’m going to upset probably half the people in the room and say that I sometimes like to recover from panics. It’s a contentious issue, people say, “Well, it’s a programmer error. If you have a program error, you should let it crash and you should fix it.”

    That’s true, but I do make errors and they do make it to production and I want to scale back their damage if possible. Without going into the details, you can recover from panics. You should not treat them like exceptions, it’s not what I’m doing. When I’m setting up a function, you saw that error block. I make sure that everything I’m setting up will be cleaned up when I leave the function. That way, if a panic happens, all those would be fired.

    I try to limit areas of the code, I set aside some areas of the code where panics are allowed to happen, I catch it, I do log it and I do take it very seriously and try to fix those bugs. Let me give you an example. This SSH proxy was very complicated. If I’m being honest, I didn’t read the full SSH spec beforehand. We did have one customer who was using a certain build server that was using Git in a certain way that I didn’t know until afterwards. It was crashing and we had hundreds of other customers, thousands of other customers that had no problems, didn’t have this problem.

    If I had let this panic creep all the way to production, we would’ve had a fire and we would’ve had outages and we would’ve had to restart the service over and over. In that example, I handled the panic on the go-routines I mentioned earlier where you have … Which is just handling one client’s request. At the high level, the top level, if something goes wrong in the main loop, then that’s fine, that will crash.

    Avoiding Race Conditions

    Let’s just pretend that the author of the race detector wasn’t just up here. I don’t need to say a whole lot about this, but race conditions, when you have all this concurrency, you’re going to have races. Again, I said I was from Java in the past and I’ve used all the concurrency stuff you can do there and I know all these tools exist for Java and despite that, in the ten years I was working with Java, I never bothered to look.

    It’s super easy in Go because it’s part of the main tool suite here. Just like we heard earlier, in a report where a variable access is not synchronized, and when it does, it will crash for you and it will show you full stack trace, including exactly where the read and writes were and you should use this during your unit tests for sure but also development and integration testing.

    Again, here’s the output. This is awesome, tracking down this type of bug would’ve taken forever if you’re able to even catch it happening at all. Here we could see that the error happened where race.go line 14 was trying to read while race.go line 15 was trying to write. This literally takes minutes to solve. Again, you can enable this with the -race command line option on both test, run, build and install.

    This next bit isn’t specific to Go but I think it’s important to address if you’re trying to make a service that won’t crash and that could handle some problems at run time.

    Implementing Timeouts

    Implementing timeouts. We need to guard against some situations here. The big one is network timeouts. Our software, our programs are connecting to remote servers quite a bit. For that, we dial and then we connect and then we transfer data and then we’re all done.

    Best practice is, if you are trying to dial, you should be dialling with a timeout. If you look at the standard library, those dial functions usually have a dial with timeouts. Let’s say it’s reasonable to expect a dial to another server to take two seconds. Make that time out twenty seconds, it doesn’t matter, just make it so that some point if there’s a problem you don’t hang forever. If you have twenty of these connections going a hundred, if all day long you’re trying to reach the server and it never answers, you’re just going to run out of memory or have a crash.

    Once you have dialled, then you have to connect and you should also have a network connection and activity timeout. If it’s taking you … Actually, no, in this case, a connectivity timeout is if you’re transferring data back and forth and if you haven’t seen data in ten seconds, fifteen seconds, then you should just close connection and log it out. Also, you’re connected for a long time, maybe a minute’s reasonable, so a timeout after five minutes, a timeout after a number that’s ridiculous if it got that far.

    This next one goes without saying. I’m not going to deep dive on this but let’s not skimp on the tests. Tests are super important. For me, I don’t like to remember things so after I solve a problem, I like to set up a back stop where the test has my back, and when I hand off the code to somebody else or a future me, it’s still protected against these bugs. I’ll give you an example here, I’m a strong believer in integration tests and you should look in the Docker if you haven’t for these kind of tests.

    For an example in KilnProxy, there’s a lot going on with Mercurial and with Git when they’re talking over SSH. What I set up was an environment in a Docker container, Docker Image which I run as a Docker container, which will actually make it get commands to a running server through my KilnProxy code, so I’m trying git pool, git clone, git push, all those things. Same with Mercurial. The nice thing about this is now maybe a new version of Git comes out, we can just have a separate instance of that container with a new version of Git and we could have all these tests running in parallel, always making sure that our proxy’s not broken.


    We’ve just wrapped up development. We’re now starting to test out our service so we understand how it behaves. Let’s start with, “How does it use memory?” We profile it and like probably dozens of you in the audience here, I made a profiler. This is on Fog Creek’s page here if you want to take a look. It’s fun to watch, I don’t have an animation but it does actually update every second. This shows me here how much memory the service is using as far as the operating system is concerned. Within that it shows me how much is actually in use and how much the run-time is trying to give back to the system. In this case here, the purple line is memory that’s ready to be freed back to the system, sometimes the system takes it, sometimes it doesn’t.

    You’re able to come here and see some pretty good information really quickly. The kind of things you want to watch are how much memory does the service use when nobody’s connected? This is basically your baseline. Then when you receive connection, how much memory does that require. When memory ramps up and then back down, does your system reclaim your memory? That’s going to be dependent on the system itself and the memory pressure that it’s under. If you want to deep dive, you can take a look at what the garbage collector is actually doing by running your program with the GODEBUG environment variable set to gctrace=1. This is super cool to watch.

    Also, you would like to know where your memory’s allocated? The memory that’s in use, how did it get in use and for that, it’s PPROF. I know we’ve seen this already at the conference but if you guys haven’t used this yet, it’s going to change your life. It’s super cool. What PPROF lets you do is it lets you take a look at your service’s blocking profile. The goroutine count and stacktraces and the heap profile and stacktraces that lead to thread creations.

    This is an intimidating tool but it’s super easy to use. All you have to do is import the PPROF package which will set up a whole bunch of HTTP endpoints for you. It’s your job to pick the port, pick the IP and listen and serve. Super easy to set up. Once you do, you hit this page. This is just the main page but that takes you to the real meat of the output here. Right away, you already see some useful information. Right here, we can see that we have 32 goroutines in use. Let’s say this is my baseline, let’s say no users are currently connected to my local dev system, my system requires 32 goroutines.

    It’s important that we don’t leak goroutines as I mentioned earlier. We want to avoid these leaks because the memory leaks and … Using PPROF, we can tell how many goroutines are in use when nobody’s connected, we can then connect with one user and keep that connection open and look again. When it’s all done, when you’ve run a hundred connections or a thousand connections, you’ve run it overnight and everyone’s done talking to your service, you should see that first number again. You should see 32 again. If you see 33, you have a problem, you should fix it.

    Let’s say I have 33. Where’s that extra goroutine? Back to that original page, you click on goroutines and you see a full stacktrace. We’ve all seen stacktraces and usually it’s with great sadness, our service crashed. Here you’re seeing a stacktrace of your service while it’s running. You refresh this page and you’ll see the next snapshot of what’s going on. This is awesome. You see which line each goroutine is sitting on.

    PPROF is awesome from the webpage but where it really shines is the command line because you can run your command line, your PPROF command line locally, it’s going to connect to these web endpoints and most of these endpoints are made for computer consumption anyway. It’s going to interpret this for you. From the command line, we’re going to run go tool PPROF and then the location of the binary, that’s running out on the server. We’re going to give it the HTTP endpoint to the goroutine page.

    Now we’re going to enter an interactive terminal. You type in top five to see the top five locations that these goroutines are waiting. You can do top ten or top nine, it’s pretty cool. This is fun, so if you have a problem, you’re going to track that down but then what I really like to show off is you type in web, and after you install a bunch of stuff, this works. It pops up a browser showing you your call stack and showing you how all these goroutines came to be. This is a simple example, once your server gets bigger, you’re going to have a lot more of these boxes. This is a cool SVG graphic that you can zoom in, pan around on on your browser. You’re going to track things down, you’re going to find out exactly how these goroutines respond.

    Again, PPROF can help you out with your heap memory as well. Here I can see, by again, so running go tool PPROF, the server which is my binary and then the location of the heap endpoint. I run top five and I can see here, “Oh it looks like my biggest offender is my profiler.” Then I noticed that’s okay, it’s only using 1.8 megabytes of my total 2.3. That’s what I expect. You can dive down further there and just like before, you can type in the web command and you get your SVG opening up in a browser again. This is a super simple example, yours will look a lot more complicated. You see the call stack, the call trace, the call stack that shows you where this memory is being allocated.

    This is great to see because a lot of times you’re using a lot of memory, you don’t know why because it seems to be out of your hands, it seems to be in the library that you’re using. You could dive down and maybe you can patch something, you can fix that library or maybe just understand how it works a little better.

    At this point, we’ve built our system, we’ve profiled it in testing, so we know how it behaves and we’ve deployed its production. So at this point, we have to be able to tell what’s deployed is the first thing. Sometimes I don’t trust our deployment process. Sometimes I also don’t trust how we keep track of what code is in a release. I have an endpoint that I will expose to our intranet so it’s not exposed to the outside world. Called info and I showed the version, I showed the start time in epoch seconds. I showed the server’s current time in epoch seconds so that you don’t have to worry about time zones, you can do some pretty complicated math to figure out how many seconds have elapsed or you could just look at the up time, human readable form at the end there and I see that I have 167 hours and 10 minutes and 2 seconds and I love seeing that number go up.

    I’m going to take a brief aside to show you about this version number because I think this kind of a cool tip. In this case here, the version number I like to use is a variant, there’s lots of different things you can do here. You have major, minor release. Then you have the commit number on the tree that I deployed. That should always go up as you deploy new code. You have the Git SHA of the commit that was deployed which is great because a lot of times, you tag stuff, there’s a build process but it’s not you doing it so you don’t trust it. If there’s a bug, if we just launch something, someone asks, “Did you fix that bug? Is that out in production yet?” I take that SHA, I can do a Git checkout or I could just look at the Git logs and find out where the fix made it. Maybe it already occurred at this point. At the end there I have the date and the time of the build.

    To talk about how I’m able to generate this, obviously you can’t expect people to know the Git SHA of the upcoming commit, that’s not reasonable to expect. What we could do here in Go is you have a global variable in your code, call it service version, call it whatever you want and then from the Build Script, from your command line when you’re building, you can set this global variable right there from the command line. Our code’s already committed, the SHA already exists and then use the -ld flags to set main dot service version to that string that we build up in our Bash script.

    That’s super useful when you’re deploying ten instances, a hundred instances, thousands of instances of your service on different machines. You could automate making sure that they’re all at the right version, the same version. Now we need to see what our service is doing, back to monitoring what the service is actually doing.


    Obviously, keep good logs. We all like logs and one little tip I can share here and I’m sure this is not my invention, when you receive a new request, come up with a semi-random string, pass that all the way through all the functions or use a context or something to pass it around so you can include that as your prefix on every log entry. This is super useful because when you have thousands of users connecting with concurrency, you look at your logs, it’s a giant mess. You can use Grep to easily find out what’s going in with one connection.

    Next, we want to know who’s currently connected. This might not be useful for many of your services which respond within 50 milliseconds. Kiln connections as I say can take minutes when you’re cloning a large repo. I noticed a lot of traffic, I want to see who’s connected. I have another endpoint called connections. Here I can see that I have one user, it’s the Aviato account. Erlich Bachman is connected. It looks like it says build server, people tend to name their keys build server laptop. He’s been connected for twenty-five minutes and four seconds so that might seem a little fishy. Maybe I’ve noticed some problems recently. I’m going to take that session key which is my log string, I’m going to go through the logs and find out exactly what’s been going on throughout this session.

    Since I’m keeping track of how many users are currently connected, I can implement drain and die. I never thought of this, I talked to our system administrators and they told me about this. What this means is when system administrators want to kill the app, kill the service because of an upgrade or just a planned restart, I’m not going to let the process end until I’ve served all the current connections. It listens for the sigterm, which you can do in Go, you can listen for system events like sigterm and once I get my sigterm, I stop listening for new requests and I will just sit there and loop and sleep until all the existing requests are done.

    Game day. All this work that went into making a responsible service was put into … This was the first time it was tested, it was kind of a pretty cool day. The system administrators got an alert from Nagios and they said, “Blake, KilnProxy’s broken. It’s using 40 MB more than it normally does.” We all know that KilnProxy wasn’t broken. Let me quickly view my profiler and not an actual screenshot but I was able to see yes, okay, there actually is … Memory usage is up there, the system is reporting what I see. I can see that the memory is currently still in use.

    Let’s dive down a little bit more and I look at my connections page, my endpoint. I could see Initech is connected ten times. Peter Gibbons is doing something he shouldn’t be doing or he’s having a problem or we’re having a problem. To back up a little bit, during development, I know that each connection takes about 4 Megabytes of memory. Using PPROF, I know that most of that 4 Megabytes was out of my hands. I didn’t feel like diving down any deeper but it was mostly SSH library internals, encryption stuff.

    Wolfram Alpha tells me that 4 megabytes times 10 is 40 megabytes roughly. Customer service reaches out to Initech and yes, sure enough, they were having a problem with their build server, I think, I don’t know, I forget. They turn off their build server, restart it, we work with them and they’re happy that we noticed their problem before they did. Because I implemented timeouts, I know that all those ten connections eventually will drain, will be closed. Because of my production profiling, I know that if the system is under memory pressure, all that extra memory I was using will be reclaimed by the system.

    Uptime: preserved. As far as I know, I think the service has been, it’s been running for six months or so and I think it’s been restarted three or four times. I haven’t checked Wolfram Alpha, I believe that’s more than once a day. Things worked out really well and it was a good experience. Based on this, this was our first prototype, first production use of Go at Fog Creek. It was met with a lot of skepticism and since it’s been running for so long, months at a time without being restarted, it convinced everybody there that this is a technology worth exploring. It was a great experience for me and I want to thank you for listening.

    by Gareth Wilson at August 06, 2015 12:46 PM

    August 05, 2015

    Mark Bernstein

    Tales Of Storyspace

    Tales Of Storyspace

    I’ve just spent the better part of a day in Storyspace. Not in Xcode building Storyspace, but actually writing new stuff in Storyspace 3. (I did need to bail and do a fresh build to address a bug, but I got all the way to 4PM before that happened. A landmark.)

    Right now, I'm working on a way to integrate Storyspace and Card Shark, one of my exotic hypertext systems. The two are very different in form and rhetoric, but I expect they’ll work well together; in particular, Card Shark lets you construct tangles with more easily and more thoughtfully than pure Storyspace allowed, while focusing your concentration (and the map view) on links that participate in more interesting patterns.

    For example, a chase lends itself beautifully to the tangle. Lots of stuff happens in the course of a chase. Some of it is indispensable. Some might work tonight but be better left out tomorrow; that’s what hypertext is for. Sometimes, we might keep the point of view in one place, tracking our protagonist. Sometimes, we might intercut the hero’s point of view with the enemy’s. Hypertext can do that, too.

    August 05, 2015 08:17 PM

    A New Book About Tinderbox

    A New Book About Tinderbox

    Prendre des notes avec Tinderbox: petit guide interactif. By Dominique Renauld. In French, looks great, and just $3.99.

    August 05, 2015 01:57 PM

    Lush Life

    A drunk writer who moonlights as a bartender startles his inept and inexperienced mugger; the kid flinches, the bartender falls dead, and it’s another night in the Lower East Side. The eyewitnesses turn out to be idiots who foul everything up, the police interrogation gets the wrong guy, the brass interfere, and soon the case is hopeless. The main characters are pretty hopeless as well, as nearly everyone stews in mild self-loathing. Price writes nearly everything as an interrogation; for these characters, few of whom are likable, even internal dialog is adversarial. The conceit works well while also showing us just how much is actually happening. The book, like its gentrified tenements and its Projects, is bursting with characters who are going about their business and who just happen, for a time, to cross paths with the police. Some are going upstate, some are going to make it, some are going to hell in a bucket, and some are going to Jersey: they're all going places, and almost all of them have something going.

    August 05, 2015 01:50 PM

    Dave Winer

    I don't want to be Twitter's CEO, but..

    'Hexley the Platypus' by Source. Licensed under Fair use via Wikipedia - on Twitter, Trent Krupp posted an idea that's worth using as a starting point. But first, I want to deflect the idea of me being CEO of anything. It's ridiculous. I was a CEO once, of a very small company. I had to deal with investors, creditors, angry users, defecting execs, predatory platform vendors, quirky programming talent, going to conferences, trade shows, raising money, fighting landlords, being sued, etc etc. The only part of it I liked and was any good at was fixing bugs and shipping products.

    Rebooting the platform

    I'm not a CEO, but could be part of the reboot of Twitter. I'd like to get a chance to reboot the platform. People say you can't get developer trust back, but if you get a famous freedom-loving Internet developer to design the plan, someone like me for example, that might get people to take a look. But I wouldn't rep the platform as anything other than what it was. If it was to preserve developer freedom, it really would have to deliver.

    To make a developer platform that works, Twitter would have to irrevocably give up control of core parts of the technology. People like to make analogies to Apple, so this would be analogous to Apple building the core of OS X on FreeBSD Unix, which had the most liberal open source license at the time. They then contributed their enhancements, known as Darwin, as open source. Twitter would do the same. Above a certain level, the Twitter OS would be proprietary. But the core transport technology and most important the protocol it implements would be open and easily cloned.

    If I want to operate my own server to peer with Twitter, using the same @namespace, I can. And on my server, the only rules are the ones I make. Let a thousand flowers bloom, at all levels of the ecosystem. This would be new fresh territory for developers. It allows them to create labs for new ideas, and a flow of new Twitter-compatible technology. Possibly a vast new flow.

    Back it with money

    Then I'd ask for a good-size amount of money for investing in and acquiring products from developers that build on this newly open technology. We'd, of course, announce the amount publicly. Partner with a few leading VCs and individual investors. Possibly even issue a new class of stock (a subsidiary, so people could make a pure bet on the developer possibilities, without buying the liabilities in the current Twitter stock). That takes care of the other side of the developer equation. Having shown there's an opportunity, also show the developers that we're willing to share the risk with them. We want your love, and we're willing to help with the dollars.

    This would be a fantastic bet on the idea that Twitter left a lot of money on the table in the form of new ideas that can be developed on top of an Internet-scale notification system, which never existed before Twitter, btw. As a person with a sizable investment both in terms of know-how and working code, in the Twitter platform, I really really believe this.

    August 05, 2015 12:19 PM

    August 04, 2015

    Dave Winer

    Let the inmates run the asylum


    I used to go to Apple's World Wide Developer's Conference in the 1990s, and would often get the idea sitting in the audience that a lot could be gained from having developers on stage while Apple people sat in the audience and listened. We would tell them what we wanted to do with their platform, so when they decided what features to add or bugs to fix they would know where their work would have the maximum value. There were a lot more of us than them, and we didn't draw salaries, so the economics would work better for their employer.

    It never happened. The developers were meant to listen. I think a lot of opportunities are missed this way. Someday I'd like to see a platform vendor give this idea a try. I bet it would change the way their developer community thinks about them and vice versa.


    The P in NPR is public, but what role does the public actually play in NPR? Our job is to send them money during pledge drives, and of course to listen, admire and applaud. But what if public media actually included the public, and the listening went both ways?


    The other day I wrote how the NY Times was ignoring their readers after they ran a story that wildly misrepresented the truth about Hillary Clinton's emails. They never explained to the readers how this happened, or how they were making sure it wouldn't happen in the future. Instead they pointed the finger at the Clinton team, because the bad story they ran hurt them? What kind of sense does that make. Sure they owe Clinton an apology too, but their first responsibility is to their readers. Without trust of readers they have nothing, or so one might think.

    That's why I think there should be a certain amount of real estate on the NYT website and in its RSS feeds for unedited public reaction to what appears in the Times. If they had to fear from responsible readers, people who really care for the quality of their product, they might self-police more effectively. Something has to change here.

    Melody and company

    All that is preamble for what Melody Kramer and her newly announced team are hoping to do with public radio. Now that distribution is an Internet thing, giving every "station" access to the world without the 24-hour-per-day limit of broadcast radio, any public radio station that picked up on the idea that they could give the stage to the people formerly known as the audience, in a way that had value to other listeners, and improved their product, could find it owned a much larger share of public attention than they could by sticking to the one-way tradition of broadcast.

    Her idea is the same as the idea I had for the WWDC. Let's find out what happens when the public is doing the media, and the professionals listen. If anyone can pull it off, she can, because she has the respect of her industry and the courage to be radical. These are times that call for radical approaches. I'll be watching and helping as much as I can.

    August 04, 2015 05:45 PM

    Lambda the Ultimate

    Ceptre: A Language for Modeling Generative Interactive Systems.

    Ceptre: A Language for Modeling Generative Interactive Systems.
    Chris Martens

    We present a rule specification language called Ceptre, intended to enable rapid prototyping for experimental game mechanics, especially in domains that depend on procedural generation and multi-agent simulation.

    Ceptre can be viewed as an explication of a new methodology for understanding games based on linear logic, a formal logic concerned with resource usage. We present a correspondence between gameplay and proof search in linear logic, building on prior work on generating narratives. In Ceptre, we introduce the ability to add interactivity selectively into a generative model, enabling inspection of intermediate states for debugging and exploration as well as a means of play.

    We claim that this methodology can support game designers and researchers in designing, anaylzing, and debugging the core systems of their work in generative, multi-agent gameplay. To support this claim, we provide two case studies implemented in Ceptre, one from interactive narrative and one from a strategy-like domain.

    Some choice quotes from the artice follow.

    Simple examples of the rule language:

    The meaning of A -o B, to a first approximation, is that whenever the predicates in A are present, they may be replaced with B. One example of a rule is:

         at C L * at C’ L * likes C C’
      -o at C L * at C’ L * likes C C’ * likes C’ C.


    Note that because of the replacement semantics of the rule, we need to reiterate everything on the right-hand side of the -o that we don’t want to disappear, such as the character locations and original likes fact. We use the syntactic sugar of prepending $ to anything intended not to be removed in order to reduce this redundancy:

    do/compliment: $at C L * $at C’ L * $likes C C’ -o likes C’ C.

    A more complex rule describes a murder action, using the ! operator to indicate a permanent state:

        anger C C’ * anger C C’ * anger C C’ * anger C C’
        * $at C L * at C’ L * $has C weapon
      -o !dead C’.

    (This rule consumes C’s location, maintaining a global invariant that each character is mutually exclusively at a location or !dead.) Here we see a departure from planning formalisms: four instances of anger C C’ mean something different from one. Here we are using an emotion not just as a precondition but as a resource, where if we have enough of it, we can exchange it for a drastic consequence. Whether or not we diffuse the anger, or choose to keep it by prepending $ to the predicates, is an authorial choice.

    Concurrency in narration:

    Two rule applications that consume disjoint sets of resources from the same state can be said to happen concurrently, or independently. On the other hand, a rule that produces resources and another that consumes a subset of them can be said to be in a causal, or dependent, relationship. Less abstractly, if resources represent facts associated with particular game entities or characters, then independent rule applications represent potentially concurrent action by multiple such entities, and causally related rule applications represent either sequential action by a single actor, or synchronized interaction between two entities.

    Stages, and a larger example:

    We would like to for some of these rules to run automatically without player intervention. In our next iteration of the program, we will make use of a Ceptre feature called stages. Stages are a way of structuring a program in terms of independent components. Syntactically, a stage is a curly-brace-delimited set of rules with an associated name. Semantically, a stage is a unit of computation that runs to quiescence, i.e. no more rules are able to fire, at which point control may be transfered to another stage.


    Additionally, we can test the design by “scripting” certain player strategies. For instance, we could augment the two rules in the fight stage to be deterministic, fighting when the monster can’t kill us in one turn and fleeing otherwise:

    stage fight = {
          choice * $fight_in_progress * $monster Size * $health HP * Size < HP
        -o try_fight.
      do_flee :
          choice * fight_in_progress * $monster Size * $health HP * Size >= HP
        -o flee_screen.

    If we remove interactivity from this stage, then we get automated combat sequences that should never result in the player’s death.

    August 04, 2015 02:03 PM

    Tim Ferriss



    Phil Libin (@plibin) is the co-founder and executive chairman of Evernote.

    Evernote has roughly 150 million users, and I personally use it at least 10 times a day. It is my external brain for capturing all the information, documents, online articles, lists, etc. in my life.

    In this episode, Phil and I cover a ton. Here are just a few examples:

    • Philosophical and performance systems: Stoicism, electrical brain stimulation, and more
    • Phil’s favorite lessons learned from Jeff Bezos (Amazon), Reid Hoffman (LinkedIn), and Hiroshi Mikitani (Rakuten)
    • Creating tech “for yourself” and Evernote’s genesis story, leading to approximately 150 million users
    • The best toast in Singapore, the best hamburger in Tokyo, and why “Goat Simulator” is amazing
    • Long-term (10,000-year) thinking and real versus imagined threats

    More importantly, he digs into his “a-ha” moments, and what you need to do to bring your next big idea to life.


    Want to hear another podcast with more detail on brain stimulation for performance enhancement? — Listen to my conversation with amazing neuroscientist Adam Gazzaley. In this episode, we discuss what happens when you combine cognitive-focused video games with neurofeedback, magnetic and electrical stimulation, and even performance-enhancing drugs (stream below or right-click here to download):


    This episode is sponsored by 99Designs, the world’s largest marketplace of graphic designers. Did you know I used 99Designs to rapid prototype the cover for The 4-Hour Body? Here are some of the impressive resultsClick this link and get a free $99 upgrade. Give it a test run...

    This podcast is also brought to you by Athletic Greens. I get asked all the time, “If you could only use one supplement, what would it be?” My answer is, inevitably, Athletic Greens. It is my all-in-one nutritional insurance. I recommended it in The 4-Hour Body and did not get paid to do so. Get 50% off your order at Athletic

    QUESTION(S) OF THE DAY: When you think of successful products, what is the first that comes to mind? Please let me know in the comments.

    Scroll below for links and show notes…


    Selected Links from the Episode

    Elite Dangerous | Goat Simulator | Radical Rappelling

    The Gatekeepers | Cosmos (Tyson) | Cosmos (Sagan) | An Honest Liar

    Twitter | Evernote

    Show Notes

    • Why shave the trademark beard? [0:45]
    • How I was introduced to Evernote: what it is and how to use it [2:30]
    • The “aha” moment at Evernote and theological horizontal integration [8:15]
    • Common uses of Evernote and how Phil personally uses it [10:45]
    • The CEOs and leaders that Phil admires [18:15]
    • Important lessons Jeff Bezos gave Phil that changed his life [25:30]
    • Lessons for scaling businesses from Hiroshi Mikitani [29:05]
    • What makes Reid Hoffman compelling [39:30]
    • Thoughts on religion and philosophy [43:30]
    • Most used apps besides Evernote [49:55]
    • Thoughts on living in space [53:45]
    • Thoughts on the end of the world scenarios [55:10]
    • Favorite documentaries and movies [1:0045]
    • Phil’s strategies for taking great notes [1:09:35]
    • When you think of the word “successful,” who is the first person that comes to mind? [1:16:00]
    • Which historical figure do you most identify with? [1:18:10]
    • Phil’s meditation practice [1:21:45]
    • In the last 6-12 months, what purchase of $100 or less had the most impact on your life? [1:29:50]
    • Phil’s morning and evening ritual [1:34:05]
    • Phil’s most recommended books [37:40]
    • Why philosophy is important for decision making and leadership as a CEO [1:39:25]
    • If you could have one billboard anywhere, where would it be and what would it say? [1:44:00]
    • Advice for your thirty-year-old self [1:45:45]
    • Parting advice or suggestions [1:46:55]

    People Mentioned

    by Tim Ferriss at August 04, 2015 11:53 AM

    August 03, 2015

    Mark Bernstein

    To Do

    To Do

    Micah Joel’s series on Tinderbox for Writers continues with Agents and Attributes for To Do Lists.

    August 03, 2015 02:30 PM

    Karen Memory

    Elizabeth Bear sets out to write a steampunk western, and like her spunky protagonist she’s not going to get shortchanged. We’ve got transformers and airships and submersibles. We’ve got former slaves turned federal marshal, wild Cheyennes with impeccable courtesy, feminist sex workers, a madame who can cuss for England, and a human trafficker with a license for Mad Science. We’ve got some particularly well-observed and affectionate writing about saddle horses. A city and a country is literally raising itself up from the muck, and it’s not always a pretty process.

    August 03, 2015 02:28 PM

    Dave Winer

    What I loved about Twitter

    This came up in a thread on Facebook.

    There are a lot of things that could be done to shake up Twitter and provide users with some fresh functionality to explore. Because that's what I think we all loved about Twitter, the chance to do new things. I love the network, the combination of people, software, ideas and data. Twitter got stagnant. That's the real problem. Almost any change that opened up new functionality for people to explore that allowed them to connect with other people in new interesting and meaningful ways would rekindle the spark that Twitter used to be.

    Then I read a piece asking what's wrong with the web. Same thing, same problem. I want to do interesting things with smart people. That's what I loved about the web.

    August 03, 2015 01:24 PM

    Fog Creek – Interview with Lindi Emoungu

    In, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.

    Today’s guest is Lindi Emoungu, a Software Engineer at Google, who has worked on the Google Search and Google Maps products. She has 15 years development experience, having made the leap to computing from her studies in Environmental Engineering and Urban Planning at MIT.

    Lindi Emoungu
    Location: Mountain View, CA, US
    Current Role: Software Engineer at Google

    How did you get into software development?

    As a kid, my cousin taught me BASIC on a Commodore 64. I later learned LISP, mostly self-taught although I learned a bit in school. However, it wasn’t until I had an undergraduate research opportunity in Muriel Cooper’s Visual Language Workshop at the MIT Media Lab that I learned that you can make art with computers. I’ve been writing code ever since.


    Tell us a little about your current role

    Working at Google is quite rewarding. I’m always solving problems in a highly collaborative environment, full of really smart people. A typical day involves problem-solving with colleagues and writing code. In my position, that usually means Java and JavaScript though it can also mean Python and C++.

    Some of my most recent work has involved mentoring Junior Developers. Learning to teach is an especially rewarding challenge because I have to take off my headphones and explain stuff I know. I inevitably see things in new ways when I have to explain them. Mentoring also means understanding how people think differently than I do. I’ve learned to solve problems more effectively when I’m mindful that others think differently because I question my assumptions. Learning how others see things also means that I can more effectively leverage their strengths and encourage them in areas where they can improve.


    When are you at your happiest whilst coding?

    I love the “eureka” moment when I’ve gotten something to work, particularly when the solution was not obvious initially. Removing code when refactoring is always satisfying. I also love reading code that is beautiful and concise. And of course, I always relish getting tests to pass.

    What is your dev environment?

    I typically use whatever development environment is right for the project. I like Git because branching is cheap which makes it easy to experiment. I couldn’t live without Chrome dev tools. They’re great for lots of things, but especially for code sketching and trying stuff out. I recently got a standing desk, so now I can code standing up. I listen to music, unless I’m putting out a fire, and I especially like Chopin when I’m learning something new.

    What are your favorite books or resources about development?

    Anything by Bruce Eckel. I’ve learned quite a bit from his ‘Thinking In…‘ series. They’re wonderful, rigorous, insightful and free, which is awesome. Josh Bloch is also fantastic, of course. ‘Effective Java‘ is a staple. Overall, however, the books that have informed my practice aren’t about coding practice. Rather, they are books about Computer Science theory, practice, and history. So for example Knuth’s ‘Art of Computer Programming‘ volumes. David Eberly‘s various works published by Morgan Kaufmann are very good. I’m also currently reading James Essinger’s ‘Ada’s Algorithm‘.

    What technologies are you currently trying out?

    I’m currently working with Dagger, and I really like it. Obviously, one of the main benefits of dependency injection is eliminating the noise of manually wiring concrete objects to other concrete objects. In addition to helping make code more concise and scalable, I appreciate the way in which Dagger builds the dependency graph at compile time such that it can load only the parts of the graph you need at run time.

    I also love DART. I once implemented the pseudo-code described in the chapter about online segment clipping in ‘Jim Blinn’s Corner: A Trip Down The Graphics Pipeline‘ as an exercise to learn DART and do some fun 3d visualization sketches. I just loved it. I love how concise and expressive the language is. So I’d love an excuse to try AngularDART.


    When not coding, what do you like to do?

    When I’m not coding, I like to get out of my brain’s way. I find that cycling and hiking are really good ways to allow my mind to make connections. Mindful meditation helps me train my attention and code more effectively. Getting off the grid completely (no internet, no television) is luxurious, particularly with Billie Holiday on vinyl.

    What advice would you give to a younger version of yourself starting out in development?

    I would say that the most important thing to learn to do is to learn to do. Technology changes rapidly, so it’s vitally important to be able to teach yourself. When you’ve learned something new, understanding how you arrived at this new insight is just as important as having gained it. Understanding how you learned something is effectively understanding how you innovate.

    It’s also important to have a good understanding of Computer Science fundamentals. Understanding CS fundamentals gives you autonomy in the sense that it gives you the knowledge to understand how any given framework or tool is written. Also, that knowledge empowers you to be able to write your own frameworks and make your own contributions.

    Finally, figure out what you’re passionate about and do it. That might sound obvious but focus and persistence are important for success, and both require passion.


    Thanks to Lindi for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.

    Recent Interviews

    Cassidy Williams
    Cassidy Williams
    Rich Armstrong
    Rich Armstrong
    Saron Yitbarek
    Saron Yitbarek
    Allie Schwartz
    Allie Schwartz

    by Gareth Wilson at August 03, 2015 11:09 AM

    August 02, 2015

    Dave Winer

    Braintrust: Updates on EC2 for Poets

    Over the last few days I've posted a couple of pieces for the braintrust, asking questions about what desktop people like for Ubuntu, and soliciting advice for launching a Node app so it persists and stays out of the way. I've got some progress to report.

    1. I punted on installing a desktop at least for the first release. I never managed to get it working. Too complicated. Need to approach this again. Maybe the second time will be gold.

    2. I am running two processes on the poets machine, one that runs River4, accessible on port 80, though it's running on port 1337; and the other a background app that watches for updates from a fixed location, giving me the ability to update the River4 software while the servers are running. This was very important for the previous generation of EC2 for Poets.

    3. I am using the software suggested by Dan MacTough to daemonize a Node app. It was simple and worked the first time. I also had good luck with a suggestion from Andrew Shell for node-foreman. I'm likely to use this on my own server first, so I can get comfortable. It looks solid, well-designed and simple.

    4. On the other hand there still seems to be a role for forever. I am both deploying and developing on my production servers. Always making changes. It has to be easy for me to get a process to restart. Forever does that well, and it appears perhaps node-foreman doesn't? Not sure.

    5. I thought maybe if I learned how to run shell commands from my Node code that I could have one thing that runs at startup which launches lots of other things, but I am being reminded of how important the concept of a terminal session is on Unix. Anything you launch in your app only has an existence within your app. Just had a thought that maybe using fork instead of exec might get me the performance I want. Hmmm.

    Anyway, I'll let you know how it progresses.

    August 02, 2015 10:35 PM

    Axis of Eval

    RESTful RDP with big values

    What if you want to use a big value, like a whole database table or weblog, as a Reactive Demand Programming signal value? This would make it possible to use RDP to orchestrate things like incremental MapReduce pipelines. Here's one weird trick to make it work.

    In effect, each RDP signal becomes a RESTful server, speaking an HTTP-like protocol. Clients of a signal remember the ETag of the last version of the signal they've processed, and send it to the server on subsequent requests.

    The protocol to retrieve the value of a signal may work like this:
    • If a client hasn't seen a previous version of the signal, it sends no ETag. The server replies with the complete value. The value may be split up into multiple pages, using something like an Atom paged feed. (Other non-sequential kinds of splits are possible: for example, tree-like data like a filesystem can be fetched in parallel using hierarchical splits.)
    • If a client has seen and processed a previous version of the signal it sends the stored ETag. There are three possibilities:
      • The content hasn't changed (i.e. the server's ETag matches the client-sent ETag), so the server replies with a status code that indicates that there is no new content (HTTP's 304 Not Modified).
      • The content has changed, so the server replies with a diff of the client's version versus the server's version.
      • The content has changed, but the server is unable to provide a diff against the client's version. This can happen for servers that do not keep a complete history, or also if the server determines that it's more efficient to have the client retrieve the whole value again instead of sending a diff. The client has to re-fetch the whole signal value, as if it had seen no previous version of the value.
    I haven't worked out all the details, but I think this scheme could be made to work.

    by Manuel Simoni ( at August 02, 2015 05:44 PM

    Dave Winer