Smart Disorganized (incoming)

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

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

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

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

They forgot the readers

Peter Baker, a reporter at the NYT posted a dismissive tweet about the mess with the Hillary Clinton emails. Technology companies do this too. It's easier to narrow your world to "players" and forget who's paying your salary. And that you're talking over their heads, and missing that the real damage isn't with the Clinton organization, but with your readers.

Let's review where we're at...

  1. Their source was anonymous.

  2. Therefore when we read the article we have no way of judging the trustworthyness of the source, we can only depend on the trust we have with the person who chose the source, the reporter.

  3. We only trust the reporter because the New York Times chose them to be the reporter of an important story.

  4. We know the Times has in the past chosen reporters who made up their own anonymous quotes, or used anonymous quotes from the people they were covering. Each of those times the apology was insufficient to erase the damage done to our trust of them.

  5. You can blame Hillary Clinton all you want, that just makes you look like you're covering something up. We have to suspect you as much as you're supposed to question the integrity of your anonymous sources, assuming the source actually exists.

  6. Every time the Times passes the buck when they are used by an anonymous source, saying they're only as good as their sources, in the future we have to assume every anonymous source is either Dick Cheney or a figment of the reporter's imagination.

  7. So it appears that the Times is bullshit top to bottom, and when pushed on that question, they don't deny it. They say everything but Mea culpa.

  8. Too bad, they used to have some self-respect, or so it seemed.

PS: Thanks to Jay Rosen for the pointer.

PPS: The Times really needs an editor to rep the interests of readers. They don't have one. Margaret Sullivan is repping the NYT internal line. Misses the point. It's not the mistake that the Times made, they will make mistakes. It's the weasel-like way they dealt with it. The Times readers are uniquely intelligent people, and aren't so easily fooled or dismissed. The issue, is with readers, not the Clintons.

August 02, 2015 04:28 PM

Google, open web are natural allies

In 1998, when Google started, the blogging world was just getting started too, and the two fed on each other. We put knowledge on our blogs, they indexed them. So now we could find each other, and they had stuff worth finding.

In the last corner-turn, as our ideas have moved into silos, Twitter and Facebook, it's harder to create and find value. On Twitter because it's hard to pack much value into a 140-char soundbite, and on Facebook, the focus has been more social than knowledge-building.

But there are still unsolved problems in the open web, areas where Google has built new expertise, that has not yet been applied to the open web.

For example...


Google has technology that can tell you who is in a picture and what they're doing. They can organize the photos by all kinds of attributes, time, location, other meaning.

We've been trying to add good categorization to blogs, over the years, and it's impossible to get most people to actually do it, even though we can make good, easy tools. I myself won't use them. I'm too scattered, my time is spread too thin to be able to do all the organizing that I feel I should.

Sometimes I think that's all that lies between me and a good book. The kind of thing that a robot could do for me, I think. And Google I'm pretty sure has that software.

Give me, a writer, tools to study my own writing, and to create new meta-documents that help others find the value. I think we're not very far from having some amazing tools here. There are more writing revolutions to come.

A social graph for the open web

Why should the only social graph belong to Facebook? Why aren't there dozens or hundreds of graphs on the open web, owned by no one? Facebook is just one possible graph. When we're done, there will be lots of graphs.

  1. I have a braintrust, the people I do development with. I'm always looking for people to add to the group, but I'm very selective about it. This will never be a large group.

  2. I have a list of favorite movies. If just ten of my friends had equivalent lists, I would be able to find new ideas for things to watch. Same with podcasts and TV series for binge-watching.

  3. I love to talk NBA. I have lots of friends who are into it, but no place to connect the dots.

  4. Cross-pollination. I often think it would be great to get all my friends in a room so I could introduce them to each other. A structure that just facilitated these intros would make a great UI for a new graph.

These are the kinds of problems made for individual creative people, the kinds of people we enabled with blogging software. But because the leadership turned to silos, we never got to really explore them. This is why it would be a good idea for Google to realize that our interests are aligned, and that they could show some leadership. Would be easy for them.

We have the tools, we know how to structure the data, none of it is far from being realized, we just need leadership. If Google would embrace OPML, for example, or a format like it (attributed hierarchies with inclusion), a lot of new stuff would happen very quickly. We already have lots of tools ready.

August 02, 2015 03:04 PM

August 01, 2015


The Phuctored and the Phucked

(8/16 Update: 113 moduli.)

Phuctor has been under lightweight but rather reliable DDOS in recent times, so here is a mirror of the list of 106 moduli broken up through the time of this writing.

Certain professional idiots have been bashing their heads against the wall in a futile effort to magic away the past.  To them, my message is:

  1. It won’t work.
  2. Go to hell.
  3. The data set is in permanent public record.  Go ahead, keep censoring SKS mirrors.  We still have the originals.
  4. We will discover who planted the diddled keys, when, and why.

If your name appears on the list (or the current version thereof), please write to Mircea Popescu or to me! (Please keep in mind that letters not bearing a PGP signature – the basic minimal standard for personhood on the Net – are likely to be ignored – or, alternatively, subjected to public display and ridicule for our amusement.)

by Stanislav at August 01, 2015 08:56 PM

Lambda the Ultimate

Running Probabilistic Programs Backwards

I saw this work presented at ESOP 2015 by Neil Toronto, and the talk was excellent (slides).

Running Probabilistic Programs Backwards
Neil Toronto, Jay McCarthy, David Van Horn

Many probabilistic programming languages allow programs to be run under constraints in order to carry out Bayesian inference. Running programs under constraints could enable other uses such as rare event simulation and probabilistic verification---except that all such probabilistic languages are necessarily limited because they are defined or implemented in terms of an impoverished theory of probability. Measure-theoretic probability provides a more general foundation, but its generality makes finding computational content difficult.

We develop a measure-theoretic semantics for a first-order probabilistic language with recursion, which interprets programs as functions that compute preimages. Preimage functions are generally uncomputable, so we derive an abstract semantics. We implement the abstract semantics and use the implementation to carry out Bayesian inference, stochastic ray tracing (a rare event simulation), and probabilistic verification of floating-point error bounds.

(also on SciRate)

The introduction sells the practical side of the work a bit better than the abstract.

Stochastic ray tracing [30] is one such rare-event simulation task. As illus- trated in Fig. 1, to carry out stochastic ray tracing, a probabilistic program simulates a light source emitting a single photon in a random direction, which is reflected or absorbed when it hits a wall. The program outputs the photon’s path, which is constrained to pass through an aperture. Millions of paths that meet the constraint are sampled, then projected onto a simulated sensor array.

The program’s main loop is a recursive function with two arguments: path, the photon’s path so far as a list of points, and dir, the photon’s current direction.

simulate-photon path dir :=
  case (find-hit (fst path) dir) of
    absorb pt −→ (pt, path)
    reflect pt norm −→ simulate-photon (pt, path) (random-half-dir norm)

Running simulate-photon (pt, ()) dir, where pt is the light source’s location and dir is a random emission direction, generates a photon path. The fst of the path (the last collision point) is constrained to be in the aperture. The remainder of the program is simple vector math that computes ray-plane intersections.

In contrast, hand-coded stochastic ray tracers, written in general-purpose languages, are much more complex and divorced from the physical processes they simulate, because they must interleave the advanced Monte Carlo algorithms that ensure the aperture constraint is met.

Unfortunately, while many probabilistic programming languages support random real numbers, none are capable of running a probabilistic program like simulate-photon under constraints to carry out stochastic ray tracing. The reason is not lack of engineering or weak algorithms, but is theoretical at its core: they are all either defined or implemented using [density functions]. [...] Programs whose outputs are deterministic functions of random values and programs with recursion generally cannot denote density functions. The program simulate-photon exhibits both characteristics.

Measure-theoretic probability is a more powerful alternative to this naive probability theory based on probability mass and density functions. It not only subsumes naive probability theory, but is capable of defining any computable probability distribution, and many uncomputable distributions. But while even the earliest work [15] on probabilistic languages is measure-theoretic, the theory’s generality has historically made finding useful computational content difficult. We show that measure-theoretic probability can be made computational by

  1. Using measure-theoretic probability to define a compositional, denotational semantics that gives a valid denotation to every program.
  2. Deriving an abstract semantics, which allows computing answers to questions about probabilistic programs to arbitrary accuracy.
  3. Implementing the abstract semantics and efficiently solving problems.

In fact, our primary implementation, Dr. Bayes, produced Fig. 1b by running a probabilistic program like simulate-photon under an aperture constraint.

August 01, 2015 04:49 PM

Dave Winer

Braintrust: Desktop for Ubuntu?

A question for the Scripting News braintrust...

First, remember that I am working on the new EC2 for Poets. I am talking about software that will be pre-installed on a Ubuntu-based AMI that's designed for people who use Macs and PCs, so they can run apps in the cloud.

I make several such apps, for example River4, PagePark, Noderunner and the amazingly useful and adaptable nodeStorage.

The best desktop for Ubuntu?

Now that the standard recital is out of the way...

I'm thinking about including a desktop interface, so that people who like Finder-like graphic filesystem browsers (such as myself, for example) in addition to command-line interfaces (for the discerning server connoisseur) will be happy using their cloud-based app server.

Which one?

There seem to be three choices.

  1. Gnome.

  2. Unity.

  3. Lubuntu.

I have no preference, and no basis to make a choice.

Please read before commenting

I know a lot of people will say "Don't do it," so you can skip that. I want to understand what the choices are if I choose to include a desktop in the AMI. I expect a few people won't read this and will write long missives about why this is Not A Good Idea. To them I say zzzz, in advance.

Dan MacTough's howto

In January 2014 I was emailing with Dan MacTough on this question, and he wrote a howto for installing VNC on a server and connecting to it from the Mac desktop.

August 01, 2015 03:43 PM

Why I blog, part 811

My blog posts always "just write themselves." If they don't I do something else.

For me, a blog post is just the culmination of something I've been thinking about or a story I've told in person a dozen times.

It has to pop to the top of my consciousness a dozen times or more before I'm ready to write about it.

Therefore I blog because:

  1. I think,

  2. And tell stories.

August 01, 2015 12:47 PM

July 31, 2015

Reinventing Business

The Code of Conduct is a Pattern

Looking back, I think we will see this moment in history -- when the idea of a code of conduct began propagating -- as one of the turning points in the development of self-organized systems. "Of course!" we will say, "Without a code of conduct some people show up expecting to get away with anything. Naturally you get bad behavior." We will also see the futility of trying to add a code of conduct after the fact, once the community has already been established. Culture must be nurtured, and once it's set it seems very hard to change -- although it can easily be destroyed.

Just like the various open-source licenses and the different Creative Commons licenses, I expect we will eventually have a set of open-source codes of conduct to choose from, depending on needs. I suspect we will also see templates for the philosophy of the organization, for example The Zen of Python and what I've tried to do in The Trust Organization Manifesto.

One of the questions that comes up around Teal/Trust organizations is "how do people get fired?" At least part of the answer is that a fireable offense is one that violates our basic practices for how we interact with each other -- our code of conduct.

I've begun collecting a list of sample codes-of-conduct here.

by (Bruce Eckel) at July 31, 2015 10:16 PM

Tim Ferriss


The Tim Ferriss Show with Tara Brach

“Meditation is evolution’s strategy to bring out our full potential.”
– Tara Brach

Tara Brach (@TaraBrach) is a Ph.D. in clinical psychology and one of the leading teachers of Buddhist thinking and meditation in the Western world.

She is the founder of the Insight Meditation Community in Washington, D.C. and her lectures are downloaded hundreds of thousands of times each month at

I was first introduced to Tara’s work by another guest on this podcast, Maria Popova. Soon thereafter, a friend and neuroscience Ph.D. recommended her book, Radical Acceptance, as life-changing. It exceeded all expectations.

It’s my hope that this tactical conversation offers you techniques for addressing loneliness, anger, self-hatred, the “trance of unworthiness,” and much more. Tara’s had a measurable impact on my life, and I wish the same for you.

For those who know my fondness for Stoic philosophy, I think Tara’s work is a fantastic compliment to Seneca, Marcus Aurelius, and other favorites.



Want to hear the episode in which I learned about Tara Brach for the first time? — Listen to my conversations with Maria Popova of In this episode, we discuss writing, workflow, and workarounds (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.

QUESTION(S) OF THE DAY: What type of meditation have you tried? If you find meditation difficult, what are your barriers? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode

Twitter | YouTube | Facebook | Tara Brach | Join her E-Mail List

Show Notes

  • Tara Brach’s background: from planning to be a lawyer to moving into an ashram [6:52]
  • On the relentless desire for self-improvement, also known as the trance of unworthiness [13:02]
  • The sad turning point in the ashram [19:52]
  • On arranged marriages [26:57]
  • Is it possible to be a mindful hedonist? If so, is that a bad thing? [32:17]
  • Exploring challenges with balancing anger, productivity, and meditation [39:52]
  • Defining the egoic state [49:22]
  • The foundations of a healthy meditation process [53:12]
  • The angry army sergeant who learned a valuable lesson during mindfulness class [59:37]
  • The first 60 to 90 minutes of Tara’s day [1:05:32]
  • Deconstructing meditation: sitting positions, hand positions, and more [1:07:27]
  • Skillful means and my own practice as a beginner meditator [1:23:17]
  • Pros vs. cons of hiring a TM [1:26:32]
  • How to use Tara’s guided meditations [1:31:42]
  • Recommended books on mindfulness [1:34:57]
  • Managing fear of missing out (FOMO) in the internet age [1:40:57]
  • If you could have one billboard anywhere, where would it be and what would it say? [1:51:22]
  • What music and/or television show would people be surprised to know Tara listens to [1:54:32]
  • Favorite documentaries [1:56:12]
  • What purchase of $100 or less has been most valuable? [1:57:37]
  • Advice for her 30-year-old self and how that relates to her ongoing relationship with her husband [1:58:42]
  • Tara Brach’s one request for the audience [2:03:42]

People Mentioned

by Tim Ferriss at July 31, 2015 09:21 PM

Mark Bernstein

Falsehoods Programmers Believe

Falsehoods programmers believe: a list of lists about false assumptions on names, addresses, geography, time, and more. Great stuff. Via Michael Tsai, via Jeff Atwood.

When you see a list like:

  1. There are always 24 hours in a day.
  2. Months have either 30 or 31 days.
  3. Years have 365 days.
  4. February is always 28 days long.
  5. Any 24-hour period will always begin and end in the same day (or week, or month).

You veer between “oh, that would be stupid” and “oh, that would never really come up.” You’d be amazed how often you really bump into these things. There’s a bug in the Tinderbox tests that panics the day before Daylight Savings Time. We used to have a February 29th bug – and my next-door neighbor has a Feb. 29 birthday, so you’d think I’d know about that. And – fast! if it’s now 12:59:00 PM on December 24, what’s the date exactly sixty seconds from now?

July 31, 2015 04:48 PM

Brian Whitman

Understanding the brand new

Fresh Finds

Today, my favorite personal project at Spotify since the acquisition is getting soft-launched alongside a great long piece in Fast Company about discovery at Spotify: “Fresh Finds,” a weekly updated playlist of music that no one has heard yet but will break out soon. The playlist is powered by the careful and passionate work of a small team at Spotify: Kurt Jacobson, Athena Koumis, Jason Steinbach, Dan Stowell, and myself.


“Fresh Finds” is made possible by a scalable analysis of the musical activity happening outside Spotify: daily, we automatically find artists people are talking about on music blogs and news sites more often and with more intensity than their playcounts should suggest. These are the artists that find fans through word-of-mouth, shows and the hard work of making unique music that connects to at least one person. We then filter those artists through a real time analysis of Spotify listening behavior and weekly generate a list of brand new songs that we think we will gain in popularity the next week.

Here’s Fresh Finds, updated weekly on Wednesdays:

The listener activity that happens to music deep in this brand-new, unheard part of the spectrum is hard to automatically understand. It comes from nowhere, and people discover it from other people, often outside of our platform. They read music blogs and press, or a friend in the know passes on a link. It’s not based on popularity or audio or likes or clicks. Some of these Fresh Finds had virtually no plays when data indicated we should publish them on the playlist. Watching a brand new artist release a brand new track with no connection or external push and seeing it at first slowly, then rapidly gain in plays on Spotify has been life-affirming.

I see recommendation, filtering, or prediction of this “brand new” as a new artistic frontier in music understanding. Every music data scientist wants to help artists and listeners, but the quantity of known good that a precise recommendation for a well known band earns all but vanishes when stacked up against the connection between a new unknown and her new fan base. I’m ecstatic to help that process even a little bit.

My favorite jams from the past 6 months of Fresh Finds:

Since Fresh Finds started working internally for us early this year, I’ve discovered more music there than from any other technology or web site or service I’ve ever used. It’s been a great pleasure to hear new musicians’ fresh new work every morning. I’ve seen more local shows, I’ve helped new artists get booked, I awkwardly excitedly tweet about artists, and I’ve never felt better about the future of music.

I hope you enjoy Fresh Finds, and I can’t wait for the next thing we can do with its potential.

July 31, 2015 02:05 PM

Dave Winer

How CitiBike's failure changed podcasting history

I was writing about this on Facebook, explaining to NakedJen how, while I am usually punctual and keep my commitments, sometimes I miss wildly.

That reminded me of the time, recently, that I was more than 20 minutes late for a breakfast meeting in the West Village.

How could this be, you might ask, when it takes about 20 minutes to get from my Hell's Kitchen apartment to the Village via subway. Well, I didn't take the subway.

I like to, in the summer, if I have the time, ride a CitiBike, if I'm going downtown. Can't use it for uptown trips because there is no CitiBike north of 60th St, yet. Someday soon I hope I'll be able to use it to go to meetings at Columbia or to shop at Zabar's. But not yet.

So I go to my usual CitiBike station, and oops, they're closed for maintenance. I look at my watch, thinking I might just make it if I go down and catch the A, B, C or D train at Columbus Circle to West 4th. But I decide to chance it, so I walk downtown to the next CitiBike station on Broadway, and they're closed too. Now I'm really fucked, I'm on 53rd and Broadway, and there's no subway nearby that gets me close to the restaurant I'm going to. So I continue down Broadway, and that station is open but it doesn't have any bikes (no surprise, given that so many stations in the area are closed). So I go west, there's a CitiBike station on 54th and 9th, and it has bikes. I get one, ride downtown, and that's why I was so late.

The meeting was with people from Apple to discuss their celebration of ten years of podcasting (according to Apple of course, podcasting existed for a few years before Apple got into it). I must have pissed them off, and rightly so -- I hate it when people are late like that. I have a 20-minute rule myself. If they had been so late, I would have left. And as a result, I guess, their celebration of ten years of podcasting actually had none of the history of podcasting in it. It was just a list of all the current hits, Fresh Air, This American Life, Serial, etc. Oh well. Hopefully no one thinks that's all there was to podcasting.

July 31, 2015 12:04 PM

July 30, 2015

Dave Winer

Amazing gaps in Unix and Node.js worlds

Disclaimer: It could be that I'm missing something, or everything, and if that's the case I apologize in advance.

I'm working slowly in the background on the new EC2 for Poets, and have come across some missing pieces in the Node and Unix worlds, that I just can't believe are still there. Here are a couple.

  1. There doesn't appear to be a way to save a Node app as an executable. I understand this might end up being a big thing, but disks are huge these days and the net is super fast. My Android phone today downloaded Angry Birds 2. Sixty megabytes. In a few seconds. And even if a Node "applet" required that Node be installed, so what? Just make it so that when I type its name on the command line, something happens. Without the "node" part and without the ",js" part. (Double-clickable scripts is something we had working on the Mac in 1992, btw.)

  2. There is the equivalent of the "Startup Items" folder on Unix, but I took one look at the docs and realized that I won't know how to use that for six months. It will take that long for all the odd concepts to settle in. Meanwhile on the Mac (or Windows for that matter) just drag anything that the OS can run into the Startup folder and it figures out what to do with it.

Also I'm taking a look at forever-service for running Node code at startup. I haven't gotten it to actually do anything yet, but it looks simple enough. And I love forever, I use it on all my servers to keep stuff running.

July 30, 2015 10:20 PM

Reinventing Business


Monday I visited Metolius Engineering in Bend, Oregon, which makes rock-climbing equipment. They are rather unusual in that they take in aluminum alloy stock and machine it from start to finish, then assemble things like cams to insert into rock cracks. I would describe Metolius as an "intentional anarchy." Basically, no one wants to be anyone else's boss, which produces a self-organizing structure by default. Almost everyone who works there is a climber and so cares deeply about their products. But there's no particular structure for you to fit into, so you either find your own level or you leave. For the people who are there (that is, who don't leave), it seems to work quite well.

I have a friend who created an UN-intentional anarchy by bringing together a group of artists under one space. There were expectations but the self-organization never really took place and my friend ended up being the enforcer and the place the buck stopped. It drove her temporarily bonkers and ended up costing her a lot of money.

Just like open-spaces conferences, you need SOME kind of framework to work within. Ideally it:
  1. Is the minimum necessary to achieve your goals
  2. Doesn't tend to start expanding
  3. Doesn't add unnecessary overhead
Many startups begin this way, but then reach a point where, it is asserted by those-in-the-know, the company must grow up and put in a proper hierarchy, with MBAs in all the right places. At which point the above three points rapidly stop working, and everyone gets less efficient as the company gets bigger (vs. cities, where people get more efficient as the city gets bigger).

The framework needs to be such that there never comes a need for the "grown up" organizational structure.

My OSCON presentation went well; there was some good discussion afterwards and some interesting connections. For example, I found out that RedHat is working on The Open Organization, a system with similar goals.

by (Bruce Eckel) at July 30, 2015 09:36 PM

Mark Bernstein

The Secret Language of Desire

Megan Heyward

A lyrical erotic story for the iPad by the Australian hypertext writer-filmmaker who wrote the haunting dreamscape Of Day, Of Night. This isn't a hypertext, precisely, but a series of vignettes, artfully typeset against (mildly) interactive illustration.

It’s published for the iPad. It costs $4. You should get a copy.

Not every image works here, and not every gesture does everything we might wish. That’s OK. Not every little work needs to be a perfect gem or a revelation. A youngish women rediscovers desire; it's been said before, but it’s not been said this way. And so now our language is a little bigger and a little better.

Em Short has, as usual, a well-wrought review.

July 30, 2015 03:48 PM

Diplomacy By Other Means

Gamergate’s Wikipedia tactics have soured and hardened as Gamergate slowly accepts that, to take over the Gamergate page, they’re going to need to take over Wikipedia. That’s a tall order, but it might be realistic, and given a few years of hard work, observers think it they might pull it off. But hope springs eternal and there’s a bitter rump that still hopes they can succeed right away if they can simply get rid of one or two more editors whom they think are standing athwart their road.

It seems that I’m one of those editors.

The favored tactic has been to threaten and harass the target off-wiki, trying to find a sensitive area, while hounding and baiting them on-wiki. The outside threats are often sufficient to drive volunteers away. If that doesn't work, some sign of impatience or bad temper can be trumpeted as a terrible violation of Civility, or some grumpy insistence on an issue can be proclaimed to be Battleground Behavior.

If nothing else works, Gamergate can point to the editor's persistence in the face of all this hounding and argue that they must have ulterior motives -- that no one who merely wanted to build an encyclopedia would put up with this. Yes, I know what you're thinking: who would fall for that? It actually works, sometimes.

Arbcom is determined to ignore off-wiki harassment – especially sexual harassment – unless the outside harasser can be tied to a specific, anonymous Wikipedia account beyond a shadow of a doubt. This standard can, in the nature of things, almost never be met because it typically requires an anonymous Wikipedian to confess a crime for which they could be prosecuted. The Wikimedia Foundation appears disinterested unless the Foundation is vulnerable in court or actively derided in the press.

The result is that Wikipedia and Gamergate have apparently worked together to create a system in which argument is simultaneously advanced in two places: anonymously but “civilly” on-wiki, and off-wiki, also anonymously, with the greatest venom and bile that can be achieved.

We are rapidly approaching the point where schools are not only going to need to dissuade students from relying on Wikipedia, they're going to have to warn students not to volunteer for Wikipedia as a matter of safety, just as schools used to warn kids to stay away from chat rooms and not to accept rides from strangers. I would also warn teachers, including untenured college professors, to avoid editing Wikipedia using either their own names or using a pseudonym; opponents can and will track you down, and some Wikipedia opponents will stop at no lie or invention to gain a small rhetorical advantage or simply to punish an opponent.

Wikipedia today is a dangerous and unhealthy place. It’s especially unhealthy for women, children, and anyone else who feels vulnerable, but it’s dangerous to all.

The interesting question here is how, if Wikipedia wished to fix this, they might proceed? Getting rid of anonymous editing would solve the problem, but that’s politically infeasible. Many Wikipedians would like to ban talking about Wiki outside of Wikipedia, the first rule of Fight Club. But that’s not practical: Wikipedia is not a cloistered order.

I've been wondering if an organized effort to support people who are being harassed might help, a squad which would follow targets, reassure and support them on-wiki, and that would seek to dismay and disarm their opponents. This feels a little like those campus programs that offer late-night escorts to walk from the library back to the dorms, but it also has a certain Batman superhero feel: there’s a risk you’d wind up replacing the original conflict with a battle of superheroes. But maybe that’s better: the superheroes can take a punch, that’s why they’re getting the big bucks and the colorful capes.

It’s not a good answer, but it’s all I’ve got. I’d like to hear a better one.

July 30, 2015 03:03 PM

His Majesty’s Dragon

Trafalgar meets the Battle of Britain as a Napoleonic-era British frigate captures a French ship bearing a valuable dragon egg. Britain’s Aerial Corps has been sadly depleted and, if air superiority is lost over the channel, Napoleon will be able to drive the Navy from the sea and ferry his invasion to Dover. It’s Jack Aubrey in Pern, and it’s a ton of fun.

July 30, 2015 03:02 PM

Dave Winer

How future-safe are your ideas?

People post big ideas to Medium. It's nice that they have the ideas, and that they share them on the web, but how long will these ideas be there?

I can still point to articles I wrote 20 years ago, in 1995.

Will the Big Think piece you just posted to Medium be there in 2035? That may sound like it's very far off in the future, and who could possibly care, but if there's any value to your writing, you should care. Having good records is how knowledge builds. If we're constantly starting over how can we pretend to be accomplishing anything other than self-promotion? Is that enough? Don't we need more value in our thinking?

When we look back at today from the future I expect we will see a big black hole. This period will not look like the renaissance it could be, rather it will be a void, nothing. What were people thinking in 2025? It will be impossible to know. Or it will be too dangerous to try to find out (read on).

A lot of what we say is controlled by large corporations, or by small ones that will be owned by large corporations. There isn't much interest, among the owners of Medium, for example, in owning something small and boutique-y 20 years from now. Either it will be huge, or it will be gone. And they may well have pivoted a dozen times before arriving at their eventual success. It's quite possible that the stories you write today will not be part of that future. Or worse.

Read this article about Sourceforge and what they're doing with open source projects that were entrusted to them. They're adding malware to the downloads. Had I asked you to think about this five years ago, how many people would have considered this possibility?

Do you still trust GitHub? Have they given you any assurances that they won't modify your projects in the future? Some developers think they're already doing it. We need to keep a careful eye on this. I'm trusting GitHub as if they are a neutral service for my shared source. If they're not, we need to know exactly what they think they're entitled to do with our projects and then decide whether we want to continue to trust them.

Right now there isn't a good answer. But there are some very bad answers. The current crop of VC-backed repositories, from Medium to GitHub, have big question marks on them. If you value speech, in all forms, safe from future interference, you should be helping get the answers yourself.

More on this to come subject.

July 30, 2015 01:12 PM

July 29, 2015

Simplest Thing (Bill Seitz)

merlin: Got a talk tomorrow. And, I’ll never get sick of...


Got a talk tomorrow.

And, I’ll never get sick of trying to make this point.

July 29, 2015 06:51 PM

Dave Winer

Podcast: What Would Twitter Do?

Jeff Jarvis wrote a book called What Would Google Do, as if there were great wisdom in Google, and I suppose there was. You have to have captured some basic truth to grow from zero to Google-size in such a short time. Something that others missed, or couldn't execute on.

Twitter deserves a similar treatment. Blogging was sputtering along when Twitter came out, and while it did its share of sputtering, it also was roughly a straight line pointed to the right and up.

So What Would Twitter Do?

That's what I cover in this 30-minute podcast.

July 29, 2015 06:48 PM

Fog Creek

Focusing on Developer Happiness with Humane Development – Interview with Ernie Miller

.little {font-size: 75%}
Focusing on Developer Happiness with Humane Development – Interview with Ernie Miller

Looking for audio only? Listen on

In this interview with Ernie Miller, VP Engineering at nVisium, we discuss Humane Development – a development approach that prioritizes developer happiness and the human element of software development. We discuss what Humane Development is, its benefits and how to put it into practice.

Content and Timings

  • Introduction (0:00)
  • About Ernie (0:20)
  • Introduction to Humane Development (0:44)
  • The Problem with Hustling (2:38)
  • The Importance of Autonomy (4:40)
  • Be Skeptical of Named Development Processes (8:16)
  • Benefits of Humane Development (9:46)
  • Implementing Humane Development (11:33)



Ernie Miller is Director of Engineering at nVisium. A Rails core contributor, he regularly writes and speaks about software development at conferences, including a talk about Humane Development. Ernie, thank you so much for taking your time to join us today. Do you have a bit to share about yourself?

Thanks for having me as well. I’ve been really focused on developer happiness and an idea of Humane Development. We have an incredibly privileged position, incredibly privileged jobs and so much flexibility and just so much ability, I think, to do better at having basically happiness during the massive amounts of time we spend every day doing our job.

We get so wrapped up in heavyweight processes that we forget that we are dealing with individuals

Introduction to Humane Development

You mention Humane Development. That’s something I want to get into right off the bat. What is it?

Humane Development is just the idea that our development process should be more focused on the humans involved in the work. I think that we tend to get so wrapped up sometimes in heavyweight processes that we forget that we are dealing with individuals that are building software. We are building software for humans. We are humans working with other humans to build software. You can’t get rid of that human element. Humane, aside from having human in the word, is a word that really comes around to reducing the amount of pain that is experienced in a process, having a minimal amount of pain, and I think we can all get behind that.

What else led you up to coming up with that?

I got hired as the Director of Engineering at nVisium and this was the first time I had ever had a director position. I’ve never really been so directly responsible for a company’s engineering culture, so I felt this immense pressure. My gosh, I’ve left other jobs because I’ve been unhappy, but I’m kind of the person to create the culture here, so if I have to leave here, well, then, I really screwed up. I started thinking a lot about what would make me want to stay at a job, what would make me really satisfied with the experience, my co-workers, the culture, everything about a job, and I honestly ended up spending more time thinking about counterexamples. I started thinking about all the reasons that I had left other positions and things that I had felt were missing from previous jobs.

Humane Development and some of the principles that came from that really , they arose from that thought process and working through what makes for a happier workplace.

The Problem with Hustling

You say that, “The notion of hustle as a virtue is one of the most damaging memes afflicting software developers today.” Why is that?

A lot of corporations have adopted the notion of Agile software development, to the point, really, that the word has become corrupted. It doesn’t really mean anything anymore. When you look at what’s happened with the term Agile and the reason that businesses, in particular, seem to be drawn to it, they get drawn to it because it sounds fast.

Certainly, you can go fast with Agile, but it’s not just about the speed, at least if it’s being done properly it’s not about the speed. It’s about building the right things. It’s about doing the right things, the right work quickly. We miss that part whenever we’re worried about hustling to get the next bug fix out or to get the next feature released. Sometimes we forget that it’s okay to take time to think. It’s not all about lines of code. It’s not all about commits per day.

Frankly, even in the time that I’ve been at nVisium, there are days and sometimes strings of days where I haven’t made a single commit, but I’ve written a lot of things down, thoughts that I’m having about how I want to build something. Sometimes that’s the time that you really need to spend. It’s not enough to just spike everything and just say, “Well, you know, I’ll throw it away.” Sometimes you just need to think what is it that I really want to build? I think that hustle is considered a virtue, and it looks toward favoring people who complete the most cards or however you’re managing your workflow. It creates task multiplication. You get the tasks done quickly, but then there are new tasks to clean up all the poorly implemented features. You get this false sense of productivity, look how many tasks we’ve completed on our list, but half of them could have been avoided. I would rather do less tasks.

The Importance of Autonomy

You say that developers should be able to work when and from where they want. Why do you think this is also so important?

Two things there. There’s autonomy and choice of location. Certainly, choice of location is one piece of autonomy. Commutes are draining, both from a time and an energy aspect. There are very few things about software development that really require us to be in a certain location. Most of our code, especially for web application developers, lives on the Internet, and to a large degree, we live on the Internet. Your physical location, though, does have a massive impact on your personal life, activities. It has an impact on your social circle, people that you’re going to be around, and certainly your proximity to family and the ability to engage with them on a regular basis.

Then it follows that your location probably isn’t something that should be dictated by someone else if you can avoid it. That’s one of the big reasons I think that being able to choose where you work is massive. Sometimes you just need a change of scenery, too. I’ve been able to visit relatives in Florida and hang out by their pool and just work. It doesn’t have a bit of impact on how productive I am versus me sitting at my home office where I am right now. Being able to choose your location frees you up to be able to engage in all sorts of things that, frankly, many other professions couldn’t even dream of doing. That’s a big aspect that can draw people to this industry, and we throw it out so easily and throw people into open floor plan office spaces, and it’s just toxic.

The other piece of this, the broader autonomy piece, is that there should be… If we hire people to be thought workers, then we’re hiring them for their capacity to think and then by bogging them down in strict process and heavyweight processes all the time, ‘you must do things this way’, it shuts off a part of their brain that’s designed to do the critical thinking that they were hired to do. You’re training them to shut off this creative piece of their brain that’s so valuable. Ostensibly, if you’re hiring, say, senior developers, a big part of why you hire them is because they can come up with creative solutions to problems, and you’re telling them, don’t get that creative, though. You have to trust the people that you’ve hired to be capable of doing the right thing and understanding the right thing and asking the right questions.

That’s why I think great developers and autonomous developers need to be great communicators. It’s great to have people in the same room. I find it better for team-building type activity than getting real work done. A lot of times people talk about how face-to-face communication is high bandwidth, but let’s just say that in a lot of cases, that face-to-face communication can be a crutch. You can just throw bandwidth at the problem as opposed to actually using the bandwidth you have efficiently.

It stands to reason that people who are effective communicators will be that much more effective if you up their bandwidth, but you don’t hone those skills necessarily if you’re not forced to think about what communication channels really need to be used in this case. Who needs to know this information? Who should I reach out to? This is a valuable skill to have and, frankly, since programming is written communication, we should all be better at it.

If you have employees that are in a company that feel empowered, they’re going to surprise you to the good

Be Skeptical of Named Development Processes

You suggest that developers should be skeptical of named development processes and tooling as well. Why is this?

It goes then along with it that you should be skeptical of Humane Development.

I think that the problem is, if the process has a name, there’s probably someone who has an interest in pushing that name. It’s not just the name, it’s the motives behind why does it have a name, what is it that they’re trying to do. Is there a marketing arm basically behind the thing trying to do, pushing say, paid training and certification? One of the things, it both drove the adoption of Agile when we started having things like Scrum certifications, things like that. Now you have project managers that could go out and get a certification and so it made things more real to the business, the value is more real to the business. It made a business feel more confident in using it.

At the same time, I think it’s one of the things that destroyed the real essence of what Agile as a movement was all about. If there is paid training or certification around some sort of a named process, then I would be even more skeptical of it. Again, Humane Development’s no different. I have a motive to promote it. I’d like to think that my motive is pure and that I really just want companies to give developers more freedom to explore creative solutions to problems. That doesn’t necessarily happen when you’re just pulling cards off of a stack.

These principles are all about creating an environment to make somebody want to stick around

Benefits of Humane Development

What are some of the realistic benefits of adopting things like Humane Development?

Straight up from an ethical standpoint, I just think it’s the right thing to do. If you want to follow in Google’s former footsteps and don’t be evil, then let’s just say that something along these lines is the right thing to do. Beyond that, it’s hard to get and keep employees. We all know this. A typical lifespan now for a tech worker is something like maybe two years at a job, and that’s stretching it these days. If you can find something that puts you a little step ahead of the competition in terms of the environment that you provide to somebody to work, really, these principles are all about creating an environment to make somebody want to stick around, make somebody feel valued.

If you’re going to be able to retain employees, that’s going to save you in the long run. You don’t have to ramp up new folks. You get that benefit of having somebody who gets this sort of tribal knowledge of your organization beyond just the stuff that exists out there on the wiki. Employees are going to feel more empowered to act, and if you have employees that are in a company that feel empowered, they’re going to surprise you to the good.

Again, I think one of the big benefits, and especially of offering autonomy to the employees, is that you’re not shutting people’s brains off with overly specific processes for everything. You’re giving them a bit of freedom in the way that they approach solving problems. Frankly, it sounds trite, but people are different. Everyone we hire is going to be a little bit different, and to try to force them into the same mould is not really the right approach to creating the diverse and vibrant workplace that you really want to create as a company.

Implementing Humane Development

Derrick: What are some of the practical steps developers can take to move towards a more Humane Development approach?

There are four key values for Humane Development. They’re empathy, honesty, trust, and autonomy. They’re intentionally very big picture, the idea is that I don’t want it to be possible to create a training class around Humane Development. That would be the opposite of… I don’t want to see a certified Humane Development establishment badge or anything like that. Developers, they may feel, especially the autonomy piece, they don’t have a lot of control over in their current job. What can they do? Really, only the last one of those four values, the autonomy piece, requires manager buy-in, and even then not a ton.

I think first off, they want to focus on building the core values of Humane Development. It will make you a better developer regardless. For instance, empathy, it’s not just a touchy-feely word. Say you receive a request, you try to place yourself in the place of the requester. You try to see what is it … It’s getting into their head and figure out what makes them tick and what might they be feeling right now, understand the thing that’s frustrating them, and it helps you come up with a better solution.

When it comes to honesty, first thing, don’t commit, don’t say yes to things you know you can’t deliver. We’re oftentimes pinned in a corner at a meeting and told to basically toe the company line and just, yeah, we’ll get it done in time. If you know you can’t do it, you may take a little egg on your face for saying it upfront, but people are going to respect it if you do say you can, you mean it, as opposed to this constant … We create these artificial deadlines and then we let them slip because they didn’t really matter anyway. We set them ahead of what we really needed because we know ‘those devs, they never deliver anything on time anyway’. Honesty is something that you can practice, obviously.

When it comes to trust, hopefully, if you’re honest, your co-workers and your bosses are going to trust you. Beyond that, take other people at their word until they give you reason to do otherwise. Then as far as autonomy goes, look, some jobs, that’s going to be a tricky one, but where possible, try to find ways to exercise creative freedom in the way that you approach tasks. If something isn’t specifically spelled out for you, then take that as an opportunity to explore. Take that as an opportunity to see if there’s a better way. Over time, I think that you’re going to see a bit of a cultural shift in your company if you continually do that with good results.

What has the reaction from developers been like? Are there any aspects that they seem to struggle with?

For the most part, it’s been overwhelmingly positive. There are some people who just say, “Well, you know, that’s just what we need, another manifesto online to read, and it doesn’t really say anything at all.” Some people are rightly noticing that I don’t say a lot of details when it comes down to Humane Development, how to practice it or what to do, partially because I’m trying to get away from rigid process. If I say, “Here is the only way to do this,” then I’m participating in the same systemic problem that I see in our industry right now.

I got into programming because I saw it as a creative outlet, because I could create things, not because of the technical challenges, whatever, although those are fun. For me, I think probably the biggest push-back that I have seen from other developers has been that they want somebody to tell them exactly how to do whatever it is. They want the how-to. I do think that it’s been really encouraging to see companies say, “We want to be a humane development shop.”

Ernie, thank you so much for taking the time to join us today.

Thank you.

by Gareth Wilson at July 29, 2015 12:23 PM

July 28, 2015

Tim Ferriss


The Tim Ferriss Show with Jane McGonigal

Photo credit Alan Levine

“Happiness, success, and good health can coexist with all kinds of negative emotions. You don’t have to get rid of negative emotions, you just have to balance them out.”
– Dr. Jane McGonigal

Jane McGonigal (@avantgame), PhD, is a senior researcher at the Institute for the Future and the author of The New York Times bestseller Reality Is Broken: Why Games Make Us Better and How They Can Change the World. Her work has been featured in The Economist, Wired, and The New York Times. She has been called one of the “top ten innovators to watch” by BusinessWeek and one of the “100 most creative people in business” by Fast Company. Her TED talks on games have been viewed more than ten million times.

In this conversation, we dig into everything from recovering from head trauma to how you can use Candy Crush Saga to lose weight. Not enough? How about using Tetris to prevent PTSD, or using Call of Duty to increase empathy?

Her latest book is SuperBetter, which offers a revolutionary (science-based) approach for getting stronger, happier, and more resilient. I’ve been testing it, and it works. Not only am I feeling better, but I’m having more fun.

As adults, we often lose track of play. My hope is that this episode will help you to reclaim it. It’s not frivolous; it can help you get a lot more done with less stress.


Want to hear another podcast on the connection between health and video game use? — Listen to my conversation with Adam Gazzely, the maverick of brain optimization (stream below or right-click here to download):

Want to hear another podcast relating to the use of psychedelics in health care? – Listen to my conversation with Jim Fadiman. In this episode we discuss risks, micro-dosing, ibogaine, and more (stream below or right-click here to download):


This episode is sponsored 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 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 resultsClick this link and get a free $99 upgrade. Give it a test run…

QUESTION(S) OF THE DAY: What challenge in your life could you build a quest around? Who will be your ally and what quests will you identify? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode | | Twitter | Facebook

Show Notes

  • How Jane answers the question, “What do you do?” [5:55]
  • Examples of real world problems that are solved with games or by gamers [7:15]
  • The story behind Jane’s concussion and how her career evolved from the accident [10:35]
  • How Jane climbed herself out of the hole of suicidal thoughts [16:55]
  • Action steps for using gaming lessons and applying them to real life [20:05]
  • How to build a quest into your life [27:30]
  • The health effects of Candy Crush Saga [31:35]
  • The health benefits of Tetris and Call of Duty [39:20]
  • On post-traumatic growth and post-ecstatic growth [49:05]
  • On the use of psychedelics to simulate traumatic experiences [54:45]
  • The threat of game addiction – how to not sink 60+ hours a week into World of Warcraft [57:45]
  • How to avoid potentially addictive games [1:04:05]
  • Jane’s current gaming workout schedule [1:08:35]
  • Who comes to mind when you think successful?  [1:13:15]
  • The story behind the Oprah “Thank You” Game [1:19:45]
  • Favorite documentaries [1:20:45]
  • What purchase of $100 or less has been most valuable? [1:22:25]
  • Morning rituals [1:24:30]
  • Carry-over effects of watching sports/games to performing better [1:27:00]
  • If you could have one billboard anywhere, where would it be and what would it say? [1:29:30]
  • Jane McGonigal’s one request for the audience [1:31:45]

Elements of Creating a Game to Influence a Real Life Outcome

  • Develop a secret identity
  • Recruit allies
  • Have your allies give you quests
  • Collect and activate power-ups
  • Identify and defeat bad guys

Top Therapeutic Games

Clash of Clans | Words with Friends | Candy Crush Saga

People Mentioned

by Tim Ferriss at July 28, 2015 04:28 PM

Dave Winer

Denton vs "Sources Go Direct"

I have a little story I want to tell.

Five years ago, when I was a visiting person at NYU J-school, I organized an afternoon seminar, a discussion between three leaders in the local Internet business community, about a topic very dear to me -- Sources Go Direct.

The three panelists: Rachel Haot, Fred Wilson and Nick Denton.

The discussion was to have been about the way news was organizing itself on the net, with the sources of the news going direct to the people who were interested in the news, without control of intermediaries.

My theory was that there would be a role for journalism in this new world, but it would be different from the role it played in the past. Now that the sources can go straight to the readers, the reporters would stop being sources themselves, and return to a more pure form of quote and fact gathering and presenting.

I still think that's the way it's going, but my panelists didn't agree! Especially Denton, who told a story about how when he was a budding software entrepreneur in Silicon Valley in the early 2000s, he visited with me as a gatekeeper (a key idea for Denton) to get his ideas distributed. At that time, according to Denton, I was the equivalent of what Gawker was, then, in 2010.

I was shocked into silence. Denton wanted me to argue with him, but I wasn't prepared for that, being so sure that this was incorrect. I never wanted to be a gatekeeper, quite the opposite. I was trying to be a lead-by-example proponent of the Sources Go Direct philosophy, before it had that name. When Denton visited me in in February 2000 for Spicy Noodles at Jing Jing in Palo Alto, I wasn't a journalist gatekeeper, I was the CEO of a tech company, just like Denton, who was going direct. In my case it was out of necessity, the gatekeepers (who certainly existed!) weren't carrying the story I wanted them to. They were imho stuck, and as a result so was I, and I desperately wanted to get unstuck. So I skipped the intermediaries and went direct, using something that would later come to be known as a blog.

I wrote about Denton and our dinner because it was something I did that was interesting to me. Not because I felt I was in control of his destiny, and if I had thought that was the case, I would do whatever I could to get rid of that power.

In fact something like that happened, after I gave a talk to a group of bloggers on Prince Edward Island in October 2003. They felt I was in the way of their growth. I was surprised to hear it, so I took steps to get out of their way. I guess it's hard for some people to understand that I really believe the hype. The world isn't the same after the net as it was before. It was Denton's belief then that nothing had changed. The people who were gatekeepers were different, but there were still gatekeepers. I thought that gatekeepers were, like the rest of the elite, becoming less powerful because the nature of world-wide communication was changing.

But it's funny that Denton, with his investment in editorial tools for his readers, actually made the bet on Sources Go Direct. So while his publication was focused on the rear-ends of the elite, he was empowering his readers to write without going through the people he paid to manage the gates. I just don't think the anuses of the rich and famous are all that interesting. I wonder if there are others who feel the same.

I also wonder if Denton eventually got tired of being a gatekeeper. It must be exhausting!

July 28, 2015 02:12 PM

July 27, 2015

Dave Winer

The U.S. Blues

One of my favorite Dead songs is U.S. Blues.

Not only is it a catchy tune with eye-moistening patriotic lyrics, it was written at a time when reactionaries in the US were trying to take ownership of patriotism.

Wave that flag, wave it high and wide!

Did the hippies say OK you can have the country oh hard hat war lovers?

I'm Uncle Sam that's who I am, been hidin out, in a rock and roll band!

Hah of course, that's exactly where Uncle Sam would be.

So when you see something you love, something important to you, get usurped by forces of hate and war, what you do is you love it right back into your arms.

Summertime done come and gone...

My oh my!

July 27, 2015 08:49 PM

What's going on at Gawker?

I haven't been paying much attention, I had little hope of understanding what's happening there. But it sounds, from afar, as if something is changing.

I think Gawker could use some change. The way they cover tech is fairly disgusting, imho. I don't pay attention to the rest of it. I've known Denton for a long time. I think he's a smart guy, and the conversations we've had have been interesting. But every time I give Gawker a chance, they do something crazy and disgusting, and I just look the other way for a while. Then the cycle repeats.

It's too bad, because their software for user participation seems pretty good. It looked like perhaps they were trying to evolve into something like Reddit or Wikipedia even. That might have been interesting.

Are they becoming the next CNET?

If you have light to shed, please post a brief comment below. Thanks.

July 27, 2015 06:14 PM

Podcast: Hulu for news

A post by Melody Kramer on Facebook got me thinking now might be the time to take another look at the Hulu For News idea. 9-minute podcast.

See also, the future of news through Ezra Klein.

July 27, 2015 03:34 PM

Fog Creek – Interview with Allie Schwartz

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 Allie Schwartz, our VP of People. Allie is a long-time Creeker and is one of our new 3-person management team who leads Fog Creek. We’ll be introducing the other two in future interviews.

Allie Schwartz
Location: New York City, NY, US
Current Role: VP of People at Fog Creek Software

How did you end up at Fog Creek?

When I was 25, I was working at a non-profit for a woman who hated me. On the side, I had created and was hosting a cooking web series from my apartment in Brooklyn. At the time, that was my passion project, and really where my focus was. As is true of most passion projects, it didn’t make any money, so I needed a job to pay the rent.

I sent an email to everyone I knew in New York saying I desperately need a new gig, and to please send opportunities my way. My good friend from Oberlin, Sam Vanderpol, was working at Fog Creek in QA, and he responded that FC was looking for their first ever Receptionist. My boyfriend at the time was a Software Developer and a Joel fan. He told me about Fog Creek’s reputation for being an incredible place to work, so I applied, was hired, and was the receptionist for over 3 years.

In 2013, I left Fog Creek for our sister-company, Stack Exchange, where I worked on the Stack Overflow Careers Sales team for a year. Then I went to a small startup called Spring to head up people operations. I’d been there about 6 months before Fog Creek came calling with an opening. I couldn’t pass it up – and here I am!

Tell us a little about your roles at Fog Creek

I think of the position of Receptionist at Fog Creek as the “Keeper of the Happiness”. When I started in 2010, I answered phones, worked with our caterers, and generally tried to create an environment where our devs would be happy to spend their days. I used to tell people my job was “to make sure the nerds eat lunch”.

Over the years, I picked up more and more responsibilities like planning events, helping with recruiting, and tackling the sales inbox. When I came back into my new position, “keep people happy” was still my marching order, but the work had definitely changed. I still plan events, just bigger ones, and I still recruit, but now I manage the full cycle. I spend a lot more time talking to our employees in a more official capacity during 1x1s, and I’m involved in strategic planning for the company long term.

The biggest challenge for me in my role at Fog Creek has been tackling new responsibilities in areas where I have less expertise. It can sometimes be a “fake it ‘til you make it situation,” which is a little scary, but also fantastic because I never stop learning, and I’m often hitting new milestones, which is empowering. The best thing about Fog Creek is we trust that our employees are smart enough to try new things, and we give them the opportunity to stretch and grow. It feels great when your company invests in you, and it’s a major incentive to get really good, really fast.


When are you at your happiest at Fog Creek?

There are so, so many things that make me happy every day at Fog Creek. Eating lunch with my friends, random chats in Slack, the beautiful view from our office, etc. etc. My favorite part of the job is when we make an offer to an awesome candidate who accepts; it’s always thrilling to add someone to the team, particularly when that person is smart and gets things done. I also love when our remote employees come in for parties and remote weeks; never a dull moment when everyone’s together!

What software tools do you use and couldn’t live without?

I love FogBugz for recruiting, and Trello for checklists and project management. We use Slack, which is great, and personally I’m pretty into Seamless…that’s a joke, but only sort of.

Screen Shot 2015-07-27 at 11.17.11

What are a few of your favorite Fog Creek blog posts?

I always like the meet the intern posts, and the old classic, “David’s voice activated standing desk”. I also love Cupcakes in Paradise by my predecessor, Liz, which is about adapting your recruiting process for interviewing remote candidates.

Outside of Fog Creek, what do you like to do?

I have a great group of friends from college; they’re my urban family. We’re very tight-knit and spend a lot of time together. We’re always out in Brooklyn going to the movies, trying new restaurants, or wasting hours at the ones we’ve been to 1,000 times.

I’m relatively artsy, and I get a lot from working with my hands, so at any given time I’m toiling away on 1 or 2 projects. These days my interests skew to mostly home improvement projects – painting walls, styling my living room, mounting shelves, what have you. And I also just got this coloring book for grown-ups that’s eating a bunch of time…

Other than that, I’m a pop culture enthusiast. I spend a lot of time watching things – high and low brow, I do not discriminate. I also love podcasts and puzzles. A perfect day is a coffee, bagel, the crossword puzzle, a trip to Ikea, take out and a movie on the couch.

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

Oh man. There are so many things. I think the most important piece of advice I’d give to anyone starting out in any career is that you have to learn to ask for what you want. Part of your manager’s job is to have conversations with you about career development, your salary, etc., so don’t be afraid to broach those subjects, even if you’re at the bottom of the food chain, and know your value. Work hard, and be your own advocate!

…And if you’re working for someone who doesn’t value you, leave. Immediately. No job is worth feeling bad for every day. The odds are you won’t do good work in that environment anyway. Take your toys and go, something better awaits you!


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

Recent Interviews

Tomomi Imura
Cassidy Williams
Cassidy Williams
Rich Armstrong
Rich Armstrong
Saron Yitbarek
Saron Yitbarek

by Gareth Wilson at July 27, 2015 10:29 AM

John Udell

Soon everyone will be annotating the Web

You are not likely to find yourself in this situation:

annotation collaboration Jon Udell

Here's the setup. I've browsed to Brian Donohue's essay Bookmarklets are Dead, and I've selected a sentence. Three annotators offer to handle the selection:

  1. Genius
  2. Hypothesis (disclosure: my company)
  3. Medium's built-in annotator
[ Also on InfoWorld: Find out how Chrome, Safari, Firefox, IE, and Opera measure up in the HMTL5 shoot-out. | Get a digest of the day's top tech stories in the InfoWorld Daily newsletter. ]

Although you'd have to go out of your way to encounter this clash of annotators, it's a harbinger of things to come. Bookmarklets that activate on demand and inject behavior into Web pages are being superseded by always-on browser extensions. Why? The W3C's Content Security Policy has evolved to favor the latter. Says Donohue:

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

by Jon Udell at July 27, 2015 10:00 AM

July 26, 2015

Dave Winer

What Twitter doesn't need

Ben Parr writing in TechCrunch does a great job of explaining exactly what Twitter doesn't need in its next CEO. However it's probably how Twitter's board is trying to fill the job. I have a quote for that from one of the best movies of all time, As Good As It Gets. At the top of the stairs in the climax scene of the movie, Carol the waitress screams in despair: "Why can't I just have a normal boyfriend! A regular boyfriend who doesn't go nuts on me." The camera moves to her mother, in the shadows, who says: "Everybody wants that dear. It doesn't exist."

I might be getting the quotes somewhat off, but that's the spirit.

What Twitter "needs" according to Wall Street they can't have, because it doesn't exist.

What Twitter really needs, is to go back to before the IPO and chart a different course. And to do that they need a CEO with chutzpah, who will tell Wall Street to dump their shares if they want, because the company is not being run for them. They have a vision that goes way out into the future, and fuck you if you think we're going to screw that up for a few quarters of modest stock appreciation. That will just get us back where we are now. There might be a bit of money left on the table in the current model, and a great Wall Street-approved CEO might be able to pick up some of it, but the honeymoon will be over in a year, and you'll be looking for a new CEO again, and coming up with lists of three things the CEO must be. And it won't work then either.

Think different!

Who said that? That's who they need as a CEO.

Or someone with a loud cackle-y laugh who, when he tells you what he's doing, is totally unbelievable, except his stock is now worth more than Walmart's.

Tech management for high fliers like Twitter is not something you go to Harvard Business School to learn how to do. You don't pick up your bedside manner at an investment banking or PR firm. You run the company the way you see fit, and you tell Wall Street to buy steady investments from blue chips like Ford or General Electric, but companies like Twitter will be volatile and unpredictable, and are equally likely to skid into the gutter as reach the stars. No risk, no reward.

Maybe the problem was that Dick Costolo was too nice a guy without any great ideas about what Twitter could be beyond what it already was. If they want a CEO that the company deserves, they need to pick someone who has really different exciting ideas about the future of media.

July 26, 2015 12:37 PM

July 24, 2015

Lambda the Ultimate

mbeddr: an Extensible C-based Programming Language and IDE for Embedded Systems

Markus Voelter, Bernd Kolb1, Daniel Ratiu, and Bernhard Schaetz, "mbeddr: an Extensible C-based Programming Language and IDE for Embedded Systems", SplashCON/Wavefront 2012.

Although embedded systems are an increasingly large part of our lives, and despite the fact that embedded software would undoubtedly benefit from the kind safety guarantees provided by more advanced type systems, most embedded software development is still done in C. That's partly a result of toolchain availability, and partly because many more advanced languages typically impose requirements on memory, dynamic memory allocation, and other runtime infrastructure that simply aren't supportable on a lot of resource-constrained microcontrollers or acceptable in a risk-averse environment. Mbeddr seems to be seeking a middle ground between C, and creating a whole new language. From the paper:

While the C programming language provides very good support for writing efficient, low-level code, it does not offer adequate means for defining higher-level abstractions relevant to embedded software. In this paper we present the mbeddr technology stack that supports extension of C with constructs adequate for embedded systems. In mbeddr, efficient low-level programs can be written using the well-known concepts from C. Higher level domain-specific abstractions can be seamlessly integrated into C by means of modular language extension regarding syntax, type system, semantics and IDE. In the paper we show how language extension can address the challenges of embedded software development and report on our experience in building these extensions. We show that language workbenches deliver on the promise of significantly reducing the effort of language engineering and the construction of corresponding IDEs. mbeddr is built on top of the JetBrains MPS language workbench. Both MPS and mbeddr are open source software

It appears that mbeddr allows multiple DSLs to be built on top of C to provide greater safety and more domain-specific expressions of typical embedded software patterns. Additionally, it provides integration with various analysis tools including model-checkers. Another paper, "Preliminary Experience of using mbeddr for Developing Embedded Software", provides a look at how all of these things fit together in use.

The mbeddr approach seems similar in concept to Ivory and Tower, although mbeddr uses JetBrains MPS as the platform for creating DSLs instead of building an embedded DSL in Haskell.

July 24, 2015 04:47 PM

Dave Winer

MyWord Editor gets more beautiful

Remember MyWord Editor, the silo-free text editing program in JavaScript?

Last time I wrote about it, it was only 1/2 Medium. It could store stuff using your Twitter identity, and publish beautiful documents, but the editor was just plain old HTML forms. Not very beautiful to anyone but its creator.

Then in May I tripped over a project on GitHub, called medium-editor, that promised to take care of the beauty part of it. I just had to figure out how to replace the plain Jane editor with the nice one. It took a couple of approaches to figure it out, and now it's working. Couldn't be happier.

We're much closer now to having a fully open source silo-free way to publish single-page documents to the web in a way that's reasonably future-safe.

It's quite a stack

  1. The editor is a JavaScript app running in the browser. Open source, MIT license.

  2. It talks to a nodeStorage server, which implements storage and identity.

  3. Which in turn talks to Twitter API to handle identity.

  4. Storage is on Amazon S3.

  5. The API is documented in source, hopefully soon a wiki.


The medium-editor guys are great. And they've got quite a nice bit of uptake. They were very helpful when I had questions, even though they didn't know what I was working on.

We're ready to take more leaps. We just need help from users. How? Use the stuff. It's pretty easy now, and getting easier all the time.

July 24, 2015 04:42 PM

Quick followup re GMail problem

On Wednesday I wrote about a problem I've been seeing with GMail, or so I thought. Messages that I knew I must be getting were not showing up in any of my mailboxes in GMail. But when I searched for them, they would show up.

I heard from other people who had seen the same behavior.

And I heard from two people from Google who work on GMail, who asked all the right questions. And gave me really detailed instructions on how to help them debug this.

What they turned up is that the message I gave them the ID of had been classified as spam by Apple software running on one of my machines. I thought this couldn't be, I never use the Apple mail client. I only access my email from the web interface.

But then I realized that's not true. I've given Apple all the info it needs to log onto my mail account from all of my iOS devices. Yet the Google people say the connection came from a Mac. They see it in their logs (which is amazing given how much email they must process).

Anyway, I accept what they say and wanted to pass it on. Our email systems are more complex than we realize. They were certainly more complex than I was thinking.

At this point the problem isn't solved, but I'm not sure what to look at next. Thinking about it.

But wait, there's more!

I got a fairly detailed howto from one of the Google guys, Brad Town.

He says: If you haven't given any Macs access to your Gmail account, then I think one of the following is true:

  1. You've given access to a Mac but didn't realize that it'd also access Gmail. (For example, if you linked Gmail's Calendar or Contacts in OS X, it may also enable Gmail access.)

  2. Our identification of the issue (OS and client version, etc.) is wrong.

  3. Someone else is accessing your account.

And then goes on to recommend, in great (useful!) detail how to proceed.

The best advice he offered is to assume #3 is true, and proceed from there. I don't actually think it's true, but it seems to have had good results.

What I did

I went through Google's suggested security process. They showed me a list of machines that had been either accessing my account, or had tried to, but were deemed not secure enough by Google, and denied. I had seen reports of the denials before. They usually happen when I'm watching Jeopardy, or Law & Order, my two prime goof-off shows. The requests come from my IP address, so I don't think it's a hacker trying to get in, it's got to be one of my menagerie of computers.

I changed my password

Then I sucked in my breath, and

  1. Changed my password.

  2. Deleted all the access to services and machines that weren't from Google. That meant telling LinkedIn they couldn't check my contacts (why had I ever given them permission to do that, weird) and shutting off my two iPads and my iPhone. Apple was no longer a possible source of the missing messages.

One quick result is that things quieted down around here. When a mail message would come in, each of my devices would take turns singing, including my Apple Watch which informed me haptically and audibly of the new message. It's nice that this change got them to STFU. And I still have an Android device for portable access to my Google accounts.

Then I sat down at the desktop machine, a big screen iMac, and don't you know, there's a notice in the upper right corner from Apple about my password, here have a look.

Well well well, that's a smoking gun. The Mac OS wants to know why it can't read my email. And I thought no way any of my Macs were getting access to my mail. Clearly they had access, and they want it back.

Now I'm going to click on the Continue button and see where it takes me.

To System Preferences, Internet Accounts, Google.

I have no recollection of ever telling my Mac about this account, nor did I have or any reason to. I don't use their desktop apps for these functions. I'm strictly a web guy. My guess is that when I set up my iPhone to access the account, it shared the information with my Mac without telling me. And further, the Mac has a spam filter (this is just a theory) and this is where the mail deletions were happening.

Caught in the act

I actually saw an email get deleted this afternoon. It was an offer to let me test a product. The message showed up in the Notifications on both my iPhone and Android phone. When I picked up one of them, I literally saw the notification disappear. When I went to the mail app on the Android phone, the message was not there. Nor was it in the GMail web interface.

I searched for it in GMail, as I did with the earlier lost message, and it was there.

This happened before I changed my password. Hasn't happened since.

BTW, this message was borderline spam. GMail didn't think it was. I often get messages like this, and I don't complain. I like to know what free hardware I can have. I almost never ask for a test unit though.

Visions of the TSR wars

This whole thing is freaking me out. I thought my Mac was sacred space, not touched by all the control freakery of the iPhone. But I shouldn't have been so naive. Apple has been pushing their cloud services on the Mac for a long time, and I think I relented last time I set up a Mac, or maybe the defaults were different, or the messages better phrased to make me go ahead and try it. They were never very clear about what these services do. I bet this is one of the things they did.

Could it possibly be that Apple doesn't like the fact that I use GMail? Could this be marketing? A feature, not a bug? How did I get sucked into this! I'm a web mail user, very deliberately. I wanted to stay out of this mess.

You're almost certainly too young to remember the TSR Wars of 1986 and 1987. I was a participant. Our competitor would see that we had installed interrupt handlers to catch our magic key, and they would de-install them, basically killing our app. So we had to learn to watch for this, and put ourselves back. This mail situation feels a bit like that. We absolutely need to control email. It shouldn't be up for grabs. This is not user generated content. And by the way -- I pay for my Mac hardware. This is not a case where if you don't pay for it you are the product. I pay.

PS: I tried looking up TSR Wars on Google. They're convinced I meant Star Wars.

PPS: TSR is an acronym for Terminate and Stay Resident.

PPPS: A Hacker News thread on this post.

July 24, 2015 04:33 PM

Tim Ferriss


The Tim Ferriss Show QnA with Maria Popova

“Life is a continual process of arrival into who we are.”
– Maria Popova

Maria Popova (@brainpicker) has written for amazing outlets like The Atlantic and The New York Times, but I find her most amazing project to be

Founded in 2006 as a weekly email to seven friends, BrainPickings now gets more than 5 million readers per month (!). I read very few blogs regularly, but BrainPickings is one of the few that makes the cut. It’s a treasure trove.

Maria is massively successful, and her output is staggering. None of it’s accidental, and she’s great at teaching what she’s learned.

This episode answers the top-10 most popular questions you all had for Maria, including:

  • The single attribute that leads to greatness in any given field
  • Required reading and habits for anyone in public office
  • How Henry David Thoreau was the first to talk about the dangers of sitting
  • Why we must stop referring to our work as “content”


Want to hear more from Maria Popova — Listen to our conversation in which we discuss writing, workflow, and workarounds (stream below or right-click here to download):

This podcast is brought to you by Vimeo Pro, which is ideal for entrepreneurs. In fact, a bunch of my start-ups are already using Vimeo Pro. WealthFront uses it to explain how it develops personalized investment portfolios. TaskRabbit uses it to tell the company’s story. Twitter uses it to showcase Periscope. Why are they using it instead of other options out there? Vimeo Pro provides enterprise level video hosting that typically costs thousands of dollars for a tiny fraction of the 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 bandwith calculations or hidden fees. Just go to to check it out. If you like it, you can use the promo code “Tim” to get 25% off. This is the deepest discount you will find anywhere for Vimeo Pro.

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 blogs do you consider a must-read every week? What makes those sites worth your time? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode

Mentioned from Brain Pickings

Show Notes

  • What advice would you give to someone just starting a blog? [4:07]
  • You have probably read all the wisdom shared on Brain Pickings. Has this helped you become who you want to be? If not, what is stopping you? [8:45]
  • What is the most significant characteristic that distinguishes people who have accomplished greatness in any given field? [11:43]
  • How do you decide what to read? What makes something not worth reading? [16:00]
  • What book have you read multiple times? [19:23]
  • If you could guarantee that every public official or leader read one book and engaged in one habit, what would those be? [24:38]
  • How do you turn down invitations that don’t interest you? How do you avoid losing time in your day? [26:05]

People Mentioned

by Tim Ferriss at July 24, 2015 12:00 PM

Blue Sky on Mars

Diffing Images on the Command Line

So about a year ago I realized that a play on Spaceman Spiff — one of Calvin's alter-egos — would be a great name for a diffing tool. And that's how spaceman-diff was born.

Then I forgot about it for a year. Classic open source. But like all projects with great names, it eventually came roaring back once I was able to make up an excuse — ANY mundane excuse — for its existence.

So today I'll shout out to spaceman-diff, a very short script that teaches git diff how to diff image files on the command line.

Most of the heavy lifting is handled by j2pa: spaceman-diff is just a thin wrapper around it that makes it more suitable for diffing.


This ain't the README, dammit, so go to the repo to learn about all of that junk.

Learning via Git internals

Part of the fun of doing this (of doing anything silly like this, really) is digging into your tools and seeing what's available to you. Writing spaceman-diff was kind of a fun way to learn a little bit more about extending Git's diffing workflow.

There's a couple different approaches to take to do this within Git. The first was slightly naive and basically involved overriding git-diff entirely. That way, spaceman-diff handled all the file extension checks and had quite a bit more control over the actual diff itself. git-diff was invoked using an external diff tool set up with gitattributes. If the file wasn't an image, we could pass the diff back to git-diff using the --no-ext flag. This was cool for awhile, but it became problematic when you realize your diff wrapper would have to support all flags and commands passed to git-diff so you can fall back correctly (and, because of how Git passes commands to your external diff script, you don't have access to the original command).

Another option is to use git difftool here. It's actually a decent approach if you're looking to completely replace the diffing engine entirely. Maybe you're writing something like Kaleidoscope, or maybe a tool to view diffs directly on Bitbucket instead of something locally. It's pretty flexible, but with spaceman-diff we only want to augment Git's diff rather than rebuild the entire thing. It'd also be great to let people use git-diff rather than try to remember to type git-difftool when they want to diff images.

The Pro Git book has a nice section on how to diff binary files using gitattributes. There's even a section on image files, although they use textconv, which basically takes a textual representation of a file (in their case, a few lines of image exif data: filesize, dimensions, and so on), and Git's own diffing algorithm diffs it as normal blocks of text. That's pretty close to what we want, but we're not heathens here... we prefer a more visual diff. Instead, we use gitattributes to tell Git to use spaceman-diff for specific files, and spaceman-diff takes over the entire diff rendering at that point.

Nothing ground-breaking or innovative in computer science happening here, but it's a fun little hack. Git's always interesting to dive into because they do offer a lot of little hooks into internals. If you're interested in this, or if you have a special binary file format you use a lot that could be helpful as a low-fi format diff, take a peek and see what's available to you.

Provided, of course, you have a great pun for your project name. That comes first.

July 24, 2015 12:00 AM

July 23, 2015

Mark Bernstein

Getting Started With Storyspace

Getting Started With Storyspace

When we started with Storyspace, personal computers were new and the idea of literary machines was controversial. Lots of people assumed that computers were for numbers, for accounting and business, and the idea of working toward something better than books seemed both crazy and strangely intriguing. Still, a lot of what we needed to do to get started was mechanical: this is a mouse, this is a file, this is a menu.

Today, the mechanical problems are much slighter, but the rhetorical problems are even greater. In the 1980s, postmodernism was fresh and (fairly) new and the horizons of critical theory glittered in the distance. Now, the path to that particular Emerald City is well-trodden, though lots of people no longer have much interest in going there. We’ve been reading and writing with links for twenty years: surely we know everything, right?

But we don’t: there’s a lot about plain old node-and-link hypertext, about writing with plain old static Web pages, that we don’t understand. There’s even more that we don’t understand about dynamic links, links that change as you read.

And what about the kids? There’s a new crop of freshmen coming in September, right? There always is. By definition, they don’t know How To Do It – and the best of them, of course, will shortly demonstrate that we don’t know, either.

I’m collecting exercises for teaching hypertext writing, in the hope of guiding Storyspace 3. If you’ve got a good assignment or lesson plan or a workshop segment that work, I’d love to hear about it. Email me.

July 23, 2015 04:01 PM

Fog Creek

4 Features That Made Atlas Switch to FogBugz Ocelot

Atlas is the largest travel agency in Croatia. We spoke about switching to FogBugz Ocelot with Domagoj Klepac, Software Architect at Atlas. He’s part of a 7-man IT team that support their 300 employees and the infrastructure and applications they all use.


Using FogBugz

Atlas use FogBugz in several departments across the organization, including IT. “Almost every request to IT comes in through FogBugz. It’s been working really great for us.” One of the things they’ve benefitted from in particular is that FogBugz supports “different modes of usage. So my colleagues from IT support have switched off all of their emails in FogBugz, and they are just looking at their queue and resolving cases from their queue. But I personally have email notifications switched on” so “when I get an email I can react”.

In addition to this, Domagoj says that “what I really like about FogBugz, and it’s one of the reasons we started using it, is how intuitive it is”. Previously they used another issue tracking solution, but they found that “when we were using JIRA, whilst you can set up JIRA in any way you like… the thing I really like about FogBugz is its way of thinking, it is really intuitive, and you can simply start using it – the defaults are great”. “You can do some sort of customization… and set it up in a certain way, but what it really excels at is that you don’t have to do it. So you can simply start using it and expand from there”. This has proven especially useful when onboarding new hires as it means that “the one thing I never have problems with, is introducing FogBugz to a new user”.

Overall “the guys have been very happy with using FogBugz” but they wanted to move to FogBugz Ocelot to benefit from all of the great new features.

Switching to FogBugz Ocelot

Initially, they were skeptical to make the move as they used various plugins. For example, they used BugMonkey “for our users to submit through a web form with some required fields, but in the end, it wasn’t used very much because users found it much easier to email us instead of using the web form”, and “so that one we switched off easily, and didn’t miss it at all.” And that was their experience with other plugins too, as in spite of no longer having plugins there’s “nothing that really takes time or impedes our workflow” and “it’s a great thing having no dependencies, it really does help”.

They’ve benefited from the new functionality too. For example, “we get a lot of emails so we have duplicate cases”, but they can now easily merge them with the new native merge feature. “The postpone cases feature is very handy too, and I’m surprised I didn’t find it when it was a plugin before you implemented it as a standard feature”. They also make extensive use of the ability to manage and share filters, “it is a great feature, especially for management. I have a few users who log into FogBugz just to check the reports… and before I was getting ‘ok how do I set up this filter’, or ‘how do I get it to filter the thing I want’, but now I just set shared filters because those are usually the things everyone is looking at.”

They also use search auto-complete, which “is very good because for some exotic searches you don’t have to go to the help and reference, you can simply check it out in the interface so that has made things easier”. They also note that “it’s nice seeing the new design… it is looking much better now, it is more modern” and “what was great, was that you said we could always switch back if there were any problems… but we didn’t have any issues, we simply switched and that was it”.

by Gareth Wilson at July 23, 2015 12:41 PM

Dave Winer

The future of news through Ezra Klein

First, please read this piece by Ezra Klein about the future of news.

What he describes is a part of the news system of the future.

  1. News orgs like Vox, which Klein writes for, will continue to post to their own sites. Search engines index the main site and are, and will continue to be an important source of flow. It also serves as a reliable archive of past work.

  2. They will have RSS feeds that point back to their sites.

  3. Some of the people who directly read the feeds are linkbloggers. They pass on links to people they follow, generating flow. I am myself a linkblogger.

  4. New news reading apps will build on the feeds. As Facebook and Twitter become more slow-moving big companies, the opportunities to create new news systems will be limited to their employees if the news only flows to their systems. Luckily, there's no need for that to happen, since almost all web CMS's support RSS. Next steps for all of them is to provide parallel interfaces to Facebook and Twitter.

  5. The stories appear in full text on Facebook. People who read on Facebook are much more likely to read the stories in place than to click on a link. If you want to reach Facebook readers, you must put the full text there. Facebook is of course making this easy.

  6. To compete, Twitter will have to allow full text of articles to appear on Twitter.

It happens with sources too

All that is on the distribution side. The disaggregation happens on the source side as well.

  1. A news article contains facts, quotes, illustrations and photos.

  2. Reporters used to call sources on the phone for quotes. Today and in the future, the quotes come in the form of speech, by the sources, on networks.

  3. The process of assembling the bits into a story is quicker, easier and more automatable. The tools will keep getting better.

  4. There's an opportunity for new quote-gathering sites. Twitter is far from the best way to do this.


  1. Bits flow out to the open web and to silos.

  2. Quotes come in from the network, and the open web through feeds.

  3. New ideas for reading systems are tried out on the open web.

July 23, 2015 11:27 AM

July 22, 2015

Dave Winer

Serious problem with GMail

Some really important messages are not showing up in my GMail inbox.

I've found out about them when I go look for them, when I expected an answer from someone and it didn't come. When I search, I find the message. However it's not in the Spam folder. And it's not in the inbox. I can't tell where it got routed to. Just that I had to search to find it.

This is really scaring me. What is going on with GMail?

Also, is there any way to tell how they routed a message? Where it ended up?

PS: Apparently Linus Torvalds has noticed the same thing.

July 22, 2015 10:10 PM

What really happened at Reddit?

In the end, after all the reporting about the user uprising at Reddit, do we have much of a clue about what actually happened?

What we know

  1. Victoria Taylor was fired.

  2. Ellen Pao resigned.

  3. The founder, Alexis Ohanian actually fired Taylor, not Pao.

  4. It had something to do with the Ask-Me-Anything function on Reddit.

That's what we know. But what was it about the AMAs that caused the firing?


My guess: The Reddit board, representing investors who recently put $50 million into the company, wanted to sell the AMA function to advertisers. Taylor objected, and was fired.

If so, it represents a much bigger story than what the press reported. This is the fundamental clash between the users of social media and the people who theorize that services like Reddit are worth investing $50 million in.

The real story, imho

I suspect they're going to find out that they lost the $50 million.

That if they sell out the AMA function, all that was appealing about Reddit to the current Reddit users will be gone, and as the users of Digg proved, they are mobile. They can take their act elsewhere.

Reddit is providing a commodity service. They are easily replaced by the users.

And you have to wonder what other services are vulnerable?

If the users have a voice that can easily be focused, something that distinguishes Reddit from services like Twitter, Facebook, Instagram, all the various chat services, where the users don't come together in a single online place, then you probably can't monetize it.

However if your users are disorganized, you can probably make some mistakes and learn from them, and still hold on to most of your users.

Users threaten to quit Facebook and Twitter all the time, and some do, but the majority stay put.

PS: Here's an example of a service that concentrates all its users more than probably is safe.

July 22, 2015 12:49 PM

Fog Creek

Cultivating a Code Review Culture – Interview with Derek Prior

.little {font-size: 75%}
Cultivating a Code Review Culture – Interview with Derek Prior

Looking for audio only? Listen on

We’ve interviewed Derek Prior, a Developer at Thoughtbot and host of The Bikeshed Podcast. We discuss how to build a code review culture, diving into the benefits of code reviews, the essential elements to make them effective and how to handle conflict if it arises.

Content and Timings

  • Introduction (0:00)
  • Code Reviews Vs. Pair Programming (0:26)
  • Benefits of Code Reviews (1:10)
  • What to cover in a Code Review (4:48)
  • Code Review Author and Reviewer Best Practice (6:47)
  • Handling Conflict in Code Reviews (10:21)
  • Recommended Resources (12:45)



Derek Prior is a developer for Thoughtbot in Boston. He co-hosts a web development podcast called, “The Bike Shed”. He speaks about development practices at conferences, including the talk, “Cultivating a Code Review Culture”. Derek, thank you so much for taking time to join us today. Do you have a bit to share about yourself?

I’ve been speaking at conferences and meet-ups lately about code reviews, like you said. It’s something that I’ve had a lot of experience with over the last 10 years or so.

Code Reviews Vs. Pair Programming

Some people mean different things when they use the term “code review”, like “pair programming”. What do you mean by code reviews?

There’s this term, and it’s not my term, called, “modern code review”, and that’s what I’m talking about. What that means… The definition of that is basically, asynchronous or tool-driven, generally like, lightweight reviews. Most of the people I work with that means a GitHub pull request. That’s typically what I’m talking about. Pair programming is great, and has a lot of the same benefits. But when I’m doing pair programming, I still like to have another person to review the code… I still like to have that other person, also review the code.

The reason for that is in pair programming, you’re kind of building up a solution with your pair, as you go. I really like to see at the end, if that holds up for another developer who might have to work on this next week kind of thing. Like, does this make sense to somebody who wasn’t there all along the way.

It’s much more helpful to focus on the cultural benefits of code reviews

Benefits of Code Reviews

Why are code reviews important?

Everybody here, when they hear about this, everybody’s natural reaction is to say that they catch bugs. That is true. If I have code reviewed that’s going to have less bugs, than code that isn’t reviewed. But I think that that puts too much importance on the “finding bugs” part. Microsoft actually did a study of this, Microsoft Research, in 2013. Where they found that people consistently said the number one benefit from code reviews is finding defects in code.

But then when they looked at actual data collected in their code review tools, and talked to people after they did code reviews, what they actually found was that people got way more benefit, way more cultural benefits, out of sharing knowledge with each other, or keeping up with what everybody’s doing, and knowing what’s going on in that other part of the code base. Finding a really interesting alternative solution to a problem that they hadn’t thought of, just by getting somebody else’s viewpoint.

Those are the much more important things. I feel like they’re much more interesting than finding defects. Finding defects is actually, frankly, really hard. A lot of times I’ll talk to people about code reviews, and they’ll say, “Well we did code reviews, but we still had all these bugs. They weren’t helping us catch the bugs”, and yeah, they’re not going to catch all the bugs. By saying, ‘The chief thing we get out of code reviews is “defects finding”’, what we’re really doing is setting ourselves up for those situations where people say, “But you did a code review on this, and there’s still a bug.” Right?

It’s hard to find all the bugs, because when you’re doing one of these lightweight code reviews, you’re really just looking at a slice of a change. You’re looking at the diff, and to know exactly how that’s really going to impact your system, you have to know the entire system. You can catch edge cases where, “Oh, you didn’t check to see if this was nil”, or whatever the case may be. Knowing exactly where this is going to screw up your data, is hard to know, without knowing the whole system. Code review is great for some defect tracking, or defect finding, but it’s not a panacea. Instead, I think it’s much more helpful to focus on the cultural benefits of code reviews.

How should you work code reviews into your workflow?

What we typically do at Thoughtbot is, when I finish up a PR, I will paste it into Slack, or whatever. We’ll paste that in and say, “Can I get a review for this please?” If it’s not urgent, that’s basically all that happens, right? If it’s urgent, I will ping somebody directly. Ping a couple people directly and say, “Hey, this is a production fix, can you take a look at this?” Generally, that’s enough, with the way we work, to get your code reviewed within the next few hours. Which is, generally sufficient.

You can move on to something else. You can review somebody else’s code in that time. You can kind of trade, if somebody else is coming up and finishing something up. You can be, “Oh yeah, I’ll take a look at that. You take a look at this one for me.” That kind of thing. We take a really, lightweight approach to it.

When you think about it, there’s a lot of natural breaks throughout your day that you can work these in to right? For me, I come in in the morning, “are there any PRs outstanding I can look at?” Then I get started. Then, right before lunch, or in the afternoon, if I’m going to take a coffee walk around Boston Common or something, I’ll look then. Either before or after. There’s plenty of times I find, that I can just work these in naturally. There’s no need to schedule them.

I’ve worked with teams that try to schedule them, or try to say, “This person is going to be the one, that’s going to be chiefly doing code reviews this week”, and I’ve never seen that work particularly well. I just try to say, “Keep it lightweight, friendly”, things like that. People are really surprised, or skeptical, to hear that this works. The biggest thing that makes this work is, keeping small, discrete, pull requests, that are going to be much easier reviewed, and providing some excellent context. That’s the “why” you’re making this change, not necessarily the “what”. Ultimately, the big secret to this is that, most of these code reviews only take me five minutes. It’s not a big commitment.

What to cover in a Code Review

What type of things should a code review cover?

It’s really important that each person involved in the code review, doesn’t operate from a central checklist, but rather just looks at things that interest them about a change right? Or interests you overall. Maybe you just got finished reading this great book on design patterns. You’re looking for a way to apply this one design pattern. That’s what you’re going to look for. Great. Fine. That’s valuable. You’re going to teach somebody something.

Or maybe you’re really interested in web security, and you’re going to take a look at things from that perspective. Or accessibility, you’re going to take a look at things from that perspective. That’s where having a good blend, on your team, of people who are interested in different things, really pays off, in code review. We’re all going to look at code reviews, and try and see if there’s an obvious bug. I said, not stressing the bug finding, is a big key to this.

But yes, you’re going to look for them, and you’re going to comment on them when you find them. What I really like when people do, is just sort of take their slant on how they think software development should be. Just kind of look at it with their lenses and see, “Oh, did you consider doing this alternative thing over here?” I typically look at … I’m always harping on naming. Right? Part of what I think makes code review so great, is that it’s a great place to have a technical discussion about your actual software. Rather than in the abstract, like when we go to conferences and things like that.

I harp on naming a lot to say, “Do these names give us a good basis for a conversation, about this? Are they descriptive?” That’s really important to me. I look for test coverage, to see … Like I said, I’m not hunting for bugs throughout the entire system … But I am looking to see, “Is this adequately covered, by test?” I’m not going to look at every single test, but I’m just going to to kind of get an idea of “What kind of tests would I expect to see in this change?” I’d expect to see a feature spec. Or I’d expect to see a unit test. That kind of thing. Just make sure that those are there. Stuff like that.

Like I said earlier, the biggest thing is just everybody kind of, bringing whatever it is that they’re interested in … Whatever they’re an expert at … To the table, so that we can all learn from each other.

Having conflict in your code reviews is actually really beneficial

Code Review Author and Reviewer Best Practice

As a code author, what should you do to get the most from a code review?

The number one thing is context. When you’re submitting a pull request, you’ve been working on this thing for four hours, or eight hours, or two days, or sometimes even a week, or whatever the case may be. You have a lot of context built up in your head. Some things seem really obvious to you at this point. But, to the person reviewing it, they weren’t there for you. They don’t have that context. What you really need to do is think about… It really helps if you’ve been making several small commits along the way, where you’re describing what was in your head.

But as you prepare the change… If you’re going to use a GitHub pull request, and you’re going to submit your pull request to GitHub, make sure you give a nice description of, a summary, of everything … What I really like to see is, not what … A lot of people will summarize what they did? That’s kind of important, the bigger the change gets, so I know what to expect when I’m looking through the change? But it’s not the only thing I want to see, right?

I can figure out what a change does by looking at the code. Unless it’s totally obfuscated. What’s really interesting is why. Why are we changing it? Why is this the best solution? What other solutions did you consider? What problems did you run into? Is there an area of the code you’re really unsure about, that you’d really like some extra eyes on? That kind of thing. Those are going to help you get a much better review, by setting up everybody else to be on the same page as you.

When you’re reviewing code, how do you do it without being overly critical or needlessly pedantic?

This happens a lot. Where code reviews that aren’t done particularly well, or overly critical, can kind of, lead to resentment among the team. The big thing there is, negativity bias, that you need to be aware of. If I’m talking to you … Like I am in this conversation, and I give you some technical feedback, and I say, “Oh, why didn’t you use this pattern here”, whatever. You’re going to perceive that in one way. But if I say that same exact thing written down, it comes off more harsh. You’re going to perceive that more negatively.

It’s much more subject to your particular mood. I can’t influence it with the way I say something. It’s just a fact that, the same feedback written, is going to be perceived more negatively. One excellent way to get around that, is to give feedback in a manner that’s more of a conversation. What I like to do is ask questions. At Thoughtbot, we call this “asking questions, rather than making demands”, right?

Instead of saying, “Extract the service object here, to reduce some of this duplication”, I would say, “Hey, what do you think about extracting a service object here, to eliminate this duplication?” Right? They’re very similar comments, but now I’m opening it up to a conversation, by asking you a question. Like, “Oh, what do you think …?” Sometimes I’ll even say something like, “What do you think about doing it this way?”, and I’ll provide a code sample. Then afterwards, if I don’t really feel particularly strongly about it, I’ll be like, “No, I’m not really sure though, what do you think?” Just to kind of say, “I can see how this would go either way.” “What do you think?”

Clarifying how strongly you feel about a piece of feedback, is also something that can help. Making sure that you’re addressing people’s feedback. That’s basically, how to avoid being overly critical. Is just asking nice, friendly questions, that open up a conversation? The pedantic part, I guess would be like, when you start arguing in circles. When you’re not coming to a good conclusion here, right? What I’d say there is just, make sure you’re focusing on high value things. Don’t go edge case hunting everywhere.

There’s a lot of times you can find edge cases that, just aren’t going to come up. Or, maybe they are and they’re important. But really, what you want to be focusing on is, the more higher value type stuff that we talked about earlier. Try and focus on those, to stay away from these like, pedantic arguments that you can into in code review.

The big secret is that most of these code reviews only take me five minutes

Handling Conflict in Code Reviews

Inevitably, with discussions between developers in code, disagreements are going to occur, from time to time. How should you handle this type of conflict?

I think the first thing to recognize, is that, having conflict in your code reviews like this, is actually really beneficial. Right? As long as they’re the right types of conflict and nobody feels bad about them afterwards, that kind of thing … Because if you’re agreeing with your teammates all the time, and nothing interesting is happening in your code reviews, you basically have a monoculture, and those are dangerous on their own right.

Like I eluded to before, you want everybody bringing their own experiences, and their own expertise, and sometimes those are going to clash with each other. My experience was, doing things this way, led to these problems, and your experience was, doing things this way, was actually really beneficial. We’re going to have conflict about that. The key is that, handling those conflicts properly, is how everybody on the team is going to learn.

What I suggest, when you find yourself going back and forth, a couple comments about something, and you don’t seem to be getting anywhere … Nobody’s yielding, right? What I try to do is take a step back and be like, “How strongly do I feel about this?” Do I feel like, “This is a quality issue, that if we go out with this code, like it is today, it’s going to be a serious problem immediately?” Or is this kind of like, “It’s not really the approach I would have taken, but, maybe it will work. Or it’s a reasonable solution.” That kind of thing right?

Often times, that’s actually what it is. Once we get beyond a certain level of quality, what we’re talking about is trade-offs, all the time. That’s basically all we’re talking about when we’re doing computer programming. Like I said, once we get past the initial quality is, the trade-offs involved. If you’re arguing about what is essentially a trade-off, maybe it’s time to be like, “Okay. You know what? I would prefer to do it this way, but I can see why you’re doing it that way, and why don’t we just revisit this, if we need to, when we have more information?”, right?

Sometimes, you’ll argue about code, for a while, and then it goes into production. Then you don’t touch it for six months. Which means, it was fine. Even if you didn’t think it was the greatest looking code in the world, like it was written, and it doesn’t have bugs that are obvious. It doesn’t need to be continually improved so, whatever, it’s fine.

If you can table the arguments you’re having until you have more information, and then kind of revisit them. Be like, “Oh, okay. I see now we have this bug, or we have this additional feature we need. I can see how that thing you said earlier, would be a better approach here.” That kind of thing. Waiting until you have more information to, really dig in again, is probably a good thing to do.

Recommended Resources

Can you recommend any resources for those wanting to improve the effectiveness of their code reviews?

We have guides. If you go to, there’s a bunch of guides in there. Some of them are like style, and protocol and things like that. But there’s also a code review guide in there. Whether or not you agree with everything in there, I think it’s a good example of something that I’d like to see more teams do. Where they provide, “This is what we write down, and agree to.” Then have pull requests against, when we want to change. What we think code reviews should be. How we think they should operate.

Every piece of feedback, should it be addressed? Yes, I think so. At least to explain, “Okay, I see what you said there, but I’m going to go in this direction instead.” That kind of thing. I’d like see more people take a look at that, and then adopt it for their team. Other things that can really help with code reviews, are style guides. Which we also have in that repo but, there’s also many community style guides. Just avoiding those arguments about, “Oh, I’d really like see you call …” Like in Ruby, we have map and collect under the same method, right?

Let’s be consistent. Let’s pick map, or let’s pick collect. Or something like, just writing that down somewhere, making that decision once. Rather than arguing about it on all pull requests, those types of things. That’s basically it. I’d like to see more people, get on board with and kind of documenting their experiences and, their expectations out of these things.

Derek, thanks so much for taking time and joining us today.

Yeah, thanks for having me. It was good fun.

by Gareth Wilson at July 22, 2015 11:47 AM

Tim Ferriss


The Tim Ferriss Show with Charles Poliquin

“The rule is: the basics are the basics and you can’t beat the basics.”
– Charles Poliquin

Charles Poliquin (@strengthsensei) is one of the best known strength coaches in the world. He has trained elite athletes from nearly 20 different sports, including Olympic gold medalists, NFL All-Pro’s, NHL All-Stars and Stanley Cup champions, and IFBB bodybuilding champions. His clients include long-jump gold medalist Dwight Phillips, NHL MVP Chris Pronger, and MLB batting champion Edgar Martinez, among many others.

Poliquin is currently teaching advanced hypertrophy, nutrition, and strength seminars alongside one of my favorite athletes, Olympic weightlifting icon and medalist Dimitry Klokov.

Poliquin has authored more than 600 articles on strength training, and his work has been translated into 12 different languages. He has written 8 books, including his latest, a short gem entitled Arm Size and Strength: The Ultimate Guide. Find much more about Poliquin and his latest at


In this podcast, we frequently referred to my past episode with Arnold Schwarzenegger. You can listen to my conversations with Arnold here. In this episode, we discuss psychological warfare and much more (stream below or right-click here to download):

This episode is sponsored 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 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 resultsClick this link and get a free $99 upgrade. Give it a test run…

QUESTION(S) OF THE DAY: After listening to Poliquin, are there any strength or diet experiments you’d like me to explore and report back on? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode | Facebook | YouTube | Google + | Twitter | Instagram

Show Notes

  • The story behind Charles’s passion for strength and how he quickly learned multiple languages [6:05]
  • Charles’s secret skill that only his best friends know [10:40]
  • How to eliminate stretch marks or loose skin after extreme fat loss [15:05]
  • Something Charles believes that most people find crazy  [18:20]
  • On taking huge doses of fish oil [31:35]
  • How to select a quality doctor who can administer and interpret blood testing [42:10]
  • Favorite go-to sources for research [50:50]
  • Thoughts on hormone replacement therapy (HRT) [53:50]
  • HRT challenges with DHEA-sulfate levels [1:00:05]
  • Exploring the use of Deca-Durabolin to support joint repair [1:04:05]
  • What Charles tries to eliminate from his home [1:06:35]
  • Thoughts on warmup routines [1:11:45]
  • The perfect preparation for strength workouts [1:14:40]
  • Most common post-workout mistakes [1:20:25]
  • Commonly neglected ways to decrease body fat [1:25:05]
  • On planning vacation first [1:34:05]
  • Common mistakes training female clients [1:46:10]
  • On CrossFit and training with Dmitry Klokov [1:48:50]
  • Favorite mobility exercises [1:57:40]
  • On the surprising side effects of kettlebell swings [2:03:55]
  • Thoughts on achieving maximal strength on a plant-based diet [2:05:35]
  • High-bar vs. low-bar squats. Sumo vs. conventional deadlift. [2:06:40]
  • Most bang for your buck tips to increase testosterone and sex drive [2:10:50]
  • The supplements everyone should take [2:14:15]
  • When Charles thinks of the word “successful,” who is the first person that comes to mind? [2:19:35]
  • Favorite documentaries and movies [2:21:35]
  • A purchase of $100 or less that improved Charles’s life [2:24:05]
  • On morning routines [2:25:40]
  • If you could have one billboard anywhere, where would it be and what would it say? [2:36:50]
  • Advice to your thirty-year-old self [2:40:00]

People Mentioned

by Tim Ferriss at July 22, 2015 01:22 AM

July 21, 2015

Axis of Eval

What I learned about Urbit so far

[Updated, see comment below]

Urbit is some kind of new operating system design thingy, that is kinda hard to categorize.

Some interesting design points are:
  • Urbit restricts the number of identities in the system to 232. This means Urbit doesn't have enough identities even for currently living humans. In line with the usual obfuscation going on in Urbit, such an identity is called destroyer.
  • Urbit is programmed in a weird programming language called Hoon. Hoon's (only) definition is a 10KLOC file hoon.hoon, written in itself. It uses practically random variable names (such as nail for "parse input", or vase for a "type-value pair"), not to speak of the "nearly 100 ASCII digraph 'runes'". The author acknowledges that the parser is "very intricate".
  • Efficiency-wise, Hoon is impractical as a programming language, so in the real world, the VM will recognize Hoon fragments, and replace them with C code (called jets).
This brings us to the question: why would anybody actually design an OS like that? The best explanation I've seen so far is by Kragen, who writes:

by Manuel Simoni ( at July 21, 2015 06:09 PM

Dave Winer

We need a Dropbox for servers

I've been getting emails from one of my hosting providers, Linode, saying that my server there was exceeding its CPU allotment. I checked it out. It was Dropbox. As usual.

Dropbox is a total hog running on Linux. Maybe it is on the Mac and Windows too, but we just don't feel it so much. Not sure.

But I've been using it on all my servers for a very long time, years, and I can tell you -- it's wrong. It was a good first effort. But we really need the equivalent of Dropbox for servers. It would be organized differently, and it would be tuned up for the reality of servers.

I was hoping BT Sync was going to do it, but it got so convoluted in its various releases. I no longer know how to use it. And it's crashed my main machine the two times I tried to install it over an old version. I had to restore from a TimeMachine backup both times. One time it took out my fusion drive.

I was hoping that Amazon supporting filesystems (they call them elastic filesystems of course) would be the answer. But I finally got access to the service, and I can't figure out for the life of me what it actually does. As with almost all of Amazon's services, based on their docs and marketing materials.

What would a Dropbox for servers do?

  1. I don't need to share everything with every server. For example, each server does a backup at night, to a Dropbox folder. That does not need to be shared with all the other servers, just one other place, where all the backups appear.

  2. Some folders don't need to be sync'd all the time. Folders that store log files that can get huge and are updated every time something happens, if they sync'd once every hour or every day that would be enough. Or even never. Never would be often enough.

  3. It should be possible to put a cap on CPU utilization. If you're using more than say 30 percent of the CPU for file sync, something Dropbox does routinely (it goes up 90 plus percent) then just slow, the, fuck, down and relax a bit about sync. The job the server is doing is more important than keeping in sync with the other machines.

  4. However one thing must remain from Dropbox, it has to be easy to set up. None of the alternatives I've looked at are. They're all very very Unixy, and require fairly deep understanding of how the OS works. I don't have the time. The most appealing thing about Dropbox is that setup takes a couple of minutes. Sure it's a CPU hog after that, but if you can't get something going, it doesn't matter how efficient it is.

That's just a start. I'm sure other things will reveal themselves, if we ever get a new product in this area.

July 21, 2015 03:35 PM

Fog Creek – Interview with Saron Yitbarek

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 Saron Yitbarek, a developer currently leading the Tech Jobs Academy program at Microsoft. She’s also Founder of CodeNewbie, a supportive community of programmers and people learning to code, and co-host of the Ruby Rogues podcast.

Saron Yitbarek
Location: New York City, NY, US
Current Role: Founder of CodeNewbie

How did you get into software development?

I got a Windows computer at around 9 years old. However, I didn’t really know what to do with it, so I just spent a lot of time playing the Oregon Trail and convincing myself it was fun.

Later, I worked at a few tech startups but I felt frustrated at how little I was able to contribute as a non-technical person. So I quit my job and learned to code. I started out with Ruby, self-taught for three months, using different free and cheap online resources before then doing a three-month bootcamp at The Flatiron School.

I went on to found CodeNewbie, originally as a regular Twitter Chat. We used the hashtag #CodeNewbie and I would tweet out questions related to programming and learning to code. It grew from being a weekly chat to a weekly Podcast, managing a team of bloggers, a Slack community, and an online forum. So most of my days now involve emails organizing that. We’ve got a great team of volunteers who are passionate about supporting the community, and mostly just make sure that they are equipped with everything they need, that all the projects are up to speed and the community is taken care of.


Tell us a little about your current role

I’m currently working on increasing efficiency at CodeNewbie. There are lots of moving parts, and I’m re-examining all those pieces and figuring out how to do things better and faster. This is less of a software problem and more about people and communication. Understanding that software is a way to help but is not the focal point has been a crucial part of tackling this problem.

When are you at your happiest whilst coding?

I’m happiest when I know what I’m doing and I enter this zen mode. I love when I’m building a feature that I already know how to build, and I get to focus on getting things just right, and paying attention to the details of the code rather than just getting the feature to work.


What is your dev environment?

I use a Macbook Air with Mac OS X, Vim, and two monitors. A lot of the success of CodeNewbie is dependent on the communication tools we use, so Slack, my calendar, and Trello are the tools I value more than a specific gem or plugin.

I code sitting and listening to really loud music. I love coding in the dark with candles, and I generally keep 2-3 types of liquids at my desk: one cup of water, one cup of coffee, and one juice or soft drink. You never know which one you’ll need!

What are your favorite books or resources about development?

For books, POODR’s an obvious favorite. For articles, I don’t really have go-to places for this. People tweet CodeNewbie all the time with interesting articles and resources, so I get a lot of my reading material just from our own feed. And Medium often has some good stuff related to coding.


What technologies are you currently trying out?

I want an excuse to be better at JavaScript. I haven’t had much of a reason to dive deeper into JavaScript beyond the occasional jQuery interaction, but I’d love to find a reason to focus on that language.

When not coding, what do you like to do?

When I’m not coding, I love talking about coding. Helping people think through a problem, or discuss different tools, and learn about how different people approach the same problem is a favorite activity for sure. There’s so much to learn about coding that doesn’t necessarily require coding, and that’s what I’m excited about. Beyond that, helping people make that transition into a technical role. I spend a lot of time doing one-on-ones with people about my coding journey, giving advice on career-related resources, and other topics that aren’t directly about the code but are very relevant to getting a job.

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

You’re going to feel stupid most of the time, and that’s ok. Also, don’t go at it alone. Things are much easier when you do it with a community of people who are just as passionate about coding as you are.


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

Recent Interviews

Casey Muratori
Casey Muratori
Tomomi Imura
Cassidy Williams
Cassidy Williams
Rich Armstrong
Rich Armstrong

by Gareth Wilson at July 21, 2015 08:20 AM

July 20, 2015

Lambda the Ultimate

Tracking the Flow of Ideas through the Programming Languages Literature

Michael Greenberg, Kathleen Fisher, and David Walker, "Tracking the Flow of Ideas through the Programming Languages Literature", SNAPL 2015.

How have conferences like ICFP, OOPSLA, PLDI, and POPL evolved over the last 20 years? Did generalizing the Call for Papers for OOPSLA in 2007 or changing the name of the umbrella conference to SPLASH in 2010 have any effect on the kinds of papers published there? How do POPL and PLDI papers compare, topic-wise? Is there related work that I am missing? Have the ideas in O’Hearn’s classic paper on separation logic shifted the kinds of papers that appear in POPL? Does a proposed program committee cover the range of submissions expected for the conference? If we had better tools for analyzing the programming language literature, we might be able to answer these questions and others like them in a data-driven way. In this paper, we explore how topic modeling, a branch of machine learning, might help the programming language community better understand our literature.

The authors have produced some really interesting visualizations of how the topic content of various conferences has evolved over time (it's interesting to note that OOPSLA isn't really about OO software development any more, and that PLDI appears to have seen an increasing emphasis on verification and test generation).

Also of potential interest to LtU readers: there is a prototype tool at that is based on the work presented in this paper. It allows you to upload a paper PDF, and will return the 10 most closely related papers according to the POPL/PLDI topic model. It could be a handy research tool. But, if nothing else, it's a fun way to see what else is related to a paper you're interested in.

July 20, 2015 07:49 PM

Reinventing Business

Heading to Portland for OSCON; Slide Deck + Manifesto

If anyone is in the area and would like to try to meet up while I'm there, email mindviewinc at gmail.

Also please tell me if you know of interesting organizations in Portland. I've been late in looking but I thought I'd give it a shot anyway.

Here is the link to my slides (with speaker notes which comprise most of the narration for the presentation; I've never scripted a presentation before but this one needs to be tight): Creating Trust Organizations. The presentation will probable evolve a bit more before I give it (OSCON is recording it and will eventually post it).

And here is the first cut of the Trust Organization Manifesto, referred to in the presentation: This is intended to be a working document, used on a day-to-day basis for organization colleagues to remind themselves how the organization works and how they fit in it. Naturally, I expect it to evolve as we learn.

by (Bruce Eckel) at July 20, 2015 07:13 PM


Some very interesting thoughts in this article. Apparently there's a book just out on the subject, as well.

by (Bruce Eckel) at July 20, 2015 07:04 PM

Mark Bernstein

Storyspace 3

Storyspace 3

I’ve been burning the candle at both ends for the last few days, and we now have a rough working build of Storyspace 3 – a new version of Eastgate’s classic tool for writing hypertext narrative.

Storyspace 3 is entirely new, built on the same foundation as Tinderbox. Much remains to be done, but it’s reading afternoon and Lust and everything looks like it’s coming together.

There’s lots of good news. Typography is far better. The editor is much better. Old limitations -- no multiple selection, no resizable writing spaces – are gone for good. (Remember 32-character titles? Remember when Victory Garden took five minutes to load?)

I believe this is the fourth time I’ve written a Storyspace, and in recent days I’ve passed a number of old familiar landmarks, places where famous bugs used to hang out. The code is all new, but you can see in the new code the shadows of long-forgotten issues. Over here is Deena’s Default Bug, which changes the behavior when you press [Return] without selecting anything. That recalls another of Deena Larsen’s famous bugs, Deena’s Kelly Green Bug, where following a specific link in a specific document turned all the text a painfully bright green. That one arose because, back then, we had no memory protection at all: if you dereferenced a null pointer, you go whatever was located at 0x0000, and if you used that pointer as an object, you could accidentally reset the clock, change the operating system jump table, and turn everything green. Speaking of bugs, there was “Storyspace ate my links,” which took two years to track down, and the Exam Week Bug, a rare file corruption bug that cropped up annually and which almost exclusively afflicted people pulling all-nighters right before the end of the semester. That one involved editing while printing an unsaved document -- the sort of thing that people are most likely to do right before a deadline.

There will be more. I’ve got ideas for nice new things – greatly improved guard fields, and some nice new actions. There’s a ton of writing to do.

I really need to get some sleep sometime.

July 20, 2015 05:54 PM

The Siren and the Sword

The first in Tan’s series on Magic University – a hidden faculty at Harvard for the study of magic. Tan, a Readercon regular, writes erotica, and the central conceit of the series is David Mamet’s essay on his experience of college: “Sex Camp.” In Tan’s world, magicians generally have a very specific talent, a special proclivity that they discover in looking for their college major. Some are soothsayers, some healers, some conjurors. Kyle Wadsworth, though he doesn’t know it when he arrives for his Harvard interview, is very good at sex.

One thing that surprised me is the clean simplicity and charm of the sex scenes. Romance writers have developed a ghastly stylization of language to signal romantic intensity: one sure sign is the switch from talking about “his strength” to writing about “the strength of him.” Tan avoids this, and gets college twin-bed sex right while (for the most part) sparing my maiden blushes.

July 20, 2015 05:54 PM

July 19, 2015

Dave Winer

Fixin the Internets

In 2001, I took a static snapshot of the UserLand discussion group, and turned the dynamic site off. Ever since, the URLs that pointed into the site were broken. Shit happens.

Well, PagePark makes scripted redirection so easy, I decided to make the URLs work again. Here's an example.$18647

Now it works again.

Fixin the Internets one bits at a time.

PS: This is what the config.json file for the folder looks like. Nerd-brag!

July 19, 2015 12:12 PM

July 18, 2015

Giles Bowkett


enra are a dance troupe from Japan, and also, I guess, a live motion graphics performance team. They don't quite fit any existing categories, so they describe themselves as "an entertainment unit which presents the ultimate fusion of images and live performance." Their work is brilliant and unique. Although it's innovative work, it rests on a bedrock of serious study in classical traditions — both Eastern and Western — as well as experience in newer art forms like hip-hop dance and VJing.

by Giles Bowkett ( at July 18, 2015 02:01 PM

Dave Winer

A new EC2 for Poets

I'm thinking about doing a new version of EC2 for Poets. The old version is hopelessly out of date. I'm not even going to point to it, I don't want people to attempt to do what it says.

Linux, Node.js, River4

  1. As before it will be in the form of an EC2 machine image.

  2. Instead of Windows (the last version) it will be Linux. Probably Ubuntu. Why Linux? Well it's free, stable, and I now know how to set one up on EC2, so why not?

  3. Main app: River4. Most important. It's a river-of-news aggregator in a box. I want to make it easier for smart ambitious journalists of the future to get started in their new geek life. Having your own river is like having an aquarium. It gives you something to watch, it makes your server immediately useful, it makes The Internet into Your Internet.

  4. Supporting apps: PagePark, Noderunner, forever, and obviously Node.js.

Questions I have

  1. How will the user get files onto the server? I like using Dropbox. But it's a little tricky to set up. This is really something Amazon should have in its toolbox. An easy way to connect the filesystems of an EC2 instance and a user's desktop. I'm interested in knowing what other people think. Maybe I should just use plain old NFS? (Note: In my first pass, I spent an hour trying to get NFS properly set up and failed. Dropbox is a dream in comparison.)

  2. I'm going to have a script that runs at startup that launches all the things it needs to launch (see above). Any advice for this?

  3. I know people are going to say "Use Docker." Yes, of course, but first I want to do an AMI. I have experience doing these. And it's just one command in the AWS dashboard to turn an instance into an image. Docker will require a lot of decisions, and I am in the best position to make those decisions, because I'm most familiar with River4 and its needs. Key point -- they're the same decisions that need to be made to set up an AMI. So this is a necessary precursor to doing a container with all this stuff in it.

  4. I could make it so that the instance has a fixed password when it starts up, but would only do it if I could require the user to create a new password at launch or shortly after. The other choice is to use a "key-pair." It's another thing to set up, another delay in the user's gratification? On the other hand it could be too loose? Not sure.

How to help

Post any ideas you have in a comment below. I'm posting links to this doc on the server-snacks and river4 lists. But just use the comments here, rather than use the lists. Let them stay relatively quiet and used for support questions, as they come up. Thanks.

July 18, 2015 12:28 PM

July 17, 2015

Lambda the Ultimate

Punctuated equilibrium in the large scale evolution of programming languages

Sergi Valverde and Ricard Solé, "Punctuated equilibrium in the large scale evolution of programming languages", SFI working paper 2014-09-030

Here we study the large scale historical development of programming languages, which have deeply marked social and technological advances in the last half century. We analyse their historical connections using network theory and reconstructed phylogenetic networks. Using both data analysis and network modelling, it is shown that their evolution is highly uneven, marked by innovation events where new languages are created out of improved combinations of different structural components belonging to previous languages. These radiation events occur in a bursty pattern and are tied to novel technological and social niches. The method can be extrapolated to other systems and consistently captures the major classes of languages and the widespread horizontal design exchanges, revealing a punctuated evolutionary path.

The results developed here are perhaps not that surprising to people familiar with the history of programming languages. But it's interesting to see it all formalized and analyzed.

July 17, 2015 06:58 PM

Cakes, Custard, and Category Theory

Eugenia Cheng's new popular coscience book is out, in the U.K. under the title Cakes, Custard and Category Theory: Easy recipes for understanding complex maths, and in the U.S. under the title How to Bake Pi: An Edible Exploration of the Mathematics of Mathematics:

Most people imagine maths is something like a slow cooker: very useful, but pretty limited in what it can do. Maths, though, isn't just a tool for solving a specific problem - and it's definitely not something to be afraid of. Whether you're a maths glutton or have forgotten how long division works (or never really knew in the first place), the chances are you've missed what really makes maths exciting. Calling on a baker's dozen of entertaining, puzzling examples and mathematically illuminating culinary analogies - including chocolate brownies, iterated Battenberg cakes, sandwich sandwiches, Yorkshire puddings and Möbius bagels - brilliant young academic and mathematical crusader Eugenia Cheng is here to tell us why we should all love maths.

From simple numeracy to category theory ('the mathematics of mathematics'), Cheng takes us through the joys of the mathematical world. Packed with recipes, puzzles to surprise and delight even the innumerate, Cake, Custard & Category Theory will whet the appetite of maths whizzes and arithmophobes alike. (Not to mention aspiring cooks: did you know you can use that slow cooker to make clotted cream?) This is maths at its absolute tastiest.

Cheng, one of the Catsters, gives a guided tour of mathematical thinking and research activities, and through the core philosophy underlying category theory. This is the kind of book you can give to your grandma and grandpa so they can boast to their friends what her grandchildren are doing (and bake you a nice dessert when you come and visit :) ). A pleasant weekend reading.

July 17, 2015 04:47 PM

Dave Winer

What the Internet actually looks like

Spoiler alert: If you haven't seen The Matrix, don't read this.

You know how when Neo takes the red pill he sees what the world actually looks like vs what the program that is the Matrix makes it appear to be? Well, the Internet actually is a program, not that the real world isn't, but there's no speculation about the Internet. It is one huge collaboratively written piece of software, created by the human hive mind. I promise you, this is the reality of it.

None of us actually know what the world under the projection looks like. If you have a server at Amazon, what is its physical manifestation? If you were in a room with all the servers what would it look like? But then is that what the real Internet actually looks like in any real sense? Is the reality the projection or the means of creating the projection?

What got me thinking about this was a Facebook post by Jason Pontin with a picture of a cat riding a unicorn, and I had a feeling almost like deja vu, as if the projection was flickering in and out and I could see the reality behind the effect. "That's it!" I shrieked. "That's what the Internet actually looks like."

I thought you would like to know.

July 17, 2015 02:04 PM

Tim Ferriss


QnA with Peter Diamandis on the Tim Ferriss Show

Peter Diamandis (Photo credit: Sebastiaan ter Burg)

“I think of problems as goldmines.”
– Peter Diamandis

Dr. Peter Diamandis (@PeterDiamandis) has been named one of “The World’s 50 Greatest Leaders” by Fortune magazine. His accomplishments are far too many to list, but here are a few:

Peter is Chairman and CEO of the X PRIZE Foundation. He is also the Co-Founder (along with Craig Venter and Bob Hariri) of Human Longevity, Inc. (HLI); and the Co-Founder of Planetary Resources, a company designing spacecrafts to mine asteroids for precious materials (seriously). His latest book, Bold, has endorsements from Bill Clinton, Eric Schmidt, and Ray Kurzweil.

Peter knows how to think and play big, and he can show you how to do the same.

This episode features the top-10 most popular questions you wanted Peter to answer, including:

  • How do we disrupt the education system?
  • What does the future of healthcare look like?
  • When should you start building your billion-dollar business?
  • Will technology destroy all the jobs?


Want to learn more about exponential technologies? — Listen to my conversation with Peter Diamandis in which we discuss how to think like Elon Musk and Jeff Bezos (stream below or right-click here to download):

Want even more? — Listen to my conversation with Peter Diamandis and Tony Robbins where we discuss the magic of thinking big (stream below or right-click here to download):

This podcast is brought to you by LegalZoom. Matt Mullenweg (CEO of Automattic – now worth more than a billion dollars) first incorporated his company on LegalZoom. LegalZoom, which I’ve used myself, can help you with almost anything legal, including setting up a will, doing a proper trademark search, forming an LLC, starting a non-profit, or finding simple cease-and-desist letter templates. LegalZoom is not a law firm, but they do have a network of independent attorneys available in most states. They can provide contract review and help you run your business. Use the code “Tim” at checkout to get $10 off your next order. Take a gander at everything you can get for a fraction of what you’d expect —

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: What other past guests would you like to have back for a Q&A session? What questions would you want them to answer? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode | Google Loon | One WebSpaceX Satelite Dev Facility

Show Notes

  • How do we disrupt the education system? [4:25]
  • What do your first 10 minutes of the morning look like? Do you have a morning routine? [8:00}
  • What are some unrealistic goals you think entire nations could aspire to? [10:00]
  • What are the most exciting changes happening in healthcare, and what are the timetables for them to affect the general population? [13:20]
  • A problem well defined is a problem half solved. How do you go about defining a problem? Or how do you ask better questions? [18:40]
  • What is the most important thing for a 16-year-old to do over his summer vacation to keep moving forward and be prepared? [20:45]
  • Whenever the question of ending hunger in Africa arises, someone always says, “There’s no sufficient distribution system.” Why couldn’t we feed African countries with a mere billion dollars, food, and a small army of powerful delivery drones? [24:00]
  • Have you considered crowdfunding XPRIZE? [28:30]
  • Will technology increase unemployment and will robots replace many jobs as the media is reporting? [30:20]
  • Will Google, Facebook, or Elon Musk win the race to provide global internet? Will the FCC allow it? [33:35]
  • How will Human Longevity differentiate itself from other biotech companies? [35:35]
  • If you were 20 and had no experience whatsoever, what would you do to get into Singularity U and then create change in the world? [37:50]

People Mentioned

by Tim Ferriss at July 17, 2015 01:06 PM

Decyphering Glyph

Sometimes, You Just Want A Button

I like making computers do stuff. I find that getting a computer to do what I want it to produces a tremendously empowering feeling. I think Python is a great language to use to tell computers what to do.

In my experience, the most empowering feeling (albeit often, admittedly, not the most useful or practical one) is making one’s own computer do something cool. But due to various historical accidents, the practical bent of the Python community mainly means that we get “server-side” or “cloud” computers to do things: in other words, “other people’s computers”.

If you, like me, are a metric standard tech industry hipster, “your own computer” means “Mac OS X”. Many of us have written little command-line tools to automate things, and thank goodness OS X is enough of a UNIX that that works nicely - and it’s often good enough. But sometimes, you just want to press a button and have a thing happen; sometimes a character grid isn’t an expressive enough output device. Sometimes you want to be able to take that same logical core, or some useful open source code, that you would use in the cloud, and instead, put it into an app. Sometimes you want to be able to learn about writing desktop apps while leveraging your existing portfolio of skills. I have done some of this, and intend to do more of it at work, and so I’d like to share with you some things I’ve learned about how to do it.

Back when I was a Linux user, this was a fairly simple proposition. All the world was GTK+ back then, in the blissful interlude between the ancient inconsistent mess when everything was Xt or Motif or Tk or Swing or XForms, and the modern inconsistent mess where everything is Qt or WxWidgets or Swing or some WebKit container with its own pile of gross stylesheet fruit salad.

If you had a little script that you wanted to put a GUI on back then, the process for getting started was apt-get install python-gtk and then just to do something like

import gtk
w = gtk.Window("My Window")
b = gtk.Button("My Button")

and you were pretty much off to the races. If you wanted to, you could load a UI file that you made with glade, if you had some complicated fancy stuff to display, but that was optional and reasonably straightforward to use. I used to do that all the time, for various personal computing tasks. Of course, if I did that today, I’m sure they’d all laugh at me.

So today I’d like to show you how to do the same sort of thing with OS X.

To be clear, this is not a tutorial in Objective C, or a deep dive into Mac application programming. I’m going to make some assumptions about your skills: you’re a relatively experienced Python programmer, you’ve done some introductory Xcode material like the Temperature Converter tutorial, and you either already know or don’t mind figuring out the PyObjC bridged method naming conventions on your own.

If you are starting from scratch, and you don’t have any code yet, and you want to work in Objective C or Swift, the modern Mac development experience is even smoother than what I just described. You don’t need to install any “packages”, just Xcode, and you have a running app before you’ve written a single line of code, because it will give you a working-by-default template.

The problem is, if you’re a Python developer just trying to make a little utility for your own use, once you’ve got this lovely Objective C or Swift application ready for you to populate with interesting stuff, it’s a really confusing challenge to get your Python code in there. You can drag the Python.framework from homebrew into Xcode and then start trying to call some C functions like PyRun_SimpleString to get your program bootstrapped, but then you start running into tons of weird build issues. How do you copy your scripts to the app bundle? How do you invoke distutils? What about shared libraries that you’ve linked against? It’s hard enough to try to jam anything like setuptools or pip into the Xcode build system that you might as well give up and rewrite the logic; it’ll be less effort.

If you’re a Python developer you probably expect tools like virtualenv and pip to “just work”. You expect to be able to put a file into a folder and then import it without necessarily writing a whole build toolchain first. And if you haven’t worked with it a lot, you probably find Xcode’s UI bewildering. Not to mention the fact that you probably already have a text editor that you like already, and don’t want to spend a bunch of time coming up to speed on a new one just to display a button.

Luckily, of course, there’s pyobjc, which lets you write your whole application in Python, skipping the whole Xcode / Objective C / Swift side-show and just add a little UI logic. The problem I’m trying to address here is that “just adding a little UI logic” (rather than designing your program from the ground up as an App) in the Cocoa / ObjC universe is famously and maddeningly obscure. gtk.Window() is a reasonably straightforward first function to call; [[NSWindow alloc] initWithContentRect:styleMask:backing:defer:] not so much.

This is not even to mention the fact that all the documentation, all the tutorials, and all the community resources pretty much expect you to be working with .xibs or storyboards inside the Interface Builder portion of Xcode, and you’re really on your own if you are trying to do everything outside of that. py2app can help with some of the build issues, but it has its own problems you probably don’t want to be tackling if you’re just getting started; it’ll sap all your energy for actually coding.

I should mention before we finally dive in here that if you really just want to display a button, a text area, maybe a few fields, Toga is probably a better option for you than the route that I'm describing in this post; it's certainly a lot less work. What I am assuming here is that you want to be able to present a button at first, but gradually go on to mess around with arbitrary other OS X native APIs to experiment with the things you can do with a desktop that you can't do in the cloud, like displaying local notifications, tracking your location, recording the screen, controlling other applications, and so on.

So, what is an enterprising developer - who is still lazy enough for my rhetorical purposes here - to do? Surprisingly enough, I have a suggestion!

First, you want to make a new, empty Xcode project. So fire up Xcode, go to File, New, Project, and then:



Go ahead and give it a Git repository:


Now that you’ve got a shiny new blank project, you’ll need to create two resources in it: one, a user interface document, and the other, a Python file. So select File, New, and then choose OS X, User Interface, Empty:


I’m going to call this “MyUI”, but you can call it whatever:


As you can see, this creates a MyUI.xib file in your project, with nothing in it.


We want to put a window and a button into it, so, let’s start with that. Search for “window” in the bottom right, and drag the “Window” item onto the canvas in the middle:



Now we’ve got a UI file which contains a window. How can we display it? Normally, Xcode sets all this up for you, creating an application bundle, a build step to compile the .xib into a .nib, to copy it into the appropriate location, and code to load it for you. But, as we’ve discussed above, we’re too lazy for all that. Instead, we’re going to create a Python script that compiles the .xib automatically and then loads it.

You can do this with your favorite text editor. The relevant program looks like this:

import os
os.system("ibtool MyUI.xib --compile MyUI.nib")

from Foundation import NSData
from AppKit import NSNib

nib_data = NSData.dataWithContentsOfFile_(u"MyUI.nib")
(NSNib.alloc().initWithNibData_bundle_(nib_data, None)
 .instantiateWithOwner_topLevelObjects_(None, None))

from PyObjCTools.AppHelper import runEventLoop

Breaking this down one step at a time, what it’s doing is:

import os
os.system("ibtool MyUI.xib --compile MyUI.nib")

We run Interface Builder Tool, or ibtool, to convert the xib, which is a version-control friendly, XML document that Interface Builder can load, into a nib, which is a binary blob that AppKit can load at runtime. We don’t want to add a manual build step, so for now we can just have this script do its own building as soon as it runs.

Next, we need to load the data we just compiled:

nib_data = NSData.dataWithContentsOfFile_(u"MyUI.nib")

This needs to be loaded into an NSData because that’s how AppKit itself wants it prepared.

Finally, it’s time to load up that window we just drew:

(NSNib.alloc().initWithNibData_bundle_(nib_data, None)
 .instantiateWithOwner_topLevelObjects_(None, None))

This loads an NSNib (the “ib” in its name also refers to “Interface Builder”) with the init... method, and then creates all the objects inside it - in this case, just our Window object - with the instantiate... method. (We don’t care about the bundle to use, or the owner of the file, or the top level objects in the file yet, so we are just leaving those all as None intentionally.)

Finally, runEventLoop() just runs the event loop, allowing things to be displayed.

Now, in a terminal, you can run this program by creating a virtualenv, and doing pip install pyobjc-framework-Cocoa, and then python You should see your window pop up - although it will not take focus. Congratulations, you’ve made a window pop up!

One minor annoyance: you’re probably used to interrupting programs with ^C on the command line. In this case, the PyObjC helpers catch that signal, so instead you will need to use ^\ to hard-kill it until we can hook up some kind of “quit” functionality. This may cause crash dialogs to pop up if you don’t use virtualenv; you can just ignore them.

Of course, now that we’ve got a window, we probably want to do something with it, and this is where things get tricky. First, let’s just create a button; drag the button onto your window, and save the .xib:


And now, the moment of truth: how do we make clicking that button do anything? If you’ve ever done any Xcode tutorials or written ObjC code, you know that this is where things get tricky: you need to control-drag an action to a selector. It figures out which selectors are available by magically knowing things about your code, and you can’t just click on a thing in the interface-creation component and say “trust me, this method exists”. Luckily, although the level of documentation for it these days makes it on par with an easter egg, Xcode has support for doing this with Python classes just as it does with Objective C or Swift classes.1

First though, we’ll need to tell Xcode our Python file exists. Go to the “File” menu, and “Add files to...”, and then select your Python file:


Here’s the best part: you don’t need to use Xcode’s editor at all; Xcode will watch that file for changes. So keep using your favorite text editor and change to look like this:

import os
os.system("ibtool MyUI.xib --compile MyUI.nib")

from objc import IBAction
from Foundation import NSObject, NSData
from AppKit import NSNib

class Clicker(NSObject):
    def clickMe_(self, sender):

the_clicker = Clicker.alloc().init()

nib_data = NSData.dataWithContentsOfFile_(u"MyUI.nib")
(NSNib.alloc().initWithNibData_bundle_(nib_data, None)
 .instantiateWithOwner_topLevelObjects_(the_clicker, None))

from PyObjCTools.AppHelper import runEventLoop

In other words, add a Clicker subclass of NSObject, give it a clickMe_ method decorated by objc.IBAction, taking one argument, and then make it do something you can see, like print something. Then, make a global instance of it, and pass it as the owner parameter to NSNib.

At this point it would probably be good to explain a little about what the “file’s owner” is and how loading nibs works.

When you instantiate a Nib in AppKit, you are creating a collection of graphical objects, connected to an object in your program that you construct. In other words, if you had a program that displayed a Person, you’d have a Person.nib and a Person class, and each time you wanted to show a Person you’d instantiate the Nib again with the new Person as the owner of that Nib. In the interface builder, this is represented by the “file’s owner” placeholder.

I am explaining this because if you’re interested in reading this article, you’ve probably been interested enough in Mac programming to do something like the aforementioned Temperature Converter tutorial, but such tutorials almost universally just use the single default “main” nib that gets loaded when the application launches, so although they show you how to do many different things with UI elements, it’s not clear how the elements got there. This, here, is how you make new UI elements get there in the first place.

Back to our clicker example: now that we have a class with a method, we need to tell Xcode that the clicking the button should call that method. So what we’re going to tell Xcode is that we expect this Nib to be owned by an instance of Clicker. To do this, go to MyUI.xib and select the “File’s Owner” (the thing that looks like a transparent cube), to to the “Identity Inspector” (the tiny icon that looks like a driver’s license on the right) and type “Clicker” in the “Class” field at the top.

If you’ve properly added to your project and declared that class (as an NSObject), it should automatically complete as you start typing the name:


Now you need to connect your clickMe action to the button you already created. If you’ve properly declared your method as an IBAction, you should see it in the list of “received actions” in the “Connections Inspector” of the File’s Owner (the tiny icon that looks like a right-pointing arrow in a circle):


Drag from the circle to the right of the clickMe: method there to the button you’ve created, and you should see the connection get formed:


If you save your xib at this point and re-run your python file, you should be able to click on the button and see something happen.

Finally, we want to be able to not just get inputs from the GUI, but also produce outputs. To do this, we want to populate an outlet on our Clicker class with a pointer to an object in the Nib. We can do this by declaring a variable as an objc.IBOutlet(); simply add a from objc import IBOutlet, and change Clicker to read:

class Clicker(NSObject):
    label = IBOutlet()
    def clickMe_(self, sender):
        self.label.setStringValue_(u"\N{CHECK MARK}")

In case you’re wondering where setStringValue_ comes from, it’s a method on NSTextField, since labels are NSTextFields.

Then we can place a label into our xib; and we can see it is in fact an NSTextField in the Identity Inspector:


I’ve pre-filled mine out with a unicode “BALLOT X” character, for style points.

Then, we just need to make sure that the label attribute of Clicker actually points at this value; once again, select the File’s Owner, the Connections Inspector, and (if you declared your IBOutlet correctly), you should see a new “label” outlet. Drag the little circle to the right of that outlet, to the newly-created label object, and you should see the linkage in the same way the action was linked:


And there you have it! Now you have an application that can open a window, take input, and display output.

This is, as should be clear by now, not really the preferred way of making an application for OS X. There’s no app bundle, so there’s nothing to code-sign. You’ll get weird behavior in certain cases; for example, as you’ve probably already noticed, the window doesn’t come to the front when you launch the app like you might expect it to. But, if you’re a Python programmer, this should provide you with a quick scratch pad where you can test ideas, learn about how interface builder works, and glue a UI to existing Python code quickly before wrestling with complex integration and distribution issues.

Speaking of interfacing with existing Python code, of course you wouldn’t come to this blog and expect to get technical content without just a little bit of Twisted in it. So here’s how you hook up Twisted to an OS X GUI: instead of runEventLoop, you need to run your application like this:

# Before importing anything else...
from PyObjCTools.AppHelper import runEventLoop
from twisted.internet.cfreactor import install
reactor = install(runner=runEventLoop)

# ... then later, when you want to run it ...

In your virtualenv, you’ll want to pip install twisted[osx_platform] to get all the goodies for OS X, including the GUI integration. Since all Twisted callbacks run on the main UI thread, you don’t need to know anything special to do stuff; you can call methods on whatever UI objects you have handy to make changes to them.

Finally, although I definitely don’t have room in this post to talk about all the edge cases here, I will address two particularly annoying ones; often if you’re writing a little app like this, you really want it to take keyboard focus, and by default this window will come up in the background. To fix that, you can do this right before starting the main loop:

from AppKit import NSApplication, NSApplicationActivationPolicyAccessory
app = NSApplication.sharedApplication()

And also, closing the window won’t quit the application, which might be pretty annoying if you want to get back to using your terminal, so a quick fix for that is:

class QuitWhenClosed(NSObject):
    def applicationShouldTerminateAfterLastWindowClosed_(self, app):
        return True

(the “retain” is necessary because ObjC is not a garbage collected language, and app.delegate is a weak reference, so the QuitWhenClosed would be immediately freed (and there would be a later crash) if you didn’t hold it in a global variable or call retain() on it.)

You might have other problems with this technique, and this post definitely can’t fit solutions to all of them, but now that you can load a nib, create classes that interface builder can understand, and run a Twisted main loop, you should be able to use the instructions in other tutorials and resources relatively straightforwardly.

Happy hacking!

(Thanks to everyone who helped with this post. Of course my errors are entirely my own, but thanks especially to Ronald Oussoren for his tireless work on pyObjC and py2app over the years, as well as to Mark Eichin and Amber Brown for some proofreading and feedback before this was posted.)

  1. If it didn’t, we could get Xcode to produce the appropriate XML by simply writing appropriately-shaped classes in Objective C - or possibly Swift - and then never bothering to build them, since all Xcode cares about in this part of the process is that it can see the source. My understanding is that’s how it worked when PyObjC was first developed, and it might always become necessary again if Xcode ever stops supporting Python. I have no idea if that’s likely, but unfortunately it seems clear Python isn’t a very popular language for mac apps. 

by Glyph at July 17, 2015 07:52 AM

July 16, 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.

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 July 16, 2015 11:16 PM

Dave Winer

There are two kinds of software

There really are only two kinds of software.

  1. Software you can use while not paying attention, multitasking, in a haze.

  2. Software that you have to pay attention to. Requires you to learn how to use it, setup. If you use it without paying attention you will lose work, or money, or give up secrets.

Examples of the first kind of software -- chat programs, Instagram, Facebook, news sites. Amazon when you're browsing around..

The second kind: running a server, programming, bank, much email, Amazon when you're making a purchase. Anything that involves giving up a password that controls money is something you should be paying attention to while using it. Programming is probably the most intense software activity in the second category.

I mention this because a lot of people seem to think all software is in category 1.

Totally not true.

July 16, 2015 08:21 PM

Fog Creek

Killing Off Wasabi – Part 2

Last time, I talked about our motivations for creating Wasabi, maintaining it for almost a decade, and finally killing it off. Today I would like to talk about the new piece of software that enabled the final phase, Roslyn. Roslyn is Microsoft’s open source compiler platform for .NET. Roslyn includes a full implementation of both the C# and the Visual Basic.NET compiler.

I am also releasing Wasabi’s new code generator as open source software. I believe this is the first real-world transpiler targeting C# with Roslyn to be open sourced. It is my hope that this article and associated source code will serve as a rough guidepost for anyone who wants to write a .NET code generator using Roslyn.

The Previous Generator

When Wasabi 3.0 was first created, Fog Creek specified .NET as the new backend target. There are two common ways to generate a .NET assembly.

The first approach to .NET is to create a backend that generates Common Intermediate Language (Formerly known as the MSIL), the bytecode format for the .NET virtual machine. The advantage of creating a CIL backend is that compilation only has one step: from Wasabi directly into the final DLL shipped to customers. There are a few disadvantages, however. First, CIL is a binary format, so it requires special tools to be able to read it. Second, we wanted to be assured that the output of Wasabi was valid .NET, which would give us hope that the output was not corrupted in some weird way. Finally, there is the simple conceptual difference between Wasabi, the high-level language, and CIL, the virtual assembly language.

The second option was to write a transpiler. We preferred this option over generating raw CIL because we already had experience writing transpilers. Wasabi (née Thistle) started as a transpiler to PHP, then added VBScript and JavaScript transpilers with Wasabi 2.0. One downside is that a transpiler to a compiled language adds another full compilation phase on top of the resources used to compile your own language. But we would benefit from the additional verification provided by those phases: FogBugz would have to survive type checking in two different languages, and we trusted csc.exe to generate correct bytecode for us. Also, we were able to emit #line pragmas to be able to step through Wasabi code using the Visual Studio debugger. The transpiler also made XML documentation comments very easy to generate. We decided on C# as our target language, because Wasabi is written in C#, and semicolons are cool.

Once we had decided on transpilation, the next step was choosing a generation method. Once again, there were two options available to us. The first was to hand-roll the code generator, passing bare strings to TextWriter.Write. Our previous three backends used this method, so we were already quite comfortable with it. The second option, which we ended up using, was to use a code generation library like Microsoft CodeDOM, which represents common source code elements as an object graph, similar to how the browser DOM represents HTML elements. We anticipated that CodeDOM would provide some level of static typing to our code generation process, as our previous generators always included a period of fixing obvious typographical errors (a missing semicolon here, an extra open-bracket there). CodeDOM also exposed a handy method for compiling directly to C#. However, we were slightly disappointed when we discovered that CodeDOM simply writes to disk and shells out to csc.exe. Another irritation was that word “common” I included in my description of CodeDOM: it is a lowest-common-denominator tool. Basically, the output was intended for a compiler, not human consumption. I will show some examples later. But we didn’t need humans to be able to modify the generated C# code – it was just important that the C# was there, as a reassuring option if something went wrong.


In early December 2014, I visited NYC HQ and chatted with John Daniels about some of the friction Wasabi was causing. Everyone who worked on FogBugz had to know two server languages – Wasabi and C#. New development had shifted into C#, but minor modifications and bug fixing had to be done in the older Wasabi portion of FogBugz. Also, as mentioned earlier, Wasabi had two separate compilation steps, which meant changes took over twice as long as we believed they should.

John told me he had experimented with writing a cleanup tool using Microsoft’s new Roslyn library that removed some of the weird cruft from the CodeDOM output. We mused over the possibility of cutting out CodeDOM entirely and using Roslyn for code generation. I was encouraged by him and several FogBugz developers to follow that thought.

On Monday, February 9, I copied the CodeDOM generator file to RoslynGenerator.cs, removed CodeDOM’s using statements and started replacing each method with the Roslyn equivalent. After a few days of struggling, the generator compiled but crashed on execution. Debugging and bug fixing continued for a few more days. Once I had any output at all, my next goal was to generate identical source code from the two generators, so I added a command-line flag that let me switch generators and initialized a Mercurial repository to check the diff between the two.

There were two major roadblocks to identical generation. First, there was an impedance mismatch between the two generation libraries’ philosophy. CodeDOM’s representation is a mutable graph, so I would often pass node references as parameters and mutate them in other methods. Roslyn represents source code as an immutable graph of nodes, so the correct way to generate a given node is from the bottom up. However, because I was trying to modify a copy of the CodeDOM generator into shape, I had to change the calling convention of some of the methods which depended on mutation. There are many convenience methods in Roslyn to allow you to create a mutated copy of your node, but it wasn’t always clear where the result should be stored. The symptom of storing it in the wrong place (or forgetting entirely) was that some output was missing. Usually, I succeeded at rewriting the code to be generated in an immutable-friendly order, but I had to create some Lists and instance fields where the mutability was difficult to avoid.

The second roadblock was comment generation. Internally, Wasabi represents comments as statements (they inherit from CStatement), as does CodeDOM (which uses CodeComments wrapped in CodeCommentStatements). However, Roslyn is designed to be able to represent any valid C# program in a lossless way, so it uses a much more flexible idiom, known as SyntaxTrivia. Both whitespace and comments can be represented this way, but trivia is a property of a node, not a node itself: nodes have collections of leading trivia and trailing trivia. As an example, the expression 1 + 2 could be represented with either of the following pseudocode trees:

    operator: +
    lhs: (constant-expression value: 1)
    rhs: (constant-expression value: 2)
    leading-trivia: (trivia-list ' ')
    trailing-trivia: (trivia-list ' ')


    operator: +
    lhs (constant-expression value: 1 trailing-trivia: (trivia-list ' '))
    rhs (constant-expression value: 2 leading-trivia: (trivia-list ' '))

Either way, the result is a single space between the 1 and + and another between the + and 2. Comments are similarly stored as properties on any node, allowing inline comments (/* … */) and end-of-line comments, or comments on lines of their own.

I really enjoy the idea of syntax trivia. I wish I could go back in time and add a similar feature to Wasabi. However, instead of trying to replicate the exact weirdness of CodeDOM comment generation, I switched comment generation off in both generators for the purposes of correctness checking, then added all comments to the Roslyn generator later.

One complaint I have about Roslyn is with the SyntaxKind type – for performance reasons, it is implemented as a gigantic enum. However, this means it is not type safe – you can pass any SyntaxKind to any method that takes one, even where doing so will cause an inevitable crash. I ended up having to fix dozens of cases where I passed the wrong SyntaxKind (for example, passing a QuestionToken where I meant to pass a ConditionalExpression), and Roslyn would throw an exception. Having a type-safe version of this API available would have been appreciated, even if it was a plain wrapper around an integral enum SyntaxKind under the covers.

Idioms and Readability

As I discussed before, the whole reason we were switching to Roslyn from CodeDOM is that the quality of the generated code, while it preserved meaning, was not good for human consumption. The first week of March, when the generated code finally matched the output of CodeDOM, was when Roslyn really began to show its value. I took a week off in the middle of the code generator rewrite, so it took about 12 developer-days to reimplement the CodeDOM generator in Roslyn.

Once the reimplementation was done, I pressed hard on the abilities of Roslyn to make the output of Wasabi much more idiomatic:

  • Boolean negation uses the !x operator instead of comparing x == false
  • Similarly, not-equals changed from (a == b) == false to a != b
  • Negative numbers are represented as -n instead of (0 – n)
  • While loops now use a while(cond) loop, instead of using an initializer-less for( ; cond ; )
  • Likewise with do { } while(cond); loops
  • Classes with no base class no longer explicitly inherit from object
  • else-if clauses no longer have to be generated as else { if }, reducing the dreaded Arrow Anti Pattern
  • switch statements also no longer have to be generated as a nested chain of if, else-if, else-if, else-if, else…
  • Lambdas use C# lambdas instead of Wasabi-generated closure classes. (I had to make sure nobody was depending on the weirdness of Wasabi lambdas. Luckily, nobody was.)
  • Removed unnecessary parentheses, e.g. return (x – 1); and if ((s == z)) { }
  • Correctly translate Wasabi to C# precedence rules. (CodeDOM wrapped every single binary expression in parentheses.)
  • Replace Wasabi runtime functions for Xor, Imp, and Eqv with inline equivalents in C#
  • Rewrite almost all gotos as the equivalent break or return
  • Don’t generate empty files, namespaces, or partial class Global : GlobalBase { }
  • Improve string literal generation
  • By request, developed a heuristic for “obnoxious parameters” so that functions passed many literal or null parameters have those parameters named

I also fixed several things that could have been fixed in the previous generator, but were ignored because the readability of the output had not been a concern:

  • References to constants are generated instead of outputting the literal value of the constant
  • Hexadecimal numbers are output as hexadecimal
  • for loops with constant bounds no longer generate local variables.
  • Wasabi arrays start at index 1. Do this calculation at compile time. For example, write rg(1) as rg[0] Instead of rg[1 – 1].
  • Initialize most fields inline instead of in the constructor
  • Reduced the number of unnecessary cast expressions (the majority of the casts generated were being added by a bug in the type checker!)
  • Rename the Wasabi thread-static singleton from __Global.__Current to Global.Current
  • Don’t assign null to optional parameters — that’s guaranteed to be the default value.
  • The default value for ints is 0, not new int(). Similarly with longs (0L) and Booleans (false).
  • Automatically rewrite VBScript-style returns (assigning to the name of the function) as immediate returns
  • Removed some ancient profiling code generation
  • Got rid of the very few union types

Thankfully, those bugs were even easier to fix in the new Roslyn generator than they were in the old CodeDOM generator.

On March 27, the FogBugz team and I decided that I was hitting the point of diminishing returns and closed the project. I demonstrated my results to the founders on the 30th, and they asked me to get the developer lead and two most prolific FogBugz contributors to work exclusively in the generated C# branch for a while to see how it felt before merging. Once the developers added their approval, I merged my changes into FogBugz integration in the late evening of April 21, and FogBugz Version 8.13.104 went out to 100% of FogBugz On Demand customers on May 21.

I’m happy to announce that Wasabi’s Roslyn generator is now available on GitHub. It’s certainly not a beautiful piece of code: it only needs to run one time, on one piece of code (FogBugz) that I can modify as needed. But I think it could be useful for anyone who is writing a C# code generator using Roslyn.

by Jacob Krall at July 16, 2015 11:36 AM

Ian Bicking

A Product Journal: Objects

I’m blogging about the development of a new product in Mozilla, look here for my other posts in this series

I’ve been reading the Early History Of Smalltalk, notes by Alan Kay, and this small note jumped out at me:

Another late-binding scheme that is already necessary is to get away from direct protocol matching when a new object shows up in a system of objects. In other words, if someone sends you an object from halfway around the world it will be unusual if it conforms to your local protocols. At some point it will be easier to have it carry even more information about itself–enough so its specifications can be “understood” and its configuration into your mix done by the more subtle matching of inference.


This higher computational finesse will be needed as the next paradigm shift–that of pervasive networking–takes place over the next five years. Objects will gradually become active agents and will travel the networks in search of useful information and tools for their managers. Objects brought back into a computational environment from halfway around the world will not be able to configure themselves by direct protocol matching as do objects today. Instead, the objects will carry much more information about themselves in a form that permits inferential docking. Some of the ongoing work in specification can be turned to this task.

An object, sent over the network; it does not exactly have a common protocol, class, or API, but enough information so it can be understood, matched up with some function or purpose according to inference. We could also assume given this is from Alan Kay that the vision here is that code, not just data, is part of the object and information (though to consider code to be information: that is quite a challenge to our modern sensibilities).

When I read this, it struck me that we have these objects all around us. The web page: remote, transferable, transformable, embodying functionality and data, with rich information suitable for inference.

The web page has a kind of minimal protocol, though nothing is entirely forbidden in how it is interpreted. For instance the page is named in its <title>. But probably it has a better name in its <meta name=og:title>, should one exist; nothing is truly formal except by how it will be conventionally interpreted. The protocol is flexible. It has internal but opaque state. The object can initiate activity in a few ways, primarily XMLHttpRequest and a small number of APIs available to it. The page receives copious input in the form of events.

It’s an impoverished object in so many ways. And it’s hardly what you would call universal, it’s always representing visual pages for the browser. When programming if the browser isn’t our intended audience then we choose something like JSON or REST: one dead data, one a possessed and untransferable object (I would assert that in REST the object is the server and not the document).

And yet the web page is an incredible object! Web pages are sophisticated and well cared for. Our understanding of them is meticulously documented, including the ambiguity. The web stack is something that has not just been “defined” or “fixed”, but also discovered. Web pages contain gateways into a tremendous number of systems, defined around a surprisingly small set of operations.

But we don’t look at them as objects, we don’t try to deduce or infer much about them. They don’t look like the objects we would define were we to design such a system. But if we shift our gaze from design to discovery then the wealth becomes apparent: these might not be the objects we would ask for, but given the breadth and comprehensiveness of web pages they are the objects we should use. And they actually work, they do a ton of useful things.

Stepping back from the specific product of PageShot, this is the broad direction that excites me: to understand and make use of these objects that are all around us. (Objects to which Mozilla, with its user agent, has unique access.) But we need to look more broadly at what we can do with these objects. PageShot tries one fairly small thing: capture the visual state at one moment, maybe do something with that state. If we just had a handful of these operations, exposed properly (not trapped in the depths of monolithic browsers) I think there are some incredible things to be done. Maybe even a way to bridge from the ad hoc to something more formal; as crazy as the web page execution model seems, it has some nice features, and is the widest deployed sandboxing execution model we have.

In this sense Web Assembly and ASM.js are interesting as effectively competitors to JavaScript, but not competitors to the web platform or web-page-as-object. That makes them different from Google Native Client. Yes, Web Assembly is essentially another language for the web platform. But Native Client uses Pepper which is not the web platform, it’s a parallel platform that attempts to mimic the web platform. ASM.js and Web Assembler are a demonstrations that we can change significant parts of the code execution while retaining the outward API of these pages.

I find this all exciting, but I am somewhat half-hearted in my excitement. Reading The Early History Of Smalltalk there’s a certain spirit to their work that I love and often despair at recreating. There is a visionary aspect, but I think more importantly they took a holistic approach. There’s something exciting about opening your mind to far off concepts (a vision) but then try to tie them together creatively, trying different approaches in an effort to maintain simplicity, avoid compromises. The computing systems they worked on were like Microworlds of their own creation, they could redefine problems, throw away state, reinvent any interface they chose. And maybe that is also available to us: only when we hopelessly despair about problems we cannot fix are we trapped by our legacy. That is, if you accept the web as it is there is a freedom, an agency in that, because you’ve put aside the things you can’t change.

I suspect Alan Kay would take a dim view of this whole notion. He is not a fan of the web. Another observation from that history:

Four techniques used together—persistent state, polymorphism, instantiation, and methods-as-goals for the object—account for much of the power. None of these require an “object-oriented language” to be employed—ALGOL 68 can almost be turned to this style—an OOPL merely focuses the designer’s mind in a particular fruitful direction. However, doing encapsulation right is a commitment not just to abstraction of state, but to eliminate state oriented metaphors from programming.

I can’t even begin to phrase web pages in these terms. State is a mess: much hosted on remote servers, some in the URL, some in the process of the running page, some in cookies or localStorage, all of it constantly being copied and thrown away. Is the URL the class and the HTML served over HTTP the instantiation? These are just painful contortions to find analogs. Methods-as-goals is the one that seems most interesting and challenging, because I cannot quite identify the goals behind this whole endeavour. Automation? Insight? Detection? Creation? Is it different from what Google is doing with its spiders? Is there something distinct about interpretation in the context of a user agent? And when the objects are not willing – I am proposing we bend pages to our will, wrestling control from the expectations of site owners – can you do any delegation? Is there an object waiting to be smithed that encapsulates the page?

More tensions than resolutions. Wish I had time to bathe in those tensions a bit longer.

by Ian Bicking at July 16, 2015 05:00 AM

July 15, 2015

Dave Winer

Without Bullshit, the most interesting blog

If he's not careful Josh Bernoff is going to win BOTY.

This is a great blog. And a great memorable title. And it lives up to its rep.

A meta-comment

This is the kind of stuff I did in the early days of DaveNet. I had a lot of accumulated knowledge about tech, the kind of stuff that was usually only said in the lobbies at tech conferences. I just started writing about it publicly. People ate it up.

July 15, 2015 02:19 PM

Tim Ferriss


Laird Hamilton on the Tim Ferriss Show2

“There are no new ideas, just new applications of old ideas.”
– Laird Hamilton

Laird Hamilton (@LairdLife) is widely considered the greatest big wave surfer of all-time. He is credited with the creation of tow-in surfing, as well as the rebirth of stand-up paddle boarding. To get amped for my below interview with him, check out a few minutes of this insanity:

Hamilton has starred in multiple surfing films and was the centerpiece of Riding Giants, a documentary about big wave surfing. Laird was also Tim’s teacher in the surfing episode of The Tim Ferriss Experimentwhich took place in Hawaii.

Laird is known for using his sports fame to raise money for charities including Race Across America, Pipeline for a Cure for Cystic Fibrosis, and Rain Catcher, among others.

Gabrielle Reece (@GabbyReece) has been named one of the “20 Most Influential Women In Sports” and is best known for her success in volleyball.

Reece led the Women’s Beach Volleyball League in kills for four consecutive seasons.

Elle magazine once called Reece “one of the five most beautiful women in the world,” and Rolling Stone placed her on their “Wonder Women” list.  She parlayed that into a successful modeling career and then starred as a trainer on The Biggest Loser. Her crossover success led to her becoming the first female athlete to ever design a shoe for Nike.

Brian MacKenzie (@iamunscared) is the founder of CrossFit Endurance and the author of the New York Times best-selling book Unbreakable Runner.

MacKenzie has created controversy by suggesting a counterintuitively minimalist approach to distance running. He challenges not only high-mileage runs, but also high-carb diets, and he incorporates intense strength training to conquer everything from 5K runs to ultra-marathons. He was also prominently featured in The 4-Hour Bodywhere he revealed how to prepare for a marathon in record time.  

MacKenzie has been featured in Runner’s World, Men’s Journal, ESPN, Outside, and The Economist.


Want to hear another podcast discussing underwater training from a friend of Laird Hamilton? — Listen to my conversation with Rick Rubin. In this episode, we discuss cultivating world-class artists (Jay Z, Johnny Cash, etc.), losing 100+ pounds, and breaking down the complex (stream below or right-click here to download):

This episode is sponsored 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 The 4-Hour Body and did not get paid to do so. Get 50% off your order at Athletic

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: Of the topics covered in this episode, which would you like to hear more about in the future? And what questions do you have for Laird and Co.? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode

Athlete Cell | Instagram | Twitter

  • Learn more about Gabby Reece: | High X | Twitter | Instagram

  • Learn more about Laird Hamilton: | | |

Show Notes

  • Challenging yourself with underwater weightlifting and elevation masks [6:39]
  • Laird Hamilton’s potent yellow energy elixir [16:39]
  • Gabby’s experience with fear as a volleyball champion and the host of The Extremists [18:24]
  • When MacKenzie thinks of successful, who comes to mind, and what are the characteristics that make people great? [23:24]
  • On a healthy integrated life, and how Hamilton and Reece think about parenting [26:09]
  • On how to cultivate a thriving relationship: training, confidants, and value Systems [34:49]
  • Most gifted books [41:09]
  • Laird Hamilton’s formula for invention in sports [46:54]
  • On the foil board and the goal to ride the biggest waves in the world [53:29]
  • What makes Laird Hamilton so resilient [1:02:54]
  • Advice for an beat-up athlete hoping to get back to high performance [1:05:49]
  • Laird Hamilton’s mantra of “training for life” [1:08:39]
  • On isolating your weaknesses, identifying flaws, and working to fix them [1:13:49]
  • Discussing Don Wildman and his incredible physical prowess at the age of 82 [1:19:54]
  • Who are the people who inspire Brian MacKenzie? [1:26:39]
  • Advice for your 30-year old self from Gabby, Laird, Brian, and Tim [1:31:29]
  • Recommendations and asks for the audience [1:39:59]

People Mentioned

by Tim Ferriss at July 15, 2015 02:17 PM

Dave Winer

Oh when materialism was fun!

When I was a kid I used to dream of all the cool stuff I could buy if I only had the money. Then, as I became an adult, money stopped being the obstacle, the problem was finding stuff that fit, or that was really good. You had to work to find the good stuff.

Then comes Amazon. I remember when a friend said to me, about ten years ago, that he tried to buy everything on Amazon. It was a game. Until that time I had never bought anything from Amazon, but I decided to play the game too. And it worked. For a while I was getting off on having all my desires fulfilled, quickly and effortlessly. I bought a big house in Berkeley and filled it with stuff from Amazon. A living room, a den, two bedrooms, an office, a kitchen, a garage, tons of closets. All that space to fill, and I came close to filling it! There was a mountain of empty Amazon boxes in the basement when I left the house and moved to NY. A one-bedroom apartment. A lifestyle that couldn't overdose on Amazon, there just wasn't the space to fill.

A picture named glove.pngToday, in the middle of summer, when the humidity is 100 percent and it's hot and sticky in the city, the opposite weather of the normal post-Thanksgiving binge, we're encouraged to indulge in a frenzy of materialism. I went to the site, clicked around, but it made me feel sad for the little boy who lusted after all the good stuff. Now, if they were selling what I had when I was that kid, hanging out with friends at the playground, throwing a football in the street, swimming in a lake, baseball, flirting with girls, plotting and scheming adventures. It's all about the friends I had when I was a kid. I wish for one more week as a kid, just one more. I would pay a lot of money for that.

To come so far, when all my material dreams of childhood could be realized with a single click, to realize that what I had then is what I most desire now.

July 15, 2015 12:19 PM

Fog Creek

A Developer’s Guide to PR and the Media – Interview with Conrad Egusa

.little {font-size: 75%}
A Developer’s Guide to PR and the Media – Interview with Conrad Egusa

In this interview with Conrad Egusa, founder of Publicize, we discuss how to get press coverage for startups and side projects. We dive into how to get press, the format and content of a press release, how to identify journalists to reach out to and the common mistakes made by those seeking press coverage.

Conrad has shared a Free Reporter Contact List and example press release.

Content and Timings

  • Introduction (0:00)
  • About Conrad (0:20)
  • First Steps with PR (1:19)
  • PR Agencies (2:44)
  • When to Seek PR (4:24)
  • Creating a Clear Compelling Story (6:36)
  • Elements of a Media Plan (11:36)
  • Writing a Press Release (13:01)
  • Contacting Journalists (14:04)



Conrad Egusa is founder of Publicize, a startup PR company. He’s a global PR mentor at 500 Startups. He’s contributed to TechCrunch, The Next Web and was previously a writer for VentureBeat. Conrad, thank you so much for joining us today. Do you have a bit to share about yourself?

About Conrad

I approach PR from three different angles. I think the first is that from a journalist’s perspective I used to write for a tech site called VentureBeat and now, I guess, contribute to sites like TechCrunch. I’ve invested in publications as well. I see it from the perspective of editorial. I think from the perspective of a founder, I raised funding for my first startup in northern California and now working on a startup and from the perspective of helping other companies through 500 startups and other avenues.

I’ve been able to look at, I’d say, about tens of thousands of different data points and basically with the interest of deconstructing the PR process to make it as efficient as possible. I think there are a lot of misconceptions people make about the PR industry, one being, for example, that you need to have a very strong relationship with a journalist to get covered, another being that, hey, you need to pay a ten-thousand-dollar-a-month PR firm. I have just seen so many data points that disprove these. My hope is that people can come away with a better understanding of media and PR after this.

First Steps with PR

What are the first steps those interested in PR should take?

Let’s say you’re working on a side project. You’re about to launch, for example, this mobile app or this web app, whatever it may be. The first thing to understand is that you need to have something to announce. I’ll give an example. When I was writing for VentureBeat, I had a friend come up to me. He said, “Conrad, could you write an article about my company?” I’d say, “Sure. What do have to announce?” He said, “Well, I don’t have anything to announce.” I said, “Well, if you don’t have anything to announce, I’d want to write a story about you, but I can’t because there’s no story I can write about.”

The first thing to remember is if you’re going out to the media, whether it’s the Wall Street Journal, whether it’s TechCrunch, you have to have something to announce. A lot of people will ask, “All right, well, what are good announcements to make?” Traditionally, for any new project, the following announcements are very strong. Let’s say you launch the business. That’s a great announcement. Let’s say you’re launching a new product. Maybe it’s a mobile app. That’s a great announcement as well. Maybe you raise a hundred thousand in funding. That’s another great announcement or if you hit a milestone.

The goal when you reach out to The Guardian or to TechCrunch or any of these sites isn’t to say, “Hi, my name is Conrad. Can you write about my company?” What you should say is, “Hi, I’m the founder of this startup that’s about to announce a new product launch. Do you want to cover the product launch?” Because those are really what a lot of these, the news stories that media publications are looking to write about. I would say that would be the first step is identifying that specific announcement you want to make.

It’s less about the specific feature and market and more about how big of a story you want to make it

PR Agencies

Do you need a PR agency?

I think the beauty of PR as a marketing channel is that it is inherently free as opposed to doing something like paid advertising, Google Adwords, et cetera, where you have to have some type of minimum marketing budget. With PR, there isn’t any inherent cost to it. I would say in regards to using a PR firm, to me, with startup marketing it’s all about return on investment. If I were in a startup’s shoes and they were looking at paying a PR company, I think the first thing I would look to do is minimize risk as much as possible. As opposed to a six-month retainer, go month to month because, obviously, a startup resources tend to be limited.

I think the second is try to have some type of metric to know. Maybe you paid a thousand, two-thousand dollars. Did you get more value than that? If so, maybe it’s a good avenue. If not, maybe you should try to look at other marketing channels as soon as possible. If there is no marketing budget, they can get PR by themselves.

Just as a quick example, I remember helping this 65-year-old founder in Chicago who had never been involved with technology, knew no writers. He was launching this company that doesn’t really look like a great, like the typical startup. I remember we got it on, I think it was VentureBeat or The Next Web. A lot of people said, “Oh, of course, you got it on VentureBeat. You used to write for that publication.” What most people didn’t realize was I said, “Well, that’s actually not true. When we wrote out to VentureBeat and The Next Web and these other sites, we wrote on behalf of the founder. So, no one actually knew I was involved whatsoever. We were emailing from the founder’s emails.”

I think it just goes to show that if you follow the right PR process you don’t necessarily have to be located in San Francisco or New York or have these prior connections.

When to Seek PR

When working on a new venture, when should you seek PR?

I’m of the attitude that I always recommend that people completely finish their product before reaching out for PR. The primary reason is there is so many cases of friends coming up to me and saying, “Hey, Conrad, we’re about to finish our project in one month or we want to start two months and we want to start talking about PR.” Then, they end up dividing their attention. As opposed to their product actually taking two months to finish, six months goes on. They haven’t even finished because they’ve divided their attention.

I like to say if you think of step two as PR and step one as finishing your product, you can never actually get to step two until you finish step one. You might as well completely finish step one and then focus after. I think when you’re about to launch, what I’d recommend is finish an alpha version of your product and then test it with a small group of friends to make sure that any bugs are … You feel like it’s ready for primetime. Then, start reaching out to the media.

I would say in terms of building a relationship with journalists, a tip that really worked for me is that a lot of people try to attend these big conferences like a South by Southwest or a CES to meet journalists. The reality is out of every hundred people, there may be one of them is a journalist. The ratios really aren’t in your favor. It’s hard enough to meet them. I found the best way to meet journalists is to go to events that are hosted by publications. The most well known ones for example will be TechCrunch Disrupt in London or in San Francisco.

Those can be somewhat expensive. There are actually a lot of smaller events that publications will host as well. As an example, and the reason why I started writing for New York was I, for VentureBeat was because I went to an event in New York that was hosted, a small, free event VentureBeat hosted. I think there were forty people there. Fifteen of them were writers at VentureBeat. Just the ratios were absurd. You couldn’t help but run into a lot of different journalists who wrote for these publications.

I would say, if you ever, and whether it’s especially in London or New York or San Francisco, see an event that’s being hosted by a Mashable or by a VentureBeat or by a TechCrunch, I’d say do your best effort to go there because you’re bound to run into a lot of journalists. You would think more entrepreneurs would go to these events. Surprisingly, they don’t.

Creating a Clear Compelling Story

If you’ve got a product that does 25 different things, how can you go about presenting a clear message for it?

Regardless of the number of features that you’re looking to add, you should have one primary mission of the company that you could basically sum up in one line. I think a mistake a lot of entrepreneurs or developers make, people starting off, is that they, when they’re pitching a company a publication they write about what the product is right now as opposed to where you want to take it in three to five years. Any product when it’s first starting out, isn’t particularly interesting. You can go back to even the well known startups now.

What does make a very interesting story is where you want to take the company, the mission, the ambition of the founders. What I would say is if you’re daydreaming about how big, how in five years the company is going to have two-hundred people and be taking over the world, that overall mission, that’s what you really want to get across.

Some kind of quick examples I started a co-working space in South America. The mission wasn’t to become a co-working space. The mission was to turn this city, Medellín into the Silicon Valley of Latin America. I’d say any new project that you have it doesn’t matter if you have two features or fifteen features. There should be one overlying mission that you have that you could, I think, rally and unify a lot of the features as well.

What steps could you take to ensure you get attention in spite of so many other products?

Let’s say you are working on a side project. You just finished it. You want to get it on a TechCrunch or a Wall Street Journal or Business Insider, one of these large publications. What I recommend there are basically, two routes you can go. You can either set an embargo or you can do an exclusive. The way especially the new media works is everyone is competing to break stories. Once a story, especially in tech, in the tech vertical of media where news goes, news cycle revolves so quickly, if TechCrunch covers the story, two days later VentureBeat is no longer wanting to cover that story.

What people do is they set an embargo, which they basically, will email thirty sites. They’ll say, “Would you be interested in covering this launch of my side project? If you’re interested, we’ll send you all the material, but you have to publish it no earlier than, let’s say, Wednesday at 12:00 PM East Coast time.” Ideally, at that time, many publications will cover it at the same time. It’s a great deal of press coverage.

The challenge that you have, especially if this is a side project that you haven’t raised ten-million dollars of funding, is that it’s hard for a lot of these big publications where they’re getting a thousand emails everyday to agree to an embargo. For anything below a seed round of funding, what I generally recommend is an exclusive. The reason why I mention an exclusive is you’d reach out, let’s say, to a TechCrunch and say, “Would you be interested in this exclusive? You have first right to publish this story.” Because of that, it’s a way that you can really … It’s something that most entrepreneurs don’t use. You could really stand out from the crowd by doing that.

Ideally, what will happen is a TechCrunch will respond and say, “Hey, we’re interested in the exclusive. Can we have an interview with you? The article will be online next Wednesday.” Then, once the article comes online, you could further coverage to other publications. The reason why I recommend the exclusive is that if you are featured on a top site, it doesn’t mean that other publications will also not cover the story I think. You’re essentially able to as much as possible, guarantee coverage on a leading publication.

When TechCrunch covers a story, it’s not just about TechCrunch. TechCrunch is the same site that the New York Times and the BBC also read. Oftentimes, coverage can spread from that. If you’re able to use this, ideally every eight to twelve weeks with different announcements that you have, all those results will just compound over time. I like to say you won’t be in the top ten percent of companies. You’ll be in the top one percent.

Completely finish your product before reaching out for PR

What can you do if the product you’re working on isn’t some super exciting app or a world-changing startup?

Because I’ve seen so many data points across all different industries, I would say it’s less about the specific feature and market and more about how big of a story you want to make it. If we just launched it as, hey, we’re launching this co-working space, you really should cover it, no one would have covered it because co-working spaces are launched hundreds every year. That’s not particularly exciting. It was the larger mission of it.

What I would always tell founders is, “Okay, this specific product that you’re launching isn’t particularly interesting. So, when you’re daydreaming and you’re thinking about where you actually want to take this in three to five years, what is it that you think about? What’s that kind of bigger mission?” Then, I think, what tends to happen is the founder says, “Oh, actually once I do this, I also want to add this and this and target this bigger market and it’s actually going to become this really big company and this is how we see it happening.”

See, that’s perfect. That big mission that’s what you want to get across not this small feature because there’s so many, for example, different Chrome plug-ins that we’ve helped get on TechCrunch and the New York Times. It’s just a Chrome plug-in that actually has really limited features. The reason why it got on the New York Times wasn’t because it was a Chrome plug-in. It was because we said, “Well, the end mission is to change the way that people learn languages online. That’s where we’re heading to.” That’s why they covered it because that’s an interesting story. I wouldn’t set any artificial barriers about where people can get. I would say, to me, it’s a lot about how people phrase the mission of the company.

If you get a twenty-percent response rate, that’s really high

Elements of a Media Plan

What are the essential elements of a media plan?

A quick plan would be identify the specific announcement. Let’s say it’s a launch. Make the story as big as possible. Craft it into a press release, which I’ll talk about in a second. From that press release, take 250 of the very strongest words. Craft it into an email. Offer it as an exclusive for a leading site. Then, once the article is published, further the coverage. That’s the overall PR process. Then, ideally, repeat it every, as soon as possible with different announcements.

Going into the press release, it’s a very specific document. It’s not particularly fancy. There are a lot of misconceptions about it. It’s basically, a document that it’s uncomfortable to read for the general public. The purpose of it is for reporters to look at it and take information and craft it into an article. A journalist won’t read a press release and then say, “Wow, this is the most interesting thing I’ve ever read. You just sold me through this press release. I’m going to write the article,” because it’s actually not the press release that sells the journalist on whether they should write it. It’s the email that you write.

Once they read that email that might be 250 words long, they say, “Hey, this is really interesting. I’m interested in covering this story.” Then, they’ll open up the press release and see these extra data points and information that’ll help write the article. The reason I say the press release is an important exercise is it’s through writing the press release that you can almost help a founder refine what’s so important about the story and then taking that information and putting it into an email to get a journalist to cover the story.

Writing a Press Release

How should you go about writing a press release?

With the press release, it follows a very specific format. Typically, the title and the first line is the big mission of the company. In the co-working space, it could say, “App Espacio launches to turn the city of Medellín into the Silicon Valley of Latin America.” Then, the second and third paragraph go more into what exactly is the announcement and the product. In this case, we can say Espacio is a co-working space. Here are the specific features.

If someone is launching a side project that has this big mission, then you can go back into the details and say, “Here’s exactly what the product does,” explaining it. In general, following after, there is a quote from the founder of the executive team. Then, there’s some background about how it came to play, how it came to come into existence, maybe the background of the founder, how they came across this problem or whatever it may be. Also, usually, at the end too, if it’s a really technological problem, a breakthrough that’s being made, people could add more information about how the technology works et cetera.

What should you do if you don’t get traction with the press that you wanted?

I see a lot of people make mistakes. One of them is that they don’t contact enough journalists. They may contact two or three and say, “I didn’t get any response. Something is wrong.” They stop. The reality is if you get a twenty-percent response rate, that’s really high. There is a certain level of, hey, you have to contact twenty, thirty-plus journalists. It does take time to do that.

Contacting Journalists

How can you identity the right journalist to contact?

I would say what I would do is whatever industry or vertical you’re into type in one word that can identify that. Let’s say you’re looking at TechCrunch. Type “TechCrunch.” You’ll see really quickly, hey, here are the twenty different articles on that subject. Here are these different writers that have. If they’ve covered prior articles about that, they’re likely would be interested in that industry.

One thing to keep in mind is that a lot of people, all publications will have these emails like, Tips@VentureBeat, et cetera. A lot of people think those aren’t read. When I was at VentureBeat, I would say everyday, half of the stories we wrote about were the ones sent to Those emails are read everyday. It’s important that ideally, people would first begin by emailing individual journalists. At the very, if there is no response, I’d always recommend sending it to the tips at that publication.

What tools do you recommend for those just getting started with PR?

I would say there aren’t these shortcuts. I would actually anywhere that you can find different emails of journalists that’ll help save you time. I would say outside of that, there’s nothing. There is no email program that can help automate that. I would actually recommend leaning away from anything that does automate that because it’s so frequent as a journalist that you’d get this email that says, “For immediate response” in the subject line. It’s sent to 10,000 people. People think that they fact that you sent it out to 10,000 people is a good thing. When it’s actually the response rate will probably be essentially zero. There isn’t a specific tool that I would use.

Are there any other resources you can recommend for those interested in learning more about PR?

There is a popular blog by Sean Ellis. It’s called that I’ve written just explaining each step of the process and use examples with his site, and say, “Well this is what you should first do with the announcements, the big story. This is the press release that you should write.” It’s just a real-life example of what an email should look like, what a press release should look like. I think you can start with that resource. It’ll probably be pretty helpful.

Conrad, thank you so much for joining us today.

Thanks so much for having me.

by Gareth Wilson at July 15, 2015 09:49 AM

July 14, 2015

Dave Winer

My interview with Poynter

This is like a super-cut Scripting News post. Lots of stuff in here, Melody Kramer asked really challenging questions. But luckily there were answers, for most of them.

Poynter: What if journalists weren’t controlled by tech?

Hope you enjoy!

July 14, 2015 12:30 PM

Brian Whitman

10 Years

10 years ago today, in 2005, Tristan and I signed the documents to incorporate The Echo Nest Corporation in Delaware, making me a “co-founder” right out of grad school. We were fanatical about music discovery and wanted our unique blend of technology to help listeners and artists. I’ve since worked harder than I ever thought imaginable, oversaw spectacular successes and overcame massive failures, turned equal parts jerk, compassionate, and anxious ball of wire; I questioned my life’s worth untold times, went from comfortable to destitute to overwhelmed; and I met all of my best friends. And we’re still fanatical about music discovery, and our unique blend of technology is helping listeners and artists.

We made a big change last year, at the peak of our powers: we were generating recommendations and playlists over 300 times a second for our customers and had grown to over 60 attractive employees in early 2014. And since then, of course, it’s gotten even better. But I never trust any startup person that says they’ve won. There’s always more to do. Nonetheless, I’m going to take a breath today to remember all the amazing people that got us here.

To the hundreds of you who were ever a part of this: I thank you to pieces. You both made this thing work, and were the thing itself. I’m sorry if I asked you who paid your salary that one time, or called you at midnight because a service went down, or reminded you how to spell our name, or got too emotional during an all-hands speech, or rewrote one of your lines of code. You have to understand: my dominant feeling throughout the course of The Echo Nest’s life was surprise. I was surprised that we could start a company from our dissertations. I was surprised we could hire people. I was surprised Jim wanted to join us as CEO. I was surprised we could raise money. I was surprised we got our first customers. I was surprised the people we hired cared so much. I was surprised everyone was working so hard, and that the company was becoming so successful. I was surprised Spotify was interested and that it’s worked so well. I remain surprised that everyone’s still with us, happier than ever in our much bigger new family, working even harder on the next big thing.

I was always standing as far ahead of the boat I could, eyes wide in awe that we somehow hadn’t run aground, but barking behind me to try to ensure we wouldn’t. Maybe you all should have tied me to the mast instead; we did great.

The empty office

The empty office, Davis Square, August 2005

The early board

The first board of directors, including Barry, Don Rose & McLagan, Bethe, Andre & Dorsey, and Elliot, 2008

Jim and T and Tim

Jim and Tristan and me and Tim, 2008

Introduction in Amsterdam

My hosts’ introduction of me before a talk in Amsterdam, 2009

Boston Phoenix

Early article in the Boston Phoenix

21 days until Echoprint release

Usual Brian management style, here of poor Alastair pre-Echoprint release, 2010

Ghost tracks

Team Ghost tracks

London team settles in in Somerville

Our London team settles in in Somerville

Elissa and Amanda

Elissa and Amanda

Early 2013 photo

Early 2013 group photo

Telling the office

Telling the office what had just happened (including 6am SF office), March 6 2014

July 14, 2015 02:40 AM

July 13, 2015

Mark Bernstein


A postmodern post-apocalypse, a world in which civilization has slowly puttered to a stop. Our hero and heroine have fled slowly-rotting Los Angeles for a verdant strip of green somewhere in the Central Valley, a place they call “the afterlife” where they eek out a life in nearly total isolation. Back home, the cities are slowly collapsing into stagnation and decay, while everyone with money has retreated to gated “communities” behind fortified walls defended by private armies and threatened by marauding land pirates.

Cal and Frida have a shed in the woods, a subsistence garden, a few supplies, and each other. They’re young and loving and resourceful. They trust each other. Naturally, they have small secrets: who doesn’t? From those tiny, trivial secrets, fissures spread. This is the way Lepucki’s world ends, crack by tiny crack.

This is the second apocalyptic dystopian California to have appeared this year, though The Last Days Of California never quite makes it to the California border (or the Rapture).

July 13, 2015 05:48 PM

Dave Winer

Podcast: Putting the public in public media

A 14-minute podcast about the relationship between the public and public media.

As Melody Kramer says, in a report on Nieman today, the opportunity is to go beyond tote bags and pledge drives.

We're all creating media these days. Let's find better ways to organize our work.

July 13, 2015 02:53 PM

Fog Creek

Farewell Rich!

We’re very sad to announce that our COO, Rich Armstrong, has left the company to work on his own startup. In the seven years Rich Armstrong worked for Fog Creek Software, nobody did more to personify our dedication to being a company that puts people first.

Rich started out in tech support when the company was much smaller; indeed for a while he was the tech support department. As the company grew, he hired great people to fill out that department.

The tech support role at Fog Creek is actually pretty hard to hire for. We need people with good programming skills, lots of system administration knowledge, a great deal of passion for helping people, and almost heroic amounts of patience, so keeping the support team staffed is not easy. Rich figured out that we could hire much better support people if it were part of a career path, not a dead-end customer service job.

So he created a department where every individual was nurtured and developed and given constant opportunities to learn and grow. Everybody was told explicitly what their opportunities were and what they needed to do to get there. As a result, the support team became the greatest engine of talent development Fog Creek has ever known.

Some of the people that Rich hired went on to be software developers, product managers, system administrators, and marketing executives. All of them were amazing; any of our customers who have ever been floored by the quality of technical support Fog Creek offers can attest to this.

The other thing Rich did in this role was figure out an amazing operational system for the support team based on his own years of experience thinking about productivity systems.

Rich taught us all a lot about productivity. Personally, the first of many things I learned from him was not to go through my email inbox cherry picking all the easy problems, because then you waste time and energy re-reading the hard emails again and again and again even though you’re not going to work on them. His mantra of “No Cherry Picking” means you go through your inbox top to bottom and always completely solve, or decide to discard, each message, no matter how hard it is.

After a few years, we expanded Rich’s role twice, first putting him in charge of sales and marketing as well as support, then finally naming him General Manager of developer tools (FogBugz and Kiln). After Trello spun off into its own company, Rich became COO, and the day-to-day manager, of Fog Creek.

About a year ago, Rich approached Michael Pryor and me, the founders, for that conversation we always dreaded having. “I really want to start my own company,” he told us.

He offered to develop a transition plan so as not to leave Fog Creek in the lurch. So we asked him to work a little bit more on tightening up the management and organization of Fog Creek, and get everyone aligned for our next mission (I’ll be blogging more about this in the future) and develop a leadership team that could replace him, and then he could move on with our blessing.

So today Rich is leaving us. For now, the management team is a collaboration between Jude Allred (everything engineering), Allie Schwartz (everything people), and David Miller (everything product), closely advised by the founders. We’ll be introducing those three amazing leaders to you in blog posts over the coming weeks. Fog Creek is a very collaborative, team-like company, and we recognize that having a three-person co-presidency is unconventional, but it’s working.

All of us here at Fog Creek are honored to have spent time working with such an amazing individual and wish Rich an amazing onward journey.

Be sure to check out Rich’s new company,, and read our recent interview with Rich.

by Joel Spolsky at July 13, 2015 02:43 PM

LR Senergy on Making the Switch from FogBugz for Your Server to FogBugz Ocelot

LR Senergy is an integrated exploration, production and energy services consultancy. Headquartered in Aberdeen, Scotland, they have a staff of more than 600 spread around the world, including 50 developers. We spoke to Tim Martin, ODM Production Manager, about their experience of switching from FogBugz for Your Server to FogBugz Ocelot.


Using For Your Server

LR Senergy is a long-time FogBugz customer, and Tim said their experience of using For Your Server “was generally good” with FogBugz being used by both their “devs and support staff”. “We’ve got a lot of support people that don’t do any coding so they’re not technical in that sense” but “we’ve never had any issues with people using the interface, so we can use the bug tracking system and everything else with minimum training. It just works, which is quite nice”.

But they decided to move to On Demand and FogBugz Ocelot. There were “two main drivers” – “we had entered into an agreement with another organization which required sharing code with that organization and it was a lot easier to do that with On Demand” and “we were keen to get access to some of the latest updates.” But they had concerns about moving away from their self-hosted system. “Performance was quite important to us, but equally, the reliability of the system was important to us. We rely very heavily on Version Control to the point that if we lose it, we have 50 developers sitting and twiddling their thumbs waiting for it to come back”. But “we had a good relationship with Fog Creek. We find support to be very responsive and interested in what we’re trying to do, and how we’re trying to work. So we had some confidence that we would get a good level of service and response.”

Moving to On Demand

The trust they placed in Fog Creek was well-founded, as having now moved to On Demand using FogBugz Ocelot, “everything’s been working, we’ve had no hiccups, it’s been very smooth, which has been great. It’s been 100% uptime”. On Demand “gave us a system that is demonstratively secure and robust.” What’s more “maintenance is no longer our problem. So we don’t have to employ somebody or someone’s time to look after it.” “We’re very pleased… we’ve seen a couple of enhancements come through already, which has been appreciated” and “with the support we had from Fog Creek, there’s always plenty of rapid response to any questions we had… so I would recommend FogBugz to others.”

by Gareth Wilson at July 13, 2015 11:20 AM

John Udell

Hands on: Slack gets a real-world teamwork test

Resistance to Slack was predictably futile, and now we are assimilated. I was not among the resisters. Nothing floats my boat like powerful team-enabling software, and I'm having a ball exploring the nooks and crannies of Slack.

How it may alter our team dynamics I can't yet say. One thing I'm curious about is search. The Google mailing list method we've been using can quite capably index and search all team communication. To route messages into a searchable archive, you simply cc: an alias. But you must cc: an alias. The default for intracompany transparency is opt in, not opt out. We'd rather push the toggle the other way, but Google doesn't enable it, so the searchable archive winds up incomplete.

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

by Jon Udell at July 13, 2015 10:00 AM

July 12, 2015

Brian Whitman

I want to know the size and temperature of bread while it rises


We built a device to measure bread as it rises and in the process I gave a lot of thought to tools and inventors.

If you create meticulous tools and platforms, only a tiny fraction of the world is going to have the desire and knowledge to latch on. Your best hope is to be bright enough for other tool-builders to swarm to, and then hope the weight of the pyramid stacked on top of you won’t kill you. It might be that the startup fan fiction of “prosumer builders” simply doesn’t have a quorum strong enough to fund an industry – maybe their one-off projects remain, just that, jumper wires in a shoe box. The technologists and inventors I know tend to avoid reliance on existing platforms; we desire total control, we want to burrow down from the physical interface (pins, interfaces, connectivity) to the electrons swirling around the transistors until we’re comfortable that what we make is suitably ours.

Early sketch

I thought a lot about this natural law when my friend asked me if a device she had envisioned was possible. She bakes a lot of bread, and wanted a way to visualize the rise: both the size of the growing dough and its internal temperature. She wanted it to show on her phone so she could be somewhere else during a long rise and check in on it once a while. So figure the continuum: we could have bought some “internet of things” kit from Best Buy in a white plastic case that graphed temperature on our phones. And maybe a camera that uploaded live video to Google to check the size. That’s expensive, overwhelming, and although it would work, it’s doesn’t fit what we wanted. It would feel wasteful. A technologist sees that as potential: it could be smaller, it could cost a lot less, and tries to fill it: I could source some microcontrollers, design a PCB, 3D print a case, design a reliable web service, experiment with range and temperature sensors and instead make a bona-fide product where only one would ever be made.

I instead ended up with something new, in the middle, that surprised me: this piece of hardware, the Sparkfun Thing, can ship to you overnight, and costs $16. It can talk over WiFi. It’s got GPIO, ADC, I2C, and a li-poly charger circuit. It can be programmed over USB using the Arduino software. We built the Bread Detector using The Thing, and was simply impressed with the balance of control and “batteries-included” (literally.)

The difference wasn’t the onboard specs or even cost, but the service stack: The Thing comes pre-packaged with instructions and examples for posting the output of sensor data to the Phant data logging service, which is free with limitations – you can send data roughly every 10 seconds, and are limited to 50 MB before it rolls over. Phant was that missing layer, with one line of code I can push bits to a reliable service with a simple API, ready for analysis, graphing, alerts.

The simplicity of the platform also means something like The Bread Detector can be built by anyone, with simple wiring and low-cost sensors. I wonder if the software layer was our problem all along: I can teach a less-inclined person to solder and plug in wires, but would have a lot harder time getting them to set up a web service to store data and respond to queries.

When I mentioned the Phant service and the Thing on Twitter, Antonio, someone I don’t normally bet against, said he thinks it will be free one day. Put on your capitalist hat for a second. How will that work? The Amazon Dash buttons have a clear proposition: you’ll buy more stuff, so give them away. Will the data sitting on Phant soon earn Sparkfun greater revenue than the parts? Will every 5th bread rise give me an ad for King Biscuit?

Perhaps in the near future, the prosumer builders’ products themselves become a very different kind of product.

Detecting some bread

July 12, 2015 08:56 PM

Walk to work

I recorded my walk to work on binaural microphones. You should hear it on headphones sometime, it’s strangely soothing.

I made this all with a (relatively) cheap kit: the Tascam DR-05 recorder and a pair of Soundman OKM II Studio Binaural Microphones. Soundman only appears to sell their microphones, new, on eBay, these days.

When you walk with these on you feel like a performance. You listen just as carefully as the microphones are. You move fluidly and try not to rustle, cough, or act aggressively. I walk this hour (including the 10 minute ferry ride) twice a day, whenever I’m in NYC during the week. Even if I never shared it, or deleted the WAV file immediately, I’d want to keep doing it this way.

July 12, 2015 07:57 PM

Dave Winer

Podcast: Scaling online communities

A 12-minute podcast about different types of online communities and how they scale.

This is on-topic because of the problems at Reddit.

July 12, 2015 05:00 PM

July 10, 2015

Dave Winer

Microsoft Band and RSS

Presumably Microsoft looked at the competition and saw that they were all really tight on how apps get to the surface of the watch or band, to the wearable display. Lots of hoops to jump through.

And since our product is late-to-market and Microsoft isn't exactly on the mind of most devs these days, how are we going to make our product useful, even though we can't get much support from devs?

Answer: Open it up. Make it a lot easier for content to flow from the net to the wrist.

So, if we're going to open it up, should we invent our own format, or use an existing one? In the past most big companies would probably choose to invent their own. It employs more programmers, and fits their macho image, we're so big and powerful of course people will do what we want them to.

Or, we could remember that we're trying to open the pipe as wide as possible so the barriers are as low as possible. There's already a lot of know-how in RSS-Land, and people can trust that it isn't going to change, they aren't going to wake up one day to find out the feature they depended on was deprecated.

So, go with RSS.

It's really not brilliant, it's just a bit exceptional that a big company would let their ego down a little. However, it's not so uncommon these days. Apple just announced their news product would be based on RSS. Facebook is building on RSS in their new news product. I think at some point in the last couple of years the tech industry decided to stop fighting RSS and just use it, which they could have done a long time ago of course.

As the Supremes used to sing: You can't hurry love, no no..

July 10, 2015 02:12 PM

Tim Ferriss


QnA with Stanley McChrystal on the Tim Ferriss Show

MAZAR-E-SHARIFF, Afghanistan (March 15, 2010)–U.S. Army Gen. Stanley A. McChrystal, commander of NATO’s International Security Assistance Force and U.S. Forces-Afghanistan, works on board a Lockheed C-130 Hercules aircraft between Battlefield Circulation missions. (NATO photo by U.S. Navy Petty Officer 1st Class Mark O’Donald/Released)

“Push yourself harder than you think you’re capable of. You’ll find new depth inside yourself.”
– Stanley McChrystal

Stanley McChrystal (@stanmcchrystal) retired from the U.S. Army as a four-star general after more than 34 years of service. Former Defense Secretary Robert Gates described McChrystal as “perhaps the finest warrior and leader of men in combat I ever met.”

From 2003 to 2008, McChrystal served as Commander of Joint Special Operations Command (JSOC), where he was credited with the death of Abu Musab al-Zarqawi, leader of Al-Qaeda in Iraq.

The follow-up questions are really fun. In this particular episode, he answers questions such as:

  • If he could put a billboard anywhere and write anything on it, where would it be and what would it say?
  • What are three tests/practices from the military that civilians could use to help develop mental toughness?
  • What are his favorite documentaries or movies? Why?
  • What $100 or less purchase has most positively impacted his life in the last twelve months and why?

These are a bunch of questions from you guys! Thank you for submitting your questions and requesting for this follow-up segment. Still want more? Please feel free to learn more about the McChrystal Group at their website.


Want to hear my interview with Stanley McChrystal and his former aid du camp, Chris Fussell? — You can listen to our two-hour-long conversation  and see the show notes here. In this episode, we discuss eating one meal per day, special ops, and mental toughness (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.

It’s that easy. Enjoy!

QUESTION(S) OF THE DAY: What is your perception of U.S. military team efficiency? How about U.S. military team effectiveness? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode

Show Notes

  • What are 3 tests or practices from the military that civilians can use to help develop mental toughness? [3:04]
  • What is the greatest attribute of an excellent soldier that you wish all politicians had? [3:50]
  • What was your biggest frustration with being in the military? What is your biggest frustration being out of the military? [4:22]
  • What is the Find, Fix, Finish, Exploit, and Analyze (F3EA) methodology? How did your approach change over time? [5:10]
  • What can low to mid-level management do to encourage a more decentralized, agile, and flexible work environment? [8:45]
  • What is one thing you want average Americans, particularly anti-war Americans, to understand regarding wars and conflicts you’ve been involved in or about the military in general? [8:35]
  • What is something that you see in military movies, or movies involving the military that drives you crazy? [10:20]
  • What filters can the public use to sift through the noise of news to a feel for the real truth being the stories? [10:45]
  • What $100 or less purchase has most positively impacted your life in the last 6 months? [11:45]
  • What is one of your favorite documentaries or movies and why? [12:25]
  • If you could put a billboard anywhere and write anything on it, one billboard, where would it be and what would it say? [13:40]

by Tim Ferriss at July 10, 2015 12:27 PM

July 09, 2015

Fog Creek – Interview with Rich Armstrong

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 with Rich Armstrong, our outgoing COO.

Rich is leaving for paternity leave and to found his own startup, MeaningTo. He started at Fog Creek some 7 years ago, founding the Support team and rose through the ranks to COO and running all of Fog Creek. You can keep up with his startup journey on his blog.

Rich Armstrong
Location: New York City, NY, US
Current Role: Founder of MeaningTo

How did you get into software development?

I was all self-taught until I got out of college with a liberal arts degree and lucked into an entry-level job at a big tech firm in 1996. My boss gave me the busywork of collecting a report of all the source code changes from the previous day, putting them into a Word document, printing it, and having it on his desk before 10:00. Ugh. It was slow and boring and took me an hour every day.

I poked around and discovered Microsoft’s nascent WordBasic. I coded up a macro to do the formatting, then discovered that I could just point WordBasic at Visual Source Safe’s command line interface. When the reports started showing up on my boss’ desk before he even got into the office, things changed for me quickly.

I ended up coding automated testing tools, which required me to get better at analyzing large amounts of performance data.

Automating fiddly things and crunching data to yield insights have been my main uses of coding throughout my career, but it’s all useless unless it actually helps someone.

Tell us a little about your roles at Fog Creek

I came to Fog Creek to found the Support team. After five years at Google in a queue-based helping role, I’d developed opinions about how queue-based work could be done better. But Google didn’t see support as a strategic function whereas Fog Creek did (and does).

Many of the theories I had coming into Fog Creek got proven true by the awesome support team I eventually built, but one major theory turned out to be dead wrong.

Over my career, I’d noticed that people (myself included) got grumpy and bored after about 18 months. My theory was that we didn’t have enough slack time to do deeper fixes. We saw the same problems every day, and that’s what burned us out. With built-in slack time, we could be happier for longer, maybe 36 months!

I was wrong, but along the way I found something more valuable than a long-lived support engineer.

Turns out that smart people get bored after 18 months, but if you give support engineers slack time, a bunch of other wonderful things happen:

  • You can get awesome people to do the job for you
  • They use the slack time to automate things for you
  • They find new ways to make your company more awesome

After 18 months, it usually doesn’t make sense to keep a support engineer in the job any longer; they’re too valuable to be helping customers one at a time. We move them into higher scope roles like PM, Sysadmin, management, etc. People have moved from the support engineer job into technical and leadership roles all over Fog Creek and Trello.

If you do this for a while, it ends up looking a lot like running operations while practicing career development. That’s why Joel and Michael eventually tapped me to run the company. Over my time as COO, I’ve managed to hire and develop a leadership team that I can be proud to hand back to Joel and Michael so that they can run the company directly.


When are you at your happiest at Fog Creek?

Taco Day.

Seriously, though, it’s when I’m in the middle of a long one-on-one when we’ve settled in and are connected and working together on hashing out a problem. I do idiosyncratic one-on-ones. They’re based on a speech that John Cleese gave to a bunch of businessmen back in the 80’s and also on something I read by Peter Drucker. The idea is that we spend most of our working lives in the “closed” mode where we’re cranking away at the widgets in our lives. But it makes a lot of strategic sense to spend some time getting into the “open” mode while at work. The “open” mode usually happens in the middle half-hour of my 90-minute one-on-ones.

It might sound like a big commitment to do a 90-minute one-on-one, but if it yields one shared creative insight that can save us six months of work, it’s very much worth it. A 30-minute one-on-one can usually get you to the first right answer to a question, but that’s like doing root-cause analysis by practicing The One Why. The third or fourth right answer to a question can often get you farther, faster, and at a lower cost. And the third right answer only comes when you’re not pressured for time.

What are your plans after Fog Creek?

Fog Creek has been a wonderful place to build some entrepreneurial muscles. I’m going on paternity leave, and then founding

MeaningTo is the missing productivity app, a place for all the stuff you’ve been meaning to get around to, but there’s always another demand on your time. Another incoming email, another meeting.

Ironically, the better your calendars or to-do lists are working for you, the more tempted you’ll be to start overloading them with stuff you’re meaning to do rather than the stuff you have to do. The best place to look for these is often in the “all day events” section of a person’s calendar.

If this sounds familiar to you, I’m here to tell you there’s a better way and you can sign up for the beta. (As you can see from that landing page, my first hire will probably be a designer…)

It turns out that a lot of valuable work activities fall into this category: professional networking, social selling, customer check-ins. But in the years I’ve been using my hacked-together prototype, the best things it’s done for me are reminding me that I like date nights with my wife, and that I like to go to Park Slope’s Al di La for their oxtail and cuttlefish over polenta. With a baby on the way, it’ll be important to keep getting reminded of these things.

What software tools do you use and couldn’t live without?

As a coding manager, you never get the time to optimize your dev setup. You just need to use the tools you know to get the result you need… ASAP. I use vim in a tmux session, and I’m comfortable there. Moving into the next project, I’m sure I’ll have plenty of time to discover new tools.

What are a few of your favorite Fog Creek blog posts?

I love how early “Girls Go Geek… Again” was. Fog Creek has advocated for gender equality in tech for years. The response to that post was huge and the movement has gained steam in the last four years.

I love “You are the worst software in the world.” The writing won’t win a Pulitzer, but it does capture the tilting-at-windmills nature of what we do here at Fog Creek. We really care about software, about customers, about people. And the world is not always kind to people who care. But it doesn’t mean you stop doing it.


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

Find the virtuosi that you have access to, and spend some time watching them work or working directly and closely with them.

I could cram the twenty most valuable things I’ve ever learned about productivity, programming, people, Excel, etc. into an hour working with various people:

  • Watching [Trello dev] Daniel LeCheminant work on the Google Chrome console
  • Watching [Google co-worker] Susie Vaks use Excel
  • Watching [late Google co-worker] Dave Perron hand-type SQL that spat out executable SQL!
  • Learning how to troubleshoot from [now Trello CEO] Michael Pryor
  • Pair-programming with [now Fog Creek CTO] Jude Allred on a prototype project
  • Watching [noted software blogger] Joel Spolsky rehearse a product demo

And many others…

We spend a lot of time at work with people, but a tiny amount of time working with the stunning colleagues we’re surrounded by. Leaving Fog Creek, I see this tremendous store of virtuosity that I’ll no longer have access to.

Luckily, that’s not entirely true. My going-away present from Fog Creek was in two parts.

The first was a beautiful Mauviel copper pot. I plan to use it for decades and pass it on to the baby boy we’re expecting this month (assuming he likes to cook).

The second was a pledge from dozens of current and former Creekers/Trellites. Each of these virtuosi offered me an hour of pair-programming or consultation time. I plan on gobbling up that part of the present as quickly as possible.


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

Recent Interviews

Michael Fogus
Michael Fogus
Casey Muratori
Casey Muratori
Tomomi Imura
Cassidy Williams
Cassidy Williams

by Gareth Wilson at July 09, 2015 05:41 PM

FogBugz Ocelot means Brain Bytes Creative can just Focus on their Business

Atlanta-based, Brain Bytes Creative are a digital marketing agency specializing in web design, app development, SEO, and paid search. They’ve been using FogBugz since February 2015, but James Tharpe, their CTO, is a long-time FogBugz user having implemented FogBugz at three other companies, who are all still using it. We spoke to James about how having spent too much time configuring another product, they made the switch to FogBugz so they could just focus on their core business.


The Problem

The problem for Brain Bytes was that they simply didn’t want to spend all their time configuring and customizing a tool. “We’re a small company simply trying to get work done. We had this Atlassian agile product that we felt like was in a state of continuous configuration – it was just never finally configured. We realized we were spending more time configuring the product than getting actual work done. We also didn’t have, nor wanted, a full-time employee to manage the product’s configuration”.

The Solution

“We needed something to easily track our work with little effort. We needed something that worked out-of-the-box, helped us get stuff done, and could be flexible across our teams’ disciplines (i.e. “departments”)”. So they moved over to FogBugz. “The great thing about FogBugz is how easy and fast it is to enter data, which is especially useful in meetings. With all this information in there, we rely on FogBugz permissions to help us stay organized and declutter the data other employees can see. Evidence Based Scheduling and Time Tracking allows us to quickly see all the work we have to do, when it might be done, and what the blockers are.”

The Result

“Switching to FogBugz has been great. FogBugz has helped us to get work done and let us focus on our business. The ability to quickly and easily add cases, add additional permissions, and leverage Evidence Based Scheduling has been such an improvement to the work at Brain Bytes Creative. The whole company uses it… we’ve been able to organize FogBugz for our internal work, our clients’ work and even our accounting – our entire business is run through FogBugz.” But best of all James says, “it helps us keep honest with ourselves, and communicate realistic deliverable dates.”

Switching to FogBugz Ocelot

Having used FogBugz elsewhere before Ocelot was released, James says that “the performance upgrade is so fast, and the UI looks great. At first I thought some features were missing, but I found out through the super nice Support team at Fog Creek, that a few items had just been moved around and were improved. I’d definitely recommend FogBugz to anyone, it’s been so great for us!”

by Gareth Wilson at July 09, 2015 10:06 AM

July 08, 2015

Tim Ferriss


The Tim Ferriss Show with Sam Harris

Sam Harris (Photo Credit: Steve Jurvetson)

“On one level, wisdom is nothing more than the ability to take your own advice.”
– Sam Harris

This is Sam Harris’s second appearance on the show. Sam is a neuroscience Ph.D. and the author of the bestselling books, The End of Faith, The Moral Landscape, Free Will, Lying, and Waking Up. His work has been discussed in The New York Times, Time, Scientific American, Nature, NewsweekRolling Stone, and many other journals.


Want to hear my previous interview with Sam Harris? — In this episode, we discuss spirituality, neuroscience, meditation, and more (stream below or right-click here to download):

This podcast is also brought to you by LegalZoom. Matt Mullenweg (CEO of Automattic – now worth more than a billion dollars) first incorporated his company on LegalZoom. LegalZoom, which I’ve used myself, can help you with almost anything legal, including setting up a will, doing a proper trademark search, forming an LLC, setting up a non-profit, or finding simple cease-and-desist letter templates. LegalZoom is not a law firm, but they do have a network of independent attorneys available in most states. They can give you advice on the best way to get started, provide contract review, and otherwise help you run your business. Use the code “Tim” at checkout to get $10 off your next order. Take a gander at everything you can get for a fraction of what you’d expect —

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.

QUESTION(S) OF THE DAY: What was your biggest takeaway from this session? How has your thinking changed? Please let me know in the comments.

Scroll below for links and show notes…


Selected Links from the Episode

Show Notes

  • What are five books you think everyone should read? [6:53]
  • In The End of Faith, you briefly discuss the challenging reality of having children. Why did you decide to have children? [18:58]
  • Why have you stopped doing public debates? Who would you like to debate? [23:18]
  • Could you talk about one of your differences with Christopher Hitchens on? Specifically, his pro-life stance. [29:03]
  • What fact/event has made you change your mind recently? [32:53]
  • What are Sam Harris’s morning rituals? I would especially like to know his meditation rituals. [36:03]
  • If you had to recommend one thing for brain health outside meditation or exercise, what would that be? [46:18]
  • Your first book, The End of Faith, featured a blistering attack on religious moderates. Now you strive to encourage religious moderation in the Islamic world. Have you changed your mind on religious moderation? [49:48]
  • Would you push the fat man in the trolley scenario? Do you think a society could occupy a peak on the moral landscape if it’s inhabitants would all push the fat man? [55:28]

People Mentioned

by Tim Ferriss at July 08, 2015 11:47 AM

Fog Creek

Technical Hiring and Cultural Fit – Interview with Johanna Rothman

.little {font-size: 75%}
Technical Hiring and Cultural Fit – Interview with Johanna Rothman

Looking for audio only? Listen on

In this interview with Johanna Rothman, author of ‘Hiring Geeks that Fit’, we discuss technical hiring and the importance of cultural fit. We cover how to identify the important parts of your culture, the essential steps in technical hiring, hiring diversity, the best questions and common mistakes made by technical candidates and hiring managers. For more about these topics, Johanna writes regularly on her blog.

Content and Timings

  • Introduction (0:00)
  • About Johanna (0:22)
  • The Importance of Cultural Fit (0:46)
  • Hiring and Diversity (3:41)
  • Essential Stages in Technical Hiring (5:49)
  • Hiring Contractors (8:35)
  • The Best Technical Hiring Questions (9:39)
  • A Great First Day (12:20)
  • Common Technical Hiring Mistakes (14:28)



Johanna Rothman is an experienced software engineer and consultant specializing in managing product development. She’s a regular columnist and conference speaker and is the author of several books, including Manage Your Project Portfolio, Manage It, and Hiring Geeks That Fit. Johanna, thank you so much for joining us today. Do you care to share a bit more about yourself?

About Johanna

Thanks so much for asking me. I think that one of the things that people really get from my writing and my speaking is my pragmatic approaches. I don’t care if you stay dogmatic about any given thing. I don’t care about that at all. What I care about, does it work for you? As long as you’re successful, I’m successful, so that’s really the big thing about me.

Sometimes candidates are their own worst enemies

The Importance of Cultural Fit

In your book Hiring Geeks That Fit, you say that you should hire for a cultural fit, saying that, “Cultural fit will trump all technical skills.” Why do you think that’s so important?

We often think about this laundry list of technical skills that we need, but it turns out that our ability to collaborate with each other or to problem solve together or alone, right, whatever it is that you need, are the things that really matter when you’re thinking about what kind of a person do we need and when do we need them? That’s all part of the corporate culture, right? If you think about what culture is, it’s not about Foosball. It’s not about the color of the walls. It’s not about the desks that you have. It’s about what you can and cannot say in the organization, how people treat each other, and what we reward. If we think about what do we reward and how people actually work together and what they can talk about, right, that’s the culture that you’re hiring into or you’re not going to hire someone into. Culture is not we’ll see it and we believe it, we know it when we see it. That’s a very non-analytical way to look at culture. If you think about how do we treat each other, what can we talk about, what do we reward, now you actually have, really, the makings of culture. That’s all and about how people work together or alone, if that’s how you do it. Most of the times, I see people working together.

An organization’s culture can be difficult to define. How can you better understand the key elements of your culture so that you can make the right judgments?

Look at a successful project or even a series of successful hires. What do they have in common for how they work together, right? Did they problem solve together? Did they ask each other for help? Did they say, “We’re going to use this particular tool for this and not use it for that,” and what do you reward? If you’re the hiring manager, do you actually reward individual people or do you reward project teams? It’s really, really hard to reward project teams, but you can do it. The more you do that, the more collaboration you will get, so you want to really think about what has success looked like in the past and how can we bring that success forward to say, “This is our culture. This is the kind of people we want.” How do we do that, right? Look at your most recent success just the same way you would in an interview and then use that to go forward.

I actually hire contractors in exactly the same way I hire permanent staff

Hiring and Diversity

Women and minorities are underrepresented in many development teams. How can they begin to hire more diversely?

I think the biggest thing is to acknowledge that we are all human and we like people like ourselves, right, so let’s just get that out there and say this is a fact of life. Now we do not leave it at that. When I wanted to hire women, I looked for women. I have been very successful in hiring a diverse team. I’ve done this over and over and over again. That’s because the best products come from diverse teams. There’s actually research that says great teams have women in them, right, so if you want a great team and a great product, you will hire women. That means you have to get comfortable with thinking about women can actually do technical work, that women can be great coders, women can be great testers, women can be great project managers, and the same thing for any other kind of diversity that you want. If we are stuck and say, “I’m only going to recruit from schools I went to or schools I know about and I’m only going to recruit from my little, tiny circle of friends,” you’re never going to get the diversity that you want. You have to open up your recruiting, your sourcing, and say, “Where am I likely to find people, great people that I want,” not necessarily, to use the overextended term, ‘the brogrammer’, right, the male programmer.

We happen to have more men than women in this industry, but a lot of that is reinforcing, right? I didn’t have any trouble getting a job out of school way back when, but there are lots of women now who do have trouble getting really good jobs, the jobs that they want. That’s because we’re so insular in our hiring, so it’s time to expand horizons a little.

Essential Stages in Technical Hiring

What are the essential stages in hiring for technical roles?

What I think the essential stages are is first doing an analysis on the problems that you want to solve with a new hire. Everyone gets hired because they solve problems for a hiring manager. If you’re not clear on what the problems are, you’re not going to be able to solve the problems, right, so the first thing is what problems do you want to solve? Then do a job analysis. It turns out that a job analysis, like getting the requirements for a product, is essential in understanding what you really want. What are the essential non-technical qualities, preferences, and skills and what are the essential technical skills? When you really think about what’s essential versus what’s desirable, you end up thinking, ‘oh, maybe that’s not really essential’ because one of the things I see a lot is that hiring managers have this laundry list or this shopping list of many, many technical skills. That’s not why we hire people, right, we hire people based on their qualities, preferences, and nontechnical skills. Are they list people? Are they able to keep ideas open for longer, right? Many of the best architects can keep ideas open for longer. That way, they’re not so stuck on this must be our architecture at the very beginning of the project. You want to really think about what kind of people do I want in this role or in these roles.

Then you have many, many options. You can do a job description from the job analysis. You can develop your phone-screening questions. You can decide if you want an audition first or second or third. You can set up the interviewing. You can then check references. I always check references. I am not the kind of person who is willing to hire somebody without references. I also have a little script for the kind of reference check I want. It’s based on what I saw in the person and what’s essential about the job, right? For me, the job analysis is the basis. It allows you to do absolutely everything. You have to be able to filter resumes, too, but if you don’t know what you’re looking for and what problems you want to solve, then it’s a lot harder to filter and then hire.

This emphasis on ‘if they don’t have three years of Ruby’ or something, then we cannot hire them. That’s just nuts

Hiring Contractors

How does your hiring process differ for contractors than with permanent staff?

I actually hire contractors in exactly the same way I hire permanent staff. For some people, this is a really interesting thing. Why would you do that? Why would you invest all this time in hiring contractors? There’s a couple of reasons. First, it turns out that contractors actually stay a lot longer than you think. Sometimes, you can actually convert, I don’t know if convert’s the right word, but you can convince, maybe, contractors to stay on as permanent people. If they have the right qualities, preferences, and nontechnical skills to be able to work with your staff, now you actually have a great mesh of what you’ve bought these people for, right? Maybe you only need them for a few months, but my experience is that contractors stay so long, so I use exactly the same approach for hiring contractors.

The Best Technical Hiring Questions

You recommend using behavior-description questions to weed out the talkers from those who actually have the required skills, so what are some examples of good questions to do this?

I really like behavior-description questions and I recommend them all the time. In fact, there’s a little discussion going on my Hiring Technical People blog about hypothetical questions. One of my colleagues is looking for a project manager job. He says, “I keep getting all these questions that sound a lot like free consulting,” so, “If you had to choose between these tools in our situation, which tool would you choose?” That’s not a very good question because you might think that that goes to solving the problem that people are being hired for, but you don’t understand about the experience and the context in which this person made their decision. What you really want to ask is, “Tell me about a time that you had to choose between these tools. Tell me about the project, tell me about the context.” Then I can understand, right, this is what I say to myself as an interviewer, “I can understand why you made this decision. What was the purpose of this decision, and how did you decide between these two tools?”

That actually gets you the detail that you need in an interview, but if you ask hypothetical questions, or you ask irrelevant questions like, “Tell me about your weaknesses,” oh, please. I can make any weakness I have sound terrific, right, and so can any experienced interviewee. Don’t ask about that stuff. That’s irrelevant. If you ask the behavior-description questions, give me an example of, tell me about a time when, now you have a really great foundation for a conversation. The foundation for the conversation is what you need to have, so that’s what you want. You don’t want any of those other stuff.

Now I will tell you I like auditions also, right, that’s where you actually see people doing the work. I like twenty-minute auditions. I don’t like an hour-long audition. That’s too long and you don’t need something that long. Especially if you’re hiring technical people, watch them do the work and that’s all you need to know. I also like meta questions, which is, “What have I not asked you yet?” That sometimes gives me very surprising answers and a lot more insight into what the person can do.

A Great First Day

How can you ensure your new hires have a great first-day experience?

Now the first day is so, so important. Everyone I know, okay. I don’t know the entire universe, but everyone I know has this little did I make the right decision? They’re excited, they’re anticipatory. There are all kinds of things for their very first day at work. In Hiring Geeks That Fit, I have three different checklists so that you can start getting stuff ready before the person comes onboard. I cannot tell you how many people I know who don’t have a desk their first day, don’t have a computer, don’t have a login, don’t have a password. There is no way for them to contribute. They are so excited, they’re so anticipatory, they want to do a really great job and because you, as a hiring manager, or your organization, does not have a little checklist, they can’t get started. Oh, this makes me nuts, so I like having these checklists.

The other thing I really like is this buddy system. If you assign… Anytime you have a new person coming in, right, the team has some level of productivity. When you have a new person, the productivity level dips because that person’s asking questions, they don’t know what to do. If they have to ask every single person in the team, now productivity for everybody dips. One of the things you can do is have a buddy system where you have someone whose job it is is to shepherd this person through the next couple of weeks or a month, depending on how you work. If you work in two-week iterations, maybe you only need a two-week buddy system, but the idea is this person tells the new hire where are the bathrooms, how do I compile, where do people go for lunch, and I have somebody who takes me by the hand and shepherds me through all of these things.

Common Technical Hiring Mistakes

What are some common mistakes you see people making when hiring for technical roles?

I see any number of common mistakes when it comes to hiring for technical experience. The first is an emphasis on tools. I got to tell you. Once you’ve learned one or two computer languages, you can learn any computer language. It doesn’t take very much time. I’m a dinosaur. I started to program when we had assembly language and I thought Fortran was terrific because it was a higher level language. Then I used I used something that was like Forth and then I moved on to Lisp. Look at those languages right there. Totally, totally different. I will admit that my first two or three Lisp programs looked a lot like Fortran, but I finally got the hang of writing object-oriented code. We have so much higher-level languages now, right? The idea that people can only learn one language and we have to have this emphasis on ‘if they don’t have three years of Ruby’ or something, then we cannot hire them. That’s just nuts. Even I could learn Ruby in less than three years, right? I would be good at it because I have a background as a programmer. Yeah, my first couple of programs might not look like anything useful, but I would learn from that.

That’s the whole point of the buddy system, right? If it’s a new language, you get somebody to give you feedback. This is one of the things I really love about pairing and, especially, pairing when you trade off pairs. After you work with somebody intensely for a couple weeks, if you then have what Arlo Belshee calls promiscuous pairing, right, where I pair with somebody for twenty minutes or forty-five minutes, maybe, the maximum, and then I go and pair with somebody else, I’m going to learn how everybody uses the tools and technology and I’m going to learn that really, really fast. An emphasis on tools and technology is one of the biggest mistakes that we make.

On the flip side, what are some mistakes you see candidates making who are looking for technical roles?

Oh, sometimes candidates are their own worst enemies. I see people who don’t have a profile picture on LinkedIn. LinkedIn is a social network. It makes me crazy when they do this. On my Hiring Technical People blog, I have a whole lot of job search tips and traps, so I’ve enumerated any number of them. One of them is not making time to understand what your references would say about you. Not having a target list. I hear all kinds of people saying, “I sent out three hundred resumes or a thousand resumes.” There are not a thousand people who would hire you. You are not right for a thousand different companies, right? I know I would have a limited number of companies, but on the range of twenty to twenty-five in my geographical area that would love to have me. You want to find people. You want to look at a target list. You want to make sure your social networks are up and running. You want to say, “How do we do this so that I show my best self to my potential hiring manager?”

There is no one right time that you should be able to look for a job. I know people who were laid off one week and found a job and started the next week. That’s pretty rare right now because the automated tracking system, the applicant tracking systems that we have in organizations, actually filter more people out than they filter in, which is stupid and crazy. That’s why you need to network to find a hiring manager because if you make a one-on-one connection with a hiring manager or with somebody in that organization, you have a much better chance of actually finding your right job or finding a job that fits you.

Johanna, thank you so much for joining us.

This was great.

by Gareth Wilson at July 08, 2015 10:12 AM

Giles Bowkett

Let The Other 95% Of Reality In

Here's a dramatic reading of a Paul Graham blog post.

Thanks for watching! I hope you enjoyed it.

If you're interested in a more serious analysis, here's a gigantic, detailed breakdown.
American technology companies want the government to make immigration easier because they say they can't find enough programmers in the US. Anti-immigration people say that instead of letting foreigners take these jobs, we should train more Americans to be programmers. Who's right?
First of all, this is a false dichotomy. I don't think I've ever heard "anti-immigration people" say anything about training more Americans to be programmers. The only times I've ever heard "anti-immigration people" express any opinions in American politics, those opinions have consistently been racist opinions about Latinos in general and Mexicans in particular.

But Mr. Graham opened up his post with a cliffhanger. "Who's right?" he asked.
The technology companies are right.
I bet you didn't see that one coming.
What the anti-immigration people don't understand is that there is a huge variation in ability between competent programmers and exceptional ones...
Mr. Graham never bothers to identify "the anti-immigration people," and I'm not totally convinced that they exist at all. I mean I know anti-immigration people exist in general, but I think the "anti-immigration people" Paul Graham wants to "debate" here are fictional. Likewise, I could be willing to assume that people who spend most of their time making racist remarks about Latinos might also be unaware of the varying levels of programming talent. But it's not necessarily true, and I've never really seen anything which proves it to be the case. I've even seen counter-examples.

If we're dealing in unsubstantiated arguments, I would feel more comfortable with an argument like "the set of people who make racist remarks about Latinos is unrelated to the set of people who have opinions about the distribution of programming talent." Although I cannot prove it, I have more faith in it. It also doesn't require you to assume that all these "anti-immigration people" don't know what the word "exceptional" means.

But let's keep following Mr. Graham into the hole he's digging for himself:
...and while you can train people to be competent, you can't train them to be exceptional.
This is simply false. There's a book which explains how to train people to be exceptional. It was written after the author visited specific, unusual schools all over the world, each of which reliably churns out exceptional students, including a tiny Russian tennis school which has produced more top-20 women players than the entire United States, and an American music school which covers a year's worth of music training in seven weeks. (Alumni include Yo-Yo Ma and Itzhak Perlman.)

Exceptional programmers have an aptitude for and interest in programming that is not merely the product of training.
Again, Mr. Graham seems to think the "anti-immigration people" have never heard the word "exceptional" before. This is only just barely better than quoting from the dictionary.

Then we make a pretty wild jump.
The US has less than 5% of the world's population. Which means if the qualities that make someone a great programmer are evenly distributed, 95% of great programmers are born outside the US.
That would be the most gigantic "if" that anybody ever built an essay on, if Mr. Graham were being real with us when he refers to his blog posts as essays, but he's not. They're blog posts. Even if you wanted to humor Mr. Graham's pretensions, this "essay" would be a polemic at best, since it fails his own basic rule that "a real essay doesn't take a position and then defend it."

Nonetheless, this "if" is still a pretty huge "if" to build a blog post on, when your blog is as widely-read as Mr. Graham's.

Does Paul Graham even know who this is?

Mr. Graham doesn't give a moment's consideration to this "if." He just graduates it to the status of fact without ever doing anything to justify that leap. So let's dive in for a second. Are the qualities which make someone a great programmer evenly distributed, throughout the entire world?

Some of these qualities probably are evenly distributed throughout the entire world:
  • Intelligence
  • Curiousity
  • A good memory
  • Eagerness to build, analyze, and experiment
While some other relevant qualities probably are not evenly distributed throughout the entire world:
  • Basic familiarity with machines which use electricity
  • The ability to read and write
  • The ability to read and write English
  • The ability to read and write specific machine-oriented dialects of English
  • A general understanding of Boolean logic
  • A precise understanding of the Unix family of operating systems
  • A lifetime of owning expensive machines, and feeling free to break them in order to satisfy some casual curiousity
Remember, the world is actually a very big place, and it's full of people who don't give a fuck about the Internet. There are still many places in Europe where you can hardly even book a hotel online. To be fair, Vietnamese programmer education sounds absolutely fantastic. And programming languages are not entirely a subset of English. But I think it's safe to say that Mr. Graham's 95% number is flat-out ridiculous, and not worth taking seriously for even a moment.

Access to electricity is not evenly distributed, but maybe a truly great programmer will still find a way.

Mr. Graham didn't bother with this question, however. Instead, he said:
The anti-immigration people have to invent some explanation to account for all the effort technology companies have expended trying to make immigration easier. So they claim it's because they want to drive down salaries.
But this "explanation" did not actually have to be "invented," because it's already a proven fact. Google, Apple, and dozens of other tech companies have been caught illegally colluding to drive salaries down.

The illegal wage-fixing scandal Mr. Graham somehow doesn't seem to know about is absurdly well-documented.

If you don't bother to find things out before blogging about them, then you might think that this illegal conspiracy had nothing to do with salaries and was only about being afraid of Steve Jobs.

You would be wrong.

Google's CEO chastizes Google recruiters for driving up salaries.

Mr. Graham apparently somehow missed this incredibly well-documented scandal that everybody was talking about. So, unperturbed by facts, our misguided hero rabbits on:
But if you talk to startups, you find practically every one over a certain size has gone through legal contortions to get programmers into the US, where they then paid them the same as they'd have paid an American.
I'm sure this is true of startups, but it's false of Silicon Valley in general. And, while Mr. Graham's saying that if you want to understand immigration, you should talk to startups, I believe that if you want to understand immigration, you should talk to immigrants.

I worked with a guy one time who worked harder than me, for longer hours, while making less money, because he knew that if our employer got pissed off, they could put him on a plane back to his war-torn home country. He didn't want to go back and get killed. He wanted to get his family into the United States along with him.

I have absolute sympathy for this guy. First, he was a great guy. Plenty of people could have been mad or resentful in a situation like that. His approach to life was to help as many people as he possibly could. He was able to help me, so I was grateful to him, and he had this awesome attitude, so I admired him. Plus he was funny.

My own parents came to the US from another country, and although it was not a war-torn country, I'm a first-generation American, so even in a festival of straw man arguments like Mr. Graham's blog post, you'd have a hard time lumping me in with the "anti-immigration people." I'm very glad that my friend got to come to this country, and I feel like, for him, accepting a slightly lower wage than I got at the same company was not such a bad deal in context — even though he worked much harder than I did, and was much more important to the success of my team, and I feel kinda guilty about that.

However, Mr. Graham's argument, that great programmers get paid the same at startups whether they're American or not, is completely irrelevant in the case of my friend, a very good programmer who was underpaid at a company which was only just barely too large and established to qualify as a startup.

Most imported programmers in Silicon Valley look more like my friend than the startup programmers Mr. Graham is talking about. And even then, the overwhelming majority of immigrant programmers are worse at programming than either my friend or Mr. Graham's examples.

I've certainly encountered exceptionally talented programmers from other countries, but they're rare for the same reason exceptionally talented programmers from America are rare: exceptional talent is rare, by definition. The silliest thing about Mr. Graham's argument is he wants national policy to be optimized for exceptional cases.

It's odd that I have to say this about a venture capitalist, but Mr. Graham should stop asking for government handouts. He's already rich, and it's not the government's job to make it easy to beat the averages.

Back on the subject of startup founders paying top dollar for foreign programmers, Mr. Graham continues:
Why would they go to extra trouble to get programmers for the same price? The only explanation is that they're telling the truth: there are just not enough great programmers to go around.
That is not the only explanation at all. Here's a simpler explanation: they fucked up. Have you ever met a startup founder? Quite a few of them are complete fucking morons. Even some of the successful ones seem batshit insane.

Plenty of startup founders are quite smart, of course. And I'm not saying that bringing in a great programmer from another country can't be a good idea. But Mr. Graham suffers really badly throughout his blog post from a total blindness to the many, many facts and events which undermine his argument, and to say "the only explanation" in that context just begs for a reality check.

People who run startups make mistakes all the time. They're people.

One way startup founders fuck up: failing to recruit the best programmers they can, irrespective of where they're located. Maybe there are not enough great programmers who are willing to live in San Francisco to go around. But startups which hire remote have a much larger talent pool to draw from. If you adopt a modern working style, you might have less hoops to jump through.

One remote worker had this to say on the topic:
I just finished a remote job search. I'm in Los Angeles, and most of the companies I talked to were in SF. I had previously worked remotely for a company in New York (Etsy), and I was honestly really surprised how hostile SF companies were to the idea.

I have been on both sides of remote work, so I totally get that it's not a slam dunk. It works a lot better for companies that have a strong culture established in a home base, and it works a lot better for experienced folks than green college hires. I have shut down the interview process myself when I felt like working remotely wouldn't work out at particular companies.

Even given all of that, I was pretty amazed how quickly some of the conversations got shut down. No remotes, we don't care who you are or what your experience is. I didn't talk to any companies outside of SF that were that quick to say no.

FWIW I landed at [the YC company] Stripe, which in fairness is probably one of the companies pg had in mind when writing his original article.
As a former San Francisco resident, I honestly think this error is inevitable in San Francisco. One of the few ideas which is utterly unacceptable in any discussion among people in the Bay Area – who are normally very open-minded people – is the idea that the Bay might not be the only place in the universe worth living in.

Mind. Blown.

I liked San Francisco, but it's not the only thing out there. London's better for music. Portland's better for open source. Los Angeles is better for street food, attractive single inhabitants, espresso, weather, parking signs, and in some cases even public transportation. (Bay Area public transportation is better if you want to go a long way, but Los Angeles completely wins at simple, local use.) As for New York, don't even get me started.

Plus, as beautiful as San Francisco is, it's packed with people like this:

Imagine you've already got a hangover and you have to deal with some asshole using an iPad app to control his girlfriend's mind.

Back to Mr. Graham:
I asked the CEO of a startup with about 70 programmers how many more he'd hire if he could get all the great programmers he wanted. He said "We'd hire 30 tomorrow morning." And this is one of the hot startups that always win recruiting battles. It's the same all over Silicon Valley. Startups are that constrained for talent.
But not so constrained for talent that they're willing to explore remote work.

Matt Mullenweg pointed out how absurd this was, and I myself took Mr. Graham to task for this on Twitter:

He responded that remote work is only good for building certain types of companies, but I can't find the remark. I think he deleted it, but it's also possible that Twitter search failed me. I won't get into it, beyond saying that I highly doubt anybody's done any actual research which could grant any credibility to that 20th-century attitude at all.

Mr. Graham continues:
It would be great if more Americans were trained as programmers, but no amount of training can flip a ratio as overwhelming as 95 to 5. Especially since programmers are being trained in other countries too. Barring some cataclysm, it will always be true that most great programmers are born outside the US. It will always be true that most people who are great at anything are born outside the US.
Again, this 95% number is ridiculous, and Mr. Graham is starting to get carried away with this whole "born outside the US" thing. He hasn't even substantiated the claim that most great programmers are born outside the US today, and obviously most people who are great at American football are born inside the US. But rather than slow down, Mr. Graham gets stupid nutty:
Exceptional performance implies immigration. A country with only a few percent of the world's population will be exceptional in some field only if there are a lot of immigrants working in it.
Brazil's population is smaller than that of the United States. The Brazillian national football (soccer) team is the most successful in the world, and has been so for more than fifty years. There are not a lot of immigrants working in the Brazillian national football team.

Given enough time, I'm sure I could find about 50 more counter-examples, at least. The Swiss watch-making industry is probably made up mostly of Swiss nationals. Enzo Ferrari and Ferruccio Lamborghini were both native Italians. Immigration probably does not explain the French advantage in manufacturing cheese, or the Japanese superiority at making anime, or the exceptional quality of British bondage gear. Thailand completely dominates the field of elephant feces tourism, and the source of their advantage is probably not imported talent.

The coup de grace comes next. Mr. Graham, not content with his extra large bullshit enchilada, demands a colossal side order of what the fuck are you even talking about:
But this whole discussion has taken something for granted: that if we let more great programmers into the US, they'll want to come. That's true now, and we don't realize how lucky we are that it is. If we want to keep this option open, the best way to do it is to take advantage of it: the more of the world's great programmers are here, the more the rest will want to come here.

And if we don't, the US could be seriously fucked. I realize that's strong language, but the people dithering about this don't seem to realize the power of the forces at work here. Technology gives the best programmers huge leverage. The world market in programmers seems to be becoming dramatically more liquid. And since good people like good colleagues, that means the best programmers could collect in just a few hubs. Maybe mostly in one hub.

What if most of the great programmers collected in one hub, and it wasn't here? That scenario may seem unlikely now, but it won't be if things change as much in the next 50 years as they did in the last 50.

We have the potential to ensure that the US remains a technology superpower just by letting in a few thousand great programmers a year. What a colossal mistake it would be to let that opportunity slip. It could easily be the defining mistake this generation of American politicians later become famous for. And unlike other potential mistakes on that scale, it costs nothing to fix.

So please, get on with it.
As far as I can tell, his argument is that we have to take action immediately, because conditions could change over the next 50 years. And it would cost politicians nothing to abandon anti-immigration policies, somehow. And nobody will remember Ferguson, or the wars in the Middle East, or the bank bailouts, or Edward Snowden, or climate change, but we'll curse the name of every senator who ever voted against H1 visas.

And somehow, we can find "a few thousand great programmers every year." No, we can't. Mr. Graham flatters himself when he refers to his blog posts as essays, but back in the day, he actually did write essays. One of his best essays argued that identifying great programmers is incredibly difficult, even for other programmers.
It's hard to tell great hackers when you meet them... You also can't tell from their resumes... the only way to judge a hacker is to work with him [or her] on something...

Hackers themselves can't tell how good they are...

If there is a Michael Jordan of hacking, nobody knows, including him [or her].
So we need to import a few thousand exceptional programmers, even though we have no way to identify them in the first place. And language barriers will not make identifying them any harder. And somehow we're going to do this on a yearly basis.

Meanwhile, in reality, Mr. Graham's worst fear came true a long time ago. Most of the best programmers have already collected in one hub, and it's not here, or there, or anywhere. It's called GitHub. It was built as a distributed company around a distributed version control system, and — because Conway's Law works in both directions — it is training every programmer in the world to do distributed work.

Silicon Valley was once the center of the universe for programmers. In a sense, it mostly still is, kinda. But the real center of our universe is no longer a physical location. The real center of our universe is a virtual location which is training us all, every single day, to work remote.

And even GitHub is only barely central. There's Bitbucket and GitLab, and any communication through GitHub is typically supplemented with additional communication through IRC, email, videoconferencing, Slack, Twitter, SMS, and more. The best-case scenario for face-to-face communication in 2015 is that it's how you augment your other channels.

Do we seriously need to explain to a guy with three Ivy League degrees that a decentralized networking technology will have a decentralizing effect on every industry that uses it? Can't we just send him to the Wikipedia page for economics or something?

Some of Mr. Graham's other writing is much better than the nonsense I've dug into here. You can also create a great Paul Graham essay if you take one of his classics, The Python Paradox, load it up in Vim, and run a quick s/Python/remote/g. But if you ever took his arguments on immigration seriously, even for a fraction of a second, then you owe it to yourself to do the following simple exercise.

Make a list of all the programmers who fit these criteria:
  • They created a technology which completely redefined its category.
  • You can't find them living in the Bay Area.
  • You can find them working on GitHub.
Your list will be big, and it will include Linus Torvalds (who lives in Portland), John Carmack (a small town in Texas), David Heinemeier-Hansson (Chicago and/or Barcelona), John Resig, Jeremy Ashkenas, Rich Hickey (all in New York), and many, many others.

Or, for a more amusing list, count the number of YC companies which hire remote, despite Mr. Graham telling me on Twitter that hiring remote isn't appropriate for the type of work YC companies do. I know of at least seven such companies, and I haven't even tried putting it in a search engine.

The alleged Bay Area "talent drought" is only half real. Programming skill is certainly both valuable and rare (although well-managed tech companies are probably rarer, and that might not be a coincidence). But the other half is self-inflicted, because an industry organized around innovation and disruption is clinging to a bafflingly archaic work culture. VCs and founders are shooting themselves in the foot, while the execs at established companies form illegal conspiracies to keep programmer salaries low.

("Low" is a relative term, of course, but housing costs are relative too.)

No thanks.

Let The Other 95% Of Great Programmers In is the worst thing Mr. Graham has ever put on That's why I portrayed him as intoxicated in the dramatic reading. I couldn't think of any other way to reconcile his obvious intelligence with the fact that he wrote that thing.

(Likewise, I used the uniform of a Silicon Valley middle manager as my costume because I don't think Mr. Graham's given one iota of thought to what these words might mean coming from Silicon Valley in general. It's entirely possible he constructed his wretched pile of illogic with some honest mistake at its foundation. But if that "essay" made any real progress in national politics, it would be promoted for incredibly dishonest purposes, by incredibly dishonest people.)

In conclusion:

Dat Footnote Tho

Mr. Graham's post contains a few footnotes. I'm not going to bother with them, except to point out that one footnote includes the hilarious phrase "it should be easy to write legislation." And to quote this bit:
it is dishonest of the anti-immigration people to claim that companies like Google and Facebook are driven by [a desire to drive down salaries]
He says this despite the fact that Google was sued for illegally agreeing not to hire people away from numerous specific companies — which suppressed salaries — in a well-documented case which Google has not contested. The judge rejected Google's $324.5M settlement offer because it was too low.

Again, quoting Eric Schmidt, Google's CEO at the time:
Google is the talk of the valley because we are driving up salaries across the board... We need to get this fixed.
If your CEO tells you that driving salaries up is a problem, what direction might you imagine he prefers?

Mr. Graham's argument equates Google with startups, but calling Google a startup today is like calling Microsoft a startup in 1998. It verges on delusion and it leads to completely ridiculous claims. Graham says "the anti-immigration people" are being "dishonest." But I'm a first-generation American. My parents are immigrants. And I'm pointing out something Google actually DID.

If your argument implies that it is dishonest for people to remind you of facts, your argument is probably flawed.

Speaking as a first-generation American, I'm not against immigration. I'm against indentured servitude. I'm against corporations using fraud and collusion to evade both labor laws and the real market price of programming ability. And I think most American programmers are uncomfortable with H1 visas for the same reasons.

By the way: at the company I work for, Panda Strike, we've hired programmers from France, Argentina, Germany, and India. Some of them live in the US, some of them live in their home countries, some of them have wandered through Australia and Thailand while working for us.

We're certainly aware that programming talent comes from all over the world. And I'm not saying American immigration law is perfect. There are foreign-born programmers we would hire in a heartbeat if their visas didn't make them captives of their current employers.

But we use modern technology and modern development practices, and we recommend you do the same. One easy way to start: let the other 95% of American programmers in. If you're building a company, and you want access to the best possible talent pool, you need to know how to manage remote developers. If you want to learn about that, check out our blog.

My opinions are my own, of course. That was just a shout-out.

Also, a quick note: there are some uncredited photographs in the video. Lost track of the links when I was making it. If they belong to you, sincere apologies, and feel free to email me:

by Giles Bowkett ( at July 08, 2015 09:32 AM

July 07, 2015

Mark Bernstein

Tinderbox: Rules for Writers

Tinderbox: Rules for Writers

Micah Joel writes about Tinderbox Principles For Writers.

  • Don’t throw anything away
  • Make it easy to store things
  • Let emergence happen
  • Don’t fear the docs
  • Be part of the community

Great stuff -- and stay tuned for more.

July 07, 2015 04:32 PM

Fog Creek

How ROLI’s Fast-Growing Team Communicate and Stay Transparent with FogBugz Ocelot

ROLI is a design-led music technology start-up, who make innovative hardware and software products and are based in London, UK.

We spoke to Elliot, a Software Tester and Scrum Master at ROLI, about their use of FogBugz Ocelot and how it has helped their fast growing team to communicate and stay transparent, whilst delivering great customer service.


The Problem

“In the last year, we’ve grown significantly. When I started here 12 months ago there were 25 people. Now we’re up to 70 people. Before, it was much easier to communicate with a simple conversation or an email, but as we scaled up it became harder to keep that dynamic communication and transparency with the same tools.”

The Solution

So they started using FogBugz Ocelot. It “definitely started out as a solution to capture customer information, track support issues, inquiries, and so we could easily pass those inquiries to other teams. Being the Scrum Master for the software team as well, I suggested we try it for project development and use it in an Agile way.”

The Result

Using FogBugz has worked out well for ROLI. “People have picked it up quickly, and taken it onboard with little friction. It’s been good.” An increasing number of people within ROLI have started using it too. At this “larger scale, it shows its full potential and benefit.” “I’ve also started looking into the API” and “I like the Wiki a lot.” ROLI “put information in the Wiki for each iteration” along with their “vision documents.”

Overall Elliot says that FogBugz “has a lot of flexibility”, so whilst “there are a lot of solutions out there for software bug tracking, the problem is being able to relate customer inquiries to those issues and then also being able to have something for tracking hardware issues as well.” With FogBugz “it doesn’t matter what it is, it can be can be anything… it does everything we need it to do at the moment and I can still see the potential for more.”

by Gareth Wilson at July 07, 2015 10:58 AM

July 06, 2015

Dave Winer


A new JavaScript app that downloads all the enclosures in a river file produced by River4.

Runs in Node.js of course. I use it to download all the MP3s from

July 06, 2015 11:39 PM

Possible browser bug?

Here's a video demo of a bug in one of my sites.

Any help finding a fix or workaround much appreciated. Thanks!

PS: I'm using Google Chrome/Mac v43.0.2357.130 (64-bit).

July 06, 2015 07:31 PM

Fog Creek

Meet the Interns

One thing I’ve always loved about Fog Creek is that it isn’t an overly serious place. Not to say we don’t take our work seriously (because, seriously: we do!) just that there’s a certain amount of silliness in the office, and it makes the day to day of being a Creeker pretty darn pleasant.

One of the few things about which we are serious, however, is recruiting. Our interview standards are high, and our methods long-tested and specific. Arguably the strongest and most lauded of those methods is our Summer Developer Internship Program.

Our Internship program is distinguished and unique. Each of our interns gets individual mentorship from one of our developers, and the opportunity to write code that will actually ship to our customers, from our HQ in New York. The perks are great, too. For the duration of their term, we set our interns up with a luxury dorm-style apartment in New York, and we take them out on adventures each week so they make the most of their time in the Big Apple – from dinners at some of New York’s best restaurants, to trips to Montauk and various Karaoke spots. Our interns get to explore the city through the eyes of people who love it here: us!

Needless to say, spots in each year’s class are highly coveted, and it isn’t easy to secure one! Over the course of a typical intern recruiting season, we receive between 500 – 600 resumes, from which we phone screen between 150 – 200 candidates, conduct roughly 25 in-person interviews and narrow it down to anywhere from 3 to 10 interns per summer class, depending on our need.

Our program is also a terrific jumping off point for young developers at the beginning of their careers. Of the 70 interns we’ve hired between the summer of 2003 (our first intern class) and the summer of 2014 (most recent hirable class), 14 have gone on to become full-time Fog Creek employees, including our current CTO. That’s 20%! From there, 4 have moved on to our sister company, Trello, and 1 is the VP of Engineering at our other sister co., Stack Exchange (Hi David!). We’ve got Creekers at other companies, too; past interns have gone on to work at places like Yelp, Facebook, Google, Khan Academy, Foursquare, Twitter, the list goes on.

Summer Internship

Have I given you enough evidence that our interns are incredible? Because they are. And you should meet the current class. Without further adieu, I present you: Fog Creek’s 2015 Intern class, Team Kudu!

Michael Stewart

michael (1)

Hi! My name is Michael Stewart and I’m from Syosset, New York. I’m a rising senior at Johns Hopkins University studying, as you might have guessed, Computer Science. In my free time, I enjoy watching more TV and movies than I would like to admit and singing in my a cappella group, Ketzev. This summer I have been working on chat integration with FogBugz.

Greg Weil

greg (1)

Hi! My name is Greg Weil, and I’m from Middletown, NJ. This summer I’m working with Tim to add importers and other useful tools to FogBugz. At Rensselaer Polytechnic Institute, I dual major Computer Science with Games and Simulation Arts and Sciences. In my spare time, I like to make games featuring explosions.

Steven Lyubomirsky

Stephen (1)

I assure the skeptics that I am indeed the same person as the intern from last year by the same name and that it is not, in fact, purely coincidental that I am also a member of the Princeton class of 2016 and look strikingly similar, unless I have a doppelgänger in my class whom I have not met. It could also be the case that I am an elaborate android with implanted memories so convincing that it has never occurred to me for a moment that the real Steven Lyubomirsky might be in indefinite cryostasis in Alaska. but I think Occam’s Razor applies. Whether human or android facsimile, I will be assisting this summer with Project Foghorn.

Hurray for our interns!

Wanna learn more about the Fog Creek Developer Internship? Recruitment for Summer 2016 begins this September!

by Allison Schwartz at July 06, 2015 09:03 AM

Tim Ferriss


Chris Fussell and Stan McChrystal on the Tim Ferriss Show

General Stan McChrystal (Photo credit: David E. Alvarado, ISAF Public Affairs)

Stanley McChrystal (@stanmcchrystal)  retired from the U.S. Army as a four-star general after more than 34 years of service. Former Defense Secretary Robert Gates described McChrystal as “perhaps the finest warrior and leader of men in combat I ever met.”

From 2003 to 2008, McChrystal served as Commander of Joint Special Operations Command (JSOC), where he was credited with the death of Abu Musab al-Zarqawi, leader of Al-Qaeda in Iraq.

His last assignment was as the commander of all American and coalition forces in Afghanistan. He is a senior fellow at Yale University’s Jackson Institute for Global Affairs and the co-founder of CrossLead, a leadership consulting firm.

In this episode, we discuss everything imaginable, including:

– Why he only eats one meal per day, and what he eats
– His exact exercise regimen
– Tactical and psychological lessons of combat
– Self-talk used before and after difficult missions
– The development of mental toughness
– Favorite books, documentaries, etc.
– And much, much more

Chris Fussell (@FussellChris), who also joins the conversation, is a former U.S. Navy SEAL officer, former Aide-de-Camp for General McChrystal, and a current senior executive at CrossLead.


Want to hear a podcast related to personal security in the digital age? — Listen to my conversation with Marc Goodman, a former FBI futurist focused on defeating high-tech crime. Learn how not to be an easy target — stream below or right-click here to download:

Also, don’t miss my interview with hacker Samy Kamkar. — Listen to our conversation on conquering online dating, opening locked cars, and his story of accidentally taking down MySpace with the fastest-growing “worm” of all time (stream below or right-click here to download):

This episode is sponsored 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 The 4-Hour Body and did not get paid to do so.  Get 50% off your order at Athletic

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:  In your opinion, what makes a good leader, and who exemplifies those qualities? Please share in the comments.

Scroll below for links and show notes…


Selected Links from the Episode

Website | Twitter | Facebook | LinkedIn

Show Notes

  • Why eat one meal per day? [5:36]
  • Understanding SOCOM and JSOC [9:21]
  • On the role of an aide-de-camp (ADC) [13:21]
  • How Chris Fussell reduced friction as Stanley McChrystal’s ADC [15:46]
  • Stanley McChrystal’s daily exercise habits and why they’re important [19:36]
  • Most gifted books for those entering combat situations [28:21]
  • On West Point: Slugs and Area Tours [31:01]
  • On mischief in school and success in the Army [34:11]
  • How peer reviews worked at West Point [35:11]
  • On vetting applicants for important positions [38:11]
  • Stanley McChrystal’s selection criteria for candidates [47:11]
  • Why Chris Fussell left the service early and defining “intelligence fusion cells” [53:21]
  • The most underrated military leaders? [57:36]
  • Fanatical audiobook listening habits and book selection [59:36]
  • Why Stanley McChrystal personally attended battlefield operations [1:06:21]
  • Hopeless dilemmas and managing self-talk in high-pressure environments [1:14:31]
  • Who comes to mind when Chris Fussell thinks of “successful”? [1:20:21]
  • Common organizational misperceptions between civilians and military personnel [1:24:21]
  • Meditation practices [1:29:11]
  • The “Red Team” concept in the military [1:31:11]
  • What are good ways for the average citizens to practice military strategy? Games? Activities? [1:36:06]
  • Stanley McChrystal on chess vs. backgammon and the complexities of modern day leadership [1:38:51]
  • What surprised Stanley McChrystal about Yale University [1:41:21]
  • The story behind Team of Teams and modern leadership challenges [1:44:01]
  • Stanley McChrystal’s advice to his thirty-year old self [1:55:06]

People Mentioned

by Ian Robinson at July 06, 2015 05:53 AM

July 04, 2015

Dave Winer

Let's create an open source Medium clone

To weekend JavaScript hackers..

I would love to help create an open source Medium clone, so you don't see things like this. An open source program putting user advisories in a silo. This is wrong. These docs should be put in a place that has some chance of longevity.

I've done half of the work. Check out MyWord Editor. It's also on GitHub.

Then check out medium.js. Looks pretty good.

Can you figure out how to merge the two? I want to make the text area part of MyWord Editor to use medium.js, and do it in a nice way. Once we have that, I can take it from there.

I put a fair amount of time trying to get this to work, but failed to get a reasonable subset of medium.js to work in a standalone app. Once we have this connection, we'll be most of the way there. Not only will we have an editor, but the content will be stored in an S3 bucket. If you want to run the back-end, that's open source too.

For the right person this is probably a two-session job. A good chance to work together to help the web.

PS: This is a perfect project for Independence Day weekend!

PPS: Here's an example of a page rendered by MyWord Editor. Click the hamburger icon for a list of other examples.

Update #1

Somehow I got on the trail to Medium-Editor, which, knock wood, appears to be just what I was looking for.

The difference between it and the others is simply docs. Their docs lead you step by step through integrating it with your app. I was able to put together a quick prototype in a half-hour and didn't hit any glitches along the way. It. Just. Worked. That's what I aspire to with my own published toolkits.

So, unless anything terrible happens, and of course it could, I expect to have a new version of MWE that uses this editor in place of the plain HTML <textarea>.

Update #2

I'm integrating Medium-Editor with MyWord Editor.

There are some display glitches, but it works.

Here's a page I edited with the new version. Look at all the wizzyness.

Update #3

Well, the docs aren't actually that good. What I need is a simple app that does most of the things a text editor does, so we have code to crib that works. Because it doesn't exist, I have to create it before I can attempt to make it work for real inside MyWord Editor.

Here's a test app. It saves the text you type into localStorage, as you type it.

When you go over 6 lines, something very bizarre happens. The lines appear outside the box. And they display in a very odd way. Here's a screen shot.

Ideally, I'd like it to behave like a normal textarea, and when the text grows longer than the box, a vertical scrollbar appears. I'd settle for it working without these display glitches. I'll keep experimenting to see if I can stumble on the right way to do this.

July 04, 2015 01:55 PM

July 03, 2015

Lambda the Ultimate

Don Syme receives a medal for F#

Don Syme receives the Royal Academy of Engineering's Silver Medal for his work on F#. The citation reads:

F# is known for being a clear and more concise language that interoperates well with other systems, and is used in applications as diverse asanalysing the UK energy market to tackling money laundering. It allows programmers to write code with fewer bugs than other languages, so users can get their programme delivered to market both rapidly and accurately. Used by major enterprises in the UK and worldwide, F# is both cross-platform and open source, and includes innovative features such as unit-of-measure inference, asynchronous programming and type providers, which have in turn influenced later editions of C# and other industry languages.


July 03, 2015 07:16 PM

Dave Winer

Too much linear thinking in news

Ken Doctor asks if there is a business model for news lurking in the midst of Apple, Twitter, Facebook et al. As all such pieces that begin this way, he concludes, maybe, but he's not sure how.

The correct answer is no, as long as the tech industry controls news distribution, nothing good is going to happen for journalism.

The linear way to think

Many journalism thinkers approach these questions linearly.

  1. Here's what we do now.

  2. Some new reality has taken hold.

  3. Change what we do to continue to do what we used to do.

I liken it to picking up a box and moving it from one place to another. When you're done it's still a box. But the box must become a sled. Or a merry go round. When it's done it won't seem like a box.

Change makes things different

Look at the components that make up our online lives today.

  1. Wikipedia wasn't a linear change from Britannica, for example because it didn't preserve Britannica's business model.

  2. Tinder is radically different from the singles ads that used to run in local newspapers.

  3. Spotify is fundamentally different from FM radio. So much so that Apple's new music service is re-introducing the idea of FM radio. It'll be interesting to see if we're interested in having our music programmed for us, since we've been able to do the programming for the last 15 years.

I think it's safe to extrapolate that news will work radically differently too.

Note: The title of this section is meant to be funny.

Two cents about Circa

I've wanted to comment on Circa since they suspended operation.

  1. I think they were on to something. Starting topics, and then adding stories to each topic as the news comes in. A story isn't something that's published once and done, it's more of a process. It isn't just a linear re-shaping of what we did in the print era. Maybe now that they've suspended operations, one of their developers could do a YouTube demo of how the editorial tools worked? I'm sure I would find it interesting.

  2. If the editorial tools were good and reasonably easy to use, I wish they would have made them the product, and hired journalists, as needed, to mold an editorial product created by the users of the product. Find the good stuff and surface it. That's how news must scale to meet the Web.

  3. Circa resisted joining the open web. I think that was a fundamental mistake. They needed to find more readers, to do that they had to find the people who distribute links. Linkblogging is a real thing, and there are people who are good at it. But if there's no URL for each story, you can't linkblog it. So they didn't grow fast enough. I think this is almost mathematical. No one, going forward, should try this. Each story must have a way to get to it through a Web address. Even if Facebook et al own the distribution system.

How to

So if linear isn't the right way, what is?

Circa had the right approach. They asked: How can we create an incredibly fantastic new way of doing news that wasn't even remotely possible before the Web? Then, follow your nose. Build a prototype as quickly as possible, and use it. Iterate. Use it some more. Etc.

And that reminds me...

Use it!

Use it. Use it. Use it. Repeat that 10000 times. You need to use it. Or it won't work.

Why is Twitter failing where Facebook is thriving? Zuck was teasing them when he said they needed more stock to keep Wall St from interfering. Imho that's not great advice. Better: Twitter would be a formidable competitor if they had leadership that understood their own product. Zuck uses Facebook confidently and skillfully. There's the difference. Leadership of users, because the top guy is a user.

There's never been a long-term thriving tech company that wasn't run by a user.

If you're not excited by news, get out of the way

If you don't love the product, move aside and make way for someone who does.

Think about it this way, if you wanted to run a brewery, but you didn't love beer, how great would the product be? Not too great. Or if you ran a ski area, but didn't like to ski. How could you judge whether an idea is good or not? Take a poll? Run a focus group? That only works (somewhat) for established businesses, not revolutionaries, disrupters, innovators. If you want to make a big difference you have to have a big ego and a big vision. There's something inside you that has to come out. And you won't take no for an answer.

It's true in tech, but it's also true in news. Maybe that never occurred to anyone that news, at one time, was itself new. It's now so old and set in its ways that even the slightest bit of movement, even if it's just an experiment, is thought of as progress.

But now news is new, again. The question isn't how to remain what we always were, rather it's how to become what we now can be.

July 03, 2015 01:09 PM

July 02, 2015

Dave Winer


This is pretty technical stuff, but it's indicative of the kind of work we're doing with River4.

It's a publishing system. I don't think there's anything else like it in the open source world.

Something we should be connecting on with journalists. I could easily teach smart users how to set up a river of news.

They would instantly be more powerful than anyone else in news!

July 02, 2015 03:54 PM

Mark Bernstein

In The World

A surprising number of people live as in a cloister.

At Wikipedia, I’ve been trying to get a peace agreement on Gamergate. The facts on the ground are now clear. It’s time to end the conflict which has raged over nine months, a dozen Wikipedia pages, more than a million words of debate, and dozens of blocks and bans and sanctions extending from Gamergate Controversy to “Campus Rape” and Lena Dunham’s sister.

  • Gamergate wanted to use Wikipedia to launder its reputation while using other parts of Wikipedia to smear its enemies.
  • Wikipedia has pretty much decided to say “no, you can’t do that.”

It took too long, it cost too much, the resolution was too uncertain, but here we are. Even if Wikipedia again lost its mind and gave Gamergate what it wants, the outcry of a watchful would soon restore reason. There’s no need for 50,000 words of wrangling and five banned zombies every month; it's just vexation and waste of effort.

The Gamergate attack on Wikipedia has failed. What could they do now? They could make their way in the world. If they did – if Gamergate actually accomplished stuff, if (for example) they published insightful studies of ethics in games – then newspapers would report it, scholars would write about it, and Wikipedia would eventually cover it. That’s their best move, the only productive move I can see that’s left on their board.

So, why does Gamergate stick to the current operation, which pairs sliming women in the software industry with a flood of complaints intended to wear down the referee Wikipedia admins?

The explanation, apparently, is that Gamergate fans don’t think it’s possible to actually participate in the world of ideas, the world outside fandom and Wikipedia. This also explains their peculiar outrage at me: when I took the case against Wikipedia to you and then to the world, I was using my super-powers to cheat. One editor actually wrote that I “accidentally set the Internet on fire.” In their view, I’m the comic-book character who somehow summons up lightning bolts in the middle of a basketball game to help my team win, and that’s just unfair.

We might dismiss all this with a nod to Gamergate HQ in Mom’s Basement, but it’s not just Gamergate. I keep bumping into grad students, for example, who regard living writers as if they were all inaccessible rock stars. Yes, there are some writers who won’t talk to you, but most will. The same is true for scholars: not only will most professors take your phone calls or give you interviews, asking them will make their day. “You can be the most famous Chemist in the world,” Frank Westheimer used to say, “and you’re still not going to be on Johnny Carson.”

Linda says this is a class issue, that the knowledge of these open doors is a secret of privilege. She is not wrong: class is part of the story.

My own initial theory was that it’s literally a matter of experience. When I was in grad school, Mom used to drive me nuts with suggestions that I stop sending stuff to tiny computer magazines and start aiming for places like The New Yorker. I thought then she was clueless, but before she was Mom she’d worked for McCalls and for Hearst, and 25 W 45th St was just another address. Lots of stuff seems impossible until you do it, and the typical Gamergater is probably a bit younger than I am.

Some of it’s a matter of education, of knowing (at least in theory) how things work. In grade school, one teacher – maybe Helen Doughty in 2nd grade – required everyone to send a fan letter to a contemporary writer. “Contemporary” was quite a word for second graders! Somewhere I’ve got a nice form letter, signed by Ted Geisel/Dr. Seuss. (The Cat In The Hat remains a really interesting book when you think about it.)

I was texting yesterday with one of my fellow software artisans about the software economy and all our woe. He pointed it that it’s not just software. His friend the famous novelists isn’t making big money. His friend the rock star isn’t making much money, either. One of my big surprises in The Way The World Works was seeing Amanda Palmer, not that long ago, Twittering for couches in cities where she was touring. The same thing happens fictionally in Wonderland, Stacey D’Erasmo’s nifty and thoughtful novel of a rock tour. Even for rock stars, I slept last night in a good hotel ain’t necessarily so. It’s not just us: it’s the world. Knowing that matters. (More on the software economy coming soon.)

It’s one thing to renounce the world and choose to live quietly by Walden. It’s another to renounce the world and then to stew endlessly in your powerlessness, and to avenge your renunciation with talk page diatribes and mean little exposés and incessant gossip in chat rooms and image boards about Gamergate’s arbitrary victims.

July 02, 2015 02:56 PM

July 01, 2015

Dave Winer

How to fix my iMac internal fusion drive?

  1. I have a 5K Retina iMac. Its internal drive is an SSD.

  2. It's not working. Let me explain.

  3. I booted off an external drive.

  4. When I look at the drive in the Disk Utility, there's no option to erase it.

  5. When I look at the Partition tab, everything is grayed out.

  6. When I click on Verify Disk, it says everything is good.

  7. When I repair the disk it says it's all good.

  8. The disk does not show up on the desktop.

  9. Software cannot see it.

  10. I want to format the drive. How?

The fix is in!

Update: Problem solved in the Facebook thread.

Bonus: A video of me fixing the problem, in case you have the same thing wrong with your Mac fusion drive.

July 01, 2015 09:40 PM

Giles Bowkett

Actually, No, Stuff Used To Work

I see this sentiment on Twitter all the time:

The link's to a story about the surprising incompetence of Apple's new music streaming service.

But the first computational device, the abacus, was invented around 2400BC. And we've been storing programs on hardware since 1948. So, either software is not still in its infancy, or it's been in that infancy for a very long time. If anything, software seems to get more infantile with every passing generation.

In fact, even as recently as a few decades ago, software companies used to have things called "QA departments" whose whole reason for existing was to make sure that everything worked all the time.

Software is not in its infancy. Software is in a period of decadence, characterized both by unprecedented power and wealth, and by staggeringly low standards. In its past, software put a man on the moon. The most magnificent computers of that time were weaker than the computers in an actual toaster today. It wasn't the hardware, it wasn't the complexity of the software. It was the QA department, and the seriousness of the mission.

by Giles Bowkett ( at July 01, 2015 06:17 PM

June 30, 2015

Fog Creek

3 Reasons to Switch to FogBugz Ocelot

FogBugz Ocelot is the latest version of FogBugz. It’s our fastest and most powerful version yet. It comes with an updated UI, and bags of new functionality that make Ocelot that best way to use FogBugz. Here are three reasons why you should make the switch.


1. A More Agile FogBugz

One important part of working on a new version of FogBugz was making sure it was the best tool it could be for different ways of working. You’ve long been able to work and do Agile with FogBugz, but with FogBugz Ocelot, and the new Iteration Planner, we’ve made Agile a first-class citizen in FogBugz. Iteration Planner allows you to graphically group cases, divide the scope of your sprint into groups and monitor progress toward each of your goals. And, it’s just a click away with the new Agile menu.

2. No More Context Switching

Another important consideration was how best to keep up to date with activity in FogBugz. A lot of our customers live in FogBugz for their working days. Yet, you had to switch to email to keep up with notifications about activity. Now that’s no longer the case. We’ve added In-app Notifications, Activity Feeds and Digest Emails, to help you keep up to date with what’s going on, without all the email.

3. More Easily Organize and Manage Your Work

We also wanted to make it easier for you to organize and manage your work. So we’ve added Project and Filter Menu groups so that you can combine projects for easier filtering, as well as organize your filters more effectively.

Learn more about the new, fast and feature-filled FogBugz Ocelot and try it for yourself. Here’s further info for:

by Gareth Wilson at June 30, 2015 10:45 AM

June 29, 2015

Reinventing Business

The Best Summary of Teal Organizations So Far

Here is a slide deck that gives quite a thorough introduction to Teal organizations, including insights that I've also spontaneously considered in my own research. I think I've seen (and perhaps linked to) an earlier version of this deck but if so it has gotten much, much better.

I feel like I've been waiting my whole life for this kind of organization. Bits and pieces of these ideas have presented themselves but they've always seemed ridiculous in the context of industrial-age management thinking. I want to either work with such an organization or, more probably, create one.

The creation of such organizations is where I might be able to make a contribution, and I'll be giving a presentation called Creating Trust Organizations at the upcoming OSCON in Portland. I've been putting a lot of effort into this presentation and hope that I'll be able to give it many times, whenever I travel.

by (Bruce Eckel) at June 29, 2015 05:12 PM

Fog Creek – Interview with Cassidy Williams

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 Cassidy Williams, Software Engineer & Developer Evangelist at Venmo. She’s a proud proponent of young women pursuing careers in Software Engineering and other areas of science, technology, engineering and mathematics (STEM). Towards this end she’s worked on AdvisHer, Microsoft’s Big Dream documentary and Hacker Fund, receiving recognition for her efforts by being named in Glamour Magazine’s ‘35 Women Under 35 Who Are Changing the Tech Industry‘ and in the Innotribe Power Women in FinTech Index.

Cassidy Williams
Location: New York City, NY, US
Current Role: Software Engineer & Developer Evangelist at Venmo

How did you get into software development?

We had a family computer that we all shared from when I was very little (the earliest I remember playing on it was my 6th birthday), but I didn’t have my own computer until college. I started out with HTML and CSS! When I was first learning, I didn’t know what code was. Nobody in my family did, either. But when I was in 8th grade, I heard a neighbor say, “check out my website!” while I was talking home from school. When I got home, I literally just started looking up how to make one. I started with a WYSIWYG editor, and then I realized that if you knew how to code, you could do a lot more. So I started messing with it from there! So I was self-taught in Web Development, but I also then graduated with my Computer Science degree.


Tell us a little about your current role

My role is awesome. On the Software Engineering side, I work on the code that keeps Venmo up and running. I’m currently on the Web Team, working on some cool new technologies (like React and ES6). On the Developer Evangelism side, I speak at hackathons, conferences, and meetups, and I represent Venmo to the developer community. I currently have an awesome intern, Terri, and she and I are working on cool projects like a podcast of her internship, some volunteering events, and some women in tech meetups. I never have a “typical” day, because I touch so many different things at work! I’m currently working on learning Unity and game development. It’s interesting because it’s a totally different way of approaching coding, but that also means that it’s challenging as I’m thinking about problems in a different way.

When are you at your happiest whilst coding?

When I find a tough bug or I have a tough problem, and I solve it. It’s the most gratifying feeling ever.


What is your dev environment?

At work and on some projects, I use OSX and Vim as my editor and Git as my Version Control. My personal laptop is a Windows machine, where I use pretty much every editor out there, depending on the project (Eclipse, Visual Studio, Aptana, Sublime, Vim, Unity, etc)! I also have this sick mechanical keyboard that I customized with some Vim stuff, and it’s got Cherry MX Brown keys. I just use random headphones at work, but when I’m coding at home, I use Audio-Technicas. If I’m focusing, I listen to classical and instrumental music. Currently listening to the Dark Knight soundtrack and some Igor Stravinsky ballets.

What are your favorite books or resources about development?

I love the JavaScript Weekly and HTML5 Weekly newsletters, they always push out some really interesting articles. Books, I like the Big Nerd Ranch books, The Pragmatic Programmer, and The Little Schemer!


What technologies are you currently trying out?

I want to try messing with a Thalmic Labs Myo. I also just got myself some LittleBits to try playing with.

When not coding, what do you like to do?

I love playing music, Minecraft, drawing, and eating.

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

Don’t waste your time on technologies that you don’t enjoy. It’s so much more fun to code on things that you want to code on!


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

Recent Interviews

Paul Jones
Paul M. Jones
Michael Fogus
Michael Fogus
Casey Muratori
Casey Muratori
Tomomi Imura

by Gareth Wilson at June 29, 2015 11:27 AM

John Udell

Why is automating simple tasks so hard?

It seemed like such a simple thing: Make charts and tables and share them with the team.

If I had to do that only once in a while, it would be straightforward to do it in Google Apps. But I need to do this daily, with fresh data. I have a Python script that fetches the data and makes the charts and tables. I envisioned two ways to reuse that script:

[ Here are 6 skills a solid IT generalist should master, no matter where your life in IT leads. | Get the latest practical data center info and news with Paul Venezia's Deep End blog. ]

Option #1: Just upload the charts and tables to Google Drive.

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

by Jon Udell at June 29, 2015 10:00 AM

June 28, 2015

Dave Winer

To make a long story short

We need a better way to do discourse on the net.

See the longer version.

June 28, 2015 09:45 PM

Mark Bernstein

Rainbow Dinner

Hooray for the Supreme Court, which (surprisingly) decided not to make things worse this week.

  • Pickled rhubarb with ginger and star anise ❧ pickled carrots with dill ❧ onion dip
  • Focaccia with ricotta, goat cheese, mozzarella, and lots of caramelized onion
  • Sandwiches of grilled salmon, crusted in aioli and parmesan
    • home-made potato break rolls with election-day seeds
    • burnt onion and cilantro salsa
    • grilled peach, red pepper, and chipotle salsa
  • salad
  • clafoutis

June 28, 2015 03:15 PM

Dave Winer

It's not left vs right

Yesterday's post was intended to be humorous. I don't doubt that algorithms could figure out what most people say on Facebook, and do our speechifying for us. The point behind the humor is this: No issues are so black and white that your template for discourse will spit out a useful statement just by skimming a story.

This dumbing-down of discourse is not just present in social networks, but it's also in the news. The NYT says the victories for "the left" now present opportunities to pivot for the right. Well, the victories of this last week are not for the right or the left, and some of it wasn't a victory at all.

  1. In what way are nine people slaughtered in a church in Charleston a victory for the left? Sometimes you can go too far in tallying these things up as scores for one side or another. It was not a victory for anyone, it was a tragedy, for everyone -- everyone who is not a sociopath.

  2. Government shouldn't be in the marriage business. That would have been my decision if I were on the Supreme Court. The net-effect would be the same as what came out of the court last week. I don't see how my opinion about this is left? It's actually fairly conservative.

  3. But I haven't forgotten that our society and those of all other western countries, not too long ago, didn't allow homosexuality to even exist in public, much less ratify their right to marry. It's still shocking to see two men holding hands walking down the street in the city. I don't mind being shocked, I actually like it. It's a reminder that this was a choice we made, to open our minds, to change. The fact that we can do this, so quickly, makes me optimistic about other changes, other comforts we have to give up.

  4. For example, we have to accept that it's okay not to procreate. It's actually a good thing for the human species if there were fewer of us. Let's have a holiday for people who choose not to be fathers or mothers.

  5. Or that people over a certain age are still alive and part of the world, and have aspirations, knowledge, experience, rights and want to make a contribution, too. How is that left vs right? Everyone ages.

Maybe it's time to give up that there is such a thing as "the left" or "the right". That each of us has the right and obligation to think and decide for ourselves. And for crying out loud, just because someone disagrees with you on one issue that doesn't mean they're bad, or that they might not agree with you on others. Remember how much we all have changed in the last few years.

We still have a long way to go, and framing things as a never ending battle between two non-existent forces isn't going to help us. It would be nice if social networks could help us evolve out of this mess. I still think the potential is there. But first we have to have the will to change.

June 28, 2015 02:39 PM


Emscripten Experimentation Experience

At one point Emscripten was the hottest thing in the JS world and I decided to try it. I started writing about the experience in this post but the procrastinator in me didn’t finish it. Fortunately, the content went into these slides and gave a talk about it in Feb earlier this year. The slides should cover most of the content here but feel free to read on if you have the time.

I talked about a struggle with Emscripten, on how the going wasn’t easy especially for someone who wasn’t familiar with C. Still various times the idea of using emscripten was incepted (eg. this twitter thread). Among the stuff that I wanted to try porting was GLSL Optimizer. I gave it my first shot and wasn’t successful with that. GLSLOptimizer was also written because HLSL2GLSLfork (for unity3d) generated GLSL code that could be optimized.

Emscripten probably wasn’t the most complex piece of software (besides it have probably been used successfully with millions lines of code) but why did I failed again and again? In retrospective there were a few reasons

1) these projects weren’t trivial
2) my Emscripten environment was probably messed up
3) I wasn’t familiar with C or C++ world (even though I’ve programmed in c and objc)
4) I wasn’t familiar with the build systems automake/make/cmake/premake, its ecosystems and workflows

These factors made it like learning to jump before crawling. So I’d put these on my backburner. Once in a while I try getting my hands dirty again, till I hit another brick-wall. Repeat.

One day I was reading some GLSL code online and I mistaken it as HLSL. Thinking about how to convert it to GLSL, I end up attempting emscripten-ization again. HLSL2GLSL project came to mind but this time found out a new hlsl-to-glsl project, which turns out to be a newer and simpler shader project.

This project uses premake, so I learn about it. I had progress building stuff, and despite some errors, I could fix. I realized that there were also forks of that project (eg. being used by the witness), and I tried those code too. I also figure that premake doesn’t have to be used. I could run a simple compilation command.

/usr/lib/emsdk_portable/emscripten/1.29.0/emcc src/*.cpp -o hello.html -s EXPORTED_FUNCTIONS=”[‘_parseHLSL’]” –bind -O3

There were other pitfalls and lessons learn’t along the way. Especially with how the JS and emscripten are bridged. There were different approaches: CCall could be used, or using marcos, eval and bindings but one have to be careful the datatypes gets converted correctly through the bridge too.

So yeah, I got emscripten working for the HLSL converter demo and source code

That gave me some experience and confidence boost, and I went on to make glsl-optimizer work. Glsl-optimizer has more code and slightly more complexted, but I follow the previous approach of rolling my own build scripts and and had it work too. See Demo and Code.

There’s one thing I haven’t manage to solve, that is getting data corruption issues using link-time optimizations, so it’d cool if anyone managed to fix that, that would bring down the generated JS even further.

And there’s has been recent update with these projects – Jaume (aka thespite) has attempted integrating GLSL optimizer in his really cool Chrome WebGL Shader Editor extension.

One of the ideas still lingering in my mind would be porting a good sounding midi / wavetable synthesizer like fluidsynth to JS. Stay tuned!

by Zz85 at June 28, 2015 03:49 AM

June 27, 2015

Axis of Eval

A trivial implementation of Reactive Demand Programming

I wrote a trivial implementation of RDP in JavaScript to help me understand how it works.

It's called bucky-rdp (about 200 lines of heavily commented code).

It currently supports Sirea's bconst, bpipe, and bfmap.

Here's an example:

// Create some behaviors for transforming numbers.
var bDouble = rdp.bFMap(function(val) { return val * 2; });
var bMinusOne = rdp.bFMap(function(val) { return val - 1; });

// Create a pipeline behavior of the two behaviors
var myBehavior = rdp.bPipe(bDouble, bMinusOne);

// Apply an inactive input signal to the pipeline behavior
var sigIn = rdp.makeSignal();
var sigOut = rdp.apply(myBehavior, sigIn);

// Change the input signal value and watch the output signal change
console.log(sigOut.getValue()); // Prints 3
console.log(sigOut.getValue()); // Prints 7

(This post refers to v1.0.1)

by Manuel Simoni ( at June 27, 2015 11:33 PM

Dave Winer

Facebook is about news, in a weird way

Each bit of news potentially fires up a moral parade, where people recite prepared speeches.

Often the speeches begin explaining how what someone said is like this other thing, then basically recites a canned story about that thing.

You could give each story a number, and just type the number. The computer (Facebook) could then get the text and insert it into the comment for you. Discourse could happen much faster.

Eventually Facebook could predict what you'll say and just say it for you. Like the self-driving cars Google is making. You'd sign onto Facebook and see in your notification drop down menu "You have commented on Betsy Guernsey's post."

You could read it if you like, but eventually you will know that Facebook correctly stated your opinion.

June 27, 2015 09:21 PM

Tim Ferriss



“In order for art to imitate life, you have to have a life.”
– Whitney Cummings

“I promise: if you just tell the truth and get your heart broken as a comedian, you will have a house.”
– Whitney Cummings

This episode how to turn pain and struggle into amazing creative projects.

Whitney Cummings (@whitneycummings) is a Los Angeles-based comedian, actor, writer and producer.

She is executive producer and, along with Michael Patrick King, co-creator of the Emmy nominated CBS comedy 2 Broke Girls, which was recently picked up for a fifth season.

Whitney also wrote, produced and starred in Whitney, which aired on NBC from 2011 to 2013.

She has headlined with comics including Sarah Silverman, Louis C.K., Amy Schumer, Aziz Ansari, and others.

Her first one-hour stand up special, Money Shot, premiered on Comedy Central in 2010 and was nominated for an American Comedy Award. Her second stand-up special, Whitney Cummings: I Love You, debuted on Comedy Central in 2014 and she is shooting a third hour for HBO this August, which is set to air in 2016.


Want to hear another podcast with a world-class comedian? — Listen to my conversation with Bryan Callen. In it, we discuss eating corgis (yes, the dogs) and improving creativity (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 of which are awesomely ridiculous.

This episode is also sponsored by OnnitI have used Onnit products for years. If you look in my kitchen or in my garage you will find Alpha BRAIN, chewable melatonin (for resetting my clock while traveling), kettlebells, maces, battle ropes, and steel clubs. It sounds like a torture chamber, and it basically is. A torture chamber for self-improvement! Ah, the lovely pain. To see a list of my favorite pills, potions, and heavy tools, click here.

QUESTION(S) OF THE DAY: What really offends you, and how might you analyze the reasons to improve yourself? Please share in the comments.

Scroll below for links and show notes…


Selected Links from the Episode

Huffington Post | Salon | Slate | Psychology Today | Jezebel | The Frisky

  • Watch Neil Gaiman’s commencement speech, Make Good Art
  • Learn more about the Friar’s Roast
  • Enjoy standup from a few of Whitney’s recommended comics:

Sebastian Maniscalco | Tig Notaro | Jerrod Carmichael
Natasha Leggero | Chris D’Elia | Neal Brennan

Website | Facebook | Twitter | Instagram

Show Notes

  • Whitney Cummings’s tattoo stories: leadership, emotional intelligence, and managing trauma triggers [6:33]
  • Strategies for handling the weakness of impatience (aka “the impatient dick syndrome”) [19:33]
  • Has emotional intelligence work removed the magic of her success? [25:53]
  • The story of when Whitney realized her workaholic nature was killing her [34:13]
  • The emotional habits which helped Whitney to achieve so much at such a young age [37:03]
  • On managing the challenges of immediate gratification [40:33]
  • The process behind Whitney’s best writing [42:53]
  • Deconstructing Whitney’s most recommended work [55:13]
  • Defining “blue” comedy and exploring why it’s a strange title [45:48]
  • On roasts, insult comedy, adulation from fans, and differing comedic styles [1:08:08]
  • Whitney Cummings’s training for taking someone from beginner to stand-up comic in 8 weeks [1:23:33]
  • On equine therapy [1:57:23]
  • Most gifted books [2:04:18]
  • When you think of the word “successful,” who’s the first person to come to mind? [2:12:43]
  • If you could put a billboard up anywhere you wanted, what would be on it, and where would it be? [2:20:48]
  • Advice to her 20-year old self [2:25:18]

People Mentioned

by Ian Robinson at June 27, 2015 04:56 AM

June 25, 2015

Mark Bernstein

Fog Creek

Killing Off Wasabi – Part 1

FogBugz v8.13.104 was released at the end of May 2015, with little fuss and no fanfare. And why would it? The release notes list just a couple of bug fixes and minor changes. But under the hood, it was a huge release. For the first time since FogBugz’ creation some 15 years ago, it contained 0 lines of VBScript or Wasabi code. The ‘End‘ of an era.

For those of you that don’t know, Wasabi was our own in-house .NET compiler. In this post, I’m going give you the background of Wasabi, including why we created it and what it enabled us to do, before giving you the inside scoop on why we’ve now killed it off. In a follow-up post, we’ll talk about some parts of Wasabi that we’ll be open-sourcing.

A Time-Saving Beginning

FogBugz was created as an internal tool to help track bugs in our first product, CityDesk, and support our consultancy work. It was written in VBScript and was Windows only. But from its first public release, customers asked for a Linux version. We didn’t want to throw away what was already a large codebase and start from scratch on a new cross-platform version. So we hired our first summer intern to create Thistle. Thistle was a compiler, written in Java, that translated a limited subset of VBScript into PHP. It consisted of a tokenizer, a simple parser, and a finite-state machine based PHP generator. For anything that could not be expressed in Thistle, there was a special syntax to embed PHP code directly in the ASP. It wasn’t pretty, but without requiring a total rewrite of FogBugz, it meant we could support both Windows and Unix.

Thistle received a couple of small updates over the next few years, such as adding the ability to generate ASP, so that we could insert code coverage logging information into the generated code.

FogBasic: Further Down the Rabbit Hole

Then around 2005, we leaped wholeheartedly down the rabbit hole. Thistle became FogBasic and we had visions of creating a new language that overcame many of the issues with writing ASP. This decision wasn’t without its critics, but we really wanted to make it so that as many programmer errors as possible were found at compile time instead of runtime. So we added numerous features and extensions to the language, like updating the lexer to more rigorously match the language, parsing a full abstract syntax tree, and adding type inference.

In the summer of 2006, FogBasic became known as Wasabi, and we continued to make improvements. By this point, almost all of the new code in FogBugz 6.0 used one or more Wasabi features. Wasabi could generate ASP, PHP, and client-side JavaScript. It supported Picture Functions, reduced the amount of duplicate code we needed to write by generating client-side code and had support for things like Fragment Caching and Memoization enabled through compile-time code generators. Wasabi 3, released to the public alongside FogBugz 7 in 2009, had modern .NET-style features like Interfaces, Enums, Try/Catch, and base classes. FogBugz 7 ran on Mono or Microsoft .NET instead of PHP or Classic ASP, generated by Wasabi 3’s new CodeDOM-based code generator.

Maintenance Problems

As time wore on, our technical debt finally began to come due. Compilers like Wasabi and their associated runtime libraries are highly complex pieces of software. We hadn’t open-sourced it, so this meant any investment had to be done by us at the expense of our main revenue-generating products. While we were busy working on exciting new things, Wasabi stagnated. It was a huge dependency that required a full-time developer — not cheap for a company of our size. It occasionally barfed on a piece of code that was completely reasonable to humans. It was slow to compile. Visual Studio wasn’t able to easily edit or attach a debugger to FogBugz. Just documenting it was a chore: FogBugz’ Lead Developer at the time, Aaron Maenpaa, wrote ‘Wasabi – The ??? parts‘, a book released internally in 2011 that attempted to document Wasabi’s features and many quirks.

Life also got in the way. The people who wrote the original Wasabi compiler moved on for one reason or another. Some married partners who lived elsewhere; others went over to work on other products from Fog Creek. Of course, we couldn’t just hire someone with prior knowledge of it. Well, except for me, as I had worked on it back in 2008, then left, but was re-hired four years later! But otherwise, all new hires had an extensive period of learning Wasabi, regardless of their previous experience.

What’s more, we weren’t living in a vacuum. Programming languages were of course improving outside of Fog Creek. Indeed, a lot of the features Wasabi added were things that C# 2.0 delivered out of the box, and there have been three more major versions of C# since then. Developers began to feel like their brilliant ideas were being constrained by the limitations of our little Wasabi universe.

So, alongside the work on FogBugz Ocelot, the latest version of FogBugz, we decided to begin removing Wasabi from FogBugz. There had been other proposals to do so in the past. When Wasabi 3 was started, one of the proposals was to do a one-shot compile to Python, but this was rejected in favor of the .NET backend. In 2011, Ted Unangst proposed “Project Soy Sauce”, a combination of .NET Reflector and Perl scripts to turn the Wasabi binary output into nearly-readable C# source code. This time, we finally succeeded, because of Roslyn, the newly open-sourced .NET Compiler Platform.

Pulling the Plug

So with the decision made, work began, which included:

  • Step 1: change the output of Wasabi from a .NET assembly to C#. The old .NET code generator was based on System.CodeDom, an earlier Microsoft technology that generated valid C# and VB.NET code from a lowest-common-denominator abstract syntax tree. We added its C# output to a new project in the FogBugz solution with a precompilation step that invoked Wasabi with the requisite command-line arguments.
  • Step 2: Switch from CodeDOM to Roslyn. It took 2 weeks to reach functional parity between CodeDomGenerator and RoslynGenerator, at which point we excised the former from Wasabi.
  • Step 3: Improve the output of RoslynGenerator. So many little edge cases were improved here, including ‘!=’, do/while, hex literals, logical and arithmetic negation, constants, switch statements, for loops with simple bounds, else if, lambdas, initializers, extraneous casts and parentheses, string literals, Wasabi Union types, and optional parameters.
  • Step 4: Kill Wasabi. Commit the C# files that Wasabi output, and remove Wasabi and the .was files from the tip of the FogBugz repository. We also had to rewrite a little language file generator that had been generating Wasabi to instead generate C#.

Lessons Learned

Having our own programming language helped us grow FogBugz, a multi-decade project, from VBScript to PHP and JavaScript, and finally switch over to the brave new world of .NET. Wasabi made a lot of sense a decade ago, when we had a blooming code base we wanted to transplant into new ecosystems. It made sense in 2008 to switch the backend to .NET, which was easier to maintain and a faster platform on which to run FogBugz. Since we were consolidating into a single backend, it might have made sense at the time to do a one-time compile using a hand-written C# generator. Once Roslyn was released, it made even more sense to finish switching completely over to C#.

Building an in-house compiler rarely makes sense. It is much more economical to lean heavily on other people’s work and use standard, open technology. You must be prepared to not only create your own universe but to then nurture it long-term. We weren’t ignorant of this when the project began, but it’s much easier to switch languages at the beginning of a project than halfway through. A homegrown compiler might make sense when trying to port to a new platform, which Wasabi helped us do several times.

In the next post, we’ll dive into the new Roslyn-based code generator in Wasabi that we’re open-sourcing. We hope that by doing so, anyone who is considering generating C# code programmatically will have guideposts to using Roslyn as their code generator.

by Jacob Krall at June 25, 2015 01:45 PM

Dave Winer

Dropbox could be king of the one-page app

In 2013 when we were getting our browser-based outliner ready, Les Orchard, a longtime reader of this blog, and contributor to our community (he wrote the initial S3 glue for Frontier, a huge gift), suggested we look at using Dropbox as our storage system.

I was already a serious Dropbox user, and loved how it virtualized my file system. Using Dropbox meant I could go anywhere, with a laptop, and have access to my full work environment. This was part of the dream of using networks since I started using them in the 70s. Dropbox was a big piece of the puzzle.

But Les had shown me how Dropbox could be even more.

Fargo, my Dropbox-based writing environment

We hooked our outliner up to their file system, and shipped it. That's Fargo.

I'm using Fargo to write this. Scripting News, my blog, is a Fargo site.

Later, I put a content management system in Fargo, so you could now publish a website without any extra server software. It still amazes me that this experiment worked.

Now I read articles that Dropbox is facing increased competition from Microsoft and Google. They need something extra, something different from the Office suites both companies offer. Imho it should be of the web, using the most modern approach to development, the single-page JavaScript app.

Developers, developers, developers

I think independent developers have the key to giving them a competitive edge.

There's a universe of possible one-page apps and a vast sea of developer creativity to tap into. They just have to help create the market, a little more than they already have.

June 25, 2015 01:21 PM

June 24, 2015

Dave Winer

PagePark and OPML

The other day I released riverBrowser, a JavaScript toolkit, for browser apps, that renders JSONP files produced by River4.

I also released outlineBrowser. It does for JSON outlines what riverBrowser does for rivers. The two are a pair, because outlines can appear in rivers, you need both to display a river. I wanted to separate them, however, because outlines can appear outside of rivers.

With outlineBrowser, I could add a feature to PagePark, my easy to use Node.js web server. Now, if you put an OPML file in any folder that's served by PagePark, renders it through a user-specified template and it's then passed through outlineBrowser. The result is quite functional if not yet beautiful. It also handles includes, which is fairly difficult to do in JavaScript, with all the async michegas, but I figured out how to do it, and it works.

I have tons of content in this format. Frontier, OPML Editor and Fargo outlines are all stored in OPML. It's the standard format for RSS subscription lists. There's a lot of OPML out there. And PagePark should be able to do a nice job with all of it.

Slowly and surely it's coming together.

PS: Here's a short demo of an outline in a river.

June 24, 2015 11:45 PM

Mark Bernstein


There’s still time to head over to SummerFest: the 2015 Festival of Artisanal Software For Writers.

Save 25% on some of the best artisanal tools for writers for a few days more. Tinderbox, DEVONthink, Scrivener, Nisus, Aeon Timeline, Bookends, Take Control Books.

Also: MicahJoel writes about using Tinderbox and Scrivener.


June 24, 2015 04:21 PM

The Chaco Meridian (2nd edition)

Newly revised and expanded edition of Lekson’s daring and irreverent manifesto which proposes a historical framework for the American Southwest. The traditional view of the Southwest before Spain has been scrupulous to avoid history: as Lekson says, “no states north of Mexico” has long been dogma. Lekson argues that Chaco (900-1100) was a state (or, more properly, an altepetl) with princes and palaces, that it first moved north to Aztec for a generation, and then jumped South all the way to Paquime/Casas Grandes. In the second edition, he extends the trip further, proposing that after Paquime fell, its elites relocated due South once more to establish Culiacán.

Strikingly, Aztec is almost exactly due north of Chaco, and Paquime and Culiacán are due south. They're the biggest and strangest sites of their time. The alignment is embarrassing, but it’s real, and it turns out that ancient travelers could in fact have surveyed the route this accurately.

There’s lots of interesting news in the fifteen years since the first edition. We now know what those weird, distinctive Chaco cylinder pots were for: they were for drinking cacao! We know because Crown and Hurst grabbed some fragments fresh out of the trash heap, ground up a thin layer of the interior, and ran the extract through a mass spec: theobromine — the stuff in chocolate! So those dudes at Bonito drank hot chocolate that was harvested somewhere in south-central Mexico and hand-carried, across mountains and deserts, for their ritual enjoyment. (This stuff must have cost far more than the most costly wine.)

Whether or not Paquime is Aztec relocated (or, perhaps, the faction of Chaco that couldn’t live with the guys going to Aztec one day more), it's now clear that the Southwest knew about, and participated in, Mesoamerica. Lekson is surely right, too, in thinking that they knew about Cahokia. Even if you have to carry every scrap of your food, and even without horses or carts, you can walk hundred of miles. Sacagawea wasn’t the first native American to take a long walk.

Lekson is an irreverent and radically informal writer, and among the great stylists of contemporary historical writing.

June 24, 2015 04:17 PM

Dave Winer

A spilled cup of coffee

This morning I spilled a whole cup of coffee, a big one, on my work desk. The one with all my computers and wires and disks.

I immediately went into action, throwing everything of value off the desk as quickly as I could, including both my cell phones, an iPhone and a Nexus 6.

I then cleaned up the mess, thankfully none of the equipment appears to be damaged, and I went and read for a while. To try to calm my nerves.

Then, I got a phone call. My iPad was ringing. Someone was calling my iPhone, it said. But where is the iPhone???

I still can't find it. Oy.

Eventually the battery will die, and when that happens, how will I find it. And I have this great Apple Watch that's useless without the iPhone.

Oy. Oy. Oy.

PS: Shortly after publishing this, I found it. It was in the pile of rags I used to mop up the mess. Whew.

PPS: There are little dried drops of coffee on my monitors.

June 24, 2015 03:45 PM

Key concept of the open web: Working Together

This morning there were two excellent essays from leaders of the open web, David Weinberger, one of the Cluetrain guys, and a longtime friend and colleague, and Dries Buyteart, founder of Drupal and software entrepreneur. Both are beautifully written and honest appraisals of why the open web is losing to the silos.

Both are optimistic and doing the best they can to help the open web be the powerhouse we all thought it was a few years ago. And the one we still hope it can be.

I would like to elaborate.

Working together

The promise of the open web was and is this: collaboration.

But it's always been a promise, and many have acted in their own self-interest only, and forgot that in order for the open web to thrive we must feed it.

They have taken out of the web without putting back.

Use it or lose it. That applies to muscles as much as it does to the open web.

The rule of working together

Working together means this: If someone else has a good-enough way to do something, rather than reinvent what they do, incorporate what they do into what you do.

There's a flipside. If I have to reinvent your whole product just to get a feature, you're not part of the open web.

An example of working together

When I was getting started writing server software in JavaScript, I had a thought not unlike the thought that probably happens at many silo companies. The process went like this: I'm going to need an RSS feed parser. A friend of mine, Dan MacTough, had created one and released it as open source. I found it confusing. So I decided that this was important enough that I should have "my own" feed parser.

However, before I started writing my own, I sat myself down and asked if it would be better for everyone if I created yet another feed parser, or if I used Dan's. I decided, no matter how much work it would be to learn his way of doing it, even if it took longer to use his than to create my own (which also would have been more fun) I would be doing good for the net if I just used his. So I did. No regrets. I still don't understand how it works internally, but I've helped build a network of software, instead of creating another software island.

And in practical terms, an island is just as isolating as a silo.

Working together means APIs

One of the things that's wrong in today's software is people tend to leave off the APIs. Or, if they're VC-funded, they're likely to have the APIs in the beginning, to help attract users and developers, but as they want to become profitable, they restrict the APIs. So much so that many developers no longer trust corporate APIs. Me too. I much prefer open cloneable APIs, with more than one implementer. That makes it impossible for a platform to screw its users and developers, because if they do, no problem -- I'll just use another one.

One company that's generating a huge unicorn-level market cap is Slack. Hats off to Stewart Butterfield, the founder, and his team, who seem to have managed to create something that's both part of the open web and enormously profitable for investors. Please study this Ms and Mr Venture Capital. Note that strangling your community isn't the only way to get rich.

Working together means using open software

This is the hardest one to explain, because users seem to think they have no power re the open web and no responsibility. But the toys you love, Facebook, Instagram, SnapChat, etc, couldn't have existed if they couldn't have siphoned power from the open web. If you think the toys are getting more similar and perhaps a bit boring, this is why: there hasn't been enough investment in open web tech in the last few years. Not enough know-how for the merchandisers to commercialize.

When a developer ships a tool that doesn't lock you in, it's worth using it, even if there is a "free" one that works a little better or has a nicer design. Because the open one, the one that lets you leave when you want to, preserves freedom, and the others consume it.

It's really rare in today's world when a normal person has such power to affect the outcome, but every software developer needs users. Even just a few. Without users, how can you tune your software up to fit people who think differently from yourself. And creating new software, at this point in the evolution of this art, is still relatively easy and inexpensive. So a few users can be very powerful, but you have to choose to be. That choice is itself an act of creativity, and working-together.

How silos can help

Make it easy for people to post to your site and to sites they, the users, control.

For example, Facebook posts are notoriously difficult to find after they've scrolled too far down the timeline, or aren't favored by the algorithm.

Yes, Facebook let's you download your archive, but what if we could echo our writing to a personal blog, as we're writing or updating? One that would provide us or our children and grandchildren a place to look up our writing years or decades from now?

It's likely this would increase use of Facebook, because people would post stuff there to make notes to themselves and future generations. It certainly wouldn't hurt. And since Facebook has profited so enormously from the open work of others, it would be a mitzvah, something good they can do to help repay the generosity of those who came before them.


I'm illustrating the idea of working together by pointing to Dries' and David's pieces at the beginning of this post, and then elaborating on the ideas they present. I could have left the links off and pretended I was the only person thinking this way. But that wouldn't have been very powerful, and it wouldn't have helped the open web.

When you have a choice, instead of re-inventing someone else's work, use it.

That's the simplest and most powerful way to help the open web.

June 24, 2015 02:33 PM

Fog Creek

N Ways to be a Better Developer – Interview with Lorna Mitchell

.little {font-size: 75%}
N Ways to be a Better Developer – Interview with Lorna Mitchell

Looking for audio only? Listen on

In this interview with Lorna Mitchell, author of ‘N Ways To Be A Better Developer’, we cover some great tips on being a happier and more productive programmer. Including how to communicate with management, the importance of mentoring and learning new languages, improving your time management and dealing with complexity. For more on these topics, Lorna writes regularly on her blog.

Content and Timings

  • Introduction (0:00)
  • About Lorna (0:31)
  • Learn to Speak Manager (1:46)
  • Learning New Programming Languages (2:52)
  • Dealing with Complexity (3:57)
  • Being a Role Model (5:46)
  • Confessional Debugging (8:50)
  • Reading Widely (11:04)



Lorna Mitchell is Principal Developer at Siftware and a long-time web development Consultant and Trainer. She’s the author of the books ‘PHP Master’ and ‘PHP Web Services’, writes regularly on her blog about software development topics. She’s also a regular conference speaker, and it was a keynote talk that formed the basis of her book, ’N Ways To Be a Better Developer’.

Lorna, thank you so much for taking the time to join us. Do you have a bit to share about yourself?

About Lorna

I am essentially a web developer and these days I do a bit of consultancy, some writing, and, of course, my day job where I am a team lead. Because I’m part-time in my day job I get to keep that cross-section and get the opportunity to spend time on open-source, at conferences, and also writing.

What made you want to write the book ’N Ways To Be a Better Developer’?

It’s from a keynote talk and I had co-presented that talk with my friend, Ivo Jansch. He and I had worked together and then given this talk together. We were giving the talk again, a new iteration, at PHP Northwest. The talk was on Saturday. I think it was about Monday, just five days before, where we said, “Yeah, we should definitely ship this as a book.”

By the magic of Leanpub and a really quick turnaround from a designer that we found for our cover we did ship it. Obviously I had all the rehearsals, all my notes, all the topics just in my mind, and we’re both already published authors. Although the book has more content in it now, and we have continued to add to it. At the time it was purely that we were just so excited about our topics that we wanted to write it down and let it scale up a bit more than just the people in the room.

Learning something new… reminds us why we are Engineers

Learn to Speak Manager

You recommend that developers, “learn to speak manager”. What do you mean by that and why is it important?

I mentioned I co-presented with Ivo. Ivo, when he taught me to speak manager, because he was my CTO, and I was just a developer in the team. I was having that classic problem I have seen so many more times since of a developer who can really see a great solution to something and can’t express to the manager why it’s important. You can end up feeling like there’s conflict there. Like you’re actually against each other.

We’re all on the same page. The managers want to deliver things and the developers want to deliver things but the developers want to deliver with the right tools and the managers want to deliver within the right budgets. Sometimes it can be a little bit in conflict. If I learn to speak manager… Almost stand in your manager’s shoes and understand that person’s priorities, motivations and what’s important to them. Then try and frame your solution in a way that makes it clear to them that you’re all on the same team.

At every point in your career someone is behind you… when you’ve only taken two steps, someone has only taken one

Learning New Programming Languages

You suggest developers constantly learn new languages. Why do you think this is beneficial?

Learning your first programming language is like pushing something heavy up a hill. You just feel so small and so lost. There’s so much to know and you don’t even know what half the words mean so you can’t look them up. When you learn your second programming language it’s just like pushing something about your own size up a hill. The third language and the fourth language, you cross-pollinate all those ideas.

The skills are really transferable. No matter how many programming languages you know, a new language or a new framework makes you feel really small again. Continuing to learn is good for us, and remembering that we’re quite small is, I think, sometimes good for us. I think developers… learning something new and having what I call the light bulb moment with a new project reminds us why we are engineers. Sometimes I just need a bit of new technology to remind me why I do this, when things have got hard going in my other projects.

Dealing with Complexity

Sort of the opposite of small is software projects that are complex. Things like that have tasks that often take longer than we expect. How can developers get better at managing their time?

I often think it’s not a problem about time management. It’s a problem about estimations. Developers look at a feature and they think, “Yeah I could do that, couple of days.” In fact, that feature that was going to take a couple of days will always ship in six days. It’s a function of not necessarily seeing the work to fit it into its whole. It’s not necessarily remembering the time that it will take to prepare that feature for deployment, or to make it work on everybody’s development platforms.

We just see that we’re interested in it and we don’t always remember the rest of the story. Developers are also, almost universally, optimists. We just think, “Oh yeah, we can do that.” We have to keep believing that we can do it or we just wouldn’t. We tend to, in general, we underestimate.

What I have found is that if you track your estimated time and your actual time it is astonishing how consistent an individual and a team’s velocity is. If you underestimate by 30%, like if you estimate 30% and we need to triple it and add a bit, it will always be like that. You can take a single sprint of velocity and run a whole project off it. I’ve very rarely had to adjust that velocity very much as a correcting factor. We’re optimists, we underestimate, but I think developers can learn to correct for that by collecting data and using that to inform themselves.

Being a Role Model

You advocate having a role model and being a role model. Why and what practical tips can you give on how to become one?

I’m not sure you can ever really become a role model on purpose. That’s just one of those things that happens. To have a role model means to think consciously about what you do and how you interact in an outgoing way with the rest of the community. I’ve been a blogger for years and it’s always been really important to me to share that. Now of course I’m a writer and I write books but it started with a blog of things that I didn’t want to have to Google again.

Being that person and kind of sharing things and encouraging other people to share their own experiences, I think, is part of being a role model. It’s part of thinking about what the community needs, what other people around you would benefit from. How the things you already have and know can be given in a valuable way.

I’m also kind of an active mentor with the PHP mentoring scheme. I find those kinds of programs, or just very informal programs, where you know a group of people who will probably give you some pointers, has been invaluable to me as I climbed the ladder. I think sometimes people forget that at every point in your career someone is behind you on the journey. Even when you’ve only taken two steps, someone has only taken one. We forget to look out for other people when we feel that there’s still a big journey in front of us. It’s really important to remember the whole picture.

Software development is constantly changing with new libraries, languages, other technologies appearing all the time. How can you stop yourself from becoming overwhelmed?

That’s a really difficult one because it can seem like there’s new stuff every week. Either you’re frustrated because you can’t find the time to try them all or you can end up feeling afraid of being left behind. Ask yourself how you got to where you are today. You didn’t do it in one go. Rome wasn’t built in a day and neither were we as developers.

It’s important to be out there, to be aware of what’s happening, to have read the introductory paragraph for all of these various buzzwords. That means that when the opportunity comes up to use them or to apply those tools you’ll have some idea of what the right setting is. Personally I learned most of my skills on open-source projects. I’m always looking for a project which is using the tools that I want to be using in the next job.

That’s mostly how I’ve got to where I am, by making sure that I am playing with technology and being involved with things. Then I already have a grasp of those tools and those techniques so I can very quickly set them up in my commercial projects. That’s really been a valuable approach. Not really on purpose but it’s worked out really well for me through my career.

Confessional Debugging

In the book you confess to talking to your collection of tech-related soft toys as part of ‘confessional debugging’. What is this and how does it help?

Some people call it ‘rubberduck debugging’. It’s that thing where you go to your colleague and you say, “Listen, I’m trying to do this thing and it’s just not working. I installed this and I ran the database patch. Oh, I didn’t update the template. I’ve got it. Okay.” The other person hasn’t said anything yet. It’s that. I’ve been a remote worker for years and years and years. To reach across that divide to explain a problem, it’s much more complicated than just asking the person next to you to come spot the mistake or the missing bracket on your screen. The barrier to doing that is much higher and so I do the confessional thing with whatever inanimate object is around. I have quite a collection of PHP elephants.

The book started out as a talk that covered 27 ways to become a better developer. Are there any that developers disagree or struggle with?

I think the speaking manager one can be quite difficult. Definitely for a long time I just thought people should listen to me because I knew everything. Now I’m a little bit older I realize the importance of echoing those words back and sort of reflecting people’s vocabulary.

The first time that I gave this talk I talked about healthy living. It’s very easy for us to just… programmers are such an intellectual bunch. We live in our heads and we live always online. We can end up keeping terrible hours, eating rubbish because we don’t want to be away from our code and all these new shiny things. I always recommend that people look after their sleep patterns because it’s so fundamental to your mental health. Without your brain being healthy you’re not going to write very good code at all.

The very first time I went on stage and said, “You must practice great sleep hygiene. You should turn off all your devices one hour before bed.” Someone in the audience actually howled. I think that is something that we all struggle with and it’s advice that I sometimes struggle to take myself but it’s, maybe, the most important.

Rome wasn’t built in a day and neither were we as developers

Reading Widely

You recommend developers keep reading. What are some resources you can recommend to those interested in becoming a better developer?

This isn’t just about reading technical books. I do think we should be reading tech stuff. Whatever technology field you work in, find the best of the planet syndicators in your tech area. Definitely make a habit of reading those. In PHP we have the site, which covers the best of PHP stuff from the whole internet every day, which is brilliant. Also more general sites like DZone cover a really wide range of technologies. Reading their top 10 articles might expose you to something you’re not working with but which might still be interesting.

I also think it’s important for us to read other stuff. Just like learning new languages, I think it’s important for us to read, actually fiction as well. In this very stressful, fast-paced world, it’s very easy to not read anything longer than a tweet or a Hacker News comment. That’s where most of us live. Actually, longer articles, books, it’s all about critical thinking and carrying on exposing yourself to new ideas outside of what can be quite a small and homogeneous world that we live in. Not necessarily geographically, we all interact with people from all over the world, but we can live in a pretty small society. That’s another reason I think it’s really important to just be out there and to keep on reading and being part of a wider world.

Lorna, thank you so much for joining us today.

It was my pleasure. Thanks for having me.

by Gareth Wilson at June 24, 2015 09:57 AM

June 23, 2015

Dave Winer

For comatose Knicks fans everywhere

When you wake from a multi-year coma and your first question is Are the Knicks the NBA champions? I have created a wonderful and easy to use site that will give you the answer in an instant!

It probably won't require updating for years, if ever.

It was inspired by Scott Knaster's fan site for the Warriors.

It was also the content of my 100,000th tweet.

June 23, 2015 12:43 PM

Fog Creek

Switching from For Your Server to FogBugz Ocelot Meant No More Maintaining for Ilium Software

Michigan-based Ilium Software have been designing and creating information management tools for mobile devices since 1997. They’re a long-time Fog Creek Software customer, having been using FogBugz since version 3, and Kiln since it was first released. We spoke to Ken Morse, Managing Partner at Ilium Software, about their experience of switching from For Your Server to On Demand and FogBugz Ocelot.


Using for Your Server

“We’ve been using FogBugz as a helpdesk as well, but started out just tracking bugs and enhancements and we used a separate system just for customer-facing stuff, but it was a pain”. With FogBugz, it has been “really handy to have project cases and customer issues all in one place.”

However, whilst “overall, we were pretty happy with our experience of the self-hosted version. In the back of mind, I kept thinking ‘why are we maintaining this thing, it’s just crazy’… if something happens, that’s the big thing, it’s us that has to sort it out”. Not only that, but Ken says “maybe your server is paid for, but at some point it’s going to need an upgrade. A hard disk goes bad, there’s time there, downtime, there’s a lot of cost to doing it yourself”. So they looked around for alternatives, “but our experience with Fog Creek over the years was so positive… it made the decision [to move to FogBugz Ocelot] pretty easy”.

Moving to FogBugz Ocelot

So they made the switch from for Your Server to FogBugz Ocelot. “When we decided to make the move, we got a knowledge base, checklists, things to walk-through, it was very helpful. It went smoothly”. And it “got us out of the business of having to maintain FogBugz, which is not part of our core business. I have not been sorry for a second… it just performs great.” “We had FogBugz on some pretty decent hardware so it ran great for our little company, but we even gained a little bit performance-wise moving to On Demand”. It’s also “made access smoother for everyone… sometimes we have contractors come in, and we had to add them to the Firewall and the VPN. On Demand makes that so much simpler.”

“Soup to nuts, it’s a great product, it’s extremely easy to use… I’m really, really happy with it”. “If you have questions or need help, between the knowledge base and contacting Fog Creek, I just feel like you’re fully covered.”

by Gareth Wilson at June 23, 2015 10:37 AM

June 22, 2015

Dave Winer

The confederate flag is a hate crime

I spent a some time in northeast Florida a few years back. Every so often a bit of the rural culture would show up there, though mostly it is an expensive coastal enclave, separate from the rural South in central Florida and south Georgia. The confederate flags didn't bother me much, I was told they were about heritage, and who cares if people in the South want to remember the Civil War as a rebellion, not a war to keep slaves.

I didn't wonder what it would be like to be black and see this symbol of their enslavement in everyday life, until I saw a man with a swastika tattoo in a convenience store in Palatka, an inland town. His van also had swastikas, confederate flags, slogans about white power. Then I understood how disturbing it must be to be black and to live among people who advocated your extermination so openly. The swastika conveys all that, for my people.

Disturbing, until last week when nine black people were killed in a church in Charleston, by someone with the same political values as the man in the Palatka parking lot. Now they're killing more than a random man, they're killing women too, in a church. Good people, really the best of America. Dead. In the cause of hate.

As long as the confederate flag is a symbol of government in the South, flown over one state capital, in the flag of another, on state-issued license plates, the message is clear to white supremacists. We are with you. And that's why, as long as the confederate flag is a symbol of government in the South, the South itself is a hate crime.

I know there are good people in the South, thoughtful people, who care about others. Think about it this way. As long as the rest of America tolerates this hate, we're standing with you, in inaction.

June 22, 2015 12:45 PM

Tim Ferriss


Adam Gazzely on the Tim Ferriss Show

“My lab is interested in pursuing how we can enhance cognition to improve quality of life.”
– Adam Gazzaley

Dr. Adam Gazzaley (@adamgazz) obtained an M.D. and a Ph.D. in Neuroscience at the Mount Sinai School of Medicine in New York, then postdoctoral training in cognitive neuroscience at UC Berkeley. He is now the director of the Gazzaley Lab at UC San Francisco, a cognitive neuroscience laboratory.

His recent studies go far beyond mere description — he and his lab are exploring neuroplasticity and how we can optimize cognitive abilities, even in healthy adults. So, what happens when you combine cognitive-focused video games with neurofeedback, magnetic and electrical stimulation, and even performance-enhancing drugs? Well, that’s just one of many things we cover in this conversation.

As someone with Alzheimer’s disease and Parkinson’s disease on both sides of my family, I find Adam’s work to be of incredible importance and promise.  I hope this discussion blows your mind, in the best way possible.



Want to hear more from world-class scientists?
Check out my conversations with Dr. Peter Attia. In the below episode, we discuss life-extension, drinking jet fuel, ultra-endurance, human foie gras, and more (stream below or right-click here to download):

Want even more from unorthodox scientists?
Listen to my conversation with Dr. Rhonda Patrick. In this episode, we discuss life extension, optimal performance, and much more (stream below or right-click here to download):

This podcast is brought to you by a new sponsor, LegalZoom. Matt Mullenweg (CEO of Automattic – now worth more than a billion dollars) first incorporated his company on LegalZoom.  LegalZoom, which I’ve used myself, can help you with almost anything legal, including setting up a will, doing a proper trademark search, forming an LLC, setting up a non-profit, or finding simple cease-and-desist letter templates. LegalZoom is not a law firm, but they do have a network of independent attorneys available in most states. They can give you advice on the best way to get started, provide contract review, and otherwise help you run your business. Use the code “Tim” at checkout to get $10 off your next order. Take a gander at everything you can get for a fraction of what you’d expect —

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: Are you afraid of losing cognitive function with age? If so, WHAT are you doing to prevent it? If nothing, why? Please share in the comments.

Scroll below for links and show notes…

Selected Links from the Episode

The Lab: | Photography:

Show Notes

  • Why Neuroracer was considered a ‘game changer’ [7:40]
  • Theories of cognition [13:50]
  • On making the cover of Nature magazine [17:35]
  • The self-talk behind Adam’s crazy idea to build a video game to rewire the brain [19:20]
  • What inspired Adam to become a scientist [21:40]
  • Why Gazzaley Lab is unique/unusual and concepts that have jumped into the private sector [25:35]
  • Why Gazzaley decided to focus on improving cognition [34:40]
  • How Adam Gazzaley thinks about “success” [39:40]
  • Vetting people who want to be a part of Gazzaley Lab [34:05]
  • Common misconceptions about the brain and cognitive function [36:15]
  • On the likelihood that pre-existing video games have similar cognitive effects to cognition as as described in Gazzaley Lab’s video game research [43:20]
  • Most gifted books [47:10]
  • About the ‘Neuroman’ project [50:50]
  • Learn more about the games Gazzaley Labs has created to improve cognition: MetaTrain, Body Brain Trainer (BBT) and Rhythmicity [56:50]
  • How inspiration for Rhythmicity came from New Orleans, The Grateful Dead, and the AARP [1:05:30]
  • The origin of Adam Gazzaley’s interest in photography [1:10:20]
  • Morning rituals for Adam Gazzaley [1:16:20]
  • Rapid Fire Questions: Inspiration for downtimes, most listened to music, favorite cocktails, losing an eye, and plans for virtual reality [1:25:00]
  • Exploring the crossroads of hallucinogens and neuroscience [1:40:50]
  • Shortlisted compounds for pairing pharmaceuticals and video games to improve cognition [1:43:20]
  • On the neurological impacts of modafinil [1:46:05]
  • The most exciting studies related to Transcranial Electrical Stimulation (TDCS) [1:47:20]
  • Advice to Adam Gazzaley’s thirty-year-old self [1:51:20]
  • What Adam Gazzaley would do with an additional 100 million dollars [1:52:50]

People Mentioned

by Ian Robinson at June 22, 2015 07:41 AM