Smart Disorganized (incoming)

July 28, 2015

Tim Ferriss

TF-StitcherButton

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.

TF-ItunesButtonTF-StitcherButton

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 psychedelic 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 Greens.com/Tim

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 are you experiencing now could you build a quest into? 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…

Enjoy!

Selected Links from the Episode

JaneMcGonigal.com | ShowMeTheScience.com | 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

  • Tetris
  • Games in which you know another person who is playing:

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

creek.life – Interview with Allie Schwartz

Ordinarily, in dev.life, 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 creek.life – a dev.life 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

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.

fogCreekOffice

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 dev.life Interviews

Tomomi
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 Medium.com 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.

Welcome

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

TF-StitcherButton

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 BrainPickings.org.

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”

TF-ItunesButtonTF-StitcherButton

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 Vimeo.com/business 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…

Enjoy!

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.

Install

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.

croatiaPic

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.

Summary

  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?

Guesswork

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)

Transcript

Introduction

Derrick:
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?

Derek:
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

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

Derek:
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

Derrick:
Why are code reviews important?

Derek:
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.

Derrick:
How should you work code reviews into your workflow?

Derek:
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

Derrick:
What type of things should a code review cover?

Derek:
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

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

Derek:
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.

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

Derek:
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

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

Derek:
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

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

Derek:
We have guides. If you go to github.com/thoughtbot/guides, 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.

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

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

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

Tim Ferriss

TF-StitcherButton

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 strengthsensei.com.

TF-ItunesButtonTF-StitcherButton

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 Greens.com/Tim

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…

Enjoy!

Selected Links from the Episode

StrenthSensei.com | 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 (noreply@blogger.com) 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

dev.life – Interview with Saron Yitbarek

In dev.life, 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.

oregonTrail

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.

flatIronFellowship

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.

codeNewbieBanner

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 dev.life Interviews

Casey Muratori
Casey Muratori
Tomomi
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 http://tmpl.weaselhat.com/ 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: www.trustorganizations.com. 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 noreply@blogger.com (Bruce Eckel) at July 20, 2015 07:13 PM

Post-Capitalism

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

by noreply@blogger.com (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.

http://discuss.userland.com/msgReader$18647

Now it works again.

Fixin the Internets one bits at a time.

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

July 19, 2015 12:12 PM

July 18, 2015

Giles Bowkett

enra

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 (noreply@blogger.com) 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

TF-StitcherButton

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?

TF-ItunesButtonTF-StitcherButton

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 — LegalZoom.com

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…

Enjoy!

Selected Links from the Episode

Internet.org | 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

1
2
3
4
5
import gtk
w = gtk.Window("My Window")
b = gtk.Button("My Button")
w.add(b)
gtk.main()

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:

Just-A-Button-1

Just-A-Button-2

Go ahead and give it a Git repository:

Just-A-Button-3

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:

Just-A-Button-4

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

Just-A-Button-5

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

Just-A-Button-6

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:

Just-A-Button-7

Just-A-Button-8

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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
runEventLoop()

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

1
2
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:

1
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:

1
2
(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 button.py. 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:

Just-A-Button-9

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:

Just-A-Button-10

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 button.py to look like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
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):
    @IBAction
    def clickMe_(self, sender):
        print("Clicked!")

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
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 button.py to your project and declared that class (as an NSObject), it should automatically complete as you start typing the name:

Just-A-Button-11

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):

Just-A-Button-12

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:

Just-A-Button-13

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:

1
2
3
4
5
class Clicker(NSObject):
    label = IBOutlet()
    @IBAction
    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:

Just-A-Button-14

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:

Just-A-Button-15

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:

1
2
3
4
5
6
7
# 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 ...
reactor.run()

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:

1
2
3
4
from AppKit import NSApplication, NSApplicationActivationPolicyAccessory
app = NSApplication.sharedApplication()
app.setActivationPolicy_(NSApplicationActivationPolicyAccessory)
app.activateIgnoringOtherApps_(True)

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:

1
2
3
4
class QuitWhenClosed(NSObject):
    def applicationShouldTerminateAfterLastWindowClosed_(self, app):
        return True
app.setDelegate_(QuitWhenClosed.alloc().init().retain())

(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 (noreply@blogger.com) 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.

Roslyn

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:

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

Or

(binary-expression
    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

TF-StitcherButton

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.

TF-ItunesButtonTF-StitcherButton

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 Greens.com/Tim

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…

Enjoy!

Selected Links from the Episode

Athlete Cell | Instagram | Twitter

  • Learn more about Gabby Reece:

GabbyAndLaird.comGabbyReece.com | High X | Twitter | Instagram

  • Learn more about Laird Hamilton:

LairdHamilton.com | LairdStandUp.com | LairdLife.com | GolfBoard.com

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

Looking for audio only? Listen on

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)

Transcript

Introduction

Derrick:
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

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

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

Conrad:
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

Derrick:
Do you need a PR agency?

Conrad:
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

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

Conrad:
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

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

Conrad:
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.

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

Conrad:
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

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

Conrad:
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

Derrick:
What are the essential elements of a media plan?

Conrad:
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

Derrick:
How should you go about writing a press release?

Conrad:
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.

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

Conrad:
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

Derrick:
How can you identity the right journalist to contact?

Conrad:
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@TechCrunch.com, 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 Tips@VentureBeat.com. 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.

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

Conrad:
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.

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

Conrad:
There is a popular blog by Sean Ellis. It’s called Startup-Marketing.com that I’ve written just explaining each step of the process and use examples with his site, GrowthHackers.com 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.

Derrick:
Conrad, thank you so much for joining us today.

Conrad:
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

California

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, meaning.to, 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.

oilRig

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

Bread

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

TF-StitcherButton

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.

TF-ItunesButtonTF-StitcherButton

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 Audible.com/Tim. 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 Audible.com/Tim 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…

Enjoy!

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

creek.life – Interview with Rich Armstrong

Ordinarily, in dev.life, 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 creek.life – a dev.life 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.

tacos

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 meaning.to.

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.

copperPan

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 dev.life Interviews

Michael Fogus
Michael Fogus
Casey Muratori
Casey Muratori
Tomomi
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.

bbcImage

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

TF-StitcherButton

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.

TF-ItunesButtonTF-StitcherButton

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 — LegalZoom.com

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 MeUndies.com/Tim 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…

Enjoy!

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)

Transcript

Introduction

Derrick:
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

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

Derrick:
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?

Johanna:
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.

Derrick:
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?

Johanna:
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

Derrick:
Women and minorities are underrepresented in many development teams. How can they begin to hire more diversely?

Johanna:
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

Derrick:
What are the essential stages in hiring for technical roles?

Johanna:
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

Derrick:
How does your hiring process differ for contractors than with permanent staff?

Johanna:
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

Derrick:
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?

Johanna:
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

Derrick:
How can you ensure your new hires have a great first-day experience?

Johanna:
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

Derrick:
What are some common mistakes you see people making when hiring for technical roles?

Johanna:
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.

Derrick:
On the flip side, what are some mistakes you see candidates making who are looking for technical roles?

Johanna:
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.

Derrick:
Johanna, thank you so much for joining us.

Johanna:
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.)

Continuing:
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 paulgraham.com. 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: gilesb@gmail.com.

by Giles Bowkett (noreply@blogger.com) 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.

roliBanner2

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

pocastDownloader

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 Podcatch.com.

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

TF-StitcherButton

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.

TF-ItunesButtonTF-StitcherButton

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 Greens.com/Tim

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…

Enjoy!

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.

Congratulations!

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

riverToTweets.js

This is pretty technical stuff, but it's indicative of the kind of work we're doing with River4.

https://github.com/scripting/riverToTweets

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 (noreply@blogger.com) 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.

agile-filters@2x

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 noreply@blogger.com (Bruce Eckel) at June 29, 2015 05:12 PM

Fog Creek

dev.life – Interview with Cassidy Williams

In dev.life, 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.

mechKeyboard

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.

bigNerd

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!

myo

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 dev.life Interviews

Paul Jones
Paul M. Jones
Michael Fogus
Michael Fogus
Casey Muratori
Casey Muratori
Tomomi
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

ZZ85

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.

http://slides.com/zz85/emscripten-struggles

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
sigIn.setValue(2);
console.log(sigOut.getValue()); // Prints 3
sigIn.setValue(4);
console.log(sigOut.getValue()); // Prints 7
sigIn.deactivate();

(This post refers to v1.0.1)

by Manuel Simoni (noreply@blogger.com) 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

TF-StitcherButton

IMG_3790

“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.

TF-ItunesButtonTF-StitcherButton

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 MeUndies.com/Tim 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…

Enjoy!

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

SummerFest

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.

SummerFest

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.

Summary

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)

Transcript

Introduction

Derrick:
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

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.

Derrick:
What made you want to write the book ’N Ways To Be a Better Developer’?

Lorna:
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

Derrick:
You recommend that developers, “learn to speak manager”. What do you mean by that and why is it important?

Lorna:
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

Derrick:
You suggest developers constantly learn new languages. Why do you think this is beneficial?

Lorna:
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

Derrick:
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?

Lorna:
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

Derrick:
You advocate having a role model and being a role model. Why and what practical tips can you give on how to become one?

Lorna:
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.

Derrick:
Software development is constantly changing with new libraries, languages, other technologies appearing all the time. How can you stop yourself from becoming overwhelmed?

Lorna:
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

Derrick:
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?

Lorna:
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.

Derrick:
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?

Lorna:
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

Derrick:
You recommend developers keep reading. What are some resources you can recommend to those interested in becoming a better developer?

Lorna:
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 PHPdeveloper.org 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.

Derrick:
Lorna, thank you so much for joining us today.

Lorna:
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!

http://aretheknickschampions.com/

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.

VisaDebit-PC-iOS

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

TF-StitcherButton

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.

Enjoy!

TF-ItunesButtonTF-StitcherButton

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 — LegalZoom.com

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: Gazzlab.com | Photography: ComeWander.com

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

Dave Winer

Fargo blogs and rssCloud

This is a test post to verify that the implementation of rssCloud in Fargo works.

When it works, you will be able to get instant updates to Scripting News, for example, if your RSS reader supports the rssCloud interface.

River4 supports rssCloud, as does WordPress.

Fargo v1.71 is now released.

How to test

  1. Make a change to one of your public outlines.

  2. Look at the RSS feed. View source if the browser is hiding the XML.

  3. There should be a <cloud> element in the feed.

Scripting News

My blog, Scripting News, is published with Fargo.

Here's the feed.

June 22, 2015 01:17 AM

June 21, 2015

Mark Bernstein

In The Woods

A well-paced and intriguing police procedural, winner of an Edgar Award and formally interesting because the narrator is an investigator but not the focus or, really, the protagonist. Rob Ryan of the Dublin Murder Squad investigates the body of a child murdered near his own childhood home; twenty years before when he was 12, Ryan had gone out to play in these very woods with two friends. Only Ryan came home from that adventure, he could not (and still cannot) remember what happened, and the police investigation went nowhere. The new investigation seems likely to follow the old case into the capacious storage racks beneath Dublin Castle.

June 21, 2015 07:56 PM

June 19, 2015

Dave Winer

riverBrowser open source release

Rivers are very important structures in my 2015 world, as it's shaping up.

They appear on the home pages of Scripting News, Podcatch.com. Subsets of rivers are on every page rendered by Liveblog.

Rivers are not only important here, but they also form the central structures of Twitter and Facebook.

Doing a good job of generating and viewing rivers is a pretty big deal. However, until now my work in this area was not organized. This open source release in an attempt to add organization.

GitHub repo

Here's a link to the GitHub repository for riverBrowser.

The readme explains how to call its main routine, httpGetRiver.

Sites that use this toolkit

I've converted most of my river sites to use the new toolkit, including:

  1. Scripting News

  2. Podcatch

  3. TechBlast (a new site for tech news)

  4. Radio's Rivers (my original collection of rivers)

The other side

Rivers are an open format, defined by the spec on riverjs.org.

River4, a Node.js aggregator that's also open source, generates rivers.

Still to-do

The rivers that are integrated in River4 have not yet been updated. I wanted to give the community a chance to review the implementation here, and try it out on their own rivers, before taking a chance on breaking people's installations. So this review is important if you want a relatively breakage-free update.

June 19, 2015 06:25 PM

Fog Creek

How Rogue Amoeba use FogBugz Ocelot for Bug Tracking and Great Customer Support

Rogue Amoeba is a software company based out of Boston, USA. Since 2002 they’ve been making award-winning audio tools for Mac OS X. We spoke to Paul Kafais, Founder and CEO of Rogue Amoeba, about how FogBugz Ocelot has helped them to track bugs and provide great customer support by being able to work on bugs and customer enquiries together, in one place.

Screen Shot 2015-06-19 at 10.18.39

The Problem

When they began they used email for customer support – “everything came into my inbox and I would answer it”, but then they hired support staff and “started with a help desk product”. This helped, but it wasn’t enough – “having support and bug tracking in one place is something we wanted to do”. Not only that, but they were still writing each response from scratch – “sometimes we found that we had to explain how our product works over and over… having to type it out every time” and that meant that “we were writing things to customers and they could come off a bit terse, and we needed something that could fill in the good feeling, the politeness.”

The Solution

So they looked around for alternatives and came across FogBugz. “The big thing for us was the bug tracking feature in addition to the help desk” and “we looked at various features and said ‘oh yea that would be useful'”.

They began using FogBugz, initially “exclusively for customer stuff” like support, but its use grew to cover “issue tracking or bug tracking” for development activity too. For both of these uses, they make extensive use of Milestones. So they order all things by a particular milestone, like cases, features and fixes and this gives them a full view of “what is going to be in release 2″ for example, and this “let us build a little bit of a roadmap”. Or “if we decide we’re not going to work on something we’ll put it in the ‘Archived’ milestone. And maybe later we’ll see that we’ve got a dozen or so more requests for it, so we’ll reactivate it.”

The Results

Since making the switch to FogBugz they have found that “having the customer communication together with feature requests and bugs, was really useful so we could communicate with a customer and say ‘oh yea that’s fixed in so and so version'”. It also meant that staff could seamlessly transition between roles, for example, “one of our support techs transitioned to development, so he’s seen both sides of it.” They could also put an end to the duplication of responses, as they “found that snippets were really useful to have, instead of having to type that over and over again.”

Overall, Paul says “it’s reliable, well-tested, well-used” and now they’re on FogBugz Ocelot they’ve enjoyed the performance upgrade too – “the search works well” and “the pages load quickly”. “It’s a solution that has worked for us.”

by Gareth Wilson at June 19, 2015 11:02 AM

June 18, 2015

Dave Winer

Give up the Confederate flag

Imagine if Germany flew the swastika over its main government building.

That's pretty much analogous to South Carolina flying the Confederate flag over their state capitol building.

Also, the official state flag of Mississippi contains the confederate flag within it. Alabama and Florida have the bars.

June 18, 2015 09:35 PM

Tim Ferriss

TF-StitcherButton

Sam Kass, right, holding court. (Photo: Bob Nichols, USDA)

Sam Kass, right, in official White House gear. (Photo: Bob Nichols, USDA)

“Yankees, we’ve won!”
– Austrian sous-chef to unprepared Americans hustling at a Michelin 3-star restaurant

“75% of success is staying calm. The rest you figure out.”
– Sam Kass

Sam Kass almost became a pro baseball player.  Instead, he pivoted a history major from U. Chicago into becoming the private chef for the Obamas in the White House.

He then broke into national nutrition policy and was named #11 on Fast Company magazine’s 2011 list of “100 Most Creative People” for his work, which focused on establishing private-sector partnerships to reduce childhood obesity to just 5% by 2030.

His story is amazing, his career turns unexpected, and his trials by fire hilarious.  

In this conversation, we talk about:

– Baseball and the art of fielding, plus how he set records at U. Chicago
– His odd leap to the culinary world and escapades one of the best Austria kitchens
– His favorite books, routines, and breakfast eggs
– Simple cooking tricks and common mistakes
– A go-to meal for impressing any date
– Nutrition, top-soil depletion, and organic food
– Why he doesn’t like black pepper
– And much, much more…

We delve into his incredible batting average (literal and metaphorical), his trials by fire, what it’s like to cook for the First Family, and well beyond.  Enjoy!

TF-ItunesButtonTF-StitcherButton

Want to hear another podcast from a world class chef? Listen to my conversation with Andrew Zimmern. In that episode, we discuss simple cooking tricks, developing TV, his success secrets, and beating addiction (stream below or right-click here to download):


This podcast is brought to you by Mizzen + Main. Mizzen + Main makes 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 to see the exact shirts I wear most often.

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: If you had to pack the essence of life into a burrito, what would that burrito look like? OR What simple meal have you used to impress dates? Please let me know in the comments.

Scroll below for links, resources, and show notes…

Selected Links from the Episode

avec | Alinea | Frankies 457

Twitter | Instagram

Show Notes

  • Eggs, coffee, and morning routines [5:50]
  • Why Sam Kass loves baseball [9:25]
  • Fulfilling University of Chicago academic requirements while setting records as a baseball player [11:55]
  • The story behind how he was baptized by fire in kitchens [17:05]
  • Mental preparation for high-stress situations [22:35]
  • Unusual restaurants that put out great food [25:35]
  • If you had to limit your herbs or spices to 3 choices for the rest of your life, what would they be? [27:55]
  • How Sam Kass was introduced to the Obama family, and what it’s like cooking for the POTUS [33:15]
  • Food pet peeves [39:00]
  • On ecosystem challenges, including soil degradation and the declining bee population [43:05]
  • Rapid-fire questions: Who is successful, most gifted book, favorite documentary and a purchase $100 or less that has had the most value? [57:40]
  • More morning routines [1:03:05]
  • “What is the best use of wine that’s too old to drink?”
  • “What should home chefs stop doing?”
  • When to know your pan is hot enough to sear a fish and what oil to use [1:13:35]
  • “When you fall into a rut in the kitchen, what resource do you turn to for inspiration?”
  • Simple starting points for incorporating more healthy food [1:16:50]
  • “What’s the best meal to impress a girl but is easy to make?”
  • “What dish have you most frequently made for house guests?”
  • Common mistakes made when grilling [1:27:30]
  • “What is the best way to systematically refine and develop your pallet.” [1:28:35]
  • “If you had to pack the essence of life into a burrito, what would that burrito look like?” [1:31:15]
  • Advice to a younger Sam Kass just after graduation from the University of Chicago [1:33:45]
  • Sam Kass’s one “ask” of the audience [1:36:45]
  • Find Sam on the Internet:

Twitter | Instagram

People Mentioned

by Ian Robinson at June 18, 2015 06:29 PM

Dave Winer

Why aren't the BigCo's converging on JavaScript?

Everywhere I look individual programmers are getting on board with JavaScript. It really is something. After a couple of decades of fragmentation in the development world, we now have what I called, in 1995, a consensus platform. Chances are pretty good if you and I are working on server code, we're both working in Node.js. And if you and I are writing code that runs in the browser, the chances are 100 percent that we are both working in JavaScript.

Yet almost all the big companies are trying to create their own languages, presumably with proprietary or patent secret sauces, that are not JavaScript.

If we were healthy as an industry in ways that we are clearly not, we would see this coming-together as an opportunity to become more efficient. We'd be looking for opportunities to factor redundancy from our platforms, for example reducing our reliance on CSS and HTML, and perhaps eliminating the need for server code. These are serious possibilities. There isn't much functionality left that must be on the server. If we concentrated real hard, we could make those go away.

But the BigCo's seem to want the chaos? And as a result they'll need lots more programmers to maintain all the incompatible stacks. I don't think this is driven by business needs, rather it's programmers trying to be sure they continue to have jobs. Re-inventing stuff that already works pretty well. Job security.

Reminds me of all the incompatible BigCo networking products that were swept off the table by the emergence of the web as the consensus platform in the early 90s. JavaScript is that strong a force in 2015.

June 18, 2015 06:26 PM

Fog Creek

FogBugz Ocelot – The Fastest, Most Powerful Way to use FogBugz

“The new hawtness” are the words Rich, our COO, used to describe FogBugz Ocelot. I’ve no idea what that means, but not wanting to seem un-cool I duly nodded knowingly. What I do know is this: FogBugz Ocelot is fast and feature-filled.

agileSmall

What’s in FogBugz Ocelot?

It’s our most powerful version yet. We’ve updated the UI and added bags of new functionality, including things like:

It’s Faster Too

We didn’t just stop at functionality, we improved the speed and responsiveness of FogBugz too. We took the parts of FogBugz that people use 90% of the time, and we re-wrote them, from scratch.

We re-worked the case and list pages so they now load super fast. You can also see more of the information you need, at a glance, with lists of case subscribers and those who are working on a case.

Search is much quicker too, with a new search guide and auto-complete, so that you can find data faster.

And it has been a big hit with our beta testers and early users. Here’s just some of the great feedback we’ve been getting:

  • “I love the faster filter interface!” – Paul, FogBugz user for 1 year
  • “The speed improvements are great” – Christian, FogBugz user for 3 years
  • “Loving the speedy new UI. You all rock” – Geoff, FogBugz user for 1 year

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 18, 2015 02:17 PM

June 17, 2015

Dave Winer

Dropbox's new "Requests" feature

This sounds like a really useful feature.

How it works: You set up a request on dropbox.com, and people can send you files via a web form. They show up in a folder in your Dropbox.

For example, here's a request where I ask for a nice picture. I emphasize the word nice. Thank you. Let's see what happens.

I can see this becoming part of a CMS.

Any other ideas??

PS: Paolo Valdemarin uploaded this pic probably from BloggerCon IV, with Marc Canter, Susan Mernit, Richard MacManus, Mike Arrington, Steve Gillmor, Lisa Williams and myself.

June 17, 2015 08:28 PM

Social networking without spoilers

Posted on Facebook yesterday.

What if you could put a dialog-based spoiler alert on a post.

A picture named noSpoiler.png

You wouldn't be able to read the comments until you confirm that you know there are spoilers below, and be given a chance to know what the spoilers relate to.

Or -- even better -- I could say the post is only visible to people who have declared in their prefs that they've already seen the season finale of Game of Thrones season 5.

Think of all the new metadata you'll get.

Of course if HBO NOW had community features, it would be killer there, because they would know that you've already seen the episode, without the user doing anything. Or Amazon or Netflix, for their shows.

June 17, 2015 06:49 PM

Why it's wrong for a white person to self-declare as black

In an op-ed piece in today's NY Times Tamara Winfrey Harris explains: "Racial identity cannot be fluid as long as the definition of whiteness is fixed."

It's rare that a moral argument has such a precise and simple resolution. You can only go one way if it makes sense to go the other.

Kareem Abdul-Jabbar, who is over 7 feet tall, made a similar analogy in a Time essay. You can allow a white person to self-declare as black, if he can self-declare as 5 foot 8 inches tall.

We may want to live in a world where a black person could decide to be treated as if they were white, but we do not live in that world.

In other words, there are some things about us that are immutable.

June 17, 2015 04:30 PM

Fog Creek

All Software Problems are People Problems – Interview with Roy Osherove

.little {font-size: 75%}
All Software Problems are People Problems – Interview with Roy Osherove

Looking for audio only? Listen on

In this interview with Roy Osherove, author of ‘Notes to a Software Team Leader’, we discuss how you grow self-organizing software teams. We cover the importance of developing team members, different phases of leadership, using code reviews for learning, and some common mistakes made by new tech leads. For more about these topics, Roy blogs about team leadership and development practices on his blog.

Content and Timings

  • Introduction (0:00)
  • About Roy (0:23)
  • Why Developers Shouldn’t Fear Leadership Roles (1:33)
  • Growing Team Members (3:38)
  • Phases of Leadership (9:34)
  • Learning through Code Reviews (12:10)
  • Tips for Tech Leads (14:30)
  • Common Mistakes of new Tech Leads (16:54)
  • Recommended Resources (19:06)

Transcript

Introduction

Derrick:
Roy Osherove is head of software infrastructure at Siemens Healthcare based in New York. He’s been an Agile consultant for more than 10 years and is the author of a few books, including ‘The Art of Unit Testing’ and ‘Notes to a Software Team Leader’. Roy, thank you so much for joining us today. Do you have a bit to share about yourself?

About Roy

Roy:
There are three things that I’m passionate about. I’ve been in the software industry for 17, maybe 18 years now. There are three things that I’m really passionate about. One is unit testing and test-driven development. The second one is continuous delivery and deployment and automation, DevOps, basically. The third one is leadership, basically connecting all these dots, because what I find is that even when you know the right things and what to do, actually getting other people to do those things with you is horribly difficult. No one prepares you for that.

I’ve been teaching unit testing for 10 years now. I keep repeating the same answers, and I keep getting the same questions. At some point, you start to realize, “You know what? Maybe something is not effective here.” You start looking outside the boundaries and say, “Okay, what’s missing for unit testing to actually take off, for TDD to actually take off, for continuous delivery?” All those things, I find that leadership is the glue that connects and actually drives us towards where we actually want to go. Of course, we have to know what it is. That’s where the other skills come in.

Why Developers Shouldn’t Fear Leadership Roles

Derrick:
Often developers can be reluctant to put themselves forward for leadership roles, but you
don’t think it’s something anyone should fear. Why is this?

Roy:
Maybe I can rephrase it. I’m not sure that it’s not something you shouldn’t fear. I think fear is actually pretty healthy. I think you should do things that scare you. What I’m saying is that it’s not something that should block you. The fear should not block you from actually doing it. There’s something that I saw a few days ago. Someone wrote, I think, on Twitter or something that really resonated with me. The reason that a lot of managers suck today, or a lot of leaders are not really good at their job today, is because people like you don’t take on those roles. People like you who actually care, who actually wants to see these things through. Then the people who either care less or don’t understand what they’re getting into, they’re more likely to take these roles.

The reason that I think that even if it is scary it shouldn’t block you, oh there are several reasons. One is doing things that are beyond our comfort zone, that we’re afraid of doing or we never thought we’d do, actually grows us and makes us better, and increases our skill and practice, and actually makes us more valuable. Not only is it good for your resume, but it’s also good for you, because you can come back to doing the other work if you want to and then have a different perspective on it. You become better by looking at the same work from multiple points of view.

The second main reason why I think it should not block you is because, remember all those things that you’ve always wanted your manager or leader to do? Now you can actually get to do them, by getting the budget for that build server that everybody’s waiting for, for that software, for getting more memory or laptops for the developers, for getting whatever it is you need to get to make the environment better. If the environment ever stopped you, this is a great chance to change the environment, not just bitch about it, basically.

Leadership is the glue that connects and actually drives us towards where we actually want to go

Growing Team Members

Derrick:
In your book Notes to a Software Team Leader, you say, “A team leader grows the people on their team,” and that this should be the key thing driving your behavior as a lead. Why do you think this is so important?

Roy:
I think that it’s almost required. The reason I think it’s required is because if you don’t do it, you’re basically stopping in the same place and you’re not actually changing anything, except maybe just signing budgets, because, for example, if you know what it is that has to be done, if you want the team to do unit testing or test-driven development, but the team itself thinks it’s not such a great idea, how do you actually get them to do it without growing them in the right direction?

Another thing that happens is that a lot of teams today are actually not in a position where they can actually make good decisions. They’re in positions where you’re actually, as a leader, you are the bottleneck. They come to do with every little decision, with everything. It’s like kids that always come to you, if you have kids, always come to you on every little argument instead of settling it themselves and finding a good solution. What we want is for a team to grow their skills so they can handle the current reality that they’re in.

Most teams are in what I call survival mode. Survival mode is basically that terrible place where you’re just chasing your own tail and you’re just putting out fires, instead of actually planning and doing things you want to do. You keep handling unplanned work, or you’re so far ahead and overcommitted that you don’t have time to do things right and to actually do the right things. To get out of survival mode, you have to make time to learn, and you have to get the team into a learning mode where they can learn new skills so they can avoid the future survival modes.

As they learn, they gain new skills, and those skills will help them figure out what happens when this situation comes in, what happens when another situation comes in. Suddenly, the team can handle more situations in a better way. For example, writing better code so that you don’t go around being scared of refactoring it. That’s a skill, and it takes time to learn. All these things, they come together.

Growing the people on the team there’s one last part. As a team leader, one of the things that was always missing to me is a value system. What’s the point? What’s the point of me as, let’s say, a line manager or a team leader or a Scrum Master, how do I know I’m doing the right job, I’m doing a good job, I’m doing a job well? You can say, “You’re doing the job well if the team’s delivering.” If the team is delivering but you are basically the one who’s pushing for it, is it the team, or is it you? If you’re away for a week, can the team survive without you? Are you the bus factor? In other words, if you get hit by a bus tomorrow, could the team continue functioning without you? If the answer is no, then you didn’t really make a team. What you made is a bunch of people to help you.

If you’re the team, that’s okay, but you’re not a team leader. You’re just basically either an architect or something, and you just have a bunch of Santa’s little helpers. There’s a difference. The difference is that the team is not really capable of doing anything without you, or they’re capable of doing very little things without you. To me, a value system is the ability to, when confronted with difficult questions, such as, “Should I do this? Should I attend this meeting, or should I do something else?” I always have an answer based on the global question is, “What enables a team or what teaches the team to become better?”

Every week, I can ask, “Does the team need me more or less than last week?” If they need me more than last week, then I’m not doing my job. If they need me less, if I make myself less needed, if I remove myself from the equation, not just by disappearing but by enabling the team to do the things that I know how to do, then I’ve basically made them better, and I’ve actually taught them how to do my job, which basically makes me almost unneeded. That feels scary, but really what it makes you is, it makes you a much more scalable leader, because now instead of just leading that team, you become the leader in the group that you can move between teams and make them better. People can drop you into a team, and you make the team better just by being there. That’s actually more valuable than what you did before.

Derrick:
How do you handle people who don’t want to grow?

Roy:
People who don’t want to grow, usually there is always a reason. A person has a reason why they don’t want to maybe learn a new skill and get out of their comfort zone. There is no one way to handle it. Usually it’s a one-on-one, sometimes multiple times, coaching and talking about the fact that, in my team, I ask people, I expect people to continuously learn new skills. That is something that I don’t compromise on. However, that conversation might come only after maybe six months or something, where things are not working out.

Yeah, it’s not always easy, but it’s one of those difficult conversations that I think as a leader you have to learn how to do. It’s not going to be easy. Again, I don’t want it to be easy, because if it’s easy, you’re not learning anything new. It’s supposed to be difficult. Gerry Weinberg has a book called Becoming a Technical Leader. In that book, he says management done right is a very difficult job. A lot of managers like to take the money and not do all the hard parts.

Phases of Leadership

Derrick:
Talking about different phases in a team, teams aren’t in one binary phase. Often they move between them. How can a leader understand what phase a team is in?

Roy:
The three phases are, what I usually look at are survival mode, where you don’t have time to learn, you don’t have time except only to react; learning mode, where you’re supposed to do things and fail and learn and do things slower; and self-organization, where the team can handle their situation without requiring the leader. Usually the questions are simple. You know you’re in survival mode if you don’t have any time to do the things that you would like to do, and you keep reacting instead of planning. Even if you have time to send people to a two-day course, it doesn’t mean that you have time to implement what they learn. If you don’t have time to do slow practice, you’re in survival mode.

It could be that a part of the team is in survival mode and a part of the team is self-organizing. If you have a large enough team, you might start to get cliques where some people are doing okay, some people are definitely buried deep. To me, what I see is that that is a function of knowledge distribution. If there is no cross-training in the team, and you get a bunch of people that have this problem that’s their problem, and a bunch of people have a different problem that’s their problem, but the team is a team, the way I see it is that it always hunkers down to the lowest common denominator. That means that if a part of the team is in survival mode, your team is in survival mode.

The only way to answer that survival mode… Not the only way, but one of the only ways, is to do cross-training so that it becomes everyone’s problem and people can help each other. If you don’t have time to start teaching those people, you’re in survival mode. If you don’t have time to learn, you’re in survival mode. Otherwise, you’re either in learning or self-organization. How do you know if you’re in learning or self-organization? Self-organization is when the team doesn’t really need you to make decisions. They just need you to set the goals.

If a team doesn’t need you to make decisions, you’re probably self-organizing. If the team keeps coming back to you and they need you to make a decision here, a decision there… I’m not talking about signing or approving a document. I’m talking about the team gets stuck, and you’re the only one who can actually shut down the problem. Then that’s an example that the team is missing a skill that you might want to teach them, because if they knew the skill that you already have, they could have solved the problem already.

Even when you know the right things and what to do… getting other people to do those things with you is horribly difficult

Learning through Code Reviews

Derrick:
On your blog, you recommend doing code reviews and taking them seriously, even when times are tough. Why are they key for you?

Roy:
Code reviews are one of the best ways that I’ve seen to share knowledge between people, teach people new tricks, create a fellowship, and at the same time, increase the quality of the code. It really feels like it’s one of those under-utilized things. I think the reason is because a lot of code reviews are being done remotely. Let me explain that. When I say code reviews, I absolutely do not mean code reviews that are done via a comment on GitHub. What I mean is a person maybe sitting just like you and me sitting, or maybe next to each other, looking at the code, thinking out loud, and having a conversation. That’s where the learning comes from.

If you’re doing code review and you haven’t learned anything new or you haven’t taught someone anything new, that code review is almost useless. It costs you more to do a code review that you don’t learn from it. Then, yeah, sure, don’t do it. Don’t even pretend. If you’re going to waste time doing that code review, you better make sure that code review really brings you value. In order to bring you value, you make it a conversation. “I’m looking at this code. Why did you write this class? Why did you do this?”

The reason I want this to be a conversation is because when you write a comment, then a sentence, is usually the culmination of hundreds of thoughts in your head that come down to, “Remove this class,” or “This is duplicate.” Maybe the thoughts in your head are like half a book, that stuff that you’ve learned over the years and the other person needs to learn, such as, “I’ve seen from experience that this has happened many times. Last time that I did it, I had this problem. The way I saw the duplication is because I saw the signatures. I always look at the signatures. When I look at it, they look the same. It’s okay if it’s in properties, but it’s not okay if it’s on singletons.” All this information is just gone, poof, disappears. Then suddenly, you come down to, “This is duplicate.” Then the person doesn’t learn anything. They’re just going to come back to you again and say, “Hey, find me more duplicates, please.” Then you’re back to step one.

Leadership… is a great chance to change the environment, not just bitch about it

Tips for Tech Leads

Derrick:
As part of your book, you spoke to more than 20 team leads about what matters most to them. What are some of the best tips they had?

Roy:
One from Dan North, he talks about actions versus words. He talks about the idea that, as a leader, you’re measured by your actions, not by your words. In fact, if your words and your actions do not match, you’re going to get very little trust. If you’re going to say one thing, and then in a meeting you’re going to do a completely different thing, people are going to stop trusting you. It’s going to be very difficult.

The second is by Bill Walters. He’s saying, “Hey, it’s probably not a technical problem.” I really like this because it also repeats throughout my book. The idea is that, I think, again, I heard it from Gerry Weinberg, and he says, “All technical problems are people problems,” or “All software problems are people problems.” If you trace back, if you use the 5 Why’s method, where you look at a problem, you say, “Why is that?”, and then you continuously ask “Why?” to the next answer five times, you usually get to the root cause. Almost always, the root cause is people.

Derrick:
Did any of the advice or points they raised surprise you?

Roy:
One of them was by Yves Hanoulle. He wrote a thing called the Core Protocols, which is basically a bunch of techniques of how to handle yourself in different environments. I found that very, very refreshing. It’s something I’ve never heard about before. I think that for me, maybe I haven’t had the courage to even try at least a couple of them. That says something, right? Maybe it’s time that I actually do something about that. I choose my battles carefully, but I probably will get to that.

Another thing that was surprising is that… It’s surprising not because I didn’t think it’s true, but I never heard it put that way. Jose Ramon Diaz, he wrote a note called the product is your team. Your team is the product that you’re actually building. Instead of the software that you’re building, the product you’re building is a great team. Obviously what gets created by a great team is a great product. If you think of the fact that what you’re building is not software but you’re building people, it focuses you back into, I like that idea, it goes back to growing people as the main value system, the thing that I always look at, “Am I building a good team? Am I making the team better continuously?”

Common Mistakes of new Tech Leads

Derrick:
What are some of the common mistakes you see new tech leads make?

Roy:
I think one of the most common mistakes is that they tell people what they want to hear instead of telling them what the reality is, because they’re really scared that they want to make a good impression. They say, “Yeah, it’s going to be okay,” or they don’t raise specific flags on specific problems. I think that’s something that that’s a skill, and it takes time. It takes a while to learn that, because it is a bit scary. I think it’s part of our job. We get paid to do good work and to say if there’s a problem.

Another common mistake is that leaders don’t pay attention to whether the group is self-organizing, learning mode, or in survival mode. Those are the three different leadership types that you want to have, because in learning mode, you definitely want to be a coach. You want to teach people. You want to give them time to do it. In survival mode, you usually want to be command-control. You don’t want to start coaching. You don’t have time to coach. You have to get people out of survival mode into learning mode.

If you mix those things up, you have a problem. Suddenly, you’re not really helping the situation. If you have a self-organizing team that already knows how to work, already knows how to do something, and you treat them as if they’re in survival mode and you do micromanagement and command-and-control, you’re going to lose your team very, very quickly. On the other hand, if you go to a team that’s in survival mode and you say, “We’re all working in Scrum now, so I’m going to lock you in the room for two weeks. I won’t tell you nothing of what to do. I’ll just give you goals. I’ll come back in two weeks, and everything’s going to be amazing.”

The answer is probably no, nothing’s going to be amazing. It’s going to be amazingly horrible when you come back, because they won’t have the skills of how to handle themselves. You’re going to open the room. There’s just going to be a bunch of dead people in the room. They won’t know how to feed each other. They will just be lost. They are going to be lost. You don’t want to mix those things up. I see a lot of this. Sometimes it doesn’t make sense. Sometimes it does. You really have to pay attention. That stuff can change from day to day. You have a new project, and suddenly you are back in survival mode. Suddenly you get something you did 100 times before. You’re back in self-organization mode.

Recommended Resources

Derrick:
Can you recommend some resources for developers looking to successfully transition into a tech lead role?

Roy:
There’s this book called Becoming a Technical Leader by Gerry Weinberg. I highly suggest that you read that book. There is a book called Management 3.0 by Jurgen Appelo.

Derrick:
I appreciate you joining us today.

Roy:
Thanks, Derrick. It was lovely talking to you.

by Gareth Wilson at June 17, 2015 10:08 AM

Tim Ferriss

Tim Ferriss


Turning 38-years young… and still not acting my age. (Photo: Sir Garrett Camp)

38! I’ll turn a glorious 38 soon.

It’s going to be a great natal year–I can already feel it. Perhaps it will be good luck for you, too. In this post, I’m giving away a round-trip ticket anywhere in the world.

But back to that strange birthday gift…

Much to the chagrin of my momma-san, I’ve become difficult to buy presents for. Some friends even think I’m impossible to find presents for. Not so. I love handwritten letters, homemade brownies, and–most of all–when people do something nice.

You, dear readers, have a record of being nice and making it count. In fact, you’ve changed thousands of lives with small acts of kindness!

For my b-day in 2010, you all raised more than $100,000 for high-need public school classrooms in the US. More recently, you helped build libraries overseas (See the construction progress on Cambodia, Nepal, and Sri Lanka here, as well as the completed schools in Vietnam).

In lieu of gifts this year, my birthday wish is…

To create the FIRST elementary school in the world with exclusively stand-up desks!

Why?

This is a chance to be part of history.  

THE PROBLEM:
8-18-year olds spend ~85% of their waking hours sitting (Source: Kaiser Family Foundation), and researchers like Dr. James Levine of the Mayo Clinic now compare the health risks of extended sitting to those of smoking.

THE PROTOTYPE THAT COULD CHANGE THE FUTURE:
This is the pilot experiment that could change how schools worldwide are designed. I’m joining forces with Kelly and Juliet Starrett, the brains behind this project and founders of StandUpKids. The goal is to get every public school student in the US at a standing desk within 10 years. This massive goal is achievable if the right snowballs are put in motion now, and this proof-of-concept school is the most important. Media coverage, national attention, political pressure/alliances, etc. can all stem from this. It’s super high leverage.  

Here’s what we’re doing, plus a few things to sweeten the pot:

  1. Join my 38th birthday challenge by clicking here. It’s worth clicking through just to check out the site; Donorschoose.org is one of the most creative non-profits in the world.  This is also their most ambitious project ever.
  • To get your engines started, and to put money where our mouths are: I’ve ready donated $10,000 of my own money, and Kelly and Juliet Starrett have done the same. We have lots of skin in the game.

  • If the spirit moves you, please make a $38 tax-deductible donation (for my 38 years), or whatever you can ($1, $35, $1,000, etc.).

  • 4. We hit $100K and outfit a school that could affect the nation…or even the world! This isn’t hyperbole. This is precisely how movements are started.

    So, to get this party started in force…

    Sweetening the Pot…

    • I’m giving away a free round-trip ticket anywhere in the world that Star Alliance flies, which is just about everywhere. There is no expiration date on the trip, so no rush on deciding where or when to go.

    Here’s how to get it:

  • Leave a comment below telling me what you did (Facebook, Twitter, blog post, e-mail blast, e-mail signature, encouraged employees/friends to do the same, company donation matching, etc.). Measurement of any type gets huge bonus points. This comment must be put up no later than 5pm PST on Friday, June 26th, 2015.

  • Lastly, answer one question at the very top of your comment: “What does education mean to you?”  Put “#EducationMeans” at the very top, followed by your answer.  This is an IQ test in following directions, as we’ll skip entries without #EducationMeans at the top.

  • I’ll pick the winner (if clear), OR my team will pick the top 3-5 promoters, and you’ll vote on the winner of the round-trip.  As always: over 18 only, any taxes are your responsibility, void where prohibited, no minotaurs, etc.

    Fun!

    But the best reason of all…

    Beyond the bribes, you’ll feel awesome about yourself for doing real good.

    Trust me. It feels great.

    Will you pause for a moment and step up, even if for $1? It would mean the world to me. I’ll share updates as I get them.

    Again, here is where you can donate $38, $1, $1,000, or whatever you can.  Just click here.

    Thank you for reading this post. You are all rock stars, and I continue to write on this blog purely because of you.

    Pura vida,

    Tim

    by Tim Ferriss at June 17, 2015 12:23 AM

    June 16, 2015

    Dave Winer

    Uber is not so great

    I posted this on Facebook on Sunday, and sent it to Uber via email. Haven't heard back from them.

    I didn't rent a car in Seattle last week, I thought I'd do better with Uber.

    I took a total of three trips, one of them was pretty bad, and the other two were fine.

    The bad one involved two drivers.

    The first car smelled of cigarettes

    The first car that arrived smelled of cigarette smoke. As a former smoker, I don't like the smell of cigarettes, especially stale smoke. I told the driver that he should probably have smoked outside, not in the car, and I asked if I could get out of the car and get another ride. They charged me for the ride, even though we didn't go anywhere, but I sent an email asking that they issue a credit and they did.

    The driver of the second car drove to the wrong place

    The second car smelled okay, but the driver took me to the wrong address way out in Woodinville. As he was pulling away, after I got out of the car, I realized I wasn't where I was supposed to be and got back in the car, told him about the mistake, and requested that he drive me to the correct address.

    He said that I would have to pay for another trip. I said that was wrong, because I had given Uber the correct address, and verified it, and showed him, over and over. But he seemed to forget each time and kept demanding that I pay. I told him I was going to rate him at one star, he said I shouldn't threaten him, and I said that wasn't a threat, that was my right. So he took me there.

    It was a good thing I had some time to kill at the airport just now, otherwise I probably wouldn't have noticed that he requested that Uber charge me for the extra trip, and they did. Although to their credit, the email did say I could contest it. Of course I did.

    Under normal circumstances I never would have noticed the email with the extra fare, so I decided to write this up publicly. Two bad Uber rides in one day. I haven't used Uber that much, but I've never rated a driver anything other than 5. Two one-star ratings in one day. Not very good.

    Follow-up

    As of Tuesday night, as far as I know I'm still paying for the mistake the driver of the second car made. Haven't heard back from Uber. It's not that much money, but it's kind of disgusting that the guy wouldn't make good in the first place, and then lied about whether he was making good. I gave the driver a 1-star rating so that should help others be warned, but why Uber is holding on to the money? Well, I'm not going to use them again after this experience.

    June 16, 2015 11:42 PM

    Editing APIs for Wikis?

    Blog editing APIs

    One of the things we did in the early blogging days was come up with a web API that made it possible to hook up a desktop editor to a blog. This allowed the full fidelity of the graphic desktop to be applied to blog post editing.

    There were a few iterations of this API before we arrived at the Metaweblog API, which was supported by all the major blogging tools, Blogger, Movable Type, WordPress and my own products, Radio UserLand and Manila.

    Editing APIs for Wikis?

    So if blogs have editing APIs, are there equivalent APIs for wikis??

    I did a little searching and asked a few friends, and so far, I don't think they came together as well as they did in the blogging world, but it seems there would be value creating the link between desktop editors and wiki software on a server. I could hook up an outliner, for example, to the GitHub wiki. Or to Ward Cunningham's new Federated Wiki. If the goal is to get the RSS and blogging worlds and everything that's adjacent to them to hook up with the Wiki world, it seems that editing APIs might a promising place to start.

    So let's figure this out. What's out there to build on, or to serve as prior art?

    June 16, 2015 04:55 PM

    June 15, 2015

    Dave Winer

    Should LeBron be MVP even if the Cavs lose?

    In a word, no. He's a force of nature. A wonderful leader and role model. An amazing basketball player. But not the series MVP.

    As any player will tell you, the competition is about winning, as a team, and if your team doesn't win, you might have been valuable, but you're not the most valuable. Almost by definition.

    So you know where my loyalties lie, I've been rooting for the Cavs because they feel very much like the Knicks, grown up and working right. With leadership, not dabblers and daydreamers. People with their bodies in the actual game, on the court, and driving to victory.

    I love LeBron for making JR Smith and Iman Shumpert better players. I hope the team stays together next year and thereafter, so he can work his magic with their talent. They weren't getting that on the Knicks, obviously. There were times when the Knicks did bring out the spark they both have, basically when they had older players around who could teach them. Melo is not that guy. But Jason Kidd was. And Rasheed Wallace and Marcus Camby, Kenyon Martin, lots of them. The Knicks loaded up on veterans. I didn't understand why then, but I do now, now that I've seen what a difference teaming with LeBron has made. JR is a great technical player but he gets lost in his own mind (famously). And Iman is a very young player, with lots of talent. I could go on and on about this for pages.

    Imho, the obvious choice for MVP is Steph Curry, that is, if the Warriors win, and I want to keep emphasizing that, it hasn't happened yet. It might not turn out that way. All it has to take imho is JR Smith having two halfs like yesterday's first half. At home, in Cleveland that would have made the game turn out the other way, and we would be having a different conversation. With JR hitting his threes, the Cavs would be unstoppable.

    Ooops, I promised not to talk more about the Cavs/Knicks.

    Steph Curry should win, because he was the difference in all the games the Warriors won. It was his spark, the dramatic beautiful shots. He is the most elegant, smooth, smart and lethal point guard I've ever seen. He's poetry in motion, when it's working. But he's also young, and it's easy to get inside his head, and make all that confidence work against the elegance. To be the Curry he must be to win the title, he had to sober up. He has. Now we get to the real part of the competition. It really is not over. Not yet.

    But if it is, and the Warriors win tomorrow, the way they won on Sunday, the creative and interesting choice for MVP, that says something about how the game really works, would be, please hear me out, Andre Iguodala. Until they started him, the Warriors couldn't get around the Cavs on defense, they couldn't get good enough looks for their bomb throwers. With him in the game, they still had a lot of trouble, but they got just enough further for Curry to take his ridiculous circus shots, that happen to go in.

    If "most valuable" means "made the difference" then it really is Iguodala.

    June 15, 2015 04:04 PM

    The People's Browser

    I wrote a tweet yesterday, from the airplane home from Seattle, just to see what would happen. I also posted it on Facebook. It was a conclusion I reached after reading Brent Simmons' latest post, which included a section about HTTP deprecation.

    Here's what Brent said

    "What upsets me about this issue in general is that it’s anti-democratic: it can make writing for the web more expensive and difficult for individuals. As a writer, reader, and open web partisan I dislike everything that shifts power away from people and toward entities with greater resources. What you end up with is corporate speech rather than the voices we know and love and need to hear."

    I've written about this issue, here and here.

    It's about our speech

    In the tweet, people thought I was writing about protecting whistleblowers, or circumventing the control of the entertainment industry, both worthy causes. But what I am protecting is much more fundamental -- the right of the people to use the web as a space to speak their mind without interference from government and corporations. It's as fundamental as the First Amendment of the US Constitution. I've created dozens of websites over the 20-plus years I've been writing on the web that don't support HTTPS and never will. It would be too much work, and too expensive, and would cede control of the content to yet another administrative body. I refuse. You should too.

    Let's study Wikipedia

    I would love to see a study of links emanating from Wikipedia that are HTTP vs HTTPS. The equivalent of an environmental impact study that companies are required to create when they want to alter the environment for commercial purposes.

    Let's see if we can even find the owners of those sites to ask them when they're going to invest the time to support HTTPS. If they don't understand what's involved, offer to teach them, see if they are willing to listen, or can even comprehend what's required of them. How much more will it cost, and do they feel the cost is justified, and will they actually pay? And who will they be paying the money to, that is, who stands to profit from this change?

    I suspect you'll never find a person responsible for most of the content, much less find a plan to migrate to HTTPS. Under the planned deprecation, all those sites will become inaccessible. Why? What's their crime? And what would be at risk at allowing continued access? (Answer, none and none.)

    This has gone too far

    Tech companies are totally out of control, and people are too naive about the use of the Internet, too trusting, too believing of the commercials and PR. Yes we love tech products, but please don't turn that into trust of the people running the companies. They totally do not deserve it.

    Mozilla? Don't make me laugh

    Some have suggested that Mozilla could be the People's Browser. Hah! Mozilla is one of the leaders in the effort to throw away open access to the web. They are the worst of the worst. Don't fall for the PR. They are driving the change, as much as Google is. They should be on the other side, speaking up for and protecting the people.

    Two webs

    The People's Browser very simply, will never require HTTPS. It will work with HTTPS, but it will never not work with HTTP. It would be very simple for Chrome or Firefox to be this browser, by simply making this pledge. Then we won't have to go to all the effort required to route around them.

    Why are they doing this?

    I don't know. I'm shaking my head. I don't want to even think what's kind of obvious, much less say it out loud.

    June 15, 2015 03:02 PM

    Giles Bowkett

    The Future Is Full Of Broken Machines

    John McCarthy created Lisp in 1958. My hope is that Clojure has finally mainstreamed it, although it might be too soon to say. If Clojure fades out, and if you look at the history of Scheme, Common Lisp, and companies like Naughty Dog, it might be more accurate to say that Lisp periodically surfaces outside of academia, but never really achieves escape velocity. Only time will tell.

    But let's assume for the sake of argument that Clojure is indeed mainstreaming Lisp. Even if it's not true, JavaScript is mainstreaming functional programming, which is pretty close.

    If that's the case, it's kind of horrifying: the optimistic interpretation is that Lisp took 49 years to reach the mainstream (because Clojure was released in 2007).

    Brendan Eich came to Netscape because they told him he could put Scheme in the web browser. So we could stretch the definition and use JavaScript's 1995 release date instead. But we'd be seriously fudging the numbers, and we'd still have Lisp making a 37-year voyage from new paradigm to mainstream acceptance.

    One of the classic books of the tech business is Geoffrey Moore's Crossing The Chasm, which is all about how to transition a product from the early adopters to the mainstream. If you buy the narrative that all programmers are eager explorers of the future, it's pretty ironic that a programming language should have such a hard time making this transition.

    But let's be honest here. Most programmers are very conservative and tribal about their toolsets. And with good reason: programming any particular language requires a lot of specialized knowledge and experience. Once you get good enough at something intricate and challenging that you can charge a lot of money for it, you usually want to stick with it for a while. If you dive into a Clojure code base after years of writing C, it might be uncomfortable, awkward, and extremely unprofitable.

    There's also something paradoxically both intimate and mechanistic about the way that wrapping your head around a programming language can change the way you think, and thus, to some extent, who you are. Learning your second programming language thoroughly and well is a lot harder than your fifth or your sixth. Programmers risk a phenomenon of paradigm freeze, similar to the phenomenon that psychologists have identified as "taste freeze" in music:
    From around the age of 15 years old, music tastes begin to mature and expand as listeners increase the diversity of the music on their playlists.

    Tastes appear to change most quickly through the teenage years until the age of about 25 when this sense of discovery slows and people move away from mainstream artists.
    I even saw a Douglas Crockford keynote where he said that the only way you can advance a new programming paradigm is by waiting for the entire current generation of programmers to retire or die.

    Let's pretend that we have all the cynicism and despair that anyone would get from working at Yahoo for a long time, and agree with Mr. Crockford, for the sake of argument.

    It would stand to reason that there must be new programming paradigms today that have not yet crossed the chasm.

    I believe that this is probably true, and I have two specific examples. The irony is that both of these paradigms are embedded in technologies we all use every single day. Yet I would not be surprised at all if they remained widely misunderstood for the next 50 years, just like Lisp did.

    One of them is git.

    You Probably Don't Understand Git (For Large Values Of You)


    git's a completely decentralized technology, which requires no master branch whatsoever (master is just a name).

    But people typically treat git as a completely centralized technology which depends absolutely on its center, GitHub.

    You've probably heard some variant of this story before:
    Panda Strike's CEO, Dan Yoder, told me a story about a startup where he served as CTO. GitHub went down, and the CEO came into his office, saying, "we have to move everything off GitHub!" He was upset because no programmer could do any work that day. Except, of course, they could. You choose one person's repo as the new, temporary master version of master, fire up sshd, and replace GitHub with your laptop until their servers come back online.
    One time, I worked at a company which was nearly all remote, with a small office in one city but plenty of programmers in other cities. Soon after I joined, we all spent a few days hacking and hanging out in a cabin in the woods. Our WiFi was very unreliable, so we were unable to reach GitHub. We just used gitjour, which wraps Bonjour, Apple's Zeroconf networking tech, to host and advertise git servers over small local wireless networks. In other words, one person said "I'm the canonical repo now," and we all connected to their computer.

    The point is, git doesn't depend on GitHub. GitHub adds value to git. But to most people, the major difference between git and Subversion is that there's a web site attached to git.

    On Panda Strike's blog, I went into detail about this:
    GitHub is also hierarchical even though git is flat. If GitHub only added a center to git, it would have commits flow to the center of a web of repos. But that's not how it works. On GitHub, pull requests have to flow upwards to attain lasting impact.

    It's this:



    Not this:

    Using GitHub adds a center and a hierarchy to git. These are usually beneficial. But, as I explore in that blog post, the added-on center and hierarchy become a problem when you have a project with a thriving community but a disinterested creator.

    And the real downside of this tradeoff isn't that edge case. The real downside of treating git as if it were centralized is that lots of people assume that it is centralized. To a lot of people, this entirely new paradigm of distributed version control is basically just Subversion with a web site and a smiling cartoon octopus/cat beast from the island of Dr. Moreau.

    You Probably Don't Understand HTTP Either


    HTTP has this problem too. Not only that, HTTP's had this problem for more than twenty years. People who don't understand HTTP are constantly reinventing features that the protocol already has, and moving those features from the protocol layer to the application layer in the process.

    Some examples:
    But the biggest and most egregious examples would be media types, the POST header, and, of course, REST.

    Media types matter because HTTP has a type system. It's based around the fundamental, important, and seemingly forgotten idea of hypermedia. This idea is so powerful that it basically puts an everything-is-an-object system like Smalltalk or Hypercard around the entire planet; but it's so frequently under-exploited that it's almost just a footnote. (But a footnote which can make your API traffic incredibly fast.)

    With POST, the situation's improving, but for decades, POST was the go-to HTTP verb for nearly everything a Web app ever did. Ironically, however, POST was intended as a footnote. HTTP's basically a giant, globe-spanning key/value store, but just in case, the spec included POST for any kind of random operations that weren't covered in the primary use cases of GET, PUT, and DELETE.
    The core operations for a key-value store are get, put, and delete. As you'd expect, each of these correspond to well-defined HTTP verbs. And by well-defined, I mean that they're more than just window-dressing to indicate intent. For example, a client might cache the response to a GET request exactly because it's defined to allow that.

    But HTTP includes a fourth verb, POST, which provides for cases where strict key-value store semantics don't suffice. Rather than take the pedantic tack of insisting that everything fit into a single abstraction, HTTP gives you POST as a fallback.

    Unfortunately, for historical reasons, this led developers to misunderstand and overuse POST, which, in turn, contributed heavily to the confusion that surrounds HTTP to this day.
    In practice, most web developers have looked at POST as the mechanism which enables RPC on the web. "If I want to prompt the server to perform an action of any kind, I use POST." This meant that a huge number of HTTP requests over the past twenty-plus years could have used HTTP verbs to identify their purposes and intents, but instead had the application layer figure it out.

    Even systems like Rails, whose developers realized that they could use HTTP verbs for this purpose, lost track of the basic idea that HTTP was a big key/value store. Instead of recognizing that PUT maps exactly to the act of putting a new key in a hashtable, they chose randomly, with no obvious rationale, to arbitrarily consider PUT equivalent to the "update" in CRUD, and POST equivalent to CRUD's "create."

    Using the application layer to handle protocol-level information makes web apps slower to run, and more expensive to build and maintain. If we could total up the dollar value of this misplaced effort, it would be quite a lot of money. That's true also for the example of rebuilding Basic Auth by hand on every site and app since day one.

    As for REST, it's a huge topic. For now, just understand that this mountain of errors we're looking at is really just the tip of an iceberg.

    Superset The Dominant Paradigm


    To paraphrase William Gibson, the future is already here, it's just not widely recognized. People in general find it a lot easier to put a new, unfamiliar thing in a familiar category than to wrap their heads around a new idea, and that's true even when the new idea doesn't really fit in the category they choose for it. Designers even do this on purpose; for instance, it's not an accident that getting on an airplane feels a lot like getting on a train, and the reason isn't because trains are necessarily great models for organizing transit. They're good, but that's not the reason. The reason is that when flight first became a widespread technology, it scared the shit out of people. Designers made it look familiar so it would feel safe.

    In 2008, GitHub basically did the same thing. Git's fundamentally a functional data structure, but that sales pitch will only work for a few very unusual people. "Imagine if Subversion could handle many more branches at a time" is a much easier sell. Likewise, treating hypermedia like a bunch of remote procedure calls was just easier for a lot of people.

    But here's where I disagree with Mr. Crockford: I believe that the idea that everybody has to understand a paradigm, for that paradigm to matter, is itself an outdated paradigm. After all, both HTTP and git have been wildly successful despite consistent and incredibly widespread misuse.

    Maybe the key is just to superset some existing paradigm, so that the late adopters can use their old paradigms, while early adopters use their new paradigms, all within the same technology. This approach certainly worked for JavaScript, and it might even be the secret sauce behind Git and HTTP's success stories too.

    by Giles Bowkett (noreply@blogger.com) at June 15, 2015 02:02 PM

    An Annoyance: "Virtuoso Mixer Players"

    When a radio interviewer asked deadmau5 about his disrespect for DJing as an art form, deadmau5 said he didn't know any virtuoso mixer players.



    But anybody who knows anything about dub music knows that dub is all about virtuoso mixer players.



    Turntablism is also all about virtuoso mixer players.



    If you don't know of any virtuoso mixer players, then you don't know about Underworld - one of the greatest electronic acts of all time - and you don't know about dub or turntablism - two entire genres which have both shaped electronic music.

    deadmau5 is an interesting producer and his live shows have tremendous style. But he talks a lot of shit, and he doesn't always know what he's talking about.

    by Giles Bowkett (noreply@blogger.com) at June 15, 2015 10:17 AM

    John Udell

    After Yahoo Pipes: Back to square one?

    I had long expected the Yahoo Pipes end-of-life announcement, but it was still sad to finally read it. Wiring the Web, as Pipes and newer services like IFTTT and Zapier do, will continue to be a great way to get things done.

    Last week, for example, I noticed traffic to a Web server where I'm running a soon-to-be-retired prototype of an Atom feed for our annotation service. The next day I found out it was a partner who's using Zapier to pull the data into a tracking system. Cool!

    [ Automation for the people: The programmer's dilemma. | Get a digest of the day's top tech stories in the InfoWorld Daily newsletter. ] IFTTT Slack iOS jonudell.net

    I've been poking around with IFTTT and Zapier too, using them to connect our Atom feeds to apps, like Slack, that in turn can send notifications to mobile devices. This is silly, simply a way to try out how it'll feel when we can do it more directly.

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

    by Jon Udell at June 15, 2015 10:00 AM

    June 14, 2015

    Giles Bowkett

    Mad Max vs. The Babadook: Australian Feminist (And "Feminist") Movies

    Two movies. Both from Australia. Both with feminist themes.

    Mad Max has a male director, and The Babadook has a female one.

    Mad Max has a tumblr about how feminist it is. But in terms of story mechanics, only one of the female characters takes actions or makes decisions which push the story in any direction at all. And that female character sports a masculine look.

    I knew a screenwriter once who said that not every actor gets to play a character. What an actor calls a character only counts as a character in screenwriting terms if they play a role in shaping the story. Some actors just play window dressing, situations, punchlines, or MacGuffins. He was talking about movies like Mad Max.

    This "feminist" movie is packed to the gills with women who act as props. They take a backseat for almost the entire film. I'm not even speaking figuratively. There is a backseat, and they sit in it.

    Story is what makes people give a shit. For the first hour of Mad Max, I thought I would be coming back the next day to see it three or four times in the theaters. After the first hour, I was bored and ready to leave - especially since the second hour is basically just a repeat of the first hour, but with motivations that make much, much less sense.

    I heard a snort of contempt from someone else in the audience when Imperator Furiosa did her weird little "we're not white people" tribal gestures with her long-lost fam. A dude somewhere behind me barked an aggressive, approving laugh when Max told Furiosa that she was the only woman who could get in the truck. You lose the audience, you have nothing.

    Meanwhile...

    The Babadook centers on a woman, and it puts that woman in conflict with her sister, her sister's (female) friend, her niece, a little old lady who lives next door, and a female bureaucrat. These female characters, in actor terms, are female characters in screenwriting terms as well. They make the story happen.

    It's a horror movie, and it's scary as fuck. It's also emotionally moving; because there's so much story, there's also a ton of giving a shit.

    If you're a female actor and you got a role in Mad Max, it's not much different than working on the average rap video. You're going to wear revealing clothing. You'll mostly just be standing around looking pretty the whole time - but this time, you're doing it for feminism.

    The kind of feminism where the only woman who actually matters in the entire movie dresses like a man. Backed with the kind of story that would never persuade anyone who didn't already agree.

    Meanwhile, if you're a female actor and you got a role in The Babadook, you're going to have to work, because your role affects the story.

    And the worst misogynist could watch this thing, feel sympathy for this woman, and want her to succeed.

    I know a lot of people are starved for feminist semiotics in cinema, yet for some reason they won't satiate that hunger by seeing any movies except for obvious Hollywood stuff. They're happy about Mad Max, and I'm glad they got at least a taste of what they wanted. But if you want the real thing, you don't have to look very hard.

    If you're hungry for feminism in movies, you should know that The Babadook is a tomato, and Mad Max is the kind of ketchup they make out of corn starch and red food coloring.

    One of these movies is an awe-inspiring chase scene, punctuated by terrible dialog, and followed up by a crappy remake of its own first hour. As a chase scene, it's a work of genius. If it ended after the first hour, it would be the best short film ever made.

    But the other one is an actual movie.

    by Giles Bowkett (noreply@blogger.com) at June 14, 2015 09:15 AM

    June 13, 2015

    Dave Winer

    An exciting west coast trip

    I'm winding up a west coast trip that took me to Portland and Seattle over the last week. Lots of interesting meetings, and along the way a number of developments that inspire new thinking.

    Allen & Ward

    I spent two days in Portland as the guest of Allen and Rebecca Wirfs-Brock. The purpose of the trip was to get me together with Ward Cunningham, the guy who invented the wiki. He has a fascinating story, and because he's not much of a writer himself, I'm not sure if it's been told. He and I think and work a lot alike, and have been working in parallel on flip sides of the same idea since the mid-90s, without ever meeting (indicating that there may be a conference missing in the tech world). We're already working on a couple of projects and thinking about a bunch more. The goal is to connect our work in interesting new ways. And since we both abhor lock-in, and love working with other developers, the connections will be open, and our products subject to replacement. That is one way new standards are developed.

    Allen Wirfs-Brock works on a different kind of standard. He's the editor of the new JavaScript spec. What a thrill to meet someone in his position. Me, the JavaScript newbie, got to ask the super-expert how to do the things I want to do. He knows. Allen and Ward have both been around even longer than I have, so the stories were fantastic.

    One thing I came away with is a wish that I had made this trip, and met Ward, a long time ago. My life would have been vastly different, for the better.

    Changes at Twitter

    On the train Thursday from Portland to Seattle, Twitter announced an end to the 140-char limit for DMs, and also announced that CEO Dick Costolo was stepping down, being replaced, at least in the interim, by Twitter founder Jack Dorsey.

    I'm glad they got rid of the 140-char limit, at least in DMs.

    I have had a chance to think, if I was the new czar of Twitter, what I would do, and it would be this. I'd list all the limits for users and devs, and one by one, erase them. I would move Twitter into position to be the ultimate open platform for realtime communication. I would make some unretractable commitments to developers, by releasing lots of the basic Twitter technology as open source, so it could be immediately federated. It might take some time to do it well, and we would take the necessary time. It would guarantee that we'd always have the highest performance, most reliable notification system, or we'd be replaced. Honestly, I'd bet that over time we would be replaced. But the Internet still needs an identity system. And for that, I'd charge users a small yearly fee to maintain an identity that could participate in the global network that Twitter would now define. That would cut back on a bunch of initiatives, so some of the current Twitter employees would go on to start new companies. I'd invest in them, so we could participate in their upside. This would prepare Twitter for mid-life. It's no longer a startup. And now it's time to serve as a true coral reef, as an operating environment, as an organization, and as a bank account. I know this is a radical re-shaping, and it may only be possible if Twitter is acquired, and basically taken private, and I wouldn't have a problem with that as long as one of the terms of the deal is that all this would happen. The idea is to get Twitter back on track to being globally significant. To realize the potential it had when it was a startup almost ten years ago.

    If the acquirer were Google, btw, I'm pretty sure they'd be happy to go this route, because no matter what their future is tied directly to the future of the open web, and the open web is suffering because of all the silos. One of them is Twitter. Desiloizing Twitter would be a brilliant move, it would strengthen the open web, create vast new developer opportunities, and investment opportunities for the new owners. Google, of course, has much more cash than Twitter, and already realizes that it needs to diversify. Here's a great way to add fuel to the fire.

    Of course no one is hiring me to run Twitter, so this is all a fancy dream. But it's fun to speculate!

    Apple and RSS

    One more idea then I have to go.

    Yesterday I, and a bunch of other bloggers, got an email from Apple saying they wanted to use our RSS feeds in their new Apple News product. There were a few conditions, very reasonable, and an easy opt-out. I was very happy to see this, and glad to have this blog participate.

    Earlier in the week when they announced Apple News, it appeared as if we would have to convert our feeds to conform to Apple's guidelines. I wasn't planning on doing that. But it's great that Apple is accepting RSS as-is, and making that support very public.

    Now I think of people who thought there was no reason to have a blog and an RSS feed. To get this distribution, apparently, you need to be here. Apple just gave the open web a big boost. A big surprise, and much appreciated.

    June 13, 2015 08:28 PM

    Tim Ferriss

    TF-StitcherButton

    The Tim Ferriss Show with Bryan Johsnon

    Bryan Johnson is an entrepreneur and investor. He is the founder of OS Fund and Braintree, the latter of which was bought by eBay in 2013 for $800 million in cash.

    Bryan launched OS Fund in 2014 with $100 million of his personal capital to support inventors and scientists who aim to benefit humanity by rewriting the operating systems of life. In other words: he fuels real-world mad scientists.

    His investments include endeavors to cure age-related diseases and radically extend healthy human life to 100+ (Human Longevity), replicate the human visual cortex using artificial intelligence (Vicarious), mine an asteroid (Planetary Resources), reinvent transportation using autonomous vehicles (Matternet), and reimagine food using biology (Hampton Creek), among others.

    Our conversation includes his rags to riches story, his philosophical hardwiring, negotiating/sales tactics, and even parenting. We cover a ton of ground with a fascinating and deep mind.

    Enjoy!

    TF-ItunesButtonTF-StitcherButton

    Do you enjoy listening to world-class entrepreneurs?  If so, you might enjoy my conversations with Peter Thiel. He co-founded PayPal in 1998, which was sold to eBay for $1.5 billion. He was also the first outside investor in Facebook (!) and has since created another billion-dollar+ startup called Palantir. Stream our conversation 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 your 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 Greens.com/Tim

    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: Do you have a story of an untested assumption that held you back? How did you identify it and change your behavior? Please let me know in the comments.

    Scroll below for links and show notes…

    Selected Links from the Episode

    Human Longevity | Ginkgo Bioworks

    Show Notes

    • Gasoline bombs, baseball cards, and deconstructing high school power structure [2:00]
    • How Ecuador and cell phones helped Bryan as an entrepreneur [8:20]
    • From broke and unemployable to a record-setting sales person [12:35]
    • The critical failure point for Bryan’s real estate company [16:50]
    • What to look for when hiring sales people [18:30]
    • How long until a computer can identify trustworthy people? [21:00]
    • The transition from sales person to founding Braintree [22:35]
    • How to build a technical team without being a technical founder [25:30]
    • The three main goals Bryan had in mind when founding Braintree [27:05]
    • On deciding to pivot the direction of the first profitable company [30:40]
    • Appreciating Ernest Shackleton and the “Shackleton sniff test” [33:40]
    • Are you glad that you got an MBA? [35:15]
    • On firing the rocket ship that was Braintree and market targeting for re-broadcasting [38:45]
    • Breakaway moments, primary competitors, and convincing big companies to use Braintree [42:20]
    • What it means to code to the Application Programming Interface (API) and the growth potential if done well [45:00]
    • Keys to building a workplace loved by employees [47:45]
    • Why storytelling was critical for cultivating a great company culture [52:15]
    • On becoming a pilot, the process, and estimated costs  [58:30]
    • How Bryan Johnson defines “success” [1:00:45]
    • The OS Fund, why it exists, and how to think on the “operating system level” [1:02:10]
    • On the moral questions of advanced technology at scale [1:07:20]
    • Challenging assumptions and the story of five monkeys sprayed with cold water [1:14:30]
    • How Bryan Johnson unpacks feelings of overwhelm [1:18:35]
    • The historical figure Bryan Johnson most identifies with [1:22:10]
    • Entrepreneurs who Bryan Johnson admires for their aggression [1:26:30]
    • What is an entrepreneur? How does one develop entrepreneurial characteristics? [1:28:30]
    • Rapid Fire Questions: Most gifted books, billboards, and advice to his 30-year-old self [1:32:00]
    • Non-obvious traditions to hold with your kids and common problem points when parenting [1:35:55]

    People Mentioned

    by Ian Robinson at June 13, 2015 03:18 AM

    Dave Winer

    Scripting News in Apple News

    I just got a very nice email from Apple saying they are including Scripting News in Apple News, and they offer me a chance to opt-out. But if I don't mind (of course I don't) I don't have to do anything. Delighted that they have accepted the spirit of RSS, at least so far.

    June 13, 2015 12:40 AM

    June 11, 2015

    Lambda the Ultimate

    Self-Representation in Girard’s System U

    Self-Representation in Girard’s System U, by Matt Brown and Jens Palsberg:

    In 1991, Pfenning and Lee studied whether System F could support a typed self-interpreter. They concluded that typed self-representation for System F “seems to be impossible”, but were able to represent System F in Fω. Further, they found that the representation of Fω requires kind polymorphism, which is outside Fω. In 2009, Rendel, Ostermann and Hofer conjectured that the representation of kind-polymorphic terms would require another, higher form of polymorphism. Is this a case of infinite regress?

    We show that it is not and present a typed self-representation for Girard’s System U, the first for a λ-calculus with decidable type checking. System U extends System Fω with kind polymorphic terms and types. We show that kind polymorphic types (i.e. types that depend on kinds) are sufficient to “tie the knot” – they enable representations of kind polymorphic terms without introducing another form of polymorphism. Our self-representation supports operations that iterate over a term, each of which can be applied to a representation of itself. We present three typed self-applicable operations: a self-interpreter that recovers a term from its representation, a predicate that tests the intensional structure of a term, and a typed continuation-passing-style (CPS) transformation – the first typed self-applicable CPS transformation. Our techniques could have applications from verifiably type-preserving metaprograms, to growable typed languages, to more efficient self-interpreters.

    Typed self-representation has come up here on LtU in the past. I believe the best self-interpreter available prior to this work was a variant of Barry Jay's SF-calculus, covered in the paper Typed Self-Interpretation by Pattern Matching (and more fully developed in Structural Types for the Factorisation Calculus). These covered statically typed self-interpreters without resorting to undecidable type:type rules.

    However, being combinator calculi, they're not very similar to most of our programming languages, and so self-interpretation was still an active problem. Enter Girard's System U, which features a more familiar type system with only kind * and kind-polymorphic types. However, System U is not strongly normalizing and is inconsistent as a logic. Whether self-interpretation can be achieved in a strongly normalizing language with decidable type checking is still an open problem.

    June 11, 2015 06:45 PM

    Fog Creek

    dev.life – Interview with Tomomi Imura

    In dev.life, 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 Tomomi Imura, Senior Developer Evangelist at PubNub, who previously worked in mobile development roles for Yahoo! and Palm. She’s an Open Web advocate and writes about HTML5, CSS, JS, UX, tech events and gadgets on her blog. However, unintentionally she’s perhaps best known for creating the HTTP Status Cats.


    Tomomi Imura
    Location: San Francisco, CA, US
    Current Role: Senior Developer Evangelist at PubNub

    How did you get into software development?

    My first “computer” was Canon’s low-cost MSX machine in the 80s. While all other kids were playing games on Nintendo, I was more into programming BASIC, well, sort of. What I did was I manually type in some code samples from books because copy-paste wasn’t available.

    However, I then completely lost my interest in programming. I started getting into music and playing guitar, and didn’t even touch a computer until I re-discovered some geek fun after I got an Apple Performa later in the mid-90s.

    Around that time, I taught myself how to code HTML to create a website dedicated to Mac communities. My moniker, @girlie_mac, originates from my first overly pink website called “Girlie MacIntosh”.

    I never formally studied any Computer Science while I was in college. I actually studied Biology, and my first professional job wasn’t related to computers either. I was a researcher at an Environmental Microbiology lab. But I never stopped updating my website because of its popularity and eventually I joined an e-learning (or edTech, in 2015 terms!) startup as a Web Developer.

    Ever since, I have been developing for web and mobile web, including web-based operating systems for mobile phones! (remember Palm webOS?). Lately though I have shifted my role to a developer evangelist.

    msx (1)

    Tell us a little about your current role

    My current gig is at a real-time data stream network startup, called PubNub. Just like UX designers are trying to create great user experience for apps and services, I am working to achieve great developer experiences with our APIs. I do this by providing guides and tutorials with easy-to-follow code samples and diagrams, and occasionally giving talks and workshops at conferences. I am always thinking about the most efficient and effective ways to make complicated materials into something developers can follow easily. I write tutorials like “How to create a collaborative HTML5 canvas drawing app” and “Internet of Things 101 with Raspberry Pi”. Right now, I am helping summer interns to create more Internet of Things projects, using Arduino, Raspberry Pi, etc.

    When are you at your happiest whilst coding?

    When I have the Eureka moment. Sometimes I struggle for hours to solve one thing, and then all of sudden the answer comes from nowhere (not even from StackOverflow!). This can be from a dream, but usually changing my perspective is the way to have the moment.

    devtools (1)

    What is your dev environment?

    I use a MacBook Air with Sublime for coding and Adobe Photoshop and Illustrator for graphics. I use a Wacom Intuos tablet when I work on graphics and diagrams.

    My must-have tools include browser dev tools, such as Chrome DevTools. They are something I definitely cannot live without as a front-end developer. I can inspect, debug, tweak styles, view local DB, etc. I can’t imagine how I could work without the tools.

    I also love Evernote and Skitch – they come in really handy for note taking. I use them whenever I have ideas for my next projects etc, even when I am away from home/office. I can write them down and attach photos on Evernote anywhere, also I can annotate the photos with Skitch.

    I code sitting, no music, nothing special. My problem is I am always snacking while working. I have gained 8 lbs recently…

    What are your favorite books or resources about development?

    My fave is MDN, Mozilla Developer Network, whenever I need to search web APIs and JavaScript references. Also, this is not a dev tool, but I use Creative Commons Search a lot when I need some funny cat photos, or anything that may be useful for my blog and presentation slide decks.

    httpStatusCat (1)

    What technologies are you currently trying out?

    I’ve started getting into hardware hacking these days. I got myself a LilyPad Arduino at Maker Faire, so I really want to create some fun wearables!

    When not coding, what do you like to do?

    Sitting all day coding gives me back pain so I try to Yoga often. I sometimes take outdoor Yoga classes in Golden Gate Park, especially when the infamous fog (“Karl the Fog”) is away. I must enjoy the rare sunlight whenever I can!

    Otherwise, I am making more cat memes.

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

    Don’t hesitate to ask people dumb questions. Your questions may not be so dumb after all.

     

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

    Recent dev.life Interviews

    Chris
    Chris Hartjes
    Paul Jones
    Paul M. Jones
    Michael Fogus
    Michael Fogus
    Casey Muratori
    Casey Muratori

    by Gareth Wilson at June 11, 2015 09:04 AM

    June 10, 2015

    Giles Bowkett

    Browser MIDI Is About Hardware As Much As Music

    You can use MIDI to make music in your web browser, and that's going to open up a lot of new possibilities.

    But it isn't just about the music. There's such a huge range of MIDI controllers available that the web browser just became a perfectly viable platform for very basic embedded systems. One major, important trend in music software is external controllers which completely replace the computer as a user interface.

    With the Traktor S2, released about four years ago, you didn't need to look at your computer very much:



    With the Traktor S8, you don't need to look at your computer at all:



    By contrast, here's somebody using MIDI controllers with loopjs.com to make music in the browser:



    They're looking at their computer while they do it. But they won't have to for very much longer. Web companies will discover the same thing that musical instrument manufacturers have learned. And computers are shrinking rapidly.

    by Giles Bowkett (noreply@blogger.com) at June 10, 2015 09:12 AM

    June 09, 2015

    Tim Ferriss

    Tim Ferriss

    This short (<5 minutes) video will teach you how to triple your reading speed in less than 20 minutes. It works nearly immediately, and there is zero loss in comprehension.

    No voodoo, no pseudoscience — just two tricks for optimizing eye movement.

    Some of you learn better with text, and some of you learn better with video. As one commenter who watched the above video put it:

    “Tim, thanks so much for this video. I read your blog post about this like four times without being able to get it. With a video, it’s much easier.”

    Have fun, and I’d love to hear your results in the comments.

    If you enjoy this, you might also like my posts on rapid language learning, or my interview with champion memory competitor, Ed Cooke. You can stream the latter below:


    by Tim Ferriss at June 09, 2015 04:43 PM

    Mark Bernstein

    1177 B.C.: The Year Civilization Collapsed

    By the 12th century BC, late Bronze-Age civilization had climbed many technological summits. People had cities, trading fleets, and caravans. People had built tall towers, elaborate palaces, complex bureaucracies and smoke-filled taverns. People had pickles, onions – our word “shallot” comes from the Canaanite city Ashkelon – and sesame-seed buns: “sesame” in English is a loan-word from Akkadian.

    But in 1177, give or take a few years, everything fell apart. Egypt, Mycenae, Knossos, Babylon, Hattusa, Ugarit, Troy: – just about everywhere you look, there are fires and wars and devastation and disaster. Centuries would pass with people telling stories about the age of heroes, the age before the end of Western civilization.

    The cause of the disaster has been extensively discussed in recent decades, and Cline nicely summarizes what we know. A rash of earthquakes didn’t help at all. A shadowy group of warrior-migrants called the Sea Peoples caused plenty of havoc; it’s odd that we know so little about them, but then, we know shockingly little about the Huns and the Huns are 1,600 years closer to us. Ideology may well have played a role: people everywhere may have been getting tired of the whole business of palace culture, or merchant-adventurers (or pirates) may have cut into the profit margins that kept those palaces running. Climate change may have been a factor. Commodity shocks may have wrecked the economy; the entire word depended on one mine for weapons grade tin. There are signs of fiscal turmoil in Greece, where Mycenae played a pivotal role in international trade. The Sea Peoples might have been Greek or Italian. Perhaps the first Grexit brought down a multinational economy already weakened by climate change, ecological mistakes, financial shenanigans and social upheaval.

    June 09, 2015 04:39 PM

    Fog Creek

    Going Beyond Code to Become a Better Programmer – Interview with Pete Goodliffe

    .little {font-size: 75%}
    Going Beyond Code to Become a Better Programmer – Interview with Pete Goodliffe

    Looking for audio only? Listen on

    In this interview with Pete Goodliffe, author of ‘Becoming a Better Programmer‘, we dive into issues that go beyond code and separate the good from the great developers. We cover things like attitude, communication skills, managing complexity and what you can do to learn more and keep your skills up to date.

    Content and Timings

    • Introduction (0:00)
    • About Pete (0:23)
    • A Great Developer’s Attitude (0:49)
    • Write Less Code (2:00)
    • Communicating Effectively (3:10)
    • Handling Complexity (4:24)
    • Keeping Your Skills Up to Date (7:07)
    • Recommended Resources (8:27)

    Transcript

    Introduction

    Derrick:
    Pete Goodliffe is a programmer and software development writer, perhaps best known for his software development book, ‘Code Craft’. He speaks regularly at conferences on software development topics and recently published ‘Becoming a Better Programmer: A Handbook for People Who Care About Code’. Pete, thank you so much for joining us. Would you like to share a bit about yourself?

    About Pete

    Pete:
    Sure. I’m a geek. I’m a developer. I like to say I’m a conscientious coder, making the world better one line of code at a time. I am a regular magazine columnist. I’ve been writing a column for more than 15 years now, which is probably some kind of record, I suspect. My day job, I’m a coder. I work in a really awesome team making fun stuff. I’m a musician and I get the opportunity to write code for musical instruments.

    A Great Developer’s Attitude

    Derrick:
    In the book, Becoming a Better Programmer, you say the real difference between adequate programmers and great programmers is attitude. What are the characteristics of a great programming attitude?

    Pete:
    The standout difference between the really good coders that I’ve worked with and the guys that aren’t so great, is attitude. It’s not a hand-wavey thing. I’ve worked with guys who know technology and who know the idioms, and how to do all this stuff. If they don’t have the right attitude they’re just not effective programmers and they’re not great guys to work with. The kind of stuff I’m talking about here, is humility. You don’t want to work with guys who think they know it all but don’t. Being humble is the key thing.

    It doesn’t mean that’s an excuse to not know stuff, but just not believing that you’re better than you are. Specifically, being in a state of constant learning, which I guess ties in with humility, so constantly looking for new stuff, absorbing new knowledge, wanting to learn off other people, the desire to do the best thing you can. It doesn’t necessarily mean be a perfectionist and wanting to make everything perfect before you ship. It’s doing the best you can in the time you have, with the resources you have. That kind of attitude really drives through to great code, great products rather than sloppy work.

    I’ll mis-quote Sartre and say “Hell is other people’s code”

    Write Less Code

    Derrick:
    You’re an advocate for writing less code. Why is this and how can programmers actively work on coding more concisely?

    Pete:
    Yeah, less code. It seems kind of counter-intuitive for a coder but I think most old-hands know what talking about. It’s kind of the case of working smarter not harder. It’s entirely possible to write thousands of lines of code and achieve nothing in it. Think about it, no unnecessary logic, don’t write stuff that doesn’t need to be said, don’t write verbose code. Sometimes you can stretch out boolean expressions into massive if statements which just hide what is being said.

    It’s really a pointless comment, we’ve all seen that haven’t we, code with an essay, and then the function body is really small. Somewhere in the essay there’s some important information but you didn’t need the fifteen paragraphs of comments. No pointless comments, the code just does what it does. The writing of simple but not simplistic code. If you don’t write enough code, it doesn’t do what it’s supposed to do, but just avoiding all those points of needless generality. Don’t make abstracts interfaces, don’t make deep hierarchies that don’t need to be extended, if you don’t need to extend them.

    Communicating Effectively

    Derrick:
    For most professional programmers, development is a social activity in which communication is key, how can programmers begin to communicate more effectively?

    Pete:
    Code is communication. You’re communicating not just to the computer, you are communicating to other people writing the code. Even if you are working by yourself, you are communicating to yourself in two years time when you pick up the same section of code. It’s a skill, and it’s something you learn, and it’s something you consciously practice. I don’t know of courses, Uni courses or practical courses that really focus on something that’s really quite an important skill for programmers. It’s something that you need to consciously practice, you need to consciously work on, you need to be consciously aware of.

    It’s true some people come out the gate better placed than others. Some people can talk well, some people are shy and retiring, but that doesn’t necessarily mean you are stuck like that. That doesn’t necessarily make you a bad communicator. Some people communicate better in different media and it’s worth bearing that in mind. Some guys are really great on email, they can write concise, clear descriptions, they can follow a line of argument writing and explaining something really well. Other people struggle to put it together in words. Learning how you communicate well, playing to your own strengths, then picking the right medium.

    Handling Complexity

    Derrick:
    What are some ways developers can approach managing complexity in software development?

    Pete:
    A key thing to understand is the difference between necessary complexity and unnecessary complexity. The reason people pay us to write software, unless we’re doing it for fun, is because there’s a complicated problem that needs to be solved. There is some level of necessary level of complexity in software engineering and we have to embrace and understand. The problem is the unnecessary complexity. You can take something, a problem you need to solve, add a little bit of complexity, but then if you wrap it up in class design and higher up it reveals itself in architecture.

    One thing I know about well crafted software that basically has the necessary complexity but none of the unnecessary complexity is when I look at it, it looks obvious. That is the key hallmark of some excellent code. You look at it and you just think, “You’ve been working on that for a while” and I look at it and I go, “That’s clearly right.” And you know it wasn’t simple to write. When you look at it the solution’s simple, the shape is simple. All I can say is, that’s what we should strive for.

    I have learned the most in my career when I have been around excellent people

    Derrick:
    What are some things developers can do to tackle messy or bad code bases?

    Pete:
    The most important thing is when you get into your codebase, is to ask people. I see so many developers who just won’t sort of swallow their pride and say, “I don’t quite know what this is doing, but I know Fred over there does. I’ll just go talk to Fred about it.” Often those little bit of insights give you a super fast route through something intractable, a little explanation sort of takes you in there. I’ll mis-quote Sartre and say “Hell is other people’s code.” We all kind of go into that, I do this, and I really struggle with this. I pick up some code, I look at it, that’s a bit dodgy isn’t it. “I really wouldn’t do it like that, what were they thinking, they must be idiots!”

    Then my code, I think it’s great. I understand it perfectly, but then somebody else picks it up, they’ll make that same judgement call on my code. What I think is their terrible hack, is actually some pragmatic thing they did for very good reason. When you’re reading messy code, looking at messy code, enter with humility. Nobody really goes out of their way to write badly. Nobody goes out of their way to write messy code, in general. I can’t say that I’ve found anyone that really tried to ruin a project. Approach code with that attitude.

    The retrospective prime directive, I can’t remember how it goes, we truly believe everyone did the best they could to the best of their abilities at the time given what they knew, etc., etc. This stops you from making judgement calls, stops you from saying oh, I’m going to rip this whole thing out and start again. This teaches you humility to look a little deeper first.

    The standout difference between the really good coders… and the guys that aren’t so great, is attitude

    Keeping Your Skills Up to Date

    Derrick:
    The stuff that we work with is constantly changing and it’s all too easy to find yourself becoming something of a coding dinosaur. What can programmers do to ensure that they keep learning and developing their skills?

    Pete:
    If we value our careers and our skill sets, then this is something you should really be caring about. This is something I find really challenging for myself right now as well. The things I’m focusing on and learning right now are not necessarily coding-related stuff. I’m challenged with learning management, some high-level decision and tactical thinking on a project, rather than dipping into low-level coding stuff. Which is also really fun, but it does mean that I’m pulled away from thinking about the lower-level technical stuff. I want to challenge myself, not get stale and not become that coding dinosaur.

    It’s interesting because I know the tools that I know well, and I do use them regularly, but it is really easy to become stale if I’m not pushing the envelope on my technical skills. The biggest take away I guess though is passion. If you don’t want to become a coding dinosaur you probably won’t, because you care about it enough that you will learn, you will read, you will spend time, you will look at web casts, whatever. If you don’t have the desire to learn. If you don’t have the motivation to do it, that’s when you stagnate. That’s when you become a dinosaur.

    Recommended Resources

    Derrick:
    What are some resources you can recommend for those seeking to become better programmers?

    Pete:
    The biggest thing for me, and that I have done personally and continue to do, is to sit at the feet of great coders. I have learned the most in my career when I have been around excellent people who I can learn off of. Whose skills can rub off on me and I have moved jobs. I have moved myself physically to be able to work with those guys. If you have the liberty to do that, do that. It’s joining in those conversations replying on Twitter, blogging yourself, joining the local user-groups, and all that good stuff.

    You want to become a better programmer? Again it’s the want to be a better programmer, and just stoking that passion. I’m enthusiastic. I love this stuff. If you have an enthusiasm, that passion for programming, it tells out in the code that you write.

    Derrick:
    Really appreciate your passion today. We can definitely see it, and we hope the viewers enjoy it.

    Pete:
    Excellent. Thank you. Cool.

    by Gareth Wilson at June 09, 2015 09:30 AM

    Decyphering Glyph

    Sorry I Unfollowed You

    Since Alex Gaynor wrote his seminal thinkpiece on the subject, “I Hope Twitter Goes Away”, I’ve been wrestling to define my relationship to this often problematic product.

    On the one hand, Twitter has provided me with delightful interactions with human beings who I would not otherwise have had the opportunity to meet or interact with. If you are the sort of person who likes following people, four suggestions I’d make on that front are Melissa 🔔, Gary Bernhardt, Eevee and Matt Blaze, all of whom have blogs but none of whom I would have discovered without Twitter.

    Twitter has also allowed me to reach a larger audience with my writing than I otherwise would have been able to. Lots of people click on links to this blog from Twitter either from following me directly or from a retweet. (Thank you, retweeters, one and all.)

    On the other hand, the effect of using Twitter on my productivity is like having a constant, low-grade headache. While Twitter has never been a particularly bad distraction as measured by hours spent on it (I keep metrics on that, and it’s rarely even in the top 10), I feel like consulting Twitter is something I do when I am stuck, or having to think about something hard. “I’ll just check Twitter” is an easy way to “take a break” right at the moment that I ought to be thinking harder, eliminating distractions, mustering my will to focus.

    This has been particularly stark for me as I’ve been trying to get some real writing done over the last couple of weeks and have been consistently drawing a blank. Given that I have a deadline coming up on Wednesday and another next Monday, something had to give.

    Or, as Joss Whedon put it, when he quit Twitter:

    If I’m going to start writing again, I have to go to the quiet place, and this is the least quiet place I’ve ever been in my life.

    I’m an introvert, and using Twitter is more like being at a gigantic, awkward party all the time than any other online space I’ve ever been in.

    There’s an irony here. Mostly what people like that I put on Twitter (and yes, I’ve checked) are announcements that link to other things, accomplishments in other areas, like a blog post, or a feature in Twisted, but using Twitter itself is inimical to completing those things.

    I’m loath to abandon the positive aspects of Twitter. Some people also use Twitter as a replacement for RSS, and I don’t want to break the way they choose to pay attention to the stuff that I do. And a few of my friends communicate exclusively through direct messages.

    The really “good” thing about Twitter is discovery. It enables you to discover people, content, and, eugh, “brands” that appeal to you. I have discovered things that I enjoy many times. The fundamental problem I am facing, which is a little bit hard to admit to oneself, is that I have discovered enough. I have enough games to play, enough books and articles to read, enough podcasts to listen to, enough movies to watch, enough code to write, enough open source libraries to investigate, that I will be busy for years based on what I already know.

    For me, using Twitter’s timeline at this point to “discover” more things is like being at a delicious buffet, being so full I’m nauseous, and stuffing my pockets with shrimp “just in case” I’m hungry “when I get home” - and then, of course, not going home.

    Even disregarding my desire to produce useful content, if I just want to enjoy consuming content more deeply, I have to take the time to engage with it properly.

    So here’s what I’m doing:

    1. I am turning on the “anyone can direct message me” feature. We’ll see how that goes; I may have to turn it off again later. As always, I’d prefer you send email (or text me, if it’s time-critical).
    2. I am unfollowing literally everyone, and will not follow people in the future. Checking my timeline was the main information junk-food I want to avoid.
    3. Since my timeline, rather than mentions and replies, was my main source of distraction, I’ll continue paying attention to mentions and replies (at least for now; I’ll have to see if that becomes a problem in the absence of a timeline).
    4. In order to avoid producing such information junk-food myself, I’m going to try to directly tweet less, and put more things into brief blog posts so I have enough room to express them. I won’t say “not at all”, but most of the things that I put on Twitter would really be better as longer, more thoughtful articles.

    Please note that there’s nothing prescriptive here. I’m outlining what I’m doing in the hopes that others might recognize similar problems with themselves - if everyone used Twitter this way, there would hardly be a point to the site.

    Also, if I’ve unfollowed you, that doesn’t mean I’m not interested in what you have to say. I already have a way of keeping in touch with people’s more fully-formed ideas: I use Blogtrottr to deliver relevant blog articles to my email. If I previously followed you and you think I might not be reading your blog already (in most cases I believe I already am), please feel free to drop me a line with an RSS link.

    by Glyph at June 09, 2015 12:41 AM

    June 08, 2015

    Giles Bowkett

    June 07, 2015

    Dave Winer

    What changes at Medium and Yahoo Pipes teach us about the persistence of the web

    Yesterday I did a review of the feeds I follow for tech news, and posted a request to Facebook for people to recommend their favorites. In this review I came across a "MegaFeed" for Glenn Fleishman, a blogger who also writes for a number of publishers. The feed is stitched together by Yahoo Pipes, a service that has been around for many years. They announced last week that the site will close in September. There is a discussion on Yahoo's support forum.

    I wondered what will happen to the people who follow feeds produced by Yahoo Pipes? Yahoo doesn't say they'll provide free redirection, but it would be good for the web if they did. However, even if they did provide redirection, where would people redirect to? Because Yahoo was a big company people trusted and their service was free, little if any competition developed for Yahoo Pipes. Either way, it's a clear example of why it's not good to depend on free commercial services to form critical parts of your content infrastructure.

    Then I read stories on BuzzFeed, Business Insider and Fortune about recent changes at Medium, another site where people post their ideas, instead of posting to a blog that they pay for and control.

    When people post to Medium they think about exposure for their ideas today, but imho they should also be thinking about how people are going to find their ideas in the future. There's no guarantee that Medium won't shift strategy again, or shut down. It happens all the time in the tech world. With no way to dual-host content, and no guarantee of future redirection, Medium is not a very future-safe place to post.

    But even sites like Tumblr and WordPress.com that look stable are still subject to corporate changes or disappearance.

    What we need, and still don't have, is a systematic way of publishing to the future. Such a system would allow you to pay a fixed sum to keep your content at a specific address for the foreseeable future. No one can make a guarantee, we don't know what the future holds, but every effort has to be made, upfront, to be sure that the content has the best chance to survive as long as possible.

    It would be nice if a visionary entrepreneur would get involved, and an educational institution, perhaps, and/or an insurance company, the kinds of organizations our society creates to be long-lived. It would be great to get input from Stewart Brand and his colleagues at the LongNow Foundation.

    I've said this many times, it bears saying again. I've been aware of this problem for a long time, and I'm hosting a lot of archives that should be preserved long-term. I want them to be, I'd be willing to bequeath the funds in my will to keep the content going for the indefinite future, but today there is no way to do it, as far as I know.

    PS: People always say archive.org is the answer. Of course I'm aware of that excellent and wonderful service. But long-lived content is not the same thing as having a snapshot. We're building networks here. Archive.org is a museum. I'm very glad it exists. I want something different, a way for the actual content and the networks they're part of, to persist.

    PPS: An after-the-fact open source release of Yahoo Pipes probably isn't an answer.

    June 07, 2015 05:31 PM

    June 04, 2015

    Dave Winer

    Throwback to 2001

    This picture was taken in my office in 2001.

    A picture named dave2000.png

    This is when RSS was just taking off. We were working on Radio 8.

    I like the Windex bottle. I kept it near to clean the monitor and my glasses. I was a smoker then, so I guess things got smokey?

    Gumby was part of the entourage.

    June 04, 2015 05:59 PM

    Blue Sky on Mars

    Utter Disregard for Git Commit History

    Look, I don’t give two shits about my Git commits.

    I have no shame — okay, maybe a little shame — dropping these commits into my repositories:

    Commit list

    Over the last five years, I’ve gotten a lot of questions along the lines of “should I rebase my branches or deal with a merge commit or maybe even squash all of my commits down into a single commit before merging?” Like most pedantic programmer debates, my answer is usually “I don’t care, I’m going to grab another slice of pizza, you do you”, but I’ve been thinking about this a lot recently and I think there’s a more interesting question to consider instead:

    Why do developers take different approaches to repository histories?

    A tale of two changes

    My favorite commit author of all time is Jeff King (@peff). I like his commits so much that even if I were the Sepp Blatter of the Commit Olympic Committee, I wouldn’t need to be bribed to nominate him as a finalist. He’s the number two committer to Git itself, and his commits are truly lovely to read. More often than not, the diff may only be a couple of lines but he'll likely include a detailed, multi-page writeup with code examples and performance benchmarks in the commit message.

    Peff's commit

    This works for git-core because their unit of change is at the commit level. Each commit is designed to be a comprehensive, standalone measurement of the change introduced into the repository. This is a byproduct of their process: contributors are to use git format-patch and git send-email to send their patches to the mailing list so that changes can be efficiently reviewed, discussed, and merged to master.

    Git’s maintainers would say this commit process is designed to ensure speed, quality, and safety. They should know; they’re the best example of working efficiently within Git.

    On the flipside, GitHub is the best example of how to work within github.com, and if you ask them, they’d probably defend their process with the exact same rational: it allows them to move with speed, quality, and safety. Every single change enters production via a pull request, and as such, the pull request is king... not necessarily the commit.

    Nathan Sobo (@nathansobo) is one of my favorite pull request authors. It’s an egregious example for the sake of illustration, but take a look at this particular commit on the Atom repository. It’s a fairly stereotypical commit for GitHubbers: hell, even the commit message itself is emoji. This would not get accepted in git-core.

    Nathan's pull request

    But click up from the commit's page and take a look at the pull request and the general format becomes immediately familiar: it’s an extremely well-written and accessible discussion of the changes in that pull, complete with the analysis of the performance impact it will have. It effectively serves the same purpose as one of Peff’s individual commits.

    Units of change

    These are two extremes of viewing what the core unit of change is for the respective project. From Git’s perspective — likely because of the ease of use inside a mailing list approach — a single atomic commit makes most sense. From GitHub’s perspective, individual commits become less valuable because the atomic unit is the pull request. In both cases, more historical context on a change can be easily found by going back to the mailing list discussion or the pull request conversation.

    I’m a product of GitHub culture, so I tend to throw a lot of commits into my projects. It leads to having more reference points to refer back to in the future. This is particularly true if I’m doing frontend work that requires some experimentation before I know what I’ll ultimately end up with.

    Sometimes I’ll even deliberately push a commit and immediately revert it because I want a record of one possible experiment was. Rebasing out these “mistakes” down to a single commit makes it harder for me to see what I was playing with in the past. All of this leads to a dirty commit history, but I use pull requests to see that history.

    That said, I'm extremely apathetic to this debate. Whatever makes the most sense for your team, go ahead and do it. Certainly successful projects can and have been built on either approach, or a hybrid of the two.

    Limitations

    Sometimes I wish version control had a bit better control over this. It might be interesting if Git had a new object that was below the Commit object — maybe a ExperimentalCommit that would get folded into a single Commit once it went through code review. That way, each developer could commit their scratchpad experimentations to mainline (so they can refer back to them in the future), but a separate commit history of code review could be generated and used as the “clean” history.

    That said, I don’t actually want the added cognitive overhead of expanding Git’s simple object model, either, so I'm not seriously proposing this. It's fun to envision a system where the two mindsets could live together a bit more harmoniously.

    Food for thought for the next hot version control system, perhaps.


    Anyway, what I’m trying to say is that git commit -m “unfuck this” shouldn’t necessarily be a capital crime. I think it’s a little more interesting than that. Look at the unit of change… that’s where the real work happens.

    June 04, 2015 12:00 AM

    June 03, 2015

    Fog Creek

    Conquering Large Legacy Software – Interview with Mike Long

    .little {font-size: 75%}
    Conquering Large Legacy Software – Interview with Mike Long

    Looking for audio only? Listen on

    We interviewed Mike Long, partner at Praqma, and author of ‘Conquering Large Legacy Software’, a field manual for dealing with large, long-lived projects. We discuss how to deal with large legacy codebases, in particular, how to get started, where to focus your attention to maximize returns and how to approach adding tests.

    Content and Timings

    • Introduction (0:00)
    • About Mike (0:26)
    • Getting Started with Large, Legacy Codebases (1:38)
    • Realistic Goals of Improving Legacy Software (3:30)
    • Where to Focus your Efforts (4:04)
    • To Re-write or Improve? (5:12)
    • Tools to Understand Legacy Codebases (6:38)
    • Adding Tests to Legacy Code (7:22)

    Transcript

    Introduction

    Derrick:
    Mike Long is a software consultant and partner at Praqma. He’s a regular conference speaker focusing on areas like cleaning code, long-life software, and continuous delivery. He’s the author of ‘Conquering Large Legacy Software’, a field manual for dealing with large long-lived projects. Mike, thank you so much for taking time to join us today. Why don’t you share a bit about yourself?

    About Mike

    Mike:
    I was born in Australia. I grew up in Scotland, and after University I started my career in England working on drilling tools. After that I moved to Oslo and was there for 5 years working on a giant marine seismic acquisition system. Then I spent the last 3 years in China working on a large legacy system. Since I came back to Norway last summer I’ve been focusing on continuous delivery. I’ve been helping teams adopt modern technical practices in usually complex development problems.

    Derrick:
    Problems in dealing with legacy software are well known. Out-of-date technologies, code no-one understands and no tests, yet few organizations seem to actively work to prevent such issues from occurring. Why do you think is?

    Mike:
    It’s easy to try and point to one of the biggest core reasons that I see that is that there’s a big imbalance and power between the business side of the organizations and the technical side of organizations. When that occurs, when you don’t have strong spokespeople for the software, then you tend to get decisions that are not at the best interest of the software and business in the long term.

    I think the biggest mistake people make is that they don’t start

    Getting Started with Large, Legacy Codebases

    Derrick:
    Just getting started with improving legacy software can be difficult, so where do you recommend people start?

    Mike:
    I guess the challenge for most people that are dealing large legacy systems is that the problem can be so overwhelming that they find it hard to pick a target. What I recommend is to focus on what you’re changing. There’s no sense in spending efforts to improve code or improve the software development process of a part of a system that isn’t changing. If it’s not changing, then you don’t have bugs there because you’re not fixing them, you’re not adding new features there, so the return on improving those areas of the code base is usually very low. If you focus on where people are actively investing their time, you’ll get much better returns on those investments.

    The second thing is when you talk about large legacy systems, I think that the big problem is not the legacy side of things it’s the large side of things. Large monolithic systems are usually a pain point. It’s not the fact that the software isn’t as good as it could be, it’s the software is so big that actually working with it becomes a very slow process. All the tools are very large. Even checking out the changes is a very big process. Doing a build can take a long time. All these frictions in the development process are a big pain. If you can focus on breaking this monolith up into smaller parts that can each have their own release schedule, their own development pipeline, their own tooling, then you will get a much improved development efficiency there.

    That brings me to the third point which is to automate the donkey work. All the stuff that happens manually that could be automated is a great investment. People are the most expensive line item in most software organizations, so if you can find ways to free them up to do value adding work rather than donkey work you’ll get returns very quickly.

    Realistic Goals of Improving Legacy Software

    Derrick:
    What are some realistic goals of improving legacy software?

    Mike:
    Realistically, that’s a challenge because it really depends on what you’re prepared to invest. That in turn is dependent on what your future of the software is. Say you have 20 million lines of code and you’re not very happy with them. The realistic goals are not to improve 20 million lines of code. That’s not going to fly. The realistic improvements are to automate the donkey work, to break up the monolith, to focus on the areas that people are already investing their time on because then you get the return on the investment.

    Where to Focus your Efforts

    Derrick:
    How can you go about measuring the quality of a large legacy system to see where the efforts should be directed?

    Mike:
    I think as software people, we have lots of tools. Tools aren’t the problem with software actually. We have very good tools for the way we work. To get feedback on your code is quite simple. If you want to find out what your code coverage is, what your complexity is, all these things are very easy to figure out and there’s great tool support in terms of static and dynamic analysis and this kind of thing.

    I think one of the most common feedback mechanisms that people mess up on, not just legacy software but software in general, is to tag their change sets when they’re fixing bugs. If you actually tied every time you’re making a change to software in response to a bug, over time you can find out, not only your defect rate, but where in your software those defects occur. You can map them out in your codebase. That’s a very powerful thing. That’s a great way to figure out where to focus your efforts on. That directly feeds back into a return on investment because if you can do preventative work on a place that is error prone that will pay back very quickly.

    To Re-write or Improve?

    Derrick:
    What factors should you consider when deciding whether to rewrite or improve the current
    system?

    Mike:
    If you were to ask Joe Spolsky, he would say never rewrite. I think that, in general, that’s a good rule of thumb. If you have to pick a rule of thumb that’s not a bad one because any significantly valuable piece of software has had a huge investment on it. To assume that you can rewrite it in a way that’s going to provide return on investment is usually very naïve. In my experience, there’s only a couple of cases when it’s a good idea to rewrite. One is that if nobody cares, if there’s no financial cost associated, and of course, open source is a great example, where we make gitlib2 to. It doesn’t matter that there’s already a get library out there. We can make another one because we don’t have the financial constraints.

    The other example is if, like some of these very old systems, there’s no source code around anymore or the tools aren’t, or the mainframes are being decommissioned, or there’s a platform obsolescence, and there are oftentimes when you have to say, “Well, okay, we’re just have to suck it up and rewrite it because we really don’t have any way to carry this forward.” One of the interesting things about modern times is that architectures are much more stable. x86 has been around for a long time, and code that was written in the 90s is still easy to run on modern systems for better or worse. There’s a great deal of effort going into backward compatibility. Those problems of platform obsolescence issues are becoming less and less of a reason for rewriting.

    Tools to Understand Legacy Codebases

    Derrick:
    Are there any tools that one can use to help gain an understanding of that current go base and steps to improve it?

    Mike:
    Yes, there are. In my experience they have different payoffs and they’re very context dependent. If you are dealing with a very large codebase that has unmanaged memory management, you have to do manual memory management. You can get a lot of value out of using a static and dynamic analysis tools to track whether you’re doing the right things with memory, whether you’re going beyond buffer bounds, whether you’re trashing your stack when you don’t even know. There’s great tools out there for that and you should definitely give them a try. Again, it’s very context dependent so don’t rush out and buy tools. Evaluate them and see whether they provide value in your context first.

    You don’t have to look very far in a legacy project to get some wins

    Adding Tests to Legacy Code

    Derrick:
    The common problem with legacy software is the lack of tests. How should you approach testing legacy software?

    Mike:
    Try and get a safety net around the stuff that you’re changing. Typically, the common body of knowledge says, “Unit tests are the way to go.” In a lot of ways that’s very true. As you write code writing unit tests is a very low-cost, low-friction way to get high-quality software. In legacy systems it’s usually very, very difficult to get unit tests into it and breaking those dependencies is very hard. On the other hand you have an awful lot of existing functionality at the user level that you have to keep in a vice. You don’t want to break it. Normally large legacy software tends to have much more end-to-end full system maybe user-interface driven tests which are slow. They’re painful. Getting those things up and running are actually not as expensive as you would imagine, and they can provide a lot of value if you have enough people hammering on a codebase just to give you that safety net, then as you are changing code work on the unit tests and lower level testing.

    Derrick:
    What are some typical opportunities to reduce waste in legacy projects?

    Mike:
    Oh, there’s waste everywhere. You don’t have to look very far in a legacy project to get some wins. As software people, we tend to make the same mistake over and over again and that we wildly overestimate the time it would take to do refactoring and improvement. We wildly underestimate the time it takes to implement features. When we have to make those short-term trade-offs, we always take the wrong choice. On the other hand, once you’ve come to realization that something needs to be done, you don’t have to look far to find quick win. Usually around automation, big systems usually have suffered from poor automation, you can often through a hardware problem as well, as simple thing like just getting some really beefy build service to cut the developer feedback clips is a great way to get the quick win.

    Something often overlooked when people are looking at a software problem, if you go in and spend some money on service, you can save millions of dollars on engineering time. You have to think like that. You have to go for the big wins that you can get and then slowly will chip away at the longer term payoffs.

    Focus on breaking this monolith up

    Derrick:
    Are there any common mistakes people make when trying to tackle legacy software?

    Mike:
    I think the biggest mistake people make is that they don’t start. It’s not that they’ve gone in the wrong direction or they’ve improved the wrong thing. In general, if you have some focus on continuous improvement, you’ll get some wins. The biggest mistake I see in large legacy projects is that people just don’t start. They don’t understand that there’s a really valuable payoff in spending the time to work on this stuff and just rolling up their sleeves and getting on with it.

    Derrick:
    What are some resources you can recommend for those working with legacy software?

    Mike:
    I would be remiss if I didn’t mention Michael Feathers’ book. It is actually a very good book, and if you want to learn how to get legacy software under test, it’s a great resource. It’s got lots of good techniques. If you’re working as part of a team, form a study group or end it. Just learn it.

    Derrick:
    Thank you so much for taking time to join us today.

    Mike:
    Thanks a lot. No problem.

    by Gareth Wilson at June 03, 2015 09:20 AM

    Dave Winer

    The rssCloud docs...

    I did a bad thing, I let the domain rsscloud.org lapse.

    When I did that, all the rssCloud docs fell off the web. ;-(

    We need them back, so I bought rsscloud.co. It isn't perfect but most of the docs now work.

    The main pages

    home.rsscloud.co

    publisher.rsscloud.co

    walkthrough.rsscloud.co

    cribsheet.rsscloud.co

    tool.rsscloud.co

    rssCloud in JavaScript

    Also, Andrew Shell released the first version of his rssCloud-server implementation for Node.js.

    This is a big milestone. Thank you Andrew.

    June 03, 2015 12:14 AM

    June 02, 2015

    Mark Bernstein

    Tinderbox 6.3

    Tinderbox 6.3

    Tinderbox 6.3 is now available. Highlights include ❧ gorgeous and informative treemaps ❧ a fresh walkthrough about agents, actions, and dashboards – some of Tinderbox’s most asked-about features ❧ big speed bump in large and complex maps ❧ dozens of small fixes and extensions. See the upgrade page for all the details.

    The built-in walkthrough for agents and dashboards covers should be especially helpful for new Tinderbox users. Here’s one tab from the example:

    Tinderbox 6.3

    That’s keeping track of expenses during an impromptu business trip. We’ve got running totals, expense distribution, category totals – even a dashboard to remind us to write up the boring daily summaries for which Accounting always pesters us.

    As usual, updates are free if you’ve purchased Tinderbox or a Tinderbox upgrade in the past year. You can upgrade from any version of Tinderbox for $98, or subscribe to automatic renewals for just $83.

    Tinderbox 6.3

    Another tab of the example: an agent plucks out each major city in our heroine’s epic business trip.

    June 02, 2015 03:21 PM

    Dave Winer

    Connecting Slack with RSS

    I set up a test channel on Slack and hooked it up to the Hacker News "firehose" feed, which is fairly high volume. About 20 or 30 posts per hour. I wanted to see how fast it would update.

    I also wrote a small Node.js app that reads the same feed and posts to another Slack channel, as a control. It will post at most one item per minute. So they come out fairly steadily as long as more items are being posted to Hacker News.

    I have also set up an IFTTT recipe to read the feed and see how it compares.

    Update #1

    It took about 1/2 hour for IFTTT to push a dozen items to our group at once.

    Update #2

    Another 1/4 hour another storm of updates from IFTTT.

    Still nothing from Slack's RSS bot.

    My Node app is chugging along, posting one item a minute.

    Update #3 -- 12:20PM Eastern

    It's been over an hour and still nothing from Slack.

    Update #4 -- 2:40PM Eastern

    We are now getting updates from Slack's native RSS support.

    They do more than report headlines, they're scraping the articles that are being linked to from the HN firehose feed.

    But they're doing that with some of the links we push from the Node.js app.

    And now it's been a couple of hours since the IFTTT bot has posted any new stuff, yet the feed is updating continually.

    Then as if by magic a small flood of IFTTT posts from the feed.

    Early conclusions: Slack's native integration is slow and bursty. IFTTT is more regular but bursty. Lots of messages all at once. Neither is ideal for a frequently updating feed.

    June 02, 2015 02:42 PM

    June 01, 2015

    Dave Winer

    How I try to work with journalists

    I read this piece by Charles Arthur thinking maybe this is the breakthrough. Maybe we can start this discussion in earnest. Maybe in fact a lot was gained by putting programmers and journalists in the same room, if only to prove that's not the way to do it!

    Here's how I think it should work, and I think the germ of the idea is there in Charles' piece. He says he is an amateur programmer. He can do some PHP and AppleScript. In the past he's worked a bit in COBOL and C++. That's awesome. We can use that.

    How about if we make great tools that are designed for people like Charles to create their own wonderful web projects.

    Two good things could come from it.

    1. They might make some good software. Don't doubt it. One of my best programmer buddies was a lawyer. He had a good programmer mind, but hadn't really exercised it. Now he teaches me stuff about Node.js. By giving ever-easier and less complex development tools to people who aren't developers, we're going to as a result find some of them are better devs than they are journalists. I believe those people will be uniquely able to listen to journalists, because inside their own mind there is one.

    2. They might create a breakthrough. It might also be an egregious hack, that you can't believe a human mind could possibly do it so wrong, but it might still be a great idea! That's exactly how Adam Curry showed me how to do the "last yard" idea he wanted to do that resulted in podcasting. He took my source code, and hacked it in awful egregious ways (I can't say that enough) but it did something I had not thought of. He had tried to explain it in words, but couldn't get through my thick skull. But showing me that he believed in the idea enough to so thoroughly humiliate himself was enough to get me to listen.

    There probably are other great reasons, but these are two that I have personally experienced, so can vouch for the fact that they're real.

    So believing this, for a very long time actually, I have been working at trying to lower the barriers. I called one of my companies UserLand, because I wanted the users more involved in creating software.

    I have shipped a bunch of tools that make it easy for an inspired user to cobble together their own web server, their own CMS, without the limits of the software that was created by a priesthood, one that's invested in keeping things complicated and inaccessible. (I'm sure journalists are familiar with the idea of an elite priesthood.)

    That's why I say to Charles, to think of all programmers as having the same outlook, the same goals, is as ridiculous as thinking all columnists and reporters do. I want you to win. Most of the others don't really care if you do or don't.

    I keep saying this, let's work together. Maybe now we can?

    June 01, 2015 06:25 PM

    Mark Bernstein

    How Not To Crash #7

    How Not To Crash #7 sounds like a nifty cocktail -- perhaps something you’d enjoy after finishing your Corpse Reviver #2. But it’s the latest installment of Brent Simmons important series of notes on avoiding crashes in contemporary software.

    This one concerns “Dealing With Nothing” or, more precisely, coping with situations where the object you’re processing is nothing at all. For example, you might have methods that display selected objects; what happens when nothing is selected? Or you might be displaying a shopping cart at checkout: what happens when the shopping cart is empty?

    One technique Brent doesn’t mention is the null object pattern. In his example, we might call

    [self doStuff:thing];

    If doStuff: expects thing to be an object and you give it nil, you might well crash and that’s a very bad thing to do and deplored by all right-thinking folk. Brent suggests that doStuff: should both assert that thing isn’t nil and guard against nil things, e.g.

    NSParameterAssert(thing);

    if (thing) {menuItem.title=thing;}

    This is often a good idea. The first time I saw it, in John Daub’s PowerPlant, it seemed exorbitant: who could remember to include all those guards in every method? Soon, though, it becomes a reflex and you write (and read) the guards without needing to think about them.

    If you do find yourself writing lots of if(thing)... tests, though, you might be better off passing a Null Object -- a subclass of the expected class that does nothing, and does it quickly.

    For example, Tinderbox has a class for LayoutPolicy -- objects that know how to lay out maps, or outlines, or treemaps. In the old days, before using the LayoutPolicy, we’d carefully check that the layout policy actually existed. This solves problems when you're building a new window, or closing an old one, or changing the view right in the middle of a screen update, but it does lead to an awful lot of code that simply makes sure the layout policy is where it ought to be.

    So, instead of checking, Tinderbox initializes views with an instance of NoLayoutPolicy. If a view is being constructed and isn't quite ready to do real work, we can still call layoutPolicy->Prepare() in perfect safety. If we’re about to disassemble a window, we can replace its layout policy with a fresh NoLayoutPolicy, confident that if someone tries to refresh the window we’re demolishing, there will be a NoLayoutPolicy standing ready to do nothing. Because there’s always a layout policy -- even if it’s only a NoLayoutPolicy -- we can take all those null check and dump them all in the trash.

    We’ve got NoLayoutPolicy, NoDrawingPolicy, NotAnAttribute, NotANode. We’ve got plenty of nothing.

    June 01, 2015 03:03 PM

    Deadline

    Mira Grant continues her newshounds vs. zombie romp, picking up where Feed left off. Unfortunately, Feed left off with the death of its best character, teenage newsie Georgia Mason, and leaves us in first person with her haunted, daredevil brother Shaun. Not only is Shaun less attractive than his sister, but he is by design less involved, a slacker-daredevil who doesn’t care deeply about anything. Georgia was obsessed with getting the news out, and that gives us a lever for moving the world; Shaun is obsessed with the memory of his dead sister, and that’s a more slender reed.

    But it’s enough: there’s something here, though we really have no idea at this point exactly what it is. Our gang of teenage newshounds is now running one of the world’s top news sites, an organization nearing open war with the CDC, that ruthless and powerful zombie-control agency. Our kids our rich and they’re restless and even if it might be the end of the world, they’ve got each other – in a sense, anyway.

    June 01, 2015 01:52 PM

    John Udell

    Working observably: The next best thing to being there

    When I joined Hypothesis, my new employer, I wondered: "Why are we using IRC instead of Slack?"

    It boiled down to three reasons. First: inertia. The company had established an IRC culture before Slack existed. Second: openness. We're an open source nonprofit, so we operate in public mode as much as we can, and Slack doesn't yet support that mode natively. Third: skepticism. Sure, Slack is the flavor of the month, and all the cool kids use it, but is that really the right reason to switch from standard IRC to a slightly-improved-but-proprietary implementation of IRC?

    [ Get the most out of collaborative programming with InfoWorld's 20 essential pointers for Git and GitHub. | Keep up with hot topics in programming with InfoWorld's Application Development newsletter. ]

    We continue to waffle on the subject. I expect we'll land in the Slack camp eventually because, to be honest, we do want to play with the cool kids on their home turf. Meanwhile, though, we're enjoying the same kind of virtual water-cooler effect in IRC that we'd be enjoying in Slack.

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

    by Jon Udell at June 01, 2015 10:00 AM

    May 31, 2015

    Tim Ferriss

    TF-StitcherButton

    sacca_discoGoofing around with Sacca and his afro.

    “Fuck it… I’m just not going to play this traditionally anymore.”
    – Chris Sacca

    Chris Sacca was recently the cover story of the “Midas Issue” of Forbes Magazine.

    The reason: He is a newly-minted billionaire and the proprietor of what will likely be the most successful venture capital fund in history: LOWERCASE I of LOWERCASE Capital.

    He’s an early-stage investor in companies like Twitter, Uber, Instagram, Kickstarter, and many more.

    In this interview, we discuss unfair advantages, how Chris chooses founders and investments, stories of missed opportunities, the styles that differentiate Wall Street from Silicon Valley investors, and how keg parties can liberate law students from the tyranny of class (Chris completed law school without attending any classes).

    Enjoy!

    TF-ItunesButtonTF-StitcherButton

    This episode mentions the incredible Matt Mullenweg. Matt, who’s also been on this podcast, was a lead developer behind WordPress, which runs about 23% of the Internet. You can listen to our booze-infused conversation here, in which we discuss polyphasic sleep, tequila, and building billion-dollar companies like his current gig (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 MeUndies.com/Tim to see my current faves (some are awesomely ridiculous) and, while you’re at it, don’t miss lots of hot ladies wearing MeUndies.

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

    QUESTION(S) OF THE DAY: What’s the best investment advice you ever received? Or worst? Please let me know in the comments.

    Scroll below for links and show notes…

    Selected Links from the Episode

    Show Notes

    • What is Chris Sacca best known for? [6:10]
    • Total Immersion swimming and how to invest like Chris Sacca [8:40]
    • Pieces of advice given to Chris Sacca on early-stage investing [11:55]
    • What disqualifies startup founders in Sacca’s mind [16:05]
    • Travis Kalanick and Nintendo Wii Tennis [18:55]
    • Traits of founders for whom success, at massive scale, is predestined [22:00]
    • The whales that got away: GoPro, Snapchat, and more [27:40]
    • On letting the negative case dominate one’s analysis for whether to invest or not [29:55]
    • Differences between venture capitalists and private equity [35:15]
    • Books for investing and cultivating emotional intelligence [41:00]
    • Thoughts on modeling what it is to be successful [49:30]
    • What Chris Sacca’s parents did when he was a kid [53:50]
    • What Sacca looks for when hiring [58:25]
    • What historical figure Sacca most identifies with? [1:01:15]
    • Early collecting habits [1:04:25]
    • The story of the prophetic notebook [1:10:10]
    • The two differentiators that shifted the nature of Sacca’s business [1:19:10]
    • Advice to founders or would-be entrepreneurs [1:27:40]
    • Most readily quoted movie [1:31:10]

    People Mentioned

    by Ian Robinson at May 31, 2015 12:29 AM

    May 30, 2015

    Mark Bernstein

    A Natural History of Dragons: A Memoir by Lady Trent

    A young lady of the rural gentry develops a certain passion for natural history, both of her native Scirland and most especially of dragons and their kin, creatures of remote lands. In time, she marries a tolerant young man of considerable means who shares a certain amateur interest in natural philosophy, and they join an expedition to a remote Balkan-like land where dragons may be found amidst colorful (if superstitious) villagers.

    I’m not entirely sure that this story is best told in fantasy or whether, if we do want a fantasy, whether the setting chosen here – the technology seems to be last 18th century while manners are mid-19th and fashions later still – is ideal. Despite the dragons (and some nice archeological interludes) the world is not very strange.

    May 30, 2015 02:10 PM

    May 29, 2015

    Mark Bernstein

    The Whites

    Cited by Joyce Carol Oates as carrying much of its narrative on the back of interrogation, this is a book with a ton of energy and buckets of interrogation. Police officers interrogate each other, interrogate their subordinates, interrogate their wives, and also interrogate suspects. An impressive feature here is the rich array of transient incident that drifts through the lives of police officers; ever night brings three or four fresh runs, each with its own random miseries.

    May 29, 2015 10:29 PM

    Dave Winer

    My website in a Dropbox

    I wanted to mark a milestone. I finally have a web server running out of a Dropbox folder. I tried doing this with Apache a few years ago, but there was something about how Apache worked that drove Dropbox crazy. Or vice versa.

    Now I have my own web server, written in JavaScript, built out of Node.js core packages. It's really fast and reliable, and I pretty much know exactly what it's doing. There was never a problem with Dropbox. We just read the files from the server. We update our own stats files, but that doesn't seem to be too much for Dropbox to handle. (It is using up a lot of CPU cycles on the server, according to the Top command, so I'm thinking about turning Dropbox off when I'm not actively developing.)

    Why it's so cool -- all my tools work with the filesystem. It's even more widely supported than Git. And there's no difference between the original content and the stuff that's being served. If I want to edit one of the files in my website, I just open it in an editor, make the changes and save. It's like having the server on my machine, without actually having the server on my machine.

    The server is called PagePark. Of all my latest tools, it's my favorite. I love tweaking it, adding little shortcuts. Things that make it work really well for the kind of content I serve.

    May 29, 2015 12:49 PM

    Tim Ferriss

    TF-StitcherButton

    TF_cowboySometimes, going weird allows you to go big. (Photo: My weird Instagram)

    In this episode, I answer questions submitted by you all.

    50% of this episode is spent explaining how I’d build an audience from scratch, if I had to start over today. The other ~10 questions/topics are listed below.

    Do you like or dislike this type of episode? Please let me know in the comments, and I’ll do more or fewer based on that.

    For the movie recommendations I mention (shorts, documentaries, etc.), click here to see the growing list.

    Enjoy!

    TF-ItunesButtonTF-StitcherButton

    TF-ItunesButtonTF-StitcherButton

    If you enjoy the above Q&A episode, you might also like this episode, where I answer the question: “What would you add to The 4-Hour Workweek for 2015?”

    Other questions I answer in this episode:

    If you’re the average of the 5 people you surround yourself with, who are those 5 people for you?

    Based on the self-experiments you conducted in your books, are there any habits you continue to implement on a daily basis?

    What is the most important question you ask yourself everyday?

    If you could make one new thing mandatory in the nationwide high school curriculum, what would it be?

    Bruce Lee said “The successful warrior is the average man, with laser-like focus.” What methods do you practice to maintain focus and follow through to achieve your goals rather than getting side tracked, distracted, or discouraged?

    With all the misleading information on health out there, what are the best/most reliable resources?

    What are your top 10 natural supplements that you’ve found most helpful?

    What are the things you’ve done to become a better writer?

    What are your guilty pleasures for those times when your brain needs a rest?

    What would you go back and tell your younger self?

    Again, here are my answers.

    ###

    For previous episodes of the podcast, including Arnold Schwarzenegger, Rick Rubin, Jon Favreau, and others, click here.

    by Tim Ferriss at May 29, 2015 12:53 AM

    May 28, 2015

    Lambda the Ultimate

    Second-order logic explained in plain English

    John Corcoran, Second-order logic explained in plain English, in Logic, Meaning and Computation: Essays in Memory of Alonzo Church, ed. Anderson and Zelëny.

    There is something a little bit Guy Steele-ish about trying to explain the fundamentals of second-order logic (SOL, the logic that Quine branded as set theory in sheep's clothing) and its model theory while avoiding any formalisation. This paper introduces the ideas of SOL via looking at logics with finite, countable and uncountable models, and then talks about FOL and SOL as being complementary approaches to axiomatisation that are each deficient by themself. He ends with a plea for SOL as being an essential tool at least as a heuristic.

    May 28, 2015 08:18 PM

    Fog Creek

    dev.life – Interview with Casey Muratori

    In dev.life, 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 Casey Muratori, Software Engineer at Molly Rocket. He’s the creator of Handmade Hero, an ongoing project to create a complete, professional-quality game without the use of engines or libraries, that’s accompanied by videos explaining every line of source code via weekday live coding sessions.


    Casey Muratori
    Location: Seattle, WA, US
    Current Role: Software Engineer at Molly Rocket

    How did you get into software development?

    I learned to program when I was 7 years old. My father worked for Digital Equipment Corporation at the time and he was a programmer by trade, so he taught me when he thought I was old enough to handle it. I had always been fascinated with computers, and even when I was much too young to program, I had pestered my father to let me use the VT terminals and the DEC Rainbow that he’d bring home from work. I’m not sure why I was so interested in things as mundane as a VT terminal, but I was.

    From 7 years old to today, over 30 years later, I’ve been programming computers in one capacity or another. I never went to college for it, I started working straight out of high school. My first job was in the games industry, and I never really switched industries, although for most of the time I did game technology exclusively (as opposed to working directly on specific games) at RAD Game Tools.

    vt (1)

    Tell us a little about your current role

    During the day, I handle the art direction and management responsibilities for Molly Rocket, and I do all the programming. We have two projects we’re working on right now but neither have been announced, so I can’t say much about those at the moment, although I hope to have at least one of them announced publicly sometime before the end of the year. At about 4:30 I go home from the Molly office, and I start streaming Handmade Hero on Twitch. This takes about two hours or so, where one hour is me teaching programming, and the other hour is me answering questions or chatting with the folks who watch.

    I’m currently working on interactive fiction technology. Obviously, it is an extremely challenging research area because, to a first order approximation, nobody has shipped any substantive advances in the field since about 1988. So really it’s been stagnant for a good quarter century, which is kind of amazing when you think about how much everything else has progressed in that time. But it’s also a problem that I’ve been thinking about for a very long time, and I feel like there are a number of ways that we can push things forward significantly, so our current goal at Molly is to see if we can make that happen over the next few years. It’s too early to say whether we will succeed, but I’m optimistic.

    When are you at your happiest whilst coding?

    I’m happiest when I’m coding something where I know I have enough time to do the complete right thing. Unfortunately, that’s rarely the case, but I’ve been realizing how important it is to me to make this happen, so lately I’ve been making more plans to try to eventually get to a place where most of my coding can be this kind of coding. It requires improving a lot of the tools (editor, compiler, operating system) so it’s a major investment, but, well, at some point you just have to prioritize what is important to you rather than what is most sensible. I think Jonathan Blow came to this realization recently as well, and that’s why you see him doing all this work on a new programming language now. At some point, you realize that if you want to be able to program the way you want to program, you just can’t do that with tools made by people who don’t understand how you want to program. So you have to start making those tools yourself. It’s too bad, because it’d be great if you could just get tools off the shelf made by people who understand, but I think those days died sometime around when Borland stopped being a compiler powerhouse.

    borlandCompiler (1)

    What is your dev environment?

    I use GNU Emacs for editing code on both Windows and Linux. On Windows, I use Visual Studio 2012 because that’s the last version I happened to buy. On Linux, I use LLVM and GDB.

    There are no software tools that I use that I couldn’t live without – all the tools I use on a daily basis are utter garbage. GNU Emacs is awful – it’s so slow it can barely even auto-indent my files, which is insane considering the horsepower it has to work with. Visual Studio 2012 is pathetic. It takes a perceptible amount of time to step a single line of code in the debugger. That is inexcusable, especially since in the old days (circa MSVC 5), it stepped instantaneously on much less powerful hardware! Their compiler is also, unnecessarily slow in a number of corner cases that I frequently tend to hit.

    Linux is a disaster zone. GDB is the only debugger that seems to actually be functional, and it’s ability to keep you heads-up is awful since it’s not graphical. I’ve tried to use other debuggers, but they’re all basically front-ends for GDB, and most of them do it wrong so that they can’t even properly inspect half the stuff that GDB can. It’s insanity. And forget trying to work with complex graphics setups… debugging code on an Optimus laptop (which is what I have) is an exercise in pure frustration. Every other minor distro update totally breaks debugging under the discrete GPU for one reason or another, which makes debugging complex GPU work a non-starter since the integrated graphics part can’t keep up. Honestly, I find that the dev situation under Linux for native code is so byzantine that it is usually much faster to simply not use a debugger on Linux than to use one.

    And yes, I’m sure everyone out there is like “well just switch to using [their favorite thing]”. No. I’ve tried that thing, because someone else said that exact same thing, and I found that it’s just as awful but in some different way. There are no good dev tools out there today. That much is abundantly clear, and it is a topic on which I find almost all my systems-level programming friends agree, so I think it’s becoming a consensus among people who actually care about low-level code. Nobody is making dev tools for us anymore, and it shows.

    As for my office set up, I use a height-adjustable table. I usually code sitting, but I have a bad right knee so sometimes it helps to switch to standing every so often. I always listen to music when I program, usually on headphones so I don’t bother anyone else.

    What are your favorite books about development?

    I can’t say that I have any, really. It’s been a long time since I’ve read a book about programming. I will say that I quite enjoyed seeing the YouTube video of Mike Acton getting up at cppcon and giving a keynote that was all about how bad C++ is. That was great! And I totally agreed with basically everything he said.

    xeonPhi (1)

    What technologies are you currently trying out?

    Honestly I was really excited for AVX512, because I learned to program the LRB (now Xeon Phi) instruction set a bit when I was working on the drivers at RAD, and I think it’s really cool, but until AVX512 most of those instructions aren’t in the main CPU. Unfortunately, news sites have been reporting recently that AVX512 actually won’t be coming to the desktop this year, I guess, it will be Xeon-only, and that is super depressing. I guess Intel hasn’t said one way or the other, though, so I sure hope they do ship AVX512 on desktop chips sooner rather than later because I think it’s going to be awesome.

    When not coding, what do you like to do?

    Play video games, go to the theater, walk about town. Anything that does not involve me having to interact with nature is usually good. I like to cook, but I’m not particularly good at it.

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

    Don’t ever bother learning or using object-oriented programming. It’s a deeply flawed programming methodology, and I wasted a good five years of my programming life thinking that it was useful, and I’ll never get that back. If I had been able to tell 18-year-old me to stick with compression-oriented programming, I probably would be a much better programmer today and I would have made decent code in my 18 to 23-years old period instead of the garbage OOP code that I ended up making. I will be forever thankful to Jeff Roberts at RAD Game Tools for providing the environment that finally made me realize that OOP was a severe impediment to writing good code, and it didn’t take long in that environment before I was back to writing good code again.

     

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

    Recent dev.life Interviews

    Eric Lippert
    Eric Lippert
    Chris
    Chris Hartjes
    Paul Jones
    Paul M. Jones
    Michael Fogus
    Michael Fogus

    by Gareth Wilson at May 28, 2015 11:54 AM

    Lambda the Ultimate

    The evolution of Rust

    Graydon Hoare is the original developer of Rust even before Mozilla adopted it. For the 1.0 release he prepared a lightning talk on how the language changed over 10 years.
    He only published some bullet points, but the topic list is interesting as well.

    • Six ways Rust is fundamentally different from how it started
    • Six ways Rust is fundamentally the same as how it started
    • Six things we lost along the way
    • Six things we gained along the way
    • Six things I'm irrationally, disproportionately pleased by

    Read the full blog post for the content of the five lists.

    May 28, 2015 09:12 AM

    May 27, 2015

    Fog Creek

    The Abuse and Misuse of Test Automation – Interview with Alan Page

    .little {font-size: 75%}
    The Abuse and Misuse of Test Automation – Interview with Alan Page

    Looking for audio only? Listen on

    We’ve interviewed Alan Page, author of ‘The “A” Word: Under the Covers of Test Automation’. We discuss the abuse and misuse of test automation, when to automate a test, the problems of GUI test automation as well as good test design factors. Hear more about testing from Alan over on his blog and the AB Testing podcast.

    Content and Timings

    • Introduction (0:00)
    • About Alan (0:28)
    • The Overuse and Abuse of Test Automation (0:53)
    • When to Automate a Test (4:06)
    • Problems with GUI Testing Automation (6:50)
    • Good Test Design Factors (9:50)
    • What Kinds of Tests Are Suited to Automation (12:37)
    • Recommended Resources (14:12)

    Transcript

    Introduction

    Derrick:
    Alan Page has more than 20 years of software and software testing experience, primarily at Microsoft. Fittingly, he was lead author of the book “How We Test Software at Microsoft.” He has recently published “The A Word: Under the Covers of Test Automation”, a collection of blog posts about the appropriate application of automation in testing. Alan, thank you so much for taking the time to join us today. Do you have a bit to share about yourself?

    About Alan

    Alan:
    I’m really excited to be here. I’ve been a big fan of Fog Creek and Joel and everything you guys do so I’m excited to be part of this interview. Thank you for having me. You mentioned over 20 years in software testing and my 20 year anniversary at Microsoft is coming up in just two weeks from Friday. Big, big milestone. I never thought I would ever work at any company, let alone Microsoft, for this long. It’s pretty remarkable.

    You should automate 100% of the tests that should be automated.

    The Overuse and Abuse of Test Automation

    Derrick:
    You say that “Automation is overused and overvalued in software.” Why is this and why do you think this came about?

    Alan:
    Probably for a lot of reasons. This is a traditional systems problem. I think some of the main reasons are people wanted to use, I think initially automation as a way to replace a lot of human testing. Where those two approaches really compliment each other. I still see a lot of manual test cases, or manual testing converted to automation. I’ve been at teams at Microsoft, where one of the things we tracked early on was to track the value of our test team was the manual to automation conversion. At the time I thought this just doesn’t seem right. But I was too junior to figure out what to say about it. Over time I figured out, you know what, these are actually two different kinds of testing.

    You need sort of the human… Every team has this. Especially your audience knows that these guys are just good at walking through things and going that’s not right, that’s not right, that’s not right and automation doesn’t catch any of those things. On the other hand, automation is really good for a lot of other types of testing. We just tend to in general, we, the software industry, tend to apply automation as this blanket way to do all testing when it’s really especially suited for several specific kinds of testing.

    Derrick:
    The book entitled “The A Word” focuses on the abuse and misuse of test automation in software development. What abuses and misuses have you seen?

    Alan:
    One of the abuses is I think people trying to automate too much or automating the wrong things and there’s a quote I use. I’m sure it’s in the book because I say it all the time is that you should automate 100% of the tests that should be automated. The challenge in test design is to figure out which of those tests are best suited to be automated versus this is really going to be really error prone.

    Probably the biggest abuse I’ve seen is just going crazy trying to automate too much, and even worse being very proud that you have 10,000 or 100,000 or a million automated tests when you don’t have a lot of trust over the quality of those tests or the quality of the infrastructure they’re running on or the product. I think a lot of teams get really stuck. They get… They have test failures and I believe that test failure 100% of the time should indicate a product failure. Failure of the product on your test. We all know that the first thing we look at is the test correct and did it do… What else could have gone on here? Maybe if I run it again.

    Another abuse is the test failed, I run it again, they pass. Okay, everything’s fine, which just drives me nuts because you don’t know… Something was flaky. I don’t think you even have to be anal retentive to get mad about that. I am really, really scared of flaky things because that flakiness that happens once or twice inside your walls, once you scale and deliver that to 100,000 or a million people that may happen a lot more. You want to be really careful about those. I’m just really a big fan of focusing the automation on things you can really trust and verify the automation. I think the biggest misuse, just trying to automate too much and being careless about the quality of that automation and the means of doing that.

    When to Automate a Test

    Derrick:
    When should you automate a test?

    Alan:
    When it’s necessary. My rules for automation a test, well let me draw a parallel here. I coach a soccer team of 12 year olds. One of the things I talk about, and even with 12 year olds when they’re playing defence, when we get the ball in our half, I say either clear it or make 100% pass. Meaning you clear the ball hard outside or you make the pass you absolutely is going to get to your teammate accurately where they can receive the ball. I think there’s a parallel in automation. When I… The things I want to automate is I want to be 100% confident in this test. I can write this test and I can trust the value, pass fail, 100% of the time.

    There’s going to be a caveat on that for a minute I think. We’re talking about unit test, functional test, regression test, the tests I want to run every day across hundreds of platforms. That is absolutely the right answer. I think there’s a little bit of a caveat when I want to write what I’ll call exploratory automation. I’m going to go what happens if I write a monkey test? Somebody just randomly clicks on buttons, etc. etc. etc. Just as a stress test. Totally fine. I’m not going to run that everyday on every build and trying to investigate every single failure. I’m using that to flush out some of the really tricky weird things. There’s all kinds of examples of that.

    For those tests that I want to run everyday across lots of devices, or lots of platforms I want 100% confidence that when that test passes functionality is correct and when it fails there’s a product bug that I need to go address. My heuristic for automation is I automate when I’m bored. So when I very first started at Microsoft 20 years ago, and I was actually a contractor for six months first so this was over 20 years ago. I was handed a spreadsheet full of test cases. I knew how to code. I said, I asked my manager, “When do you need these automated?” He said, “We don’t have time to automate, you just need to run these everyday.”

    I got bored about two days in and automated them anyway because I could and I could do it really quickly. I was fairly confident in my ability and I was bored. I found other things to do to fill my time. There’s always lots of work to do. I could run these automated tests and sort of a really poor man’s regression test because these lists of test cases weren’t that good anyway. I was bored. That’s one of my biggest heuristics. I was bored running the test cases. There’s a repetitive task in … I just did Lync which is now Skype for business for awhile and if I wanted to add a thousand users to see what was going to happen, I’m going to automate that. I’m never going to do that manually. I could even, I should be pretty confident that should work everyday too. So that falls into 100% category as well.

    I think when you hear the phrase ‘it’s just test code’. To me that’s a code smell

    Problems with GUI Testing Automation

    Derrick:
    While on automating things, a quote from your book says, “For 95% of all software applications directly automating GUI is a waste of time.” Why is this?

    Alan:
    I think it’s really hard to get right. I think that 100% rule I have where you can really trust those tests is very difficult. I think there’s a lot of promise with automation tools is to automate end to end scenarios. For me, I think looking at end to end scenarios is very much a great activity for humans to do. We want to see how the software works end to end. Where I have seen success with automation at the GUI level is very short tests because the longer you go the more weird things can happen and the more chance for flakiness you have in that test.

    Another reason, and I’m sorry to say this, is often we have is this, really scary when you think about it, to me at least… We often have our most junior developers, our brand new testers who are learning to code or maybe some company that’s where you start people. You get these very junior people without a lot of design knowledge for software and a lot of experience. You tell them write this GUI automation. You have junior people doing something that’s much, much harder than most people admit and it just makes it more prone for failure.

    I think when you get success is you have developers who know what they’re doing, more senior developers. It doesn’t have to be your top developer but you have experienced people who know what they’re doing. They understand design and they’re very careful about writing tests that they can trust to show product status. That’s the case that GUI automation can actually work.

    There’s a friend of mine, Chris McMahon over at Wikipedia. Every time I mention GUI automation, brings up the fact that he’s had great success doing it but the difference is Chris knows what he’s doing and knows how to be careful with it. I think a lot of people trying to write GUI automation just don’t have those skills or experience to handle the complexity of how difficult that is.

    Derrick:
    What about the 5% of cases where GUI automation does make sense?

    Alan:
    I’m sure it’s obvious to the listeners that these numbers are not based on actual data, they’re made up for me to make a point. Anecdotally, probably about right. When you’re confident that issues will… Failure is product bugs, absolutely. Regression test, very good for quick tests, not end to end. Be careful of that. I think testing those small tasks, making sure the functionality is correct so that you can do some accurate end to end sort of testing.

    I think one way to think of it is to ensure the product can be tested thoroughly by humans and those humans can be internal testers or customers versus trying to test the product end to end. I think when you try to, really when you’re trying to replace or try, you can cover all of this end to end scenarios in automation you get into trouble. I think for a series of quick tasks, verifications, making sure that the functionality across the product is correct, absolutely good places to apply automation, both at the GUI and below the GUI level.

    Good Test Design Factors

    Derrick:
    At the heart of a number of test automation issues is poor test design. What are some of the important factors to consider when designing an automated test?

    Alan:
    One is just your basic design principles for code which I think as I mentioned before when you have junior people doing that, sometimes they just don’t have that experience to apply those. One of the things I did is I was on the Xbox One team before I joined this project team at Microsoft and I was really adamant about doing something that had never been done on that team before, which is I held our test code to the exact same standards as our product code. The exact same static analysis tools, the exact same rules for code review etc. We had a really high bar for our test code. When you’re trying to ship a console to a million people and you’re trying to run massive numbers of tests across a huge number of consoles, we did not want to waste our time investigating false failures.

    I think when you hear the phrase ‘it’s just test code’. To me that’s a code smell. Whenever I hear someone say that I know I need to go dive in deeper and figure out what’s going on. Some design things, like I think one big one that I apply right away is that tests do one thing. Don’t have a test function called, you know, download app, install, and make sure it works or something like that. Have a function do one thing. For developers it’s pretty obvious. You’re writing a unit test, you usually have one assertion or maybe a few if it makes sense in the logic. You’re not trying to have one test method do a whole bunch of different things.

    Minimize your assumptions. The typical things around magic numbers for screen size or assuming that somebody will never suspend while running your app or running your test. Just minimize how many of those are and guard for those. Then one huge thing I look for in test code is really good logging on what’s going wrong.

    Another big thing I push is when there’s a test failure, I want to be able to know… Ideally I want to know what the problem is and what the fix is or what exactly what went wrong at least, from the logging. I think another social code smell for me is well let me run that again and see what happens or let me run it under the debugger. We all know how to run debuggers and we all know how to run the test again and fiddle through of what’s going on. You save a ton of time if you put that care upfront, get the right logging in place. I really push that. I think, one phrase I use here a lot is once you have to detach the bugger you lose. It just wastes too much time. I like to get that logging right the first time. Especially when we’re deploying to a lot of people and maybe we want to pull these logs from, or maybe we have a customer run a test because they have a weird thing going on. I really push accurate logging for those tests.

    In automation we just don’t leverage the power of the loop

    What Kinds of Tests Are Suited to Automation

    Derrick:
    You say that using automated tests just for regression testing is short sighted. What other types of testing is automation useful?

    Alan:
    When I look at the literature, when I talk to teams doing automation, they’re automating those functional scenarios, end to end things that we’ve already talked about but one of the areas I think a lot of teams miss is using automation for what I called earlier exploratory automation. Writing that quick perf test. You don’t need to be a perf expert and figure out what are our deltas and deviations and all these things, but it’s as a nice perf stress test, I’ll use the Skype example I gave earlier is what happens when I add 1,000 contacts? I can just write a quick little test that there’s a snapshot of memory. Add 1,000 contacts, checks memory, okay, looks good. Really that’s maybe 15 minutes to write that code. Probably faster if you already have some frameworks in place.

    It’s a very valid test, and then I can think of how about I connect to a call and disconnect. Again very short steps, but I think we err towards, again it’s a general we. We err towards trying to hit those user scenarios versus the things that automation and programming are great for are looping and do things a whole bunch of times seeing what happens. I think we lose a lot of value by not going oh yeah, this is a thing that’s really awful and impossible to do by hand but easy and fun and quick and often valuable to do using code. I found a lot of times in automation we just don’t leverage the power of the loop.

    Recommended Resources

    Derrick:
    What are some useful resources for those wanting to learn more about a holistic approach
    to software tests?

    Alan:
    My favorite book, and I said this many times before on sort of the functional testing part… This is good for developers as well as testers, like kind of getting into the idea of everything from the basics of functional testing, beyond unit testing, but functional testing to even getting into model based testing a little bit is Lee Copeland’s book “Practitioners Guide to Software Test Design” I always like that for a beginning book. It’s very quick and to the point and Lee’s kind of a funny guy. There’s some humor in there. It reads really well for me. On the other end, for thinking more about the systems thinking part of what software testing is, sort of the philosophical side is Jerry Weinberg’s book “Perfect Software and Other Illusions”. It kind of gives you that other end of it.

    In between, there’s another line I use, not in the book. It said, when I first started studying software testing I read one book and thought I knew everything, and then I read another book and was confused. It wasn’t until I read my third, fourth, and fifth book and started reading blog posts and articles that I began to form my own opinions. There is so much out there and you don’t learn what to throw away I think until you begin to form your own opinions.

    Derrick:
    Thank you so much for taking your time to join us.

    Alan:
    It was a lot of fun. Thanks for having me.

    by Gareth Wilson at May 27, 2015 09:47 AM

    Bret Victor

    The Web of Alexandria (follow-up)

    A follow-up (disambiguation? expansion?) regarding The Web of Alexandria.

    by Bret Victor at May 27, 2015 02:33 AM

    May 26, 2015

    John Udell

    Training and bug reporting should be part of every app

    People aren't good at reporting software bugs. Moreover, software isn't good at self-reporting -- particularly when it's browser-based software. These conversations happen every day:

    User: The new Frobinator isn't working anymore.
    Developer: What did you do, what did you expect to happen, and what did happen?
    User: I clicked on the Frobinate button, I expected it to work, it didn't.
    [ Also on InfoWorld: Get real about user security training." | Get a digest of the day's top tech stories in the InfoWorld Daily newsletter. ]

    We've all been there. Frobinate, let's say, was supposed to populate a widget with data. Maybe it found no data at all; maybe it found the wrong data. Maybe the widget never appeared. Whatever the problem may be, we have to be able to reproduce it in order to address it.

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

    by Jon Udell at May 26, 2015 10:00 AM

    Tim Ferriss

    FacebookTF_poker1

    Try this morning tea cocktail instead of coffee. It’s rocket fuel for the brain.

    I started experimenting with fat-plus-stimulant beverages in 1998 and 1999 while on the Cyclical Ketogenic Diet (CKD). For the above tea blend, I now add turmeric and ginger to the aged pu-erh, usually Rishi brand.

    The above video was shot while filming the parkour episode of The Tim Ferriss Experiment TV show. We filmed 13 episodes back-to-back and I needed a morning pick-me-up that could be prepared quickly but sustain me for hours.

    The tea prep might seem reminiscent of Bulletproof Coffee, and it is.  They serve similar purposes.  For this reason, I jokingly referred to the cocktail as “Titanium Tea” with the production crew.

    Alas, BP coffee looks like a delicious frappuccino, and my concoction looks like diabetic horse urine.

    Here’s why I still drink TT Horse Urine nearly every day:

    • I’m a caffeine “fast metabolizer” according to genetic test results from 23andMe, Navigenics (since acquired), and personal experience. If I drink a cup of black coffee, I feel like a superhero for 30 minutes, then need two cups to get back to baseline. But…
  • When I use a blend of — say — green tea and fermented black tea, I’m combining slightly different pharmacokinetics and biological half-lives, so respective peak plasma (blood) concentrations of stimulants and other compounds are staggered. Instead of one single high point and then a rapid descent into fatigue, I have multiple high points. Rather than feeling amazing for 30 minutes and then fatigued, I can feel 20% more effective for 3-4 hours.

  • This can be extended further if I include a tea like yerba mate (I like Cruz de Malta), which includes three xanthine alkaloids. For our purposes, you can think of these three xanthines as “stimulants”: good old caffeine (by weight, often <50% compared to coffee), theophylline (found in green tea), and theobromine (the primary alkaloid in cocoa and chocolate). Yerba mate isn’t the only tea to include these three, but the ratios in yerba mate appear optimal for my biochemistry and creative writing.

  • NOTE: The most extended effect is only achieved if you sip the yerba using traditional technique. The gourd is my constant companion — plus one glass of Malbec — for 10pm-4am jam sessions when on book deadline. Just as coca-leaf teas don’t = cocaine, which doesn’t = crack, the form and speed of administration matters. For the nerds, this is why powdered “good” foods (e.g. bean flour) aren’t always compliant with the slow-carb diet.

  • If I rely on theobromine and/or theophylline as my uppers, instead of primarily caffeine, I can quit stimulants cold turkey without caffeine-withdrawal headaches. This can be a massive competitive and health advantage, as you can cycle off of stimulants to minimize tolerance development.

  • But — I’m not a doctor and don’t play one on the Internet! As always, the dose makes the poison. Excessive theophylline and theobromine have plenty of adverse effects, particularly when consumed with fat like coconut oil (i.e. “dose dumping“). So speak to your doc first if you have any medical conditions, m’kay?  This is an N=1 article.

  • I still drink coffee on occasion, especially if empty handed in the middle of nowhere. It’s a hell of a lot easier to find coffee and butter than pu-erh tea and coconut oil. Definitely 10x better than straight black coffee, and kudos to Dave Asprey for taking it mainstream. It’s now ubiquitous, and that’s no small feat. Many of the top performers I know drink BP coffee, including legendary producer Rick Rubin.

  • For more quick-tip videos like the above, click here.

    For 13 full-length episodes shot by an Emmy award-winning team, click here or on the image below.

    FacebookTF_poker1

    by Tim Ferriss at May 26, 2015 03:11 AM

    May 25, 2015

    Bret Victor

    The Web of Alexandria

    Vannevar Bush's "library of a million volumes, compressed into one end of a desk" may sound quaint to us today. Bush naively assumed that immediate access to a million volumes would require the physical presence of those million volumes. His proposal -- a million volumes in every desk.

    by Bret Victor at May 25, 2015 01:00 AM

    May 24, 2015

    Blaine Buxton

    Getting a USB sound card configured for Raspberry Pi 2

    I recently tried to get a USB sound card working on a Raspberry Pi 2. My motivation was to start working on audio applications like writing my own synth. It's something I've wanted to do for a long time, but some odd reason never got around to it. At first, I simply tried to output sound via the built-in sound card. This experiment was successful of course, but there was a lot of noise in the output. I tested using the SonicPi program that comes with the Pi.

    My next experiment was to use a USB sound card that I had gotten for cheap. Apparently, these are hit and miss and if I were to do it over again, I would get one from Adafruit where they sell ones that have been tested for the Pi. Everything worked out so I lucked out, but the path to success was not obvious. For your information, I used the CMedia HS100 from NRGtech. I also used the latest version of Raspbian (Debian Wheezy) and updated my pi firmware with "sudo rpi-update" before I even started since most guides mentioned to do this for latency.

    Before I begin, I was repeatedly given the ALSA (Advanced Linux Sournd Architecture) document. There's a lot of information in there. I hope to spend sometime read it more thoroughly, but when you're trying to get something simple working, it's like drinking from a fire hose.


    1. Plugin the USB sound card.
    2. Navigate to the Menu>Preferences>Audio Device Settings.
    3. At the top of the dialog, there is a drop down for the sound card. Mine displayed "bcm2835 ALSA mixer) (Default)". Click it and you should see your new USB sound card. Again, mine displayed "USB PnP Sound Device (Alsa Mixer)".
    4. Select the USB sound card.
    5. Click "Make Default" button.
    6. You can click "Select Controls..." which brings up a dialog for you to be able to select things it can use to change settings on your sound card. I selected everything.
    7. Make sure volume is up and USB soundcard is connected to either headphones or speakers. To verify, my speaker setup, I used the built-in audio output first before connecting USB sound card.
    8. Edit /etc/modprobe.d/alsa-base.conf with your favorite editor (sudo vi /etc/modprobe.d/alsa-base.conf). I strongly recommend making a backup of this file. You can also follow this from an Adafruit article as well.
    9. Find the line "options snd-usb-audio index=-2" and change it to "options snd-usb-audio index=0".
    10. Add another line below the edited line: "options snd_bcm2835 index=1"
    11. Save the alsa-base.conf and reboot the pi (sudo reboot).
    12. speaker-test -c2 -D hw:0,0. This should work. You will hear white noise from left to right on your speakers.
    13. aplay -D hw:0,0 /usr/share/sounds/alsa/Front_Center.wav
    14. Success? Or did you get "Channels count non available". If success, you can stop now and celebrate. Have some fun with SonicPi!
    15. sudo aplay -D hw:0,0 /usr/share/sounds/alsa/Front_Center.wav
    16. This probably worked. If so, the answer is simple. Edit the $HOME/.asoundrc (vi $/.asoundrc). Back up the original is again strongly recommended.
    17. Clear the existing contents of the .asoundrc.
    18. Add "defaults.ctl.card 0"
    19. Add "defaults.pcm.card 0"
    20. Add "defaults.pcm.device 0"
    21. Save .asoundsrc. Try "aplay -D hw:0,0 /usr/share/sounds/alsa/Front_Center.wav" again.
    22. Success? Excellent. Glad this guide can help. If you are still having issues: this article and this one too helped me figure out what was going.
    I wrote this guide up mainly for myself so I don't forget it and to use again. Hope it helps you as well.

    by Blaine Buxton (noreply@blogger.com) at May 24, 2015 06:02 PM

    Giles Bowkett

    May 21, 2015

    Fog Creek

    FogBugz Gets the Full Spa Treatment

    With almost 15 years of trusty and reliable service, we decided it was time to pamper FogBugz a little. And what better way to do that than with a full spa treatment.

    Now you might be thinking “Whoa! 15 YEARS!”, and you’re absolutely right, that’s a lot of time. Especially if you consider that Internet years are pretty much like dog years. Amiright?

    We’re incredibly lucky to have such loyal customers who have been using FogBugz for a super long time and are used to how FogBugz looks and feels. So as you can imagine, whilst we knew it was time to make changes, we had to be careful and subtle.

    We started with the two most visited views in FogBugz: a warming exfoliation to the List Page and a bespoke massage to the Case Page. Here’s how they’ve been refreshed:

    The List Page: before & after
    before-after_list

    The Case Page: before & after
    before-after_case

    We softened up the edges here and there and we updated our icon system too, making things easier on the eye. But most importantly, we made your content and your cases easier to read and skim through.

    We hope that these changes improve your experience while using FogBugz and give you the warm, tingly feeling of a Bee Venom face mask (it’s a thing, apparently) as you resolve your cases.

    But our treatment didn’t stop there. As you may have also seen, we’ve been giving some love to other areas of FogBugz lately too. Like the new User Options page, in-app notifications and activity feed as well as improvements to the Filters menu. Not to mention the release of Iteration Planner, adding support for your Agile and Sprint Planning needs.

    Design is never done and FogBugz is no exception. Even after 15 years, we’re still working on making FogBugz the best issue and bug tracker in the world.

    Now, who’s up for an ultimate holistic skin therapy treatment?

    by Enrique Sánchez at May 21, 2015 06:56 PM

    Lambda the Ultimate

    Composite Replicated Data Types: eventually consistent libraries as non-leaky abstractions

    Composite Replicated Data Types
    Alexey Gotsman and Hongseok Yang
    2015

    Modern large-scale distributed systems often rely on eventually consistent replicated stores, which achieve scalability in exchange for providing weak semantic guarantees. To compensate for this weakness, researchers have proposed various abstractions for programming on eventual consistency, such as replicated data types for resolving conflicting updates at different replicas and weak forms of transactions for maintaining relationships among objects. However, the subtle semantics of these abstractions makes using them correctly far from trivial.

    To address this challenge, we propose composite replicated data types, which formalise a common way of organising applications on top of eventually consistent stores. Similarly to a class or an abstract data type, a composite data type encapsulates objects of replicated data types and operations used to access them, implemented using transactions. We develop a method for reasoning about programs with composite data types that reflects their modularity: the method allows abstracting away the internals of composite data type implementations when reasoning about their clients. We express the method as a denotational semantics for a programming language with composite data types. We demonstrate the effectiveness of our semantics by applying it to verify subtle data type examples and prove that it is sound and complete with respect to a standard non-compositional semantics

    May 21, 2015 03:29 PM

    May 20, 2015

    Tim Ferriss

    TF-StitcherButton

    Danielle Teller and Astro Teller on the Tim Ferriss Show

    [Preface: Would you like to sponsor The Tim Ferriss Show, the #1 business podcast on iTunes and one of the iTunes “Best of 2014″? Click here for details.]

    Dr. Astro Teller is a computer scientist and entrepreneur who currently oversees Google[x], Google’s moonshot factory. Dr. Danielle Teller is a physician specializing in intensive care and lung medicine; she has trained doctors and run research programs at Harvard University and the University of Pittsburgh.

    Together, they are the authors of Sacred Cows.

    In this conversation — my first podcast with a couple — we cover a lot of my usual questions (favorite books, routines, philosophies of living, etc.) but focus on something I haven’t personally figured out: relationships.

    It’s important to note that the Tellers are not “for” marriage but, rather, “for” the freedom to decide how to live most honestly and happily, whether as part of a couple or as a single person.

    Combining the rigor that has established them as leaders in their respective fields, Astro and Danielle walk me through how they think about relationships, and how they survive and thrive as two driven people.

    Sidenote: Want to see me tackle dating experiments, struggle with live “cold approaches,” and optimize online dating with a computer hacker? Be sure to watch my “Dating Game” episode of The Tim Ferriss Experiment here.

    Enjoy the podcast below!

    TF-ItunesButtonTF-StitcherButton

    This podcast is sponsored by LSTN Headphones. LSTN Headphones are gorgeous headphones that I use. They’re made of real exotic, reclaimed wood. Proceeds from each purchase help a hearing-impaired person hear for the first time through the Starkey Hearing Foundation. Here are some of the headphones I wear and travel with: LSTNHeadphones.com/TimOn that page, use the code “TIM” to get $50 off orders of $99 or more!

    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 and share your results!

    QUESTION(S) OF THE DAY: Are you pursuing monogamy? Why or why not? Have you figured out other rules that work for you and your partner? Please (seriously, please) let me know in the comments! I expect this thread will have some great suggestions.

    Scroll below for links and show notes…

    Do you enjoy this podcast? If so, please leave a short review here. It keeps me going…

    Subscribe to The Tim Ferriss Show on iTunes.
    Non-iTunes RSS feed

    Selected Links from the Episode

    Get the Book on Amazon | Google Play | AstroTeller.net| SacredCowstheBook.com | TEDxBoston

    Recipe for a Monogamy Cocktail

    • 3 Parts Rosemary-Infused Vodka
    • 2 Parts Vanilla-Infused Cognac
    • 1 Part Lemon Juice

    Show Notes

    • A little bit about the work of Astro and Danielle [6:30]
    • Thoughts on the usefulness of a long-term plan [11:30]
    • Deconstructing how Astro and Danielle approach challenges and plans [12:35]
    • Exploring the “soulmate” concept of one true love [15:50]
    • Differentiating between true love and society’s view of marriage and divorce [19:30]
    • New ways of seeing marriage and creating space from social pressure [22:45]
    • Why Astro and Danielle decided to get married for a second time [28:44]
    • Thoughts on fear factors [31:00]
    • The reasons for getting married in authentically happy couples [34:20]
    • The most common mistakes type-A men make in large relationship decisions [36:20]
    • How Danielle and Astro first met [39:35]
    • Exploring my own fears of losing at the game of marriage [41:45]
    • How Danielle and Astro view conflict resolution in their marriage [46:30]
    • Family rituals of Astro and Danielle [50:35]
    • How Astro and Danielle think about managing spouse and children relationships [55:35]
    • The worst advice for “significant other” relationships [56:50]
    • Do you know single people older than 40 who are authentically happy? [59:55]
    • The most impactful $100 for Danielle and Astro [1:08:50]
    • Favorite/most-gifted books [1:13:35]
    • Who is the first person who comes to mind when you think “successful”? [1:19:30]
    • If you could ask anyone from all of history 100 questions about anything who would you choose? [1:22:05]
    • Ways in which medical/scientific training has helped with family relationships [1:23:15]
    • How Astro Teller thinks about death and how to live life intensely every single day [1:31:30]
    • How Danielle Teller measures the success of a day [1:40:15]

    People Mentioned

    by Ian Robinson at May 20, 2015 08:01 PM

    Mark Bernstein

    Feed

    This 2010 series-starter and Hugo nominee is not without shortcomings. It’s another zombie apocalypse and, knowing itself late to that party, doesn’t always take its zombies seriously. It’s a power fantasy about preternaturally smart and capable teenage bloggers who are so competent that we usually forget they’re teenagers. The early chapters have barrels of exposition once we get past the stock James Bond opening chase, and minor characters are frequently reduced to their function, which leaves the world thin. The core technical problem of the YA quest – how do we get agency in the presence of parents? – is settled here by establishing a pair of (very interesting) parents and then failing to even think of them for weeks on end. Much of the science fiction – the world of 2040 where bloggers dominate new media news – was already coming true by the time the book was published, and our hero’s amazement at her sysadmin’s ability of spin up virtual servers as needed is terribly 2008. Finally, this is a book about politics, but its politicians are not very well drawn and their politics is indistinct; I can believe we’ll have viral zombification in 2040 but I’m really skeptical that we’ll have liberal Republicans.

    There’s a lot of wish fulfillment here. In the future, not only are weblogs a dominant and profitable medium, but every A-List blog employs a department of “fictionals” to fill the audience’s demand for stories – and poetry! When our heroes need to hire a head fictional, they find a simpatico young blonde who happens to be a terrific sysadmin and who wants them to call her “Buffy”.

    And yet, there really is something here. There’s a competent thriller eventually, sure, but beyond that there are vistas of real strangeness. These are children born after the end of the world. They expect to die, because that happens a lot in their world. They expect to do amazing things because they were brought up that way and that’s who they are. They don’t spend much time mourning the lost, zombie-free world. They’re out to ride fast bikes, fight off zombie attacks, buy cool equipment, and manage their site’s chat boards and merchandising. They do that well, and, in the intervals, they get out the news, poetry on deadline.

    May 20, 2015 03:31 PM

    Dave Winer

    What would you do if you woke up one morning and there was no Internet?

    I asked this question on Facebook and Twitter, and got a variety of answers.

    I think there are two "correct" answers.

    1. Start a new Internet.

    2. Cry.

    Most people say they would go do normal things that don't involve the Internet, but I think the world would take a long time to adjust. Many of us remember a world without the Internet, but we don't remember a world without the Internet that used to have the Internet.

    A question that reveals the problem is to wonder what would happen if you woke up one morning and found there was no electricity. Not much would happen in the world as it's currently configured without electricity, even though there was a time when it worked fine without it.

    I think the Internet is sufficiently integrated into our civilization at this point that if it were to be removed, it would be such an enormous shock to our economy that.. well, that's why #2 is also a correct answer.

    I'd like to think we could quickly boot up a new net. That's more likely than rebooting electricity because a lot of people who built the initial Internet are still alive and would know how to layer things so it could come back pretty quickly. Assuming the electric grid isn't dependent on the Internet. Which is itself a good question.

    May 20, 2015 12:08 PM

    Fog Creek

    dev.life – Interview with Michael Fogus

    In dev.life, 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 Michael Fogus, Software Architect at Cognitect. He’s a contributor to Clojure and ClojureScript and author of ‘The Joy of Clojure‘ as well as ‘Functional JavaScript‘. He writes about life, programming and thinking on his blog.


    Michael Fogus
    Location: Washington, DC, US
    Current Role: Software Architect at Cognitect

    How did you get into software development?

    I was privileged to receive a Commodore 64 when I was 8 years old and it was my only computer for the next 10 years. Most of the time, I used it only to play games, but I definitely coded my share of BASIC programs (even one that was self-modifying). I remember one time my best friend and I stayed up all night typing in a canoeing game from an old computer magazine (back when they actually contained source code) and when we were done we tried running it and of course it didn’t work. The frustration was exquisite. After a half-hearted attempt to try getting it to work, we gave up and went to bed. Little did I know that I had just experienced what it was like to be a working programmer. My final projects on that lovely computer were my college entrance essays.

    I originally went to school with the intent of majoring in Philosophy and Mathematics. However, in my second year my college started a Computer Science program from scratch and I decided to take a few classes. My curriculum was based almost entirely on XLISP and Common Lisp, and I fell in love with both. I suppose you can say that the rest is history. I was one of the first students (of two) to receive a Computer Science degree from my college. Sadly I needed to stay another year to get the Philosophy degree, so I instead jumped ship and went into the (so-called) Tech industry.

    After a few years of doing CLIPS, Delphi, C, and C++ programming I switched to Java and did that for a very long time. I also took graduate courses during that time in AI working mostly in Common Lisp, Scheme, and Prolog and the contrast between the day job and course work was not in my favor. I eventually broke down and pushed for projects that were relevant to my graduate work and was fortunate enough to land on some great projects. From machine vision to expert systems development and autonomous agents to distributed simulation. I got a nice sampling of the professional “AI” landscape. I did that kind of work for a long time before discovering Clojure and Datalog and the kind of work that I’m doing currently.

    comm64 (1)

    Tell us a little about your current role

    Most of the projects that I consult on are some kind of web service backed by a distributed architecture. The fashionable term is “microservices,” but in my distributed simulation days we called them “federates” – though they tended to be more coarse-grained back then. What happens on a typical day depends on the project team that I’m working on. In any case, 99% of my time is spent remote. I’ll only say that flexibility is a virtue.

    At Cognitect, I’m currently working as a consultant with a company that has the largest Clojure codebase that I’ve ever worked with. My niche with Cognitect has been to work with companies that are looking to use Clojure to build their business, or with companies that have existing Clojure code and would like a thorough code and/or architecture review, or that need a “mentor.”

    On Fridays, I’m free (as in freedom) to work on open-source projects and recently the majority of that time has gone toward getting Clojure 1.7 released. Lately, I’ve been screening patches which is a wholly thankless job, but one that I find challenging and that allows me to get a better grasp of the features and bug fixes in the pipeline.

    Besides my work on Clojure (and rarely ClojureScript), I have been toying around with little programming languages, libraries, and the toy databases to explore interesting ideas. I call these “code paintings.” The biggest challenge in doing these one-shot projects is that I can take them too seriously sometimes, when in reality they’re meant as a form of play.

    When are you at your happiest whilst coding?

    Programming is the only activity that I’ve ever done that’s compelled me to jump out of my chair, yelp, and pump my fist into the air while completely alone in an empty house. I guess whatever provokes those reactions is when I’m happiest. Though working at home allows me to write code while singing some Violent Femmes or the theme song to Raising Arizona, so those times are nice too.

    raisingArizona (1)

    What is your dev environment?

    My development environment is pretty humble these days. Though I do have a nice MacBook Air with dual monitors and OSX for my workspace, I tend to spend most of my time in Emacs writing Clojure. I would have a hard time divorcing myself from Emacs at this point, but truly my most important software tools are my pen (a hacked G2 pro) and notebook (Tops quad ruled lab book). I would literally (in the modern sense) die without my notebooks.

    What are your favorite books about development?

    In no particular order:

    • ‘Out of the Tarpit’ by Marks and Moseley
    • ‘Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I’ by McCarthy
    • ‘LISP 1.5 Programmer’s Manual’ by McCarthy, Edwards, Hart, and Levin
    • ‘META II: A Syntax-oriented Compiler Writing Language’ by Schorre
    • ‘Reasonable LISP’ by Queinnec
    • ‘Open, Extensible Composition Models’ by Piumarta
    • ‘An Association-based Model of Dynamic Behavior’ by Piumarta
    • ‘Open, Extensible Object Models’ by Piumarta and Warth
    • ‘STEPS Toward The Reinvention of Programming’ VPRI
    • ‘The Fundamentals of New Computing’ mailing list
    • ‘The Influence of the Designer on the Design – J. McCarthy and LISP’ by Stoyan
    • ‘Wabi-sabi for Artists, Designers, Poets, and Philosophers’ by Koren (thanks, Sam!)
    • ‘How Buildings Learn: What Happens After They’re Built’ by Brand
    • ‘The Art of the Metaobject Protocol’ by Kiczales
    • ‘Thˆe Early History of Smalltalk’ by Kay
    • ‘Smalltalk-72 Instruction Manual’ by Kay and Goldberg
    • ‘To Trap a Better Mouse’ by Piumarta
    • ‘Are We There Yet?’ by Hickey
    • ‘The Language of the System’ by Hickey
    • ‘Growing a Language’ by Steele
    • ‘Systems that Run Forever Self-heal and Scale’ by Armstrong
    • ‘Programming Should Eat Itself’ by Amin
    • ‘Complex Information Processing: A file structure for the complex, the changing, and the indeterminate’ by Nelson
    • ‘The LISP70 Pattern Matching System’ by Tesler
    • ‘Derivability, Redundancy, and Consistency of Relations Stored in Large Data Banks’ by Codd
    • ‘A Relational Model of Data for Large Shared Data Banks’ by Codd
    • ‘Extending the Database Relational Model to Capture More Meaning’ by Codd
    • ‘Ideal Hash Trees’ by Bagwell
    • ‘Production Matching for Large Learning Systems’ by Doorenboros
    • ‘Soft Stratification for Transformation-Based Approaches to Deductive Databases’ by Behrend
    • ‘Practical Predicate Dispatch’ by Millstein
    • ‘Flavors: Message Passing in the LISP Machine’ by Weinreb and Moon
    • ‘Predicate Dispatching: A Unified Theory of Dispatch’ by Chambers
    • ‘Worlds: Controlling the Scope of Side Effects’ by Warth and Kay
    • ‘BEINGS: Knowledge as Interacting Experts’ by Lenat

    I’d love to fit all of these ideas into a programming language one day.

    What technologies are you currently trying out?

    • 1. Erlang
    • 2. Quadcopter drone
    • 3. SML
    • 4. Everything else under the sun

    quadcopter (1)

    When not coding, what do you like to do?

    I like to read, and I read a lot. When I’m not reading I play Baseball, tabletop board and card games, dabble in designing the same, and occasionally make music (if you call that screeching that comes out of my face music).

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

    You don’t know what you’re talking about!

     

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

    Recent dev.life Interviews

    Peteris Krumins
    Peteris Krumins
    Eric Lippert
    Eric Lippert
    Chris
    Chris Hartjes
    Paul Jones
    Paul M. Jones

    by Gareth Wilson at May 20, 2015 09:09 AM

    May 19, 2015

    Fog Creek

    Welcome Back, Project Groups!

    Ladies and Gentlemen, it is with great pleasure that we announce the long awaited arrival of Project Groups in FogBugz On Demand!

    Project Groups are a way to organize your Projects together in FogBugz so that it’s easier to search and filter by multiple Projects at once. This feature was previously available as a plugin but is now available for all, so long as you’ve switched to the new, shiny and fast FogBugz UI. If you’ve been holding off, then now’s the time to upgrade (and if you’ve been using the plugin, then all the project groups you’ve already defined will come with you)!

    Here’s a little more about how Project Groups can help you to be more productive:

    Let me tell you a story. A true story… ok, perhaps it is more of a realistic story*.

    *Any resemblance to real persons or actual facts is purely coincidental.

    Katyusha and the Neverending Search String

    Katyusha recently signed up for a FogBugz On Demand account. She works as a freelance software consultant. She is hard-working and loyal, so she has many repeat clients. She usually has about four or five clients at one time, each with multiple projects and she likes to keep past projects around for later reference.

    However, Katyusha noticed that there was no obvious way to group Projects together. She resolved to have one or more manual filters for each client, made of very long Search For queries, like:

    project:"Dogebot" OR project:"Doge-o-matic" OR project:"Wow" OR project:"Very Project"

    This worked but was a real pain to maintain. Every time she started a new project for a client, she had to manually update all of the filters’ Search For values.

    But now with Project Groups, Katyusha woes have come to an end. She can now just create a Project Group.
    groups

    This means she doesn’t need the ugly Search For strings anymore, and instead can make use of Project Group filters. She can even make rapid queries using the projectGroup search axis. For instance:
    search
    This will give her the same set of cases of the neverending search string above.

    So Katyusha, FogBugz and her clients lived happily ever after. The End.

    Nice ending, isn’t it? All stories should end so well!

    So, wait no longer and join Katyusha: sign up or upgrade to the new FogBugz On Demand!

    by Emanuele Tamponi at May 19, 2015 03:33 PM

    Giles Bowkett

    Update re Live Electronic Music Performance Design

    Last year, I wrote about an idea I had — a way to bring back some elements of classic raves and see those elements survive better. Over the years, rave music has done incredibly well, while rave events have almost been crushed by governments. The difference is, at a concert, the artists are special and the audience is there to see them, while at a classic rave, things were set up for the dancers first and the DJs second.

    My design was a hybrid of a concert, a rave, a hippie drum circle, and a video game arcade. A performer plays drums in the center, while audience members can play along in little drum pods scattered in a circle around the performer. All the drums are electronic. They play sounds like a normal drum, but they also trigger video software. Thus the "audience" plays a part in creating the event.





    Contrast this with the amazing setup the Glitch Mob uses to perform live:



    I love this and hate it too. It's excellent work. It's beautiful. It's badass. It incorporates, updates, and adapts Japanese taiko drums while still remaining respectful of the original source material — a balance which artists often get wrong. But it's still 100% about the artists being special and the audience being there to see them, which to me seems much more like a rock concert than a club or a rave.

    Also, at one point in the video, one of the Glitch Mob's shocked that a Hollywood set designer can draw, which is kind of ridiculous, because that's the job. And as a programmer, there are moments which seem silly too, because they wrote custom software, but all it seems to do is function as a bus for controller input. In the age of Overtone and Quil, that's kind of a letdown, especially given the stuff other artists are doing with custom software.

    Anyway, back to my own design: in addition to these little 3D sketches. I also wrote a basic version of the software I had in mind. My drumming in this video is terrible, and so is the software, really, but it illustrates the basic idea. Hitting the drums triggers color changes in computer-generated visuals.



    I've been outdone in this category as well. This is a promo video for the Critter & Guitari Rhythm Scope, an analog video synthesizer which responds to sound:



    The interesting thing about this, to me, is that it's analog rather than digital.

    Speaking of which, the performer in my design had a strobe light attached to their drum set. It's the little black box with a grey mesh:



    I bought a strobe light and attempted to integrate it with my electronic drum kit using a protocol called DMX. Got absolutely nowhere, although I found some existing solutions in Ruby and Node (using both CoffeeScript and JavaScript).

    But I've discovered that a small company in Italy makes a Eurorack solution for this, which links DMX to CV instead of MIDI. (Rolling your mouse over the bottom of the video brings up an audio control, although this rather stupidly assumes you're on a computer, not a phone or a tablet.)



    More news as events warrant.

    by Giles Bowkett (noreply@blogger.com) at May 19, 2015 08:19 AM

    Blue Sky on Mars

    Just Don’t Hire 0x Engineers

    During one of my philosophy courses at school, my professor gave us an in-class assignment:

    For the next five minutes, I want you to think about literal Hell. What would it be like? What would you feel and experience?

    And we sat and contemplated what Hell would be for each of us. And then we discussed it. Lots of fire and brimstone. Torture. Pain. It was a pretty lovely discussion.

    Then he flipped it on us:

    For the next five minutes, I want you to think about literal Heaven. What would it be like? What would you feel and experience?

    Surprise, surprise: this was a really shit way to spend five minutes. You first think cool, I get to see all my dead friends and family again. But then you wonder what age they’d all be. And then like, even your BFF is kind of an asshole to you sometimes, do you really want him there? But you also don’t want everyone being complacent zombies all the time- that’d be no fun either. So maybe you just imagine a non-stop orgy and MDMA bender. But wouldn’t that get boring sometimes, too? Variety is the spice of the after-life, after all.

    After about a minute of this we all just got bored. But he made us sit there and think about this for the full five minutes. It was surprisingly maddening. This was supposed to be Heaven, dammit. Eternal happiness. This should be easy.

    It turns out, it’s much easier to focus on avoiding pain than it is to envision pleasure.

    The 10x A-Player Rockstar Engineer

    The hip thing nowadays is that your software company should hire only A-players instead of B- or C-players, or focus on engineers that are ten times better than anyone else. Whether or not that’s true is debatable and dependent on how you're able to measure it, but I think the sentiment itself is the wrong question to ask.

    A Hipster Cat

    Their About page may say otherwise, but — drumroll, please — the average company is pretty average. Not everybody can hire exclusively top-tier people. And you know what? That’s fine. Quality of individuals is only one part of what makes an organization great. Sports is rife with examples of the nimble, well-connected team triumphing over the team of individual superstars.

    When I worked at Gild, it became pretty clear that while nearly all companies boasted that We only hire A-players!, the reality was that most of the companies using our hiring software were most interested in finding people that don’t suck. They wanted good people that they didn’t need to pay the top 1% of salary in the world for. It’s pain avoidance rather than pleasure seeking behavior. It’s worrying about Hell rather than trying to get to Heaven. Basically, most people were Billy Beanes rather than Steve Jobses.

    None of this is bad. What I think is bad is that there’s so much pride and focus on The Best of the Best of the Best, With Honors. It’s setting a pretty fucked up expectation for our industry.

    Not everything a Michelin

    This is an interesting tendency that can occasionally cut across a lot of different areas in your product.

    A few years back I had just landed in Amsterdam and was desperately looking around for breakfast. I checked Foursquare and saw that two of my friends had eaten at a small place just up the block. I figure they must have done at least some research to go there, so it probably wasn't terrible. I ended up eating there and it was perfect. It wasn’t a Michelin star restaurant, because I didn’t need something amazing; all I wanted was to avoid eating shitty food.

    When we’re building product, we tend to use words like best, perfect, optimized, and other top-tier words like that. That’s fine; certainly you want to help your user out as much as possible.

    But with whatever you’re building, step back and realize that sometimes quick is better than best. Or flexible might be better than optimized.

    Sometimes people just want a greasy burger.

    May 19, 2015 12:00 AM

    May 18, 2015

    Mark Bernstein

    Scott Rosenberg

    Scott Rosenberg on links: Will Deep Links Ever Be Truly Deep?

    Every time a writer or speaker creates a project by laying out ideas in a program like Tinderbox, DevonThink, Scrivener, Workflowy, Evernote, or [your favorite here!], she is living out a little of Bush’s Memex dream.

    May 18, 2015 10:17 PM

    Tim Ferriss

    Tim Ferriss

    This short video might blow your mind.

    Using household items like paper clips or toothbrushes, you can easily defeat 70-80% of the padlocks out in the world.

    The teacher is Kevin Reeve of OnPoint Tactical. Kevin has trained and consulted for the FBI, Secret Service, SWAT, and elite military units like Marine Force Recon, SEAL Team 6, etc.

    He was also my teacher for the “Urban Escape and Evasion” episode of The Tim Ferriss Experiment, which is currently the #1 non-fiction TV show across all of iTunes.

    In that episode, Kevin teaches me (and therefore you):

    • How to escape common restraints like zip ties and handcuffs.
    • How to “borrow” cars in emergency situations.
    • Effective evasion tactics for urban environments (e.g. parking garages, fast appearance changes, etc.).
    • And much more…

    I get restrained, hooded, thrown in a trunk, and subjected to other abuse. My (least) favorite part was getting stun gunned while temporarily blinded. Surprise, Ferriss!

    If you’ve ever fantasized about being Jason Bourne — or simply being ready for anything — the entire episode is full of effective and easy-to-learn techniques.

    I suggest getting the “Season Pass” for $14.99 or so, which gets you all 13 episodes for ~40% off, plus hours of bonus footage. Many of you have said that the bonus footage alone is worth more than the $15.

    MORE ON THE TV SHOW

    Bestselling author Tim Ferriss (“The world’s best human guinea pig.” – Newsweek) pushes himself to the breaking point, attempting to learn notoriously punishing skills–surfing, parkour, professional poker, Brazilian jiu-jitsu, online dating (Ha!), learning languages, etc.—in just one week each. Filmed and edited by the same team behind Anthony Bourdain’s hit shows (Zero Point Zero).

    In every episode of The Tim Ferriss Experiment, Ferriss partners with the world’s best and most unorthodox teachers (Laird Hamilton, Marcelo Garcia, Stewart Copeland, etc.), who train him for a final gauntlet. Shocking breakthroughs, injuries, epiphanies, and disasters ensue. In cases where he succeeds, Tim shows you how to replicate his results. The mantra of the show is “you don’t need to be superhuman to get superhuman results…you just need a better toolkit.”

    Enjoy!

    by Tim Ferriss at May 18, 2015 07:39 PM

    Mark Bernstein

    How Not To Crash

    A series from Brent Simmons on How Not To Crash. Part 2: don’t enumerate mutable collections, because no one’s that smart. Good advice.

    Obviously, you’d make an exception for really huge collections, collections so big that the copy is expensive. But in that case, you probably don’t want to be enumerating the collection in the first place, not if you can help it!

    You might also be wondering about small collections enumerated in tight loops. You’d be wrong. Either the outer loop is small, in which case the copies don’t cost much, or the outer loop is not small, in which case your operation is at least quadratic and you’re probably headed for trouble.

    May 18, 2015 02:44 PM

    John Udell

    For remote collaboration, Google Apps still can't be beat

    If you work in tech, you're probably familiar with a common way to facilitate a team meeting.

    Everyone is given a pad of yellow Post-it notes and a small sheet of green sticky dots. At the start of the exercise, each person writes down a few possible topics, one per Post-it note, and sticks their Post-it notes on a wall.

    [ Get the most out of Google with InfoWorld's quick guide "25 tips and tricks for Google Drive power users." Download the PDF today! | Cut to the key news in technology trends and IT breakthroughs with the InfoWorld Daily newsletter, our summary of the top tech happenings. ]

    In the next phase, everybody walks over to the wall and arranges the notes in clusters. Finally, people vote on which topics to discuss by putting sticky dots on the appropriate clusters. It's any effective way to discover what the team has on its collective mind and, thus, how the team's precious "together time" can be used best.

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

    by Jon Udell at May 18, 2015 10:00 AM

    Giles Bowkett

    Underrated Synth: The Korg Wavestation

    Never buy music gear without looking it up on YouTube and Vintage Synth Explorer first (or Gearslutz, or ModularGrid). And never pay for music gear without looking up the price history on eBay for the last three months. It takes five seconds and it'll save you a lot of money.

    I recently found a Korg Wavestation SR on eBay for less than $200. Although they sometimes go for less, they usually go for more. I've had my eye out for a Wavestation for a long time, and seeing one in Richie Hawtin's live setup didn't hurt. But to be sure, I checked YouTube, where I found this demo:



    It's painfully 90s, and it sounds as if it was made on the same machine that the entire X-Files theme song was made on, but that's because it was. It's also kind of awesome, in a painfully 90s way.

    by Giles Bowkett (noreply@blogger.com) at May 18, 2015 09:24 AM

    May 17, 2015

    Lambda the Ultimate

    Draining the Swamp: Micro Virtual Machines as Solid Foundation for Language Development

    Draining the Swamp: Micro Virtual Machines as Solid Foundation for Language Development
    Kunshan Wang, Yi Lin, Stephen Blackburn, Michael Norrish, Antony Hosking
    2015

    Many of today's programming languages are broken. Poor performance, lack of features and hard-to-reason-about semantics can cost dearly in software maintenance and inefficient execution. The problem is only getting worse with programming languages proliferating and hardware becoming more complicated. An important reason for this brokenness is that much of language design is implementation-driven. The difficulties in implementation and insufficient understanding of concepts bake bad designs into the language itself. Concurrency, architectural details and garbage collection are three fundamental concerns that contribute much to the complexities of implementing managed languages. We propose the micro virtual machine, a thin abstraction designed specifically to relieve implementers of managed languages of the most fundamental implementation challenges that currently impede good design. The micro virtual machine targets abstractions over memory (garbage collection), architecture (compiler backend), and concurrency. We motivate the micro virtual machine and give an account of the design and initial experience of a concrete instance, which we call Mu, built over a two year period. Our goal is to remove an important barrier to performant and semantically sound managed language design and implementation.
    Inside you will find the specification of an LLVM-inspired virtual instruction set with a memory model (enables proper GC support) including a specification of concurrent weak-memory operations (reusing C(++)11, a debatable choice), relatively rich control-flow primitive (complete stack capture enabling coroutines or JIT-style de-optimization), and live code update.

    May 17, 2015 09:46 PM

    LoperOS

    Phuctor Broke Several RSA Keys.

    (5/20 Update: This.)

    (5/18 Update: Tired of the contemptible media disinformation and faux-reporting on this subject? For some fresh air, see Mircea’s article, ‘On how the factored 4096 RSA keys story was handled, and what it means to you.’)

    Phuctor, “The RSA Supercollider,” is a long-term collaborative project of yours truly and Mircea Popescu.

    I am pleased to announce that we have now broken a 4096-bit RSA key, as well as its factor-sharing counterpart (yet to be determined, but won’t wait for long!)

    At five minutes prior to the time of this writing, another pair of keys has also been broken.  See Mircea’s site for updates.

    Readers who wish to learn more about this project are invited to join Mircea, myself, and many other fine folks on Freenode in IRC channel #bitcoin-assets. Click here for a WWW-based gateway. Politely privmessage an “up please” to one of the regulars to get speaking rights.


    Edits, Corrections:
    1 ) Threads on Reddit, Hacker News. (5/18: If you care to read these, do it while they’re still up.)
    2 ) Selected hate mail. Will update this section if any more contenders for this list should appear.
    3 ) May 17 ~16:10 EST: Aaand we got another! A GNU developer, like the first. Which makes for six phuctorable keys, three of which are presently known to me.
    4 ) Before joining the chorus of ‘Holy shit, they broke RSA!’ or ‘This is false advertising, they didn’t really do anything!’ imbeciles, please consider reading the (one whole page!) description of what Phuctor actually does.
    5 ) If you are in the service of the enemy, and think that you can somehow prevent or retard the search for weak (weak for whatever reason! I don’t weaken them, only search…) fielded RSA keys, think again. The data set is public in its entirety, and the experiment can be replicated by a schoolboy with minimal sweat. Go ahead and remove the diddled keys from public servers, if you like. We have copies.
    6 ) This is addressed to the same fine folks as #5. Your efforts to bury the story in FUD and hastily-concocted disinformation are riotously funny. Please carry on.
    7 ) Consider getting your tech news from journalists who can spell. (Seriously, ‘Phunctor’ ?!)
    8 ) (5/18) We found a number of moduli, including several pairs which share a large composite factor.  Stay tuned.
    9 ) Folks who believe that ‘anyone can insert anything into SKS‘ are invited to replace my key there with their own.
    10 ) (5/19) As of today, there are 10 broken moduli.

    by Stanislav at May 17, 2015 05:44 PM

    Dave Winer

    Apple Watch liveblog notes

    I got my Apple Watch last week, and I pretty much love it.

    I started taking notes on my exploration on my liveblog, which was designed for cumulative projects like this one. I wanted to be sure readers of Scripting News know about this.

    http://liveblog.co/users/davewiner/2015/05/13/appleWatchNotes.html

    Your comments and suggestions are welcome.

    May 17, 2015 01:53 PM

    Something doesn't smell right about the rush to "deprecate" HTTP

    Google and Mozilla and others want force all non-HTTPS sites to become HTTPS.

    And while the name HTTPS sounds a lot like HTTP, it's actually a lot more complex and fraught with problems. If what they want to do ever happens, much of the independent web will disappear.

    1. First, the problem as I understand it, is that some ISPs are gathering data about the content flowing through their routers, inserting ads and cookies and otherwise modifying content. I agree of course that this is a bad thing.

    2. Going to HTTPS does not get rid of all possible ways of snooping and modifying content. A toolbar, for example, hooking in after the content is decrypted, could change the content. Google tried to do this at one point in the evolution of the web. And even if you couldn't do it with a toolbar, Google and Mozilla both own popular browsers. They could modify content any time they want. HTTPS won't protect us against their snooping and interference. Why are we supposed to trust them more than an ISP? I don't actually trust them that much, btw.

    3. Key point: If you care about whether ISPs modify your content, you can move to HTTPS on your own. You don't need Mozilla or Google to force you to do it.

    4. It also depends on how much you care. Sure in a perfect world I'd want to stop all of it on all my content, but in that perfect world I would have infinite time to do all the work to convert all my websites. I don't have infinite time, and neither do you. I try to pick my battles more carefully. You can waste a lot of time doing something because it seems the right thing to do and end up accomplishing nothing.

    5. What I care about is that sufficiently motivated people will be able to find my archive in the future. I don't think the odds are actually very good, for a lot of reasons. This is just the newest.

    6. Given that a vast amount of content likely won't move, Google and Mozilla are contemplating far more vandalism to the web than any of the ISPs they're trying to short-circuit.

    7. Aren't there other less draconian methods to try first? How about making it illegal where it is not and working with government to enforce the laws? How about developing competition that doesn't do it, so everyone has a choice? That's the way Google is changing how ISPs work in the US. Why not elsewhere? How about developing a kind of encryption that does not require websites to do anything? I don't know if it's possible, but I haven't heard any discussion of that.

    8. Couldn't you use a VPN to tunnel through the nasty ISPs?

    9. This is why we need to overthrow the tech industry as a governing body. It's run by people who shoot first and ask questions later. This is an awful way to be having this discussion, after the decision is made, without any recourse? This is the best argument for taking this power away from the plutocrats in tech.

    May 17, 2015 01:45 PM

    May 15, 2015

    Tim Ferriss

    TF-StitcherButton

    500-358492-894__1Our conversation took place in a barrel sauna like this.

    “It’s [about] getting closer to the source and not being distracted by any nonsense…”
    – Rick Rubin

    Rick Rubin has been called “the most important [music] producer of the last 20 years” by MTV.

    Rick is also revered as something of a Zen master, and he is as deep as he is soft-spoken. He rarely grants interviews, and one condition of doing this one was the setting: his hyper-heated barrel sauna at home.

    In this episode, we delve into how Rick helps artists (e.g. Jay Z, Shakira, Johnny Cash, etc.) produce their best work. Not only that, we also discuss Rick’s step-by-step experience losing 135+ pounds. He describes underwater weightlifting stories, training with Laird Hamilton, testing different diets, and much more.

    Rick’s resume includes everyone from Johnny Cash to Jay Z. His metal artists include groups like Black Sabbath, Slayer, System of a Down, Metallica, Rage Against the Machine, and Linkin Park. He’s worked with pop artists like Shakira, Adele, Sheryl Crow, Lana Del Rey, and Lady Gaga. He’s also been credited with helping to popularize hip hop with artists like LL Cool J, The Beastie Boys, Eminem, Jay Z, and Kanye West.  And that’s just a small sample.

    This conversation teaches a cohesive lesson in breaking down complex skills with deep and subtle problem solving.

    The sauna caused the microphones to burn our hands and us to nearly pass out. DON’T TRY THIS AT HOME, folks! I think it adds a hilarious element to the whole thing, but it’s not without risks.

    [Last but not least, if you haven’t seen my new TV show, which is #1 on iTunes as I write this, please check out The Tim Ferriss Experiment! There are 13 episodes, including ones with surfer Laird Hamilton and “top 10 drummer of all-time” Stewart Copeland.]

    Enjoy!

    TF-ItunesButtonTF-StitcherButton

    Interested in learning more about world-class musicians? — Check out my interview with Amanda Palmer who left her record label and raised more than $2 million via crowd funding. (stream episode below or right-click here to download):

    Also, don’t miss Justin Boreta of The Glitch Mob, one of the biggest electronic groups on the planet. In my conversation with Justin, we play their never-before-heard draft versions of their songs and then explore what it takes for Justin to move that draft through 300+ versions to a final version which will knock your socks off (stream below or right-click here to download):


    This episode is 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.

    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: Rick Rubin cites “heart work” as critical for creatives. What is the balance of heart work and head work in your creation process? 50/50? 70/30? How did you realize what works best for you? Please let me know in the comments.

    Scroll below for links and show notes…

    Selected Links from the Episode

    Show Notes

    • The story of how Rick Rubin lost 135-145 pounds [7:50]
    • Sleep Tools: A process for rebuilding your circadian rhythm for the first time [10:50]
    • What does Rick Rubin “do”? [22:45]
    • Transitioning into a career of record producing [23:35]
    • On letting music be discovered vs. manufactured [24:30]
    • What gets in the way of artists producing their best work [26:05]
    • Recommendations for contemporary music [30:55]
    • How Rick Rubin learned that music was something he could do as a career [34:00]
    • Hip-hop to heavy metal and how to approach music with appreciation [38:05]
    • Working with artists in different genres: LL Cool J to Slayer [40:15]
    • Meditation and managing disruption [42:40]
    • Who comes to mind when Rubin thinks of the word “successful” [46:50]
    • Lessons learned from time spent with Don Wildman [49:45]
    • Most gifted books and favorite documentaries [51:35]
    • Managing the experience of overwhelm [54:30]
    • About Rick Rubin’s cameo for 99 Problems and Jay Z’s creative process [56:50]
    • On being introduced to the sauna/ice-bath combination [1:00:10]
    • Underwater weight training and lessons from Laird Hamilton [1:02:15]
    • Other exercises: Hyperbaric oxygen and the Wim Hof method  [1:08:35]
    • How Rubin uses small tasks to help others [1:10:05]
    • Advice for his 20-year old and 30-year old self [1:13:10]

    People Mentioned

    by Ian Robinson at May 15, 2015 04:11 PM

    Giles Bowkett

    Strong Parameters Are A Weak Schema

    Ruby on Rails went off the rails a long time ago.



    I don't work with Rails today. But, like so many other developers, I kept working with Rails for many years after the Merb merge. Because I loved Ruby, and because the Rails developer experience remains a thing of beauty, even today.

    I stuck around for Rails 4, and one of the changes it made was silly.
    Rails has always had a nice way of sanitizing user input coming from ubiquitous forms. Up until Rails 3, the solution was to list accessible fields right in your models. Then Rails 4 came along and introduced a different solution - strong_parameters, allowing you to take a greater control over the sanitizing process.
    As is often the case with Rails, the real problem here is that the core team failed to recognize a classic problem of computer science, after underestimating the importance of API-centric web development, and perceiving the problem purely in terms of showing a web page to a user.

    What Rails Was Thinking


    Before I get into that, I just want to summarize the problem from the Rails perspective: you've got input coming in from users, who are filling out web forms. They might be up to mischief, and they might use your web form to cause trouble. So you have to secure your web forms.

    The classic Rails solution for securing a web form: attr_accessible. Since models are the only way Rails puts anything into a database, you can recast "securing a web form" as validating an object. It makes perfect sense to say that code which secures an object's validity belongs in that object. So far, so good.

    attr_accessible was a white-listing mechanism which allowed you to specify which model attributes could be mass-assigned. The default for updating or creating an object in Rails, update_attributes, would allow a user to update any aspect of a model, including (for example) their User.id or their authorization privileges.

    But this whitelisting was disabled by default. You had to kick it into gear by calling attr_accessible at least once, in your model. People forgot to do this, including people at GitHub, a very high-profile company with great developers, which got very visibly hacked as a result. People responded by writing initializers:

    ActiveRecord::Base.update_attributes(nil)

    (Obviously, a better way to do that would be to wrap it in a method called enable_whitelist or something, but that's a moot issue now.)

    People also responded by writing plugins, and in Rails 4, one of these plugins moved into Rails core.

    So this is what changed:
    • attr_accessible had an inverse, attr_protected, which allowed you to use a blacklist instead of a whitelist. strong_parameters only permits a whitelist.
    • The whitelisting default changed from off to on.
    • The code moved from the model to the controller.
    David Heinemeier-Hansson wrote up the official rationale. I've added commas for clarity:
    The whole point of the controller is to control the flow between user and application, including authentication, authorization, and, as part of that, access control. We should never have put mass-assignment protection into the model, and many people stopped doing so long ago ...

    An Alternative Approach


    Let's look at this from a different perspective now.

    Say you're building a web app with Node.js, and you want to support an API as well as a web site. We can even imagine that your mobile app powers much more of your user base, and your web traffic, than your actual web site does. So you need to protect against malicious actors exploiting your web forms, as web apps always have. But you also need to protect against malicious actors exploiting your API traffic.

    At this point, it's very easy to disagree with Mr. Hansson's claim that "we should never have put mass-assignment protection into the model." Both the "protect against malicious actors" problems here are very nearly identical. You might have different controllers for your API and your web site, and putting mass-assignment protection into those controllers could mean implementing the same code twice. Centralizing that code in the relevant models might make more sense.

    Rails solves this by quasi-centralizing the strong_parameters in a private method, typically at the bottom of the controller file. Here's the example from the official announcement:

    But you could also just use JSON Schema. All your web traffic's probably using JSON anyway, all your code's in JavaScript already, and if you write up a schema, you can just stipulate that all incoming data matches a particular format before it gets anywhere near your application code. You can put all that code in one place, just as you could with models, but you move the process of filtering incoming input right up into the process of receiving input in the first place. So when you do receive invalid input, your process wastes less resources on it.

    (This is kind of like what Rails did, except you can put it in the server, which in Rails terms would be more like putting it in a Rack middleware than in a controller.)

    The funny thing is, writing a schema is basically what Rails developers do already, with strong_parameters. They just write their schemas in Ruby, instead of JSON.

    Here's a less cluttered example:

    Note especially the very schema-like language in this line:

    params.require(:email).permit(:first_name, :last_name, :shoe_size)

    All you're doing here is permitting some attributes and requiring others. That's a schema. That's literally what a schema is. But, of course, it lacks some of the features that a standard like JSON Schema includes. For instance, specifying the type of an attribute, so mischevious Web gremlins can't fuck up your shit by telling you that the number of widgets they want to purchase is `drop table users`. (Rails has other protections in place for that, of course, but the point is that this is a feature any schema format should provide.)

    Rails developers are writing half-assed schemas in Ruby. If/when they choose to farm out parts of their system to microservices written in other languages, they'll have to re-write these schemas in other languages. For instance, they might at that point choose to use a standard, like JSON Schema. But if you're building with the standard from the start, you only have to define that schema once, using one format.

    In fact, Rails developers typically re-write their schemas whether they refactor to microservices or not. Many Rails developers prefer to handle API output using active_model_serializers, which gives you a completely different Ruby-based schema format for your JSON output.

    Here's an example from the README:

    This code says "when you build the output JSON, serialize the name and body attributes, include post_id, and add some hypermedia-style URLs as well." It infers a lot from the database, and it's nicer to read than JSON Schema. But you can't infer a lot from a database without some tight coupling, and this syntax loses some of its appeal when you put it side-by-side with your other implicit Ruby schema format, and you have to remember random tiny distinctions between the two. It's kind of absurd to write the same schema two or three different times, especially when you consider that Ruby JSON parsing is so easy that your JSON Schema objects can be pure Ruby too if you want.

    strong_parameters really only makes sense if you haven't noticed basic things about the Web, like the fact that HTTP has a type system built in.

    by Giles Bowkett (noreply@blogger.com) at May 15, 2015 01:05 PM

    May 14, 2015

    Lambda the Ultimate

    Eve: the development diary of a programming environment aimed at non-programmers

    In spring 2012 Chris Granger successfully completed a Kickstarter fundraising and got $300K (instead of the requested $200K) to work on a live-feedback IDE inspired by Bret Victor "Inventing on principle" talk. The IDE project was called Light Table. It initially supported Clojure (the team's favourite language) only, but eventually added support for Javascript and Python. In January 2014, Light Table was open sourced, and in October 2014 the Light Table development team announced that they decided to create a new language, Eve, that would be a better fit for their vision of programming experience.

    There is little public about Eve so far, no precise design documents, but the development team has a public monthly Development Diary that I found fairly interesting. It displays an interesting form of research culture, with in particular recurrent reference to academic works that are coming from outside the programming-language-research community: database queries, Datalog evaluation, distributed systems, version-control systems. This diary might be a good opportunity to have a look at the internals of a language design process (or really programming environment design) that is neither academic nor really industrial in nature. It sounds more representative (I hope!) of the well-educated parts of startup culture.

    Eve is a functional-relational language. Every input to an Eve program is stored in one of a few insert-only tables. The program itself consists of a series of views written in a relational query language. Some of these views represent internal state. Others represent IO that needs to be performed. Either way there is no hidden or forgotten state - the contents of these views can always be calculated from the input tables.

    Eve is designed for live programming. As the user makes changes, the compiler is constantly re-compiling code and incrementally updating the views. The compiler is designed to be resilient and will compile and run as much of the code as possible in the face of errors. The structural editor restricts partially edited code to small sections, rather than rendering entire files unparseable. The pointer-free relational data model and the timeless views make it feasible to incrementally compute the state of the program, rather than starting from scratch on each edit.

    The public/target for the language is described as "non-programmers", but in fact it looks like their control group has some previous experience of Excel. (I would guess that experimenting with children with no experience of programming at all, including no Excel work, could have resulted in very different results.)

    Posts so far, by Jamie Brandon:

    Some random quotes.

    Retrospective:

    Excited, we presented our prototype to a small number of non-programmers and sat back to watch the magic. To our horror, not a single one of them could figure out what the simple example program did or how it worked, nor could they produce any useful programs themselves. The sticking points were lexical scope and data structures. Every single person we talked to just wanted to put data in an Excel-like grid and drag direct references. Abstraction via symbol binding was not an intuitive or well-liked idea.

    [...]

    Our main data-structure was now a tree of tables. Rather than one big top-level function, we switched to a pipeline of functions. Each function pulled data out of the global store using a datalog query, ran some computation and wrote data back. Having less nesting reduced the impact of lexical scope and cursor passing. Using datalog allowed normalising the data store, avoiding all the issues that came from hierarchical models.

    At this point we realised we weren't building a functional language anymore. Most of the programs were just datalog queries on normalised tables with a little scalar computation in the middle. We were familiar with Bloom and realised that it fit our needs much better than the functional pidgin we had built so far - no lexical scoping, no data-structures, no explicit ordering. In late March we began work on a Bloom interpreter.

    October:

    Where most languages express state as a series of changes ('when I click this button add 1 to the counter'), Eve is built around views over input logs ('the value of the counter is the number of button clicks in the log'). Thinking in terms of views makes the current language simple and powerful. It removes the need for explicit control flow, since views can be calculated in any order that is consistent with the dependency graph, and allows arbitrary composition of data without requiring the cooperation of the component that owns that data.

    Whenever we have tried to introduce explicit change we immediately run into problems with ordering and composing those changes and we lose the ability to directly explain the state of the program without reference to data that no longer exists.

    [...]

    In a traditional imperative language, [context] is provided by access to dynamic scoping (or global variables - the poor mans dynamic scope) or by function parameters. In purely functional languages it can only be provided by function parameters, which is a problem when a deeply buried function wants to access some high up data and it has to be manually threaded through the entire callstack.

    December:

    Eve processes can now spawn subprocesses and inject code into them. Together with the new communication API this allowed much of the IDE architecture to be lifted into Eve. When running in the browser only the UI manager lives on the main thread - the editor, the compiler and the user's program all live in separate web-workers. The editor uses the process API to spawn both the compiler and the user's program and then subscribes to the views it needs for the debugging interface. Both the editor and the user's program send graphics data to the UI manager and receiving UI events in return.

    May 14, 2015 12:27 PM

    Fog Creek

    How to Find, Hire, and Retain Developers – Interview with Cal Evans

    .little {font-size: 75%}
    How to Find, Hire, and Retain Developers – Interview with Cal Evans

    Looking for audio only? Listen on

    We’ve interviewed Cal Evans, author of ‘Culture of Respect’, and we discuss how to find, hire, and retain Developers. He gives tips on where to find great developers, how to write job ads which appeal to them and how best to interview them. We also discuss ways to build a great team culture that can help startups and growing businesses compete with the big guys for talent.

    Hear more about such topics from Cal over on his blog and check out our video guide to hiring developers .

    Content and Timings

    • Introduction (0:00)
    • Developer Management (0:35)
    • Finding Developers (2:38)
    • Developer Job Ads (4:30)
    • Interviewing Developers (6:18)
    • Creating a Culture of Respect (11:03)
    • Common Developer Hiring Mistakes (14:59)
    • Recommended Resources (17:29)

    Transcript

    Introduction

    Derrick:
    Cal Evens is a technical manager of training at Zen, a PHP expert and community leader. He’s experienced in building and managing development teams, he’s the author of a number of books including: Going Pro, Signaling PHP and most recently, Culture of Respect: how to find, hire and retain developers. Cal, thank you so much for taking the time to join us today, do you have a bit to say about yourself?

    Cal:
    Pleased to be here, honored to be invited to participate.

    Quite honestly, if you can spell PHP, I can probably get you a job coding PHP

    Developer Management

    Derrick:
    Culture of Respect focuses on hiring and retaining developers. Why do you think people need to think about hiring and managing developers differently than those in other roles?

    Cal:
    I’m always careful to preface my talks about hiring and managing developers by saying I’ve never managed anything else. I don’t know, it could be that accountants are exactly the same but what I know are developers so that’s what I talk about. I’ve been a developer now long enough to have seen companies go from being companies that use software and occasionally developer their own, to being software companies that also do something else. Most companies these days have an in-house development team that does something, whether you’re building controllers for John Deere tractors or you’re building websites for Amazon, software is so integrated in what we do that most companies have an in house development team. Most companies these days, their in-house development team is actually what drives the company, builds the products that the company sells or makes it possible for the companies to sell.

    While I’m never an advocate for setting developers up on a pedestal and saying we need to treat them like demi gods, I do think you have to respect the fact that you have to treat them differently. You cannot just say, we have a cookie cutter, this is how we treat people. Developers have different needs. Immediately, if I start a job and they hand me a laptop that has been used by three other people and I have to figure out how to make things work, then that’s a smell test that doesn’t pass. Companies have to understand that you’ve got to invest in good tools for developers. Right now it’s a seller’s market for developers. Quite honestly, if you can spell PHP, I can probably get you a job coding PHP. I get people writing me saying we’ll train them, just give me someone with the aptitude to learn how to program. It’s a great time.

    Finding Developers

    Derrick:
    Let’s start with finding developers. What have you found to be the most effective way to find developers to hire?

    Cal:
    I’m going to talk mostly about the PHP community because that’s what I’m most familiar with but most of these should work in just about any developer community you’re working in. The first thing is get involved in your local community. That means start attending your local PHP groups on a regular basis. Go 5 or 6 months to build your relationships before you start doing any real recruiting. Even then, once you start, don’t just walk in and say, I’m here, I’m collecting resumes. Be the sponsor. Buy the pizza and the beer and the soda for the group a couple of times. That’s the first thing, get involved in your local community. The second step, and this is very important, it’s equally important, repeat the first step as necessary. Your local community is where you’re going to find your best resources. I’m a big fan of remote developers, but we’re not talking about that right now. We’re just talking about trying to find local developers. Your local community is going to be the number one.

    Once you have integrated yourself into the local community, then start looking for, in the PHP community, we have regional conferences that have come up in the past 4 or 5 years. Once you have gotten your name in regional, then you go to national conferences and you sponsor, or you just go and attend and hang out with people. Then you start moving towards the international conferences like ZendCon and Dutch PHP, these conferences, and those are great places to find developers, but at that point you’ve got to be of the mindset that you don’t have to have them sitting in a chair in a cube that you can see. You’re going to have to start doing remote before the nationals and internationals are really going to pay off for you.

    Developer Job Ads

    Derrick:
    What are some tips for writing great job ads seeking developers?

    Cal:
    Number one, I cannot stress this enough, put a salary or salary range on the job ad. You’re not limiting yourself, and you’re going to help developers pre-screen. You’re not giving away any secrets because I guarantee you, if you’ve already got developers, they’re talking to their buddies, we know how much you’re paying. If you tell us, then we can help pre-screen. Help me understand if I can afford to take the job. The second thing, if I see Photoshop on a developer ad, that’s a red flag immediately. What it tells me is you don’t understand what you want, so you’re just throwing everything out there. I advise developers, anytime they’re looking at job ads, serious developer positions, not front end developers, but mid range and back end developers, if they see Photoshop on it, walk away. It doesn’t matter who the company is, walk away. The company doesn’t understand what they’re trying to hire for. Somebody said, we’ve got a billet open, I need a PHP developer. Every now and again I need photoshop, I need front end work, so go ahead and put that on there too. That’s not what they’re looking for.

    Then what I like to call no bullshit ads. What I want to know is can I afford to take the job, am I qualified for the job, how much does the job pay? That’s the important stuff. If you nail those, then you have a good chance of finding the developer that you’re actually looking for and not have to wade through the 150 resumes you’re going to get if you put up a kitchen sink ad or a bullshit ad or something like that. I’ve been the manager that had to wade through those. I tell you this from experience because I’ve made all of these mistakes before.

    Hiring remote developers means that you can get the absolute best developer… not just the ones that are willing to live in your city

    Interviewing Developers

    Derrick:
    You’ve been critical of code testing in dev hiring, why is that?

    Cal:
    First of all, I am to the point in my career where I have a LinkedIn profile that if you printed out in a PDF, it would be 5 or 7 pages. I have 10 or 12 GitHub repos out there that show what my code is. If you as a developer manager are not qualified to read through my GitHub Repo and look at the code that I’m writing and say is this good code, and if you’re not qualified to look at my LinkedIn profile and see that I show a progression of responsibilities, then I question whether you’re qualified to manage me in the first place. So many intricate things to being a developer that if you’ve not done it, you’ve got no framework. Setting timelines and deadlines, stuff like that. If you’ve never done development, then setting deadlines is real easy. By here, by this date, but if you’ve done development then you know it’s not nearly that easy.

    Derrick:
    So what steps should people take in hiring the right developers?

    Cal:
    The number one thing that I look for is competency. If you’re not competent then you’re going to be a hindrance to the team. When I’m hiring on a team, keeping the team cohesion is very important. Once I determine competency, then we start looking at cultural fit. These days, you have to be very careful when you say cultural fit, because everybody says you’re only looking for white guys that graduated from your college. No, cultural fit does not mean that you look like me, it does not mean that you think like me. What cultural fit means it that I’ve got a team that is currently working together and you’ve got to be able to play a part on that team, and you’ve got to be able to disagree with these people, and not be a hindrance to the team. Building that team culture is so important, and keeping the team culture together, and I’ve seen great teams make a bad hiring decision and totally destroy the culture of the team, and the momentum of the team. Just because they got one person who dragged the whole team down.

    I get the entire team that the person’s going to be working on in one room and I let the team ask questions until everybody is out of all the questions. I don’t care if you’re junior, senior, architect or whatever, you’re going to get to ask any question you want of this person as long as it’s a legal question. Once they finish that, then we can move on. I never ask questions in these interviews. The team always does it. My job is to sit back and see how the team interacts with this person and how this person interacts with the team. If I see a lot of friction, I’m thinking this might not be a good fit. It doesn’t automatically disqualify them but it means I’m going to have to do a little more interviews first.

    The final thing, once I have determined competency, once I know it’s a good cultural fit, can I afford them? I am very odd in this. I do not negotiate salaries. I ask the person what do you need. I expect that person to be honest with me and tell me the number they need. The two questions I ask at that point is are we within reason, because if I’ve got a junior developer saying I need $100,000, that’s not reasonable. I’m still not going to negotiate with them but they’ve given me their answer. If they’re reasonable then the next question is can I afford them. If it fits within my budget and it’s a reasonable price and they have passed the team interview, the team has voted on them and said yes we want them, then I say okay. I don’t come back with a counter offer. I don’t negotiate this at all, because my feeling is a developer, if they’re being honest with me is going to tell me what they need to be happy with this. I don’t mind side projects but I don’t want people to have to do side projects to make ends meet. Quite honestly, if they’re not being honest with me on their salary needs, I’m probably not going to want them on my team to begin with because they’re not being honest with me, period.

    The one final point about the team voting is it has to be a unanimous vote. I’ve actually had to walk away from candidates because I had one person say I don’t think this person is going to fit well on my team, and so we said I’m sorry it’s not going to work, because the team is the one that’s going to have to work with them. I’m just going to have to manage them, that’s the easy part. The team has to work with them on a day to day basis. If that team is not sold on the fact that this person is the person that they want on their team, I’d rather just walk away and find another candidate.

    Creating a Culture of Respect

    Derrick:
    What can start ups and small companies do to compete in hiring the best talent? When you have big players offering free lunches and large salaries, etc?

    Cal:
    Free lunches, that’s crap. That’s not a benefit, that’s a perk. I understand the mentality of free lunches and dry cleaning and all of this. Those exist so the company can keep the developer’s butt in their seat longer, and they exist for no other reason. It’s just a way to keep that developer on campus, focused on the job, for as long as possible. If a small company builds a culture of respect, they respect the developer, they understand that their job is a portion of their life, their job is not their life, then you can attract better developers than companies that have free lunches, dry cleaning, a Kegerator, you name it, Foosball tables, whatever.

    My favorite example of this is in Nashville, we have Dave Ramsey, and they have a wonderful development team. Dave Ramsey’s team does not have a Kegerator. People work there because at 5 O’Clock, you’ve basically got to justify why you’re still there, because they understand that this is part of your life, it is not your life. It’s working for them because, they’re a Ruby shop, they’ve got a 6 month hiring process. It takes 6 months just to be hired by them, and yet they still have a list of candidates waiting to go through the process. They need Ruby developers right now. They’re constantly advertising for new, but they won’t compromise their team just to put a butt in a seat. They’ve got to get the right fit, and that is the focus of basically the second half of the book, of Culture of Respect. Helping managers to understand that developers have a life and their life is not building their particular project. If you understand that, then you really won’t have a problem finding developers.

    Derrick:
    So you’ve hired a great team, what are some specific things that people can do to engage developers and keep them around?

    Cal:
    I practice what’s called Servant Leadership. It was not unusual for me, when I was running teams, to first thing in the morning, brew up a huge pot of coffee and walk around to each of my developers around 9 am and refresh their coffee. Not walk by, pour a cup of coffee, and talk to them for 15 minutes, because then you get into a drive-by meeting, and you’ve interrupted them, and you’ve killed productivity. I would just refresh their coffee. I knew what everyone took, cream, sugar, made sure I had it. It was just my way of saying my job is to hire good people and get out of the way to make sure they have everything they need. My job is to serve them and also be what I call the poop shield. Anything, any poop that comes in from above, my job is to keep it off my team. If a manager needs a meeting with somebody on my team, I’ll go. I will sit in that meeting and if it actually needs a developer, I will call that developer and say I need you to come down here.

    I’ve had so many, and I learned this very early on, so many meeting requests for developers are just status meetings that they need the whole team, all the stakeholders in there, and the developer really doesn’t need to be in there. We’re just going over the project stuff. I’ll go to those meetings, I’ll take notes, and I’ll email the developer and they can read them later. If you don’t actually need a developer, then you’re costing me money by requiring a developer to sit in that meeting. That’s basically my theory, hire good people, get the hell out of the way.

    They have lives, and the main point of their lives is not to build you the next Uber for penguins

    Common Developer Hiring Mistakes

    Derrick:
    Are there any common mistakes that you see people making when hiring developers?

    Cal:
    Yes, the most common mistake I see people making is not considering remote developers. I’ve been programming for 35 years. I’ve spent more time remote than I have on site. As a developer, I can’t get work done if people can walk by and stop me and talk to me, or constant interruptions of the telephone. If I’m remote, I can turn off my phone, I can turn off my email, I can shut down twitter, and I can focus and I can get the work done. Most people don’t understand this. Hiring remote developers is much more than going out to weworkremote.com and finding someone that will do it and say boom, we’ll hire you.

    You have to have a remote developer program in place before you hire your first one. You have to understand that it’s going to be more work for you, the manager, to manage that remote person, because if you don’t hear from them, you have to reach out to them. As developers, we have this tendency, if we don’t have any interruptions, we will go heads down, get in the zone. I have actually started a project at 11 am and looked up one day and it was 11 pm that night, and I’m like, this is so cool, I got so much work done. Oh my god, it’s 11 pm at night. You lose track of time, but that’s great for developers.

    As a manager, if I’m not hearing from my developer, I don’t have to hear every 15 minutes, but I need to know that they are actually working and not playing on their Xbox. There’s a balance there, and it is more work for the manager. I get these emails all the time, ‘we’ve got a great opportunity and we’re looking for the best developer we can find’. I write them back. Great, are you willing to hire remote? ‘No’. Then you’re really not looking to hire the best, you’re looking for the most convenient, let’s be honest about it.

    Hiring remote developers means that you can get the absolute best developer that is available to you, not just the ones that are willing to live in your city. If I can get anything across to people it’s figure out how to work with remotes. One of the other things I say that really pisses people off. I tell companies, if your managers can’t handle managing remote developers, get better managers. That’s a whole lot cheaper than trying to find developers in your local area.

    Recommended Resources

    Derrick:
    What are some resources that you can recommend to those interested in learning more about dev hiring and management?

    Cal:
    There’s only been a couple of things that have really impacted me. Of course the very first one is Mythical Man-Month. You really have to understand how the timing works in building software. I believe that everybody, if you’re a manager of software development, then you need to read Mythical Man-Month, and it needs to be an annual thing. You need to keep reading it once a year until you really understand it and you can start applying it without thinking about it. Of course, Peopleware, it’s another one of our ancient tomes in software management. It’s a great one. Another one, and you’ve interviewed this person on your dev.life blog, is Paul Jones, for a talk that he does called ‘All You Jokers’.

    Software management teams like to go and say we need this built in this time frame, without any concept of what this time frame is actually going to take. It falls on developers to actually hit this time frame. That’s how we end up with the 120 hour work weeks and giving up our lives for a company that’s not going to give us anything more than a salary and possibly some stock options. It isn’t rocket science, this is basic human nature. Treat developers with respect, understand that they have lives, and the main point of their lives is not to build you the next Uber for penguins. You don’t have to put them on a pedestal but they aren’t galley slaves either. You hire good people, you treat them with respect, you give them the tools that they need and let them do their job. That is the secret to a happy, productive, and awesome development team.

    Derrick:
    Thank you so much for joining us today.

    Cal:
    Thank you for having me on.

    by Gareth Wilson at May 14, 2015 11:37 AM

    May 13, 2015

    Dave Winer

    How to have a future

    The journalism world is having a fit of depression today as they learn that their something they've actually known for years: their distribution system is owned by the tech industry.

    There is a solution. Start rebuilding your distribution system around the Internet. Instead of broadcasting to an audience, feed a community back to itself. Be distributors. Understand that you are not making the news. Your job always has been distribution.

    It's all about your rolodex

    1. Gather all the rolodexes in your organization and merge them into a database.

    2. Be sure you have a field in your database called "Feed" and in that field save the address of your source's RSS or Atom feed.

    3. Make a river out of those feeds. Start watching that river. Tell your sources about the river, give them the address. About five minutes after that you will be jumping up and down with excitement.

    4. Make it your home page.

    That's it. You've now created a future. Live in it, and learn from it, and evolve accordingly. There are no parachutes, no single well-defined path all news orgs will go down. You have to make it up as you go.

    However, until you get your river going, you will still be in the print era. Any effort you make there is wasted, it's not how news works today or in the future. We live in an era where sources have direct access to people who want the news. The sources are learning how to use that power. You have to find new relevance.

    You can use River4

    River4 is an open source aggregator written in JavaScript that does all that you need to get started. I wrote it, so you know it's good.

    One more thing

    If you're a journalism educator, please make sure every new journalist you graduate has the ability to run a server, install blogging and river software. People should not be scared of this technology. It's not hard, and is more immediately valuable than learning to "code" -- it should be a prerequisite.

    May 13, 2015 04:50 PM

    Mark Bernstein

    Why I Adore The TLS

    From Rupert Brooke, “Heaven.”

    But somewhere, beyond Space and Time.

    Is wetter water, slimier slime!

    And there (they trust) there swimmeth One

    Who swam ere rivers were begun,

    Immense, of fishy form and mind,

    Squamous, omnipotent, and kind;

    And under that Almighty Fin,

    The littlest fish may enter in.

    May 13, 2015 02:40 PM

    Dave Winer

    Facebook's Instant Articles

    A few items related to Facebook's Instant Articles announcement that came in the middle of the night.

    1. I was briefed on this project last summer.

    2. It got me interested in the Facebook API.

    3. People who use Facebook want this. How do I know? When I post full text of stories on FB they read it and comment. When I post a link to my blog post, they still comment, but very often without having read the piece. As a writer I can only take so much of this!

    4. The place to put this functionality is in the CMS or blogging tools. If I were FB, I would have gone to the toolmakers first. Made sure there was broad support. Why do they care so much about the big brands? Maybe there's something strategic about this. Do the big brands really move first, fast, with confidence and innovation? Or are they driven by fear of missing out? Which motivation creates better user experience? (In my experience love is where creativity comes from, not fear.)

    5. I was told last summer that they were building on RSS. Of course that's a good thing, if true. It means that the content could flow not just to Facebook, but anywhere that's prepared to receive it. This creates many interesting options. In this, Facebook is being a good corporate citizen and Friend to the Open Web (with the qualification that I don't know for sure if it is true).

    6. I have asked for access to the tech now that it's out, but got rejected!

    7. I hope they change their mind.

    8. Bloggers matter, imho as much as any professional reporter. I want parity for bloggers. In this way they are not being a friend of the open web.

    9. The NYT, National Geographic, Buzzfeed, et al, are right to publish their content to Facebook in full. It's one of the big places where people who read news congregate. But they should also quickly develop new channels that are not dependent on the tech industry.

    10. Journalism pundits will re-litigate the michegas over The Algorithm. The time to debate that was when it was new, five years ago. It's done now. The next thing is whether or not the news industry invests in its own future, or lets the tech industry continue to own it. The Algorithm wouldn't have mattered if journalism had done its job. I guess that's where my frustration comes from reading the hot angry frustrated powerless pieces by Jay Rosen, Zeynep Tufekci and Emily Bell. Where were you when this was news? And why are you missing the current issue? Why are you always five years late? Yes I was ringing the bells about this then. Now it's time to finally compete with Facebook and Twitter. It might already be too late, but it might not be.

    May 13, 2015 10:53 AM

    Ian Bicking

    A Product Journal: Community Participation

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

    Generally at Mozilla we want to engage and activate our community to further what we do. Because all our work is open source, and we default to open on our planning, we have a lot of potential to include people in our work. But removing barriers to participation doesn’t make participation happen.

    A couple reasons it’s particularly challenging:

    1. Volunteers and employees work at different paces. Employees can devote more time, and can have pressures to meet deadlines so that sometimes the work just needs to get done. So everything is going fast and a volunteer can have a hard time keeping up. Until the project is cancelled and then wham, the employees are all gone.

    2. Employees become acclimated to whatever processes are asked of them, because whether they like it or not that’s the expectation that comes with their paycheck. Sometimes employees put up with stupid shit as a result. And sometimes volunteers aren’t willing to make investments to their process even when it’s the smart thing to do, ‘cause who knows how long you’ll stick around?

    3. Employee work has to satisfy organizational goals. The organization can try to keep these aligned with mission goals, and keep the mission aligned with the community, but when push comes to shove the organization’s goals – including the goals that come from the executive team – are going to take priority for employees.

    4. Volunteers are unlikely to be devoted to Mozilla’s success. Instead they have their own goals that may intersect with Mozilla’s. This overlap may only occur on one project.  And while that’s serendipitous, limited overlap means a limit on the relationships those volunteers can build, and it’s the relationships that are most likely to retain and reward participation.

    I have a theory that agency is one of the most important attractors to open source participation. Mozilla, because of its size and because it has a corporate structure, does not offer a lot of personal agency. Though in return it does offer some potential of leverage.

    I am not sure what to do with respect to participation in PageShot. If I open things up more, will anyone care? What would people care about? Maybe people would care about building a product. Maybe the building blocks would be more interesting. We have an IRC channel, but we also meet regularly over video, which I think has been important for us to assimilate the concept and goals of the project. Are there other people who would care to show up?

    I’m also somewhat conflicted about trying to bring people in. Where will PageShot end up? The project could be cancelled. It’s open source, sure, but is it interesting as open source if it’s a deadend addon with no backing site? Our design is focused on making something broadly appealing such that it could be included in the browser – and if things go well, the addon will be part of the browser itself. If that happens (and I hope it will!) even my own agency with respect to the project will be at threat. That’s what it means to get organizational support.

    If the project was devolved into a set of libraries, it would be easier to contribute to, and easier for volunteers to find value in their participation. Each piece could be improved on its own, and can live on even if the product that inspired the library does not continue. People who use those libraries will maintain agency, because they can remix those libraries however they want, include them in whatever product of their own conception that they have. The problem: I don’t care about the libraries! And I don’t want this to be a technology demonstration, I want it to be a product demonstration, and libraries shift the focus to the wrong part.

    Despite these challenges, I don’t want to give up on the potential of participation. I just doubt would look like normal open source participation. I’ve expanded our participation section, including an invitation to our standup meetings. But mostly I need to know if anyone cares, and if you do: what do you care about and what do you want from your participation?

    by Ian Bicking at May 13, 2015 05:00 AM

    May 12, 2015

    Dave Winer

    Why I moved off Heroku

    I really appreciate the service that Heroku runs. It was a very easy way for me to get started in Node.js, and also very affordable! I kept marveling at what a great deal it was, gushed publicly about it, and paid them the highest honor, I developed my software around their architecture, so it would be really easy to deploy my stuff on Heroku.

    My basic idea is that back-ends for software are very small things. They just move data out of the app, which runs in the browser on the user's desktop, to a storage place, and back out later. That's all the server has to do.

    I designed it so that each app has its own server. That way if one of my apps got really popular, it wouldn't interfere with the others. This is ideal for developers, to have scaling be a totally fluid thing. That's why you want to chop the pieces as small as you can. Rather than try to host ten apps on a server, give each app their own server, no matter how small and insignificant. It's a design that can only work for a system like Heroku. It was really a breakthrough.

    But, they changed their pricing so as to really discourage this architecture. It's possible they weren't even aware how their change would affect us. I didn't hide the design, I wrote lots of posts about it. I emailed with people there. I even met with their CEO on a trip to California to talk about how I saw their service and to learn how they were planning to evolve it. I kept emailing them asking if they were sure this is the deal and thanking them for their generosity.

    But once they changed, I had to change. It no longer made sense to have lots of individual servers, one for each app. With the new economics. I'd have to bundle them up, the old way, where one server is running N apps. And if one gets successful, there's a bunch of manual work to set things up so it gets more resources without slowing the other apps down. Scaling is no longer a matter of sliding a slider on a browser interface. I wish it were.

    Anyway it's up to them to decide how to price their service. And it was up to me to migrate when they changed their pricing. It was a pretty hellacious weekend here, lots of stress, but it's not bad. It's kind of like a basketball player has to get really intense to make it through the playoffs. This was a very high wire balancing act. But it was a good thing to do, now I have a much better understanding of what I've done. I've moved code I wrote when I was a total newcomer to Node.js. It wasn't a horrible experience!

    And now I'm back on solid ground (knock wood, praise Murphy) I look forward to getting back to the stuff I really love, making new idea processing software that networks people in incredible new ways!

    PS: A little more perspective in a post on my liveblog.

    May 12, 2015 05:54 PM

    May 11, 2015

    Dave Winer

    Hello Fargo users

    This is a quick heads-up, there were major changes in the servers over the weekend. But if all went well, you should see no changes in the performance of Fargo.

    Basically, I moved the back-end, Fargo Publisher, from Heroku to a server in Amazon's cloud. This is a lot like the move that Berkman made a few years back when they hoisted their building on Mass Ave and moved it a few blocks away, and re-planted it. It's as if all the scholars in the offices just went home for the weekend and came back to find their offices in a new location. Hopefully all the electric is properly hooked up, and the Internet, the bathrooms. Business as usual, they say. We hope.

    Knock wood, praise Murphy, I am not a lawyer.

    Dave

    PS: There will be a new version of Fargo Publisher, shortly, if everything works. Haaha.

    May 11, 2015 12:52 PM

    Lambda the Ultimate

    FLOPS 2016, promoting cross-fertilization across the whole declarative programming and theory and practice

    LtU generally is not appropriate venue for posting call-for-papers, but there have been exceptions, if the CFP has an exceptionally wide appeal. Hopefully FLOPS 2016 might qualify.
    http://www.info.kochi-tech.ac.jp/FLOPS2016/

    FLOPS has been established to promote cooperation between logic and functional programmers, hence the name. This year we have taken the name exceptionally seriously, to cover the whole extent of declarative programming, which also includes program transformation, re-writing, and extracting programs from proofs of their correctness. There is another strong emphasis: on cross-fertilization among people developing theory, writing tools and language systems using that theory, and the users of these tools. We specifically ask the authors to make their papers understandable by the wide audience of declarative programmers and researchers.

    As you can see from the Program Committee list, the members have done first-rate theoretic work, and are also known for their languages, tools and libraries. PC will appreciate the good practical work. Incidentally, there is a special category, ``System Descriptions'' that FLOPS has always been known for. We really want to have more submissions in that category.

    One can see even on LtU that there is some rift between theoreticians and practitioners: Sean McDermid messages come to mind. He does have many good points. We really hope that FLOPS will help repair this rift.

    May 11, 2015 07:16 AM

    May 10, 2015

    Mark Bernstein

    “If We Procure Not To Ourselves More Woe”

    The theme of this dinner was borrowed from Paradise Lost. This week, my car nearly gave out, my hearing aid nearly gave out, and now my iPhone won’t charge: it was time for a low pressure meal. The straightforward recipe for a low-pressure meal is to get a holiday joint and roast it, but that seemed to dishonor all the expenses just incurred in order to delay even great expenses. So let it be a challenge.

    • “Gin” juniper Grissini ❧ Gougeres ❧ Hard Cider on the porch
    • Braised fennel, absinthe butter, salmon roe ❧ more cider
    • Homemade agnolotti stuffed with sweet potato and bacon, in fennel broth ❧ White Bordeaux
    • Duck breast, smoked over alder and tea ❧ Vaqueyras
    • Chicken legs braised in hard cider ❧ Tempranillo
    • Salad
    • Cake

    They work got off on an instructive foot as I carefully weighed my pasta eggs sans shells to get the flour to three significant figures, and then added 3:1 flour when everyone knows pasta requires 3:2. So I had precisely twice as much flour as I ought, and naturally this worked not well, or at all. Much mystery ensued, followed inevitably by a double batch of pasta and more fresh fettuccine and strozzapreti than we really need.

    Thanks to the pasta production, I never did figure out great names for the courses. But we’ve got the apple thing going in the appetizers and the chicken legs, the lcorice-tinged fennel in the first course (“Black it stood as night, Fierce as ten furies, terrible as hell, And shook a dreadful dart.”), and of course it’s bathed in seas of fire. The agnolotti are allegedly papal miters, they’re also filled with something orange. The duck breast is smoked,

    May 10, 2015 08:29 PM

    Tim Ferriss

    The_Tim_Ferriss_Experiment__Gambling___Trailer___Tim_Ferriss_-_YouTube

    The_Tim_Ferriss_Experiment__Gambling___Trailer___Tim_Ferriss_-_YouTube

    In this post, I’ll show you how Phil Gordon trained me in 5 days to have a fighting chance against pro poker players. Here’s the video teaser.

    Before we filmed the experience for The Tim Ferriss Experiment (currently the #1 TV Season on iTunes), I had never played a hand of poker.

    Phil’s crash course purposefully did not cover all the bases. It couldn’t. We didn’t have the time.

    Instead, his program (and this post) will show how a gambling idiot (me) can magnify strengths and cover weaknesses to an absurd degree…at least for a few hours in order to win real cash.

    Let’s be clear: I am not a good poker player, and perhaps you aren’t either. But that doesn’t mean you can’t win.

    If you understand a few principles and follow them religiously, Lady Luck (and strategic aggression) might smile upon you. Especially if you learn how to leverage “short-stack strategy” or “heads-up play,” both of which I’ll explain.

    This post has three parts:

    – My video explanation – This is the actual video I sent to TV post-production. I sent similar videos for all 13 episodes (parkour, the dating game, building a business, etc.) right after we finished each week. This is nuts and bolts of how Phil helped me pull off miracles.

    – My real notes from my notebook – These are PDFs of the notes I explain in the aforementioned video. For a novice or intermediate, they are only really useful once you’ve watched the video.

    – Phil’s one-page cheatsheet – ‘Nuff said.

    – The full TV episode (preview and links)

    Let’s get started on the how-to…

    The Video Explanation – The Real Nuts and Bolts

    I mention “VO” a few times, which stands for “voice over.” To see more of the notebook text, you can expand to full screen.

    My Poker Notes (Plus Some “Escape and Evasion” Notes)

    How to Play Poker – The Tim Ferriss Experiment by tferriss

    Phil’s Cheatsheet

    Poker Cheatsheet – From Pro Phil Gordon by tferriss

    The TV Episode

    Here’s the full episode (and 12 others) — check it out! If you found any of the above interesting, I think you’ll love it.

    by Tim Ferriss at May 10, 2015 07:10 AM

    May 09, 2015

    Lambda the Ultimate

    Pycket: A Tracing JIT For a Functional Language

    Pycket: A Tracing JIT For a Functional Language
    Spenser Bauman, Carl Friedrich Bolz, Robert Hirschfeld, Vasily Krilichev, Tobias Pape, Jeremy Siek, and Sam Tobin-Hochstadt
    2015

    We present Pycket, a high-performance tracing JIT compiler for Racket. Pycket supports a wide variety of the sophisticated features in Racket such as contracts, continuations, classes, structures, dynamic binding, and more. On average, over a standard suite of benchmarks, Pycket outperforms existing compilers, both Racket’s JIT and other highly-optimizing Scheme compilers. Further, Pycket provides much better performance for proxies than existing systems, dramatically reducing the overhead of contracts and gradual typing. We validate this claim with performance evaluation on multiple existing benchmark suites.

    The Pycket implementation is of independent interest as an application of the RPython meta-tracing framework (originally created for PyPy), which automatically generates tracing JIT compilers from interpreters. Prior work on meta-tracing focuses on bytecode interpreters, whereas Pycket is a high-level interpreter based on the CEK abstract machine and operates directly on abstract syntax trees. Pycket supports proper tail calls and first-class continuations. In the setting of a functional language, where recursion and higher-order functions are more prevalent than explicit loops, the most significant performance challenge for a tracing JIT is identifying which control flows constitute a loop -- we discuss two strategies for identifying loops and measure their impact.

    May 09, 2015 05:53 PM

    The Unison Programming Platform

    Unison - a next-generation programming platform, by Paul Chiusano:

    • Programs are edited in a (browser-based) semantic editor which guarantees programs are well-formed and typecheck by construction
    • The codebase is a purely functional data structure
    • The program is a UI, and UI interaction is programming
    • Persistent data sources must be accessible via a high-level, typed API

    An interesting project mentioned in a comment a few weeks ago, it now has its own website and a more descriptive abstract overview explaining it's core premises.

    Previous posts on Paul's blog are also of interest, and some feature videos demonstrating some aspects of Unison.

    May 09, 2015 12:31 PM

    Decyphering Glyph

    Separate your Fakes and your Inspectors

    When you are writing unit tests, you will commonly need to write duplicate implementations of your dependencies to test against systems which do external communication or otherwise manipulate state that you can’t inspect. In other words, test fakes. However, a “test fake” is just one half of the component that you’re building: you’re also generally building a test inspector.

    As an example, let’s consider the case of this record-writing interface that we may need to interact with.

    1
    2
    3
    4
    5
    6
    class RecordWriter(object):
        def write_record(self, record):
            "..."
    
        def close(self):
            "..."
    

    This is a pretty simple interface; it can write out a record, and it can be closed.

    Faking it out is similarly easy:

    1
    2
    3
    4
    5
    class FakeRecordWriter(object):
        def write_record(self, record):
            pass
        def close(self):
            pass
    

    But this fake record writer isn’t very useful. It’s a simple stub; if our application writes any interesting records out, we won’t know about it. If it closes the record writer, we won’t know.

    The conventional way to correct this problem, of course, is to start tracking some state, so we can assert about it:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    class FakeRecordWriter(object):
        def __init__(self):
            self.records = []
            self.closed = False
    
        def write_record(self, record):
            if self.closed:
                raise IOError("cannot write; writer is closed")
            self.records.append(record)
    
        def close(self):
            if self.closed:
                raise IOError("cannot close; writer is closed")
            self.closed = True
    

    This is a very common pattern in test code. However, it’s an antipattern.

    We have exposed 2 additional, apparently public attributes to application code: .records and .closed. Our original RecordWriter interface didn’t have either of those. Since these attributes are public, someone working on the application code could easily, inadvertently access them. Although it’s unlikely that an application author would think that they could read records from a record writer by accessing .records, it’s plausible that they might add a check of .closed before calling .close(), to make sure they won’t get an exception. Such a mistake might happen because their IDE auto-suggested the completion, for example.

    The resolution for this antipattern is to have a separate “fake” object, exposing only the public attributes that are also on the object being faked, and an “inspector” object, which exposes only the functionality useful to the test.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    class WriterState(object):
        def __init__(self):
            self.records = []
            self.closed = False
    
        def raise_if_closed(self):
            if self.closed:
                raise ValueError("already closed")
    
    
    class _FakeRecordWriter(object):
        def __init__(self, writer_state):
            self._state = writer_state
    
        def write_record(self, record):
            self._state.raise_if_closed()
            self._state.records.append(record)
    
        def close(self):
            self._state.raise_if_closed()
            self._state.closed = True
    
    
    def create_fake_writer():
        state = WriterState()
        return state, _FakeRecordWriter(state)
    

    In this refactored example, we now have a top-level entry point of create_fake_writer, which always creates a pair of WriterState and thing-which-is-like-a-RecordWriter. The type of _FakeRecordWriter can now be private, because it’s no longer interesting on its own; it exposes nothing beyond the methods it’s trying to fake.

    Whenever you’re writing test fakes, consider writing them like this, to ensure that you can hand application code the application-facing half of your fake, and test code the test-facing half of the fake, and not get them mixed up.

    by Glyph at May 09, 2015 06:52 AM

    May 08, 2015

    Alarming Development

    Flux is good enough

    The reaction to my latest work [Two-way Dataflow] has been distinctly underwhelming. My diagnosis: I’ve solved a problem most people aren’t aware they have, and it comes at the steep price of replacing the conventional tech stack. Facebook has a cheaper solution: Flux. I have to give them credit for taking the problem seriously (unlike many of the reactive programming enthusiasts) and coming up with a pragmatic solution that just adds another layer to the stack. That’s what programmers want, not a fundamental solution in a new programming paradigm. It is obvious that we can’t keep growing the stack forever but no one wants to deal with it now. Especially computer scientists (don’t get me started).

    I think I need to shift focus to end-users and non-programmers. I’ve avoided that because I want to prove that we can dramatically simplify real large-scale programming — simplifying simple problems is not so convincing. But replacing the whole stack is just too hard to do all at once and all by myself, and only doing it on small examples is not convincing either. End-user programming could be a way to get started and get users and (especially) have collaborators. Industrial strength programming would come later, but at least I now have a sketch of how it should look. Building something real would be such a refreshing change from the last decade of thought experiments. I’m excited by the prospect of once again shipping buggy code and having irate users and getting into fights with my colleagues. That’s life.

    by Jonathan Edwards at May 08, 2015 04:48 PM

    Ian Bicking

    A Product Journal: As We May Discuss

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

    In a presentation The Revolution Will Be Annotated, Dan Whaley begins with a very high-minded justification for annotation: that it is essential for our existence that we act wisely, and that we can achieve that through deliberation, and that annotation is a building block for open deliberation.

    In response, let me digress wildly, and talk about elementary school.

    It is common to cite large class sizes as a problem, and small class sizes as an opportunity to improve education. But there is debate about whether class size really matters; it certainly correlates with general privilege, but does it cause improvements? At the same time I’ve become much more familiar with the Montessori philosophy of education, and one of the surprising features is a relatively large ideal classroom size, in the 30s. And why? Dr. Montessori had positive theories about age mixture, community size, the culture of the classroom, and so forth – but I’ll add what I think is a Montessori-style reason it’s okay: it’s okay to have less teachers because learning isn’t caused by teachers. Learning is ultimately an internal process, an assimilation and construction of knowledge. Your environment can aid in that process, but the cause is still internal.

    I share Dan’s enthusiasm about the importance of dialog to our collective wisdom. But I see dialog as supportive of personal growth, not of collective wisdom – our collective wisdom will increase as we individually grow.

    Dan cites one problem with rationalism: we are good at constructing rational arguments to support what we already believed. The annotation remedy is to suppose that what we conveniently leave out of our arguments can be applied later by a diverse set of participants. Annotation makes it harder to make use of fallacies, harder to make use of limited narratives, because the annotator can add them back in.

    I will cite another problem with rationalism: even a good rational argument is not good at convincing anyone of anything. A good rational argument is like teaching arithmetic by telling someone that 39301+9402=48703. Maybe even writing out the steps used to make that calculation. You can lay that in front of someone, you can lay a hundred similar examples in front of someone, and they will not learn arithmetic. If the person is disinterested they can just trust you – though then it hardly matters if you were right – but if they are interested I believe that the process of construction is necessary. You have to solve your own math problems to learn math.

    Annotation is interesting because it gives another avenue for people to publish their beliefs and enter into dialog. But a global overlay of annotation is not a particularly appealing medium. It’s not a place to come to understanding, to practice the construction of ideas. And I think our collective wisdom depends on an incredible volume of discussion, not just on an increased quality, because you can’t get large scale individual growth without large scale discussion.

    I see two features in the typical annotation system: one feature is the ability to talk about other things, with high fidelity. URLs have been a great start to being able to talk about things on the web, but they have some limits. The second feature is the ability to view these annotations implicitly. The second feature is the one I’ve seldom found interesting as a reader, and disagree with as a goal. Viewing annotations as a universal overlay of commentary asks too much of the annotations, provides too little to me as the reader, and I think is an attempt to pursue a kind of rational universal truth that I find little value in. It’s a sense that documents are there to teach us, and annotations make those documents even better teachers.

    PageShot takes a different approach: it gives anyone the ability to talk about anything on the web, but each time you do that you create a new resource, your discussion lives at your document. You can write your commentary for a specific audience, and then give it to that audience, without having your intended audience confused with the original author’s intended audience. You can throw away what you have to say. The person who clicks on your link did it to see what you said, they aren’t some passerby. You can say implicitly through highlighting, here is what I thought was interesting. But PageShot applies no universality to what you say, it is a tool only of dialog. This makes PageShot more modest, but intentionally so.

    by Ian Bicking at May 08, 2015 05:00 AM

    May 07, 2015

    Giles Bowkett

    My Skepticism Re: Uber Continues Unabated

    Previously: What If Uber's Just A Terrible Business?

    There's a City Paper article online where the author worked as an Uber driver and talks about how it works, especially the practical, can-I-make-a-living economics of it.

    This web site is so awful that you apparently have to open up Developer Tools to read it, and execute this line of code in the console:

    function contentRefresh(){}

    But the content's great. Spoiler alert: drivers can't make money. Uber's pricing strategy matches my fear that they're using venture capital to buy off entire cities by flooding them with amazing deals which seem like they can't last forever — because they can't — while building up the economic equivalent of a mountain of legacy code which collapses into an utter shitpile the day somebody buys the company. Only in this case, the acquirer's probably a whole bunch of people buying stock.

    But what really kicked my skepticism into high gear was this excerpt:
    TechCrunch broke the news that Uber was building a huge robotics lab in Pittsburgh, partnering with Carnegie Mellon University to "kickstart autonomous taxi fleet development," according to a company source.

    Travis Kalanick, the CEO and founder of Uber, said at a conference last year that he'd replace human Uber drivers with a fleet of self-driving cars in a second...

    You can get a glimpse of his vision in a fascinating paper from Columbia University, which did several case studies on what a future with driverless cars would look like — apparently, like Uber crossed with Minority Report. And this could be coming as soon as 2020, according to both Tesla and Google, both of which are also heavily invested in the race to be a player in this huge future market.

    In this world, the paper projects, fewer and fewer people own private cars, because it doesn’t make financial sense. Cars run on electricty, and most are much smaller, designed to carry only one or two people. The auto industry experiences a temporary boom, but then demand drops off a cliff. By around 2040, driverless cars are a majority on American roads. The number of cars drops by more than 90%, as do fuel consumption and emissions. Car accidents and traffic are nearly nonexistent.
    So, a little context.

    First, I'm a programmer, and like any programmer, I know most people's code sucks.



    Second, in the late 1990s, the whole sales pitch for why young people should build the Web in the first place was that it would democratize media, eliminate the shallow hegemony of things like NBC and CNN, and replace it with in-depth, nuanced debate, because everything would be better once it revolved around the written word.

    This is what we got instead.


    Take the "which hormone-crazed moose are you?" quiz!

    Maybe you don't remember the 1990s. Maybe you weren't there. Do you remember Heartbleed? Because that was last year. Do you remember the day the whole Internet discovered that none of our security had ever been working, and how relieved we all were when the entire rest of the world failed to notice, and civilization didn't collapse?

    One mistake that stupid in one technology underpinning robot cars, and the entire world will notice.

    I would have bought "by around 2040, driverless cars are a majority on American roads." It's entirely possible. But "car accidents and traffic are nearly nonexistent" makes the whole thing stink of bullshit so much that nothing can redeem those paragraphs now.

    Say you want to replace trucks with robots. This is a worthy goal, and in fact I know of a cool startup headed in a similar direction. There are probably many. But keep in mind that long-haul cargo trucks are often operated by poorly-educated individuals driving under the influence of crystal meth. Your startup does not need to achieve a "nearly nonexistent" accident rate to succeed. It only needs to outperform poorly-educated individuals who are driving under the influence of crystal meth.

    Also, cars are only sized for people because people make up the majority of vehicle cargo, and the entirety of vehicle operators. But if your vehicle's operator size is measured in millimeters, because it's a piece of silicon, then you suddenly only need to consider the size of your cargo. So, we're supposed to believe that traffic will become less of a problem, in a situation where there now exist compelling financial incentives to build extremely large vehicles, extremely tiny vehicles, and vehicles of every size in between?


    This is a car.


    These are also cars.

    And keep in mind you can now use automated vehicles to transport anything.



    And that cars can now have legs.



    So this is what we're supposed to believe:

    We're going to add an incredible level of variety to the sizes, shapes, and purposes of vehicles on the road, and in the skies. We're going to pilot them with software, not people, because software's cheaper and faster.

    But this new, incredible diversity in size and purpose will not affect traffic patterns negatively. The software will not have any bugs, and if the software ever somehow does have a bug, those bugs will never be catastrophic, even though the software could be piloting any of an incredible range of possible vehicles, at any of an incredible range of possible speeds, while carrying any of an incredible range of possible cargo types — including human beings, nuclear waste, or angry bees.

    Are you fucking kidding me?


    The angry bees thing really happened. Fourteen million bees were released in a truck crash; the driver was stung countless times.

    Here's a more likely scenario: these fuckers are going to crash a drone full of angry bees into a robot semi transporting nuclear waste, and then the whole thing is going to spill onto a fleet of robot Ubers, smashing the cars, killing everyone inside, and then turning the corpses into goddamn bee zombies with nuclear bee powers.

    DON'T SAY I DIDN'T WARN YOU.

    It's entirely possible the authors of this white paper were fools, rather than liars, but what they're saying is certainly false, one way or the other. There do not exist sufficient financial incentives for a perfect accident rate. An accident rate that keeps lawsuits from eating up profits is the most reasonable thing to expect. The higher those profits are, the more accidents they can subsidize. And that's what we can expect from the people whose code works.

    But most people's code doesn't work. Most people's code almost makes sense, but not quite. So most software in very widespread use is doing things which almost make sense, but not quite, at scale.

    Anyway, this report wasn't sponsored by Uber. But here's the billionth thing associated with Uber which is making my bullshit detector scream bloody murder. That's all I'm saying.

    By the way, I love robots. I went to RobotsConf and piloted a drone with Node.js, and I loved every second of it. But I'm pretty sure I also crashed it into somebody's head at least twice.

    by Giles Bowkett (noreply@blogger.com) at May 07, 2015 10:46 AM

    Fog Creek

    Remote Working Tips – Interview with Wade Foster

    .little {font-size: 75%}
    Remote Working Tips – Interview with Wade Foster

    Looking for audio only? Listen on

    We’ve interviewed Wade Foster, CEO of Zapier and author of ‘The Ultimate Guide to Remote Work‘. We discuss his experience with remote working and running a distributed company. We go into the tools, processes and hiring practices necessary to succeed with remote working, as well as some of the drawbacks and challenges that come along with it.

    Content and Timings

    • Introduction (0:00)
    • About Wade and Zapier (0:20)
    • Remote Working at Zapier (1:17)
    • Successful Remote Working Processes (4:07)
    • Tools for Remote Working (5:25)
    • Characteristics of the Best Remote Employees (6:47)
    • The Drawbacks of Remote Working (11:27)
    • Recommended Resources (14:00)

    Transcript

    Introduction

    Derrick:
    Wade Foster is Co-founder & CEO at Zapier, a YC alum company founded in 2011. Zapier is a distributed company, with 25 employees spread around the world. Wade wrote the book, ‘The Ultimate Guide to Remote Work’, in which he provides advice from his experience with remote working. Welcome Wade, why don’t you share a bit about yourself?

    About Wade and Zapier

    Wade:
    I’m one of the three co-founders and the CEO here at Zapier. We started it about a little over three years ago now really just to help hook up apps for small businesses. There are so many apps out there today. We hook into over 400 and we’re not even close to having support for all of them. It allows non-programmers, non-technical folks to just do simple automation between apps we normally use.

    For example, if you use a tool like Trello which listeners are probably aware of, you can do things like create a recurring Trello card in there or you can email in cards to create Trello cards. Or you could say when someone fills out this Wufoo form, it should automatically create a card in Trello. It just hooks up into all these different systems, so that you can make Trello work a lot nicer with things.

    It doesn’t just work with Trello. It works with all the tools that you’re probably familiar with like Dropbox, Gmail, MailChimp, SalesForce, the list goes on. That’s kind of the gist of Zapier.

    Remote Working at Zapier

    Derrick:
    Zapier has always been a distributed company from the outset. Why is this, and how has it worked for you whilst you’ve grown?

    Wade:
    So, when we started, Brian, Mike and I all lived in the same place. We were in Columbia, Missouri, but we still had day jobs. Mike was still in school. Zapier started as a side project. It just doesn’t make sense when you have limited time with a side project, it doesn’t make sense like, “Let’s all wait until we’re all hanging out in the same room looking right at each other to work on this project.” We said the thing that just makes sense is when we have time, let’s try and make as much progress as we could. We’d do that at nights from our homes, from coffee shops, from the library. Sometimes we’d meet together and work on something or at each other’s houses or whatever.

    That was definitely the exception to the rule. It was like that for the first nine months or so. Then we got into YC and we actually for the only time in Zapier’s history, the three of us worked in the same place together. After YC ended, Mike, we’d moved out to California for YC and then after it ended, Mike moved back to Missouri because his then girlfriend, now wife was in law school and he wanted to be with her. Then we hired a guy to do support in Chicago, so it was kind of like ‘hey, this just seems like the way we’re going to do things’. Really, it’s kind of like this remote, distributed asynchronous workplace was just kind of baked in from the beginning for us.

    So I think it’s definitely allowed us to hire people that we’ve worked with. In the beginning, we hired people that we worked with before. That we knew were good. They didn’t necessarily live in the same place. We were able to hire good people and there was kind of like this built in trust where we didn’t have to go recruit people from scratch who we had never worked with, we weren’t sure if it’s going to work out or not, which would have been tough for us because in California we had just moved there. We didn’t know anybody really. It felt like taking a huge chance on people.

    Early on we got to work with people that we knew were going to be great because we had already worked with them and they were great. It didn’t matter where they lived. Then as we’ve grown it’s certainly been a benefit to be able to add on. We started hiring people that we don’t know. We have a standard interview process. Things like that. It works out really great because we get to work with people who are super smart all over the world. It helps with just really kind of random silly stuff too, like our support team in spread all over the world, so we’re pretty close to having 24 hour support, which is something that very little tech teams have.

    From a DevOps perspective we have people who are around the world, so like if the site’s having issues, you don’t have to wake up at 3AM to fix it because it’s someone else’s lunchtime and they can help fix it. There’s this nice convenience when you have people when you can set your stuff up to where everyone is working all over the world and get to use the timezone diversity kind of to your advantage.

    Successful Remote Working Processes

    Derrick:
    How has working remotely impacted the processes you use to get work done?

    Wade:
    I think process is actually really important. A lot of early companies kind of think that hinders their creativity or whatever, but I think for a remote team it’s really important because and if you’re co-located you can get away with not having it because you can always just yell across the room and say, “Hey dude, this thing or whatever.”

    In a remote team, people aren’t in the same time zone, so they may not be able to have access to you right at that right time. That means you need to make sure that documentation is really, really good. From the outset you’re making sure that the documentation’s good, you’re making sure that information is available, so having public Dropbox accounts, having an internal wiki, having Slack or HipChat or something so that there’s these public logs of stuff that’s going on. Your code is well documented. All that stuff is really important because it allows people to get their jobs done in the absence of help being around right that very instant.

    That’s why I think process is really important, it really provides the groundwork for people to self-serve, do their job even if they don’t necessarily have a person there to answer a question for them. They do have information there that they can go do some research and figure out the answer themselves.

    Tools for Remote Working

    Derrick:
    What tools do you think are key to supporting remote work?

    Wade:
    So there’s a handful of tools that we use. I don’t think the actual tool is as important as the category of tool. Like you probably need one of these tools in your tool bag.

    For instance we use Slack for our group chat. You could just as easily use HipChat or Campfire or something. They’re both great as well. We use Trello for lightweight project management. We have an internal blog/Reddit style tool that we call Async that we built that we use to replace internal emails. There’s really no internal email at Zapier to speak of. Then we use GitHub for our code hosting and issue management. Then Help Scout is for support and other external email I guess that comes into Zapier. Really that’s all we use on the tools side of things.

    Occasionally we’re on Google Hangout or GoToMeeting or whatever. Not much other than that. We bake in other tools like from here to there. Certain individuals will use a different tool for something. They might use Zapier to pull it into the main tools. However we try and keep it pretty light on tools because that’s just one less thing for people. Oh, HackPad, that’s another one that we use all the time. We use that for all our internal documentation and it’s pretty slick.

    Characteristics of the Best Remote Employees

    Derrick:
    Zapier is growing quickly, what should people consider when hiring remote employees?

    Wade:
    I think probably the most important thing with remote work is that you’re able to trust these people. Even if you don’t know someone, do you feel comfortable with them enough to give them just free reign? Do you trust that if I can’t see you, I know that you’re going to be getting stuff done? What that means is that the types of people that I feel like even though I don’t know them, that I can trust them are ones that come in and they show like whether in their past projects that they’ve taken a lot of initiative. Maybe that means that they’ve done side projects or they’ve gone above and beyond current work. Somehow they’ve shown I’m not just going to do the lowest bar. I’m going to do extra stuff on the side.

    That’s the kind of person who just in the absence of I guess direction is just going to find stuff to do and find interesting problems and tackle them. I think that’s really key. The second thing is how well do they communicate via written words? Are their email correspondence with us early on in the conversation, are they being crystal clear? Do they know how to schedule a meeting in different timezones? It’s kind of a silly thing to know, but if you screw that up, that’s kind of shows that you’re not really hooked into how this sort of stuff will work.

    People who have done freelance work or contract work are also pretty good because they’ve had to work with… Set their own schedules. They’ve had to deal with clients externally. They’ve had to deliver expectations to people. There’s a lot more knowns with those types of people. Those are some things that I think are pretty important. Then of course they need to have all the other stuff that a great teammate would have, right? You want someone that’s not a jerk. You want someone that can walk a mile in somebody else’s shoes. Who’s not going to have a huge ego. That stuff that you would want whether you work remotely or not. On top of that you really want to have the good communication skills and you want them to have to have the initiative to go above and beyond and not have to wait for instructions I guess.

    One of the things I think is really key too for new teammates is that they need to have an outside social group. If you’re the type of person that’s used to your work colleagues being also your social colleagues, that’s probably not going to be… Remote work is probably not going to be a great fit for you. You want to be able to have family or friends or something else in your physical world so that when work ends, you can actually go out and socialize with a real human being from time to time. I think that’s pretty important to help mitigate, like feeling too remote or isolated from the rest of the world. You want to make sure that you’ve got that outside network that’s not tied to your job.

    Derrick:
    Company culture is key to the continued success of any company. How can you build a great working culture whilst working remotely?

    Wade:
    Tools like Slack and HipChat make it pretty easy. A lot of our, we have fun with memes and gifs and stuff inside of Slack. It takes on, you see how culture evolves inside of internet communities, like Reddits, sub-Reddits or Hacker News or some other forum that you may be a part of. You’ve seen how culture develops.

    It’s kind of similar to that in a remote team. You have to make sure to foster that a little bit. You make sure that new folks know the rules of the road about ‘hey, it’s kind of okay to be a little edgy’ or maybe we’re not a little edgy with how we do stuff inside of our Slack room or whatever. That kind of gets people to kind of know a little bit where the boundaries are without having to be too strict about it.

    Then of course we also get together in person a couple times a year. Twice a year we fly everyone out to some location and do a retreat. You get to spend time, see people face to face and you realize ‘hey, this person is the person that I work with and they’re a real human being. They exist in the real world somehow’, which is like it’s pretty important for a team when that’s not a normal occurrence.

    It’s actually pretty special too. I find it a lot more exciting to see my teammates at Zapier than when I worked in a co-located facility. It’s a more rare instance. The fact that you get to see someone. I don’t know. It’s a little more exciting. That makes the culture, I guess those face to face meetings help really I gue