Smart Disorganized (incoming)

March 10, 2014

Dave Winer

Change coming in RSS feed

At some point, soon, the Scripting News feed will have items without titles. The body of these items are in their descriptions, as explained in the RSS 2.0 spec.

An item may represent a "story" -- much like a story in a newspaper or magazine; if so its description is a synopsis of the story, and the link points to the full story. An item may also be complete in itself, if so, the description contains the text (entity-encoded HTML is allowed; see examples), and the link and title may be omitted. All elements of an item are optional, however at least one of title or description must be present.

How we got here

Scripting News started in this format, and Frontier News before it.

Manila, the first CMS to produce RSS feeds, supported title-less items in feeds.

In 2006, Google Reader had gained dominance, and didn't support title-less posts. As a result Scripting News didn't look great in their reader, so there was pressure on me to change. At the same time Twitter came along, and fully adopted the idea of posts without titles, so I split my blogging into two pieces, one on Twitter and my linkblog, and the other, just the essays that appeared on Scripting News before. Scripting News, the first blog to have a feed, conformed to Google Reader's omission (a kind way of putting it) or bug (more fair). Scripting News became Google's idea of what a blog is. Ugh.

I felt this was okay as long as Twitter held promise for being a revolutionary Internet-scale notification service with a powerful API. But they've backed off that. Their service hasn't improved in a long time. I didn't realize how much I missed doing the intermediate-length posts until I started using Facebook regularly. But stuff I post there has no lasting value. So I need a better place for that kind of writing, so why not use my own blog? Of course that's the right answer.

Undoing the mistake

I'm undoing the mistake I made in 2006. And that means you may either find that your RSS reader supports my feed, or it doesn't. I'm not going to let them hold me back. If you can't read my feed in their tools, then you can switch to one that works properly, read the site in a web browser, or don't read it at all.

I'm sorry it has to be this way, but reader developers have been deciding arbitrarily not to support an important part of the RSS standard. I want to use the feature, I was using it long before any of them existed, and it's easy for them to support. Just a little bit of thinking and a little bit of coding.

March 10, 2014 01:32 AM

March 07, 2014


Comrade Ogilvy Nakamoto.

From the ‘Dear Idiots, ‘1984′ is Not a How-To Guide’ department:

He might turn the speech into the usual denunciation of traitors and thought-criminals, but that was a little too obvious, while to invent a victory at the front, or some triumph of over-production in the Ninth Three-Year Plan, might complicate the records too much. What was needed was a piece of pure fantasy. Suddenly there sprang into his mind, ready made as it were, the image of a certain Comrade Ogilvy, who had recently died in battle, in heroic circumstances. There were occasions when Big Brother devoted his Order for the Day to commemorating some humble, rank-and-file Party member whose life and death he held up as an example worthy to be followed. Today he should commemorate Comrade Ogilvy. It was true that there was no such person as Comrade Ogilvy, but a few lines of print and a couple of faked photographs would soon bring him into existence.

Winston thought for a moment, then pulled the speakwrite towards him and began dictating in Big Brother’s familiar style: a style at once military and pedantic, and, because of a trick of asking questions and then promptly answering them (‘What lessons do we learn from this fact, comrades? The lesson — which is also one of the fundamental principles of Ingsoc — that,’ etc., etc.), easy to imitate.

At the age of three Comrade Ogilvy had refused all toys except a drum, a sub-machine gun, and a model helicopter. At six — a year early, by a special relaxation of the rules — he had joined the Spies, at nine he had been a troop leader. At eleven he had denounced his uncle to the Thought Police after overhearing a conversation which appeared to him to have criminal tendencies. At seventeen he had been a district organizer of the Junior Anti-Sex League. At nineteen he had designed a hand-grenade which had been adopted by the Ministry of Peace and which, at its first trial, had killed thirty-one Eurasian prisoners in one burst. At twenty-three he had perished in action. Pursued by enemy jet planes while flying over the Indian Ocean with important despatches, he had weighted his body with his machine gun and leapt out of the helicopter into deep water, despatches and all — an end, said Big Brother, which it was impossible to contemplate without feelings of envy. Big Brother added a few remarks on the purity and single-mindedness of Comrade Ogilvy’s life. He was a total abstainer and a nonsmoker, had no recreations except a daily hour in the gymnasium, and had taken a vow of celibacy, believing marriage and the care of a family to be incompatible with a twenty-four-hour-a-day devotion to duty. He had no subjects of conversation except the principles of Ingsoc, and no aim in life except the defeat of the Eurasian enemy and the hunting-down of spies, saboteurs, thought-criminals, and traitors generally.

Winston debated with himself whether to award Comrade Ogilvy the Order of Conspicuous Merit: in the end he decided against it because of the unnecessary cross-referencing that it would entail.

… Comrade Ogilvy, unimagined an hour ago, was now a fact. It struck him as curious that you could create dead men but not living ones. Comrade Ogilvy, who had never existed in the present, now existed in the past, and when once the act of forgery was forgotten, he would exist just as authentically, and upon the same evidence, as Charlemagne or Julius Caesar.’

‘1984.’ George Orwell.

‘He’s wearing a rumpled T-shirt, old blue jeans and white gym socks, without shoes, like he has left the house in a hurry. His hair is unkempt, and he has the thousand-mile stare of someone who has gone weeks without sleep. …

Nakamoto did not get along with his stepfather, but his aptitude for math and science was evident from an early age, says Arthur, who also notes, “He is fickle and has very weird hobbies.”

Just after graduating college, Nakamoto went to work on defense and electronics communications for Hughes Aircraft in southern California. “That was just the beginning,” says Arthur, who also worked at Hughes. “He is the only person I have ever known to show up for a job interview and tell the interviewer he’s an idiot – and then prove it.” …

Two weeks before our meeting in Temple City, I struck up an email correspondence with Satoshi Nakamoto, mostly discussing his interest in upgrading and modifying model steam trains with computer-aided design technologies. I obtained Nakamoto’s email through a company he buys model trains from.

He has been buying train parts from Japan and England since he was a teenager, saying, “I do machining myself, manual lathe, mill, surface grinders.”

The process also requires a good amount of math, something at which Nakamoto – and his entire family – excels. The eldest of three brothers who all work in engineering and technical fields, Nakamoto graduated from California State Polytechnic University in Pomona, Calif., with a degree in physics. But unlike his brothers, his circuitous career path is very hard to trace. …

Dorian S. Nakamoto’s use of English, she says, was likely influenced by his lifelong interest in collecting model trains, many of which he imported from England as a teenager while he was still learning English.

Mitchell suspects Nakamoto’s initial interest in creating a digital currency that could be used anywhere in the world may have stemmed from his frustration with bank fees and high exchange rates when he was sending international wires to England to buy model trains. “He would always complain about that,” she says. “I would not say he writes flawless English. He will pick up words and mix the spellings.” …

“He is very wary of government interference in general,” she says. “When I was little, there was a game we used to play. He would say, ‘Pretend the government agencies are coming after you.’ And I would hide in the closet.” ‘

‘The Face Behind Bitcoin.’ Leah McGrath Goodman. (Newsweek.)

by Stanislav at March 07, 2014 06:50 PM

Dave Winer

My templates are open source

As I was working on Fargo 2, I got more comfortable with GitHub, and did something I've always wanted to do -- I released the templates for the core types in as open source. I hope at some point (now?) this will help get a design community booted up around Fargo.

Why? Well I'm all thumbs when it comes to CSS. But I love the results that great designers can produce with it. Fargo is a design platform, and the templates, released as open source, can make that work as a real community.

For example, I had trouble making Disqus comments work with the medium template, so I tabled it. I never have gotten back to it. Maybe someone else has the patience or know-how to make it work.

To make this work, you have to learn how to use Fargo as a CMS. And that's another benefit. If we can have a platform that's equally comfortable for writers, programmers and designers, then we really have something. This is something we had working well in the early blogging communities, with my own Manila and Radio, as well as with Blogger, Movable Type, Tumblr. We can have it again, with the benefits of modern browsers and servers.

The templates are released in OPML and plain text. If you want to edit them in Fargo, of course you'd use the OPML. If you figure out a way to make it work when editing as plain text, more power to you, I still want to share.

Also this may seem like gibberish today, but I hope in a few months it'll seem easy.

March 07, 2014 05:42 PM

Lambda the Ultimate

Propositions as Types

Propositions as Types, Philip Wadler. Draft, March 2014.

The principle of Propositions as Types links logic to computation. At first sight it appears to be a simple coincidence---almost a pun---but it turns out to be remarkably robust, inspiring the design of theorem provers and programming languages, and continuing to influence the forefronts of computing. Propositions as Types has many names and many origins, and is a notion with depth, breadth, and mystery.

Philip Wadler has written a very enjoyable (Like busses: you wait two thousand years for a definition of “effectively calculable”, and then three come along at once) paper about propositions as types that is accessible to PLTlettantes.

March 07, 2014 04:38 PM

Dave Winer

Newsweek's breakthrough

Yesterday started with a breakthrough -- Newsweek, the beleaguered, mostly forgotten news pub, had done a bit of investigative journalism, and had found the great Satoshi Nakamoto. The virtuoso technologist, sociologist and economist who came up with BitCoin. Strike one for journalism! They still have the right stuff.

By the end of the day -- the breakthrough was a black eye. The good news was now bad news for Newsweek and for journalism. This, in all likelihood, was not the man. Not only was Newsweek wrong, they were spectacularly wrong, wrong on the cover, using up one of their last bits of credibility. From now on will Newsweek be anything but a punchline?

But what does this say about investigative journalism in the future, when the rest of us can quickly evaluate the cover of Newsweek and find it lacking? And how many wrong stories of the past stood, because there was no Internet to expose them?

In my own field, I can tell you that most of the stories Newsweek ran about tech were based on huge omissions. Their typical tech story was about a titan fighting to control the future, when the truth is they were fighting a losing battle against obsolescence. But the MSM never reports this, because they have too much regard for money and many of them want jobs working for the moguls they write about.

We still hear it, in the last gasps of 20th century journalism -- in the stories we don't read about moguls who are starting news companies (the reporters don't write them). They still worship money, when all money can do is buy you big houses, cars and spouses, lots of them, sports teams, and offices full of journalists.

March 07, 2014 02:42 PM

Fargo as v2.0 of the Metaweblog API

I read an interesting piece by Brent Simmons yesterday about his passion for creating blogging systems. He's thinking about doing a quick one, running in node.js. As I read the piece I recognized a lot of the ideas as ones that we've already implemented in Fargo Publisher, which is an open source, MIT licensed, node.js app.

  1. My first thought was wouldn't it be great if Brent used Fargo Publisher as a starting point? That way we might get some new features, maybe some bug fixes, and more users. Having two pieces of software resting on top of an API gives it a much better chance to gain traction.

  2. My second thought was that he was planning on using the Metaweblog API, something I designed in 2002, to build on the Blogger API. But we've gone so much further in the intervening 12 years. Metaweblog views each post as a document, but Fargo views a whole website as a document. Suppose you had a computer that could only deal with one file at a time, and one came along that could have as many open windows as you want? Wouldn't you want to at least try it?

In that way Fargo 2 is the next step after Metaweblog. Yes, it's too bad progress happens so slowly in tech. 12 years for such a simple evolution. But at least it happened. It would be a shame if we had to wait another 12 years for adoption by users, esp very advanced ones like my longtime buddy, Brent.

March 07, 2014 02:21 PM

March 06, 2014

Dave Winer

Snowden, Banksy, Satoshi Nakamoto

These are the tech heroes of our day.

Snowden sacrificed to change our point of view of everything electronic. We had become too complacent, our blinders were on, we couldn't talk about the reality of the networks we are using.

Banksy uses new media to communicate strong messages via art.

Satoshi Nakamoto hacks the structure of our economic system, with pure tech.

These people are real media hackers, with very different approaches. They inspire and create and don't give a shit what Political Correctness says.

March 06, 2014 05:32 PM

CSS design question

There's a generic kind of site, a product home page, divided into sub-pages.

Each sub-page has a different background color or image, and uses a different kind of layout, and format and fonts. They are like panels in a brochure. You scroll through the site with the mouse on the desktop, or by flicking with your index finger on a tablet or a phone.

I've got one example of this kind of site.

Question #1 -- Does this kind of site have a name?

Question #2 -- Are there any good how-to's on setting one of these up? Or generic examples? I just don't know what they're called or I could probably find them on my own.

Obviously I want to make a Fargo template for this kind of site, to make it easy for writers and graphic designers to create them quickly. I, myself, have an application for this kind of site.

Thanks in advance for pointers.


A simple demo page illustrating the ideas.

Thanks for all the suggestions from commenters.

It's really very simple. Several fixed-height divs, styled as a table, containing a block of text that's styled as a table-cell.

March 06, 2014 04:02 AM

Recalculating graphics

My brother was in town a few weeks ago. We went to a Brooklyn Nets game on the subway and got lost and had to take a cab to Barclays in the snow and cold. It may not sound like fun but it was.

We talked about how various software projects turned out. I had a memory of a product we did that never shipped, it was called Broadway, or Boxes & Arrows, or PowWow, it had a lot of names over the years. The idea was this -- if you wanted to do layout right, presentation-type layout, you have to have graphics that have relationships to each other that persist, even as the objects are moved and resized.

So I could say that box A and box B are always centered relative to each other. When I move one the other would also move to maintain the relationship.

This was meant to be a tool people would use to create designs for PowerPoint-like presentations, designs that other people would use, and that would look good even if they had just a little text here and a lot of text there, or the other way around. Designers would set it up so there were rules that made it look great either way.

It followed the usual formula for software platforms. The authoring tool trades off ease-of-learning for power. The runtime must be trivially simple to use. Ways for people who invest to pack knowledge into their designs, and have it blossom to delight the neophyte.

(Sounds like something Walt Frazier might say.)

Whenever I have to do tedious layout of web pages, and find in the end the result is unsatisfactory and fragile I think of how it really should be done, and hope someday we make a popular platform that has these recalculating graphics in all their glory.

And I think it's also the way we'll ultimately solve the "responsive design" question.

March 06, 2014 12:13 AM

March 05, 2014

Tim Ferriss

The Art of Learning: The Tool of Choice for Top Athletes, Traders, and Creatives

This post is about the third book in the Tim Ferriss Book Club, which is limited to books that have dramatically impacted my life. Enjoy!

“I strongly recommend [The Art of Learning] for anyone who lives in a world of competition, whether it’s sports or business or anywhere else.”
- Mark Messier, 6-Time Stanley Cup Champion

“[This book] is a testimonial to the timeless principle of ‘do less and accomplish more.’ Highly recommended.”
- Deepak Chopra

“Josh provides tools that allow all of us to improve ourselves every day.”
- Cal Ripken, Jr., Baseball Hall of Fame Inductee

How do the best performers in the world become the best in the world?

The newest book in the Tim Ferriss Book Club provides the answers and blueprint: The Art of Learning: An Inner Journey to Optimal Performance by Joshua Waitzkin, the subject of Searching for Bobby Fischer. It’s been one of my constant companions since 2007, and I’m THRILLED to shine the spotlight on it.

  • Want to dominate sports? See the quotes from Cal Ripken, Jr. and Mark Messier above. There are many more.
  • Want to dominate business or finance? Many of the Forbes 100 work one-on-one with Josh. I personally know hedgefund managers, with $10-100 billion under management, who have The Art of Learning on their bedside tables.
  • Want to maximize creativity? Robert Pirsig, author of Zen and the Art of Motorcycle Maintenance, says “This is a really superb book, one I wish someone had given to me long ago… It will take a ferocious interruption to make you set this book down.”

Want to up your game, no matter the game? This book is your guide.

This post includes several things, including:

  • A brief personal story about Josh
  • A sample chapter, both in audio and text
  • A video overview

But perhaps you’re in a rush. Want the book synopsis in one sentence? Here it is: Through stories of martial arts wars and tense chess face-offs, Waitzkin reveals the inner workings of his everyday methods, including systematically triggering breakthroughs, cultivating top-1% technique in any field, and mastering the art of performance psychology.

The Art of Learning encapsulates an extraordinary competitor’s life lessons into a page-turning narrative.

Download or stream the book here!

My Story with Josh — Love at First F-Bomb

I first met Josh Waitzkin at a coffee shop in Manhattan.

Having just read The Art of Learning, I was as giddy as a schoolgirl that he’d agreed to come. I don’t have many heroes, and he was one of them.

About 15 minutes into sipping coffee and getting acquainted, I realized that he dropped as many f-bombs as I did. He was no Rain Man, and I felt silly for half expecting him to be. 15 minutes turned into nearly three hours, and he’s since become one of my best friends.

If you’ve read the bestselling book Searching for Bobby Fischer (or seen the movie), then you know of Josh.

Wandering through Washington Square Park with his mom at age six, he became fascinated with the “blitz chess” that the street hustlers played at warp speed. He watched and absorbed. Then he begged his mom to let him give it a shot. Just once! Soon thereafter, dressed in OshKosh overalls, he was king of the hustlers.

Josh proceeded to dominate the world chess scene and become the only person to win the National Primary, Elementary, Junior High School, Senior High School, U.S. Cadet, and U.S. Junior Closed chess championships before the age of 16. He could easily play “simuls,” in which 20-50 chessboards were set up with opponents in a large banquet hall, requiring him to walk from table to table playing all of the games simultaneously in his head.

He was labeled a “prodigy” (more on this shortly).

But how did he really become so good?

Partially by breaking the rules. Bruce Pandolfini, Josh’s original chess teacher, started their first class by taking him in reverse. The board was empty, except for three pieces in an endgame scenario: king and pawn against king. Memorizing openings was forbidden at the start.

Learning chess in reverse?

Yes, and this is just one of the many accelerated learning techniques Josh has refined and perfected over the last 20 years.

Calling Josh a “chess prodigy” is a misnomer because Josh defies pigeonholing. He has a PROCESS for mastering skills — one you can use yourself — and he’s applied it to many fields, not just chess.

He tackled Tai Chi Chuan after leaving the chess world behind. 13 Push Hands National Championships and two World Championship titles later, he decided to train in Brazilian jiu-jitsu. Now, a few short years later, he’s a black belt under the Michael Jordan of BJJ, Marcelo Garcia.

As Josh has put it: “I’ve come to realize that what I am best at is not Tai Chi, and it is not chess. What I am best at is the art of learning.”

If you want to get the most out of life, you need to get his book.

You won’t regret it.

I’ll also be creating a message board so we can discuss this book and others.

Download or stream the book here!

Sample Chapter — The Introduction

[Below is just one of 20 chapters in The Art of Learning.  Audio is embedded first, followed by text for the same chapter.]

Finals: Tai Chi Chuan Push Hands World Championships
Hsinchuang Stadium, Taipei, Taiwan December 5, 2004

Forty seconds before round two, and I’m lying on my back trying to breathe.

Pain all through me. Deep breath. Let it go. I won’t be able to lift my shoulder tomorrow, it won’t heal for over a year, but now it pulses, alive, and I feel the air vibrating around me, the stadium shaking with chants, in Mandarin, not for me.

My teammates are kneeling above me, looking worried. They rub my arms, my shoulders, my legs. The bell rings. I hear my dad’s voice in the stands, ‘C’mon Josh!’ Gotta get up. I watch my opponent run to the center of the ring. He screams, pounds his chest. The fans explode. They call him Buffalo. Bigger than me, stronger, quick as a cat. But I can take him — if I make it to the middle of the ring without falling over. I have to dig deep, bring it up from somewhere right now. Our wrists touch, the bell rings, and he hits me like a Mack truck.

Who could have guessed it would come to this? Just a few years earlier I had been competing around the world in elite chess tournaments. Since I was eight years old, I had consistently been the highest rated player for my age in the United States, and my life was dominated by competitions and training regimens designed to bring me into peak form for the next national or world championship. I had spent the years between ages fifteen and eighteen in the maelstrom of American media following the release of the film Searching for Bobby Fischer, which was based on my dad’s book about my early chess life. I was known as America’s great young chess player and was told that it was my destiny to follow in the footsteps of immortals like Bobby Fischer and Garry Kasparov, to be world champion.

But there were problems. After the movie came out I couldn’t go to a tournament without being surrounded by fans asking for autographs. Instead of focusing on chess positions, I was pulled into the image of myself as a celebrity. Since childhood I had treasured the sublime study of chess, the swim through ever-deepening layers of complexity. I could spend hours at a chessboard and stand up from the experience on fire with insight about chess, basketball, the ocean, psychology, love, art. The game was exhilarating and also spiritually calming. It centered me. Chess was my friend. Then, suddenly, the game became alien and disquieting.

I recall one tournament in Las Vegas: I was a young International Master in a field of a thousand competitors including twenty-six strong Grandmasters from around the world. As an up-and-coming player, I had huge respect for the great sages around me. I had studied their masterpieces for hundreds of hours and was awed by the artistry of these men. Before first-round play began I was seated at my board, deep in thought about my opening preparation, when the public address system announced that the subject of Searching for Bobby Fischer was at the event. A tournament director placed a poster of the movie next to my table, and immediately a sea of fans surged around the ropes separating the top boards from the audience. As the games progressed, when I rose to clear my mind young girls gave me their phone numbers and asked me to autograph their stomachs or legs.

This might sound like a dream for a seventeen-year-old boy, and I won’t deny enjoying the attention, but professionally it was a nightmare. My game began to unravel. I caught myself thinking about how I looked thinking instead of losing myself in thought. The Grandmasters, my elders, were ignored and scowled at me. Some of them treated me like a pariah. I had won eight national championships and had more fans, public support and recognition than I could dream of, but none of this was helping my search for excellence, let alone for happiness.

At a young age I came to know that there is something profoundly hollow about the nature of fame. I had spent my life devoted to artistic growth and was used to the sweaty-palmed sense of contentment one gets after many hours of intense reflection. This peaceful feeling had nothing to do with external adulation, and I yearned for a return to that innocent, fertile time. I missed just being a student of the game, but there was no escaping the spotlight. I found myself dreading chess, miserable before leaving for tournaments. I played without inspiration and was invited to appear on television shows. I smiled.

Then when I was eighteen years old I stumbled upon a little book called the Tao Te Ching, and my life took a turn. I was moved by the book’s natural wisdom and I started delving into other Buddhist and Taoist philosophical texts. I recognized that being at the pinnacle in other people’s eyes had nothing to do with quality of life, and I was drawn to the potential for inner tranquility.

On October 5, 1998, I walked into William C. C. Chen’s Tai Chi Chuan studio in downtown Manhattan and found myself surrounded by peacefully concentrating men and women floating through a choreographed set of movements. I was used to driven chess players cultivating tunnel vision in order to win the big game, but now the focus was on bodily awareness, as if there were some inner bliss that resulted from mindfully moving slowly in strange ways.

I began taking classes and after a few weeks I found myself practicing the meditative movements for hours at home. Given the complicated nature of my chess life, it was beautifully liberating to be learning in an environment in which I was simply one of the beginners — and something felt right about this art. I was amazed by the way my body pulsed with life when flowing through the ancient steps, as if I were tapping into a primal alignment.

My teacher, the world-renowned Grandmaster William C.C. Chen, spent months with me in beginner classes, patiently correcting my movements. In a room with fifteen new students, Chen would look into my eyes from twenty feet away, quietly assume my posture, and relax his elbow a half inch one way or another. I would follow his subtle instruction and suddenly my hand would come alive with throbbing energy as if he had plugged me into a soothing electrical current. His insight into body mechanics seemed magical, but perhaps equally impressive was Chen’s humility. Here was a man thought by many to be the greatest living Tai Chi Master in the world, and he patiently taught first-day novices with the same loving attention he gave his senior students.

I learned quickly, and became fascinated with the growth that I was experiencing. Since I was twelve years old I had kept journals of my chess study, making psychological observations along the way — now I was doing the same with Tai Chi.

After about six months of refining my form (the choreographed movements that are the heart of Tai Chi Chuan), Master Chen invited me to join the Push Hands class. This was very exciting, my baby steps toward the martial side of the art. In my first session, my teacher and I stood facing each other, each of us with our right leg forward and the backs of our right wrists touching. He told me to push into him, but when I did he wasn’t there anymore. I felt sucked forward, as if by a vacuum. I stumbled and scratched my head. Next, he gently pushed into me and I tried to get out of the way but didn’t know where to go. Finally I fell back on old instincts, tried to resist the incoming force, and with barely any contact Chen sent me flying into the air.

Over time, Master Chen taught me the body mechanics of nonresistance. As my training became more vigorous, I learned to dissolve away from attacks while staying rooted to the ground. I found myself calculating less and feeling more, and as I internalized the physical techniques all the little movements of the Tai Chi meditative form started to come alive to me in Push Hands practice. I remember one time, in the middle of a sparring session I sensed a hole in my partner’s structure and suddenly he seemed to leap away from me. He looked shocked and told me that he had been pushed away, but he hadn’t noticed any explosive movement on my part. I had no idea what to make of this, but slowly I began to realize the martial power of my living room meditation sessions. After thousands of slow-motion, ever-refined repetitions of certain movements, my body could become that shape instinctively. Somehow in Tai Chi the mind needed little physical action to have great physical effect.

This type of learning experience was familiar to me from chess. My whole life I had studied techniques, principles, and theory until they were integrated into the unconscious. From the outside Tai Chi and chess couldn’t be more different, but they began to converge in my mind. I started to translate my chess ideas into Tai Chi language, as if the two arts were linked by an essential connecting ground. Every day I noticed more and more similarities, until I began to feel as if I were studying chess when I was studying Tai Chi. Once I was giving a forty-board simultaneous chess exhibition in Memphis and I realized halfway through that I had been playing all the games as Tai Chi. I wasn’t calculating with chess notation or thinking about opening variations…I was feeling flow, filling space left behind, riding waves like I do at sea or in martial arts. This was wild! I was winning chess games without playing chess.

Similarly, I would be in a Push Hands competition and time would seem to slow down enough to allow me to methodically take apart my opponent’s structure and uncover his vulnerability, as in a chess game. My fascination with consciousness, study of chess and Tai Chi, love for literature and the ocean, for meditation and philosophy, all coalesced around the theme of tapping into the mind’s potential via complete immersion into one and all activities. My growth became defined by barrierlessness. Pure concentration didn’t allow thoughts or false constructions to impede my awareness, and I observed clear connections between different life experiences through the common mode of consciousness by which they were perceived.

As I cultivated openness to these connections, my life became flooded with intense learning experiences. I remember sitting on a Bermuda cliff one stormy afternoon, watching waves pound into the rocks. I was focused on the water trickling back out to sea and suddenly knew the answer to a chess problem I had been wrestling with for weeks. Another time, after completely immersing myself in the analysis of a chess position for eight hours, I had a breakthrough in my Tai Chi and successfully tested it in class that night. Great literature inspired chess growth, shooting jump shots on a New York City blacktop gave me insight about fluidity that applied to Tai Chi, becoming at peace holding my breath seventy feet underwater as a free-diver helped me in the time pressure of world championship chess or martial arts competitions. Training in the ability to quickly lower my heart rate after intense physical strain helped me recover between periods of exhausting concentration in chess tournaments. After several years of cloudiness, I was flying free, devouring information, completely in love with learning.


Before I began to conceive of this book, I was content to understand my growth in the martial arts in a very abstract manner. I related to my experience with language like parallel learning and translation of level. I felt as though I had transferred the essence of my chess understanding into my Tai Chi practice. But this didn’t make much sense, especially outside of my own head. What does essence really mean anyway? And how does one transfer it from a mental to a physical discipline?

These questions became the central preoccupation in my life after I won my first Push Hands National Championship in November 2000. At the time I was studying philosophy at Columbia University and was especially drawn to Asian thought. I discovered some interesting foundations for my experience in ancient Indian, Chinese, Tibetan, and Greek texts — Upanishadic essence, Taoist receptivity, Neo-Confucian principle, Buddhist nonduality, and the Platonic forms all seemed to be a bizarre cross-cultural trace of what I was searching for. Whenever I had an idea, I would test it against some brilliant professor who usually disagreed with my conclusions. Academic minds tend to be impatient with abstract language — when I spoke about intuition, one philosophy professor rolled her eyes and told me the term had no meaning. The need for precision forced me to think about these ideas more concretely. I had to come to a deeper sense of concepts like essence, quality, principle, intuition, and wisdom in order to understand my own experience, let alone have any chance of communicating it.

As I struggled for a more precise grasp of my own learning process, I was forced to retrace my steps and remember what had been internalized and forgotten. In both my chess and martial arts lives, there is a method of study that has been critical to my growth. I sometimes refer to it as the study of numbers to leave numbers, or form to leave form. A basic example of this process, which applies to any discipline, can easily be illustrated through chess: A chess student must initially become immersed in the fundamentals in order to have any potential to reach a high level of skill. He or she will learn the principles of endgame, middlegame, and opening play. Initially one or two critical themes will be considered at once, but over time the intuition learns to integrate more and more principles into a sense of flow. Eventually the foundation is so deeply internalized that it is no longer consciously considered, but is lived. This process continuously cycles along as deeper layers of the art are soaked in.

Very strong chess players will rarely speak of the fundamentals, but these beacons are the building blocks of their mastery. Similarly, a great pianist or violinist does not think about individual notes, but hits them all perfectly in a virtuoso performance. In fact, thinking about a “C” while playing Beethoven’s 5th Symphony could be a real hitch because the flow might be lost. The problem is that if you want to write an instructional chess book for beginners, you have to dig up all the stuff that is buried in your unconscious — I had this issue when I wrote my first book, Attacking Chess. In order to write for beginners, I had to break down my chess knowledge incrementally, whereas for years I had been cultivating a seamless integration of the critical information.

The same pattern can be seen when the art of learning is analyzed: themes can be internalized, lived by, and forgotten. I figured out how to learn efficiently in the brutally competitive world of chess, where a moment without growth spells a front-row seat to rivals mercilessly passing you by. Then I intuitively applied my hard-earned lessons to the martial arts. I avoided the pitfalls and tempting divergences that a learner is confronted with, but I didn’t really think about them because the road map was deep inside me — just like the chess principles.

Since I decided to write this book, I have analyzed myself, taken my knowledge apart, and rigorously investigated my own experience. Speaking to corporate and academic audiences about my learning experience has also challenged me to make my ideas more accessible. Whenever there was a concept or learning technique that I related to in a manner too abstract to convey, I forced myself to break it down into the incremental steps with which I got there. Over time I began to see the principles that have been silently guiding me, and a systematic methodology of learning emerged.

My chess life began in Washington Square Park in New York’s Greenwich Village, and took me on a sixteen-year-roller-coaster ride, through world championships in America, Romania, Germany, Hungary, Brazil, and India, through every kind of heartache and ecstasy a competitor can imagine. In recent years, my Tai Chi life has become a dance of meditation and intense martial competition, of pure growth and the observation, testing, and exploration of that learning process. I have currently won thirteen Tai Chi Chuan Push Hands National Championship titles, placed third in the 2002 World Championship in Taiwan, and in 2004 I won the Chung Hwa Cup International in Taiwan, the World Championship of Tai Chi Chuan Push Hands.

A lifetime of competition has not cooled my ardor to win, but I have grown to love the study and training above all else. After so many years of big games, performing under pressure has become a way of life. Presence under fire hardly feels different from the presence I feel sitting at my computer, typing these sentences. What I have realized is that what I am best at is not Tai Chi, and it is not chess — what I am best at is the art of learning.

This book is the story of my method.

Video Overview

Below is a short video overview of The Art of Learning. Don’t miss the hilarious outtakes starting around 4:45:


Download or stream the entire book here!

QOD: If you’ve met or studied any world-class performers, what did you learn from them? What lessons have you learned from observing the greats? Please share in the comments!

by Tim Ferriss at March 05, 2014 09:31 PM

Dave Winer

Dig we must!

I'm working on a new scheme for the home page.

A picture of a slice of cheese cake.

March 05, 2014 03:54 PM

March 04, 2014

Lambda the Ultimate

Haxe 3.1 is here

Haxe 3.1 is here. It is a language that is sorta rooted in the bog-standard main-stream (it came out of Action/Ecma scripts), but has gradually (especially in the move from 2.0 to 3.0+) been adding some of its own ideas. I've used 2.x for making cross-platform games. I sorta love/hate it, but I'd certainly be a lot more sad if it stopped existing, having known it (not in the biblical sense or anything). There's probably too many random things to go into any detail here, but I'll try to summarize it as: A cross-platform (compiles down to other languages) statically and dynamically typed (including structural typing) language and libraries, with some nifty typing ideas/constructs and syntax of its own. Oh, and: macros. (But it has seemingly weird lapses, like I dunno that it will ever really support The Curiously Recurring Template Pattern, tho which I find personally sad).

March 04, 2014 10:41 PM

Reinventing Business

Transparent Salaries + Activities

In this article about how Whole Foods has pay transparency, notice that CEO John Mackey has to explain what people have done to justify their salaries. But what if that was attached to the public salary information, so that you see the number, and why, together? Your performance review, for all to see at all times.

Managers would have to be comfortable with more dynamic change, because it would in effect create a marketplace. As soon as you had accumulated enough "credits" added to your company CV, you could ask for more money, rather than waiting for annual salary reviews. And your abilities and achievements could be compared to the larger marketplace and if you fall behind your salary might go down.

Making it public might reduce or eliminate most of the difficulties faced in the way we determine salaries now.

Atlassian has been trying to change their performance review process.

by (Bruce Eckel) at March 04, 2014 09:37 PM

The Limits of Open Spaces

Last week was the Java Posse Roundup, and as usual it was a great experience that puts to shame traditional "eyes forward" events. At this point, I virtually never go to traditional conferences unless I'm speaking at them -- speaking engages me and increases the chance of having interesting conversations. But much of the rest of such conferences are usually disconnecting experiences, except for the serendipitous moments when you fall into discussions.

Open Spaces formalize those discussions so they are no longer serendipitous but rather the norm. You spend your time connecting in numerous different ways (one reason it works to hold it in a resort town is the outdoor activities provide additional fertile ground for connection and discussion). I've actually been a little overwhelmed by the strength of some connections, and how important the conference can be to people, but a friend casually referred to it as "a retreat experience," pointing out that things like this always happen with retreats, and it was a sudden insight: "Of course, that's what it is, a retreat experience!"

Attendee Julie Pitt made an even deeper observation: Open Spaces are an exceptionally good way to distribute our collective knowledge, but the best we can do within that structure is to bring us up to the same level of existing knowledge -- of things we already know. Other than a few accidental sparks, it doesn't take us to places that someone in the group doesn't already know.

Just as Open Spaces turns the traditional conference structure on its head, what experiences can we create to produce new ideas and insights? I immediately imagine a workshop with structured experiences designed to stimulate visionary thinking, but am I once again trapped in my preconceptions? People have been putting on creativity workshops for some time now, and I don't know of any revolutionary insights emerging from them. I don't want to teach techniques that you later use at home, but instead to create a collective experience from which ideas spontaneously emerge.

Hmm. Maybe I should look around for some creativity workshops/experiences to see what they do, as a starting point.

by (Bruce Eckel) at March 04, 2014 09:18 PM

Dave Winer

March 03, 2014

Alex Schroeder

Herausforderung Spielleiter

Manchmal treffe ich Leute, die würden gerne eine Kampagne leiten. Manchmal hoffen sie, dass die Gruppe einfach beisammen bleibt, sich weiterhin am gleichen Ort spielt, sich zur gleichen Zeit trifft. Wenn man unter Freunden, für eine bestehende Runde einen Spielleiter sucht, dann ist da nichts dagegen einzuwenden. Aber manchmal reicht das einfach nicht…

  • Spielleiter müssen die nötigen Spieler finden. Auf Facebook, Google+, Nearby Gamers, Tanelorn, Spielerzentrale, im Freundeskreis, Partner, Verwandte, Arbeitskollegen, und so weiter.
  • Spielleiter müssen die Termine koordinieren. Einer muss klar ankündigen, wann gespielt wird. Wenn Termine ständig verschoben werden, gibt es Leute wie mich, die nicht sehr spontan sind, die damit nicht gut umgehen können. An spontane Spielabende kann ich oft nicht kommen, an abgesagten Spielabenden hätte ich lieber etwas anderes gemacht, und nach und nach sinkt die Priorität der Runde. Schon bald mache ich lieber etwas anderes ab, weil ich mir dann wenigstens sicher bin, dass es stattfindet.
  • Spielleiter müssen muss Konflikte lösen. Spieler schimpfen über Schwule, Nutten, Ausländer? Jeder kann Einsprache erheben, aber wenn ich mich als Gast sehe, habe ich vielleicht das Gefühl, dass ich mich besser mit einem freundlichen Email verabschiede, als mit solchen Leuten zusammen zu spielen. Der Spielleiter ist eben nicht nur für die Rekrutierung der Spieler sondern auch für die Spielkultur verantwortlich.
  • Spielleiter müssen das System wählen oder bieten die Systeme zur Auswahl, welche ihnen liegen.
  • Spielleiter müssen die Regeln durchsetzen, klären, Hausregeln aufstellen, die Spieler an die Regeln erinnern – man kann zwar einen der Spieler zum Regelverantwortlichen machen, in der Regel funktioniert das aber nicht so unglaublich gut.
  • Spielleiter bestimmen das Rampenlicht und müssen korrigierend eingreifen. Manche Spieler sind lauter, haben mehr Ideen, überreden ständig ihre Mitspieler. In einem gewissen Mass ist diese Verteilung von Introvertierten und Extrovertierten normal und entspricht auch den Wünschen der Betroffenen. Durch Befolgen einer klaren Reihenfolge, durch Übertragen von einzelnen Entscheidungen an ruhigere Spieler und so weiter kann hier aber fördernd eingegriffen werden.
  • Spielleiter müssen oft Gastgeber sein. Oft wird bei Spielleitern daheim gespielt. Sie haben die Bücher, die Ordner, das Material – extra Würfel, Stifte, Radiergummis, Unterlagen, Wasserkrüge, Gläser, Schalen für Chips, Pistazien, Erdnüsse, Mandarinen und Schalen für den Abfall.
  • Spielleiter müssen Zeit zum Vorbereiten haben. Als Spieler kann man es sich eher leisten, nur am Spielabend dabei zu sein. Als Spielleiter gehört das alleine sein, das Nachdenken, Aufschreiben und Träumen auch zur Aufgabe.
  • Spielleiter müssen oft Abenteuerberichte schreiben, weil Spieler oft nur am Spielabend beim Spiel sind. Das Durchdenken des letzten Abends ist nicht so ihr Ding. Das Ausschmücken auch nicht. Ich mache mir als Spieler auch nur ein paar Notizen am Rand des Charakterblattes und schreibe selten einen Bericht.
  • Spielleiter müssen eine Welt erschaffen. Diese kann sehr klein sein, von einem Verlies, einem Dorf, der Wildnis, zu einer Stadt, mehreren Städten, der ganzen Oberwelt, die vernetzte Unterwelt, das Jenseits, die Ebenen, nach und nach will alles bedacht sein, bekannte Bücher zum Setting wollen berücksichtigt sein.
  • Spielleiter müssen Abenteuer vorbereiten. Wie man sieht, ist das nur ein kleiner Teil des Ganzen!
  • Spielleiter sind für den zeitlichen Ablauf zuständig. Wann fangen wir an, wann hören wir auf, beginnen wir in media res, enden wir mit einem cliffhanger, haben wir noch eine halbe Stunde oder sollten wir langsam auf das Ende zusteuern? Spielleiter haben irgendwo im Blickfeld eine Uhr.
  • Spielleiter sind auch für das Tempo zuständig. Ist einem Spieler langweilig und machen wir weiter oder verweilen wir noch ein wenig bei dieser Szene? Spielleiter reagieren, wenn die Spieler zum Handy greifen, gähnen, zu malen beginnen oder ihre Würfel sortieren und stapeln.

Ich will mit dieser Liste niemandem Angst machen. Das Spielleitertum ist ein super Hobby. Ich will nur vermeiden, dass jemand denkt, es hat sich schon mit dem Vorbereiten eines Abenteuers. Es bleibt viel an uns hängen.

Tags: RSS

March 03, 2014 10:49 PM


Modern Chumpatronic Engineering.

A reader recently asked me to comment on the demise of MtGox and its implications for Bitcoin enthusiasts.

I refused to do so, on account of the MtGox scam having been thoroughly beaten to death elsewhere – long before the recent and final convulsive fit people erroneously describe as ‘its demise.’ – The unwashed masses, eager to be fleeced, have no plans to listen now, just as they did not listen then.

So, instead, I wrote this.

In the English-speaking world, the period of lawless bacchanalia “enjoyed” by millions of people in the decade following the Soviet collapse is sometimes called the “Roaring ’90s.” 1

Just as much of the nautical terminology used by modern sailors was born during the famed “age of sail,” an epoch of “bold and free experiments” in the fields of… fraud, corruption, murder – likewise gave us a wealth of new “terms of art.”

Useful, catchy words for the defining concepts of an era tend to migrate, slowly but surely, across cultural and linguistic boundaries. But, since words are not themselves alive, they cannot do it without some help. So, like many other people, I intend to do my fair bit to help them.

You have already met our old friend, rectothermal cryptoanalysis. (I should hope – in the written word, rather than in person!) Now meet the Chumpatron (Лохотрон) – a short and self-documenting term, encompassing a variety of concepts essential to the daily life of modern man.

A chumpatron is not necessarily a physical contrivance, like a cyclotron. Although it can be. Modern, state-of-the-art chumpatrons tend to rely heavily on automatic machinery. But the machinery alone never suffices, for its operator must always take care to bring the machine fuel. That is to say, chump (Лох.) To be fair, chumps are not the fuel per se – merely the containers in which fuel is packaged and transported.

The fuel of a chumpatron is not necessarily money, as a naive reader might suppose. It could be something else entirely. But more often than not, it is something that, when reprocessed (perhaps in another kind of chumpatron) can be alchemically-converted into wealth. The chumps, as we noted above, are not necessarily consumed when the fuel is burned – being mere containers; and containers are often re-usable! In fact, these particular containers have arms, legs, and rudimentary nervous systems – and will, if correctly cared for, amble about the world semi-autonomously and gather more… fuel for the chumpatron.

A chumpatron, given as it converts human beings, their labour, hopes, aspirations, etc. into something tangible and useful for its master can easily be confused with other types of machines. Say, a biodiesel fermenter. But it is not the same thing! Anyone with the ill-fortune to end up in a biodiesel reactor will be fermented. But there is nothing fortuitous or accidental about ending up in a chumpatron.

The defining attribute of a chumpatron is that it does not run on just any kind of human being, but on chumps in particular. A conquering war-machine which practices ordinary, traditional enslavement of the conquered (with or without reprocessing into biodiesel!) is therefore not a chumpatron. The fuel-containers for a chumpatron carry out their duties on their own free will.

The chumpatron is more usefully-specific concept than the ordinary English word “scam” – because it implies an automatic, mechanical regularity to the workings of the people-to-resource converter. This is a considerable improvement on mere scamming – which is a somewhat unreliable, labour-intensive, and, more importantly – risky – affair. The perpetrator of an ordinary scam, should he fail to abscond with the proceeds in a timely manner, is liable to face some angry victims and perhaps some sharp pointed sticks. The operator of a chumpatron, on the other hand, can operate the mechanism by remote control. The highest grade of Chumpatronic Engineer can even make use of chumps directly in the machine’s control system, thoroughly shielding himself from the inevitably hot, fast-moving fragments of an exploding chumpatron (perhaps the only well-known, established fact about chumpatrons is: they tend to explode. Though almost never without some warning.)

When chumps find their way into a chumpatron, they tend to emit a variety of crunching and squeaking noises, as the gears turn, grind, and empty them of their useful contents. If you are not yet in the gears, have not yet been emptied – and would like to stay out, and remain full – you can try to learn something from these noises. But it will be, by and large, a waste of time. Don’t listen to the noises. Instead, learn from other people. For example, from people who have stood near the hopper, but at a safe distance – and have not wound up inside despite the mighty suction of the intake manifold.

One could spend years in the study and cataloging of chumpatrons. And others have done this, and you, dear reader, are invited to learn from them. One such man is the well-known Dmitri Orlov. Whether or not you agree with his uncommonly poor health prognosis for modern civilization, his analysis of today’s subject – how chumps find their way into a chumpatron – is worth considering:

“…the first hurdle, for many people, is in understanding what trust actually is, because there is no innate human quality called trustworthiness, possessed by some people, lacking in others. Rather, it is more along the lines of a generalization concerning a given individual’s behavior over time, within a given relationship. Trust is transactional: a person needs a reason to trust you, and you need a reason to trust that person. There is, however, such a quality as trustfulness: this is the property of small children, tame animals and, most unfortunately for them, many regular, salt-of-the-earth, mainstream Americans. It is of negative survival value in the context of financial collapse. It is being exhibited for all to see by some of the people who recently lost money when MF Global stole it to cover some private bets it had made. They licked their wounds, complained bitterly, and then…went looking for another financial company—to be taken advantage of again. Since the head of MF Global wasn’t punished, why wouldn’t another company do the same to them, knowing that it can do so with impunity? There also seems to be a certain set of traits possessed in abundance by a category of highly effective American financial operators that makes it easy for them to prey on trustful people. It may be the suits they wear, or the English they speak or their general demeanor—let us call it “trustiness,” to go along with the “truthiness” of their financial disclosures. Deep down, trustful people feel privileged to be robbed by such superior specimens. The predator-prey relationship has been honed to the fine point of a pen: told to sign their life away on the dotted line, the besotted, trustful American gulps quietly—and signs.”

Dmitri Orlov, “The Five Stages of Collapse.”

“…we need a word that describes the artifacts generated in response to irrational actors who demand to be fooled. As the old saying goes, “A fool and his money are soon parted” – at the fool’s own insistence, no less! If the deer comes out of the forest and walks up to the hunter, it is not proper hunting, and this is not proper con artistry or grift or embezzlement or any other term we use to describe proper works of evil. If the victim, at the sight of the economic predator, goes into doggie submission, we must stop discussing the phenomenon in terms of conflict and consider whether what we are observing might be some strange instance of symbiosis.”

Dmitri Orlov, “Welcome to Fuffland!”

If you have read this far, and happen to be one of the people who suffered from the collapse of MtGox, learn to recognize yourself in Mr. Orlov’s zoological portrait.

Given as falling into a chumpatron is entirely voluntary, you can easily opt out of doing so if you can 1) decide that you do not want to, and 2) learn to distinguish the business end (hopper) of an operating chumpatron from your everyday surroundings (I should hope that there is, at the present time, a difference!)

For instance, was MtGox a proper, free-standing automatic chumpatron in its own right, implementing the entire “fuel cycle?” Or was it merely one component of a larger chumpatron? That is, a media machine which made sure that every glossy magazine page mentioning Bitcoin would take care to also mention “MtGox, the premier Bitcoin exchange…” And now that MtGox is gone, are you in search of a new, improved, glossier magazine, so that you can be introduced to a new MtGox, in which you can lose whatever remains of your coin?

Are you eager to trust your cryptographic private keys to some “trustworthy” fellow, by using Bitcoin “banks” – or otherwise?

If so, you are fuel, and you belong in a fuel tank. If you do not care to be fuel, use your gifts as an advanced living organism (e.g. nervous system) and learn to identify and evade your predators. You don’t even need a human brain for this – the brain of an insect will easily suffice. But you must use it.

  1. Perhaps there exists a more flavourful and/or historically-analogous translation of what those who lived through this period called it. But Americans, generally familiar with “The Roaring ’20s,” probably understand the basic idea. 

by Stanislav at March 03, 2014 10:37 PM

Ian Bicking

Towards a Next Level of Collaboration

With TogetherJS we’ve been trying to make a usable tool for the web we have, and the browsers we have, and the web apps we have. But we’re also accepting a lot of limitations.

For a particular scope the limitations in TogetherJS are reasonable, but my own goals have been more far-reaching. I am interested in collaboration with as broad a scope as the web itself. (But no broader than the web because I’m kind of biased.) “Collaboration” isn’t quite the right term — it implies a kind of active engagement in creation, but there’s more ways to work together than collaboration. TogetherJS was previously called TowTruck, but we wanted to rename it to something more meaningful. While brainstorming we kept coming back to names that included some form of “collaboration” but I strongly resisted it because it’s such a mush-mouthed term with too much baggage and too many preconceptions.

When we came up with “together” it immediately seemed right. Admittedly the word feels a little cheesy (it’s a web built out of hugs and holding hands!) but it covers the broad set of activities we want to enable.

With the experience from TogetherJS in mind I want to spend some time thinking about what a less limited tool would look like. Much of this has become manifest in Hotdish, and the notes below have informed its design.

Degrees of collaboration/interaction

Intense collaboration is cool, but it’s not comprehensive. I don’t want to always be watching over your shoulder. What will first come to mind is privacy, but that’s not interesting to me. I would rather address privacy by helping you scope your actions, let you interact with your peers or not and act appropriately with that in mind. I don’t want to engage with my collaborators all the time because it’s boring and unproductive and my eyes glaze over. I want to engage with other people appropriately: with all the intensity called for given the circumstances, but also all the passivity that is also sometimes called for.

I’ve started to think in terms of categories of collaboration:

1. Asynchronous message-based collaboration

This includes email of course, but also issue trackers, planning tools, any notification system. If you search for “collaboration software” this is most of what you find, and much of the innovation is in representing and organizing the messages.

I don’t think I have any particularly new ideas in this well-explored area. That’s not to say there aren’t lots of important ideas, but the work I want to do is in complementing these tools rather than competing with them. But I do want to note that they exist on this continuum.

2. Ambient awareness

This is the awareness of a person’s presence and activity. We have a degree of this with Instant Messaging and chat rooms (IRC, Campfire, etc). But they don’t show what we are actively doing, just our presence or absence, and in the case of group discussions some of what we’re discussing with other people.

Many tools that indicate presence also include status messages which would purport to summarize a person’s current state and work. I’ve never worked with people who keep those status messages updated. It’s a very explicit approach. At best it devolves into a record of what you had been doing.

A more interesting tool to make people’s presence more present is Sqwiggle, a kind of always-on video conference. It’s not exactly always-on, there is a low-fidelity video with no audio until you start a conversation with someone and it goes to full video and audio. This way you know not only if someone is actually sitting at the computer, but also if they are eating lunch, if they have the furrowed brows of careful concentration, or are frustrated or distracted. Unfortunately most people’s faces only show that they are looking at a screen, with the slightly studious but mostly passive facial expressions that we have when looking at screens.

Instant messaging has grown to include an additional the presence indicator: I am currently typing a response. A better fidelity version of this would indicate if I am typing right now, or if I forgot I started typing and switched tabs but left text in the input box, or if I am trying hard to compose my thoughts (typing and deleting), or if I’m pasting something, or if I am about to deliver a soliloquy in the form of a giant message. (Imagine a typing indicator that gives a sense of the number of words you have typed but not sent.)

I like that instant messaging detects your state automatically, using something that you are already engaged with (the text input box). Sqwiggle has a problem here: because you aren’t trying to project any emotions to your computer screen, Sqwiggle catches expressions that don’t mean anything. We can engage with our computers in different ways, there’s something there to express, it’s just not revealed on our faces.

I’d like to add to the activity indicators we have. Like the pages (and web apps) you are looking at (or some privacy-aware subset). I’d like to show how you are interacting with those pages. Are you flopping between tabs? Are you skimming? Scrolling through in a way that shows you are studying the page? Typing? Clicking controls?

I want to show something like the body language of how you are interacting with the computer. First I wondered if we could interpret your actions and show them as things like “reading”, “composing”, “being pissed off with your computer”, etc. But then I thought more about body language. When I am angry there’s no “angry” note that shows up above my head. A furrowed brow isn’t a message, or at least mostly not a message. Body language is what we read from cues that aren’t explicit. And so we might be able to show what a person is doing, and let the person watching figure out why.

3. Working in close parallel

This is where both people (or more than 2 people) are actively working on the same thing, same project, same goal, but aren’t directly supporting each other at every moment.

When you’ve entered into this level of collaboration you’ve both agreed that you are working together — you’re probably actively talking through tasks, and may regularly be relying on each other (“does what I wrote sound right?” or “did you realize this test is failing” etc). A good working meeting will be like this. A bad meeting would probably have been better if you could have stuck to ambient awareness and promoted it to a more intense level of collaboration only as needed.

4. Working directly

This is where you are both locked on a single task. When I write something and say “does what I wrote sound right?” we have to enter this mode: you have to look at exactly what I’m talking about. In some sense “close parallel” may mean “prepared to work directly”.

I have found that video calls are better than audio-only calls, more than I would have expected. It’s not because the video content is interesting. But the video makes you work directly, while being slightly uncomfortable so you are encouraged to acknowledge when you should end the call. In a way you want your senses filled. Or maybe that’s my propensity to distraction.

There’s a lot more to video calls than this (like the previously mentioned body language). But in each feature I suspect there are parallels in collaborative work. Working directly together should show some of the things that video shows when we are focused on a conversation, but can’t show when we are focusing on work.

5. Demonstrating to another person

This is common for instruction and teaching, but that shouldn’t be the only case we consider. In Hotdish we have often called it “presenting” and “viewing”. In this mode someone is the driver/presenter, and someone is the passenger/viewer. When the presenter focuses on something, you want the viewer to be aware of that and follow along. The presenter also wants to be confident that the viewer is following along. Maybe we want something like how you might say “uh huh” when someone is talking to you — if a listener says nothing it will throw off the talker, and these meaningless indications of active listening are important.

Demonstration could just be a combination of direct work and social convention. Does it need to be specially mediated by tools? I’m not sure. Do we need a talking stick? Can I take the talking stick? Are these interactions like a conversation, where sometimes one person enters into a kind of monologue, but the rhythm of the conversation will shift? If we focus on the demonstration tools we could miss the social interactions we are trying to support.

Switching modes

Between each of these styles of interaction I think there must be some kind of positive action. A natural promotion of demotion of your interaction with someone should be mutual. (A counter example would be the dangling IM conversation, where you are never sure it’s over.)

At the same time, the movement between modes also builds your shared context and your relationship with the other person. You might be proofing an article with another person, and you say: “clearly this paragraph isn’t making sense, let me just rewrite it, one minute” — now you know you are leaving active collaboration, but you also both know you’ll be reentering it soon. You shouldn’t have to record that expectation with the tool.

I’m reluctant to put boundaries up between these modes, I’d rather tools simply inform people that modes are changing and not ask if they can change. This is part of the principles behind Defaulting To Together.


At least in the context of computers we often have strong notions of ownership. Maybe we don’t have to — maybe it’s because we have to hand off work explicitly, and maybe we have to hand off work explicitly because we lack fluid ways to interact, cooperate, delegate.

With good tools in hand I see “ownership” being exchanged more regularly:

  • I find some documentation, then show it to you, and now it’s yours to make use of.

  • I am working through a process, get stuck, and need your skills to finish it up. Now it’s yours. But you might hand it back when you unstick me.

  • You are working through something, but are not permitted to complete the operation, you have to hand it over to me for me to complete the last step.

Layered on this we have the normal notions of ownership and control — the login accounts and permissions of the applications we are using. Whether these are in opposition to cooperation or maybe complementary I have not decided.

Screensharing vs. Peer-to-Peer

Perhaps a technical aside, but when dealing with real-time collaboration (not asynchronous) there are two distinct approaches.

Screensharing means one person (and one computer) is “running” the session — that one person is logged in, their page or app is “live”, everyone else sees what they see.

Screensharing doesn’t mean other people can’t interact with the screen, but any interaction has to go through the owner’s computer. In the case of a web page we can share the DOM (the current visual state of the page) with another person, but we can’t share the Javascript handlers and state, cookies, etc., so most interactions have to go back through the original browser. Any side effects have to make a round trip. Latency is a problem.

It’s hard to figure out exactly what interactivity to implement in a screensharing situation. Doing a view-only interaction is not too hard. There are a few things you can add after that — maybe you let someone touch a form control, suggest that you follow a link, send clicks across the wire — but there’s no clear line to stop at. Worse, there’s no clear line to express. You can implement certain mechanisms (like a click), but these don’t always map to what the user thinks they are doing — something like a drag might involve a mousedown/mousemove/mouseup event, or it might be implemented directly as dragging. Implementing one of those interactions is a lot easier than the other, but the distinction means nothing to the user.

When you implement incomplete interactions you are setting up a situation where a person can do something in the original application that viewers can’t do, even though it looks like the real live application. An uncanny valley of collaboration.

I’ve experimented with DOM-based screen sharing in Browser Mirror, and you can see this approach in a tool like Surfly. As I write this a minimal version of this is available in Hotdish.

In peer-to-peer collaboration both people are viewing their own version of the live page. Everything works exactly like in the non-collaborative environment. Both people are logged in as themselves. This is the model TogetherJS uses, and is also present as a separate mode in Hotdish.

This has a lot of obvious advantages over the problems identified above for screensharing. The big disadvantage is that hardly anything is collaborative by default in this model.

In the context of the web the building blocks we do have are:

  • URLs. Insofar as a URL defines the exact interface you look at, then putting both people at the same URL gives a consistent experience. This works great for applications that use lots of server-side logic. Amazon is pretty great, for example, or Wikipedia. It falls down when content is substantially customized for each person, like the Facebook frontpage or a flight search result.

  • Event echoing: events aren’t based on any internal logic of the program, they are something initiated by the user. So if the user can do something, a remote user can do something. Form fields are the best example of this, as there’s a clear protocol for doing form changes (change the value, fire a change event).

But we don’t have:

  • Consistent event results: events aren’t state changes, and transferring events about doesn’t necessarily lead to a consistent experience. Consider the modest toggle control, where a click on the toggler element shows or hides some other element. If our hidden states are out of sync (e.g., my toggleable element is hidden, yours is shown), sending the click event between the clients keeps them consistently and perfectly out of sync.

  • Consistent underlying object models. In a single-page app of some sort, or a whatever fancy Javascript-driven webapp, a lot of what we see is based on Javascript state and models that are not necessarily consistent across peers. This is in contrast to old-school server-side apps, where there’s a good chance the URL contains enough information to keep everything consistent, and ultimately the “state” is held on a single server or database that both peers are connecting to. But we can’t sync the client’s object models, as they are not built to support arbitrary modification from the outside. Apps that use a real-time database work well.

To make this work the application usually has to support peer-to-peer collaboration to some degree. A messy approach can help, but can never be enough, not complete enough, not robust enough.

So peer-to-peer collaboration offers potentially more powerful and flexible kinds of collaboration, but only with work on the part of each application. We can try to make it as easy as possible, and maybe integrate with tools or libraries that support the kinds of higher-level synchronization we would want, but it’s never reliably easy.

Synchronized vs. Coordinated Experiences

Another question: what kind of experiences do we want to create?

The most obvious real-time experience is: everything sees the same thing. Everything is fully synchronized. In the screensharing model this is what you always get and what you have to get.

The obvious experience is probably a good starting point, but shouldn’t be the end of our thinking.

The trivial example here is the cursor point. We can both be editing content and viewing each other’s edits (close to full sync), but we don’t have to be at exactly the same place. (This is something traditional screensharing has a hard time with, as you are sharing a screen of pixels instead of a DOM.)

But other more subtle examples exist. Maybe only one person has the permission to save a change. A collaboration-aware application might allow both people to edit, while still only allowing one person to save. (Currently editors will usually be denied to people who don’t have permission to save.)

I think there’s fruit in playing with the timing of actions. We don’t have to replay remote actions exactly how they occurred. For example, in a Demonstration context we might detect that when the driver clicks a link the page will change. To the person doing the click the order of events is: find the link, focus attention on the link, move cursor to the link, click. To the viewer the order of events is: cursor moves, maybe a short click indicator, and boom you are at a new page. There’s much less context given to the viewer. But we don’t have to display those events with the original timing for instance we could let the mouse hover over its target for a more extended amount of time on the viewer.

High-level (application-specific) representation of actions could be available. Instead of trying to express what the other person is doing through every click and scroll and twiddling of a form, you might just say “Bob created a new calendar event”.

In the context of something like a bug tracker, you might not want to synchronize the comment field. Instead you might want to show individual fields for all participants on a page/bug. Then I can see the other person’s in-progress comment, even add to it, but I can also compose my own comment as myself.

This is where the peer-to-peer model has advantages, as it will (by necessity) keep the application in the loop. It does not demand that collaboration take one form, but it gives the application an environment in which to build a domain-specific form of collaboration.

We can imagine moving from screenshare to peer-to-peer through a series of enhancements. The first might be: let applications opt-in to peer-to-peer collaboration, or implement a kind of transparent-to-the-application screensharing, and from there tweak. Maybe you indicate some scripts should run on the viewer’s side, and some compound UI components can be manipulated. I can imagine with a component system like Brick where you could identify safe ways to run rich components, avoiding latency.

How do you package all this?

Given tools and interactions, what is the actual context for collaboration?

TogetherJS has a model of a persistent session, and you invite people to that session. Only for technical reasons the session is bound to a specific domain, but not a specific page.

In Hotdish we’ve used a group approach: you join a group, and your work clearly happens in the group context or not.

One of the interesting things I’ve noticed when getting feedback about TogetherJS is that people are most interested in controlling and adding to how the sessions are setup. While, as an implementor, I find myself drawn to the tooling and specific experiences of collaboration, there’s just as much value in allowing new and interesting groupings of people. Ways to introduce people, ways to start and end collaboration, ways to connect to people by role instead of identity, and so on.

Should this collaboration be a conversation or an environment? When it is a conversation you lead off with the introduction, the “hello” the “so why did you call?” and finish with “talk to you later” — when it is an environment you enter the environment and any coparticipants are just there, you don’t preestablish any specific reason to collaborate.

And in conclusion…

I’m still developing these ideas. And for each idea the real test is if we can create a useful experience. For instance, I’m pretty sure there’s some ambient information we want to show, but I haven’t figured out what.

Experience has shown that simple history (as in an activity stream) seems too noisy. And is history shown by group or person?

In the past I unintentionally exposed all tab focus and unfocus in TogetherJS, and it felt weird to both expose my own distracted state and my collaborator’s distraction. But part of why it was weird was that in some cases it was simply distraction, but in other cases it was useful multitasking (like researching a question in another tab). Was tab focus too much information or too little?

I am still in the process of figuring out how and where I can explore these questions, build the next thing, and the next thing after that — the tooling I envision doesn’t feel impossibly far away, but still more than one iteration of work yet to be done, maybe many more than one but I can only see to the next peak.

Who else is thinking about these things? And thinking about how to build these things? If you are, or you know someone who is, please get in contact — I’m eager to talk specifics with people who have been thinking about it too, but I’m not sure how to find these people.

by Ian Bicking at March 03, 2014 06:40 PM

Dave Winer

Why blogging is an amateur thing

A few days ago I tweeted: "Professional blogging --> no. It can be incidental. A professional reporter can blog. But being a blogger is not a professional thing."

At the time, I promised I'd write a blog post to explain. This is that post.

  1. It is possible for a professional reporter to blog, even when they're doing their job as a reporter. But it is not a professional act. A reporter might blog about what they learn being a reporter, or covering a certain story. The reporter is an expert on reporting, at least. But a reporter could also be an expert at model trains. Or skiing. Or even be a kibitzer about politics or sports. Expertise comes at all levels. Let's not judge someone as not being expert enough. If you have something to say, it's cool to say it, and a blog is a great place to say it.

  2. However, a blogger is not a reporter who uses WordPress. Yes it's a blogging system, but it's also a content management system, fully capable of running the web presence of all sizes of news organizations. How your writing is transmitted to readers has nothing to do with the act of writing news. It's a trivial distinction.

  3. What's the harm in letting reporters call themselves bloggers? Well, we need a word for a person who shares his or her expertise for free. And we have such a word -- blogger, which derives from the word weblog which was coined by an early blogger, Jorn Barger, and shortened by Peter Merholz to blog and adopted by the community, years before reporters started calling themselves bloggers.

  4. We need a word for what we do because it is an important activity. You can't understand how news works today without understanding the role that bloggers play. So in a sense professional reporters hurt themselves by usurping a term that meant something before they applied it to themselves.

  5. Why are bloggers important to reporters? Bloggers are your sources. They are the people who previous generations of reporters had to reach by telephone. These days reporters can skim hundreds of perspectives on the web, prioritized by search engines. The reach of reporters in the age of blogging is far greater that it was in the age of the telephone. Understanding this synergy is key to understanding how news will evolve in the future.

  6. But the real reason to let amateurs have this word is it's the right thing to do. It's fair. Reporters already have a word to describe what they do. Let us keep ours.

See also: Why blog?

March 03, 2014 05:21 PM

Greg Linden

More quick links

More of what caught my attention recently:
  • Cool new tech, especially for mobile, detecting gesture movements from the changes they make to ambient wireless signals, uses a fraction of the power of other techniques ([1] [2] [3])

  • Also for mobile: "The big trick here is ... two [camera] lenses with two different focal lengths. One lens is wide-angle, while the other is at 3x zoom ... magnify more distant subjects ... improved low-light performance ... noise is reduced ... just as we would if we had one big imaging sensor instead of two little ones ... [and] depth analysis allows ... [auto] blurring out of backgrounds in portrait shots, quicker autofocus, and augmented reality." ([1])

  • "These are not the first artificial muscles to have been created, but they are among the first that are inexpensive and store large amounts of energy" ([1])

  • "Tesla is a glimpse into a future where cars and computers coexist in seamless harmony" ([1])

  • "Fields from anthropology to zoology are becoming information fields. Those who can bend the power of the computer to their will – computational thinking but computer science in greater depth – will be positioned for greater success than those who can’t." ([1] [2])

  • The CEOs of Amazon, Facebook, Google, Microsoft, Twitter, Netflix, and Yahoo have CS degrees

  • Details on fixing What's so impressive is how much they changed the culture in such a short time, from a hierarchical structure where no one would take any responsibility to an egalitarian one where everyone was focused on solving problems. ([1])

  • Clever idea, advertise to find experts on the Web and then get them to answer questions for free by enticing them into playing a little quiz game ([1] [2])

  • "A key to Google’s epic success was the discipline the company maintained around its hiring ... During his first seven years, the executive team met every week to review every single hiring candidate." ([1] [2])

  • "Peter Norvig, Google's research director, said recently that the company employs 'less than 50% but certainly more than 5%' of the world's leading experts on machine learning" ([1])

  • Yahoo is trying to rebuild its research group, which was destroyed by its previous CEO ([1] [2] [3] [4] [5] [6])

  • Software increasingly needs to be aware of its power consumption, the cost of power, and the availability of power, and be able to reduce its power consumption when necessary ([1] [2])

  • "Viewers with a buffer-free experience watch 226% more and viewers receiving better picture quality watch 25% longer" ([1])

  • Gaming the most popular lists in the app stores: "Total estimated cost to reach the top ten list: $96,000" ([1] [2])

  • "The Rapiscan 522 B x-ray system used to scan carry-on baggage in airports worldwide ... runs on the outdated Windows 98 operating system, stores user credentials in plain text, and includes a feature called Threat Image Projection used to train screeners by injecting .bmp images of contraband ... [that] could allow a bad guy to project phony images on the X-ray display." ([1])

  • "It would appear that a surprising number of people use webcam conversations to show intimate parts of their body to the other person." ([1])

  • "Ohhh there's not another cable company, is there? Oh that's right we're the only one in town." ([1])

  • It "sounds like it's straight out of a sci-fi horror flick: they thawed some 30,000-year-old permafrost and allowed any viruses present to infect some cells" ([1])

  • Very funny if you (or your kids) are a fan of Portal, educational too, and done by NASA ([1])

  • NPR's "Wait Wait" did a segment on Amazon's "Customers who bought this", very funny ([1])

by Greg Linden ( at March 03, 2014 03:47 PM

March 02, 2014

Dave Winer

Knight News Challenge

This season's Knight News Challenge is going to fund projects that strengthen the free and open Internet. That's what we're doing at Small Picture and in the Fargo community.

I think that's a great idea! And I'd like to flip things around a bit. I'd like to help people who want to use Fargo, or the open source publisher software or outliner component, to do projects that help strengthen the Internet, and apply to Knight for funding.

Or maybe developing some compatible services on Dropbox, using templates, OPML or RSS. Or even making node.js servers easier for tech-savvy users to deploy.

Maybe you want to do JavaScript toolkit that flattens-out the various storage APIs: Box, Google Drive, Microsoft, Dropbox, etc?

It's a nice coincidence that Knight is focused on this now. If you have an idea you'd like to work on with our support or technology, either send me an email, or post a comment below.

I have a dream of having a real-world (not online) conference next summer with 15 teams working on these projects, and looking for all kinds of great ways to connect them together. I even have a venue in mind, and when you hear what it is it'll blow your mind.

A picture of a slice of cheese cake.

March 02, 2014 05:16 PM

Why blog?

A blog post has lasting value.

A tweet stream is more ephemeral, it can evaporate almost instantly.

Not saying that quick comments shouldn't be tweeted, but when you figure something out that's not trivial, if it has value, you're wasting it if you put it on Twitter or Facebook.

The mission of blogging is to empower all of us to go directly to each other with our expertise. So if you know something as well as anyone else, or you learn something or know something that should be shared, then you should share it on your blog.

Blogging needs your help. There's cobwebs in the blogosphere. I want to dust everything off, and start linking our stuff together, and get some developer energy flowing, and let's do some new stuff.

Blogging is a good idea. Most people aren't compelled to share their ideas, thinking, knowledge and expertise. But if you're one of them, please use the tools, or if they fall into disuse, we'll just have to invent them again. Let's keep it growing.

March 02, 2014 02:45 AM

Alex Schroeder

Wunschliste für schweizer Rollenspiel Treffen

Ich komme gerade von der IsliCon, einer kleinen Convention in der Nähe, wo ich eine Runde gespielt und eine Runde geleitet habe. Wie schon an der OerliCon beschlich mich ein seltsames Gefühl. Dieses mal war es noch stärker. Irgend etwas stimmt hier nicht. Es gibt mehrere Tische mit Spielen – hier in der Schweiz sind das oft nicht mehr als fünf oder sechs Tische – das ist aber schon zu viel für eine spontane Selbstorganisation. Wenn die eigene Runde zu lange dauert, schielt man neidisch zum anderen Tisch, wo eine neue Runde geboten wird. Wenn man dann mit einer Runde fertig ist, muss man etwas netzwerkeln, um eine neue Runde zu finden. Wenn man sich für ein System interessiert, welches andere Leute spielen, kann man nur für ein paar Sekunden zuschauen. Fragen stellen ist schwierig. Man trifft auf einsame Leute, die auf Spieler oder Spielleiter warten. Oft regelt sich alles spontan, aber eigentlich bin ich nicht zufrieden.

Ich wünsche mir feste Blöcke à drei oder vier Stunden, mit festen Pausen dazwischen, damit alle Leute gleichzeitig Spiele beginnen und beenden. Nur so können wir die langen Wartezeiten vermeiden. Wenn ein Spielleiter viele Stunden braucht, soll er sein Spiel halt für zwei Blöcke anbieten. Dann wissen die Spieler auch, worauf sie sich einlassen. Feste, gemeinsame Pausen erlauben es mir auch, mit dem Spieleiter von Star Wars: Edge of Empire zu quatschen. Ansonsten sind die Chancen gering, dass wir gerade gleichzeitig Pause machen.

Ich wünsche mir einen Aushang mit den geleiteten Spielen, mit Startzeiten und Namenslisten, so dass man sich organisieren kann. Noch besser, wenn das alles elektronisch geht. Das funktioniert bei der OerliCon eigentlich schon ganz gut.

Ich wünsche mir, dass Spielleiter an einer Convention ein straffes Spiel leiten. Dazu gehört, vorgenerierte Charaktere mit bringen, die Einführung abzukürzen, schnell auf den Punkt kommen, und den Spielern ein offensichtliches Ende aufzeigen, so dass sie selber das Tempo mitbestimmen können. Durch meine Spiele unter der Woche, wo wir in 2–3h Abends in ziemlicher Zeitnot spielen, hat mir schon extrem viel diesbezüglich beigebracht. Anfangen, abbrechen, abkürzen, antreiben, überspringen, … Manchmal habe ich das Gefühl, ich müsste mal ein Seminar machen. Teilnehmer leiten für zehn Minuten ihr Spiel, dann gibt es eine Runde Kritik. Ein Spiel an einer Convention kann nicht, darf nicht, gleich wie ein Spiel an einem Samstagnachmittag daheim ablaufen. Als ich nach zweidrittel von meiner Runde Pause machte und einen Kollegen fragte, wie es geht, meinte er nur, sie hätten jetzt endlich den Dungeon erreicht. Oje.

An der IsliCon fand ich super, wie es Früchte und Snacks, Soft Getränke, Wasser, Tee und Kaffee in einem Selbstbedienungskiosk gab. Ausgezeichnete Idee. Ich hoffe, es ist auch finanziell aufgegangen.

Was mir auch sehr gut gefällt ist die angebotene Systemvielfalt. Stars Wars, Barbaren, Pathfinder – es gab neben meinen eigenen Games on Demand eine grosse Auswahl. Für mich ist das Ausprobieren neuer Systeme eine grosse Motivation an einer Convention.

Tags: RSS

March 02, 2014 12:57 AM

March 01, 2014

Dave Winer

About software deals

  1. Software is a process.

  2. It's never finished. There are always bugs to fix, features to add.

  3. Usually, when one company buys another, they buy the software, not the process.

  4. It would be more realistic to contract with a developer or group of developers the way book publishers contract with authors, or studios contract with directors. You buy N books, or movies, or albums. Then the creative person gives you what they contracted for.

  5. Don't try to hire employees to make products. You need to be able to take creative risks. It's hard to do within a corporation. By "hard to do" I mean impossible.

  6. Unlike movies, books, music -- software continually evolves. So even if the initial creator moves on, there always has to be the equivalent of a show runner that stays with the product, the kind of person who does what Vince Gilligan did on Breaking Bad, for example.

  7. I've now moved on from two products, one through acquisition and one by passing off to a new management team. Both times the product died.

  8. I'm still trying to figure this out.

March 01, 2014 10:02 PM

Me, in Madison, in 1977

A throwbackthursday picture of me as a grad student at UW-Madison in 1977 or so, programming on a Unix system, probably working on my first outliner.

A picture named daveMadison1977.jpg

There was a nice Facebook thread re this picture.

March 01, 2014 02:04 PM

February 28, 2014

Dave Winer

The future of news, part II

A 14-minute podcast follow-up to the previous podcast on the future of news.


2000: How to make money on the Internet.

2009: Natural Born Bloggers.

We gave everyone a broadcast station and a printing press.

Not everyone does it.

Say 1 percent are NBBs.

They all can do it, but most don't want to.

News orgs will be machines for processing huge amounts of news, adding/teaching quality.

Evan Williams is doing this at Medium.

But I don't like that he has a bottleneck, that his publishing system requires that you write and store your writing on his servers.

February 28, 2014 07:51 PM

Lambda the Ultimate

Wirth Symposium

Celebrating Niklaus Wirth's 80th Birthday, 20th Feb 2014.

Niklaus Wirth was a Professor of Computer Science at ETH Zürich, Switzerland, from 1968 to 1999. His principal areas of contribution were programming languages and methodology, software engineering, and design of personal workstations. He designed the programming languages Algol W, Pascal, Modula-2, and Oberon, was involved in the methodologies of structured programming and stepwise refinement, and designed and built the workstations Lilith and Ceres. He published several text books for courses on programming, algorithms and data structures, and logical design of digital circuits. He has received various prizes and honorary doctorates, including the Turing Award, the IEEE Computer Pioneer, and the Award for outstanding contributions to Computer Science Education.

We celebrated Niklaus Wirth's 80th birthday at ETH Zürich with talks by Vint Cerf, Hans Eberlé, Michael Franz, Bertrand Meyer, Carroll Morgan, Martin Odersky, Clemens Szyperski, and Kathleen Jensen. Wirth himself gave a talk about his recent port of Oberon onto a low-cost Xilinx FPGA with a CPU of his own design.

The webpage includes videos of the presentations.

February 28, 2014 01:47 PM

February 27, 2014

Lambda the Ultimate

Determinism Is Not Enough: Making Parallel Programs Reliable with Stable Multithreading

Junfeng Yang, Heming Cui, Jingyue Wu, Yang Tang, and Gang Hu, "Determinism Is Not Enough: Making Parallel Programs Reliable with Stable Multithreading", Communications of the ACM, Vol. 57 No. 3, Pages 58-69.

We believe what makes multithreading hard is rather quantitative: multithreaded programs have too many schedules. The number of schedules for each input is already enormous because the parallel threads may interleave in many ways, depending on such factors as hardware timing and operating system scheduling. Aggregated over all inputs, the number is even greater. Finding a few schedules that trigger concurrency errors out of all enormously many schedules (so developers can prevent them) is like finding needles in a haystack. Although Deterministic Multi-Threading reduces schedules for each input, it may map each input to a different schedule, so the total set of schedules for all inputs remains enormous.

We attacked this root cause by asking: are all the enormously many schedules necessary? Our study reveals that many real-world programs can use a small set of schedules to efficiently process a wide range of inputs. Leveraging this insight, we envision a new approach we call stable multithreading (StableMT) that reuses each schedule on a wide range of inputs, mapping all inputs to a dramatically reduced set of schedules. By vastly shrinking the haystack, it makes the needles much easier to find. By mapping many inputs to the same schedule, it stabilizes program behaviors against small input perturbations.

The link above is to a publicly available pre-print of the article that appeared in the most recent CACM. The CACM article is a summary of work by Junfeng Yang's research group. Additional papers related to this research can be found at

February 27, 2014 08:10 PM

Dave Winer

Facebook vs Twitter in conversation

Here's a great A-B example.

I posted the same image to Twitter and Facebook.

On Twitter, a nothing.

On Facebook, a discussion!

It's even worse

Many of the comments I get on Twitter are really for someone else -- they're responding to the headline of a link I've posted, that I didn't write.

And they're very often not responding to the story, just to the headline. And they respond as if I'm the author. Always leads to misunderstanding. Example.

And 140-characters is a severe limit for people who are good writers, for people who aren't good writers (i.e. most people) it's impossible to understand what they mean.

So you have to ask for clarification, if you have the patience, and the follow-ups are usually just as cryptic.

I think Twitter is a failed experiment. Something about its limits needs to be eased. Or maybe it's time to start over, with a different idea altogether.

Another A-B example

A Facebook discussion emanating from a picture of me as a grad student in 1977, programming in the Unix lab at UW-Madison.

The same picture posted on Twitter.

February 27, 2014 06:46 PM

Mark Bernstein

Alarming Development

The revolution will be screencast

Richard Gabriel and I are planning a workshop at SPLASH focused on screencast demos: The Future Programming Workshop. This will be a workshop in the sense of a writer’s workshop: the participants will present their talks/demos and the group will critique them. After the workshop people will revise their screencasts to be published on our website. Please signup at the website if you are interested.

Increasingly, new programming ideas show up first as video talks and screencast demos, long before any papers get written. A good example is Bret Victor’s videos. My own screencasts have led to far more interaction than my papers. Frankly, writing papers is really hard, especially for raw new ideas. Non-academics often struggle to write papers, effectively excluding them from the conversation. The point of this workshop is to foster the exchange of radical new programming ideas in their formative stage, via the medium of screencasts. We hope to build a community of explorers at the frontier of programming. Please join us.

by Jonathan Edwards at February 27, 2014 06:02 PM

Dave Winer

It's all about point of view

Other people's long distance travel is virtually instantaneous.

For example, I just saw a post from NakedJen saying that she's leaving Paris. I expect to see a post from her in a few minutes saying she's home in Salt Lake City.

You'll see. It'll happen almost in the blink of an eye!

February 27, 2014 03:51 PM

Alex Schroeder

Games on Demand für IsliCon

Letztes Jahr hatte ich ein paar Indie Games für die OerliCon dabei. Ich liess mich dabei von der Games on Demand Bewegung inspirieren. Kommenden Samstag will ich das gleiche für die IsliCon machen. Vor dem Wochenende muss ich meine Notizen nochmal durchlesen und mir überlegen, was ich alles mitnehmen will. Und was ich alles ausdrucken muss. :)

Was ich leiten will:

Was ich zeigen kann:

Update: Das nächste Mal muss ich unbedingt Pokerchips oder sonstige farbige Tokens dabei haben, mit den die Spieler sich gegenseitig das Vertrauen aussprechen können. Die drei Spalten mit “your trust in them”, “their trust in you” und “points” ist jedes Mal verdammt verwirrend.


February 27, 2014 08:32 AM

Dave Winer

An almost perfect hit

Speaking of perfectly targeted ads.

Here's a screen shot of a NYT article about Raymond Felton of the Knicks.

And in the right margin an ad for a tech conference put on by O'Reilly.

I would put in my profile something like this: "No more offers of tech conferences that don't include speaking offers."

That would be what Doc Searls calls a "conversation."

We're getting closer.

Pbump's story

Reminds me of a story about me, John Doerr, Google and Philip Bump.

A long time ago I wrote a story about John Doerr, and it ranked very high on Google in a search for John Doerr. I joked that my investment in Doerr was doing well. As if "owning" him on Google had some dollar value.

Philip Bump, a clever dude, bought an adword next to that search, knowing that I would look at it, and the ad said "Hey Dave Winer..." I laughed. But that's as perfect as targeting can get. He had a market of one. And I actually did see it and loved the attention.

He now writes for The Atlantic, and he told me the story when I went down there to visit last year.

February 27, 2014 02:31 AM

February 26, 2014

Dave Winer

Perfectly targeted ads

In today's podcast/blog post this line is the one that resonated most with people.

Perfectly targeted ads are just information.

But it's not the first time this idea has appeared on

In 2006, I wrote a piece entitled "Making money with ads? Not much longer..."

Here's the key paragraph:

When they finish the process of better and better targeted advertising, that's when the whole idea of advertising will go poof, will disappear. If it's perfectly targeted, it isn't advertising, it's information. Information is welcome, advertising is offensive. Who wants to pay to create information that's discarded? Who wants to pay to be a nuisance? Wouldn't it be better to pay to get the information to the people who want it? Are you afraid no one wants your information? Then maybe you'd better do some research and make a product that people actually want to know about.

February 26, 2014 11:42 PM

Lambda the Ultimate


It is increasingly important for applications to protect user privacy. Unfortunately, it is often non-trivial for programmers to enforce privacy policies. We have developed Jeeves to make it easier for programmers to enforce information flow policies: policies that describe who can see what information flows through a program. Jeeves allows the programmer to write policy-agnostic programs, separately implementing policies on sensitive values from other functionality. Just like Wooster's clever valet Jeeves in Wodehouse's stories, the Jeeves runtime does the hard work, automatically enforcing the policies to show the appropriate output to each viewer.

From what I gather, Jeeves takes Aspect Oriented approach to privacy. This is of course not a new idea. I presume that many of the classic problems with AOP would apply to Jeeves. Likewise, using information flow analysis for handling privacy policies is not an new idea. Combining the two, however, seems like a smart move. Putting the enforcement at the run-time level makes this sound more practical than other ideas I have heard before. Still, I personally think that specifying privacy policies at the end-user level and clarifying the concept of privacy at the normative, legal and conceptual levels are more pressing concerns. Indeed, come to think of it: I don't really recall a privacy breach that was caused by a simple information flow bug. Privacy expectations are broken on purpose by many companies and major data breaches occur when big databases are shared (recall the Netflix Prize thing). Given this, I assume the major use-case is for Apps, maybe even as a technology that someone like Apple could use to enforce the compliance of third-party Apps to their privacy policies.

I haven't looked too closely, so comments from more informed people are welcome.

Jeeves is implemented as an embedded DSL in Scala and Python.

February 26, 2014 06:33 PM

Dave Winer

The future of news

I read two pieces today that stimulated a 14-minute podcast.

The two pieces

  1. Jeff Jarvis: Philanthropy and news.

  2. Marc Andreessen on the future of the news business.

Basic ideas

  1. 20th century news was about information flowing through small numbers of reporters to large numbers of readers.

  2. This was necessitated by the technology, which was one-to-many.

  3. 21st century technology doesn't have this limit.

  4. Advertising is evolving, it's becoming more like a todo list to follow up on the things you're interested in.

  5. Eventually you will be able to write your own queries, and have companies make offers to you. This is the model Doc Searls has been talking about for years.

  6. Perfectly targeted ads are just information.

  7. News organizations will evolve too.

  8. Their mission is to make information flow effective.

  9. To facilitate, as before, but with far more writers. Open, like Wikipedia is open.

  10. The quality of a news org will be in its writing, research, integrity. Their challenge is to scale that to meet the demand, and the capabilities of the new technology.

  11. Old thinking -- news writing is exclusive.

  12. New way -- news is written by many (but nowhere near everyone).

  13. The power of a news organization is limited by the capacity of the wires. An organization like the NYT has more than a small interest in making the infrastructure of Manhattan world class. Right now it's far from it.


  1. It's kind of amazing that Bloomberg of all people didn't get this. He was a three-term mayor, while NYC fell far behind the rest of the world.

February 26, 2014 06:20 PM

Mark Bernstein

Views and The Single Responsibility Principle (very wonkish)

In object-oriented design, the single responsibility principle states that a class should do one thing, or more specifically that a class should have one reason to change. This has been much discussed lately, for example in this discussion of controllers, or in the premiere issue of the estimable It’s a touchstone of refactoring and a central rubric of clean code.

And it’s a true headache.

Take Tinderbox Six and its map view.

Views and The Single Responsibility Principle (very wonkish)

The framework expects that the view do several things:

  • draw itself, which primarily means drawing the links and the focus indicator.
  • manage its subviews, creating them as they scroll into view, recycling them when they are removed from sight, and handling the timer and view controller for the hover expression.
  • receive mouse clicks and other events.
  • handle things dragged and pasted from other windows or applications.

If you let TbxMap do all those things, it becomes a monster class. Refactoring should be capable of fixing things. But can it?

Simplifying a View

In Tinderbox Six, I began by moving all the event-handling logic from TbxMap to its controller. That’s a win, though a bunch of small methods need to remain in TbxMap to forward events it receives to the controller. (The controller is quickly bloated by this refactoring, of course, and moves all those command handlers to dedicated helper objects — each requiring a tiny stub of its own.)

Then, I moved lots of drawing logic to dedicated classes. The drag highlights that appear when dragging a note over a container move to DragHighlighter. All the layout and drawing of links moves to LinkAnimator. All the logic for figuring out what the user is dragging into Tinderbox and what to do with the stuff moves to a class cluster behind TbxDrag. This slims TbxMap down considerably. Again, tiny stub methods must be left behind because the framework, or other classes in Tinderbox, expect the view to receive them, but all the work is done by small dedicated classes.

More recently, I pulled just about all the remaining logic from TbxMap into a collection of helper classes known only to the map view.

Views and The Single Responsibility Principle (very wonkish)
Click here for full size

Remember, this is just the part of Tinderbox that draws maps and outlines and charts.

The helper classes are the blue lozenges; I've suppressed lots of detail for (comparative) clarity. The Layout helper knows where things go; the Valet knows how to put them away when they’re off-screen and how to fetch them again when needed, the Locator knows how to locate them for the Find Bar, the Selector knows how to select them. They each talk mostly to the TbxMap (and the underlying data, of course). TbxMap is now, essentially, a hollow shell, with almost no logic beyond relaying incoming methods to the appropriate helper. It’s a collection of stubs, plus some initialization and teardown logic.

To be precise, it’s a collection of 182 stubs.

182 stubs!

This is madness, of course, but it’s the natural tendency of the natural refactorings. Sprouted classes need to use the original class as a Facade so other classes can use them. So each sprout removes a pile of logic and replaces it with a few simple methods. Those methods pile up. The helpers often need to interact with other helpers; if you don’t want a terrible tangle of interdependent helper classes, you’re going to need to use the TbxMap as a Facade between the helpers.

The alternative is to provide other classes with direct access to the helper class. This means we only need one or two accessors for the helper, but now the clients need to depend on the helper class. And they still need TbxMap, because that’s where they get the helper. And every time they use the helper, they smell of feature envy and indecent exposure and they violate the Law of Demeter.

It’s not just Cocoa. Every window system that ever lived suffers from something like this affliction. Either the system routes everything through the view (or the controller) , which leaves a complex view looking like an old-fashioned switchboard operator, or instantiating a simple pane makes you create a whole slew of of handlers and delegates and thumgummies, and that drives programmers bats. Remember OpenDoc?

A Path Forward?

I can envision some ways to make this better. TbxMap is acting as a Facade or Mediator between lots of disparate classes; we might split out the role of coordinating the helpers into one object and the role of serving the Controller and the rest of the system into another. That might help — or might just entangle all the helpers with each other.

I can envision that I’ve simply hit the wrong set of abstractions, and that some other collection of helpers would suggest a natural way for the helpers to work together without knowing too much about each other. But I’m skeptical.

It’s possible that the Tinderbox Map is just too complicated. Again, though, I’m skeptical: it hardly seems that complex; it’s just shapes and links and annotations.

I’m really surprised that there’s not more literature on this conflict between proliferating sprouted classes and the Law of Demeter. I’ve read the obvious sources: Fowler, Beck, Feathers, Kerievsky, Bob Martin, the Pragmatics. Surely, someone has a more extensive discussion?

February 26, 2014 05:56 PM

Tim Ferriss

My Latest Obsessions: Voodoo Floss, Pu-Erh Tea, Electronic Gypsy Music, and More

One video letter from my quarterly mailings.

Every three months, I ship out a box of wonderful physical products, along with a video “letter” explaining how I found them and how I use them.

One such video letter is above.

The theme of these quarterly mailings is obsession–the ideas and objects I can’t get out of my head.

Obsessions enter my life from odd places.  Currently, my gadgets and gear recommendations are coming from Cirque du Soleil performers, chess prodigies, Fortune 500 CEOs, and military snipers.  It’s the randomness that makes it fun.

More than 1,500 people subscribe to these boxes through They are making 130 more slots available for my next shipment, which is going to be killer. You can subscribe here. If you miss TIM05, you’ll be first in line for TIM06.

Below, I describe the goodies from the last two boxes, so you can explore them a la carte.


[Note for those asking about the TFX TV show -- 13 episodes are coming soon, plus extras for iTunes season pass holders!]

Box TIM04

Scroll to below the photos for descriptions and links.

TIM04_001 TIM04_002 TIM04_009 TIM04_013 TIM04_012 TIM04_003 TIM04_010 TIM04_008 TIM04_004 TIM04_006

1. Vagabonding book — one of my all-time favorites — signed by author Rolf Potts - This is one of two books I took around the world with me for approximately 18 months. I love it so much that I bought the rights to the audiobook, worked with Rolf to add new case studies, and had him narrate an updated version. Listen to a free sample here.

2. Soma Water Filter - The water filter I use and show off to friends. More details in the video at the top of this post.

3. STX Lacrosse Ball - My all-around fix for muscular issues including foot ache (e.g. plantar fasciitis), tight chest (which can cause back pain), and more.

4. Rogue Fitness VooDoo Floss Band - This contraption is half torture and half miracle. Created by Kelly Starrett of SF CrossFit, it has helped me turn around nasty injuries in 24-48 hours.

5. Blue Bottle Coffee, 17ft. Ceiling - One of my favorite coffee beans from one of my favorite roasters on the planet. I like to hand grind and then brew using an AeroPress.

6. Red Blossom Pu-erh Tea - This is the tea I currently drink every morning, especially when experimenting with Intermittent Fasting (IF).

Box TIM03

TIM03_001 TIM03_002 TIM03_003 TIM03_007

This box was an experiment that included both physical and digital items, including one-of-a-kind remixes and welcome videos from band members and movie directors.

Even excluding the value of the 15 extra and remixed songs from Beats Antique, the People in Motion extras, and the Kumare extras, the box has a retail value of $209.25.

1. Clean Bottle, The Square, $45.00 — My favorite water bottle, bar none. Click the link to see how easy it is to clean. Genius.

2. The Five Minute Journal , $22.95. This is how I’ve been practicing gratitude and focus for months now. 2.5 minutes in the morning, another 2.5 minutes at night. Simple and effective.

3. Steve’s Grass-Fed Paleostix, $5.50. Need a slow-carb or Paleo snack? This one will do the trick.

4. CLEAR card, 4 months free trial, $60 value. This is how I skip airport security lines, saving my sanity and hundreds of hours a year.

5. Kumare, $21.73, including two albums of unreleased music, as well as behind-the-scenes photos. This is one of my favorite documentaries of the last 5 years. It blends reality and illusion into an amazing fabric. Check it out.

6. Beats Antique custom drive containing 7 (!) of their albums, as well as a special group of remixes and extras. I fell in love with Beats Antique at one of their live performances in SF. Their “electronic gypsy” music (as they’d describe it), combined with sensual dance, was mesmerizing.

To understand exactly what I mean, skip to 7:15 in the below video for one of my favorite songs (“Beauty Beats“). For the full sexy, play all 25+ minutes in the background while you work:

Here are the albums I included in the box:

Collide 2008, $8.99

Tribal Derivations 2007, $8.99

Contraption (EP Vol.1), $6.23

Contraption, Vol. II 2012, $7.92

Blind Threshold 2010, $8.99

Elektrafone 2011, $8.99

The Trunk Archives, $3.96

7. People in Motion – Documentary on parkour and freerunning, including custom-designed bracelet drive and extras.


Want to get the next box of random goodness?  Just sign up here! Wait until you see what’s coming…

Question of the day: What types of items would you like to see in future Quarterly mailings and blog posts like this?

by Tim Ferriss at February 26, 2014 09:13 AM

Blue Sky on Mars

Only 90s Web Developers Remember This

Please sign my guestbook.

Have you ever shoved a <blink> into a <marquee> tag? Pixar gets all the accolades today, but in the 90s this was a serious feat of computer animation. By combining these two tags, you were a trailblazer. A person capable of great innovation. A human being that all other human beings could aspire to.

You were a web developer in the 1990s.

With that status, you knew you were hot shit. And you brought with you a score of the most fearsome technological innovations, the likes of which we haven't come close to replicating ever since.

Put down the jQuery, step away from the non-relational database: we have more important things to talk about.


1x1.gif should have won a fucking Grammy. Or a Pulitzer. Or Most Improved, Third Grade Gym Class or something. It's the most important achievement in computer science since the linked list. It's not the future we deserved, but it's the future we needed (until the box model fucked it all up).

If you're not familiar with the humble 1x1.gif trick, here it is:

Can't see it? Here, enhance:

The 1x1.gif — or spacer.gif, or transparent.gif — is just a one pixel by one pixel transparent GIF. Just like the most futuristic CSS framework of today but in a billionth of the file size, 1x1.gif is fully optimized for the responsive web. You had to use these advanced attributes to tap into its power, though:

<IMG SRC="/1x1.gif" WIDTH=150 HEIGHT=250>

By doing this you can position elements ANYWHERE ON THE PAGE. Combine this with semantically-appropriate containers and you could do amazing things:

    <TD><IMG SRC="1x1.gif" WIDTH=300>
    <TD><FONT SIZE=42>Hello welcome to my <MARQUEE>Internet Web Home</MARQUEE></FONT>
    <TD BGCOLOR=RED><IMG SRC="/cgi/webcounter.cgi">

1x1.gif let you push elements all around the page effortlessly. To this day it is the only way to vertically center elements.


Are images too advanced for you? HTML For Dummies doesn't cover the <IMG> tag until chapter four? Well, you're in luck: the &nbsp; tag is here!

You may be saying to yourself, "Self, I know all about HTML entity encoding. What is this dastardly handsome man going on about?"

The answer, dear reasonably attractive reader, is an innovation that youth of today don't respect nearly enough: the stacked &nbsp;. Much like the 1x1.gif trick, you can just arbitrarily scale &nbsp; for whatever needs you may face:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MY GUESTBOOK BELOW:

If I had a nickel for how many times I wrote &nbsp; in the 90s, I'd have enough money to cover the monthly overage bills from AOL.

Dotted underlines, border effects

Towards the end of the golden era of HTML, CSS appeared on the scene, promising a world of separating content from style, and we've been dealing with that disaster ever since.

The absolute first thing we did with CSS was use it to stop underlining links. Overnight, the entire internet converted into this sludge of a medium where text looked like links and links looked like text. You had no idea where to click, but hell that didn't really matter anyway because we had developed cursor effects (you haven't lived until your mouse had a trail of twelve fireballs behind it).

This was such a compelling use of advanced technology that it was literally all we used CSS for initially. I even have proof from an index.shtml (fuck yes SSI) file from 2000:

<style type="text/css">
a:hover {text-decoration: none; color: #000000}

That's it. That's the entire — inline, of course — CSS for this file. Make sure when you hover the link, remove the underline and paint it black. From this, entire interactive websites are born.


As soon as we had the technology to remove underlines from links, we decided to combine it with the power to show alert("Welcome to my website!") messages on page load. CSS and JavaScript joined forces to form the Technology of Terror: DHTML.

DHTML, which stands for "distributed HTML", was the final feather in our cap of web development tools. It would stand the test of time, ensuring that we could make snowflakes fall from the top of the page, or build an accordion menu animated image map, or building your own custom <marquee> except using semantic tags like <div>.

DHTML helped transition web development from a hobbyist pastime into a full-fledged profession. Sites like Dynamic Drive meant that instead of thinking through creative solutions for problems you face, you could just copy and paste this 50 line block of code and everything would be fixed. In effect, DHTML was the Twitter Bootstrap of the time.

Pixel fonts

Computer screens were not large. I mean, they were large, since CRT was the shit, but they didn't have a high resolution. Therefore, the best way to leverage those pixels is to write everything in tiny six-point font.

Along those lines, web developers aspired to become illustrators when they looked at these simplistic typefaces and realized they were made up of pixels. You started to see these weird attempts at isometric pixel illustration on splash screens, made by developers whose time and money was probably better spent investing in a .com IPO rather than installing Photoshop.


It's come to my attention that people today don't like Internet Explorer. I can only believe they hate Internet Explorer because it has devolved from its purest form, Internet Explorer 4.0.

Internet Explorer 4.0 was perfection incarnate in a browser. It had Active Desktop. It had Channels. It had motherfucking Channels, the coolest technology that never reached market adoption ever not even a little bit. IE4, in general, was so good that you were going to have it installed on your PC whether you liked it or not.

When you're part of an elite group of people who fully understand the weight of perfection, there is a natural tendency to tell everyone you meet that you and you alone have the gravitas necessary to make these hard decisions. Decisions like what browser your visitors should use.

So we proudly displayed dozens of 88x31 pixel buttons on our sites:

These were everywhere. It's kind of like the ribbons displayed on a uniform of a military officer: they told the tale of all the battles the individual had fought in order to get to where they were today. In other words, which editor (FrontPage '98, obviously), which web server (GeoCities, you moron), and which web ring you were a part of (whichever listed your site highest, which was none of them).

I miss the good ol' days. Today we have abstractions on top of abstractions on top of JavaScript, of all things. Shit doesn't even know how to calculate math correctly. It's amazing we ever got to where we are today, when you think about it.

So raise a glass proudly, and do us all a favor: paste a shit ton of &nbsp;s into your next pull request, just to fuck with your team a little bit.

February 26, 2014 08:00 AM

February 25, 2014

Dave Winer

Melo's creativity

I'm a Knicks fan. I spent the winter in denial, but gradually as the season progressed, I realized I was following them more closely than any other team. And identifying with their ups and downs. And this year of course it's been mostly downs. It's okay. I was a Mets fan too.

I have some weird theories about the fortunes of the Knicks. I think last year they did well because they had Jason Kidd at guard. It seems like a very long time ago. This year, they have a void at point guard. And their star, Carmelo Anthony, needs a great point guard to work with. Pretty simple reason for this. Someone has to know who else is hot on the floor and make sure they get the ball almost as much as Melo. Otherwise the other team just double or even triple-teams Melo. It's easy to defend a team that has just one shooter, even if he's the best shooter in the league, as it is pretty clear Melo is (either #1 or #2).

But Kidd turned 40 last season, so they knew it couldn't last. If Melo had been a bit more open-minded, I think he would have seen that Jeremy Lin, with his sharp eyes and mind, would have been a good student of Kidd's and a good distributor of the ball for a team that tends to rely too much on Melo.

I think this is a lesson for everyone in business or sport, anywhere creativity and seizing the moment matters. Don't always look for the answer where you expect it. Lin wasn't one of Melo's classmates from 2003. Melo is a superstar. But he could have forged a partnership with Lin, made him his little buddy, and and built from there. It's amazing to see what Houston was able to do with creativity, and how it led to their signing of two players who, if they were playing with Melo, might have made New York, along with Anthony, a championship contender. The Knicks might not have been able to afford Dwight Howard and James Harden, but then New York is the center stage in the basketball world, and Houston is a backwater. But they're a backwater with a team we would love to have in New York.

February 25, 2014 10:00 PM

A conference of technologists

I've spent the last couple of years learning about JavaScript development in the browser and on servers. Now I wish I could go back in time and talk to myself five years ago and explain the weirdness of this kind of programming. It would have saved a lot of time and wasted confusion.

I'd like to go to a conference once a year, where I hear from people who are developing apps in other environments, and have them explain the significance of their work, relying on my understanding of basic computer science principles. I understand databases, network protocols, languages, user interface, web apps, content management.

Here's an example, where Brent Simmons explains how he's working on his new database synchronization technology.

We have lots of conferences for tech marketers and investors. We have conferences for specific technologies, and various companies have developer conferences. O'Reilly has tried to cut across the disciplines, but they don't welcome everyone equally.

I want the kind of conference they have in academia, once a year, where leading technologists get together for a few days, get on stage and tell us what they've discovered and developed. I know we need this because I find huge gaps in what I know about.

I can understand things much more quickly if they're explained by people who know what they're talking about. I want to meet the leaders of other communities, shake their hands, and get to know them, so we can work together more effectively in the future.

February 25, 2014 03:25 PM

February 24, 2014

Mark Bernstein

The Sons Of Martha

THE SONS OF MARY seldom bother, for they have inherited that good part;

But the Sons of Martha favour their Mother of the careful soul and the troubled heart.

And because she lost her temper once, and because she was rude to the Lord her Guest,

Her Sons must wait upon Mary’s Sons, world without end, reprieve, or rest.


It is their care in all the ages to take the buffet and cushion the shock.


It is their care that the gear engages; it is their care that the switches lock.

It is their care that the wheels run truly; it is their care to embark and entrain,

Tally, transport, and deliver duly the Sons of Mary by land and main.


They say to mountains “Be ye removèd.” They say to the lesser floods “Be dry.”

Under their rods are the rocks reprovèd—they are not afraid of that which is high.

Then do the hill-tops shake to the summit—then is the bed of the deep laid bare,

That the Sons of Mary may overcome it, pleasantly sleeping and unaware.


They finger Death at their gloves’ end where they piece and repiece the living wires.

He rears against the gates they tend: they feed him hungry behind their fires.

Early at dawn, ere men see clear, they stumble into his terrible stall,

And hale him forth like a haltered steer, and goad and turn him till evenfall.


To these from birth is Belief forbidden; from these till death is Relief afar.

They are concerned with matters hidden—under the earthline their altars are—

The secret fountains to follow up, waters withdrawn to restore to the mouth,

And gather the floods as in a cup, and pour them again at a city’s drouth.



They do not preach that their God will rouse them a little before the nuts work loose.

They do not preach that His Pity allows them to drop their job when they damn-well choose.

As in the thronged and the lighted ways, so in the dark and the desert they stand,

Wary and watchful all their days that their brethren’s ways may be long in the land.


Raise ye the stone or cleave the wood to make a path more fair or flat;


Lo, it is black already with the blood some Son of Martha spilled for that!

Not as a ladder from earth to Heaven, not as a witness to any creed,

But simple service simply given to his own kind in their common need.


And the Sons of Mary smile and are blessèd—they know the Angels are on their side.

They know in them is the Grace confessèd, and for them are the Mercies multiplied.


They sit at the feet—they hear the Word—they see how truly the Promise runs.

They have cast their burden upon the Lord, and—the Lord He lays it on Martha’s Sons. —Rudyard Kipling

February 24, 2014 05:11 PM


Someone at Apple – possibly an NSA mole or possibly just an inattentive programmer – made a mistake and left a security hole in iPhone and Macintosh software. The new iPhone update closes the hole; a Mac update is doubtless en route.

Here’s the code. The key passage is:

if(…the certificate checks out…) 
     goto fail;
     goto fail;

Things to keep in mind:

  • Whether or not it was the work of a double agent, this coding blunder will be a legend, a staple of Introduction to Programming for decades to come.
  • It’s interesting that we’re at a point where we can talk about an engineer at a computer company as a double agent, and everyone understands.
  • This is not likely to affect your privacy. The bug makes it easier for the government to spy on your computer, but it’s not trivial: it probably means a team of people whose job is to bring you down. If the feds want you that badly, it’s likely that they could burgle your house, blackmail your maiden aunt, or threaten your kids.
  • But of course, if your computer has secrets that the government would pay serious money to know, this is another reminder.
  • I’m with Gruber: the most likely scenario is that someone got sloppy, and an automated testing program at NSA noticed the mistake and said “Look! They forgot to latch the door.”
  • I never got onto the Structured Programming bandwagon, but it’s been a decade since I used a goto. There are no gotos in Tinderbox. I do use the unbracketed if statement, which is subject to the same kind of blunder, and actually need to fix one of these every year or two.
  • This is an example of a particularly insidious class of bugs. Most of the time, this kind of mistake (a) won’t compile, or (b) crashes right away. Some of the time, this kind of mistake makes no difference. Whoever did this was really unlucky.

February 24, 2014 04:46 PM

Dave Winer

What's better than exporting?

People like blogging software that allows them to export their content.

In Fargo 2 we do that, and take it one step further. Your content is always exported. It's the only format for the content.

For example, here's the exported content of Scripting News.

How did I get it?

  1. Click on the tab with Scripting News content.

  2. Choose Get Public Link from the File menu.

  3. Click OK to confirm.

  4. Copy the URL.

  5. Paste it into the post.

It took about five seconds.


We are radical about empowering users. It's your content. You shouldn't have to export it.

February 24, 2014 02:09 PM

Decyphering Glyph


The Oak and the Reed by Achille Michallon

… that which is hard and stiff
is the follower of death
that which is soft and yielding
is the follower of life …

– the Tao Te Ching, chapter 76

Problem: Threads Are Bad

As we know, threads are a bad idea, (for most purposes). Threads make local reasoning difficult, and local reasoning is perhaps the most important thing in software development.

With the word “threads”, I am referring to shared-state multithreading, despite the fact that there are languages, like Erlang and Haskell which refer to concurrent processes – those which do not implicitly share state, and require explicit coordination – as “threads”.

My experience is mainly (although not exclusively) with Python but the ideas presented here should generalize to most languages which have global shared mutable state by default, which is to say, quite a lot of them: C (including Original Recipe, Sharp, Extra Crispy, Objective, and Plus Plus), JavaScript, Java, Scheme, Ruby, and PHP, just to name a few.

With the phrase “local reasoning”, I’m referring to the ability to understand the behavior (and thereby, the correctness) of a routine by examining the routine itself rather than examining the entire system.

When you’re looking at a routine that manipulates some state, in a single-tasking, nonconcurrent system, you only have to imagine the state at the beginning of the routine, and the state at the end of the routine. To imagine the different states, you need only to read the routine and imagine executing its instructions in order from top to bottom. This means that the number of instructions you must consider is n, where n is the number of instructions in the routine. By contrast, in a system with arbitrary concurrent execution – one where multiple threads might concurrently execute this routine with the same state – you have to read the method in every possible order, making the complexity nn.

Therefore it is – literally – exponentially more difficult to reason about a routine that may be executed from an arbitrary number of threads concurrently. Instead, you need to consider every possible caller across your program, understanding what threads they might be invoked from, or what state they might share. If you’re writing a library desgined to be thread-safe, then you must place some of the burden of this understanding on your caller.

The importance of local reasoning really cannot be overstated. Computer programs are, at least for the time being, constructed by human beings who are thinking thoughts. Correct computer programs are constructed by human beings who can simultaneously think thoughts about all the interactions that the portion of the system they’re developing will have with other portions.

A human being can only think about seven things at once, plus or minus two. Therefore, although we may develop software systems that contain thousands, millions, or billions of components over time, we must be able to make changes to that system while only holding in mind an average of seven things. Really bad systems will make us concentrate on nine things and we will only be able to correctly change them when we’re at our absolute best. Really good systems will require us to concentrate on only five, and we might be able to write correct code for them even when we’re tired.

Aside: “Oh Come On They’re Not That Bad”

Those of you who actually use threads to write real software are probably objecting at this point. “Nobody would actually try to write free-threading code like this,” I can hear you complain, “Of course we’d use a lock or a queue to introduce some critical sections if we’re manipulating state.”

Mutexes can help mitigate this combinatorial explosion, but they can’t eliminate it, and they come with their own cost; you need to develop strategies to ensure consistent ordering of their acquisition. Mutexes should really be used to build queues, and to avoid deadlocks those queues should be non-blocking but eventually a system which communicates exclusively through non-blocking queues effectively becomes a set of communicating event loops, and its problems revert to those of an event-driven system; it doesn’t look like regular programming with threads any more.

But even if you build such a system, if you’re using a language like Python (or the ones detailed above) where modules, classes, and methods are all globally shared, mutable state, it’s always possible to make an error that will affect the behavior of your whole program without even realizing that you’re interacting with state at all. You have to have a level of vigilance bordering on paranoia just to make sure that your conventions around where state can be manipulated and by whom are honored, because when such an interaction causes a bug it’s nearly impossible to tell where it came from.

Of course, threads are just one source of inscrutable, brain-bending bugs, and quite often you can make workable assumptions that preclude you from actually having to square the complexity of every single routine that you touch; for one thing, many computations don’t require manipulating state at all, and you can (and must) ignore lots of things that can happen on every line of code anyway. (If you think not, when was the last time you audited your code base for correct behavior in the face of memory allocation failures?) So, in a sense, it’s possible to write real systems with threads that perform more or less correctly for the same reasons it’s possible to write any software approximating correctness at all; we all need a little strength of will and faith in our holy cause sometimes.

Nevertheless I still think it’s a bad idea to make things harder for ourselves if we can avoid it.

Solution: Don’t Use Threads

So now I’ve convinced you that if you’re programming in Python (or one of its moral equivalents with respect to concurrency and state) you shouldn’t use threads. Great. What are you going to do instead?

There’s a lot of debate over the best way to do “asynchronous” programming - that is to say, “not threads”, four options are often presented.

  1. Straight callbacks: Twisted’s IProtocol, JavaScript’s on<foo> idiom, where you give a callback to something which will call it later and then return control to something (usually a main loop) which will execute those callbacks,
  2. “Managed” callbacks, or Futures: Twisted’s Deferred, JavaScript’s Promises/A[+], E’s Promises, where you create a dedicated result-that-will-be-available-in-the-future object and return it for the caller to add callbacks to,
  3. Explicit coroutines: Twisted’s @inlineCallbacks, Tulip’s yield from coroutines, C#’s async/await, where you have a syntactic feature that explicitly suspends the current routine,
  4. and finally, implicit coroutines: Java’s “green threads”, Twisted’s Corotwine, eventlet, gevent, where any function may switch the entire stack of the current thread of control by calling a function which suspends it.

One of these things is not like the others; one of these things just doesn’t belong.

Don’t Use Those Threads Either

Options 1-3 are all ways of representing the cooperative transfer of control within a stateful system. They are a semantic improvement over threads. Callbacks, Futures, and Yield-based coroutines all allow for local reasoning about concurrent operations.

So why does option 4 even show up in this list?

Unfortunately, “asynchronous” systems have often been evangelized by emphasizing a somewhat dubious optimization which allows for a higher level of I/O-bound concurrency than with preemptive threads, rather than the problems with threading as a programming model that I’ve explained above. By characterizing “asynchronousness” in this way, it makes sense to lump all 4 choices together.

I’ve been guilty of this myself, especially in years past: saying that a system using Twisted is more efficient than one using an alternative approach using threads. In many cases that’s been true, but:

  1. the situation is almost always more complicated than that, when it comes to performance,
  2. “context switching” is rarely a bottleneck in real-world programs, and
  3. it’s a bit of a distraction from the much bigger advantage of event-driven programming, which is simply that it’s easier to write programs at scale, in both senses (that is, programs containing lots of code as well as programs which have many concurrent users).

A system that presents “implicit coroutines” – those which may transfer control to another concurrent task at any layer of the stack without any syntactic indication that this may happen – are simply the dubious optimization by itself.

Despite the fact that implicit coroutines masquerade under many different names, many of which don’t include the word “thread” – for example, “greenlets”, “coroutines”, “fibers”, “tasks” – green or lightweight threads are indeed threads, in that they present these same problems. In the long run, when you build a system that relies upon them, you eventually have all the pitfalls and dangers of full-blown preemptive threads. Which, as shown above, are bad.

When you look at the implementation of a potentially concurrent routine written using callbacks or yielding coroutines, you can visually see exactly where it might yield control, either to other routines, or perhaps even re-enter the same routine concurrently. If you are using callbacks – managed or otherwise – you will see a return statement, or the termination of a routine, which allows execution of the main loop to potentially continue. If you’re using explicit coroutines, you’ll see a yield (or await) statement which suspends the coroutine. Because you can see these indications of potential concurrency, they’re outside of your mind, in your text editor, and you don’t need to actively remember them as you’re working on them.

You can think of these explicit yield-points as places where your program may gracefully bend to the needs of concurrent inputs. Crumple zones, or relief valves, for your logic, if you will: a single point where you have to consider the implications of a transfer of control to other parts of your program, rather than a rigid routine which might transfer (break) at any point beyond your control.

Like crumple zones, you shouldn’t have too many of them, or they lose their effectiveness. A long routine which has an explicit yield point before every single instruction requires just as much out-of-order reasoning, and is therefore just as error-prone as one which has none, but might context switch before any instruction anyway. The advantage of having to actually insert the yield point explicitly is that at least you can see when a routine has this problem, and start to clean up and consolidate the mangement of its concurrency.

But this is all pretty abstract; let me give you a specific practical example, and a small theoretical demonstration.

The Buggiest Bug

Brass Cockroach - Image Credit GlamourGirlBeads

When we wrote the very first version of Twisted Reality in Python, the version we had previously written in Java was already using green threads; at the time, the JVM didn’t have any other kind of threads. The advantage to the new networking layer that we developed was not some massive leap forward in performance (the software in question was a multiplayer text adventure, which at the absolute height of its popularity might have been played by 30 people simultaneously) but rather the dramatic reduction in the number and severity of horrible, un-traceable concurrency bugs. One, in particular, involved a brass, mechanical cockroach which would crawl around on a timer, leaping out of a player’s hands if it was in their inventory, moving between rooms if not. In the multithreaded version, the cockroach would leap out of your hands but then also still stay in your hands. As the cockroach moved between rooms it would create shadow copies of itself, slowly but inexorably creating a cockroach apocalypse as tens of thousands of pointers to the cockroach, each somehow acquiring their own timer, scuttled their way into every player’s inventory dozens of times.

Given that the feeling that this particular narrative feature was supposed to inspire was eccentric whimsy and not existential terror, the non-determinism introduced by threads was a serious problem. Our hope for the even-driven re-write was simply that we’d be able to diagnose the bug by single-stepping through a debugger; instead, the bug simply disappeared. (Echoes of this persist, in that you may rarely hear a particularly grizzled Twisted old-timer refer to a particularly intractable bug as a “brass cockroach”.)

The original source of the bug was so completely intractable that the only workable solution was to re-write the entire system from scratch. Months of debugging and testing and experimenting could still reproduce it only intermittently, and several “fixes” (read: random, desperate changes to the code) never resulted in anything.

I’d rather not do that ever again.

Ca(sh|che Coherent) Money

Despite the (I hope) entertaining nature of that anecdote, it still might be somewhat hard to visualize how concurrency results in a bug like that, and the code for that example is far too sprawling to be useful as an explanation. So here's a smaller in vitro example. Take my word for it that the source of the above bug was the result of many, many intersecting examples of the problem described below.

As it happens, this is the same variety of example Guido van Rossum gives when he describes why chose to use explicit coroutines instead of green threads for the upcoming standard library asyncio module, born out of the “tulip” project, so it's happened to more than one person in real life.

Photo Credit: Ennor

Let’s say we have this program:

def transfer(amount, payer, payee, server):
    if not payer.sufficient_funds_for_withdrawl(amount):
        raise InsufficientFunds()
    log("{payer} has sufficient funds.", payer=payer)
    log("{payee} received payment", payee=payee)
    log("{payer} made payment", payer=payer)
    server.update_balances([payer, payee])

(I realize that the ordering of operations is a bit odd in this example, but it makes the point easier to demonstrate, so please bear with me.)

In a world without concurrency, this is of course correct. If you run transfer twice in a row, the balance of both accounts is always correct. But if we were to run transfer with the same two accounts in an arbitrary number of threads simultaneously, it is (obviously, I hope) wrong. One thread could update a payer’s balance below the funds-sufficient threshold after the check to see if they’re sufficient, but before issuing the withdrawl.

So, let’s make it concurrent, in the PEP 3156 style. That update_balances routine looks like it probably has to do some network communication and block, so let’s consider that it is as follows:

def transfer(amount, payer, payee, server):
    if not payer.sufficient_funds_for_withdrawl(amount):
        raise InsufficientFunds()
    log("{payer} has sufficient funds.", payer=payer)
    log("{payee} received payment", payee=payee)
    log("{payer} made payment", payer=payer)
    yield from server.update_balances([payer, payee])

So now we have a trivially concurrent, correct version of this routine, although we did have to update it a little. Regardless of what sufficient_funds_for_withdrawl, deposit and withdrawl do - even if they do network I/O - we know that we aren’t waiting for any of them to complete, so they can’t cause transfer to interfere with itself. For the sake of a brief example here, we’ll have to assume update_balances is a bit magical; for this to work our reads of the payer and payee’s balance must be consistent.

But if we were to use green threads as our “asynchronous” mechanism rather than coroutines and yields, we wouldn’t need to modify the program at all! Isn’t that better? And only update_balances blocks anyway, so isn’t it just as correct?

Sure: for now.

But now let’s make another, subtler code change: our hypothetical operations team has requested that we put all of our log messages into a networked log-gathering system for analysis. A reasonable request, so we alter the implementation of log to write to the network.

Now, what will we have to do to modify the green-threaded version of this code? Nothing! This is usually the point where fans of various green-threading systems will point and jeer, since once the logging system is modified to do its network I/O, you don’t even have to touch the code for the payments system. Separation of concerns! Less pointless busy-work! Looks like the green-threaded system is winning.

Oh well. Since I’m still a fan of explicit concurrency management, let’s do the clearly unnecessary busy-work of updating the ledger code.

def transfer(amount, payer, payee, server):
    if not payer.sufficient_funds_for_withdrawl(amount):
        raise InsufficientFunds()
    yield from log("{payer} has sufficient funds.", payer=payer)
    yield from log("{payee} received payment", payee=payee)
    yield from log("{payer} made payment", payer=payer)
    yield from server.update_balances([payer, payee])

Well okay, at least that wasn’t too hard, if somewhat tedious. Sigh. I guess we can go update all of the ledger’s callers now and update them too…

…wait a second.

In order to update this routine for a non-blocking version of log, we had to type a yield keyword between the sufficient_funds_for_withdrawl check and the withdraw call, between the deposit and the withdraw call, and between the withdraw and update_balances call. If we know a little about concurrency and a little about what this program is doing, we know that every one of those yield froms are a potential problem. If those log calls start to back up and block, a payer may have their account checked for sufficient funds, then funds could be deducted while a log message is going on, leaving them with a negative balance.

If we were in the middle of updating lots of code, we might have blindly added these yield keywords without noticing that mistake. I've certainly done that in the past, too. But just the mechanical act of typing these out is an opportunity to notice that something’s wrong, both now and later. Even if we get all the way through making the changes without realizing the problem, when we notice that balances are off, we can look only (reasoning locally!) at the transfer routine and realize, when we look at it, based on the presence of the yield from keywords, that there is something wrong with the transfer routine itself, regardless of the behavior of any of the things it’s calling.

In the process of making all these obviously broken modifications, another thought might occur to us: do we really need to wait before log messages are transmitted to the logging system before moving on with our application logic? The answer would almost always be “no”. A smart implementation of log could simply queue some outbound messages to the logging system, then discard if too many are buffered, removing any need for its caller to honor backpressure or slow down if the logging system can’t keep up. Consider the way syslog says “and N more” instead of logging certain messages repeatedly. That feature allows it to avoid filling up logs with repeated messages, and decreases the amount of stuff that needs to be buffered if writing the logs to disk is slow.

All the extra work you need to do when you update all the callers of log when you make it asynchronous is therefore a feature. Tedious as it may be, the asynchronousness of an individual function is, in fact, something that all of its callers must be aware of, just as they must be aware of its arguments and its return type.

In fact you are changing its return type: in Twisted, that return type would be Deferred, and in Tulip, that return type is a new flavor of generator. This new return type represents the new semantics that happen when you make a function start having concurrency implications.

Haskell does this as well, by embedding the IO monad in the return type of any function which needs to have side-effects. This is what certain people mean when they say Deferreds are a Monad.

The main difference between lightweight and heavyweight threads is that it is that, with rigorous application of strict principles like “never share any state unnecessarily”, and “always write tests for every routine at every point where it might suspend”, lightweight threads make it at least possible to write a program that will behave deterministically and correctly, assuming you understand it in its entirety. When you find a surprising bug in production, because a routine that is now suspending in a place it wasn’t before, it’s possible with a lightweight threading system to write a deterministic test that will exercise that code path. With heavyweight threads, any line could be the position of a context switch at any time, so it’s just not tractable to write tests for every possible order of execution.

However, with lightweight threads, you still can’t write a test to discover when a new yield point might be causing problems, so you're still always playing catch-up.

Although it’s possible to do this, it remains very challenging. As I described above, in languages like Python, Ruby, JavaScript, and PHP, even the code itself is shared, mutable state. Classes, types, functions, and namespaces are all shared, and all mutable. Libraries like object relational mappers commonly store state on classes.

No Shortcuts

Despite the great deal of badmouthing of threads above, my main purpose in writing this was not to convince you that threads are, in fact, bad. (Hopefully, you were convinced before you started reading this.) What I hope I’ve demonstrated is that if you agree with me that threading has problematic semantics, and is difficult to reason about, then there’s no particular advantage to using microthreads, beyond potentially optimizing your multithreaded code for a very specific I/O bound workload.

There are no shortcuts to making single-tasking code concurrent. It's just a hard problem, and some of that hard problem is reflected in the difficulty of typing a bunch of new concurrency-specific code.

So don’t be fooled: a thread is a thread regardless of its color. If you want your program to be supple and resilient in the face of concurrency, when the storm of concurrency blows, allow it to change. Tell it to yield, just like the reed. Otherwise, just like the steadfast and unchanging oak tree in the storm, your steadfast and unchanging algorithms will break right in half.

by Glyph at February 24, 2014 10:05 AM

February 23, 2014

Mark Bernstein


A haunting tribute to the British intelligence services of World War II, set as what seems to be a melodrama which nevertheless veers away — often at the last moment — from the trite and the familiar.

February 23, 2014 06:05 PM

Dave Winer

Paragraph-level permalinks

Update: I changed the way they work. I am now happy with the way they look.

I used to have a feature on Scripting News that I called paragraph-level permalinks, but other people called them WinerLinks, because I was apparently the first to have them. Whatever you call them, they're nice to have. And I heard from a few people that they missed them, so I put the feature on my to-do list.

Notice that this post has them. Over in the right margin, you should see little purple hashes. If you click on one, it'll open the page scrolled to that paragraph.

They're useful if you want to comment elsewhere on a specific part of a post. Since I want to encourage people to do that, I like the idea of these links. What I don't like is how distracting they are. I like the feature, but I'd like to have it be less visible.

For that I ask you, Ms or Mr Designer, to give it a try. Mock up a page with these links and try to come up with something that looks better.

PS: To see how distracting they can be, look at a longer post as an example.

Update #2: I tweaked the implementation to use the first characters of the first five words in the paragraph to form the permalink. This allows you to reorder the paragraphs without breaking links. However, if you change any of the first five words, the links break too. Trade-offs, always. This idea was stolen from the NYT implementation of paragraph-level permalinks.

February 23, 2014 05:57 PM

Mark Bernstein

No fowl, no foul

Much depends on dinner. This one was vegetarian; fortunately, fish was allowed.

  • fennel broth, parisian gnocchi ❧ onion shiitake focaccia
  • seared scallops on a bed of asparagus purée
  • cod and portobellos baked in poblano creme, tomatillo-chipotle salsa ❧ chess soufflé
  • salad
  • apple tart ❧ cherry jelly

The poblano crema was a lovely green and turned out to be less hot than I’d originally feared. It went nicely with the sweetness of the fish, and paired nicely with a chardonnay.

Some disaster befell the cherry jelly, which failed to gel. No idea what went wrong, but something went badly astray.

February 23, 2014 05:55 PM


Eroica, an ambitious new hypermedia fiction, by Eugene Garber et al.

February 23, 2014 05:51 PM

Dave Winer

Win-wins with Facebook?

On Friday I wrote about Google, yesterday about Facebook.

Today I want to write about my blog and formats it uses to connect with others, and how that might work with Facebook and Google -- at the same time.

I'm "still" posting on my blog, and have no plans to stop. In fact, I hope to help other people get back into their own blogs. I think we can reboot a little, maybe not in a huge way, but blogging as an activity could use a little love, a little sprucing up, some spring cleaning. There are a lot of cobwebs in the blogosphere. People have left junk around that isn't getting used anymore. And we could use some fresh ideas about how to connect stuff up.

But while all that rebooting is happening, maybe Facebook et al could help facilitate the reboot? After all, they employ programmers and researchers who need to share knowledge with each other, and need places to record their ideas where they can find them again, and where others working in the same field can find them.

One way they could help is by adopting some of the standards of the blogosphere, so their content can integrate with ours. For example, if I paste the URL of an RSS feed or an OPML file into a Facebook post, they could do something nice with it. Today they don't, at all. I discovered this yesterday by accident when I pasted a link to an RSS feed into a Facebook post. I just tried an experiment and pasted a link to an OPML file, the canonical test outline -- states.opml, into Facebook. Again, nothing happened. OPML with its ability to structure information for presentation, would be a perfect complement to Facebook. Both are outgrowths of graph theory, a subject that I studied as a college student many years ago (it was so funny to see Facebook use the terminology of my once-obscure avocation).

If Facebook supported OPML and RSS, we could probably find some interesting ways to integrate our tools with their environment. That's how we're going to fix this silo problem, by knocking down some of the walls. If they'll let our content in, without having it hosted on their servers, it can have a dual life. "Out here" it can be indexed by Google and shared among other interested people, over long periods of time. And inside Facebook, we can share our thoughts with our friends and family, so they can keep up with what we're doing.

During the last few months, I would occasionally share my development progress with my Facebook friends. They were some of my most popular posts. Possibly because what I do is so much in vogue these days, there's so much curiosity about how software developers work. I love this. I've always had to wave my hands when people ask what I do, while their eyes glaze over. But these days it's quite different.

I want to keep using Facebook, but my professional work must be done on the web, or it doesn't work. Perhaps we can make that a win-win?

February 23, 2014 02:14 PM

February 22, 2014

Dave Winer

Why people like Facebook

People like Facebook because when they post something there, they get responses from people they care about.

Another thing: When I post a picture on Facebook, it looks magnificent. Far better than it used to look on Flickr, which was pretty good, at one time. These days Flickr is an embarrassment. The only reason I post pictures there at all is because it's hooked into my archival system.

Anyway, what this tells me is that Team Blogosphere has to deliver great people to our blogs, people with ideas, and people who are sympathetic, not the usual trolls who pick at every scab they can find. I'm fairly optimistic about this because I get great engagement at Scripting News, most of the time, and the trolls don't bother because they know I delete their turds without a second thought.

The answer to having a great web outside of Facebook, to accumulate knowledge that works for all of us, for a long time to come depends not only on getting Google on our side again, but also in taking matters into our own hands, and solving problems instead of arguing about stuff.

I'm going to keep learning why people like Facebook, to build our to-do list and then start asking people for ideas and help.

February 22, 2014 11:40 PM

Podcast: The technology of Fargo 2

A 28-minute podcast that tells the story of how Fargo 1 led to Fargo 2.

February 22, 2014 10:33 PM

Paul's Pontifications

A Review of the joint CNN and BBC production: "The War On Terror"

The War on Terror is the latest epic in the long-running World War franchise. The previous serial in the franchise, World War II, was slammed by the critics for its cardboard-cutout villains, unrealistic hero and poor plot-lines, although it actually achieved decent ratings.

The first season of Terror started with a retcon. At the end of World War II it looked like the Soviet Union had been set up as the Evil Empire for yet another World War, but the writers seem to have realised that replaying the same plot a third time wasn't going to wow the audience. So at the start of Terror we get a load of back story exposition in which the Soviet Union has collapsed for no readily apparent reason, leaving America running a benevolent economic hegemony over the allies from the previous series and also its former enemies, Germany and Japan. There was also mention of a very one-sided Gulf War, apparently to emphasize that America's economic power was still matched by its military, even though it didn't seem to have anyone left to fight. Then in the second episode a bunch of religious fanatics from nowhere flew hijacked airliners into important buildings. While the premise may have been a bit thin the episode managed a level of grandeur and pathos that the franchise hadn't achieved since the Pearl Harbour episode, with the special effects being used to build drama rather than just having huge fireballs. But after this promising start the rest of the season became increasingly implausible, with a buffoonish president launching two pointless wars on countries whose governments turned out to have almost nothing to do with the attack he was trying to revenge. The weak plot and unsympathetic characters make the last few episodes of the season hard to watch.

However in the second season the series grew a beard. The writers replaced the old president with a good looking black guy who clearly wanted to do the right things, finally giving the audience someone to root for, and the focus switched sharply from armed conflict to corrupt politics. Instead of huge set-piece battles featuring ever-more improbable weaponry, the drama now focuses on the political situation within America itself. The battles and weapons are still there of course, but no longer driving the plot. Instead the president is shown as a tragic figure as he tries to stop wars, free prisoners and sort out his country's economic problems, but every time some combination of corporate executive, greedy banker and/or General Ripper will block his reforms, sometimes with an obstructive bureaucrat thrown in for comic relief. He has his hands on the levers of power, but in contrast with his predecessor in World War II those levers don't seem to be connected to anything any more.

Although each episode stands on its own as a story, several plot arcs are becoming clearer as season 2 draws to a close. Events seem to presage the Fall of the Republic, a plot similar to the Star Wars prequel trilogy, but much better done. Whereas Lucas' Old Republic was destroyed by a single corrupt ruler who wanted to become The Emperor, the American Republic in Terror is being destroyed by the very things that made it strong in the previous series: its industrial capacity, financial power and military strength. This is most clearly seen in the episode Drone Strike, where the president was asked to authorise an attack by a remote controlled aircraft against a suspected terrorist convoy on the other side of the world. America is one of the few countries with the technology and money to field these unmanned warplanes, and they have become an important part of American power.  Then we saw the president's face as he was told that the supposed convoy had actually been a wedding party.  At the end of the episode he was reduced to defending his actions at a press conference because the people who had got him into this mess were too powerful to sack.

At the same time there are stories of individual determination and hope set in contrast against the darker backdrop. The recent episode Watching the Watchers showed a soldier and a bureaucrat in different parts of the secret spy agency (or agencies; America seems to have several) independently deciding to rebel against the system they are a part of, by releasing embarrassing secrets to the public. At the same time the episode revealed a hidden factor in previous plot lines. Fans are now reviewing old episodes, even back into the first season, looking for the throwaway lines and improbable coincidences which only now make sense.

The vision of the writers of Terror is now becoming clear; the real war on terror is not the one being fought with guns and robot aircraft, it is the one being fought in the shadows against a loose and ever-shifting coalition of rich, powerful individuals who have discovered that a terrorised population is willing to give them even more money and power, and therefore want to keep it that way. The president's initiatives aren't being blocked by some grand secret conspiracy, its just that all of these people know how to work together if they want stop something happening. But this actually makes them more dangerous; in a conventional conspiracy story the hero just has to find the conspiracy and unmask them, but that isn't going to happen in Terror. In one chilling scene a club of bankers get together for a party to laugh at the rest of the country for continuing to pay them huge amounts after they have wrecked the economy that they were supposed to be running. A journalist sneaks in and tells the story, but it doesn't make any difference because throwing a party is not a conspiracy.

So Terror goes into its third season in much better shape than it was at the end of the first. The writers have escaped from the constraints of set-piece battles between huge armies, and found instead a solid theme of individual heroism in a believable world of ambiguous morality and complex politics. It all makes for powerful drama and compelling viewing.

by (Paul Johnson) at February 22, 2014 02:46 PM

February 21, 2014

Reinventing Business

My "Reinventing Business" Presentation Video from OSCON 2013

The O'Reilly folks have just posted the very-nicely-produced video of my "Reinventing Business" presentation. I'm quite pleased with the way it came out and feel like it's a good summary of my progress so far.

by (Bruce Eckel) at February 21, 2014 10:02 PM

Dave Winer

Facebook != the web

Okay so people who used to blog now prefer to post their observations on Facebook for the immediate interaction of it. I know what they mean now that I've been using Facebook for a few months. Hearing the likes and the comments is a kind of Pavlovian reward. It's true, I know the feeling.

But Facebook's search engine sucks, I hear. Nowhere near as good as Google's. So while you're getting more likes over there, you're not creating an archive, or a resource for others.

So that kind of settles it. If you're doing serious work, knowledge accumulation, relating to other people's work, the kind of stuff researchers, developers and academics do, Facebook is a dead-end. It's good for sharing pictures of the kids with grandma, but not for sharing your ideas to be referenced later. And you can share links to your stories on Facebook, just don't expect to be able to find them later, that way.

That's why Stack Exchange, for example, is on the web and not on Facebook. Without Google, there's no point accumulating knowledge. Wikipedia couldn't happen on Facebook.

For that, you still need the web and Google's search engine.

February 21, 2014 09:09 PM

Ian Bicking

Collaboration as a Skeuomorphism for Agents

In concept videos and imaginings about the Future Of Computing we often see Intelligent Agents: smart computer programs that work on your behalf.

But to be more specific, I’m interested in agents that don’t work through formal rules. An SMTP daemon acts on your behalf routing messages to your intended destination, but they do so in an entirely formal way, one that is “correct” or “incorrect”. And if such agents act with initiative, it is initiative based on formal rules, and those formal rules ultimately lead back to the specific intentions of whoever wrote the rules, the rules defined in terms of unambiguous inputs.

Progress on intelligent agents seems to be thin. Gmail sorts some stuff for us in a “smart” way. There are some smart command-based interfaces like Siri, but they are mostly smart frontends for formalized backends, and they lack initiative. Maybe we get an intelligent alert or two, but it’s a tiny minority given all the dumb alerts we get.

One explanation is that we don’t have intelligent agents because we haven’t figured out intelligence. But whatever, intelligent is as intelligent does, if this was the only reason then I would expect to see more dumb attempts at intelligent agents.

It seems worth approaching this topic with more mundane attempts. But there are reasons we (“we” being “us technologists”) don’t.

Intelligent agents will be chronically buggy

If we want agents to do things where it’s not clear what to do, then sometimes they are going to do the wrong thing. It might be a big-scale wrong thing, like they buy airplane tickets and we wanted them to buy concert tickets. Or a small thing, like we want them to buy airplane tickets and something changed about the interface to buy those tickets and now the agent is just confused.

Intelligent agents will be accepting rules from the people they are working for, from normal people. Then normal users become programmers in a sense. Maybe it’s a hand-holding cute and fuzzy programming language based on natural language, but it is the nature of programming that you will create your own bugs. Only a minority of bugs are created because you expressed yourself incorrectly, most bugs are because you thought it through incorrectly, and no friendly interface can fix that.

How then do we deal with buggy intelligent agents, while also allowing them to do useful things?

There are two things that come to mind: logging and having the agent check before doing something. Both are hard in practice.

Logging: this lets you figure out who was responsible for a bad action, or the reasoning behind an action.

Programmers do this all the time to understand their programs, but for an intelligent agent the user is also a developer. When you ask your agent to watch for something, or you ask it to act under certain circumstances, then you’ve programmed it, and you may have programmed it wrong. Fixing that doesn’t mean looking at stack traces, but there has to be some techniques.

You don’t want to have to take users into the mind of the person who programmed the agent. So how can you log actions so they are understandable?

Checking: you’ll want your agent to check in with you before doing some things. Like before actually buying something. Sometimes you’ll want the agent to check in even more often, not because you expect the agent to do something impactful, but because it might do something impactful due to a bug. Or you are just getting to know each other.

Among people this kind of check-in is common, and we have a rich language to describe intentions and to implicitly get support for those intentions. With computer interactions it’s a little less clear: how does an agent talk about what it thinks it should do? How do we know what it says it thinks it should do is what it actually plans to do?


We deal with lots of intelligent agents all the time: each other. We can give each other instructions, and in this way anyone can program another human. We report back to each other about what we did. We can tell each other when we are confused, or unable to complete some operation. We can confirm actions. Confirmation is almost like functional testing, except often it’s the person who receives the instructions who initiates the testing. And all of this is rooted in empathy: understanding what someone else is doing because it’s more-or-less how you would do it.

It’s in these human-to-human interactions we can find the metaphors that can support computer-based intelligent agents.

But there’s a problem: computer-based intelligent agents perform best at computer-mediated tasks. But we usually work alone when we personally perform computer-mediated tasks. When we coordinate these tasks with each other we often resort to low-fidelity check-ins, an email or IM. We don’t even have ways to delegate except via the wide categories of permission systems. If we want to build intelligent agents on the intellectual framework of person-to-person collaboration, we need much better person-to-person collaboration for our computer-based interactions.

(I will admit that I may be projecting this need onto the topic because I’m very interested in person-to-person collaboration. But then I’m writing this post in the hope I can project the same perspective onto you, the reader.)

My starting point is the kind of collaboration embodied in TogetherJS and some follow-on ideas I’m experimenting with. In this model we let people see what each other are “doing” — how they interact with a website. This represents a kind of log of activity, and the log is presented as human-like interactions, like a recording.

But I imagine many ways to enter into collaboration: consider a mode for teaching, where one person is trying to tell the other person how to do something. In this model the helper is giving directed instructions (“click here”, “enter this text”). For teaching it’s often better to tell than to do. But this is also an opportunity to check in: if my intelligent agent is instructing me to do some action (perhaps one I don’t entirely trust it to do on my behalf) then I’m still confirming every specific action. At the same time the agent can benefit me by suggesting actions I might not have figured out on my own.

Or imagine a collaboration system where you let someone pull you in part way through their process. A kind of “hey, come look at this.” This is where the diligent intelligent agent can spend its time checking for things, and then bring your attention when it’s appropriate. Many of the same controls we might want for interacting with other people (like a “busy” status) apply well to the agent who also wants to get our attention, but should maybe wait.

Or imagine a “hey, what are you doing, let me see” collaboration mode, where I invite myself to see what you are doing. Maybe I’ve set up an intelligent agent to check for some situation. Anytime you set up any kind of detector like this, you’ll wonder: is it really still looking? Is it looking for the right thing? I think it should have found something, why didn’t it? This is where it would be nice to be able to peek into the agent’s actions, to watch it doing its work.

If applications become more collaboration-aware there are further possibilities. For instance, it would be great if I could participate in a collaboration session in GitHub and edit a file with someone else. Right now the other person can only “edit” if they also have permission to “save”. As GitHub is now this makes sense, but if collaboration tools were available we’d have a valid use case where only one of the people in the collaboration session could save, while the other person can usefully participate. There’s a kind of cooperative interaction in that model that would be perfect for agents.

We can imagine agents participating already in the collaborative environments we have. For instance, when a continuous integration system detects a regression on a branch destined for production, it could create its own GitHub pull request to revert the changes that led to a regression. On Reddit there’s a bot that I’ve encountered that allows Subreddits to create fairly subtle rules, like allow image posts only on a certain day, ban short comments, check for certain terms, etc. But it’s not something that blocks submission (it’s not part of Reddit itself), instead it uses the same moderator interface that a person does, and it can use this same process to explain to people why their posts were removed, or allow other moderators to intervene when something valid doesn’t happen to fit the rules.

What about APIs?

In everything I’ve described agents are interacting with interfaces in the same way a human interacts with the interface. It’s like everything is a screen scraper. The more common technique right now is to use an API: a formal and stabilized interface to some kind of functionality.

I suggest using the interfaces intended for humans, because those are the interfaces humans understand. When an agent wants to say “I want to submit this post” if you can show the human the filled-in form and show that you want to hit the submit button, you are using what the person is familiar with. If the agent wants to say “this is what I looked for” you can show the data in the context the person would themselves look to.

APIs usually don’t have a staging process like you find in interfaces for humans. We don’t expect humans to act correctly. So we have a shopping cart and a checkout process, you don’t just submit a list of items to a store. You have a composition screen with preview, or interstitial preview. Dangerous or destructive operations get a confirmation step — a confirmation step that could be just as applicable of a warning for an agent as it is for a human.

None of this invalidates the reasons to use an API. And you can imagine APIs with these intermediate steps built in. You can imagine an API where each action can also be marked as “stage-only” and then returns a link where a human can confirm the action. You can imagine an API where each data set returned is also returned with the URL of the equivalent human-readable data set. You can imagine delegation APIs, where instead of giving a category of access to an agent via OAuth, you can ask for some more selective access. All of that would be great, but I don’t think there’s any movement towards this kind of API design. And why would there be? There’s no one eager to make use of it.

That fancy Skeuomorphism term from the title

A Skeuomorphism is something built to be reminiscent of an existing tool, not out of any necessity, but because it provides some sense of familiarity. Our calendar software looks like a physical calendar. We talk of “folders”. We make our buttons look depressable even though it is all a simulation of a physical control.

This has come to mind when I talk of using the same metaphors for interacting with a computer program that we do for interacting with a human.

When we need a new way for people to work with computers a lot of success has come from finding bridges between our existing practices and a computer-based practice. The desktop instead of the command line, the use of cards on mobile, the many visual metaphors that we use, the way we phrase emails as letters, etc. Sometimes these are just scaffolding while people get used to the new systems (maybe flat design is an example). And of course you can pick the wrong metaphors (or go too far)

In this case the metaphor isn’t using the representation of a physical object in the computer, but using the representation of a fellow human as a stand-in for a program.

The goal is enabling a whole list of maybe actions. Maybe “intelligent” doesn’t really mean “knowledgable and smart” but “is not formally verifiable as correct” and “successfully addresses a domain that cannot be fully understood”. You don’t need formal AI for these kinds of tasks. Heuristics don’t need to be sophisticated. But we need interfaces where a computer can make attempts without demanding correctness. And human interaction seems like the perfect model for that.

by Ian Bicking at February 21, 2014 09:06 PM

February 20, 2014

Dave Winer

Why are people bored with blogging?

You hear it so much -- I never blog anymore. I just post on Facebook. Etc etc.

It just occurred to me why that is. The blogging tools developers aren't giving the users anything new and/or interesting to do.

Maybe that's why there was so much interest in Ghost. At least it looks different.

Since when does a software category survive without introducing new stuff every so often?

Is this as good as it gets?

Or maybe I'm missing something.

Set me straight.

February 20, 2014 10:46 PM

How Google missed the boat

I had a thought the other day that Google could have achieved its goals much more directly and quickly by gradually embracing and extending the existing social fabric of the web, that they were basically owners of and more or less still are.

Their search engine was and still is the glue that holds the web together. So, why didn't they build around that?

They should have gradually enhanced the glue, offering tools that shore up its deficiencies.

Where others, Twitter and Facebook, notably -- delivered functionality that depended on centralizing the content of the web, Google should have built around decentralization with caching, and new standards for helping content be viewed in many contexts, many different renderings.

The nascent standards were there as early as 2001. I was writing about this at the time, urging them to help us with RSS and OPML. You know what they did instead. We're still waiting for them to help us be independent of all the centralized services, which whether they like it or not, is what they do.

They had everything needed to help make it work, they just had to build architectures not products. Google Reader should have been a structure that welcomed apps connecting to it, running on App Engine of course. Hack at the APIs until they're simple, but also deploy AMIs that run in Amazon's cloud. And on the other side, disassemble Blogger into its components, open sourcing it all, and provide APIs, that get simpler over time, to cover the other side of content creation. And as before, the software is all open source, and available as App Engine modules and Amazon AMIs.

It's dawning on smart people now that we collectively made a mistake in turning over the judgement of what we see to Facebook and probably to Twitter (we don't know what they're doing or planning to do with the content flowing through their servers). I made the same mistake. The technology of the last 10 years should have all been open to experimentation by developers without locking users in. There are a lot of developers who believe in this. It's central to the mission of WhatsApp, btw, so if you doubted that it could be lucrative, you should think again.

It's not too late. But they have to help us, and not be so cynical about the power of individuals. I think that's more evident today than it ever was. Their biggest mistake was their attitude about the rest of us.

See also: Why people like Facebook.

February 20, 2014 07:11 PM

Why I heart Heroku

I'm sure there are many reasons, but this is the one I'm thinking about today as I deployed Fargo 2.

Now that I have my server running in Node, and deployed on Heroku, adding more server capacity is as simple as it can possibly be.

I love this power, never had it before. Deploying additional instances was always a huge process. They've really factored the UI so that even for a geek like me, there's no effort involved. See how it works, it'll make you laugh.

February 20, 2014 06:48 PM

Fargo 2 Day! :-)

Today's the day that Fargo 2 became the only Fargo.

Now starts the process of showing everyone all the cool stuff it can do because the CMS is in the user's machine not in a central server. And I look forward to helping lots of people get their publishing systems up and running, so it isn't all dependent on me.

It all works so well because of JavaScript and Node.js. These are great tools and environments. Made greater because they are becoming the standard platform for app deployment. My free Heroku server is running smoothly. And when I need more power, I can just slide the scroll bar to deploy more instances. I've been wanting to develop this way for many years. We never got there with Frontier. That's life!

Anyway, here's the blog post to Fargo users announcing the change.

Lots more to come in the weeks and months ahead now that this is no longer just a development project, it's now a platform.

A picture of a slice of cheese cake.

February 20, 2014 05:39 PM

Giles Bowkett

Jim Weirich: Rest In Peace

I met Jim at several conferences, indeed in 2008 I think we did three of the same conferences in a row. It was like we were travel neighbors. I think I first met him at a Pragmatic workshop where he taught me and a room full of other programmers how to do TDD. He was warm, generous, and positive, and a great example of the old-school Ruby attitude. He will definitely be missed.

by Giles Bowkett ( at February 20, 2014 11:04 AM

February 19, 2014

Tim Ferriss

How to Cure Anxiety — One Workaholic’s Story, Six Techniques That Work

Charlie Hoehn was a full-time employee of mine during the making and launch of The 4-Hour Body. It was an intense period.

In this post, Charlie will share his M.E.D. (Minimum Effective Dose) for overcoming anxiety and managing workaholism. There are six techniques in total.

If you haven’t already, be sure to read his previous post on preventing burnout.

Enter Charlie

Do you feel a constant sense of dread? Do you have trouble breathing, relaxing, and sleeping? Do you worry that you’re losing control, or that you’re going to die?

In other words: are you trapped in your own personal hell?

I’ve been there (here’s the backstory), and I know what it’s like. Shallow breathing, tension in the gut, chest pains, rapid heartbeat… Every moment is exhausting, crushing, and painful. Anxiety destroys your confidence, your productivity, your relationships, and your ability to enjoy life.

For a long time, I thought I was going crazy. I was convinced that something horribly wrong was about to happen. I tired and afraid all the time, and I didn’t know how to shake it. One half of me pretended to be normal while the other half tried to keep it together.

I tried everything: meditation, yoga, high-intensity workouts, long runs, therapy, therapy books, keeping a journal, super clean diets, extended fasting, drugs, deep breathing exercises, prayer, etc. I even took a six-week course, made specifically for men who wanted to overcome anxiety.

What I discovered is that the most effective “cures” for anxiety are often free, painless, and fun. When I was doing the six techniques I cover in this post on a daily basis, I was able to get back to my normal self in less than one month

It’s my sincerest hope that this post helps you eliminate your anxiety, once and for all. Surprisingly, it’s not as hard as you think…


1. Enjoy Guilt-Free Play with Friends

“A lack of play should be treated like malnutrition: it’s a health risk to your body and mind.”
— Stuart Brown

When I asked Tim for his advice on overcoming anxiety, he said, “Remember to EXERCISE daily. That is 80% of the battle.”

I completely agree. Exercise is scientifically proven to reduce anxiety, stress, and depression. But what’s the best type of exercise? Running on the treadmill for an hour? Doing hundreds of sit-ups? Self-inflicted torture via P90X? 

How about ‘None of the Above.’ All of those activities are miserable. People only do them because they think getting in shape has to be a punishment.

Exercise does not have to feel like work; it can be play. In other words, physical movement that gets your heart racing, causes you to sweat, and is legitimately FUN for you and your friends. You don’t have to track your time, measure your heart rate, or count your calories. Forget all that noise. Just focus on having fun while moving around with your friends.

In my experience, the best forms of anxiety-reducing play are outdoor sports. They are social (more than one person is required), mildly competitive, and cause everyone to break a sweat in the fresh air and sunshine. However, any fun play activity that you can do on a regular basis with your friends should work.

Almost every weekend, my friends and I play home run derby or go to the driving range. For me, taking batting practice or hitting golf balls is the most rewarding form of play. Plus it gives me an excuse to move around outside for an hour or two.

I also take frequent trips to the park with an Aerobie Flying Ring (a flat rubber Frisbee that flies really fast). The Aerobie is perfect for playing because I have to call up a friend to join me, and we both end up running around chasing it.

Playing with an Aerobie at the House of Air trampoline house in San Francisco.

Incorporating play into my weekly routine helped my anxiety and workaholism more than anything else. It was such a massive relief to hang out with my friends and have guilt-free fun again. Playing helped me decompress and unplug from work, which actually made me more productive.

After each round of catch or home run derby, I would return to my laptop feeling light and happy. And to my surprise, I was able to produce better work at a faster pace. My brain was operating at a higher level because it was happy, playful, and recharged. And I wasn’t the only one who attested to a boost in productivity and creativity because of play.

[Note from Tim: Exercise also elicits measurable biochemical effects (like increased BDNF production) that improve cognitive performance.]

My friend Ann (a book editor) texted me one afternoon to say that she was trying to work, but was so bored that she’d spent the last hour staring at a turtle swimming in a pond. I told her to come pick me up so we could play catch. We drove over to a park and played with the Aerobie for two hours in the sun. The next day, she sent me this message:

All work and no play makes Jack an anxious boy — literally. Isolating yourself erodes your health, and sitting in a chair all day is a recipe for neuroses. Get off the Internet, turn off your screens, and go have guilt-free fun playing with your friends! You’ll be less anxious, less lonely, more relaxed, and a whole lot happier.


Schedule a daily reminder to Play. Ask a friend, co-worker, or neighbor to play catch. Search for “co-ed sports” or “improv comedy,” then sign up. For a negligible fee, you get to be surrounded by fun people who like to play. Totally worth it.

You can take baby steps toward playing more, of course. You could invite a friend on a long walk, or play catch instead of drinking coffee, or take a date to the driving range. The important thing is to schedule guilt-free fun with good people.


Aim for 30 minutes per day (or more, if possible). Reducing your anxiety through play only takes 2% of your total time each week, but it’s up to you to decide that your happiness is worth the effort.

[Note from Tim: Schedule this recreation in advance or it won't happen.  If you're a type-A personality, work will swell to fill your unfilled calendar.]


Free, or very cheap. Try not to think of play in terms of costs. This is an investment in your health and happiness, with a guaranteed return.


Aerobie Flying Ring. This is the best toy for playing catch. It’s light, durable, portable, and extremely fun.

Charlie’s Play Picks. Check out my list of fun activities and toys.

Play by Dr. Stuart Brown. If you want to read more about the science behind play and its essential role in fueling happiness, pick up a copy of this book. It’s fantastic. Also worth reading: The Play Deficit (article) by Peter Gray.


2. Unplug from All Sources of News

“Learning to ignore things is one of the great paths to inner peace.”
— Robert J. Sawyer

It took me a long time to see it, but the news was my single biggest source of anxiety.

The websites I was reading each day talked non-stop about crime, corruption, economic breakdown, and the end of the world. As a result, my fear of being attacked spun out of control. I became obsessed with protecting myself from every possible threat. I researched what to do if I was arrested and thrown in jail. I spent hundreds of dollars on food and equipment that I hoped would save me in the event of a disaster.

There was nothing inherently wrong with preparing for an emergency, but obsessing over apocalyptic scenarios, every day, for months on end?

One day, it finally dawned on me: my fear of an imaginary future was destroying my ability to enjoy the present.

And what planted those seeds of fear? The news.

When I made the commitment to cut the news out of my life completely — no TV, no conspiracy sites or “truth deliverer” blogs, ignoring / blocking every sensationalist link I came across on social media, etc. — my anxiety plummeted in less than two weeks. The negative information I removed from my conscious awareness freed me from the confines of other people’s frightening narratives.

I replaced the scary news with positive, joyful, and fun information. For instance, I listened to uplifting songs and standup comedy. I watched improv, and classic funny & happy movies. I read fun books that sparked my imagination and touched my soul. It really helped.

Of course, I didn’t bury my head in the sand. I still talked with my friends, who would inevitably bring up the noteworthy events that took place that week. And I was always surprised to discover that… I didn’t really miss anything. I was alive, and the world kept turning. That was about it.

The information you allow into your conscious awareness determines the quality of your life. In other words, you are what you think. If you are subsisting on content that’s unsettling, anxious, and soulless (see: the news, reality shows, horror movies, books written by hateful authors, porn), your mind will become stressed, scared, and cynical.

But if you are consuming content that’s joyous and playful, your mind will become happy and loving. Simple as that.


Cut anxiety-inducing information – especially the news – out of your daily routine completely! If your friends are watching the news in the same room, either change the channel or go do something else. If a scary headline appears in your Facebook feed, don’t click it – block it.

There’s no need to subject yourself to unhealthy unrealities. Replace those unsettling thoughts with positive content that will uplift you.




The “Anti-News” List. My favorite anxiety-fighting content. Just remember: Sad people tend to focus on the lyrics, while happy people just listen to the music. Don’t over-analyze the deeper implications of the art; just enjoy how it makes you feel.

BONUS POINTS: Flip the Shut-Off Switch

Whenever I’m feeling burned out, I have to force myself to unplug.

I relocate to a scenic environment where the skyline isn’t cluttered with buildings or human activity, then I disconnect from every device with a screen for a minimum of 24 hours. That means no texting, no calling, no email, no Facebook, no Instagram, and no Seinfeld. Only nature, face-to-face interactions, and books are allowed.

Unplugged nature vacations are incredibly refreshing. My mind always feels like a stuffy room that gets a sudden rush of fresh air. Instead of feeling tired all day long from a steady diet of internet content, I’m rejuvenated by real life again.

Give yourself permission to stop working and unplug. Don’t feel guilty for taking time off. This isn’t an escape from the real world – it’s a chance to reconnect with it.

3. Consistent Bedtime & Afternoon Naps

“My girlfriend asked me, ‘Did you sleep good?’  I said ‘No, I made a few mistakes.’”
— Steven Wright

I really can’t overemphasize the importance of consistent quality sleep. Every anxious person I’ve met has either been in denial about how little sleep they get, or they’re overlooking the fact that they’re going to bed at random hours every night.

One of my readers wrote this message to me after reading an early draft of my book:

“When I began forcing myself to sleep eight hours a night, my physical health problems cleared up, my emotions balanced out, and my anxiety disappeared. My mind could function and that tight feeling around my eyes vanished. Eight hours of sleep is a miracle pill.”

I was chronically in a severe sleep deficit, which took a major toll on my mental health. 

The endless stream of digital information I was taking in every waking hour only compounded the problem. And because I kept going to bed at random hours, my mind never had enough time to shut down, relax, and digest everything that poured in during the day.

During the month I cured my anxiety, I made consistent sleep one of my highest priorities. The first thing I did was optimize my bedroom for ideal sleeping conditions. Here are the steps I took:

  1. Plugged my iPhone charger in an outlet far away from my bed so I couldn’t grab my phone while I was laying down. This little obstacle prevented me from checking Facebook or watching Youtube before trying to fall asleep. [Note from Tim: I always put my iPhone on Airplane Mode or turn it off while sleeping. Even on silent, the illumination of arriving text messages is enough to wake or aggravate me.]
  2. Cranked up the air conditioning so the temperature in my bedroom was around 68 degrees Fahrenheit.
  3. Kept the curtains drawn and wore a sleep mask so that my room was as dark as I could possibly make it.

Once my room was optimized, I committed to a consistent bedtime. I set a daily reminder on my iPhone called “Get Ready for Bed,” which went off at 10:00PM every night (i.e. nine hours before I wanted to wake up). As soon as it went off, I’d stop whatever I was doing, hit the bathroom, brush my teeth, and change out of my day clothes. I was dead serious about obeying my phone’s command. Even if I was in the middle of a conversation, I’d abruptly end it so I could get ready for bed.

After I finished getting ready, I’d switch my phone to silent mode, plug it into the charger that was far away from my bed, and lay down to read fiction for 15 minutes (No business or “thinking” books allowed). Then I’d turn off the lights and focus on the rhythm of my breathing until I fell asleep.

It took several nights to adjust to this change, but within a week, I was sleeping like a champion. The key was getting ready at the same time every nightIt set me in motion toward getting in bed, and ultimately re-trained my body to crave sleep at a reasonable hour.

There was another aspect of my sleep routine that was critical for healing my anxiety: I took a 20-minute nap every afternoon.

Each day, immediately after I finished lunch, I would find a spot to nap – a couch, a bench, a reclined car seat, a carpeted floor, a friend’s wedding…

I’d set an alarm on my phone for 20 minutes, lie on my back, and close my eyes. I never tried to fall asleep; I just relaxed and focused on breathing in and out. Even if I didn’t fall asleep (10-20% of the time), I always felt refreshed and calm when my alarm went off.

Naps are awesome. I wish I could be a salesman for naps. We all took them every day when we were kids, so… why should we stop taking them just because we’re older? Take a quick nap in the afternoon, even if you have to cut your lunch break short. Then force yourself to get ready for bed at the same time every night. You’ll be more relaxed, more productive, and far less anxious.


Set a daily reminder on your phone to “Get Ready for Bed,” nine hours prior to your target wake time. Set another reminder to take a nap after lunch. Plug your cell phone charger in an outlet that’s far away from your bed. Cover your windows so your bedroom is as dark as possible. Drop the temperature in your bedroom to 68 degrees.




Aim for 8 hours of consistent quality sleep each night, and one 20-minute nap every afternoon.


Relax like a Pro and 11 Tricks for Perfect Sleep. Check out Tim’s articles for more tips on taking your sleep to the next level.

Sweet Dreams Sleep Mask. The light! It buuurns! Use this mask to block it out.

Flux. The bright white light that you refer to as your “computer” might be disrupting your internal rhythm. Download the free Flux application to have your screen’s lighting automatically switch to a sunset hue in the evening.

Philips Wake-up Light. If you despise alarms as much as I do, then check out the Wake-up Light. It makes waking up gradual and pleasant.

4. Eliminate Stimulants

The physical sensations that preceded my panic attacks were the jitters (shaking hands, quivering voice) and a rapid resting heart rate. Guess what gave me both of those sensations? Coffee. And wouldn’t you know it, I was drinking 3-4 cups each day, running around like Tweek on South Park.

I decided to cut coffee out of my diet for a week. Shortly after I removed the caffeine from my bloodstream, I stopped having the jitters. My resting heart rate remained steady. The physical sensations that came with having a panic attack were no longer there, and I started calming down. [After some experimentation, I found that I could only have a half serving of coffee before I started feeling jittery. I also found that I couldn’t have caffeine past 5:00PM without disrupting my sleep routine.]

A friend of mine experienced similar results after removing aspartame. She had horrible anxiety for months but couldn’t figure out what was causing it. One day at work, she noticed that she’d finished three diet sodas in just a few hours. Her body was overloaded with caffeine and aspartame (a toxic sugar subsitute in diet drinks). As soon as she stopped drinking diet soda, her anxiety disappeared.

Sometimes, we tend to overlook the simple answers that are right in front of us.  Let’s fix that.


Cut out any substance you regularly consume that’s correlated with increased feelings of anxiety. Common culprits include: caffeineaspartamegluten, refined sugar, alcohol, cigarettes, and marijuana. Keep it out of your body for one week.

If you have that substance in your house, throw it away. If the people you spend the most time with are encouraging you to consume it, politely turn them down and do something else. If you have strong cravings for that substance, find a healthy substitute you can consume instead (e.g. water, tea, sugar-free gum).

After the substance has been out of your system for seven days, you can reassess its toxicity by consuming a typical dose you’re used to taking. If your anxiety symptoms return within one hour of ingestion, you’ve found the culprit. Try to eliminate that substance for good.




5. Trauma Releasing Exercises

[Note from Charlie: This technique is going to sound bizarre. I don’t blame you if you’re skeptical, but it worked really well for me and there’s a good amount of research to back up the benefits of T.R.E.]

One of the weirdest effects of anxiety is how much tension builds up in your body. I couldn’t even take a deep breath because my stomach always trembled, like it was being stretched to its limits. Relaxing felt physically impossible.

My body was so tense because I was constantly in fight-or-flight mode. Every day, I was producing the energy needed to survive a life-threatening event. The problem was that this event was in my mind; it was imaginary and it never took place. I had all this excess energy that wasn’t being released, so I became extremely high-strung.

A friend recommended that I check out T.R.E. — Trauma Releasing Exercises, which helped him conquer his anxiety. I watched a few videos of T.R.E. on YouTube and immediately thought it was fake. The clips showed people lying on the ground as their bodies went into spastic tremors. Their movements looked comical and freaky, like they were in the middle of an exorcism.

T.R.E. was originally designed as a safe and easy way to induce tremors. Anyone who has gone through extreme trauma, from the emotionally abused to war veterans, can use these exercises to their benefit. The exercises take about 20 minutes to complete, and they’re intended to induce tremors by exhausting your leg muscles.

I learned that tremors are a natural means for mammals to discharge excess energy after a traumatic event. The tremors release our body’s surplus of adrenaline after it’s no longer needed for survival. I watched footage of antelopes, bears, and other animals that had narrowly escaped an attack. Their bodies instinctively trembled for a few minutes, and then they’d act calm and normal again. It was fascinating.

Unlike most species, adult humans typically prevent themselves from having tremors. Why? Because we avoid behavior that makes us look weak or vulnerable. In other words, we are so self-conscious that we unknowingly block our body’s natural (yet embarrassing) function during times of great stress. As a result, we make it very difficult to overcome trauma because we’re constantly holding in so much excess energy. Thankfully, T.R.E. can help.

I bought the T.R.E. book on my Kindle and went through all the exercises. After I completed the full circuit, I lied on the ground and was STUNNED as my back, hips, and legs shook rapidly in sporadic bursts for 20 minutes. The tremors weren’t painful at all; the sensation actually felt relaxing and natural. I was just astounded by how vigorously my body shook. I looked like a vibrating cell phone. After my body’s tremors finally subsided, I went to lie down on my bed and immediately fell into a deep sleep.

I performed these exercises three nights per week, for three weeks. They were hugely effective for releasing the physical tension my body was holding in. I can’t show or describe all of the exercises here, as I don’t want to take credit for a routine I didn’t create. But if you’re interested in giving T.R.E. a shot, you can check out the book (or win a free copy by leaving a comment below — see instructions at the bottom of this post).

I know T.R.E. might sound kooky, or even a little scary. But it’s really not bad at all. It’s basically just a series of stretches that help your body thaw itself out by alleviating your chronic tension. Your tremors will definitely make your body move in strange ways though, so be sure to do these exercises in a relaxed environment where you won’t feel self-conscious.


Watch the 8-minute Tremors video on T.R.E.’s official website to see how it works.


Do the exercises every other day for three weeks. Then as needed.


$10 for the book.


Trauma Releasing ExercisesThis short book explains the trauma recovery process in uncomplicated language. The last chapter includes photos and descriptions of the exercises, which elicit tremors that release deep chronic tension in the body.

6. Fix Micronutrient Deficiencies

Everyone should get tested for micronutrient deficiencies at some point. There are plenty of reasons why this is a smart move, but the most obvious is because of our changing soil. 

The vegetables we eat absorb their nutrients from the soil they grow in, and the purity (and depth) of our topsoil has been severely compromised through hyper-aggressive/monoculture agriculture and mining. So even if you are eating a seemingly natural and well-balanced diet, you could still be deficient in key nutrients your brain and body need in order to function properly.  Broccoli in one place doesn’t necessarily equal broccoli in another, for instance.  Where you get your produce matters; they could be chock-full or devoid of the vitamins, etc. depending on where you source.

Below are two of the most common nutrient deficiencies that tend to amplify anxiety:

  1. The Vitamin B club. A lot of people are deficient in B-12 (methylcobalamin — found in meat), but others might be deficient in B-2 (riboflavin — found in yogurt, spinach, almonds, and eggs), or B-5 (pantothenic acid — found in avocados, mushrooms, and sweet potatoes), or B-6 (pyridoxal phosphate — found in tuna, chicken, turkey, and cod). Fortunately, it’s possible to get the recommended dose of all the B vitamins by taking a B-complex pill once per day.
  2. Omega-3 Fatty Acids. You can find omega-3 in salmon, fish oil, hemp seeds, and flax seeds. I take 2-4 servings of Nordic Natural’s cod liver oil pills each day, which contains a solid dose of the three fatty acids: EPA, DHA, and ALA.

For a few months, I was feeling unusually fatigued. I had no idea what was causing it. I was getting good sleep, I was eating healthy, and I was exercising regularly. I did some research, and found that I had a ton of symptoms for Vitamin B-12 deficiency: I felt mildly depressed, I had very little motivation, I was short of breath, my brain was foggy, and my fingers occasionally went numb.

Vitamin B-12 is in meat, fish, and certain dairy products (if you’re a vegetarian or vegan, you’re likely deficient in B-12). The normal range for B-12 is between 500 and 1,000 pg/ml (picograms per milliliter), and if your levels fall below 500 pg/ml, your brain ages twice as fast. In other words, if your body isn’t absorbing enough B-12, your mind rapidly deteriorates and stops functioning properly. Holy Guacamole!

When I got tested for B-12 deficiency, the results showed that my levels were 200 pg/ml — less than half of the minimum amount my body required. Even though I was eating meat almost every single day, I was still massively deficient.

I immediately began supplementing with Vitamin B-12 pills — 1,000 mcg every day, sublingually (under the tongue). Within one week, I could already feel a difference. I was less foggy and more energetic. When I got tested again for B-12 a month later, my levels had shot up to 529 pg/ml. I was back in the normal range.

A few of my friends took micronutrient deficiency tests, as well. None of them had B-12 levels as low as mine, but they were all deficient in something. One found he was deficient in magnesium. Another was deficient in selenium, while another was deficient in potassium. All of them took measures to correct their deficiencies, brought their levels back up to the normal ranges, and felt like new people. Their minds were clear and sharp, and their energy went through the roof.

One final note on deficiencies: It’s possible that your gut isn’t absorbing nutrients properly. If you suspect that’s the case, you might consider taking a probiotic supplement to introduce more healthy bacteria into your GI tract. You can also get more healthy bacteria by eating fermented foods, like sauerkraut and kimchi.


Research the nutrients mentioned above to see if you might be deficient.


Once you’ve been tested for deficiencies, ingest an ample amount of the desired nutrients (via food or supplements) for 30 days. Get tested again and re-assess.


Varies, depending on whether you’re ingesting food or supplements (pills average less than $1.50 per day). $80 for the B-12 deficiency test at Any Lab Test Now. $400 for the micronutrient test. I know, I know – it’s expensive.


[None of these resources are affiliate links. Neither Tim nor I will earn money if you decide to make a purchase through them.]

Any Lab Test Now. You can get tested for deficiencies in just a few minutes at Any Lab Test Now and have the results emailed to you within 48 hours. You can also get micronutrient tests at your doctor’s office, but (depending on which state you’re in) they will probably make you jump through a few hoops first.

Spectracell. This is the micronutrient testing lab Tim used to uncover his selenium deficiency (he used Brazil nuts to correct it).

Vitamin B-Complex Caps. This covers all of your bases for the B vitamins. These pills are free from common allergens, like soy, yeast, barley, wheat, and lactose.

Cod Liver Oil. I take 2-4 servings per day to get omega-3 fatty acids. If you don’t like taking so many pills, try squeeze packets.


Final Thoughts

Some people have been on the ride for a long time, and they begin to question, “Is this real, or is this just a ride?” And other people have remembered, and they come back to us and they say, “Hey, don’t worry; don’t be afraid, ever, because this is just a ride.”
Bill Hicks

I couldn’t see it for a long time, but I was the creator of my own anxious reality.

I didn’t allow myself to have fun. I never slept. I drank coffee all day while staring at screens. I consumed fear-mongering news that convinced me the end was near. People absorbed and reflected my nervousness back at me, and my anxiety perpetuated itself.

I’m not crippled with anxiety anymore, and I’m not burned out. Now, my state of mind is different.

I allow myself to have guilt-free fun in everything I do. The world is a playground, my work is a game, and life is a ride. And you know what? I feel 100 times better than I ever thought I would. I’m back to my normal self.

And I have no fear that those awful feelings will ever return, because I know the antidote — play.

# # #

Want a free copy of Charlie’s book, Play It Away: A Workaholic’s Cure for Anxiety?

Leave a comment below with your favorite technique for managing or overcoming anxiety.

The top 20 comments, as selected by Charlie, will receive:

  • (1) free digital copy of Play It AwayKindle .mobi or PDF ($10 value)
  • (1) free digital copy of the Trauma Releasing Exercises workbook ($10 value)
  • Bonus: Charlie’s weekly routine during the month he healed his anxiety


by Tim Ferriss at February 19, 2014 10:18 PM

Dave Winer

A new Fargo video

The original quick-start video was too long. Too much preamble. I was violating my own rules for good demos.

So in preparation for Fargo 2, which is now in the bag, awaiting a little more burn-in, before the switch gets flipped, I did a new much shorter video, with the same content.

It's the quickest way to create a blog and write your first post. Here's the video.

February 19, 2014 05:36 PM

Alex Schroeder

Huge Parties

Yesterday I ran a game for eight players (I usually cap at six). We had already established that this was going to be a raid on a pirate fortress. I knew that it was going to have 80 elves ready to fight, 80 elves sleeping (all 1st level), a 9th and a 7th level elf, and a red dragon. The party allied itself with some commando elves and so the attacking force consisted of eight player characters and their eight henchmen with levels between 1 and 7 as well as the command elves, six 6th level elves and eighteen ordinary 1st level elves; forty characters in all. I handed out little index cards with the stats of the elven commando leaders and their henchmen. Three hours later it was all over, most of the pirates slain, the dragon dead, the enemy leader killed, her second in command take prisoner, the dragon hoard secured and the fortress being towed to the players’ domain. (This is a big mashup campaign using Spelljammer ships and fortresses, and An Echo Resounding for domain level play.)

It was a very unusual adventure, but I like the change in pace!

The fortress was structured as a series of encounters with a mini map I kept behind the screen, usually with ten elves, sometimes with a leader of level 1d6+1; sometimes with more elves about to arrive. Good use was made of hold portal to prevent elves from joining up and good use was made of silence and sleep to surprise enemies and incapacitate a dozen foes in the surprise round, haste was used to quickly position archers and casters, sneaky thieves were used to scout ahead and best prepare for assaults, and to avoid tricky hallways with enemy archers hiding, several lightning bolts were used to kill the dragon before it could join the elven sorceress, they survived her cloudkill with minimal losses and managed to dispel it the next round…

It was a bloodbath.

For ease of reference and consistent spell selection of both the allied commando elves and the defending elf pirates, I used a technique I described previously: my spell book notation lists the spell-book of the top elf or magic-user with spell level and spell name, and a third column with the character level at which this spell is usually picked. This helps me run a lot of spell casters. This list would begin as follows, for example:

Spell Level Character Level Spell Name Notes
11sleep2d8 HD
12shieldAC 4, AC 2 vs. missiles
17detect magic
24detect invisibility5 rd./level
35haste30 min.
36dispel magic
47polymorphAC 0 1d6+1/1d6+1/3d10 MV 240
48dimension door360 ft. or 120 m
59cloud kill⌀ 30 ft., MV 6

The most important skill of all is a sort of military “go! go! go!” efficiency at the table, however. No questions about who rolls initiative. Roll all the dice – have d20s and damage dice of matching colors and have all the colors assigned to your dudes and roll them all at once. All enemy elves, regardless of level, had AC 4. When your turn comes up, just tell me “I hit three times, damage is 4, 5, 2.” That’s the plan, anyway. :) Also, pick a leader who tells me where the party goes. Which stairs do you pick? Quietly or quickly? When the fight is on, just keep pushing. When the fight is over, let players talk, laugh, investigate, debate.

That’s it.

The picture shows the kind of notes I had prepared ahead of time. As you can see these are crude sketches of the area and enemy positions. Most enemies were all elves with a single magic missile memorized. If the party won initiative, it was usually over in a few seconds.

As you can see on the little fold-out flow-chart on the left, the encounters weren’t all arranged linearly. My main idea was this:

  1. Failure to scout ahead would result in players fighting elves on catapult platforms, essentially wasting resources. As it turns out, players did scout ahead but decided to fight all the elves anyway, thinking that they wanted to any surprises behind their backs.
  2. Following the main entrances would put the focus on fighting, following the steamy passages left and down would allow more sneaking and would allow players to fight the dragon before it joined up with the leaders. Players chose to go for the sneakier variant.
  3. I had the vague idea of figuring out whether players were wasting time or being too loud and springing extra ambushes on them if they did. In the press of the moment and considering how lame rolling for “move quietly” would be in this context, I just used the flow-chart as is.
  4. When I gave the players the commando elves to run, I told them that the elves would evaluate their leadership and if they felt that the party had been betraying them (using them as cannon fodder), then surely they would turn on them – just as the party would have turned on them. The players accepted this.

It worked for me!

In the final analysis, it was a lot easier than I expected. Was it because the commando elves were too strong? Was it because the party had four extra players I had not expected? (Two of them are new players from my Sunday campaign and another two players are not regular players so I wasn’t counting on them.) Oh well, I think it’s only fair to not adjust difficulty levels on the fly.


February 19, 2014 11:15 AM

Dave Winer

Sandberg-Diment's 1983 ThinkTank review

Last week I was telling the story of how the NY Times played a big role in getting my first company, Living Videotext, off the ground. It was 1983, and I had just shipped the Apple II version of ThinkTank, a product that's actually a lot like Fargo. I was having trouble getting anyone to look at it. I was pestering Erik Sandberg-Diment at the Times because I was reading his software column, then a very new thing for such a mainstream publication. I felt he'd get the idea, because he approached software from a non-traditional point of view. He was the kind of person I had made ThinkTank for. I could just feel it.

His review came out at almost the exact moment I was giving up, and getting ready to look for a real job. I looked up the review today, it's in the Times archive, and read it again, 31 years later. The computer industry still doesn't understand outlining software, and Erik's review still cuts through all that, especially the last paragraph:

It was after running the tutorial that I came upon what may be one of the best uses of all for Think Tank, and it's not any of the myriad organizational tasks stressed by the program's producers. Rather, it's simply putting people at ease using a personal computer for something besides games. Think Tank is so easy to use, and so relatively errorproof, that even a first-timer feels as if he's in charge of the computer, instead of the other way around. And being in charge of the computer is what enables you to do with it things you may never have thought of doing before.


February 19, 2014 12:28 AM

Fargo 2 update

I've been dealing with a really bad cold for almost a week. I got really sick last Thursday, and spent a few days sleeping and watching Netflix series. I started feeling better yesterday, and today I felt much better, but still called-in sick. I've learned over the years that my downfall when managing colds is that I declare victory too soon, and then relapse and lose more days. So I spent an extra day reading and sleeping and doing a little light writing and thinking work.

One of the little projects I did was a review of the to-do list for Fargo 2 today and decided that nothing on it is important enough to wait for, so the next mini-project will be to archive Fargo 1 and make 2 the default. It'll still be marked a BETA to alert users to be extra cautious and make backups periodically.

After this release, I'll be free to start new projects, or pick up some others that were on the back-burner, something I'm really looking forward to. I love Fargo, I use it all the time, but I'm itching to create something brand new.

February 19, 2014 12:01 AM

February 18, 2014

Reinventing Business

Founder's Syndrome

I came across this in Wikipedia. When I was 9 or 10, myself and a group of neighborhood kids built a compound in our back yard. It had fences, a hut made from bamboo, and the piece de resistance, an underground fort.

I decided that I was the boss of everything. In effect, I was the chief investor since it was my yard, and most of the materials came from my dad's stash.

Alas, this investment was not enough -- capitalism failed me. All those whom I had imagined my minions decided that they had higher aspirations and stopped showing up. Only after I had been appropriately humbled did people start showing up again.

I guess if you're paying people (and the economy is bad) then you have more control over them. But even that isn't always enough, and it also doesn't seem to bring out the best in the minions (the minions in Despicable Me notwithstanding; since Gru appears to be the only villain with minions, it seems just as likely that he has genetically engineered them for loyalty -- a Taylorist's wet dream).

by (Bruce Eckel) at February 18, 2014 09:40 PM

Dave Winer

How I think about Bootstrap

There's a brief thread on Twitter with interesting participants from different parts of the web design world. Not sure exactly where I fit in, but I found I had a perspective to offer, and decided to write a post instead of a sequence of 140-character chunks.

The idea of Bootstrap, as I see it, is to add a layer of standardization between the app developer and the "hardware," in this case, the user interface offered by the modern HTML 5 web browser. When you view it this way, there's nothing controversial about it. It's what engineers always do. When we see complicated chaos, we try to figure out what's really going on, and produce a simplified and rational view of it. Then all the code that rides on top of the new layer can also be rational and relatively simple.

I want to tie-off the details of how menus work, for example, in one place, and once done, I never have to do it again. But there's another view of it. If there's only one place I do menus, and we have a rational abstraction of what a menu is, then we can slip in a whole other implementation behind it, and the upper-level code, unaware of the change, will still work.

Even better if a large base of software agrees on how menus are done. Then people can create tools for authoring menus. So we get to a higher level. Something everyone had to do for themselves at one point, now is part of the toolkit that everyone can build on.

This is how all software is built. Bootstrap is just another instance of this process, and a much-needed one.

Another example, when I write Mac software, I don't get to say how menus or dialogs work. That's up to the operating system. That makes the developer's life easier, but it makes the user's life easier too. If you only have to learn how to use one type of menu, you can learn to use more types of software. Why waste time learning two ways to do something so common and simple?

Same with dialogs, typefaces, layout, the details of style-creating. Almost everything you see on this website,, flows through Bootstrap in some way.

Over time the innovations of the past become commodities, and then are baked into the OS, creating room for innovation at a higher level. When software is flowing properly, this should be a process that's repeated frequently. Never too soon, never before the pattern of use has emerged, but hopefully not too late. We are ready for what Bootstrap does. It's good that it exists, and I think it's something everyone should build on.

February 18, 2014 06:38 PM

How to Node

Mocking Dependencies using [rewire]

Despite all my efforts to try to encapsulate some of my code into my modules, I was always founding myself exposing too much just for unit testing purpose. And even thought, it was often very complex to mock out some of the external libraries I was using. That was before I found the rewire library. As they say, it only: "adds a special setter and getter to modules so you can modify their behaviour for better unit testing".

This is all you need!

Let's see an example

I have a very simple controller like this:

'use strict';

var userService = require('../service/user-service');

exports.allUsers = function (req, res, next) {

  userService.getUsers(function (err, users) {
    if (err) {
      return next(err);

In my test driven development all I want to test is:

  • this method will call getUsers on userService
  • if the callback receive an error then it will call next passing the error
  • else json is called on the response with the users as arguments

Setting up a mock is easy (I use sinon but any mocking will do it):

// given
var userController = require('./user-controller'),
    userServiceMock = {};

// and
userServiceMock.getUser = sinon.stub().callsArgWith(1, null, [{id: 'user1'}, {id: 'user2'}]);

// when

// then

But how can I inject the mock instead of the real user service ?

=> Rewire!

Instead of require the user-controller I'm using rewire:

var userController = rewire('./user-controller')

Then I can get and set any properties on the module. So I can do:

        'userService': userServiceMock

Et voila!

Here is the full test for the previous controller:

'use strict';

var sinon = require('sinon'),
    rewire = require('rewire'),
    userController = rewire('./user-controller');

describe('allUsers', function() {

  it ('should return all users',function() {

    // given
    var userServiceMock = {},
        res             = { json: sinon.spy()},
        users           = [{id: 'user1'}, {id: 'user2'}],
        nextStub        = sinon.stub();

    // and
    userServiceMock.getUser = sinon.stub().callsArgWith(1, null, users);

    // when
    userController.allUsers({}, res, nextStub);

    // then

by (Caroline BDA) at February 18, 2014 07:05 AM

February 17, 2014

Alex Schroeder

Cool OSR Blog Posts

Two blog posts I enjoyed today:

Specialization and Assumed Competence illustrates that any system where the gap between a characters with and without specialization increases is a system where the general competence decreases even if the general challenge level of the environment and the actual stats remain unchanged.

On the Deadly Difference drives home a point I’ve been trying to adhere to for a while, now: announce risks and consequences before players make decisions. My Swiss Referee Style Manual ends with the very same advice, inspired by the very same blog.

The following list is from the Hack & Slash blog.

Announce consequences before players commit to actions. There can only be meaningful choice if players know what to expect. (“If you fail the roll, you’ll […]. Do you want to risk it?”)

Provide information if players are unsure. You can wrap it in vague language, but be sure to provide the necessary information. (“It’s hard to say, but you feel a nagging suspicion that he’s probably hiding something.”)

In the same vein, provide warnings if players are putting themselves in danger. You’re aiming for “I knew it!” when something bad befalls player characters. (“You notice that the hanging bridge above the tar pits seems frail. Just make sure nobody cuts those ropes!”)

Provide alternatives if you think that what players want should be impossible. (“You can’t just buy a magic weapon but they say there’s a hidden entrance to a goblin market in the Smoke Forest.”)

Add obstacles whenever players are getting what they want. (“The insect trainer will teach your lizard how to spy ahead if you provide her with a living giant wasp.”)


February 17, 2014 09:30 PM

Reinventing Business

Github and Mozilla

Both Github and Mozilla are distributed companies at their core. Mozilla is about open-source development so requiring developers to be in one place has never been practical, and a large portion of Mozilla developers are not company employees so they wouldn't move anyway (although it's important to include them, as Mozilla does in some of its big meetings, where it flies contributors to attend). Github's goal is to support distributed development, primarily through the Git distributed version control system (DVCS), and in their case they use their own system to accomplish this ("eat their own dog food," aka "dogfooding"). Over half of Github's employees are not San Francisco residents, so Github puts in a lot of effort to make sure the remote employees will have as much connection as possible. Often this is in the form of hi-tech, high bandwidth communications, but it also includes bringing the employees to San Francisco for periods of time so they can steep themselves in the experience.

My visit to Mozilla concerned a different project so I only peripherally heard about the (relatively flat) organizational structure. I went to Github specifically to get a feel for their organizational structure.

Github has recently moved into a new building, and they've really done some fascinating things with the interior design. New visitors go into the "oval office," a reproduction of the US president's office in the White House. The entire first floor feels something like a cross between a restaurant, a bar and a theatre. It is created not only to host visiting teams (who periodically come for meetings) but also as a general workspace. The second floor makes me think of a library; you go there when you want a quieter experience and to focus. The third floor is more energetic, with music and conversation, like a cafe. The top floor opens to the rooftop deck, which isn't large -- it might seat 30 people or so -- but you're outside and can see buildings and the bay, etc. Because, like a coworking space, you can set up anywhere, apparently Github has a system to allow you to locate someone if you need to talk to or work with them.

This is an interesting pattern I've noticed, this diversion from the "open office" plan where you have a fixed space with all your stuff, but no cubicle. With cubicles or "open plan," you're still in rows and you still have your assigned spot, and so if it happens to be a noisy area of the company, or if it's too quiet for your tastes, you're stuck. But in the new approach (enabled by laptops), you can get up and move to any location you want, to suit your mood and your needs. Meetings & workgroups can spontaneously form anywhere, or they can use one of the closed-off spaces. The open office plan has taken some well-deserved flak in recent times, but perhaps this modification can solve at least some of those issues.

In the last year I've become a big Github fan. I've been using version control for nearly 30 years (!), starting with RCS when I worked at Fluke. With RCS we learned that a lot of it was flaky and unreliable, if not downright broken, so we tended avoid using anything except checkins. Branching and forking and all that was not considered trustworthy. And for 30 years I kept to that practice, using version control as a basic storage repository. So when Github created graphical apps for the different OSes, I was quite surprised. What, no learning the command line? Even better, the things you do most of the time are part of the app -- one of the biggest problems with command-line programs is that everything appears to be the same level of importance. The Github app makes it easy to do the things you usually do, and it also shows you what those things are! That's what made me a fan -- they worked to make things easier for me.

Github is a bootstrapped company. They were making a profit before taking any investment money, so they got used to charting their own course without investor guidance. 1.5 years ago, they took a 100 million investment.

Github's widely-touted way of working is "everyone works on what they want to." The fact that they've been as successful as they have using this approach speaks, I think, to the idea that when people really like working at a company, they tend to work towards the company's best interests. Now that they have a "runway" (a limited period of time before the 100 million investment is expected to pay off), it will be interesting to see whether the pressure from investors changes the working style of the company.

Bucking a common trend, Github does not provide lunch. This was a carefully-considered decision. Not only does its location provide access to many restaurants within walking distance, but Github's goal is to reach out into the world, so this was seen as a more appropriate path than, say, Google's choice to try to keep its engineers rubbing elbows as much as possible (which Yahoo is duplicating). This clearly works well for Google, and had I been in grad school when Google was around it might have looked very attractive -- like more grad school. But these days I wonder how one might create the minimum number of carefully-considered constraints within a company, and what the result would look like.

by (Bruce Eckel) at February 17, 2014 07:23 PM

Ian Bicking

Defaulting To Together

I’ve been working on an experiment, Hotdish, for several weeks now with Aaron Druck and Gregg Lind. I’m really excited about what we’re doing, and in particular I’m excited about some of the principles we are bringing to the design. Hotdish is an experiment in sharing a browser session among a group of peers — you activate Hotdish on one browser window and everyone in your group sees what you do in that window, and we have tools to interact in the context of that session.

We’ve started the design with the expectation that Hotdish will be used with a group of people you want to be working with, and we expect that you trust this group of people. We’re not building this as an internet-wide tool, one where people will be trolling each other, or one where some people will be an order of magnitude more noisy than everyone else. So when we take a regular internet collaboration/cooperation idea and rephrase it in the context of Hotdish we think about how we can change default behaviors to make use of that trust.

Instead of using the tool to restrict people from bothering each other, we want to create a tool that enables powerful new ways for one person to bother another in the group. If that’s a problem, we expect you to deal with that socially rather than building something into the tool. (Use your words!)

Pushing tabs instead of posting links

In Hotdish instead of asking someone to go to a link, you push a link to everyone. The normal flow is you copy the URL, you go to your communication medium (instant message, chat room, shared document), you paste the URL, and then you beg everyone to please click it. Then you ask if everyone is really there yet? Then you make sure everyone knows it wasn’t the second-to-last link, but the very last link you pasted. Just this minute. Wait, no, not the link that other person pasted in, though I suppose you should all go there too. OK, are we all on the same page now? Oh wait, I just made a change, can everyone reload?

No: with Hotdish you just push the link, make it open for everyone, and once you’ve done it you’ll even get a second confirmation because we show who on a page. The only problem is right now we open a background tab (because forcing a tab switch is too jarring), but I want to figure out how to push even harder, to let people be more assertive if they choose. Like maybe if you push twice in succession everyone gets a big “Alice really wants you to see: [page]” notification that you can’t really ignore, or if you explicitly ignore it then Alice knows you decided to ignore it.

Presenting and peeking in

Another example where we’re being aggressive: in Hotdish you can present a page to someone, showing them exactly what you see (including details that might not be the same for them if they went to the same URL). But you can also view someone else’s page. When you “view” a page you are viewing the page exactly as the other person sees it (as opposed to simply visiting the same URL as the other person). It’s like the ability to peek over anyone’s shoulder.

Audio/video CB/walkie-talkie mode

We haven’t added any voice tools to Hotdish yet. It didn’t seem like the heart of what we were trying to explore — of course we knew we’d want to enable communication among the group, but we didn’t think we’d bring anything new, and so the effort didn’t feel like it would bring much. But then we also hadn’t thought about how we might rethinking the ideas in this concept, instead we were just borrowing what seemed like the obvious interface.

After some thought a feature I’d like to try is a talk-at-anyone mode. This is a little like Sqwiggle, where you can talk with anyone without confirmation. Still I find the Sqwiggle model a little much, where anyone can watch me on their own volition. Maybe it’s fine, I might be wrong. But I’m more open to anyone talking to me, and then requiring confirmation before they can listen or watch me. Having someone yell at me spontaneously would probably be annoying, but that’s a social problem.

Sharing a record of your activity

The core feature of Hotdish is that everyone can see any of the pages you open, and see some of your navigational behavior — like when you go to a new page or change active tabs. Realistically you would not do everything in your Hotdish window (Hotdish exposes only one browser window to the group — everything you do in other windows remains personal), but I hope that Hotdish could allow people to do more things in front of their peers. For instance, from an article Making Remote Work Work:

It’s my earnest belief that some people will have higher expectations for you because you work remotely. It’s very easy for them to believe you’re in your underwear playing Final Fantasy instead of slogging through the documentation for Django. Not all work has obvious output and when they can’t see you at your desk, it’s tempting to log those blank hours as time wasted.

One of the hidden parts of work (paid work, school work, or volunteer work) that I want to expose with Hotdish is research. Research is slogging through the docs, finding out if some idea you’ve had maybe exists (and perhaps finding out doesn’t), it’s finding the right term, looking up a date or meeting… it’s all these little things we constantly do. But those things are never the focus of “collaboration”. Research is the stuff you do before you can tell anyone what you’ve learned. It gets seen as a prerequisite to accomplishing real work, instead of a part of what it means to do real work. And yet when asked everyone will defend the value of research: we know we should value this thing, but because we have a hard time seeing it too often we do not.

By putting your work in front of anyone — even if you aren’t trying to share anything with anyone, or have not come to any determination — I hope we can make research as collaborative as conclusions are.

Recording history

A feature we are exploring is called the Activity Log: a persistent record what happens in the group. Our first foray into this is somewhat comically primitive, we are just pasting the activities into an Etherpad document. It’s primitive but I’m going to have a hard time getting myself to replace it because there’s something that just feels really right about using an editor.

After my last post I got a comment challenging me to consider the “social implications of showing others one’s mistakes”. A fair challenge, and honestly I have tried to ignore that for all the reasons I’m talking about here. But I think in this silly model of recording activities to a text editor there is also a response to this: we keep a record, along with everything else we do, because we want to build a model for a constructive and supportive group to enhance their work together. But a constructive and supportive group is also based on trust. One of the ways we demonstrate trust is with things like using an editable document instead of a strict log: we should trust each other to edit history, and edit out history. We should trust that people use that power well.

In a live environment like Hotdish it’s hard to actually make sure no one saw something. You open a link, it shows up to everyone that moment. You close it, and maybe we can figure out a way to keep it out of history, or allow you to remove it from history, but we can’t remove it from the memories of everyone who saw it. But this is another kind of politeness: we ask that people respect even our retroactive attempts at privacy. This is something that Facebook, for instance, works pretty hard at — they do their best to make deleted content really disappear. Programmer-designed tools tend to be horrible at this. I think because the programmer knows you can’t really delete history, you can’t know what has been recorded on other clients, you can’t erase people’s memory. They don’t put value on politely agreeing to forget. And so programmer-designed tools almost never let you edit history. We will not make this mistake.

So that’s some of what we’re thinking. Some of these ideas aren’t going to work out. Dogfooding will be essential. But we can’t see how far we can go with putting people together unless we go too far and then pull back.

I’m interested in other ideas for somewhat uncomfortably intimate browser-mediated sharing experiences. Have any?

by Ian Bicking at February 17, 2014 06:31 PM

Simplest Thing (Bill Seitz)

"You spend lots of money on material stuff to impress other people without realizing those other..."

“You spend lots of money on material stuff to impress other people without realizing those other people couldn’t care less about you.”

- 77 Reasons Why You’re Awful At Managing Money 

February 17, 2014 03:29 PM


WebGL, GPGPU & Flocking Birds Part II – Shaders

In the first part of “WebGL, GPGPU & Flocking Birds”, I introduced flocking. I mentioned briefly that simulating flocking can be a computationally intensive task.

The complexity of such simulations in Big O notation is O(n^2), that is since each bird or object has to be compared with every other object. For example, 10 objects requires 100 calculations, but 100 objects requires 10,000 calculations. You can quickly see how simulating even a couple thousand objects can quickly turn a fast modern machine to a crawl especially with just javascript alone.

It’s possible to speed this up using various tricks and techniques (eg with more efficient threading, data structures etc), but when one greed for more objects, yet another brick wall can be found quickly.

So in this second part, I’ll discuss the role of WebGL and GPGPU which i would use for my flocking birds experiments. It certainly may not be the best or fastest way to run a flocking simulation, but it was interesting experimenting with WebGL to do some of heavy lifting of the flocking calculations.


WebGL can be seen as the cool “new kid on the block” (with its many interactive demos), and one may also consider WebGL as “just a 2d API“.

I think another way one can look at WebGL, is as an interface or a way to tap into your powerful graphics unit. Its like learning how to use a forklift to lift heavy loads for you.

Intro to GPUs and WebGL Shaders

For a long time, I understood computers had a graphics card or unit but never really understood what it is really until recently. Simply put, the GPU (Graphics Processing Unit) is a specialized piece of hardware for processing graphics efficiently and quickly. (More on Cuda parallel programming on Udacity, if you’re interested)

The design of a GPU is also slightly different from a CPU. For one, GPU can have thousands of cores compared to dozen that a CPU may have. While GPU cores may run at a lower clockrate, its massive parallel throughput may be higher than what a CPU can perform.

A GPU contains vertex and pixel processors. Shaders are code used to do to program them, to perform shading of course. That includes coloring, lighting, post-processing for images.

A shader program have a linked vertex shader and a pixel(aka fragment) shader. In a simple example to draw a triangle, a vertex shader calculates the coordinates of the 3 points of the triangle. The calculated area in between the triangle is passed on to the pixel shader where it paints each pixels in the triangle.

Some friends have asked me what language is used to program WebGL shaders. They are written in language call GLSL (Graphics Library Shading Language), a C like language also used for OpenGL shaders. At least, I think if you understand JS, GLSL shouldn’t be too difficult to be picked up.

Knowing that WebGL shaders are what used to run tasks on the GPUs, we have a basic key in unlocking powerful computation capabilities that GPUs have, even though it is primary for graphics. Moving on to the exciting GPGPU – “General-purpose computing on graphics processing units”.

Exploring GPGPU with WebGL

WebGL, instead of only rendering to the screen, has the ability to write to its own memory. These rendered bitmaps in memory or RAM is referred to Frame Buffer Objects (FBOs) and the process can sometimes be simply referred as a render-to-texture (RTT).

This may start to sound confusing, but what you need to know is that the output of shader can be a texture, and that texture can be an input for another shader. One example is an effect to rendering a scene inside a TV as part of a scene inside a room.

Frame buffers are also commonly use for post-processing effects. (Steven Wittens has a library for RTT with three.js)

Since these in-memory textures or FBOs is that they reside in the GPU’s memory, its nice to note that reading or writing to a texture within the GPU’s memory is way fast, compared to uploading a texture from the CPU’s memory in our context, javascript’s side.

Now how do we start making use or abusing this for GPGPU? First consider what would a Frame Buffer possibility represent. We know that a render texture is basically a quad / 2d array holding RGB(A) values, and we could decide that a texture could represent particles, and that we could represent each pixel as each particle’s position.

For each pixel we can assign the RGB channels to the positional component (red=x position, green=y position, blue=z position). A color channel may only have a limited range of 0-255, but if we enable floating-point texture support, each channel goes from -infinity to infinity (though there’s still limited precision). Currently, some devices (like mobile) do not support floating-point texture support, so one should decide whether to drop support for those devices or pack a number over a few channels to simulate a value type of larger range.

Now we can simulate particle positions in the fragment shaders instead of simulating particles with Javascript. In such cases, a program may be more difficult to debug, but the number of particles can be much higher (like 1 Million) and CPU can be freed up.

The next step after the simulation phase is to display the gpu simulated particles on screen. The approach is to render particles like normal, however, the vertex shader then looks up its positional information stored in the texture. Its like adding just a little more code to your vertex shaders to read the position from the texture, and “hijacking” the position of the vertex you’re about to render. This requires an extension to lookup textures in the vertex shader but likely its supported when floating point textures are.

Hopefully by now, this gives a little idea on how “GPGPU” could be done in WebGL. Notice I mentioned with WebGL, because its likely that you can perform GPGPU in other ways(eg. with WebCL) in a different approach. (Well, someone wrote a library call WebCLGPU, a WebGL library which emulates some kind of WebCL interface, but I’ll leave you to explore that).

(Some trivial: In fact, this whole GPGPU with WebGL was really confusing to me at first and I did not know what its supposed to be called. While one of the earliest articles about GPGPU with Webgl referred to this technique as “FBO Simulations”, many still refer to as GPGPU.

What’s funny what that initially I thought GP-GPU (with its repetitive acronym) is used to describe “ping-pong”-ing of textures in the graphics card but well… there may be some truth in that. 2 textures are typically used and swapped for simulating positions because its not recommended to read and writing to the same textures at the same time.)

Exploration and Experiments

Lastly, one point about exploration and experiments.

Simulating particles GPGPU are getting common these days, (there are probably many on chrome experiments), and I’ve also worked on some in the past. Not to say that they are boring, (one project which i found interesting is the particle shader toy) but I think there are many more less explored and untapped areas of GPGPU. For example, it could be used for fluid, physics simulations and applications such as terrain sculpting, cloth, hair, cloth simulation etc.

As for me, I started playing around with flocking. More about it in the 3rd and final part of these series.

by Zz85 at February 17, 2014 01:18 PM

Alex Schroeder

Pendragon vs. D&D alter Schule

Meine Pendragon Kampagne hat sich diesen Sonntag ersatzlos aufgelöst. Wie ich schon auf Englisch geschrieben habe, gibt es hierfür eine Vielzahl von Gründen. Für mich war an der Diskussion vor allem interessant, dass zwei meiner Spieler die Pendragon Kampagne mit meiner D&D Kampagne verglichen.

Hier mal ein tabellarischer Vergleich einzelner Aspekte meiner Kampagnen.

Pendragon “klassisches” D&D
Generationen von Spielercharaktere mit klarer Erbreihenfolge. Spielt man ein Jahr pro Spielabend dauert mindestens 20 Spielabende, bis man einen Sohn spielen kann, falls überhaupt einer die ersten 15 Jahre überlebt.Eine Menge von Gefolgsleuten, welche kommen und gehen, parallel zu den Hauptcharakteren Stufe steigen, mächtiger werden. Es gibt keine Blutsbande aber eine gemeinsame Geschichte dank gemeinsam überstandener Abenteuer.
Die Suche nach einer Frau ist wichtig. Sobald man allerdings geheiratet hat, ist die Frau egal. Nebulös entstehen Kinder, von der Dame selber kennt man kaum den Namen. Man könnte sich ein kompliziertes Charakterblatt erstellen, doch der Papierkram bringt sowieso nichts.Sexuelle und romantische Aspekte spielen kaum eine Rolle. Es gibt keine Winterphase, kein Werben, keine Kinder, keine Liebschaften. Gegenüber den vielen Gefolgsleuten gibt es ab und zu eine gewisse Loyalität und Treue, manche von ihnen sind erhalten einen eigene Persönlichkeit.
Das Geld und die Einnahmen sind praktisch egal. Wer reich lebt, kann die Mortalität der Kinder reduzieren und erhält ein wenig mehr Erfahrungspunkte. Man kann Befestigungen bauen und Armeen anheuern, in den Regeln sind Belagerungen aber nur knapp und unklar beschrieben. In der Kampagne heisst es manchmal, dass die Ländereien geplündert werden, doch welchen Einfluss Befestigungen hierauf haben, wird nicht beschrieben.Das Geld und die Einnahmen sind eigentlich egal. Weil Geld aber auch Erfahrungspunkte sind, gibt es einen ständigen Druck, dem Geld nach zu rennen. Für das Domänenspiel verwenden wir An Echo Resounding – zusätzliche Regeln, die einfach und klar formuliert sind. Die Domäne hat Einnahmen, Befestigungen, Einheiten. Das ganze ist wie ein kleines Kriegsspiel, welches jeden vierten Spielabend zur Sprache kommt.
Die Kampagne läuft auf klaren Schienen. Wir wollen die Arthus Sage miterleben. Für die meisten Schlachten ist der Ausgang also schon klar. Keine List, kein Glück kann dieses Schicksal ändern.Das Domänenspiel findet in einer offenen Sandbox statt. Es ist möglich, mit Abenteuern das Domänenspiel zu beeinflussen.
Die Kampagne verführt mich als Spielleiter dazu (wie damals die Paizo Adventure Path Serie), die Spieler auf den Schienen zu lassen.Die offene Sandbox erlaubt mir, dort anzubauen, wo die Spieler sich engagieren. Wo geforscht wird, gibt es auch mehr zu entdecken.
Die Kampagne ist chronologisch strukturiert. Das macht mich bezüglich Nicht-Spieler-Charakteren (NSC) sehr unflexibel. Spielt diese Figur in der Zukunft eine Rolle? Wie finde ich diese Information in einem Buch?Die Kampagne ist räumlich strukturiert. Die Basis ist eine praktisch zeitlose Karte. Wenn wir irgendwo hin kommen, ist klar, was es dort zu finden gibt. Die offene Struktur erlaubt mir Improvisation bezüglich der Zukunft.
Die Kampagne ist voller Abenteuer Ideen. Um ehrlich zu sein sind viele dieser Ideen aber nicht so unglaublich interessant. Ein Teil des Interesses entsteht aus den realen Legenden, welche dazu geführt haben, dass sie Teil der Kampagne wurden.Die Kampagne erlaubt mir, Ideen aus der gesamten Old School Renaissance (OSR) auf zu nehmen. Das macht mir mehr Spass und verlangt von meinen Spielern auch kein Wissen über das Quellmaterial. Meine Kampagne ist allerdings bedeutend eklektischer und konfuser.
Die Regeln scheinen im ersten Anlauf klar und einfach zu sein. Im Einzelfall ist es aber immer wieder schwierig. Darf man jederzeit entwaffnen? Muss man im ersten Ansturm die Lanze verwenden? Wie genau vermeidet man es, ohnmächtig zu werden, wenn man eine grosse Wunde erhält? Wie vermeidet man es, keinen Schaden zu nehmen, wenn man im Sattel ohnmächtig wird? Irgendwo steht die Antwort, aber es ist mühsam und bringt kaum etwas.Die Regeln sind kurz und seit Jahren immer gleich. Ich kann den ganzen Abend leiten und muss kaum eine Regel nachschauen. Einzig Monsterfähigkeiten und Zaubersprüche müssen manchmal nachgeschaut werden. In diesen Fällen ist es aber einfach, die entsprechenden Passagen zu finden. Es braucht praktisch keinen Index, weil Sprüche und Monster alphabetisch sortiert sind.
Egal wie gut man ist, es ist immer möglich in einer Schlacht einen Berseker der Sachsen zu finden, der einem, wenn man Pech hat, mit 12W6 ins Gesicht schlägt, was oft zum sofortigen Tod führt.Am Anfang des Spieles ist es tödlich, doch mit einer Hausregel zum Thema hat sich die Thematik entschärft. Zudem gibt es später Zaubersprüche, mit denen die Toten wieder ins Leben geholt werden können.


February 17, 2014 12:08 PM

No More Pendragon

We stopped play midway through year 510 of The Great Pendragon Campaign after a devastating battle in May and ended the campaign. Too much railroading, too many sudden death moments, too many fiddly rules that slow us down but don’t further our enjoyment, too much leafing back and forth in the book… I’m both sad and relieved, in  a way.

The discussion was kicked off by one player who felt like quitting the campaign and explaining all the things he didn’t like. I agreed with a lot of it. I had written about it myself. Another player said he’d like to play on weekdays instead of weekends. Another player was missing. My wife wanted to continue playing but was suffering because of a recent string of character deaths. The last player was new and said he had been unable “to get into it” in the three sessions he had played with us.

An astonishing thing happened during the discussion. My wife and the player who had started the discussion are both players in my mashup game—the old school sandbox game using Labyrinth Lord, the Wilderlands of High Fantasy, Spelljammer, Planescape, and An Echo Resounding. They started comparing the Pendragon campaign to this other game. The other game is crazy (“I’d describe the atmosphere as killer clowns”) but it has more player agency. Pendragon is more about how you deal with the events around you. My mashup game is about the things you do. I rarely need to pick up a rulebook and search for a rule. The NPCs are all strange and memorable. No king Leodegrance, Sir Cador, Centurion King and other faceless dudes that you haven’t interacted with. Pendragon not only suffers from an inflation of NPC names that players haven’t interacted with, it also encourages me to add names, exacerbating the problem. What are the names of the sons of Duke Ulfius? Who cares? I still feel compelled to look it up instead of making it up.

In a way, the big campaign provides a railroad that affects me as well. I am inspired by the campaign, I steer the players towards the rails, I entice them to stay on the rails, they are always present. Like those pesky Paizo Adventure Paths, they shackle my imagination and stiffle my improvisation.

So, where as I am sad to see it go, I am also happy to see how my players love the classic D&D sandbox and validate the choices I made for that mashup game.


February 17, 2014 07:35 AM

February 15, 2014

Alex Schroeder

Über die Geworfenheit

Gemäss meinem Philosophie Lexikon verstehen Heidegger und Sartre mit Faktizität die Tatsache, dass wir Menschen zwar “als verstehendes und handelndes Individuum” faktisch existieren, doch nicht “Herr dieser Existenz” sind. Geworfenheit ist dieser Zustand. Ins Leben geworfen.

Ich kann mich daran erinnern, wie mich das Tabu kalt berührte, als ich meinen Eltern entgegen spuckte: “Dieses Leben habe ich nicht gewollt! Ihr habt mich ins Leben gesetzt!” Das ist lange her und ich weiss schon gar nicht mehr worum es ging, aber dieser Moment, dieses Gefühl, ist mir in Erinnerung geblieben.

Es überfällt mich immer, wenn ich etwas zum Thema Pränataldiagnostik lese. Heute, zum Beispiel, lese ich in der WOZ über das schweizerische Präimplantationsdiagnostikverbot, welches demnächst gelockert werden soll. Die Zitate im Artikel zeigen mir den unterschiedlichen Umgang mit der Geworfenheit.

“Kinder sind heute Projekte. Alles muss planbar, projektierbar und perfekt sein. Ich finde das eine beunruhigende Entwicklung.” (Brigitte Häberli-Koller, CVP-Ständerätin, TG)

“Man sagt von vornherein, ich nehme das Kind nur, wenn es keine Anomalie hat. Das ist eine gefährliche Haltung und eine irrige Vorstellung: Es gibt keine Garantie für ein gesundes Kind.” (Christa Schönbächler, Insieme)

“Die eigentliche Herausforderung wäre, mit Kinderlosigkeit oder mit Behinderung zu leben und gute Lösungen zu finden.” (Gertrud Bernoulli, Pfarrerin, Rüschlikon)

Dieses Bild des Lebens als eine Zufälligkeit, mit der wir uns arrangieren müssen, dieses Bild, dass der Sinn des Lebens, die Freude des Lebens, die Prüfung der Umgang mit diesen Zufällen ausserhalb unserer Macht sein könnte, dieses Bild ist eine Seite, die ich gut verstehe. Gleichzeitig gehört aber die Intention, unseren Kinder ein besseres Leben zu ermöglichen, ihnen einen Vorsprung zu schenken, ihnen Möglichkeiten zu bieten, zu uns. Es durchzieht alles: kein Rauchen, kein Trinken, Stillen, Förderung, Kindergarten, Schule – alles ist darauf ausgerichtet, das Kind im Sinne unserer Werte weiter zu bringen. Klar, hier bin ich auch ein Kind meiner Klasse: als Burgois kann ich nicht anders. Ich nutze alle Mittel, jede Kulturtechnik, jedes Wissen, welches unser Gesellschaft bietet, aber auch jede technische Lösung. Impfungen, Sportgeräte, Skilifte, alles sinnige und unsinnige im Dienste dieser einen Intention.

Geworfenheit betrifft unser eigenes Leben. Was unsere Kinder allerdings anbelangt, geht es ums Werfen. Einmal abgeschossen, werden wir den Pfeil nicht mehr beeinflussen können. Und so zielen wir. Sorgfältig. Je komplexer die Welt ist, je mehr wir selber Entscheiden können, um so sorgfältiger. Wir schieben den Moment mit Verhütungsmitteln hinaus. Wir ziehen zum richtigen Zeitpunkt in die richtige Gegend.

In diesem Sinne denke ich, dass die Präimplantationsdiagnostik und die Pränataldiagnostik ganz allgemein unserem Bedürfnis entspricht. Alle angesprochenen Probleme, die Begründung von Ausgaben für Jugendliche, die sich “nicht lohnen”, der Umgang mit Schicksalsschlägen, der Umgang mit dem Fremden, all diese ethischen und existenziellen Fragen werden sich weiterhin stellen. Es macht aber keinen Sinn, die aktuelle Situation zu verteidigen, nur damit sich diese ethischen und existenziellen Fragen unverändert weiterhin stellen.

Für die Diagnostik.

Tags: RSS

February 15, 2014 09:40 AM

Finding Duplicate Files

I have a ton of files I downloaded to my tablet and I have a ton of files on my external harddisk. How can I ever clean it all up? With Emacs, I have dired, but no easy way to figure out which files have changed – specially if the files are not all in the same directory structure. Based on EmacsWiki:JoeBloggsdired-dups.el I wrote a new version that did what I wanted it to do.

Find dired-duplicates.el on GitHub.

Now that I think about it, I guess my code does the exact opposite: it find differences, not duplicates. I should change those names…

(As it turns out, there are still bugs in the code. Ouch.)

Tags: RSS

February 15, 2014 12:04 AM

February 14, 2014

Ian Bicking

Hubot, Chat, The Web, and Working in the Open

I was listening to a podcast with some people from GitHub and I was struck by Hubot.

My understanding of what they are doing: Hubot is a chat bot — in this case it hangs out in Campfire chat rooms, but it could equally be an IRC bot. It started out doing silly things, as bots often do, then started offering up status messages. Eventually it got a command language where you could actually do things, like deploy servers.

As described, as Hubot grew new powers it has given people at GitHub new ways to work together with some interesting features:

  1. Everyone else (in your room/group) can see you interacting with Hubot. This gives people awareness of what each other are doing.

  2. There’s organic knowledge sharing. When you watch someone doing stuff, you learn how to do it yourself. If you ask a question and someone answers the question by doing stuff in that same channel then the learning is very concrete and natural.

  3. You get a history of stuff that was done. In GitHub’s case they have custom logging and search interfaces for their Campfire channels, so there’s a searchable database of everything that happens in chat rooms.

  4. What makes search, learnability, and those interactions so useful is that actions are intermixed with discussion. It’s only modestly interesting that you could search back in history to find commands to Hubot. It’s far more interesting if you can see the context of those commands, the intentions or mistakes that lead to that command.

This setup has come back to mind repeatedly while I’ve been thinking about the concepts that Aaron and I have been working through with TogetherJS, my older Browser Mirror project and now with Hotdish, our new experiment in browser collaboration.

With each of these I’ve found myself expanding the scope of what we capture and share with the group — a single person’s session (in Browser Mirror), multiple people working in parallel across a site (in TogetherJS), and then multiple people working across a browser session (Hotdish). One motivation for this expansion is to place these individual web interactions in a social, and purposeful, context. In the same way your Hubot interactions are surrounded by a conversation, I want to surround web interactions in a person’s or group’s thought process: to expose some of the why behind those actions.

What would it look like if we could get these features of Hubot, but with a workflow that encompasses any web-based tool? I don’t know, but a few thoughts taken from the previous list:

  1. Expose your team-related browsing to your team. Give other people some sense of what you are doing. Questions: should you lead in with an explicit “I am trying to do X”? Or can a well-connected team infer purpose or query you about your purpose given just a set of actions? If you use a task management tool — issue tracker, project management tool, CRM, etc — is that launching point itself sufficient declaration of intent?

  2. Let other people jump in, watching or participating in a session. You might start with an overview of their browsing activity, as it’s just too much information to watch it all flow by, as you might be able to do with Hubot. But then you want to support closer interaction. It might be a little like being the passenger in a pair programming situation, except instead of watching the other person by literally looking over their shoulder, we can let you opt in to watching remotely, and maybe allow for catching up or summarizing segments of the work, instead of requiring the two people to be linked in real time through the entire process. Questions: how do you determine that something is going to be of interest to you? Do the participants stay in well-defined leading/following roles, or do they switch?

  3. Record actions. Maybe this means “going on the record” sometimes. Ideally you’d be able to go on the record retroactively, like holding a recording locally and allowing you to put that recording in a global record if you decide it is needed. One can imagine different levels of granularity possible for the recording. A simple list of URLs you visited. A recording of DOM states. Some applications might be able to expose their own internal states that can be reconstructed, like in an automatically versioned resource like Google Docs the internal version numbers would be sufficient to see the context at that moment. Questions: how do you figure out what information is actually useful? Is it possible to save everything and analyze later, or is that too much data (and traffic)? Can we automatically curate?

  4. Push enough communication through the browsing context and collaboration tool that there is a context for the actions. This helps identify false starts (both to trim them, but also as an opportunity to help with future similar false starts), underlying purposes, bugs in the communication process itself (“I was trying to ask you to do X, but you thought I meant Y”), and give a resource to match future goals and purposes against past work. Questions: does this make voice communication sub-optimal (compared to searchable text chat)? Do we want to identify subtasks? Or is it better to flatten everything to the group’s purpose — in some sense all tasks relate to the purpose?

Now you might ask: why web/browser focused instead of application-focused, or a tool that coordinates all these tasks (Google Docs/Apps? Wave?), or communication-tool-focused (like Hubot and Campfire are)? Mostly because I think that web-based tools encompass enough and will consistently encompass more of our work, and because the web makes these things feasible — it might be a half-assed semantic system, but it’s more semantic than anything else. And of course the web is cloudy, which in this case is important because it means a third party (someone watching, or a recording) has a similar perspective to the person doing the action. Personal computing is challenging because of a huge local state that is hard to identify and communicate to observers.

I think there’s an idea here, and one that doesn’t require recreating every tool individually to embody these ideas, but instead can happen at the platform level (the platform here being the browser).

by Ian Bicking at February 14, 2014 06:26 PM

February 13, 2014

Tim Ferriss

Preventing Burnout: A Cautionary Tale

My first in-person meeting with Charlie Hoehn. Zion National Park, 2009.

Charlie Hoehn first reached out to me in 2008 through Ramit Sethi.

Shortly thereafter, I hired him as a part-time intern. Eventually, he became a full-time employee.

For three years, we worked together on a number of projects, most notably the The 4-Hour Body and the Opening the Kimono event. Charlie’s responsibilities ranged from “professional” tasks (planning VIP parties, assembling scandalous guest posts, coordinating logistics for 15,000 orders during the Land Rush campaign, etc.) to productive tomfoolery (epic grocery shopping spreesediting vajayjay photos, photographing giraffe make outs, persuading me to swallow 25 pills at once).

It was one hell of a ride.  We had a lot of fun, and we had some huge successes.

From day one, Charlie expressed a constant desire to become a hyper-efficient and effective entrepreneur. His role expanded as he requested more responsibilities (“What else can I do to help?” he’d ask me repeatedly), and we often found ourselves juggling several projects at once.

Most of the time, we handled it well. And as Charlie’s comfort zone stretched, his confidence increased, his communication and abilities improved, and our day-to-day operations were generally strife-free. We worked well together.

Then — in the middle of making The 4-Hour Chef – he suddenly quit.   It hit me like a ton of bricks.

Finding work-life balance (or work-life “separation,” as I prefer) in a connected world is challenging.  Speaking personally, I’m either 100% ON (for book launches, creative deadlines, etc.) or 100% OFF (such as my recent excursion to Bali). This ability to hit the shut-off switch helps me remain sane, separate work from pleasure, and it usually prevents me from burning out.

In this post, Charlie will share his story: what it was like to work with me for three years, and what led up to his burnout.

For all Type-A driven readers — especially those who struggle with the shut-off switch — this one is for you…

Enter Charlie

My brain felt swollen, like it was pushing against my skull. I looked down at my iPhone. Good lord. 60 hours straight. Wide awake, no sleep, for 60 hours straight. Yet I was still lively and sharp, thanks to the magic pill.

For four days, I’d supercharged my energy with a powerful nootropic; a brain drug typically reserved for fighter pilots and narcoleptics. If you’ve seen the movie Limitless, well, that pill actually exists. The drug’s primary function is to silence the body’s pleas for sleep. Lucky for me. Rest was a luxury I couldn’t afford.

I’d secretly taken this brain drug, without my boss knowing, so I could be great at my job. I was in charge of coordinating the Opening the Kimono event — a private conference on next-generation content marketing, hosted by Tim Ferriss.

Most attendees knew Tim for his two mega-bestselling books: The 4-Hour Workweek and The 4-Hour Body. The driving themes of Tim’s work were effectiveness and efficiency — getting better results, in less time, with less effort.

In The 4HWW, Tim gave readers step-by-step blueprints for creating online businesses, generating passive income, outsourcing work, and taking mini-retirements.

In The 4HB, Tim revealed how to lose 20 pounds of fat in one month (without exercise), how to triple fat loss with cold exposure, and how to produce 15-minute female orgasms. Both books sold more than a million copies each, and Tim was a star in the publishing world.

In addition to being a bestselling author, Tim was also a successful angel investor and advisor (his portfolio included Facebook, Twitter, Uber, Evernote, and many others). He was also — and I’m not exaggerating — a Chinese kickboxing champion, a horseback archer, a world record holder in tango, and a polyglot (fluent in five languages).

I’d been working with Tim for nearly three years as his Director of Special Projects. It was a dream job that I’d worked hard to land, and I’d reaped countless benefits. In the time we’d known each other, he’d personally introduced me to a wide array of amazing people: mega-successful CEO’s, brilliant tech entrepreneurs, best-selling authors, world-class athletes, inventors, robotics engineers, pickup artists, jet-setting casino owners, supermodels… The list was endless. My network went from “average” to “insane” simply by being around him.

Dinner party at Tim’s with guests ranging from MDs to tech innnovators. And me! (far left)

Surprise weekend trip to Zion, Utah.

Trip to Kenya with Samasource.

In Napa for Opening the Kimono.

Tim: Want to grab lunch? Me: Sure. Tim: Cool. Oh, and the Mythbusters are going to be there.

He’d also given me a world-class education (I’d guess 3-5 MBAs combined), and helped build my portfolio into a showcase of incredible work.

I was 25 years old at the time, living in Russian Hill in San Francisco. Each morning, I’d walk over to my neighborhood café, sit down with my laptop, and work until nightfall on my weekly tasks. Whenever I finished a given job, I’d ask Tim for more work. Things multiplied quickly, and I soon had a plethora of responsibilities: assistant, researcher, editor, marketer, videographer, photographer, customer service, project manager… And then, I was his conference coordinator. Opening The Kimono was my biggest challenge to date.

More than 130 authors and entrepreneurs, from all over the world, paid $10,000 apiece for admission to Tim’s conference. And while I was confident we would successfully make it through this four-day event, I was also completely overwhelmed by the complexity of the task. There were so many moving parts.

I was terrified of screwing up. If something went wrong, I would need to fix it with superhuman speed. Somehow, I had to stay awake for the entire event…

And so, in my desperation, I visited an overseas pharmaceutical website, where I ordered the most powerful brain drug on the market.

The pills arrived just before the event. I took one every morning. Each day, I expected to pass out randomly from exhaustion. But it never happened; I stayed alert and wide-awake the whole time. The pills really, really worked. During the course of the four-day seminar, I slept a grand total of six hours. And just as I’d hoped, I was great at my job.

Discussing details before dinner, at the Kimono event.

Resting at the Kimono event with my co-conspirator, Susan Dupré.

The event was a whirlwind, but we managed to pull it off. On the final day, everyone gave us a standing ovation. Attendees ran up to hug us and said it was the best conference they’d ever been to. Our inboxes were filled with dozens of glowing reviews and thank you notes.

I was in shock. After months of working around the clock, we’d exceeded all expectations, including our own. Tim gave me a hearty congratulations, and said he was amazed how well we’d done.

I was proud, happy, and very tired when I arrived back home. But later that night, my body started sending out emergency signals, warning me that something horribly wrong was happening.

My heart was racing. My vision was blurred. I had a pounding headache that wouldn’t stop. Sounds drifted sluggishly into my ears, and I could barely stand upright.

For the first time in my life, I felt completely and utterly burned out.

# # #

A few days later, I went back to work. We were just getting started on our next big project: The 4-Hour Chef.

Two years prior, I helped Tim edit and launch his second book, The 4-Hour Body. I was immensely proud to have played a part in the book’s success; it was the pinnacle of my career. On the other hand, The 4-Hour Body had been the most stressful undertaking of my life. Tim and I half-joked that the book nearly killed us. I was hesitant to jump in for round two.

Ace Hotel in NYC, where we worked during the lead up to The 4HB launch.

Taking a break from work on cheat day. Gorging at Hill Country Chicken.

Moments after The 4HB hit #1 on New York Times, with Chris Ashenden and Steve Hanselman.

Celebratory cheat meal: Six-layer chocolate motherlode cake at Claim Jumper.

Hudson’s Booksellers in JFK, during the week of the release.

Tim offered to double my salary if I helped him complete The 4-Hour Chef.

It was a generous offer, and I was immediately interested in taking it. I’d be making more money than I’d know what to do with, and I’d have another cool achievement under my belt. What did I have to lose? After a moment’s pause, we shook on it.

I felt incredibly fortunate to be in that position, especially since so many people I knew were either unemployed or working in jobs they hated. My family and friends all congratulated me. From a distance, things looked great.

But on the inside, I was flailing. I’d completely lost balance, and I couldn’t see that I was destroying myself.

I was addicted to my work. You see, I liked to think of myself as busy and important, so I tethered myself to the Internet seven days a week. I communicated with everyone through screens. I spent all day long sitting indoors. I drank coffee all week, and drank alcohol all weekend. I only stopped working when I was sleeping. And then I stopped sleeping.

I just couldn’t stop myself from working all the time. I wanted to be indispensable, the best in the world at running operations. It didn’t matter what else was going on in my life or if I started feeling sick; work was everything to me. Practically everyone I met in the tech scene behaved the same way.

So many of my friends and colleagues were workaholics.

Several buddies of mine were pulling 16-hour workdays. My friend in medical school was popping Adderall like candy. All of us were destroying ourselves during the week, and punishing our livers on the weekend. We didn’t take vacations. We didn’t take breaks. Work was life.

Checking email at 3:00 AM in Buenos Aires.

Here’s the thing: I was a workaholic long before I met Tim.

I’d always stayed up late. I’d always spent hours at a time staring at screens. The difference now was that my state of mind had changed. Now, the results mattered more than the process. I took everything very seriously because I thought I was so important — there was money and success on the line! And I wanted to be the best at dominating life.

Predictably, life stopped being fun.

Each week, I felt increasingly sick, exhausted, and apathetic. My eyes sunk back and grew dark circles beneath them. My forehead developed thick stress lines.

My hands started shaking. I felt like I was always on the verge of crying. I didn’t understand what was wrong with me, so I just tried to work my way through it.

Then the deadline for The 4-Hour Chef got pushed back three months.

Then a family member died.

Then a close friend attempted suicide.

When Tim and I met up for dinner the following week, I told him very meekly:

“I can’t do this anymore. I have to quit.”

# # #

Tim didn’t argue with me.

He understood where I was coming from, and offered his support in whatever I was going to do next. It was a massive relief to part on amicable terms, but I felt weaker than ever. I was already feeling the pressure to get back to work, but what would I do? My identity was gone. I decided to take a couple weeks off. Then another week… And another…

I spent the next three months being unemployed and feeling awful. Every day, I’d go through the motions of my old routine without actually doing anything. I compulsively checked email all day long, stayed up until 4:00AM, and slept a few hours each night. I received a handful of job offers and turned them all down, recoiling at the thought of having to go back to work.

The worst part was the guilt. I felt enormously guilty every second I wasn’t doing something that could advance my career or earn money. I would pace around like a neurotic rat, coming up with random chores to distract myself. When the chores were finished, I’d think, “Okay… Now what?” Any activity that didn’t feel productive – sleeping in, watching TV, taking a trip – filled me with regret. There was this gnawing sense that I was wasting time. I was losing money. And yet, I had no desire to work.

I started wondering if I’d screwed up my life very badly. Hadn’t I been living the dream? Did I just throw away everything I’d worked for? I started feeling very anxious. I wanted to do something big, to reinvent my career, to make a name for myself so I could be successful. What that something would be, I didn’t know.

Then one day, two of my friends, Chad Mureta (whom I’d met at the Kimono event) and Jason Adams, suggested that we start a mobile app company together. They were both sharp entrepreneurs and savvy marketers, and Chad was already making millions from the apps he’d developed.

Finally, I thought, here’s a job that makes sense. I could be one of the founders of a cool tech startup, working on fun projects with my smart friends, in one of the most exciting industries on the planet. The Draw Something app had recently been acquired for $250 million, then Facebook acquired Instagram for $1 billion. I thought, This gig might make me a millionaire by the end of the year! This is it…

I was so relieved to feel productive again. I strolled into the office each day to work on my laptop until late in the evening. I sat down, stared at my computer screen for several hours, and drank coffee. When I got home, I worked on my laptop until 4:00AM, slept for a few hours, then started all over again.

We spent the first month putting together an online course called App Empire, which walked people through the entire process of starting their own app business. It required many sleepless nights to get it finished on time, but we managed to pull it off.

Chad Mureta and Chris Whitmore (cameraman) during filming of App Empire.

Launch day, filming in a San Diego hotel suite.

Support team on App Empire’s launch day.

The launch of the course was a success, raking in $2 million dollars in revenue over the course of 10 days.

If you said “WTF!” after reading that last sentence, I don’t blame you. But our results were somewhat typical in the high-cost information product world. When you combine a $2,000 course with a huge list of potential customers (and three guys who know a lot about online marketing), you get a multi-million dollar product launch.

We spent the next two months doing weekly webinars, walking customers through each lesson and answering their questions. In our spare time, we worked on our app ideas.

At some point in the third month, I realized: I didn’t care about apps. I knew how to make them, and I knew how to succeed in the app market, but I just didn’t care. I didn’t really use apps and I never got excited about them.

I asked myself, Why am I really doing this work? Well, the job gave me an excuse to hang out with my friends during the day, rather than being holed up alone in my apartment. But that was only a small part of it. The honest answer was:

Status. Money. Guilt.

I wanted to impress other people with my “success” of founding a company. I wanted to be rich. And I wanted to avoid feeling bad for not working.

The problem was… I didn’t really care about what I was doing. There was this weird disconnect, like apps should have been the natural progression in my career. But it just never felt right. It felt forced.

I quit my job that week.

Once again, I experienced “success” and walked away from it. Only this time, I was riddled with anxiety.

I started to think I was going to be punished for not being productive, for not making money, for not having my life figured out. I didn’t know how or when, but I was certain it was going to happen. Everything was coming to a head. It was only a matter of time before something terrible happened…

# # #

I was in a bad place for a long time after I quit those jobs.

I was too ashamed and proud to reach out to anyone for help, so I bottled my feelings up and stumbled around for the next year. It was the worst I’ve ever felt in my life.

It’d be very easy for me to manufacture a villain in this story. I could tell you that I was pushed too hard, or that no one cared about how I felt. But that’s not the truth. I was the one who chose to stay up until 4:00AM. I was the one pouring caffeine down my throat four times a day. I was the one who secretly ordered brain pills. I was the one who isolated myself from friends and kept my feelings hidden. Everything I did that fueled my anxiety was my choice.

The truth is that all of my emotional issues would have unfolded for me at some point in my life, regardless of whom I was working with. I was the creator of my own anxiety, and I was the one who broke myself with my workaholic habits. I just didn’t recognize how destructive my behavior was because I thought it was normal.

I wish someone had held up a mirror to show me I was the problem, but that never happened. No one knew the full extent of my situation but me, and I was in denial. It’s worth taking a moment to ask yourself:

—  Do I feel guilty or anxious when I’m not working?

—  Have I stopped playing with my friends?

—  Do all of my daily activities revolve around building a more successful career?

—  Am I always sleeping fewer than eight hours per night?

—  Am I consuming stimulants multiple times per day to hide my exhaustion?

—  Am I sitting still and staring at screens for most of my waking hours?

—  Do I interact with people primarily through screens?

—  Am I indoors all day long, depriving myself of fresh air and sunlight?

—  Do I depend on alcohol or drugs to cope with social situations outside of work?

If you said ‘yes’ to most of those questions, you are not alone. When I was at my worst, I was doing all of these things on a daily basis. I was fueling my own anxiety and I couldn’t even see it.

My perceived lack of productivity, lack of money, and the unknown future kept me in a constant state of panic. Every day was a haze of fear and exhaustion. For more than a year, I tried everything to pull myself out of this state of living death. Nothing seemed to help, and I nearly lost hope.

Then one night, I had my first major breakthrough, which laid the foundation to cure my anxiety. This breakthrough happened in a flash. The emotional burden of non-stop worry was lifted, and I could finally breathe again.

It wasn’t hard. It didn’t cost me anything. It was only a choice.


TIM:  To be continued in Part 2, where Charlie will describe the step-by-step process he used to reverse his descent into darkness (and we’ve all been there, including me).  

I also learned a lot from Charlie’s struggles.  First and foremost: As a boss, you cannot assume that someone is resting and recovering properly. You must ensure it. Employees out of sight does not equal employees out of the inbox.

Don’t want to wait for Part 2?  Take a look at Charlie’s new book, Play It Away: A Workaholic’s Cure for Anxiety, which includes all the techniques he used to get his life back on track.



by Tim Ferriss at February 13, 2014 11:06 PM

Reinventing Business

Coworking and Hackerspaces

During my company visits in San Francisco, I stayed with my friend Bill who lives right on the Bart line in Walnut Creek, so I was able to take that in and avoid the hassle of driving in the city and the struggle to find parking. For the visit to Github, I walked down 2nd street from the Bart station and started noticing what seemed like an abundance of coworking spaces. I had a little extra time on the way to Github so I stuck my head into the first one I saw, Citizen Space. I had to squeeze between a dumpster and a UPS truck to get into what looks to be a converted warehouse. Inside it seemed nice enough, predominantly couches placed throughout the space. The person at the door did not have time to give a tour but I could get the idea from a quick look, and from their web site.

On the way back from Github, I noticed that there was another NextSpace on 2nd street, and a little further on, a third coworking space called WeWork. Although I couldn't visit on that day, I will try to get a tour in the future because the posters outside of WeWork claim that it is a "physical social network," and it looks like they might have gone further than most to achieve that.

The strongest observation that keeps coming to me about coworking spaces is that no one actually needs them. Everyone has their own internet, and everyone has at least a little space on their own kitchen table where they can set up their laptop. Why, then, do people go to the trouble of schlepping their stuff to one of these places, and paying for it on top of that? The only answer I can think of is what WeWork and NextSpace seem to be emphasizing: connections with other people, everything from just being around other humans all the way to help and collaboration on projects. (Hmm. I wonder if there are people who are members of more than one coworking space -- if one is full on a particular day or if they want variety, they go to another).

This hypothesis was reinforced the next day when I was walking through San Francisco's Mission District on the way to another meeting, and went right by the NoiseBridge hackerspace. After my meeting, I returned and tried to figure out how to get in; finally someone on their way out opened the gate. That part of the Mission district "has a lot of character" and you'll note from the NoiseBridge web site that they explicitly say that they aren't a place for people to sleep. During my visit there was someone there who was apparently schizophrenic and hoping to do just that. The space is quite large for downtown San Francisco and costs them $4000/month, although the rent is slated to go up. All of this is paid for by donations (mostly from private individuals, not companies) and a little from member fees, although you don't have to pay to use the space.

Decisions were made by a board, using consensus. Apparently this was a very painful process, because when I gave a brief description of Holacracy, the board member I spoke to seemed quite interested.

The man who gave me the tour confided that he could do everything in his own garage that the hackerspace provided -- but he didn't. In the same way that people come to coworking spaces, he liked to come to NoiseBridge and be there instead.

by (Bruce Eckel) at February 13, 2014 09:22 PM

Blue Sky on Mars

Startups, Mad Men, and Missing Out

Before Breaking Bad, before Mad Men, before The Shield, HBO had cemented itself as the center of television, with era-defining shows like The Sopranos, The Wire, and Sex and the City.

Good talent begets good talent. They should have had the entire world's elite writers pitching them ideas... and they did. But opportunity isn't everything: you need to pursue those opportunities.

At the precise time that there were more and more varied options for TV writers with serious visions, the impression began to spread around Hollywood that HBO’s door was closed more than it was open—and then only to well-established writers.

“David Chase, remember, had worked on all network shows,” said [HBO President of Programming Michael] Lombardo. “We had gotten to the point where we might not have taken a pitch from him. He might not have been on our level.”

Excerpt From: Brett Martin. “Difficult Men.” iBooks.

Matthew Weiner gave HBO the Mad Men pilot. He even worked at HBO, writing and executive producing some of the most important episodes of The Sopranos. He even had David Chase, showrunner of The Sopranos, telling HBO how important Weiner was.

But Weiner never even heard back from HBO about the pilot. And Mad Men went to AMC.

Staying scrappy

There seems to be a common workflow for a startup's growth:

  • Start with a great founding team
  • Hire scrappy, broad generalists to discover the overall product
  • Hire people with deeper, narrower knowledge to solve the tougher problem domain

I think the problem is that some startups view these as a progression rather than three complementary areas. In other words, the company grows and they focus on hiring more and more specialists. Sure, those specialists are necessary (and likely the majority of the workforce), but that doesn't mean that generalists aren't necessary, either. These are the people that look beyond silos, that can stitch the entire company together.

Just like Weiner and HBO, I think a number of startups end up reaching some type of blindness as they grow and reach success. They are the same companies whose founders are college dropouts, but now that they're a hundred employees they decide to follow Google's model and recruit exclusively from top five-ranked schools. They are the same companies that hire a monoculture, not realizing that their success stemmed in part from the oddball founding crew that came together in the initial years. They are the same companies that miss out on the clever-but-unknown hacker because they've been in the spotlight themselves for so long.

It's not easy. Trajectories aren't a bad thing; they keep your momentum going as you speed through your growth. But don't feel like you need to act a certain way just because you've reached a certain size of business. It might be the difference between your product's next Mad Men feature, or a slow status quo until something else externally puts you on your heels and forces you to change.

February 13, 2014 08:00 AM

February 12, 2014

Ian Bicking

Saying Goodbye To Python

This post is long overdue; this isn’t a declaration of intent (any intent was long ago made real), just my reflection about my own path. I left the Python world a long time ago but I never took a chance to say goodbye.

While I had moved on from Python years ago, I felt a certain attachment to it well past then, not quite admitting to myself that I wasn’t coming back. When my proposal for PyCon 2013 was rejected I was frustrated (it was going to be a fun talk!) but for some reason that made me fully realized that I wasn’t part of the Python community anymore.

Python was the first — and I sometimes wonder if the only — programming community I was part of. Coming to Python was a conscious choice. In college I was interested in Scheme and Smalltalk. High-minded languages with interesting ideas, but hard to find practical uses. Scheme was always too underserved by its libraries and sparse academic community. In contrast Smalltalk was productive — it was built by and for people who loved to build things. (More credit here should probably go to Dan Ingalls than Alan Kay — I can sense in Dan Ingalls’s work a real passion for making things, and a pure but unproductive language would not have satisfied him.) But Smalltalk was and is a world of its own. It was culturally and technically pre-internet, pre-open-source, pre-online-community. And despite all the great things about the Smalltalk environment and language it couldn’t fulfill these then-new potentials, even as it tried to adapt. (I wrote a couple posts about this, intended as a sort of sympathetic explanation of why I couldn’t stick with Smalltalk: Where Smalltalk Went Wrong and a followup.)

At the end of my college career (1999ish) I consciously looked for a new home. I flirted with Perl, C, but knew they weren’t for me. Somewhere along the way I came upon Python, and it was good enough that I didn’t look for anything better. I can’t say I fell in love with Python like I had with Scheme and Smalltalk — Scheme was like an opening up of the world after going far beyond what anyone should ask of GW-BASIC, and Squeak/Smalltalk was a deep mysterious world, like coming upon the ruins of an ancient and advanced civilization. Python in comparison was practical — but I wasn’t in the mood at that time to discover, I wanted to build.

And I built a lot of things in Python. I was doing workaday web programming and my enthusiasm went more towards building tools to build stuff than in the building itself. I did build some cool products in those days, not just libraries, but for some reason it’s only the smaller units that I was able to push out. And I found a community in Python.

And I built. Back in the days I contributed to Webware, what felt like a completely different generation of web development in Python than today. I wrote SQLObject, my first foray into a oh-shit-people-are-using-this-I’m-not-sure-how-I-feel-about-that library. But SQLObject explored a lot of metaprogramming concepts that were quite novel in the Python world at that time. At the same time maintaining it felt like a terrible burden. It took me far too long to resolve that, and only once interest had died down (in no small part due to my lack of attention) did I hand it over to Oleg who has been a far more steady hand. This would be a pattern I would unfortunately repeat. But if SQLObject helped the next generation be better that’s good enough for me.

Later came WSGI which excited me with its subtly functional basis. I built a whole web framework toolkit (or a framework for building web frameworks?) in Paste. Few people really understood what I was trying to do with Paste — at times including me. Some people like Ben Bangert were able to see the principles underneath the code, and get them out into the world in the kind of usable state that I intended to enable. (And along the way I sometimes felt like I was doing the same for PJE.) Python web frameworks were a mess back then; ultimately reaching for the crown using a monolithic approach was a more successful technique than trying to build bridges as I attempted with Paste. I’m still not sure what lesson to take from that. Not a general lesson, but more understanding the landscape. And understanding what you can bring to a problem, and who you can bring with. I feel like I’m only now really understanding the importance of vision combined with a diverse group of skills and perspectives, and I have even more to learn about how to actually assemble and coordinate the right group of people in the right environment to succeed.

Somewhere around here I feel like I reached my 10,000 hours of Python coding. I wrote WebOb, taking the lessons of Paste and a better intuition for library design. I still think it’s the best mapping of HTTP to Python. Other libraries include more aspects of web development in their scope, or have better documentation, and more users, but when viewed with a particular lens I’m still very proud of WebOb. And it’s been an important building block in a lot of people’s explorations into building a web framework. Other libraries from this period are lxml.html, smaller things like WebTest, ScriptTest, MiniMock, Tempita, perhaps the over-ambition (or just mis-ambition) of Deliverance. That period felt like a clearing out of my system, unloading a bunch of ideas.

But for whatever reason my most successful tools were virtualenv and pip. These were never my greatest passions, or even close. They were about: (a) fixing personal annoyances in deployment (virtualenv), and (b) getting people to stop fucking whining about Setuptools and easy_install (pip). I’m not sure whether I blame the uneasy success of these tools on broad appeal, or that they are in a sense user-visible tools and not libraries, or that I didn’t like doing them because no one liked doing them and so there was a vacuum waiting to be filled.

And then my last project, Silver Lining. It was early on in the devops revolution, an attempt to think about what a generic container for web applications might look like. It was in a sense going deeper down the hole of virtualenv and pip, but with an aim to build a full product and not just a set of eclectic tools. No one cared. And I only cared a little — I cared because it was completing some ideas I’d long had about deployment, because for a certain kind of web application development it felt nimble and reliable, because it removed or automated tasks I didn’t like to do. But I didn’t care, no more than I cared about virtualenv or pip. I’d gone down a path that was about code and technical design, but if I stepped back it was unexciting.

And when I did step back there wasn’t anything in Python that excited me. Python was doing great, my interest had nothing to jumping on or off bandwagons. Python is doing great — better than ever (minor bumps with versions aside). But I think in my mind I’d always imagined I could build up just the right toolset, and using that toolset create the product I actually wanted to create — what exactly that product was, I don’t know, but with the right tools I imagined I could move fast enough and confidently enough to find it.

Sometimes when I’m feeling particularly excited about an idea, like really excited, I have to take a break. I need to calm down. Try to wrap my head around the ideas, because I know if I push forward directly that I’ll just muddle things up and feel disappointed. No, I don’t know that is true: maybe I don’t want to have to confront, in that moment, that the idea is not as cool as I think it is, or as possible as I think it is. But often I do step back into the problem, with ideas that are more mature for having thought more deeply about them. In a sense I think creating tools and libraries was a similar process: I felt too excited about creating something great, because I worried I’d muddle everything up, or afraid I just couldn’t pull it off, and so I stepped away and would work on tools.

I always directed my attention to the web, even if I got bogged down in the server. Somehow I skipped native GUIs, even as a user. But pure data processing without consideration for what you do with the data felt unexciting. And ops — that’s just the worst. I was, and am, a true believer in Free Software; and I was, and am, a true believer in the web. That is, I don’t see either as simply a means to an ends. But not for the same reasons, and I can believe in a web that isn’t open source, and open source that isn’t for the web. And yet writing it down I realize I don’t care about open source that isn’t for the web.

When I stepped back Python no longer seemed relevant to the web, at least not the part of the web that interested me. The tools I had built were no longer relevant either, they were not the tools with which I could realize my ambitions. The database-backed website, or the dynamic-HTTP-based web application, templates and deployments, anything you’d call “REST” — none of it seemed like the future, and whatever this vague thing was that I’d been looking for, I wasn’t going to find it there.

This wasn’t an actual revelation, I’m constructing it in retrospect. If you’d asked me I would have agreed with this notion even years earlier, and it’s not like I came up with some unique idea, if anything I would call it self-evident, don’t we all know this is where the world is going? And so I started to look towards Javascript and the browser and the DOM.

Somewhat before this I also joined Mozilla. But it would be backwards to say that Mozilla induced this change in perspective, that it tempted me away from Python. In fact I would have had a much easier time of it if I had just stuck with doing Python backend stuff at Mozilla.

The last few years of transition have been a struggle. With Python and the server I knew what I was doing. I was good at it, I felt competent. I could construct an opinion with confidence about all kinds of design questions. I was respected and my opinion would be listened to. I’d put in my 10,000 hours, I had achieved mastery.

Moving to Javascript none of this was true, and most of it still isn’t true. It might be easier to pull off this change if I was doing web development, surrounded with people making similar transitions, a little fish in the little pond of whatever group I was working with. But Mozilla is not that kind of environment. Which is okay — if I had felt confident it would only be because there was no one to correct me.

It’s oddly common to see people talk about how a programmer can pick up something new in the matter of a few days or months. To find programmers that consider all that knowledge transferable (for instance). I don’t know what to make of it — my less forgiving self thinks these people have never known what real mastery is. I don’t think it takes another 10,000 hours to get mastery in a new language and environment… but it definitely takes some thousands of hours, some years of hard work. I only now feel like I’m getting close.

Maybe it’s my perspective on what mastery is. Deciding to do something and then doing it is good. It is not mastery. You have to pick the right problem to solve. You have to pick the right way to solve it. You need to know when to revise that plan, and understand the constraints that inform that revision. You need both large scale and small scale intuitions. And you need to be good enough at all the details of programming in that environment that you don’t get overwhelmed with the “easy” stuff, so you have mental energy to spare on the big stuff. The jump from Python to Javascript isn’t that big, the languages have a very similar shape. And the browser was already the environment focused on. And yet redeveloping my intuition for this new environment has taken time.

Sadly I’m not going to get back where I was, because Javascript is not Python. If there’s a Javascript community I haven’t found it, or it’s at least not a single entity. There is no community that created Javascript like the Python community created Python. Python comes from the internet in a way Javascript does not; Javascript was built for the internet, but Python was built on the internet. And I do miss the Python community, you’re good people.

But also whatever language partisanship I had is gone, and won’t come back in the guise of a new favorite language. This shouldn’t be confused with a disinterest in language. I still get as annoyed as ever by “use the right tool for the job” — the bland truism meant to shut down critical discussion and engagement with the tasks and choices in software engineering, replacing it with a weak passionless technical fatalism.

I suppose it is the platform that I am drawn to now before language. And the browser seems like the most interesting platform, not because it’s novel (though it is, it’s a runtime like few others), but because of how concrete it is, and of course how relevant it is to… anything. And the browser is no longer just the servant of a server, I prefer now to think of the browser as an independent agent, connecting to services instead of servers. Obviously that doesn’t describe a great number of running web sites, but it’s the model I see for the future, and a better perspective for understanding future architectures.

Still this only addresses which direction I’m looking towards, I still have to walk the path. I don’t want to get caught up in the weeds again, building tools for something I never manage to make. Right now I think I’m on to something in the area of collaboration, first with TogetherJS and now I’m thinking bigger with a new experiment. But while I feel like I’ve reached some competence in executing on these projects, programming is only one piece of bringing forward a larger vision. I still have a lot of learning to do, skills for which I haven’t put in the necessary time. How to recruit support, how to manage the project, how to negotiate between feasibility and user value, how to negotiate compromises in strategy and design. And collaboration itself is a whole domain of expertise. I’ve learned a lot, I can do things, but I am definitely not yet experienced enough to choose to do the right thing in these areas. And at this moment I’m worried I won’t have the room to learn these things, it feels like time is running out just when I’m pulling stuff together.

Anyway, that’s where I am now. No longer a language partisan, unclear of what community I am even participating in, I am less sure how to identify and self-identify myself. How do I describe myself now? Even as I find my technical footing I am still adrift. And so it’s hard to say goodbye. So instead I’ll say, Pythonistas: until we meet again. Maybe I’ll meet some of you over here.

by Ian Bicking at February 12, 2014 06:10 PM

Alex Schroeder

Red Cliff

I enjoyed Red Cliff (2008) even though it contained far more battle than I cared for. I liked Tony Leung. I kept thinking about the Three Kingdoms Book I started to read and the episodes of the Chinese History Podcast on the end of the Han, the Three Kingdoms Period, Daoism, the huge ships and formidable weapons the Chinese had.

star star star – I’d recommend it to anybody who likes the genre

Tags: RSS

February 12, 2014 06:27 AM

Tim Ferriss

Win the Laptops I Used to Write The 4-Hour Workweek and The 4-Hour Body…and More (EFF Benefit)

(Photo: Aaron Benitez)

Would you like to win one of four laptops (and a dozen other items) that I used to write three bestselling books?

Given that a galley of The 4-Hour Workweek once sold on eBay for $2,600, these could end up being collector’s items.  Stranger things have happened.

This post details how to get them.

All funds raised will go to the EFF. More on this important organization later…

The Gear

Each item will be signed by me and delivered to the FOBO offices, where you can pick them up at your convenience, or have them delivered to you via Shyp.

To start off, let’s take a look at the laptops.

They’ve traveled with me through more than 20 countries. Nearly all of my biggest successes since 2004 can be traced to these machines. Hard drives are not included (sorry!), but good karma and mojo is.

Pics are below, and here are basics:

The Acer with “Brazilian Top Team” sticker — This was used for all the notes that became the original 4-Hour Workweek. It was bought in Berlin in 2004 and traveled with me for nearly 18 months around the world, including the Tango World Championships in Buenos Aires (in the “Intro” to 4HWW) and much more.

The Sony Vaio with California sticker — This was used for the very first full draft of The 4-Hour Workweek.

The Dell with Japanese stickers — This was used to write the entire Updated and Revised edition of 4HWW, as well as the original notes for The 4-Hour Body.

MacBook Pro with tons of stickers — This was used to write The 4-Hour Body, start to finish.

Before the pics, please note that I’m offering more than laptops. More than a dozen other items will be available starting tomorrow (2/13/14), including a brand-new (never opened) GoPro Hero3 Black Edition, a pair of LSTN Ebony Wood Troubadours headphones, high end digital scales, and a ton more.

How to Get This Stuff

The auctions will start at noon on Thursday, February 13th on FOBO.

If you’re in San Francisco and haven’t tried it, it’s a slick new app for selling electronics in less than 2 hours; I’m an investor and love it.

Rather than their normal 97-minute auctions, in which everything posted is guaranteed to sell, FOBO is doing special 4-hour auctions. It’ll be a lot of fun, and every dollar goes to the EFF.

Please note – Since FOBO is currently limited to San Francisco, be sure to:

  • Join from within city limits, or
  • Have a friend in SF make your offers for you.

Hope to see you during the auctions!

More About The EFF

I’m a long-time supporter of the EFF, The Electronic Frontier Foundation.

Simply put, they defend your rights in a digital world, where companies and governments can monitor and abuse you. They’re currently fighting the NSA’s massive phone and online surveillance activities. Even if you don’t participate in the above auctions, I hope you donate to support them.

More — Based in San Francisco, the EFF is a donor-supported membership organization working to protect fundamental rights regarding technology; to educate the press, policymakers and the general public about civil liberties issues related to technology; and to act as a defender of those liberties.

by Tim Ferriss at February 12, 2014 04:54 AM

February 10, 2014

Giles Bowkett


Bitcoin's Money Supply and Security

Dear readers, I haven't blogged for a long time but I recently decided to jump back into the fold. I wrote this new post about Bitcoin's money supply and security. As an experiment, I posted it on Medium. Check it out at Your feedback is appreciated!

by Yariv ( at February 10, 2014 03:23 PM

February 09, 2014

Giles Bowkett

February 07, 2014

Fog Creek

FogBugz Visits the Head(er) Shrinker

The look and feel of FogBugz On Demand hasn’t changed much in two years. We thought we’d update it, starting with the part that shows up on every page: the header. We re-designed the FogBugz On Demand header to make it more modern, compact and organized.

R.I.P. old header…

old header

Long live new header!

new header

Not everyone has the luxury of a 4K display. When you’re working on a small laptop screen, space is limited. Menu bars, docks and taskbars gobble up vertical space. To make more room for your actual work, we made the new header 15% shorter. We did this by consolidating the two rows into one. The FogBugz and Kiln links from above moved into a hover menu:

new - product dropdown

To fit the menus from the top-right into the new design, we made smarter use of the width of the bar. Our customers told us that they work mostly with cases, so we grouped all of the case-related controls at the left. We used symbols for the right-hand menus and removed the List Cases button. You now get to your filters by hovering over Cases.

The first thing we learned when we rolled the new design out to 10% of accounts was that you click List Cases a LOT. To give you faster access than hovering then clicking inside the new menu, we made Cases clickable. Hover over it to get to a specific filter, or just click on it to show your current case list.

new - cases dropdown

Hover over the four right-hand menus and you’ll see that Admin is now “gear,” Extras is now “toolbox,” Help is now “?” and My Settings is now the avatar menu. Log Out has moved into the avatar menu. If you have a larger screen, you have no doubt noticed that the old search box didn’t do you any favors. Whatever length text you entered, it stayed tiny. The new box knows that sometimes you use a lot of search axes in order to narrow down and speed up your search. While it starts out compact,

new - search box 1

When you click into it and type, it grows so you can see what you’re doing:

new - search box 2

We’d love to know what you think of it so drop us a line. Not using FogBugz On Demand? Sign up for a free trial today!

by Adam Wishneusky at February 07, 2014 02:34 PM

February 06, 2014

Tim Ferriss

The Random Show, Episode 23 — New Year’s Resolutions, Firearms, Start-up Finds, Zelda, and Obscene Thoughts on Grey Hairs

There are dozens of topics covered in this wine-infused, bromantic episode of scatterbrained nonsense.

Like what? Well, plans for 2014, firearms, tech finds and start-up talk, the goodness of Zelda, favorite recent books, and much more. O-tanoshimi dane!

One special offer:
If you sign up as one of the first 100 beta testers for Shyp (click here) and ship anything — I suggest a book for a friend or family member — you’ll get the following:

  • A $10 credit
  • A free copy of The 4-Hour Workweek, signed by yours truly!  Limited to first 100 to ship.

This edition of The Random Show was recorded and edited by Graham Hancock (@grahamhancock). For all previous episodes, including the epic China Scam episode, click here.

Special thanks to reader Jonathan Hsieh of ClickPlayCEU for the show notes below, which include links to almost everything we mention…

Hat tip to everyone who put notes in the comments!

SHOW NOTES — Random Show 23

Commitment this year: Once per month doing something that I look back on and say – “That was an amazing life experience.”

The Bay Lights

Mag Tactical – Kevin’s Trigger Cage for AR

3-day Meditation Retreat (Tim’s rec)

Some of Tim’s commitments this year:
- See the Northern Lights
- Fly fishing, potentially in Montana
- Surfing in Costa Rica
- Heli-skiing in Alaska or elsewhere

AngelList — See what Tim and Kevin invest in, and how you can invest alongside them:



Target Gold Tipped Socks

Kevin’s upping his game: CK boxer micro briefs (amazon) –

Bill Harlan – Harlan Estate

Mascot Wine

The Essential Scratch and Sniff Guide to Becoming a Wine Expert

Bulleit Bourbon

2007 Clos de los Siete, from Mendoza


Tim Ferriss 3-Minute Breakfast

Zelda a Link Between Worlds (3ds)

Tim Ferriss Book Club

Daily Rituals
The Name of the Wind (Kingkiller Chronicles, Day 1)



by Tim Ferriss at February 06, 2014 08:48 PM

February 05, 2014

Greg Linden

Quick links

What caught my attention lately:
  • Colorful description of Google's servers in 1999: "A thin layer of cork to protect the motherboards from the cookie trays on which they were mounted ... Rack switches were bungee corded to the water pipes above the cage to prevent them from toppling off the tops of the racks." ([1])

  • A critical part of the 1971 break-in that exposed the FBI spied on civil rights groups: "One of them wrote a note and tacked it to the door they wanted to enter: 'Please don't lock this door tonight'" ([1])

  • "We have no evidence that any of this [NSA] surveillance makes us safer ... Bulk collection of data and metadata is an ineffective counterterrorism tool .... And ... it's extremely freaky that Congress has such a difficult time getting information out of the NSA." ([1] [2] [3])

  • "Chromebooks have come from nowhere to grab ... 19% of the K-12 market for mobile computers in the U.S. in 2013 ... In 2012, Chromebooks represented less than 1% of the market" ([1] [2])

  • Amazon (and online in general) is killing off physical stores rapidly: "Borders has closed ... All major music retailers are out of business ... recently announced that it would close its remaining 300 company-owned Blockbuster stores ... Circuit City has closed ... all of the computer superstores are long gone ... Staples ... has closed 107 stores in the past year ... Sales at Sears have declined for 27 straight quarters" ([1] [2])

  • The T-mobile CEO says, "This industry blows. It's just broken ... total horseshit ... a pile of spectrum waiting to be turned into a capability." ([1])

  • "Less than two years after acquiring it, Google is ditching Motorola" ([1] [2] [3] [4])

  • Microsoft in a nutshell: "Basically, consumer PC sales are tanking, but sales to enterprises are strong." ([1] [2] [3])

  • Someone should do something about this: "Sales of banner and video ads slipped 6% in the fourth quarter and search ad sales fell 4%. Yahoo was once the Web's advertising leader, but over the past several years has fallen behind rivals Google and Facebook ... Many are wondering if Yahoo has what it takes to compete in the online ad space with companies like Google and Facebook" ([1] [2])

  • "Open [plan] offices ... were damaging to the workers’ attention spans, productivity, creative thinking, and satisfaction" ([1] [2])

  • Target's credit cards were stolen through its website. Amazon used to run Target's website for them, but Target dropped Amazon in 2011 and outsourced to others, probably because Target execs thought it would be cheaper. ([1] [2] [3] [4])

  • “Patents [trolls] are unproductive, undead, unholy, and intent on sucking economic and entrepreneurial lifeblood” ([1] [2])

  • The studios have been fighting for DRM for 35+ years and been awful at every step: "In 1976 ... the studios ... said that home taping was illegal. They hoped to force ... a royalty for each device and cassette sold or to withdraw [the devices] from the market" ([1])

  • TouchDevelop from Microsoft Research is impressive, similar to Scratch, teaches kids to code ([1] [2])

  • A funny and accurate summary of what research labs look like in industry ([1])

  • Seems that viruses have won the selfish gene war: "Viruses are by far the most abundant biological entities in the oceans, comprising approximately 94% of the nucleic-acid-containing particles" ([1] [2])

  • Connectivity in a network determines whether you get a system where people benefit from their position or their talent ([1] [2])

  • Amazing SIGGRAPH video using evolutionary optimization to discover muscle placement and controllers for 3D models ([1] [2])

  • For we old geeks, a Mac Plus emulated in the browser, amazing ([1] [2] [3])

  • The CEOs of Microsoft, Google, Amazon, Netflix, and Yahoo all have Computer Science degrees ([1] [2] [3] [4] [5])

  • "Software developer rose from No. 7 in 2013 to this year's most attractive profession" ([1] [2])

by Greg Linden ( at February 05, 2014 02:24 PM

Tim Ferriss

How to Write a Bestselling Book This Year — The Definitive Resource List and How-To Guide

If you want to write a bestselling book, don’t reinvent the wheel.

I get at least a dozen email a week from friends who want to write books.

After three #1 bestsellers from 2007 to 2012, and publishing in 35+ countries, I’ve tried a lot. Having experimented with everything from “traditional” (Random House) to Amazon Publishing, from BitTorrent Bundles to self-publishing audiobooks, I’ve developed strong opinions about…

- What works and what doesn’t.
- What sucks and what doesn’t.
- What makes the most money and what doesn’t.

This post is intended to answer all of the most common questions I get, including:
- “Should I publish traditionally or self-publish?”
- “How does a first-time author get a 7-figure book advance?”
- “How do I get a good agent or publisher? Do I even need an agent?”
- “What does the ‘bestseller list’ really mean? How do you get on one?”
- “What are your top marketing tips if I have little or no budget?”
- “What are the biggest wastes of time? The things to avoid?”
- And so on…

My answers are grouped into sections, all of which include resource links. Here are the four sections of this post:

As a prelude, here are two books I found useful when selling The 4-Hour Workweek, both as a proposal to publishers and as a finished book to the world:

Write the Perfect Book Proposal: 10 That Sold and Why
Author 101: Bestselling Book Publicity

For the first meaty section, we’ll cover marketing, as it’s where I get the most questions.


A few quick points to get us started:

  • Wrangling book blurbs or cover testimonials is one of the biggest wastes of time for new authors. Take the same number of hours and invest them in making a better product and planning your marketing launch. I think one quote per book is more than enough, and a passionate quote from a credible but lesser-known person is FAR better than faint “meh” praise from a famous person.
  • If you only have time to read one article on marketing, make it 1,000 True Fans by Kevin Kelly, founding editor of Wired Magazine.
  • In my experience, more than 50% of the CEOs who have bestselling books buy their way onto the lists. I know at least a dozen of them. See The Deception of Bestseller Lists for more detail. I’ve never done this, as I aim to have books that are bestsellers for years not two weeks. That said, if you’re busy and simply want “bestselling author” on your resume, it can be had for a price.
  • If your book is mediocre, you can still market/promote a book onto the bestseller lists…but only for a week or two, unless you’re mega-rich. Long term, book quality and pass-along value is what keeps a tome on the charts. I value the Amazon Most-Highlighted page more than my NYT bestseller stats. The weekly bestseller lists are highly subject to gaming. I’d love to see a shift to monthly bestseller lists.

Now, the meat of this MARKETING section:

12 Lessons Learned While Marketing “The 4-Hour Body”
How to Build a High-Traffic Blog Without Killing Yourself
How Tucker Max Got Rejected by Publishing and Still Hit #1 New York Times
How Does a Bestseller Happen? A Case Study in Hitting #1 on the New York Times (Skip down to “What were the 1-3 biggest wastes of time and money?”)

Behind-the-scenes mechanics:

How the Various Bestseller Lists Work — New York Times, Wall Street Journal, Etc.
Behind the Scenes: How to Make a Movie Trailer for Your Product (or Book)
How to Create a Viral Book Trailer (or Get 1,000,000 Views for Almost Anything)


What does one week of a real launch look like for me?

Here’s the first week of The 4-Hour Chef launch. It features a complete list of media, in chronological order and broken down by format.

Now, here’s how I get that done:

From First TV to Dr. Oz – How to Get Local Media… Then National Media
How to Create a Global Phenomenon for Less Than $10,000
Public Speaking — How I Prepare Every Time

The success of The 4-Hour Workweek is often attributed to an early wave of tech “influencers” who spread the word. Pursuing such influencers requires thoughtfulness, and you can’t be overeager. Sadly, most people oversell and make an asshole of themselves, pissing off busy people and getting rightly shunned. Here’s how to avoid pitfalls and do it right:

Marc Ecko’s 10 Rules for Getting “Influencer” Attention (Be sure to read his interactions in the comments)


Let’s showcase four success stories, all using different approaches:

If you’re going to use a crowd-funding platform like Kickstarter or Indiegogo to fund your book (and get pre-paid orders, as well as a reader database), the following scripts and tools could save you hundreds of hours:
Hacking Kickstarter: How to Raise $100,000 in 10 Days (Includes Successful Templates, E-mails, etc.)

Now, let’s look at the nitty-gritty economics of publishing, as well as how to weigh the pros and cons of self-publishing:
How Authors Really Make Money: The Rebirth of Seth Godin and Death of Traditional Publishing
Tim Ferriss and Ramit Sethi on Self-Publishing vs. Big Publishers (Hint: there are some benefits to big publishers)

For those of you considering selling a book chapter by chapter, here are some relevant thoughts:
A Few Thoughts on Content Creation, Monetization, and Strategy

If you opt to self-publish, you might also need the below.  Remember: you’ll be your own marketing/PR/advertising department, and you need to know what you’re getting into. Never bought advertising? You might have to learn. Not sure on margins? Get sure:
Jedi Mind Tricks: How to Get $250,000 of Advertising for $10,000
The Margin Manifesto: 11 Tenets for Reaching (or Doubling) Profitability in 3 Months


If you’re going the traditional route (Read “How Authors Really Make Money” above), you will have to negotiate.

Many books have been written on the subject — I quite like Getting Past No — but here are the two most important things to remember:

  • He or she who cares least wins. Have walk-away power and figure out your BATNA.
  • Options are power. If you can avoid it, never negotiate with one party. Get competing offers on the table.

If you’ve decided on traditional publishers, I also suggest getting an agent.

I pay a 15% commission on my royalties because I want an experienced, diplomatic bulldog to fight my publishing battles for me. Selling a book to a publisher is easy — if you pitch the right editors, you only need an entertainment attorney to review contracts. But getting a book distributed properly nationwide? Getting the cover you want?  Pushing important editorial decisions in your direction? Getting commitments for end-cap displays or seasonal in-store promotion?

All this stuff is massively time-consuming.  Epic pain-in-the-ass stuff.

I view my “agent” more like the COO of my publishing business, not as a simple commissioned salesperson. This is one reason I opted to go with a smaller agency instead of a large entertainment agency. The latter tends to be (but is not always) exclusively focused on selling your book rights to the highest bidder. Once that one-night stand is over, they move on to fresh commissionable meat/deals, leaving you to fight the publisher on your own.  And trust me: the road from contract to bestseller list is a LOT harder than anything that comes before it.

You can find good agents by looking for contact info under “Major Deals” on Publishers Marketplace/Lunch. I also suggest reading the “Acknowledgments” section in books that you like; the agent will often be thanked. Here’s an old story about how I found my agent.

Another reason to have an agent — you’ll have your hands busy writing the damn book! That’s where your creative process will make or break you.  Take it seriously.


If you want a “bestselling book” that’s worthy of that label, you need a good book.

In my opinion, a mediocre book is more of a liability than no book at all. As the author of The E-Myth Revisited, Michael Gerber, once said to me, “If you’re going to write a book, write a fucking book.”  Good advice.  Follow it.

My stuff isn’t Tolstoy quality, but I do take pride in the work I do.

My general recommendation is this: If you can’t dedicate at least a year of full-time attention to a book (which might be 70/30 split between writing and PR/promotion), don’t bother writing it. There are exceptions of course. Some cocaine-fueled novelists I know can knock out a rough draft of a book in 1-2 weeks (!). I’ve seen memoirs completed in 1-2 months. But, alas, I’m not fast. I’m slow, what Kurt Vonnegut might call a “basher” or a “plodder,” and I write how-to content that requires a shit-ton of research and first-hand experimentation.

To do that reasonably well, I budget 1-3 years per book project.

It’s worth noting here, even though I write my own books, you don’t have to. “Ghost writers” exist solely to write books that are credited to other people. Here’s a good example of such services. If a current CEO publishes a book, it’s fair to assume that they had a professional ghostwriter interview them and pen “their” book.  If you’re not sure, you can check the acknowledgments or simply compare the writing to their speaking style in interviews.  Don’t match?  Grammar a little too good?  Use of “whom” a little conspicuous?  That’s a ghost at work.

Now, moving onward.

Here are some techniques, tricks, and resources that I’ve found helpful for nearly any type of writing…

The Good:
Tim Ferriss Interviews Neil Strauss, 7x New York Times Bestselling Author, on the Creative Process
Neil Gaiman – The Best Commencement Speech You May Ever Hear (20 Minutes)
The Odd (And Effective) Routines of Famous Minds like Beethoven, Maya Angelou, and Francis Bacon
Paulo Coelho: How I Write

The Bad (But Critically Useful):
“Productivity” Tricks for the Neurotic, Manic-Depressive, and Crazy (Like Me)
So…You Want to Be a Writer? Read This First.

The Ugly (But Necessary):
The Ugly New York Times Bestseller — The Creative Process in Action
Tim Ferriss: On The Creative Process And Getting Your Work Noticed


And that’s it!

Did you enjoy this post?  Any favorite parts, or things missing?  Do you have your own tips about publishing and writing?

Please let me know in the comments!  I’ll be reading them all.

by Tim Ferriss at February 05, 2014 03:13 AM

February 03, 2014

Reinventing Business

NextSpace Coworking

At this moment I'm set up at NextSpace, which has nine locations, mostly in California. I'm in the San Jose space.

My first experience with coworking was a visit to a place in Manhattan, which was not particularly exciting. NextSpace is quite different, because they put a lot of effort into helping people connect with each other. You can certainly come in, find a place and just focus on your work, but there's also a fair amount of conversation going on. Back when I was living in the bay area, writing books in solitary, some of this kind of interaction -- even if it was just some background discussion -- might have been really helpful.

Most people are just working on computers, something they could certainly do at home, probably for just the cost of carving out a space and getting an internet connection. Thus, significantly cheaper than having a space here. And they also have to commute here from their homes, a very inefficient waste of time. So I think it's pretty safe to say that the predominant reason people are here is to be around other people, for whatever need that satisfies.

Each NextSpace office has a "community curator" and a "community builder" whose jobs are to know everyone and what they do so that if someone has a need that another member might satisfy, they can put them in touch (they also keep track of everything in the office). This is a rather fascinating reversal & bottom-up approach to an office: instead of owning every job in the form of an organization, people are just around, working independently, and sometimes they can help each other. This might produce the same effect, or even better, than the more planned approach taken by a traditional organization.

NextSpace will sometimes have speakers and other events, and hosts a Friday afternoon mixer hour as additional ways for members to get to know one another. I found myself wondering whether additional experiments could yield even better connections.

NextSpace has a number of different kinds of memberships, the most important of which are:

  1. Cafe: you can use any open space
  2. Workstation: you have a dedicated space including if you want a permanent computer, along with some lockable storage.
  3. Office: around the edges there are a number of offices with doors that close.
All are month-to-month, so if you start to expand you are not locked into a lease. If you're just passing through you can buy day passes.

There are also some conference rooms. Your membership includes a few hours a month, and you can buy additional hours.

The general feel of the place was nice. It's much like what I get from working at the local coffee shop in Crested Butte, although that doesn't provide some of the services that this does. It seems like some coffee shops in Crested Butte might find a way to add coworking to their purpose by providing a few extra services. One of the trends I've seen in the town is multi-use of space, and a coffee shop seems like it could be a candidate for some kind of coworking.

by (Bruce Eckel) at February 03, 2014 10:49 PM

Mindfulness and Holacracy

I just spent 7 days at Esalen doing a mindfulness meditation retreat. That was not my intent, but that's what it became, and during the last three days I took a workshop that ended up being about mindfulness meditation, which lead me to yet another insight about Holacracy.

In mantra meditation, you repeat a word or phrase, aloud or mentally, as a way to draw yourself into a meditative state. As a freshman in college I took Transcendental Meditation and practiced it quite regularly for several years. To me, that was what meditation meant.

Mindfulness meditation emphasizes attention to your immediate experience in the current moment. As such, it doesn't limit itself to sitting meditation -- you can be walking, eating, or doing just about anything as long as you are present with that experience, focused on it and not thinking about something in the past or the future.

In our first exercise we were directed to pay attention to ourselves, and what we were feeling in our bodies. In particular, we listened to all the sensations we were feeling. In that I found my revelation. At that moment I was sitting on a pillow on the floor, with my legs crossed in some approximation of what you always see. As I have never been particularly flexible my body was saying a lot of things to me. I realized that I had always believed that these sensations were to be ignored. The teacher pointed out that it takes significant energy to push sensations away. If your body talks back to you about that, you must then push the additional sensation away. Pretty soon everything is a cacophony of struggle. But "sucking it up, pushing through, no-pain-no-gain" is what I had been taught and I never questioned it to the point that it became unconsciously internalized.

The first thing that happened when I started paying attention to the sensations is that I decided things were way too noisy, so I found a more comfortable setup and had much better results for the rest of the class. If I had continued to just fight it, that's what my experience would have been -- struggling (of course, you can't always just change your physical situation and quiet things down. Sometimes you just have to pay attention to those things). Now I'm looking for other places where I've learned to unconsciously do battle with myself, and start paying attention to those places (Noticing something only starts the process. It would be wonderful if all we had to do is see something to make it release completely, but we don't seem to be wired that way; we have to unwind it a little bit at a time, with patience and persistence).

How does this relate to Holacracy? The fundamental "unit of motivation" in Holacracy is the tension, which is exactly what it sounds like. In conventional companies, tensions are just all those little annoying things we put up with, as in "that's just the way it is around here." Tensions are the little pains that we put effort into ignoring. In companies with lots of tensions, you put lots of your energy into just dealing with those and very little energy into being productive (Perhaps one could even create a model of the lifetime of a corporation based on the accumulation of tensions; when tensions pass a certain line, the productivity + innovation equation drops below sustainability. The reason corporate lifetimes are dropping so fast could then be conjectured: innovation has become much more important).

In Holacracy, we do the opposite. Tensions are central to the process, so we don't push them away, we pay attention to them and do experiments to see how to change them. As a result, instead of constantly accumulating things to drain our energies (that is, the tension + the effort to ignore that tension), we're constantly clearing tensions away so that our energies can be devoted to productivity and innovation.

by (Bruce Eckel) at February 03, 2014 10:06 PM

January 31, 2014

Brian Marick

Looking to hire a programmer for a Chicago startup

Part of the reason I haven’t been posting is because Twitter has taken over my mind, but the main reason is that I’ve had a full-time job working for an education startup in Chicago (an early startup, but with paying customers already).

We’re looking for an experienced programmer interested in working in at least two of the following:

1. An ambitious web frontend (Javascript).
2. A growing number of backend Clojure services.
3. A smaller number of Rails apps that mediate between the two.

Although this isn’t exactly a devops or architecture job, experience with service-oriented architectures (their design, implementation, and tuning) is a plus. Right now, frontend skills are our bottleneck.

This is an agile shop, so we expect people to be dedicated to both keeping the code clean and deploying new features frequently.

“Plays well with others” is very important. So is valuing ease and smoothness of work (as in this essay). Everyone coming in to interview will get a poster:

Work with Ease

We currently have two programmers, a UX person, a product owner, a relationship manager, a salesperson, and a CEO. The product owner is that rare-as-a-unicorn Onsite Customer Who Sits With the Programmers.

Contact me if you’re interested.

by Brian Marick at January 31, 2014 04:40 PM

Alex Schroeder

Virtual Photography

I just stumbled over EVE Travel, with pictures and stories from the EVE Online world. What a wall of text. But the pictures! Never having played EVE, I keep getting reminded of my days as a kid playing Wing Commander 1 & 2 on a computer that would be unfit to be my phone’s audio processor, I guess. I’ve seen blogs with photographs of virtual worlds before, and it just keeps amazing me. How far we have come!

Some black and white images from Sykrim, for example. Or hipster Instagram pictures from Mirror's Edge.

Tags: RSS

January 31, 2014 09:39 AM

January 30, 2014

Alex Schroeder

Fourty Years of Dungeons and Dragons

Did you do something special? I gave an interview to one of these newfangled, local, online news sites, in German. Wenn Erwachsene mit Stift und Papier in die Schlacht ziehen, or When adults do battle with pen and paper.

Tags: RSS

January 30, 2014 07:44 AM

January 29, 2014

Reinventing Business

The San Luis Obispo Incubator

I met Matt when we were physics majors together at UC Irvine. He's been teaching at Cal Poly San Luis Obispo for at least a decade, and has also been the department chair. I always try to see him when I pass through, and when the business project came up in conversation he said he thought there was an incubator in town, so on a whim, we visited.

It was Saturday afternoon and the door was locked, but quickly answered by one startup's member, who gladly explained what was going on and gave us a tour. There were about a dozen startups in the space. The one thing that they all had in common was that they were former Cal Poly students.

The first step in the process is a summer accelerator, from which candidate companies are chosen for the incubator. So filtering happened to get into the accelerator, and again at the end of the accelerator before the incubator phase. Once the incubator began, the former students have two years of time where they pay 50$/month to stay in the space and use its amenities while they get started. There didn't seem to be any other kind of funding.

The incubator provides various kinds of coaching for the companies. Company members said that the camaraderie and idea cross-fertilization was very helpful as well.

There were several software companies, one that focused on materials, one on food and a number of others who weren't there that afternoon. I was generally pretty impressed by such an operation in a town of 45,000 (obviously the University is a major driver, but still), and if it had existed -- and I was of a mind to discover it -- when I was a graduate student there, who knows what might have happened?

Cal Poly also has the Research Partnership business park on campus, hosting companies that are likely to hire students and professors.

One thing I've found puzzling is the choices around financial support for startups. There's the approach that appears to have been pioneered by Y-Combinator: invest some money and take a percentage of the company. But the San Diego incubator and some others like the one above don't provide additional monies, just space and amenities. In San Diego, they charge no rent but apparently the reason they provide no seed money is because they feel it might influence the company in some negative fashion. And in San Luis Obispo they charge 50$ a month because, somehow, that rent was thought to be an important factor -- "we'll give everything else for free, but they've got to pay a little rent because otherwise they'll think (fill in the blank. Seriously, I don't know what to put there)."

Because of the apparent randomness of these choices (there doesn't seem to be any experimentation around them -- they look like guessing to me), I can only imagine that some influencer, during the formation of an incubator, stepped forward and said "surely, they have to pay some rent, because ..." or "we can't provide seed money because ..." or "we must/shouldn't own part of the company," etc. It doesn't seem like there's any science behind these decisions, just opinions, but I wonder if anyone has actually looked at the effects. For example, if the incubator provides no monies and the companies get seed money elsewhere, is there an effect on the companies that don't get much when there are others in the group that do? I would think so, and wonder if there are other things that would actually have positive and negative effects. And how can we tune towards the positive effects?

by (Bruce Eckel) at January 29, 2014 07:52 PM

Lambda the Ultimate

The marriage of bisimulations and Kripke logical relations

CK Hur, D Dreyer, G Neis, V Vafeiadis (POPL 2012). The marriage of bisimulations and Kripke logical relations.
There has been great progress in recent years on developing effective techniques for reasoning about program equivalence in ML-like languages---that is, languages that combine features like higher-order functions, recursive types, abstract types, and general mutable references. Two of the most prominent types of techniques to have emerged are bisimulations and Kripke logical relations (KLRs). While both approaches are powerful, their complementary advantages have led us and other researchers to wonder whether there is an essential tradeoff between them. Furthermore, both approaches seem to suffer from fundamental limitations if one is interested in scaling them to inter-language reasoning.

In this paper, we propose relation transition systems (RTSs), which marry together some of the most appealing aspects of KLRs and bisimulations. In particular, RTSs show how bisimulations' support for reasoning about recursive features via coinduction can be synthesized with KLRs' support for reasoning about local state via state transition systems. Moreover, we have designed RTSs to avoid the limitations of KLRs and bisimulations that preclude their generalization to inter-language reasoning. Notably, unlike KLRs, RTSs are transitively composable.

I understand the paper as offering an extension to bisimulation that handles the notion of hidden transitions properly and so allows a generalisation of KLRs to any systems that can be treated using bisimulations. Applications to verified compilation are mentioned, and everything has been validated in Coq.

January 29, 2014 01:18 PM

Tim Ferriss

Potential Tactics for Defeating Cancer — A Toolkit in 1,000 Words

(Photo: Irina Souiki)

I’ve wanted to publish this post for years.

It will propose a few simple approaches for minimizing the occurrence of cancer.

With 19 billion capillaries in our bodies, on average, virtually 100% of us have microscopic cancers by the time we’re 70 years old, more than 40% of us by age 40. There’s a good chance you have pinhead-size cancers in your body right now. These “cancers without disease” aren’t typically a problem, as they can’t grow larger than 0.5 mm without a blood supply.

But if cancer cells gets constant blood and glucose? That’s when you can end up dead.

That’s not where I want to be, and it’s not where I want you to be.

A Little Backstory…

While at the annual TED Conference in 2010, I learned that two close friends had been diagnosed with cancer. The year before, another friend had died of pancreatic cancer in his early 30′s.

This all made me furious and sad. It also made me feel helpless.

As luck would have it, TED in 2010 was abuzz about someone named Dr. William Li. His 24-minute presentation had introduced the crowd to “anti-angiogenesis therapy”: in plain English, how to starve cancers of blood. Dr. Li specializes in inhibiting cancer-specific blood-vessel growth, which ostensibly keeps abnormal growth in check. The simplest “drug” he recommended was tea. Drinking a daily blend of white tea (specifically Dragon Pearl jasmine) and green tea (Japanese sencha).

I started drinking the cocktail immediately, but it was just a first step…

In clinical trials, you see, anti-angiogenesis has been largely been unsuccessful. The father of the field, Judah Folkman, was brilliant, but his brainchild (Avastin) has been a disappointment. For about $100,000 a year of Avastin, one might extend lifespan by a month or so.

So, while I kept drinking my tea, I realized it probably wasn’t enough by itself. That said, it pointed me to new research.

I, for one, believe there are systemic causes of cancer with systemic treatments. This belief began with metformin experimentation in college (not recommended without doctor supervision), followed by reading the work and references of Gary Taubes, all of which has been reinforced by conversations with oncologists over the last decade.

All trails have led back to blood and glucose.

It’s also important to realize that killing cancer cells isn’t hard. Doctors have known how to do this for 100+ years. The real questions is: how do you exploit a weakness in cancer that is NOT a weakness in normal cells? Killing cancer is easy. Killing cancer while not killing non-cancer has proven almost impossible.

The below guest post is written by Peter Attia, M.D.. It explores a simple theory of cancer growth, which simultaneously shows how you can minimize it.

Peter is the President of the Nutrition Science Initiative (NuSI). Peter spent five years at the Johns Hopkins Hospital as a general surgery resident, where he was the recipient of several prestigious awards and the author of a comprehensive review of general surgery. Peter also spent two years at the National Institutes of Health as a surgical oncology fellow at the National Cancer Institute under Dr. Steve Rosenberg, where his research focused on the role of regulatory T cells in cancer regression and other immune-based therapies for cancer. Peter earned his M.D. from Stanford University and holds a B.Sc. in mechanical engineering and applied mathematics from Queen’s University in Kingston, Ontario, Canada.

This post is designed to allow you to skim…or go deep. Here are the options:

  • The quickie (10-15 min) - Read the post but ignore footnotes. Definitely a good start if you’re in a rush.
  • The weekend warrior (30 minutes) – Read the post and footnotes, which provide an excellent intro to the science.
  • The semi-pro (60 minutes) – Read the post, footnotes, and at least one top-10 suggested articles. This will give you more of a plan and put you ahead of 90% of the people who discuss cancer.

Enter Pete

One night Tim and I were having dinner and the topic of cancer came up.

Personally and professionally, I have a great interest in cancer, so when Tim asked if I could write something about cancer that was: (i) interesting to a broad audience, (ii) not technically over the top, (iii) not my typical 5,000 word dissertation, (iv) yet nuanced enough for his readers, I agreed to give it a shot, in about 1,000 words.

(Before reading this post, you may find some value in first reading a previous post which sets up the context for this one.)

So here it is, in roughly 1,000 words…


In 1924 a scientist named Otto Warburg happened upon a counterintuitive finding.

Cancer1 cells, even in the presence of sufficient oxygen, underwent a type of metabolism2 cells reserved for rapid energy demand – anaerobic metabolism3. In fact, even when cancer cells were given additional oxygen, they still almost uniformly defaulted into using only glucose4 to make ATP5 via the anaerobic pathway. This is counterintuitive because this way of making ATP is typically a last resort for cells, not a default, due to the very poor yield of ATP.

This observation begs a logical question? Do cancer cells do this because it’s all they can do? Or do they deliberately ‘choose’ to do this?

The first place to look is at the mitochondria6 of the cancer cells. Though not uniformly the case, most cancers do indeed appear to have defects in their mitochondria that prevent them from carrying out oxidative phosphorylation7.

Explanation 1

Cancer cells, like any cells undergoing constant proliferation (recall: cancer cells don’t stop proliferating when told to do so), may be optimizing for something other than energy generation. They may be optimizing for abundant access to cellular building blocks necessary to support near-endless growth. In this scenario, a cancer would prefer to rapidly shuttle glucose through itself. In the process, it generates the energy it needs, but more importantly, it gains access to lots of carbon, hydrogen, and oxygen atoms (from the breakdown of glucose). The atoms serve as the necessary input to the rate-limiting step of their survival — growth. The selection of cancer cells is based on this ability to preferentially grow by accessing as much cellular substrate as possible.

Explanation 2

Cells become cancerous because they undergo some form of genetic insult. This insult – damage to their DNA8 – has been shown to result in the turning off of some genes9 (those that suppress tumor growth) and/or the activation of other genes (those that promote cell growth unresponsive to normal cell-signaling). Among other things, this damage to their DNA also damages their mitochondria, rendering cancer cells unable to carry out oxidative phosphorylation. So, to survive they must undergo anaerobic metabolism to make ATP.

Whichever of these is more accurate (a discussion beyond my word count), the end result appears the same – cancer cells almost exclusively utilize glucose to make ATP without the use of their mitochondria. The point is: cancer cells have a metabolic quirk. Regardless of how much oxygen and fatty acid10 they have access to, they preferentially use glucose to make ATP, and they do it without their mitochondria and oxygen.

So, can this be exploited to treat or even prevent cancer?

One way this quirk has been exploited for many years is in medical imaging. FDG-PET scans11 are a useful tool for non-invasively detecting cancer in people. By exploiting the obligate glucose consumption of cancer cells, the FDG-PET scan is a powerful way to locate cancer (see figure).

Cancer Blog Images

You can probably tell where I’m leading you. What happens if we reduce the amount of glucose in the body? Could such an intervention ‘starve’ cancer cells? An insight into this came relatively recently from an unlikely place – the study of patients with type 2 diabetes.

In the past few years, three retrospective studies of patients taking a drug called metformin have shown that diabetic patients who take metformin, even when adjusted for other factors such as body weight and other medications, appear to get less cancer.

And when they do get cancer, they appear to survive longer. Why? The answer may lie in what metformin does. Metformin does many things, to be clear, but chief among them is activating an enzyme called AMP kinase, which is important in suppressing the production of glucose in the liver (the liver manufactures glucose from protein and glycerol and releases it to the rest of the body). This drug is used in patients with diabetes to reduce glucose levels and thereby reduce insulin requirement.

So, the patients taking metformin may have better cancer outcomes because their glucose levels were lower, or because such patients needed less insulin. Insulin and insulin-like growth factor (IGF-1) also appear to play an integral role in cancer growth as recently demonstrated by the observation that people with defective IGF-1 receptors appear immune to cancer. Or, it may be that activation of AMP kinase in cancer cells harms them in some other way. We don’t actually know why, but we do know that where there is smoke there is often fire. And the ‘smoke’ in this case is that a relatively innocuous drug that alters glucose levels in the body appears to interfere with cancer.

This may also explain why most animal models show that caloric restriction improves cancer outcomes. Though historically, this observation has been interpreted through the lens of less ‘food’ for cancer. A more likely explanation is that caloric restriction is often synonymous with glucose reduction, and it may be the glucose restriction per se that is keeping the cancer at bay.

Fortunately this paradigm shift in oncology – exploiting the metabolic abnormality of cancer cells – is gaining traction, and doing so with many leaders in the field.

Over a dozen clinical trials are underway right now investigating this strategy in the cancers that appear most sensitive to this metabolic effect – breast, endometrial, cervical, prostate, pancreatic, colon, and others. Some of these trials are simply trying to reproduce the metformin effect in a prospective, blinded fashion. Other trials are looking at sophisticated ways to target cancer by exploiting this metabolic abnormality, such as targeting PI3K12 directly.

To date, no studies in humans are evaluating the therapeutic efficacy of glucose and/or insulin reduction via diet, though I suspect that will change in the coming year or two, pending outcomes of the metformin trials.

EDITOR’S NOTE:Though it might seem premature to some, let’s make this actionable. To reduce glucose, consider following a diet (way of eating, really) such as The Slow-Carb Diet, Paleo, or any diet that induces ketosis. Many of the most influential researchers in the US, in addition to following ketogenic diets, take slow-acting metformin as a preemptive measure. NOTE: This should NOT be done without medical supervision.


I’ve been absurdly blessed to study this topic at the feet of legends, and to be crystal clear, not a single thought represented here is original work emanating from my brain. I’m simply trying to reconstruct the story and make it more accessible to a broader audience. Though I trained in oncology, my research at NIH/NCI focused on the role of the immune system in combating cancer. My education in the metabolism of cancer has been formed by the writings of those below, and from frequent discussions with a subset of them who have been more than generous with their time, especially Lewis Cantley (who led the team that discovered PI3K) and Dominic D’Agostino.

• Otto Warburg
• Lewis Cantley
• Dominic D’Agostino
• Craig Thompson
• Thomas Seyfried
• Eugene Fine
• Richard Feinman (not to be confused with Richard Feynman)
• Rainer Klement
• Reuben Shaw
• Matthew Vander Heiden
• Valter Longo

Further Reading from Tim — A Top-10 List

There is a deluge of writing about cancer.

Below, I’ve suggested a top-10 list of articles as starting points. Some are for lay audiences, some are technical, but all are worth the time to read. Here you go:

Looking for articles to pass to your parents, or to read as a lay person? Read these, in this order:
1. Non-technical talk by Craig Thompson, Pres/CEO of Sloan-Kettering
2. Science piece written about cancer (for non-technical audience) by Gary Taubes

Have a little background and want the 80/20 analysis, the greatest bang for the buck? Read this:
3. Relatively non-technical review article on the Warburg Effect written by Vander Heiden, Thompson, and Cantley

Peaking on modafinil during a flight to Tokyo? Want to deep dive for a few hours? Here are three recommendations, in this order:
4. Detailed review article by Tom Seyfried
5. Review article on the role of carb restriction in the treatment and prevention of cancer
6. Talk given by author of above paper for those who prefer video

Want four bonus reads, all very good? As you wish:
7. Moderately technical review article by Shaw and Cantley
8. Clinical paper on the role of metformin in breast cancer by Ana Gonzalez-Angulo
9. Mouse study by Dom D’Agostino’s group examining role of ketogenic diet and hyperbaric oxygen on a very aggressive tumor model
10. Mechanistic study by Feinman and Fine assessing means by which acetoacetate (a ketone body) suppresses tumor growth in human cancer cell lines

Afterword by Tim

It’s my hope that this short article offers hope. Moreover, it’s intended to offer actionable directions for those dealing with cancer or fearful of it.

Note a few things:

  • I am not a doctor, nor do I play one on the Internet. Make medical decisions with medical supervision.
  • This is a 1,000-word primer and therefore simplified. It’s not incorrect, but it is not comprehensive either, as it would impossible to digest for most people. Be sure to read the “further reading” above if you’re serious.

Have you stumbled upon any novel science/treatments related to cancer? Please share in the comments below, if so, as I’d love this post to become a living resource.

Many thanks for reading this far.



  1. A collection of cells in our bodies that grow at roughly normal speeds, but that do not respond appropriately to cell signaling. In other words, while a collection of ‘normal’ cells will grow and stop growing in response to appropriate messages from hormones and signals, cancer cells have lost this property. Contrary to popular misconception, cancers cells do not grow especially fast relative to non-cancer cells. The problem is they don’t ‘know’ when to stop growing.
  2. The process of converting the stored energy in food (chemical energy contained mostly within the bonds of carbon and hydrogen atoms) into usable energy for the body to carry out essential and non-essential work (e.g., ion transport, muscle contraction).
  3. The process of extracting ATP from glucose (but not fatty acids) when the demand for ATP is so great that the body cannot deliver oxygen to cells quickly enough to accommodate the more efficient aerobic pathway. The good news is that we can do this (otherwise a brief sprint, or very difficult exertion would be impossible). The bad news is this process generates much less ATP per carbon molecule (about 4 units of ATP per molecule of glucose), and it generates lactate, which is accompanied by hydrogen ions. (Contrary to popular belief, it’s the latter that causes the burning in your muscles when you ask your body to do something very demanding, not the former).
  4. A very simple sugar which many carbohydrates ultimately get broken down into via digestion; glucose is a ring of 6-carbon molecules and has the potential to deliver a lot, or a little, ATP, depending on how it is metabolized.
  5. Adenosine triphosphate, the ‘currency’ of energy used by the body. As its name suggests, this molecule has three (tri) phosphates. Energy is liberated for use when the body converts ATP to ADP (adenosine diphosphate), by cutting off one of the phosphate ions in exchange for energy.
  6. The part of the cell where aerobic metabolism takes place. Think of a cell as a town and the mitochondria as the factory that converts the stored energy into usable energy. If food is natural gas, and usable energy is electricity, the mitochondria are the power plants. But remember, mitochondria can only work when they have enough oxygen to process glucose or fatty acids. If they don’t, the folks outside of the factory have to make due with sub-optimally broken down glucose and suboptimal byproducts.
  7. Aerobic metabolism is the process of extracting ATP from glucose or fatty acids when the demand for ATP is not too great, which permits the process to take place with sufficient oxygen in the cell. This process is highly efficient and generates a lot of ATP (about 36 units, for example, from one molecule of glucose) and it’s easy to manage waste products (oxygen and carbon dioxide). The process of turning glucose and fatty acid into lots of ATP using oxygen is called ‘oxidative phosphorylation.’
  8. Deoxyribonucleic acid, to be exact, is the so-called “building block” of life. DNA is a collection of 4 subunits (called nucleotides) that, when strung together, create a code. Think of nucleotides like letters of the alphabet. The letters can be rearranged to form words, and words can be strung together to make sentences.
  9. If nucleotides are the letters of the alphabet, and DNA is the words and sentences, genes are the books – a collection of words strung together to tell a story. Genes tell our body what to build and how to build it, among other things. In recent years, scientists have come to identify all human genes, though we still have very little idea what most genes ‘code’ for. It’s sort of like saying we’ve read all of War and Peace, but we don’t yet understand most of it.
  10. The breakdown product of fats (either those stored in the body or those ingested directly) which can be of various lengths (number of joined carbon atoms) and structures (doubled bonds between the carbon atoms or single bonds).
  11. A type of ‘functional’ radiographic study, often called a ‘pet scan’ for short, used to detect cancer in patients with a suspected tumor burden (this test can’t effectively detect small amounts of cancer and only works for ‘established’ cancers). F18 is substituted for -OH on glucose molecules, making something called 2-fluoro-2-deoxy-D-glucose (FDG), an analog of glucose. This molecule is detectable by PET scanners (because of the F18) and shows which parts of the body are most preferentially using glucose.
  12. Phosphoinositide 3-kinase, commonly called PI3K (pronounced ‘pee-eye-three-kay’), is an enzyme (technically, a family of enzymes) involved in cell growth and proliferation. Not surprisingly, these enzymes play an important role in cancer growth and survival, and cancer cells often have mutations in the gene encoding PI3K, which render PI3K even more active. PI3Ks are very important in insulin signaling, which may in part explain their role in cancer growth, as you’ll come to understand.

by Tim Ferriss at January 29, 2014 05:53 AM

January 28, 2014

Erlang Factory

Erlang User Conference: Call for Talks open until 10 March

The conference will take place on 9-10 June. It will be followed by one day of tutorials on 11 June and 3 days of expert training on 11-13 June. 

We are currently accepting talk submissions for the Erlang User Conference 2014. If you have an interesting project you are working on or would like to share your knowledge, please submit your talk here. The deadline is 10th of March.

January 28, 2014 07:58 PM

January 27, 2014

Alex Schroeder

Nethack Mapping

Today, as we were exploring a ruin of Ianna, I decided I wanted to start mapping on my iPad. But how? Enter ASCII art.


It’s ugly. It doesn’t do slanted passages. It’s slow. But it worked… dead

Perhaps I should just have stuck to the old style:

                                   ---------                --------------
                                 ##.<......|                |............|
                                 # |.......|               #-............|
                              ### #........|             ###---------.----
                               #   |.......-#            #           #
                             Y@#   |.......|#          ###         ###
                             #     |.......|#          #           #
                          ..       ---------### -------#         ###
                         --                   # |......#         #
                                              ##......|  ##########
                                                |>....|       --+-.------
                                                |.....|       |.........|
                                                -------       |.........|

Perhaps what I need is a program that takes a text description of the dungeon and turns it into ASCII art.

Then again, once we do that, perhaps we might as well do node-based dungeon mapping. I might have to read that series of blog posts by Keith Davies again.

Then again, I’ve just skimmed Random Dungeon Generators Reviewed on Inkwell Ideas. Generating good random maps is hard. I still wonder, however. How hard would it be if you provided some input?

Tags: RSS

January 27, 2014 09:46 PM


Does Privacy Matter?

A few years ago, I made a tool called Collusion in an attempt to better understand how websites I’d never even heard of were tracking my adventures across the Internet.

The results my tool showed me were at best a bit creepy. I didn’t really mind terribly that third parties I’d never heard of had been watching me, in collusion with the sites I visited. I just wish they’d asked me first (through something more approachable than an inscrutable privacy policy).

But, as the old adage goes, I had nothing to hide. What do I care if some advertising companies use my data to offer me better services? Or even if the NSA mines it to determine whether I’m a terrorist?

I’m still struggling to answer these questions. I don’t know if I’ll ever be able to answer them coherently, but after reading a few books, I have some ideas.

For one thing, I don’t think it matters whether one has nothing to hide. What matters is if they look like they have something to hide.

One of the most invisible things about the Internet is that there are hordes of robots constantly scrutinizing your aggregate online behavior and determining whether you fit a certain profile. If you do, as Daniel Solove argues, your life could become a bit like that of Josef K. from Kafka’s The Trial. Or—to cite a true story—like that of Sarah Abdurrahman of On The Media, whose family was detained and aggressively interrogated for several hours at the US-Canada border for unknown reasons.

What determines whether you look like you have something to hide? The robot builders have it in their best interests to keep that secret: otherwise, the people with something to hide would simply start gaming the system. Yet this can also result in a chilling effect: innocent people self-censoring their online behavior based on what they think the robots might be looking for.

These robots don’t have to be working for the government, either. They could be working for, say, your health insurance company, looking for prior conditions that you might be hiding from them. The robots might even ostensibly work for “the people” in the name of transparency and openness, as Evgeny Morozov argues, distorting the public’s perception of you in ways that you can’t control.

What can one do to protect their privacy? One of the problems with using a tool like PGP or Tor to protect one’s privacy is that it paradoxically makes one look like they’re hiding something. When everyone lives in a glass house, you’ll look suspicious if you don’t.

Privacy problems are systemic, and I think their protections are necessarily systemic too: in order for one to not look like they’re trying to hide something, privacy needs to be a default, not something one opts-in to. Not only does this need to be done with technology, but it also needs to be accomplished through legislation and social norms.

by Atul at January 27, 2014 04:41 PM

January 26, 2014

Dan Bricklin

BCS Mac Introduction Meeting video is now available -- how that came about

The January 30, 1984, video of the introduction of the Macintosh to the public at a Boston Computer Society General Meeting is now available online. Harry McCracken, an editor at large at TIME for personal technology, posted an exclusive look at the video early this morning, right after excerpts where shown at the Mac 30th event in California (an "official" event marking the 30th anniversary of the original Mac announcement at the same place where it occurred). The Computer History Museum will be posting material on its web site tomorrow, and will update the video when additional processing of it finishes.

See "Exclusive: Watch Steve Jobs’ First Demonstration of the Mac for the Public, Unseen Since 1984" on

Harry explains how there were other videos of prior deliveries of Steve Job's talk introducing the Mac, but that this one is special for several reasons, some of which I have touched upon in my blog post Friday about it, such as the Q&A with a general tech audience. He also explains a bit about how the release of the video came about. Let me fill in a bit more.

These were not fully "lost" videos. I have had my copy of the January 1984 VHS tape for years and let others know I had it, showing excepts sometimes when I gave talks. Given the use of Apple material, and the special nature of the video, I did not feel it was time to release it yet to the public as I was slowly doing with other videos I have (not BCS ones). I was in contact with the videographer, Glenn Koenig, who shot most of the BCS meetings on Software Arts' behalf over the years. He let me know that he had masters of many of them, though he hadn't cataloged them (and didn't search out the Jobs one until Harry asked, which yielded better versions of parts of the presentation). I let him know of the material that I had made sure made it to the Computer History Museum. I encouraged him to continue to maintain his tapes in good condition, which is what he has been doing all these years.

We always intended to complete the edits of this material, but there is a lot of it, and digitizing it properly and editing it takes a lot of time and money. We didn't have the funds to do that and it was unclear if others would chip in and how to bring that about. Doing the work prematurely with the wrong equipment could compromise the tapes. (Of course, waiting too long could cause them to deteriorate too much.)

When Harry, a BCS member going back to the VisiCalc days, contacted BCS founder Jonathan Rotenberg in the fall of 2012 to ask about video from BCS meetings, Jonathan got him in contact with Glenn. Glenn, Jonathan, and I brainstormed about ways to finally make the restoration and release happen. I contacted Ray Ozzie, who I knew was interested in historic videos and had worked with us at Software Arts in the early 1980's. He, like Harry, suggested the Computer History Museum as a means for funding instead of something like Kickstarter. I have been a long-time supporter of the Museum, and have been inducted as one of their "fellows" for my work on VisiCalc, and knew this was the right way to go.

Eventually, Jonathan, Glenn, and I started working with people at the Museum, cataloging which material we had between us, and worked up a budget and a plan for fundraising. Glenn pointed out the upcoming 30th anniversary of the Mac as a good "news hook" and that a hoped-for article by TIME could help publicize the entire set (thank-you, Harry, for coming through with a great one!). We met periodically on the phone (we all had other jobs to keep us very busy) and eventually crafted a "request" letter and a list of potential donors. Glenn produced a short trailer of excerpts from a few of the tapes using some refurbished equipment to show those people.

In September of last year we had the material ready for fundraising and I hand-signed (and in some cases added a little note to) a few dozen letters and mailed them out. Within a little while some money trickled in. Then, Brad Feld, a friend from the early Trellix days now living in Colorado, contacted me for more information. Within a few days he and his wife Amy became the major funders, ensuring that the project was well off the ground. He also helped us by reaching out to some of the people I had approached, too. We have since raised enough to do this project well, and hopefully even do additional tapes that are surfacing, though the Museum could always use additional funds for such things.

The people producing the video for the Mac 30th event, most importantly Gabreal Franklin, helped Glenn work out details and ensured that there would be quality video for their event, both from the January 1984 video and some other.

For many reasons, including the difficulty in getting the slides shown the way we need them, the current version of the Mac Introduction is just a "rough cut". There is more editing that will occur. In any case, Glenn did many late nights to make this happen on time.

Now that everything is set up, we will be processing other videos, too, and release them in batches. I'll write more about them when they are available. To me, some are of them are of the same historic value as this one, if not more.

The Mac Introduction video has served its purpose well. It has drawn attention to the Boston Computer Society and the other videos, and to the Museum. It has helped a new generation see what happened in the early days of the PC revolution, and an older generation remember their past, and helped chronicle the thinking of the time for posterity. It has also helped fill in the record of the life of a giant of our industry, capturing an interaction with the users of his works like no other.

January 26, 2014 08:55 PM

January 24, 2014

Dan Bricklin

The Mac turns 30 and because we preserved the history you will be able to relive it

Today is 30 years since the Apple Macintosh was announced. That event occurred at a shareholders meeting in California. The following Monday, Steve Jobs and a crew of people from Apple traveled to Boston, Massachusetts, to redo that event for the public. It was at the Boston Computer Society General Meeting on January 30, 1984, at the John Hancock Hall in Boston.

In addition to Steve's speech and demonstration, he also brought many of the developers of the Mac software and hardware with him. After his presentation, they all sat on stage and answered questions from the audience and did further demos. For the over 1,000 people who attended, it was an amazing event. At the shareholders meeting there was the worry of how it would be received and if the demos would work. At the BCS meeting there was much less pressure and Steve was relaxed and confident and engaged the audience. The attendees were knowledgeable and savvy.

There is something else about the Boston event: My old company, Software Arts, at my suggestion as I recall, was paying to have video tapes made of many of the BCS General Meetings. (I was a board member of the BCS at various points). For this event, Apple provided additional cameras and made sure the lighting was good (it was not good in California, apparently).

We at Software Arts ended up with an edited VHS copy of the event that I have kept for these 30 years and sometimes show excerpts from when I talk to students to show them what it was like in the "old" days. I also would show it to my daughters to let them see how a real pro delivered a speech. At this point I know Steve's intonation on every syllable of the start of his presentation. (It's different than when he gave it in California.)

What happened last year is something wonderful: It turns out that many of the original BCS meeting tapes still exist. Some were donated to the Computer History Museum with my help. Many of the master tapes were still with the videographer, Glenn Koenig, including 3/4" tapes that are higher quality than the VHS copies. Together with Glenn and Jonathan Rotenberg (the founder and initial head of the BCS), we finally started a project with the Computer History Museum to restore the tapes and make the videos available to the public. This involves careful work on refurbished old equipment and careful editing remembering the events themselves to get the best possible video and sound. It will also include transcripts and other related museum-type treatments.

We have raised money to pay for this (there are over 20 meetings to process) and have started digitizing and editing the tapes. The Mac Introduction will be the first, but there are others of great interest with the leaders of many leading personal computing companies, from Microsoft to Radio Shack to Digital Research to Lotus and IBM.

A thank you to Brad Feld, who remembers the impact the BCS had on his interest in both technology and entrepreneurship from his days at MIT, and all of the others who came through with the money we needed!

The Mac video will be released soon (I'll post here when it's available) and others will follow over time.

[Photo of Steve Jobs about to insert disk into Mac in January 1984, from my VHS copy appears here in the original blog post on Dan Bricklin's Log]

For those of you who have only seen the young Steve Jobs portrayed by actors, seeing him and his team as they actually were should be a real treat. I get chills down my spine watching it.

It is such a joy to realize that a decision we made over 30 years ago at my old company, when the personal computing industry was a young oddity, will bring those days to life for a new generation and for generations to come and that they will care and appreciate it.

(This isn't the first time I've felt that way. Another recording we did, an internal one of a staff meeting as the IBM PC was being announced, ended up a key scene in the PBS documentary "Triumph of the Nerds" -- see "IBM PC Announcement" on my web site's Writings section. I've also posted a few other old videos I have: See "Video of Fall Comdex 1983" and "Video of Bob Frankston's tour of the WWW in 1994".)

I recorded a 20-minute podcast interview with Jonathan yesterday to get the back story on how he, a 20-year-old at the time, got Steve Jobs to debut in Boston. You can listen to the MP3 recording of our Skype conversation, "Jonathan Rotenberg about the 1984 BCS Mac event 2014-01-22" on my podcast channel.

In those days, the top companies in the industry would come to the BCS and other user groups to demonstrate their new innovations, sometimes as their first public showing. (The BCS was the most influential and probably biggest such group.) Local and national TV didn't show up to document the events (though the Wall Street Journal and other press often did). However, "personal" video taping helped preserve some of it. I know that other user groups did taping (I have some tape of me at a least one of those venues) and I hope that other material has been preserved and will be made available to the public and to historians through the Museum and other means.

January 24, 2014 07:44 PM

Alex Schroeder

Game Music

I sometimes try to pick an album for a campaign or a particular kind of environment. I often play Lustmord’s Heresy when players enter the Underworld or when facing temples of demon lords. I pick game soundtracks (Elder Scrolls, Vagrant Story) for most of my old school D&D games; I usually play medieval music when running Pendragon (La Capella Reial de Catalunya, for example). I used to play Conan stuff for Barbarians of Lemuria and Crypts n’ Things. I played a lot of 16 Horsepower and Woven Hand (dystopian Country?) for Western games or towns with a Western vibe in my old school D&D game. I guess I’d play Godspeed You! Black Emperor non-stop for a post-apocalyptic game. I sort of try to avoid the Star Wars sound tracks for Science Fiction or the Lord of the Rings / The Hobbit soundtracks for Fantasy, but sometimes it’s just so damn convenient.

I don’t have the time to pick songs for particular scenes when I’m running the game. The only thing I barely manage to do is skip the current track if it is widely inappropriate. I also can’t have songs with lyrics that distract me, nor can I have music that has me bobbing my head or tapping my feet…

Tags: RSS

January 24, 2014 08:46 AM

January 23, 2014

Lambda the Ultimate

And the Academy Award goes to... a literate program

Matt Pharr, Greg Humphreys, and Pat Hanrahan have recently been given an Academy Award for Technical Achievement, for the book Physically Based Rendering. This is the first time the award has been given to a book and (more relevant to LtU) the first time a literate program has won an Academy Award.

January 23, 2014 10:52 PM

Alex Schroeder


Auf Google+ lese ich immer gerne die Beiträge von Kristian Köhntopp. Heute einen geteilten Artikel von Stefan Münz, in dem dieser schrieb:

NSA, Millionen Mail-Zugangsdaten in Botnets … nein, das ist nicht das Ende des Internet. Es ist nur das Ende überholter bürgerlicher Vorstellungen von Privatsphäre, die in Zukunft so nicht mehr haltbar sein werden (und auch übrigens vor hundert oder zweihundert Jahren in dieser Form auch nicht existierten). Kurzum: es geht um jenen Abschied von gepflegter Heimlichkeit, den die Spackeria schon vor ein paar Jahren propagiert hat. […] Das Netz ist ein Forum, eine Fußgängerzone. We are public. – Stefan Münz

Darauf haben einige Leute in Kristian Köhntopps Kommentaren die Möglichkeiten und Grenzen der Kryptographie diskutiert. Ich selber meinte dazu allerdings:

Es ist nichts dagegen einzuwenden, die “gepflegte Heimlichkeit” zu wollen, egal ob die “Spackeria” das auch will oder sie “vor hundert oder zweihundert Jahren in dieser Form auch nicht existierten”. Der Ist-Zustand ist nicht unveränderlich.

Manchmal wirft man der Justiz vor, mit veralteten Gesetzen neue Tatsachen beurteilen zu wollen. In diesem Fall will ich aber genau mit meiner (veralteten Spackeria-?) Moralvorstellung die alten Gesetze (oder Wunschvorstellungen) beibehalten. Die Privatsphäre, den Schutz der Kommunikation, den Schutz derjenigen, die Missstände aufdecken, den Schutz der Journalisten, den Schutz ihrer Quellen, und so weiter. Und ich will hierfür die moderne Technik verwenden können.

Wenn das Netz eine “Fußgängerzone” ist, dann heisst das ja noch lange nicht, dass keine Regeln gilt, dass wir keine Erwartungen an unsere Mitbürger haben. Deswegen muss man halt an vielen Strängen gleichzeitig ziehen. Nur auf der Machbarkeit der Verschlüsselung herum zu reiten ist nicht zielführend.

Eine andere Welt ist möglich. Die Gegenwart als unveränderlich zu beschreiben ist konservativ.

Meinen öffentlichen Schlüssel gibt es über die üblichen Schlüsselserver.

pub   1024D/353AEFEF 2002-07-10 [expires: 2014-11-01]
      Key fingerprint = 92F1 9F7D D289 D4D8 CEAE  0427 7573 68E7 353A EFEF


January 23, 2014 08:24 AM

Fight On

Fight On! #14 has been released on Lulu! The bestest old school fanzine is back, like a revenant it haunts the living even if we know that it is already dead. Calithena has said that #15 will be the last issue and that saddens me. Issue #14 also came without my Caverns of Slime. This doesn’t make me as sad as I thought it would because we get a fantastic troll fortress instead. Gatehouse, temple, main complex, it has everything and nice, emphatic maps. Thick, black lines, high contrast edges, and yet clearly labelled. Citadel of the Dark Trolls. Lee Barber. Well done!

One of the comments in the announcement thread says “I used the code GETIT25 and got 25% off my order.” Good luck!


January 23, 2014 06:44 AM

January 22, 2014

Erlang Factory

ONE DAY ONLY: 20% off all training courses at Erlang Factory SF Bay Area Starts 6 am - Ends 11.59 pm PST on 23 Jan

Erlang Express - Robert Virding 3-5 March
Erlang for Development Support - Tee Teoh 3-5 March
Cowboy Express - Loïc Hoguin 3-5 March
OTP Express - Robert Virding 10-12 March
Brewing Elixir - Tee Teoh 10-12 March
Riak- Nathan Aschbacher 10-12 March
Kazoo - James Aimonetti 10-12 March

January 22, 2014 05:58 PM

Fog Creek

We spent a week making Trello boards load extremely fast. Here’s how we did it.

We made a promise with Trello: you can see your entire project in a single glance. That means we can show you all of your cards so you can easily see things like who is doing what, where a task is in the process, and so forth, just by scrolling.

You all make lots of cards. But when the site went to load all of your hundreds and thousands of cards at once, boards were loading pretty slow. Okay, not just pretty slow, painfully slow. If you had a thousand or so cards, it would take seven to eight seconds to completely render. In that time, the browser was totally locked up. You couldn’t click anything. You couldn’t scroll. You just had to sit there.

With the big redesign, one of our goals was to make switching boards really easy. We like to think that we achieved that goal. But when the browser locked up every time you switched boards, it was an awfully slow experience. Who cared if the experience was easy? We had to make it fast.

So I set out on a mission: using a 906 card board on a 1400×1000 pixel window, I wanted to improve board rendering performance by 10% every day for a week. It was bold. It was crazy. Somebody might have said it was impossible. But I proved that theoretical person wrong. We more than achieved that goal. We got perceived rendering time for our big board down to one second.

Naturally, I kept track of my daily progress and implementation details in Trello. Here’s the log.

Monday (7.2 seconds down to 6.7 seconds. 7% reduction.)

Heavy styles like borders, shadows, and gradients can really slow down a browser. So the first thing we tried was removing things like borders on avatars, card borders, backgrounds and borders on card badges, shadows on lists, and the like. It made a big impact, especially for scrolling. We didn’t set out for a flat design. Our primary objective was to make things faster, but the result was a cleaner, simpler look.

Tuesday (6.7 seconds down to 5.9 seconds. 12% reduction.)

On the client, we use backbone.js to structure our app. With backbone, it’s really convenient to use views. Really, very convenient. For every card, we gave each member its own view. When you clicked on a member on a card, it came up with a mini-profile and a menu with an option to remove them from the card. All those extra views generated a lot of useless crap for the browser and used up a bunch of time.

So instead of using views for members, we now just render the avatars and use a generic click handler that looks for a data-idmem attribute on the element. That’s used to look up the member model to generate the menu view, but only when it’s needed. That made a difference.

I also gutted more CSS.

Wednesday (5.9 seconds… to 5.9 seconds. 0% reduction.)

I tried using the browser’s native innerHtml and getElementByClassName API methods instead of jQuery’s html and append. I thought native APIs might be easier for the browser to optimize and what I read confirmed that. But for whatever reason, it didn’t make much of a difference for Trello.

The rest of the day was a waste. I didn’t make much progress.

Thursday (5.9 seconds down to 960ms)

Thursday was a breakthrough. I tried two major things: preventing layout thrashing and progressive rendering. They both made a huge difference.

Preventing layout thrashing

First, layout thrashing. The browser does two major things when rendering HTML: layouts, which are calculations to determine the dimensions and position of the element, and paints, which make the pixels show up in the right spot with the correct color. Basically. We cut out some of the paints when we removed the heavy styles. There were fewer borders, backgrounds, and other pixels that the browser had to deal with. But we still had an issue with layouts.

Rendering a single card used to work like this. The card basics like the white card frame and card name were inserted into the DOM. Then we inserted the labels, then the members, then the badges, and so on. We did it this way because of another Trello promise: real-time updates. We needed a way to atomically render a section of a card when something changed. For example, when a member was added it triggered the cardView.renderMembers method so that it only rendered the members and didn’t need to re-render the whole card and cause an annoying flash.

Instead of building all the HTML upfront, inserting it into the DOM and triggering a layout just once; we built some HTML, inserted it into the DOM, triggered a layout, built more HTML, inserted it into the DOM, triggered a layout, built more HTML, and so on. Multiple insertions for each card. Times a thousand. That’s a lot of layouts. Now we render those sections before inserting the card into the DOM, which prevents a bunch of layouts and speeds things up.

In the old way, the card view render function looked something like this…

render: ->
  data = model.toJSON()

  @$.innerHTML = templates.fill(
  ) # add stuff to the DOM, layout

  @renderMembers() # add more stuff to the DOM, layout
  @renderLabels() # add even more stuff to the DOM, layout


With the change, the render function looks something like this…

render: ->
  data = model.toJSON()
  data.memberData = []

  for member in members
    memberData.push member.toJSON()

  data.labelData = []
  for labels in labels when label.isActive
    labelData.push label

  partials = 
    "member": templates.member
    "label": templates.label

  @$.innerHTML = templates.fill(
  ) # only add stuff to the DOM once, only one layout


We had more layout problems, though. In the past, the width of the list would adjust to your screen size. So if you had three lists, it would try to fill up as much as the screen as possible. It was a subtle effect. The problem was that when the adjustment happened, the layout of every list and every card would need to be changed, causing major layout thrashing. And it triggered often: when you toggled the sidebar, added a list, resized the window, or whatnot. We tried having lists be a fixed width so we didn’t have to do all the calculations and layouts. It worked well so we kept it. You don’t get the adjustments, but it was a trade-off we were willing to make.

Progressive rendering

Even with all the progress, the browser was still locking up for five seconds. That was unacceptable, even though I technically reached my goal. According to Chrome DevTools’ Timeline, most of the time was being spent in scripts. Trello developer Brett Kiefer had fixed a previous UI lockup by deferring the initialization of jQuery UI droppables until after the board had been painted using the queue method in the async library. In that case, “click … long task … paint” became ”click … paint … long task“.

I wondered if a similar technique could be used for rendering cards progressively. Instead of spending all of the browser’s time generating one huge amount of DOM to insert, we could generate a small amount of DOM, insert it, generate another small amount, insert it, and so forth, so that the browser could free up the UI thread, paint something quickly, and prevent locking up. This really did the trick. Perceived rendering went down to 960ms on my 1,000 card board.

That looks something like this…

Progressive Rendering

Here’s how the code works. Cards in a list are contained in a backbone collection. That collection has its own view. The card collection view render method with the queueing technique looks like this, roughly…

render: ->

   renderQueue = new async.queue (models, next) =>
     @appendSubviews(@subview(CardView, model) for model in models)
     # _.defer, a.k.a. setTimeout(fn, 0), will yield the UI thread 
     # so the browser can paint.
     _.defer next
   , 1

   chunkSize = 30
   models = @getModels()
   modelChunks = []
   while models.length > 0
     modelChunks.push(models.splice(0, chunkSize))

   for models in modelChunks
     # async.queue flattens arrays so lets wrap this array 
     # so it’s an array on the other end...
     renderQueue.push [models]


We could probably just do a for loop with a setTimeout 0 and get the same effect since we know the size of the array. But it worked, so I was happy. There is still some slowness as the cards finish rendering on really big boards, but compared to total browser lock-up, we’ll accept that trade-off.

Trello developer Daniel LeCheminant chipped in by queueing event delegation on cards. Every card has a certain number of events for clicking, dragging, and so forth. It’s more stuff we can put off until later.

We also used the translateZ: 0 hack for a bit of gain. With covers, stickers, and member avatars, cards can have a lot of images. In your CSS, if you apply translateZ: 0 to the image element, you trick the browser into using the GPU to paint it. That frees up the CPU to do one of the many other things it needs to do. This browser behavior could change any day which makes it a hack, but hey, it worked.


I made a lot of bugs that week, so I fixed them on Friday.

That was the whole week. If rendering on your web client is slow, look for excessive paints and layouts. I highly recommend using Chrome DevTool’s Timeline to help you find trouble areas. If you’re in a situation where you need to render a lot of things at once, look into async.queue or some other progressive rendering.

Now that we have starred boards and fast board switching and rendering, it’s easier than ever to using multiple boards for your project. We wrote “Using Multiple Boards for a Super-Flexible Workflow” on the Trello blog to show you how to do it. On the UserVoice blog, there’s a great article about how they structure their workflow into different boards. Check those out.

If you’ve got questions, I’ll try and answer them on Twitter. Go try out the the latest updates on It’s faster, easier, and more beautiful than ever.

by Bobby Grace at January 22, 2014 04:36 PM

Reinventing Business

Canadian University Software Engineering Conference (CUSEC 2014)

On Saturday, I gave the "Reinventing Business" presentation as a keynote at CUSEC 2014 in Montreal. There will be a video posted of my presentation and I'll announce it on this blog when it's available.

Based on my experience of students in US universities, I wasn't expecting much. Much of our educational system in the US focuses on conformity -- in creating good workers for factories -- so most "successful" students are ones who know what will be on the test. It never even occurred to me that students would think of organizing their own conference (and I was unsuccessful in Googling any US student software conferences).

I was quite surprised to be so impressed with the quality of conversations that I had with students. Many of them knew exactly what I was talking about concerning all the management problems and potential solutions. There were a number of people who were graduate students and/or students in different disciplines, or even those who had graduated already and were still coming to the conference.

It was entirely student-conceived and student-run. As near as I could tell the organization was flat. There were roles and responsibilities, but in general anyone wearing a grey shirt was ready to step up and take care of any issue that arose. It worked very well.

They organized dinners with the speakers and conference organizers; I was only able to attend one of these because I came down with a 24-hour bug during the event (I was able to give my presentation but it is not as energetic as I usually like).

The Canadian education system, at least where computer science is involved, heavily emphasizes internships. It's not unusual for a student to have four or five internships distributed throughout their education, something they told me makes an incredible difference. And the schools don't just suggest that you do this, they go to a lot of effort to secure the internships, both in Canada and in the US (and possibly elsewhere).

Admittedly, I was seeing the exceptional students among all the universities in Canada -- the students who paid attention to the fact that the conference existed and made the effort and expenditure to attend. As with any conference, this produces a very narrow, self-selecting group and it's hard to do too much generalizing based on that. I can only say that from my experience of the conference, companies would do well to look to Canada for employees. It turns out that getting a work visa for a Canadian is much easier and cheaper (about $2K) than for other countries. In addition, the internship focus means that a Canadian graduate might fit even if your company has a policy of not hiring new graduates.

by (Bruce Eckel) at January 22, 2014 04:35 PM

January 21, 2014

Decyphering Glyph

And Now For Something Completely Different

It seems that the constant reminders of all the wonderful new features that my previous web publishing host had in store for me finally motivated me to set up a somewhat more do-it-yourself publishing arrangement, as behooves someone of my particular talents and skills.


I’m using Pelican now, and from what I’ve seen of it so far, it’s a promising tool. I particularly like their approach to publishing multiple content types; for content that I’m writing new, I can use markdown, but for content that I want to process automatically, it accepts HTML just fine, which means that the conversion process from my previous host has been relatively painless. (Relatively painless, that is. Remember to calibrate pain on the Extract-Transform-Load scale, which starts at 8 or so.)

One interesting consequence of this change is that you may now access this blog securely if that’s the sort of thing you are interested in.

Another change is that I’ve made the conscious decision to eliminate the comments section. While over the years I have been lucky to receive many interesting and engaging comments on my posts, I think that the best feedback I've gotten has always been from people writing in their own spaces. So I've mainly removed the temptation of the comment box to prevent the motivation to write something thougthful from being burned away in a quick riposte.

If you would like to comment on something I’ve said here, now or in the future, just send me an email and I’ll be happy to either post your comments inline, in a new post, or ideally, link to your own published response elsewhere.

Or, of course, ignore it entirely, as is my right as the lord of this particular digital fiefdom.

Sadly, this change makes some of the older posts imported to this blog read slightly oddly, as they invite you to “comment below”, but nobody’s been doing that for some time, so I think that overall this change is likely to provoke a better quality of discussion and use of time. The full indictment of how You Kids Today ruined the Internet with Your Horrible Comments, and Back In My Day Things Were Better And So Forth will have to wait for a future article. (Or you could go read any New York Times article with the word “millennials” in the title, as it will say basically the same thing.)

I hope you enjoy the new format.

by Glyph at January 21, 2014 10:01 AM

January 20, 2014

Giles Bowkett

Refrigerators, Routers, And TVs Send 750K Malicious Emails

Computer security researchers say they have discovered a large "botnet" which infected internet-connected home appliances and then delivered more than 750,000 malicious emails.

The California security firm Proofpoint, which announced its findings, said this may be the first proven "internet of things" based cyber attack involving "smart" appliances.

The streets from Minority Report, echoed in the 2012 Total Rekall, looked amazing filled with robot cars, but did they find their own uses for things? Because the real street always does. Human cab drivers and truck drivers might be inefficient, and economically incentivized to driving under the influence of methamphetamine, but fraudsters can't hack them to send spam, and terrorists can't hack them to perform thousands of simultaneously orchestrated lethal accidents either.

by Giles Bowkett ( at January 20, 2014 10:15 AM

January 19, 2014

Greg Linden

Shouldn't wearable computing let you be super human?

Wearable computing so far seems to be going after mimicking a tablet, but I wonder if the real success will be in augmented perception.

Current smartwatches are clumsy. They require an impossible tradeoff between having enough space for a touchscreen and not having a brick on your wrist. The early prototypes of smart glasses like Google Glass are similar, focusing on screens floating in front of your vision and existing smartphone features like recording video and taking pictures, but having difficulty cleanly handling input and the tasks you would use a smartphone or a tablet for. Some of this may be solvable with sufficiently perfect voice and gesture recognition, but that remains impossible with any tech that looks likely to be available in the next few years.

What no one seems to be asking is, do people really want a tablet on their wrist or tablet-like screen floating in front of their vision when they already have a smartphone in their pocket? Why would they want something they wear that is just like the smartphone they already have?

But what if you could put on a pair of normal-looking glasses (or contacts) and insert a small device into an ear, and then suddenly you are subtly superhuman?

I bet a lot of people would like to be able to see in infrared, have telescopic and microscopic vision, and be able to hear outside of the normal range of frequencies and volumes. I bet people would like to be able to see microexpressions, pupil dilation, skin flushes, and pulse rate changes easily. I bet people would enjoy small informational hints when they walk around like being reminded of names and who people are when they are in meetings or important road or directional cues brightened and enhanced.

From a tech perspective, this avoids a lot of the hard I/O problems plaguing the UX on current attempts at smartwatches and on Google Glass. You don't need a large touchscreen on your wrist. You don't need to type. You don't need perfect voice and gesture recognition to make this work. Augmented perception may be closer to achievable with what we already have: tiny HD cameras, virtual displays, and access to computation. And it provides something useful that we don't already have. Shouldn't augmented perception be the goal of wearable computing?

Tablets are pretty good at being tablets. And smartphones are pretty good at being smartphones. Wearable computing, like glasses and watches, shouldn't be mimicking what's already out there. They should let us do something new, something we cannot currently do.

by Greg Linden ( at January 19, 2014 10:49 AM

January 18, 2014

Alex Schroeder

Pendragon and the Great Pendragon Campaign

I wrote about Pendragon last year. Tomorrow I’ll be running the year 509. As the Great Pendragon Campaign starts in 485 and we usually play once a month, one game year per session we must have played for 25 sessions and about two years of real time.

I’ve written about the cool stuff before. I don’t really like skills in my games, but Pendragon skills still works. It has a weird but satisfying criticial hits system: roll under your skill on a d20 and you succeed, roll your skill exactly and it’s a critical success, if your skill is higher than twenty, you can’t ever fail—add whatever you have above twenty to your roll, making critical successes even more likely. I also like the traits pairs of traits that will sometimes govern how characters reacts, even if players don’t want them to. You can invoke them for a small bonus but if you fail, there’s also a small penalty. Then there are passions which are similar, except they don’t come in opposing pairs. If you manage your passion roll, you get a big bonus. If you fail, you get a big penalty. And if you fumble, you run into the woods, a raving madman. You’re taken out.

I want to talk a bit about the things that do not work as far as I am concerned. We’ve played the King Uther period and we’re finishing the Anarchy period. I don’t think these problems will disappear, however.

One of the first things we noticed while playing the Great Pendragon Campaign was that the Family Events in the Winter Phase are not very exciting. Having seen some great random event tables in the Old School Renaissance for D&D, I was not impressed by the table in the book. We’ve tried to write better stuff (in German), but so far we haven’t managed to strike the right balance between family development, adventure hooks and color. Ideally, these events would help my players discover their family tree, add nephews and nieces, cousins and more. For a while we used the Dramarama tables, but that led to several family members having affairs with tax collectors and the like. It didn’t work for us. The original table also had many women disappearing, but I wasn’t sure what to do with it. We had an adventure involving a saxon witch, but I’d like the table to provide me with more. I’d also like the table to provide players with a small opportunity to showcase their characters. Let us know about their traits, their families, their relationships. Alas, it isn’t working.

I also noticed that the book places a lot of importance on wives and marrying, but other than the first four candidates in the book, no stats are provided. We soon needed to know about their Stewardship and Chirurgery skills and only one of us was brave enough to create complete character sheets for their character’s wives. I would also have liked to know more about the glory prospective wives are worth, the number of manors they provide, what characters they have. I would have liked a table to generate appropriate wives, for example. That would have been a good solution. Quick to use at the table, too.

After a few sessions, players will start earning money with their manors. That, too, isn’t explained too well. We do opposed rolls of Bad Weather vs. Stewardship and figure out the resulting economic level of the knight’s lives, eg. “rich”. Now what? Does the character get £9? £8+1d4? Does the character get no money all but produce that can be spent but not saved? Can this money be used to build fortifications?

This brings me to another problem: Later in the game, people can learn the Siege skill. What happens with people in fortifications when the attacker has no Siege skill: Can they never take these fortifications? There are sadly very few example castles in the book. Do the saxons ever attack fortified manor houses? I guess they don’t. The fortifications also don’t protect against raiding saxons, right? So it just keeps your family safe?

The Winter Phase is too much book keeping.

As for the Campaign itself: Sometimes it feels very much like a railroad. Sometimes it’s hard to figure out what to do. Sometimes the adventure ideas are great. I’m still undecided. I sort of like it, I just wish more years were as cool as some of them.

In short, I think there is a great game in Pendragon. The campaign is good but could be better; the rules are good but could be better. I have already decided that I won’t be buying any more books. I need less rules, not more. I feel like I’d have to write a little houserules document and use it to run my next campaign. I sometimes find it hard to believe that other people haven’t run into these things and that these issues haven’t been fixed. I hardly read the forums, however.

I’ll keep running it. I just wish somebody would write the house rules I think I need. If you had the same issues, let me know how you handled them.

Update: Excellent comments by Doyle Tavener on Google+.


January 18, 2014 11:12 PM

Les Orchard

Parsec Patrol Diaries: How To Avoid Smashing Into Things

I made a hero ship with beam weapons. I even built drifting asteroids that handle smashing into things. What gave me trouble was finding a way to teach enemy ships how to avoid smashing into things. You know, not perfectly, but just well enough to seem vaguely cunning and worth pretending to outsmart in a video game.

In developing Parsec Patrol, I’ve never had plans or specifications so much as doodles & daydreams. One day I imagined this scene where I’m piloting the hero ship through a shifting maze of asteroids, a dozen enemy scout ships in fast pursuit. I dodge & weave through the rocks, just barely negotiating the gaps. One by one, the baddies vanish in bursts of light & debris: Some succumb to my beam weapons, while others smash into rocks or bungle into each other. Classic space dogfight material, here.

Where to start?

From years of playing & tinkering with shooters like Unreal & Quake, I had a vague notion of bots needing “pathfinding” algorithms to find their way around levels. So, I started hitting Google, looking to see what I could find and understand just well enough to eliminate from consideration or flag for a deeper dive.

Waypoint Graphs & Navigation Meshes

Some of the first pathfinding tools I started reading about were waypoint graphs and navigation meshes. It turns out that some bots rely on cheat sheets: map-specific and manually placed points or polygons, traversed to get from point A to point B. Generally it’s a cheap way to make bots seem like they know where they’re going, because a human being does most of the work up front.

Waypoint graph

Navigation mesh

Unfortunately, an asteroid field is not like a Quake map. In Parsec Patrol, the clusters of rocks are randomly generated and only get more chaotic as the rocks drift and collide. There’s just no way to handcraft a map for robots in this scenario.

A* Search

A* Search animation from Wikipedia

Another approach I found was the A* Search algorithm. There are some great write-ups on this algorithm out there, so I won’t try making a hash of it here. You can also try out some implementations in JavaScript.

This algorithm seems best suited for navigating graphs with few connections between nodes – a 2D grid, for example, with 8 exits per cell. If I ever wrote a roguelike dungeon crawler, this would be my jam.

Unfortunately, the world of Parsec Patrol uses a continuous coordinate system, rather than a map of discrete grid cells. And, it seems like a waste to try to find a complete path from point A to point B for this game – because that path is likely to be made obsolete from moment to moment. So, how about trying to work out the best move for just the next moment?

Trigonometry Refresher

Right angles only, for Light Cycles

I took a short break from research and decided to see what I could come up with on my own. What does it mean to avoid an obstacle?

One way to avoid a collision is to make a full right angle turn, into a perpendicular course. That works on the Light Cycle Grid, but it’s a bit extreme. So, I need an angle between 0 and 90 degrees with respect to the ship’s vector and the obstacle.

So, I decided to give myself a refresher course in trigonometry:

I am not good at math

I am not good at math

These scribblings are not meant to impress. Rather, this shows how much I forgot about high school trigonometry. Nonetheless, I worked out how to calculate an appropriate target angle that would miss the obstacle by a defined distance. Having that angle meant that I could turn less drastically while steering for avoidance.

It was a small victory – and now I remember SOHCAHTOA again.

Spaceships with Whiskers

Now that I had a way to calculate a steering angle that avoided smashing into something, I needed a way to know when I was headed for a collision.

If I were trying to build a physical robot, I might add some whiskers to detect the nearest obstacle and trigger a turn. But, how to do that in the virtual game world? A little bit of research brought me to the notion of using raycasting combined with collision detection, something like this:

Spaceships with whiskers!

The algorithm I came up with constructs a vector on each side of the ship. I project circles along the vectors, with a radius based on the margin by which I hoped to avoid obstacles. In order from nearest to farthest, I run collision detection for each of the circles. The search stops with the first hit, using the nearest obstacle found.

So, when my ship finds an obstacle with the whiskers, calculate the avoidance angle, and set that as the steering target for the current game tick. This ends up much more lightweight than finding a complete optimal path, and it can react from moment to moment to the changing game environment.

Whiskers are twitchy

My whiskers are wiggly

Unfortunately, this scheme looks funny in action: Since I revert back to target seeking after resolving obstacle avoidance, the enemy ships wiggle as they oscillate between the two strategies. Tracking straight toward the target often brings the ship into collision course – so once an avoidance course is achieved, target tracking turns right back into the obstacle.

Functions with Potential

What I really wanted was some way for these ships to take many nearby obstacles into account along with seeking toward the target, and come up with a smoothly changing steering angle that seemed not entirely stupid or goofy looking.

After some further research, I started reading AI for Game Developers by David M. Bourg and Glenn Seemann. In Chapter 5, I found code using the Lennard-Jones potential function to drive avoidance of multiple obstacles and target seeking all in one algorithm.

Serious business, this potential function

A thumbnail sketch of this function with respect to the game goes something like this: Entities can repel & attract each other. Repulsion & attraction change over distance. For example, swarming entities can attract at long distance and repel when too close.

Here’s what the simplified AB form of this function looks like in my code:

U = (-A/Math.pow(d,n)) + (B/Math.pow(d,m))

There are 4 constants in this function:

  • A – magnitude of attraction
  • n – attenuation of attraction over distance
  • B – magnitude of repulsion
  • m – attenuation of repulsion over distance

Pick values for these constants, and you’ve got a function that yields a positive (repulsion) or negative (attraction) value for any given distance (d). So far, I’ve just used trial & error to find values for these constants.

To apply this function, I search for obstacles within a certain radius of the ship. That limits the number of calculations, because far-flung obstacles have no significant influence. For each nearby obstacle, I calculate distance and apply the potential function. I then calculate a unit vector from each obstacle to the ship and multiply by the result of the potential function.

Repeat all the above for targets, regardless of range, and with function constants that yield attraction rather than repulsion.

That leaves me with a collection of vectors, each with a direction and a magnitude representing the weighted urgency of heading in that direction right now. I sum all these vectors, leaving a single vector with an angle useful as a steering goal. I ignore the magnitude, because it was only useful during addition for influencing the angle.

Now, perhaps I’ve come off sounding smart after having written the above. But, I’ve already established that I’m not good at math. It’s quite possible I’ve abused & misused this function entirely. That said, I think it’s produced a satisfying result.

Smoother steering

Smoother steering with math!

The demo sketch has a debug mode full of confusing circles and lines, but it might help illustrate how the function works on they fly. In a nutshell, this means that closer obstacles have a greater influence on causing the ship to steer away. Meanwhile, there’s a constant influence pulling the ship back toward the target, whenever the mass of obstacles nearby do not dominate steering.

I want to tinker some more, maybe see if I can make the ships swarm with each other while also avoiding obstacles and heading toward the target. I’d also like to find a way to stop guessing and calculate the function constants based on the speed & steering characteristics of a given ship. That is, fast & nimble ships should be able to navigate tighter spaces, while big & clumsy ships should start working to avoid collisions from farther away.

Further research

I’ve been thinking I need to look into vector fields and flocking behaviors next. I’m still looking for more options to make this work, too. If you’ve made it this far reading this post, feel free to toss some suggestions & critique my way. I have basically no idea what I’m doing, nor even what terms to use in searching for this stuff.

Still, these are some pretty fun results stumbling along from daydreams to code.

by lmorchard at January 18, 2014 09:06 PM

Lambda the Ultimate

POPL 2014 proceedings available freely for all

The proceedings can be downloaded from the POPL webpage.

I find this extremely exciting (not only because I didn't get funds to attend POPL this year). To my knowledge, this is the first time that this is done in POPL/ICFP/PLDI; electronic proceedings were previously only delivered to attendees, with an explicit request not to share them.

I am not sure what is the reasoning that make which people decide to do it this year, or not to do it before. I hope that the proceedings will remain available after the conference (next week), and that this idea will be adopted for the years to come.

January 18, 2014 07:18 AM

Bret Victor

twitter headers

twitter headers (ongoing)

January 18, 2014 02:24 AM

January 17, 2014

Alex Schroeder


I followed the tutorial Server Monitoring With munin And monit On Debian Wheezy by Falko Timme and I think it worked! I made some small additions in order to monitor Exim4 and Dovecot based on the Monit configuration examples on their wiki and some notes on self-signed certificates from the Debian wiki.

For my future self trying to figure out what the hell is going on:

Nice! ok

Tags: RSS

January 17, 2014 02:34 PM

Giles Bowkett

Blue Sky on Mars

Travel Rewards for Lazy People

Once upon a time I asked a homebrewer what type of beer they brew.

That was a mistake.

People who brew their own beer are very excited about it, and will never hesitate to tell you — in endless detail — every mundane aspect of their last six batches of beer. I was more looking for an answer like "a dark beer" or maybe even "it's sort of like a Belgian, but I brewed in southeast Chicago instead". I wasn't looking for the chemical composition of their latest yeast harvest.

People who like to analyze travel rewards programs — we'll call them Airline Rewards Strategy Enthusiasts, or ARSEs for short — are very similar to homebrewers. We are an eclectic bunch who will talk for ages about why it is advantageous to analyze seat charts before choosing a seat, or why Clooney's Up in the Air should be selected for preservation as a culturally significant film by the Library of Congress. ARSEs really worry about How to Optimize Logistics Efficiently (or, "HOLE").

Anyway, you don't have to be an ARSEHOLE in order to benefit from travel rewards programs. You don't need to carry seven airline credit cards or religiously track airfare comparison sites. You can be lazy, make a few small changes to how you travel, and ultimately save some money and avoid some headaches.

Don't change your habits much

Unless you're flying 150,000 miles a year — in which case this post isn't for you — your life isn't going to be particularly better off by micromanaging different travel programs.

So rule number one: don't change your habits too much. If the airline you typically fly is forcing you to make three stops to get to a destination when you could spend $750 less for a direct flight on another airline, just buy the cheaper ticket. Airlines win when you start acting irrationally like that. Don't let them win; as an occasional flier, your job is to take as much advantage as you can without changing how you'd normally act.

Sign up for most programs

When you do travel, you should always be banking the miles somewhere. In other words, you should always sign up for a frequent flier or traveler account with the hotel or airline. Every now and then you're just going to be stuck flying or staying somewhere you typically wouldn't, and you might as well put those miles somewhere.

The goal is that after a few years of forgetfully doing this, you'll realize that you'll be able to fly somewhere free, or stay somewhere free. That's neat. Again, this ties back into not changing your habits much: you'll accumulate miles by just acting normally, and after awhile you'll pleasantly find you can spend those miles on something you actually want to do.

Fly and stay with one company

Don't change your habits much, but do think about trying to fly with one airline and stay with one hotel chain. In most cases, the prices are going to be somewhat comparable across companies, so it's worthwhile to book your travel on one specific company.

How do you settle on those companies? I fly Delta and stay at Starwood properties (SPG) for three main reasons:

  • Where do you live? This is probably the number one thing for airlines. If you live in a hub — an airline's main base of operations — then you should probably fly that airline. SFO isn't a hub for Delta, but Delta has a pretty good enough presence for me. Also: take a look at where you fly frequently. To get home to visit family, I end up flying through a lot of Delta hub cities.

  • What can the alliance give you? Airlines and hotels are like some goddamn complicated Game of Thrones episode where everyone is trying to sleep with and/or kill everyone else. Most companies are part of an alliance, which means you might get status and points if you spend money with another company in the alliance. For example: there's a direct KLM flight to Amsterdam from San Francisco that I use tons because it means I can get to all of Europe in two flights (not to mention Amsterdam is the most beautiful city in the world). KLM's part of the Delta SkyTeam alliance, which means I get miles for flying it. Another example: Delta and SPG themselves have an arrangement so that I earn miles when I stay at a hotel and earn points when I fly. Not a bad gig.

  • How's the experience? Okay, your mileage may vary on this admittedly hipster point, but I've found this is actually a relevant question for me. Most airline and hotel websites and apps are fucking horrible. It can lead to additional stress that honestly, I don't want to deal with when I'm running around an airport. Delta and SPG both have a pretty good design sense. This isn't really about pixels, though: I think this extends to an experience thing as well, which is I think why Delta has wifi on every plane, lots of in-seat TVs and power, and pretty good customer support. SPG has good support as well (and both are available via Twitter), and they have classy, trendy joints like the W Hotel chain (you can tell whether a hotel is classy by how much cocaine is done in its lobby, which is par the course for W hotels). Again, your mileage may vary quite a bit on this one, but I tend to think that people who care about experience will make me less likely to commit felonies at 30,000 feet.

Extend as you do more

At some point if you start traveling more, you'll want to more aggressively figure all of this out. It kind of is a racket, and before long you're going to be that dude writing blog posts about travel rewards programs like some sort of huge jerk you are. But it's worth spending some time figuring stuff out if it means that you'll be able to spend the next 10 hour flight in first class instead of having your knees pressed against your forehead back in coach.

This usually means thinking about signing up for credit cards that give you points you can spend on flights and stays. Just remember rule number one, though: don't change your habits too much, or else The Man wins. No amount of frequent flier status is going to make you better off if you can't pay your bill every month. The APR on your cards is going to be so much more expensive, so don't be stupid.

Anyway, I feel slimy after writing all this, so I'm going to go take a shower now. After ten showers I should be able to make gold status.

January 17, 2014 08:00 AM

January 15, 2014

Giles Bowkett

Alex Schroeder


I recommend you all subscribe to Bruce Schneier’s Crypto-Gram newsletter if you aren’t subscribed to his blog. Today’s Crypto-Gram, for example, has this excellent passage:

Not only is ubiquitous surveillance ineffective, it is extraordinarily costly. I don’t mean just the budgets, which will continue to skyrocket. Or the diplomatic costs, as country after country learns of our surveillance programs against their citizens. I’m also talking about the cost to our society. It breaks so much of what our society has built. It breaks our political systems, as Congress is unable to provide any meaningful oversight and citizens are kept in the dark about what government does. It breaks our legal systems, as laws are ignored or reinterpreted, and people are unable to challenge government actions in court. It breaks our commercial systems, as US computer products and services are no longer trusted worldwide. It breaks our technical systems, as the very protocols of the Internet become untrusted. And it breaks our social systems; the loss of privacy, freedom, and liberty is much more damaging to our society than the occasional act of random violence.
– Bruce Schneier, How the NSA Threatens National Security


January 15, 2014 09:48 AM

Blue Sky on Mars

Who Owns?

Years ago, I read this passage about art and ownership:

Later I would never be surprised by greedy and jealous collectors who didn’t want to exhibit their treasures. Of course! One glance, and the occasional viewer would become a co-owner. A piece could be put back then, and never shown again, but the viewer now remembered what he saw. Maybe even, more terribly, he saw in that one glance more than the real owner had ever seen. Who, then, was the owner? Everything was suddenly reversed!

Kozhina, Elena. Through the Burning Steppe. New York: Riverhead Books, 2000. 157.

I've been thinking a lot about this recently in the context of the tech industry, from everything from pushing open source code to writing blog posts to sending a tweet out.

You have certain legal protections when you create a creative work, of course. Open source has licenses, writing is covered by copyright. That's not the scary part, though. What's fascinating is when you think beyond just ripoffs, past facsimiles. It's the remix, the sampling, the improvement of existing ideas. Sometimes the finished product may have nothing to do with the original work: maybe you're compelled to write a song after seeing a particular painting that moved you.

If I'm honest to myself, this is what I fear whenever I create something in the public eye. What if people don't like it? More unsettlingly, what if I completely missed the mark? What if someone comes in with a rebuttal and writes their own post about how misled I was?

It's a little daunting. And I think this is why people stay out of it — not to even mention anything about dealing with the trolls and assholes online. It's a little scary to admit that the idea we have, the perspective we have, could be appropriated by someone else, in ways we didn't imagine. Will they improve what I've done, or will I be the butt of a joke? Is this photo I took going to end up being the basis of a meme on reddit?

You concede that power to the reader. They can do what they want with how they interpret you. It's then tempting hold on to that idea and tell no one, because then at least you can keep that power, you can keep that treasure.

It's a feeling that's hard to shake. But where did you get your idea from, anyway? Everything is a remix, on some level. And it's this incremental improvement that improves all of us. Realizing that should give you the motivation to create, to be public about those creations when you can. It doesn't have to be as scary as we fear. It's how humans operate. Help people create their own ownership.

So create. And tell people.

January 15, 2014 08:00 AM

Reinventing Business

EvoNexus: A San Diego Incubator

EvoNexus stands out because it's "no strings attached" -- it doesn't take a percentage of the companies it incubates. It has two spaces, one occupying an entire floor of a nice downtown skyscraper (which focuses on mostly software tech) and a smaller one in La Jolla (focusing on hardware, much of which is biotech-oriented because of the proximity to Sorrento Valley).

The San Diego space is currently hosting 26 startups, one of which has 10 people. It provides office space, meeting rooms, and basic services -- but no funding, although it helps groups find funding (they didn't want to cause startups to have any sense of attachment or obligation). There are also events, mentoring and coaching. They've just added a program called EvoStart to give startups more structure in their movement towards "graduation." The normal incubation period is four months but startups can apply for extensions for a total of one year.

EvoNexus is a non-profit organization which is supported by dozens of companies.

The evaluation process requires an application and numerous different reviews. Evaluation tends to focus on how well the team works (ideas can change, but the team is core to whether the company will succeed).

With such a large number of startups in one space, there tends to be ample opportunities for cross-pollination, which is promoted by EvoNexus. I liked the feel of the place; it had a lot of energy probably because there were so many people there.

Thursday I fly to Montreal to give a "Reinventing Business" presentation at the CUSEC 2014 conference.

by (Bruce Eckel) at January 15, 2014 04:46 AM

January 14, 2014

Alex Schroeder

January 13, 2014

Giles Bowkett

Nothing Happening But The End Of The World

One of the most important changes in the Web over the last ten years is that conversation's moved from private email, community email lists, and writer-owned blogs into various corrals and golden cages. If you were writing code in 2006, particularly "cutting edge" code like Rails apps (at the time), you remember how blogs were the new documentation, and all the dev community interaction took place in IRC or on email lists. I always felt embarassed that my blog lived on Blogspot, but the point's moot today. For new projects forming now, the information all sits on StackOverflow, GitHub, or Twitter -- or in personally-published ebooks.

The Web we lost was a temporary autonomous zone, and like all temporary autonomous zones, it provided an illusion of utopian anarchy wrapped within a coccoon of privilege.

Speaking of privilege-induced misperceptions, the tech press seems determined to prove it is not only too arcane and insular to provide any use whatsoever to non-techies, but also that it is too firmly and deeply rammed up corporate America's anus to provide any use whatsoever to techies either. Consider 2013 was a lost year for tech:

All in, 2013 was an embarrassment for the entire tech industry and the engine that powers it—Silicon Valley... Not a single breakthrough product was unveiled... 2013 was a great big dud for technology as a whole.

Om Malik picked up the horseshit baton and enthusiastically carried it down the field, "arguing" against that "lost year" blog post with a defense of 2013 as a year in technology which did not once mention either Bitcoin or Edward Snowden.

The biggest 2013 stories in tech were economic and political stories straight out of the pages of 1980s cyberpunk novels, straight out of the archives of 1990s cypherpunk listservs, and straight off the list of top headlines for the year in general. So-called tech journalists didn't even notice.

At the end of 2012, Anil Dash wrote The Web We Lost. By the end of 2013, we all knew about the Web we had built instead: essentially, it's J. Edgar Hoover as a service. It doesn't really matter how much money your web startup is or isn't making today; wait for a few iterations of Moore's Law and you'll find that your user data couldn't be more valuable if it consisted entirely of Bitcoin hashes. Of course, you'll also find that the NSA's taken control of it, which is the savviest land grab in human history.

2013 was the year Occupy Wall Street got serious about encrypting their email, while Wall Street got serious about cryptocurrencies. It was the year we all discovered that the cypherpunks had underestimated how important encryption would become.

Of course, I can't expect every hacker to remember the cypherpunks, or the Web we lost. Many, many hackers know absolutely nothing about either subject. The tech industry thrives on young new recruits, whether because their inexperience makes them easier to exploit, or because software is eating the world and, in the process, making every new generation of programmers more populous than the last.

(This ongoing demographic trend exerts two obvious, inevitable repercussions: it means each subsequent generation of programmers gets less weird, on average, and stupider, on average. The good news is that the growing-stupider is happening slowly, but the bad news is that the de-weird-ification is happening quickly. This explains how online culture moved from profoundly weird to pervasively frivolous. Where we once had Eris, we now have the Flying Spaghetti Monster. September becomes ever more Eternal with every passing moment.)

But whether you remember the past or are doomed to repeat it, today's walled gardens all share one huge, fundamental, fatal flaw: software is eating the world. It doesn't care what's on that world; it's after the whole katamari. Friendster fell to Myspace; Myspace lost to Facebook; and the NSA might have its hooks deep into Facebook, but those hooks won't make anything immortal. If there's one lesson we should learn from the past, it's this: Software Will Eat Itself.

by Giles Bowkett ( at January 13, 2014 08:02 AM

Blue Sky on Mars

GitHub's Public Speaking Culture

Somewhere between a third and a half of GitHub's 240 employees gave a talk in 2013.

Encouraging your employees to give talks at a conference or meetup is generally perceived as a good thing. For GitHub in particular, it's good advertising: it's not like we're going to start spending money on banner ads any time soon, and talking directly to our customers is some of the most effective marketing we can do. On the same token, it's good for recruiting, too. We've never had a shortage of resumes.

Management usually focus on these two areas — advertising and recruiting — as the main business motivation for employee talks. That's not the whole story, though. Support your employees, encourage them to talk publicly about their experiences, and you'll start to take advantage of all of these benefits every other company misses out on entirely.

Employees as teachers

You don't truly know something until you've taught it to others. That's a nice phrase people claim, and it's true, but you don't honestly understand the phrase until you're up on stage and you hit the what the fuck moment deep in your stomach when you realize you have to convey a concept to a few hundred strangers.

Building a slide deck and a narrative to deliver to beginners is completely daunting and, in order to be successful, necessitates that you really know your shit. That typically means reading documentation you haven't read before, rewiring your brain to account for perspectives you hadn't considered before, and becoming far more familiar with the concept than you had been previously.

Re-read that last sentence again. You're practically churning out better, more competent employees this way.

Public speaking is public documentation

I like to talk about how GitHub works together as a company: our development practices, our communication tools, and our internal policies.

Until recently, I never really realized how important this was for our internal company culture. The benefit is twofold: new employees already have a rough idea about how things are done before they start, but most importantly all of our talks and blog posts are documentation that we can fall back on internally. By being so open about how we operate, we have something more tangible on hand when we discuss and evolve culture internally. You can leverage the same consistent terminology amongst everyone. When someone mentions asynchronous workflow in the company, for example, we all have a foundational understanding of what it means and what it doesn't mean.

It's subtle, but it's pretty powerful. Company culture is hard to get right and to maintain as you grow.

Community leadership

All too often, speakers are looked at like some kind of elite group, that they have some sort of innate knowledge that the average person doesn't have. It's total bullshit, but there admittedly is a reality that speakers are in a good position to meet others in the community.

As a business, you want this. I can't tell you how many times we've relied upon people external to the company to help us get through difficult problems. Many, many of those times we're able to tap into those people because someone met one of them through conferences or mutual friends. I'm not sure you know this, but computers are stupid, and they're going to give you some really shitty bugs from time to time. Getting your employees out meeting people can save you thousands of dollars and person hours down the line.

More importantly, you want to to be there for other companies, too. Form those relationships with others so that you can be there for them when they're facing those hard problems. Fuck the business reasons; be good stewards of your community. There aren't many things that can make you happier than helping someone else get through a rough patch.

It's different

We have a lot of happy employees at GitHub. What's more, since we can dogfood our own product, we're typically in love with what we're building. But even the most interesting project can be infuriating, from time to time. Programming can be really draining, and taking some steps back to refresh can keep your mind in the right place.

Building and delivering talks is very different from plopping down and coding all day. It's a different form of problem solving. It works a different part of the brain. This respite from day-in, day-out work can be extremely good for overall mental state. What's more, if you're giving a talk somewhere else in the world, you can experience a change in literal scenery. Sometimes just getting outside of the grind can be really meaningful.

It keeps your employees feeling fresh, and when they get back they'll be ready to tackle the hard problems.

It's worth the expense

As a GitHub employee, if any of your talk proposals are accepted at a conference, GitHub will pick up the tab to send you and a travel buddy coworker to that conference. It's a pretty cool perk, and our employees take advantage of this.

It's a nontrivial expense. Each company is going to have to determine what level of support they're willing to fork out for, but at GitHub this has proven to be worth the expense. This isn't just a policy for programmers; we have people giving talks in our support, human resources, and marketing teams as well. Everyone can benefit from sharing experiences.

We're fortunate enough to have resources to put towards this goal, but even smaller companies can take advantage of it, as most conferences will pay speaker expenses. Really what it comes down to is time: companies have to be willing to allow employees a little time off to do something a little different.

Doing something a little different is what keeps your people creative, fresh, and happy. So try it.

January 13, 2014 08:00 AM

January 12, 2014

Alex Schroeder

Good Night, Pyrobombus

I’ve used this Mac Mini since the summer of 2006 on a crappy 1024x768 monitor and loved it. But now Claudia has a PowerBook and Apple doesn’t allow me to run Mac OS 10.9 on this Mini and there seem to be no more security patches. It’s too old. It has become a security risk. This is the machine that made me switch from PCs to Macs. I called it Pyrobombus. Bye bye, Pyrobombus. Perhaps I shall one day install Debian. But right now we just don’t have a need for another computer in the house. Also, the keyboard sucked.


January 12, 2014 05:43 PM

Chase Rule

This post is a translation of the rule presented in German a few weeks ago: 2013-12-23 Verfolgungsjagd. Matt Wagner was wondering about chase rules on Google+.

This rule is part of my German house rules document, Halberds & Helmets. I just can’t remember the weird rule from the Basic D&D and Labyrinth Lord books. Inspired by skills in Apocalypse World I decided to use 2d6 and ideas by Erin Smale he left in a comment on a Google+ post of mine.

Chase: If you’re being chased, roll 2d6. On a 2, you’re surprised. On a 3–6, it’s a fight. On a 7–9, choose two points from the list. On a 10–11 choose one point. One a 12, you made it, no problem.

  • you were separated
  • it takes a long time
  • you got lost
  • you had to drop shields and backpacks

Optional modifiers. +1 for each of the following: if there are twice as many chasing you, if you have a faster movement rate, if there’s a thief in your party, if it rains, if it’s dark. -1 for each of the following: if there’s an elf or a ranger tracking you, if there are wounded party members with you, if there’s snow on the ground.

Only use the modifiers if you remember. :)


January 12, 2014 01:52 PM

Bret Victor

January 11, 2014

Alex Schroeder


My Old School Hex Map Tutorial tells people to use mkhexgrid, if they can. It’s what I’ve been doing for years, now.

On my wife’s laptop we now run Mac 10.9 (“Maverick”) and it no longer builds. As I’ve switched to using Homebrew, I recided to write my own Formula.

If you want to try it, save it as /usr/local/Library/Formula/mkhexgrid.rb and run brew install mkhexgrid. The only tricky thing is that it requires the GD library to be built with FreeType, apparently. If you don’t have GD installed, great. This Formula will do the right thing. If not, you might have to brew uninstall gd before proceeding.

require 'formula'

class Mkhexgrid < Formula
  homepage ''
  url ''
  sha1 '3b8e0be3636f90a3217a5e3556bdaf7bb0c49116'

  depends_on 'gd' => %w{with-freetype}

  def install
    inreplace 'Makefile' do |s|
      s.change_make_var! "DESTDIR", prefix
      s.change_make_var! "CC",
      s.gsub! /install (.*) -o 0 -g 0/, 'install \1'
    inreplace 'mkhexgrid.cpp' do |s|
      s.sub! 'catch (exception &e)', 'catch (std::exception &e)'
    system "make" # needs to be separate
    system "make", "install"

  test do
    # test the example from the man page (but without inches)
    system "mkhexgrid", "--output=ps", "--image-width=2448",
    "--image-height=1584", "--hex-side=36", "--coord-bearing=0",
    "--coord-dist=22", "--coord-size=8", "--grid-thickness=1",
    "--coord-font=Helvetica", "--grid-grain=h", "--grid-start=o",
    "--coord-tilt=-90", "--centered", "-o", ""


January 11, 2014 07:24 PM

January 10, 2014


Degrees of Freedom: Constraints and Creativity

Movement is vital to living systems. Movement allows feedback, which corrects imbalances.

Paradoxically, productive movement is created by constraining movement. Block movement in one direction and it becomes stronger in another direction. Constraints channel movement, creating flow.

Creative constraints (scope, requirements, deadlines, etc.) tend to amplify creativity. Like a beaver’s dam diverting a river, constraints divert creative energy to previously inaccessible places.

We see the interplay between movement and constraint in our bodies. We have soft, flexible flesh which can move in many directions and hard, rigid bones which structure this movement. One or the other on its own would be useless; the interplay creates the versatility.

We also use this principle in design. We constrain the possible movements of an object until the remaining degrees of freedom are the useful ones. For example, the levered doorknob is a single degree of freedom which suggests how to use it. Once turned, this unlocks a new degree of freedom to rotate the door on its hinge. All the other degrees of freedom (lifting the door up, pulling out the doorknob, etc.) have been constrained away, allowing the design of the object to inform its usage.

If we are clever in providing only useful degrees of freedom to channel energy, we can design objects of great versatility. For example, a bike’s handlebars provide a single degree of freedom. This constraint channels the human power via the pedals to create a rich space of mobility.

Stewart Brand explains the spectrum between movement and constraint as the fast and slow parts of a system:

The combination of fast and slow components makes the system resilient, along with the way the differently paced parts affect each other. Fast learns, slow remembers. Fast proposes, slow disposes. Fast is discontinuous, slow is continuous. Fast and small instructs slow and big by accrued innovation and occasional revolution. Slow and big controls small and fast by constraint and constancy. Fast gets all our attention, slow has all the power. All durable dynamic systems have this sort of structure; it is what makes them adaptable and robust.

So how can we use constraints to productively channel our energy? Here are a few ideas:

Use constraints to focus energy. A good example of this is Edward de Bono’s Six Thinking Hats process for structuring a group discussion. He identifies six different modes of thought that people tend to use and makes them explicit (by naming the hat). Each “hat” is then worn in turn by the entire group at once. In this way the group mind is channeled in one direction at a time. Participants amplify each others’ ideas along each of these dimensions as each dimension becomes the group focus.

An intention is a constraint which aligns your thoughts toward a single focus. Think of a well-formed intention like a lens directing the sun’s rays. Like the quality of a lens, the quality of an intention is its form. How well does it direct energies from different directions toward its focus?

A concrete, external representation is the physical analog of an intention. An outline is a constraint on the finished essay, a to-do list is a constraint on the series of actions, a blueprint is a constraint on the final object. We build these representations to fix a big picture, which then lets us concentrate in turn on each detail without the rest of the project slipping away. Representations are useful as individual aids to channel our fluid mind and indispensable for channeling collaborative energy.

Use constraints to create clarity. Often as energies accumulate, they need to be organized into coherent streams. This is like taking a pool of flesh and adding the bones. Often this process takes the form of creating a new vocabulary. By creating a framework of names, ideas are constrained to relate to the vocabulary in explicit ways. Nebulous ideas crystalize onto these names.

Recognize that constraints create freedom. Sometimes we feel like we’re stuck, blocked in by obstacles. But if you’re alive then you have vital energy and it is going somewhere. Often just being aware of this gives you enough leverage to consciously change how your energy is flowing. Recognize that to get around constraints sometimes requires intentionally creating additional constraints to effectively channel your energy.

Recognize that constraints coevolve with movement. As the water flows, it alters the landscape, which in turn changes how the water flows. Sometimes the flow reinforces the constraint, deepening it. Sometimes a constraint outlives its usefulness and the flow erodes it away.

by Toby at January 10, 2014 07:07 PM

Reinventing Business


I visited MakerPlace in San Diego, a converted industrial space with numerous large work areas devoted to different purposes (you can do a virtual walkthrough on the web site). It currently has 350-400 members, each paying $150/month for access to an impressive assortment of machines for fabricating physical objects (you can also pay $45 per day).

My ad-hoc tourguide was grabbed from the available pool of members, and he was just right. He told me that his whole business was run out of MakerPlace (rent and equipment for $150/month, an amazingly good deal). He did custom fabrication for customers, as well as creating his own products -- the first larger-quantity product was being set up for mass-production in China. He said if they had rooms he would live there.

The work areas are divided by function: metal working, wood working, fabric, painting, electronics, 3D printers, laser cutters, general work space, a classroom. A number of the machines are computer controlled. The trickier/more dangerous machines require classes before you could use them, and there are additional classes available on a various assortment of topics.

I was there at 11am on a Tuesday and the place was humming. I would imagine weekends might get quite crowded. A woman was there signing her kids up for a class, and at other hackerspaces I've seen that classes for kids seem quite popular (I certainly would have liked such a thing as a kid).

As costs have gone up in Crested Butte, I've seen a number of operations begin to share space & equipment, out of necessity to make existing businesses practical. Hackerspaces go at it from the other end: putting space and tools in the hands of people who might end up creating businesses, given the opportunity.

by (Bruce Eckel) at January 10, 2014 05:38 PM

January 09, 2014

Lambda the Ultimate

Multiple Dispatch as Dispatch on Tuples

Multiple Dispatch as Dispatch on Tuples, by Gary T. Leavens and Todd D. Millstein:

Many popular object-oriented programming languages, such as C++, Smalltalk-80, Java, and Eiffel, do not support multiple dispatch. Yet without multiple dispatch, programmers find it difficult to express binary methods and design patterns such as the "visitor" pattern. We describe a new, simple, and orthogonal way to add multimethods to single-dispatch object-oriented languages, without affecting existing code. The new mechanism also clarifies many differences between single and multiple dispatch.

Multimethods and multiple dispatch has been discussed numerous times here on LtU. While the theory has been fully fleshed out to the point of supporting full-fledged type systems for multiple dispatch, there has always remained a conceptual disconnect between multimethods and the OO model, namely that methods are supposed to be messages sends to objects with privileged access to that object's internal state. Multimethods would seem to violate encapsulation inherent to objects, and don't fit with the conceptual messaging model.

This paper goes some way to solving that disconnect, as multiple dispatch is simply single dispatch on a distinct, primitive class type which is predicated on N other class types and thus supporting N-ary dispatch. This multiple dispatch support can also be retrofitted to an existing single-dispatch languages without violating its existing dispatch model.

January 09, 2014 02:10 PM

January 08, 2014

Giles Bowkett

The Obvious Isn't Distributed Evenly Either

Disclaimer: I own a tiny quantity of Bitcoin. This is not investment advice. I do not have the power to see the future before it happens.

Bitcoin's been around for years. I built an hourly exchange rate updater for it in 2011, while having a conversation with a bunch of people at a JavaScript meetup at the Farmhouse. I think I had been persuaded to buy some Bitcoins a year or two earlier, in the same house, at a Ruby meetup where we paid for a pizza using Stripe and an iPhone. I think most people had paid by swiping their card, while somebody else offered to chip in a Bitcoin, and the conversation went on from there, but I don't really remember, because it was so long ago. And that's the point. In Internet years, Bitcoin's already ancient.

However, despite Bitcoin's relative antiquity, it's only seen a lot of discussion in Rubyist "thought leader" circles quite recently, thanks mainly to its recent surges and plummets in price (which have been its largest so far, but by no means atypical). Alex Payne contributed some well-intentioned but sadly irrelevant and intellectually dishonest criticism, which aimed for political significance, and certainly raised valid concerns, but in my opinion amounted to little more than a former banking CTO announcing a personal change in the direction of his own life. People I respect had praise for this blog post, but personally, it just reminded me of the people in 1994 who told me the Web was just a fad and AOL was the future of the Internet.

Anyway, Steve Klabnik also wrote some wonderful rambling nonsense about how great Dogecoin is. But the best remark, in my opinion, came in the form of a joking tweet from Phil Hagelberg. Take a second and THINK ABOUT WHAT THIS ACTUALLY MEANS:

Pretty sure the answer's no, but you could build that site today.

Update: that site now exists.

Here's why this matters.

Historically, the American people have had at least nominal control over financial policy, but that era's basically over. On the one hand, the Federal Reserve doesn't answer to the people at all, and on the other hand, government doesn't really control money any more anyway.

Control over money was a government privilege for a very long time, but Visa, MasterCard, and a few other corporations have basically built a private, corporate, money-like system on top of money itself, which these corporations own, control, and sometimes illegally misuse to further their own political agendas. Visa et al have used the classic Microsoft "embrace and extinguish" strategy to mostly replace cash with their own private infrastructure. (The "mostly" part is what that classic William Gibson quote really means.) Simultaneously, investment banks have used international currency trading to turn money from a bastion of governmental authority into a commodity like any other, thereby shifting power from governments to markets. On top of all that, it isn't really about the money supply any more, it's about the credit "supply," and the people who control that can basically use their control to extort governments.

The major dilemma in American politics is that we have excellent protections (at least on paper) against abuses of governmental power, and far weaker protections against abuses of corporate power. There's a danger there for the 99%, because in America, monetary policy has become something so similar to privatized that you need a constitutional lawyer, an economics professor, and an electron microscope to spot the difference.

Venture capitalists are undoubtedly going to build new corporations around Bitcoin and cryptocurrencies in general, but most people over-estimate the importance of venture capital in this equation. For one thing, Coinbase's use of Mongo DB makes me think they're trying to crowdsource eventual consistency by having their customers email them a screenshot of every transaction. More importantly, cryptocurrencies are fundamentally peer-to-peer and open source. They're not creating new proprietary tech, like old-school venture capital projects in the 1980s. Like many things venture capital does today, they're really just trying to capture and control the wealth generated by programmers sharing code for free, or at most add value on top.

In political terms, that makes Bitcoin far less a tool of corporate control than Visa, MasterCard, Wall Street, and the Federal Reserve combined.

If you can't see how open source, peer-to-peer currency can be revolutionary, you need to read Marshall McLuhan, Bruce Sterling, and William Gibson. Catch up with the 1970s and 1980s, in other words. For bonus points, read Here Comes Everybody, by Clay Shirky, and catch up with 2009 as well. (And it's kind of a joke if you're talking about Dogecoin but you've never read Down And Out In The Magic Kingdom.)

TLDR: Peer-to-peer and open source technologies give power to networks of people -- whether large or small, whether public or private -- without corporate or governmental control. That's what puts the punk in cyberpunk. To quote Bruce Sterling:

Bruce Sterling: Cyberpunks have been cyber for decades now. Our society is pretty much cyber-everything, nowadays. Some aspects of it are even post-cyber. That's okay, you get used to that process. "Normality" comes and goes for a sci-fi writer, but "eerie" you always have with you...

What film best represents your vision of a cyberpunk or high-tech dystopian future?

Bruce Sterling: As for the "cyberpunk" part, forget about "the movies." Abstract motion-graphics coded in Processing and posted on Vimeo, that's "cyberpunk." You don't wanna make movies that are about guys with computers. You want to use digital composition to seize control of the means of producing cinema. And then do it all yourself! That's "punk." Hollywood product is commerce, it's about fanboy culture.

While it's certainly very likely that monied elites will find ways to survive and even profit from this radical transformation, if it indeed goes forward, Bitcoin's designed to build an economy where we don't need governments and we don't need corporations. If you hope to do anything more punk rock than that, ever in your life, good fucking luck. Of course, the question of whether Bitcoin succeeds in practice is different from the question of what potential Bitcoin has in theory. However, at least in theory, Bitcoin attacks the two biggest necessary evils of economics and takes the "necessary" part out of the equation in either case.

And since it's open source, any corporate or governmental system set up to control it is inherently optional. Any group can fork an existing currency and create their own economy. Any ethnic group, any subculture, any open source community, yes, but note that I didn't even say "any group of people." Cryptocurrencies offer similar options to, for instance, any group of pieces of software. If you want to leverage the chaotic nature of market economies to manage some computational resource, you can. The bad news: chaotic systems are chaotic. But the good news is that the foundation for your software already exists, and will cost you nothing.

I'm not even saying all of this is good. I'm saying it's all a big deal. The question with Bitcoin is not "is this a VC fantasy or a way to make money?" The question with Bitcoin is "is this merely a way to make money, or will this become a bigger deal than the invention of the Web?"

If you enjoyed reading this, I am extremely happy to accept tips via Bitcoin (167E9cAhbsyMo2RNm1xUwSy8LseMnPct8M) or Dogecoin (DDG4FJFin5Sap4e872LWamvxWUcbMnoFte). And keep in mind how easy it would be to tip me, or anyone, if these addresses were not text to copy and paste, but <a href="btc://167E9cAhbsyMo2RNm1xUwSy8LseMnPct8M"> links to click instead.

by Giles Bowkett ( at January 08, 2014 01:57 PM


Mechanics of FLUXBABBITT.

The public discovery of FLUXBABBITT, a modestly-clever American spy gadget – that may or may not have been “fired in anger” yet – has provoked the usual flood of media garbage (“JTAG is a Chinese back door! Threat or menace?”) What follows is some basic investigation regarding the plausible workings of this device, based only on:

  • The leaked document itself.
  • A friend’s disassembled “Dell PowerEdge,” of several years’ vintage.
  • Intel’s published documentation for their “XDP” port.

Here is the port in question:

XDP socket in Dell PowerEdge - Depopulated.

XDP socket in Dell PowerEdge - Depopulated.

If you doubt your lying eyes, run – not walk – to your server closet and pop a Dell machine of recent manufacture. Remove the cooling duct cover. Look near the rear or front-most edge of the motherboard. You will find a similar picture.

But, threat or menace? Let’s find out; straight from the horse’s mouth:

3.10 Depopulating XDP for Production Units

At some point there may be a desire to remove the debug port from production units. It is recommended that the port real-estate and pads remain in place if they need to be populated for a future problem. Depopulate all physical devices (connector, termination resistors, jumpers) except: Termination of OBSFN_x[0:1] / BPM[4:5]# / PREQ#, PRDY#; Termination of TCK; Termination of TDI; Termination of TMS; Termination of TRSTn.

Intel Corp., “Debug Port Design Guide for UP/DP Systems.” p. 24.

Not exactly a bog-standard JTAG port (there is, in fact no particular standard for the socket, really; only for the bottom layer of the protocol) – from here you can access CPU registers, view and edit the contents of memory, issue bus read/write cycles, etc. AMD includes a similar (though incompatible) port in some of its products.

Presumably, FLUXBABBIT injects a little bit of nasty directly into RAM at boot time – quite like a traditional MBR infector. The somewhat-exotic delivery mechanism is there to counter a possible audit of the system firmware. (Why this audit would not be expected to include a basic physical inspection of the machine’s internals is a question that should be asked of our dear friends at Ft. Meade, not me.)

JTAG and other debug connectors are routinely found in mass-market products. The manufacturer often succumbs to the temptation of shaving a few pennies of unit cost by omitting the actual connector. This is what the leaked document refers to as “depopulated” (in fact, a standard term-of-art in electronics manufacture.)

The only thing even vaguely suspicious about Dell’s particular phantom debug port is: the pre-tinned solder pads. This could, however, be a mere artifact of the plating process undergone by the motherboard, rather than a deliberate helping hand for our favourite intelligence agency. (Attaching the missing connector would take all of five minutes for a fellow with a steady hand, a solder paste stencil, and a hot air machine – with or without pre-tinned pads.)

And regarding the doings of spies in general: there is really no limit as to what can be done to a physically-molested computer. Focusing on this particular feature is just the kind of tunnel-vision typical of the Computer Insecurity community.

If you’re wondering why there is no FLUXBABBIT in your own Dell, take comfort: the product is almost certainly obsolete. That is, rendered obsolete by “pwning” at design time. Physical molestation is reserved for archaic or otherwise uncooperative machinery.

by Stanislav at January 08, 2014 02:21 AM

January 07, 2014

Terry Jones

Learning jQuery Deferreds published

learning-jQuery-deferredsNicholas Tollervey and I have written a book, Learning jQuery Deferreds, published by O’Reilly.

If you’ve been a reader of this blog over the years, you may have noticed that I’m very fond of deferreds (also known as promises or futures). I’ve mainly been using them in Python with Twisted, and a couple of years ago was happy to notice that jQuery also has a (somewhat different) version of deferreds. Asking around, it soon became clear that although there are tens of millions of programmers who’ve used jQuery, very few of them have ever used deferreds. E.g., at the jQuery conference in San Francisco in 2012, only about 25% of the audience in a talk on deferreds. There are about 19,000 results for “deferred” on StackOverflow.

This seemed like a perfect storm: a fantastically cool and empowering technology that I love thinking and writing about, built in to a ubiquitous web library, in use by millions of programmers, and yet somehow not widely known or used.

The book tries to really teach deferreds. There are 18 real-life examples, along with 75 challenges (and solutions). We’ve tried to get readers into deferreds the way we are, to be provocative, to try and get you thinking and scratching your head. To get you to see how cool and elegant working with deferreds can be. In short, to make you one of us.

Although the book focusses on jQuery’s flavor of deferreds, we wrote it with a much broader aim: to be just as useful to people working with any flavor of deferreds in any language. The concepts behind deferreds are few and simple. Even if you’re not a jQuery user or a JavaScript programmer, we hope you’ll enjoy and benefit from the book.

If you’re curious, the animal on the cover is a musky rat-kangaroo. O’Reilly chose it for us. When I first saw it, I mailed them and Nicholas to say it looked “overfed, passive, and thoughtful” to which Nicholas replied that it resembled me. The O’Reilly toolchain is modern and fun, employing AsciiDoc and a shared Git repo. We wrote 30,817 words and 2,301 lines of Javascript. There’s a source code repo for all the book examples, at We spent six months on the book, during which I usually spent 1-2 days a week on it. It was a blast to write.

If you’d like to buy a copy, use AUTHD as a discount code on the O’Reilly site and you’ll receive 40% off the print or 50% off the e-book. Please let me know what you think, and/or leave a review on the O’Reilly (or Amazon) site. Have fun, and thanks!

by terry at January 07, 2014 09:24 PM

Lambda the Ultimate

Oral History of Adele Goldberg

Interesting and wide-ranging interview with Adele Goldberg from Computer History
Transcript and Video at Computer History Also on YouTube

Adele Goldberg reflects on her life and career from her early days at the University of Chicago and Stanford University through her career at Xerox Palo Alto Research Center (PARC) and ParcPlace Systems.

Another Oral History interview with her by IEEE Global History Network

Goldberg discusses her educational and work history. She recalls her experiences as a student at the University of Michigan and at the University of Chicago. Next, she covers her stretch at Xeorx PARC, sharing her views on the work environment. Here she speaks at length about her work on Smalltalk, including her leading role in its commercialization. Goldberg is candid about the challenges she faced in forming and running spin-out company ParcPlace Systems. In addition, she discusses her two-year tenure as President of ACM. Finally, Goldberg offers advice for young women who are considering a career in computing.

January 07, 2014 06:36 PM


I haven't seen this discussed here yet:

It is an HTML5-based puzzle game engine that uses a simple language for patterns and substitutions to describe game rules. For example (taken from their introduction), the basic block-pushing logic of a Sokoban game can be given as:

[ > Player | Crate ] -> [ > Player | > Crate ]

This line says that when the engine sees the pattern to the left of ->, it should replace it with the pattern on the right. In this case, the rule can be read as something like: when there is a row or column ([]) that contains a player object (Player) next to (|) a crate object (Crate), and the player is trying to move toward the crate (>), then (->) make the crate move in the same direction.

Rules are matched and applied iteratively at each step (i.e., when the player acts), until there are no more matches, and then movement takes place. There are mechanisms for influencing the order in which rules are run, and for forcing subsets of the rules to be iterated. By default, rules apply to both rows and columns, but horizontal- or vertical-only rules can be created.

It is an interesting example of a very narrowly-focused DSL, based on a (relatively) uncommon model of computation. It's also very fun to play with!

January 07, 2014 04:38 PM

Dave Winer

Greenwald clarifies, I screwed up

First, I am sorry for posting this tweet. I screwed up. In the tweet, I said that the only thing transparent about Glenn Greenwald is his stonewalling. The article which I was linking to, on the New York Magazine website, provided quotes from a Greenwald piece, without reporting the substance. In the piece they were citing, Greenwald answered the most important question I had been calling on him to answer. I had not read the Greenwald piece when I wrote that tweet. That was a mistake.

In his post, he said, unequivocally, that he owns no stock in either of the Omidyar ventures, one which is a non-profit for journalism and the other a for-profit tech company. Not that there would be anything wrong with owning stock, but it is something that needed disclosure, something that I have explained over and over in a series of posts late last year, none of which got this response from Greenwald or any of the other principals in the new company.

There are still other issues. Why the delay in saying he had no stock? And by item #4 in the Greenwald post, we're back to the normal Greenwald approach, over-stating his critics' concerns. At best, this is his lawyerly alter-ego popping up. At worst it makes me think he's still hiding important stuff. Not everyone is out to get him. I was a Greenwald defender and fan until I was introduced to Greenwald the Stone Wall.

An important point, the Snowden documents don't belong to him or the Omidyar ventures. They don't belong to Snowden. They belong to the people of the United States. We have a huge stake in what's done with them. In normal times we'd trust the government to look out for the people's interest, but this is about the government abusing that trust. Greenwald is dancing with high charge explosives. We deserve his full devotion to this story. Why is now a good time for him to be involved in a startup? Why not wait until the Snowden disclosures are complete? Or if he must be involved in a startup, which I know from experience is a hugely time-consuming thing, why not pass the torch to another reporter, or group of reporters? Greenwald's newest head-fake is that we're asking for a complete and immediate dump of the documents. I'm not asking for that! I don't know anyone else who is. What I do want to see is an honest, fair, complete, expedient and urgent disclosure of that information, with the minimum of bullshit. Perhaps he should start a new venture just to disclose the information in those documents. These are the questions behind the questions about Greenwald's ownership position in the Omidyar companies.

Transparency is not easy, but when you are occupying a seat of historic importance, with our future at stake, we insist that you take that responsibility seriously. And saying you are, when your actions don't indicate that you are, is not a good answer.

January 07, 2014 02:25 PM


Cardano Prototype Tidbits: TRNG Boards.

Cardano is a joint project of yours truly and Mircea Popescu. The objective: an inexpensive, user-auditable gadget which attempts to deal with the problem discussed in “Don’t Blame the Mice.” Refer to Mr. Popescu’s page for more details.

The device consists of a mainboard (not yet complete) to which two TRNG modules, containing two equivalent analog TRNG circuits (outputs subsequently XOR-ed) each, are connected. (First prototype of this type of TRNG is shown here. It contained one circuit of the kind used in the current version. Statistical analysis of the output for that unit can be seen here.) The design of this and other Cardano components will be documented in excruciating detail and published after the product goes on sale.

Some prototype tidbits! Click on the images to enlarge:

SMT reflow using an ordinary Electric Hob.

SMT reflow using solder paste on an ordinary Electric Hob.

Five units, complete except for header and shield anchor. Ready for Bed of Nails test rig.

Five units, complete except for header and shield anchor. Ready for Bed of Nails test rig.

Inspection under Microscope (actually a very spiffy stereo scope, but naturally you cant see this here.)

Inspection under Microscope (actually a very spiffy stereo scope, but naturally you can't see this here.)

by Stanislav at January 07, 2014 02:48 AM

Dave Winer

If you say it in public, it's quotable

If I tweet that my butt hurts, and some company thinks that helps them sell their product, they can say "Dave Winer says his butt hurts," and on what grounds could I object?

If someone says something, and someone else says they said it, I'm sorry but you don't have any recourse, if you're the Pope, the President or nobody in particular.

I think we cross a line on Facebook however, when they imply that someone likes a product because they clicked on Like in relation to it. We all know, including the people at Facebook, that there are many other reasons to click Like even if "Like!" isn't what you had in mind. They're being hypocritical and expedient by equating the two, and earning negative goodwill, that may well haunt Mr. Zuckerberg in the afterlife. :-)

And, if a NY Times movie critic says he likes the music of Llewyn Davis on Twitter, the movie company can say he said so.

And it's ridiculous to think that Twitter, a company, for crying out loud, has any standing here! They can put whatever they want in their Terms of Service, this is speech. They don't get to make rules about speech that happens outside their network.

I don't think I'm out on a limb here at all. I'm not a lawyer, but I think I understand the basic rules about speech.

January 07, 2014 12:02 AM

January 06, 2014

Reinventing Business

Zappos Revisited + Holacracy

Brad and I met at Pomona College; he's been the city attorney for Las Vegas for over a decade. They recently moved into a new city hall, and the old one was taken over by Zappos. When I visited them in 2011, Zappos was located in a business park in Henderson, NV, which was kind of a boring neighborhood. Tony Hsieh wanted to be in the midst of the excitement of the city, and the vacated city hall was an ideal choice. In addition, Tony has been doing his own version of downtown redevelopment, buying up buildings and repurposing them, often for the use of Zappos employees but also for general public use. It's a rather grand experiment which I am avidly following.

When I was passing through Las Vegas last week, Zappos had not yet started holding public tours, but Brad knew someone and was able to arrange a private tour for myself and several city employees. So there was a lot of commenting about where offices used to be and how things had changed and how creatively the space had been used. In the short time Zappos had occupied the building they had personalized it, even though they just had their largest holiday season ever.

Although it's an "open plan" (semi-cubicle working spaces, although there are few, if any, cubicle walls) the new space has one meeting room for every 12 people, so it's not hard to find a sequestered space if you need it. Each meeting room has an electronic pad outside to indicate the reservation schedule, and if a room is available you can reserve it on the spot. Thus people can easily wander around until they find a vacant room -- much better than relying on a central authority person.

When I wrote about my previous visit to Zappos, I rather jokingly referred to it as a cult, not because people were brainwashed but because they loved working there so much (something you almost never see in traditional jobs). This happens because of their selection process -- unlike the unnamed company I visited who thought they could "design" their culture as an afterthought, Zappos understands that the culture is already there, in the people you hire, and so they spend a lot of time and energy seeking that fit. As a result, changing locations (which is often very disruptive for a company) has gone incredibly smoothly.

The biggest news is the story that surfaced just days before my visit: Zappos is transitioning the entire company to Holacracy! (There's a decent overview here). Our guide had been on one of the test teams for the 6-month trial and he said it had gone extremely well, so they've decided to make the leap. This will be the largest company so far that has made the shift, and will no doubt be a flagship example for Holacracy. I think the chances of success at Zappos are quite good because the culture is already partway there -- the structure is relatively flat, and the hiring process has drawn people who are experimental and group-oriented. If it does work, Holacracy will go from being some wierd idealistic system (one guy in our group was quizzing me skeptically, wondering how anything could possibly get done; and business pundits are already declaring it will fail without knowing anything about it other than that it's flat and has no titles, or apparently knowing that they did a six-month trial) to "the system that Zappos uses." This will mean a big leap forward in the acceptability of Holacracy, and could be the beginning of some fundamental changes. I will look forward to visiting again and seeing how the transition is going.

by (Bruce Eckel) at January 06, 2014 08:08 PM

Giles Bowkett


Rich Hickey presented Harmonikit at the 2013 Clojure conj. Here's the code, and here's the hour-long video (embedding disabled, because apparently ClojureTV hates the Web or something?).

Harmonikit's an additive synthesizer built in Clojure on top of Overtone. Harmonikit gives you additive synthesis and uses core.async for control. Hickey says in the presentation that core.async proved "a fantastic fit" for handling MIDI and OSC.

Although Hickey calls Overtone "awesome" in the video, Harmonikit departs from the emacs-centric Overtone style. Hickey says, "emacs is one of the last things you want to have around when you're making music. You need emacs for making music like you need it for having sex." (To prevent any confusion, he clarifies that this means you don't need emacs at all in either of these contexts.) So although Overtone gets well-deserved praise, and plays an important role in the design, overall, Harmonikit represents a different direction.

If you're not well-versed in synthesis paradigms, the additive synthesis which Harmonikit implements is relatively obscure. You can find it in NI Razor or the very classic, very old-school Hammond Organ. Subtractive synthesis is the dominant paradigm, and frequency modulation is a more popular alternative than additive synthesis. Where subtractive synthesis uses filters to carve out interesting sounds from fundamental waveforms like the sine or the square, additive synthesis piles on many many waveforms to create complex aggregate waveforms similar to those generated by pre-electronic instruments. This gives additive synthesis an advantage in terms of harmonic complexity, but a corresponding disadvantage in terms of programming complexity.

I haven't played with it yet, but I'm guessing that using the library to its full effectiveness would probably require skill with, and a full understanding of, synthesizer programming. The video's fun to watch; Hickey demonstrates controlling Harmonikit with a QuNexus keyboard and the Lemur app running on an iPad. The Lemur UI comes off as both complex and intuitive.

by Giles Bowkett ( at January 06, 2014 07:18 AM

Tim Ferriss

Ten Popular Diets — Which Work and Which Are Hype?

100+ pounds lost on The Slow-Carb Diet®.

If you want to lose fat in 2014, how about we do it together?  I need to work off some Danish butter cookies.

Last year, the Lift team helped me test The Slow-Carb Diet® with 3,500 readers.  The result: 84% of people lost weight and the average weight loss was 8.6 pounds over four weeks.  Many people lost more than 20 pounds.  This didn’t surprise me, given the case studies of people who’ve lost 100+ pounds.

Working alongside UC Berkeley, Lift is now launching the largest study of popular diets ever performed.  You can choose from 10 different diets (Paleo, vegetarian, gluten-free, etc.), and the study includes control groups and a randomized trial.  The Slow-Carb Diet is one option.

I will be participating, cheering you on…and advising.  Here’s what you should do today:

  1. Download the Lift app for goal tracking and motivation. Lift now has Android and web versions, along with the original iPhone version.
  2. Visit the Quantified Diet homepage to choose your diet, or to be randomly assigned to one.
  3. If you choose the Slow-Carb Diet, join the community at 4HBTalk or Reddit for support.  I will pop in every once in a while to check things out.  I’ll be following the diet with you, in addition to using biochemical cocktails I’ll share later.
  4. If you want the full monty, get The 4-Hour Body.  You can lose a ton of weight without it, but the details in the book will prevent you from stalling and make everything faster.

For more background on this study, I asked Tony Stubblebine, CEO of Lift, to tell the story.  Here it is!  It’s a quick read, and I suggest it…

Enter Tony

A year ago, we ran 3,500 readers of Tim’s blog through a four-week study of the Slow-Carb Diet, tracking their progress through Lift.

The results were amazing: 84% of people who stuck to the diet lost weight and the average weight loss was 8.6 pounds over four weeks.  Those stats are crazy, right? Some people lose 100+ lbs going Slow-Carb, but I never dreamed that people’s success rate would be so consistent.

After seeing the results, I wondered whether people fail to adopt healthy habits due to lack of independently testing.  Getting people to change isn’t just about giving good advice; it’s also about giving them confidence in the advice. Our study showed that Slow-Carb definitely works. But what about the rest of the diet world?

As soon as we published the Slow-Carb Diet results, a young researcher at UC Berkeley reached out.  The proposal: that we turn the Slow-Carb Diet study into a full blown scientific research project, or, as he coined it, “The Manhattan Project of diet research.”

Tim is unique, in that he had the vision and the guts to put his diet to the test. Very few (probably zero) other diet authors have tried this.  What if we could replicate this on an epic scale with other approaches?  Real objective data?

Unfortunately, academia doesn’t move fast enough to keep up with popular diets. By the time a study comes out, we’ve all moved on to the next thing. The research that we did on The 4-Hour Body was pioneering in its speed. Tim and I conceived the study in October, ran it in November, and published the results in December.

Taking that rapid, crowd-sourced approach to diet experimentation would be like dropping a nuclear bomb on the existing diet industry. This sort of research could completely change our notion of what works…and for whom.

Our UC Berkeley advisors had just one concern: we had to get more rigorous about our experimental design.

This second study, which we’re calling The Quantified Diet Project, includes a comparison of ten different approaches to healthy diet, a control group, and another group going through a randomized trial.

With your help, we can start getting scientifically-valid measurements for all popular diet advice.  What works and what doesn’t?  The results might surprise you.

When you join, you’ll be presented with ten approaches to healthy diet, along with two control groups. All of these approaches have been vetted for healthiness, but you’ll have a chance to opt out of any that don’t fit your lifestyle.

And, of course, if you are a strong believer in The Slow-Carb Diet, you can go straight to that option (Slow-Carb obviously works).

This is a chance to lose weight, increase your health, boost your energy, and make a real contribution to science.  Join the Quantified Diet Study today!  It could change your life and change how scientific studies are performed.  Win-win.

Here’s to an incredible 2014, starting now,

- Tony Stubblebine
CEO & Co-founder the Lift app
Advice, motivation, and tracking for more than 100,000 goals.

by Tony Stubblebine at January 06, 2014 06:52 AM

Bret Victor

January 05, 2014



By now, I imagine everyone with the slightest inkling of an interest in electronics has seen this scandalous tidbit:

The widget in question, two variants.

The widget in question, two variants.

To anyone who has received this generous gift from his Government, I offer:

4 Bitcoin for either of the above, in working condition. 1 Bitcoin for a dead or untestable unit.

Serious inquiries only! Please attach two high-res photographs of your unit; one where it sits in its socket, and another, sitting on a white sheet of paper.

by Stanislav at January 05, 2014 05:53 PM

Lambda the Ultimate

Backpack: Retrofitting Haskell with a Module System, at last

Backpack: Retrofitting Haskell with Interfaces
Scott Kilpatrick, Derek Dreyer, Simon Peyton Jones, Simon Marlow

Module systems like that of Haskell permit only a weak form of modularity in which module implementations directly depend on other implementations and must be processed in dependency order. Module systems like that of ML, on the other hand, permit a stronger form of modularity in which explicit interfaces express assumptions about dependencies, and each module can be typechecked and reasoned about independently.

In this paper, we present Backpack, a new language for building separately-typecheckable packages on top of a weak module system like Haskell's. The design of Backpack is inspired by the MixML module calculus of Rossberg and Dreyer, but differs significantly in detail. Like MixML, Backpack supports explicit interfaces and recursive linking. Unlike MixML, Backpack supports a more flexible applicative semantics of instantiation. Moreover, its design is motivated less by foundational concerns and more by the practical concern of integration into Haskell, which has led us to advocate simplicity—in both the syntax and semantics of Backpack—over raw expressive power. The semantics of Backpack packages is defined by elaboration to sets of Haskell modules and binary interface files, thus showing how Backpack maintains interoperability with Haskell while extending it with separate typechecking. Lastly, although Backpack is geared toward integration into Haskell, its design and semantics are largely agnostic with respect to the details of the underlying core language.

January 05, 2014 04:59 PM

Alex Schroeder

OSX Maverick and Apache

A bookmark for myself regarding Apache. The important part is this:

OS X comes with Apache already installed, so it’s as simple as starting up the server. Previously, you could start this using the System Preferences > Sharing panel, but it has been removed from there in 10.9. – OS X Mavericks and Apache

It tells you how to start Apache from the command line. The important part was how to make sure that it gets started when the machine is booted, though:

sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist


January 05, 2014 01:16 PM

Giles Bowkett

Dave Winer

Burning brain cells

Software burns brain cells when it does something different from what you expected, and before you realize your thoughts are going the wrong way, you go too far, and going back hurts your head.

The pain comes from brain cells that are committing suicide because they're so frustrated, all they can think to do is end it all.

It's like lurching at the end of a rope when it breaks while you're playing tug of war, except it turns out it wasn't a rope at all, it was a bar fight.

Using a computer always puts you at the edge of a haze, managing more complexity than your poor brain can handle. An overload caused by a misdirection == burning brain cells.

Nothing new. Software has been doing it since Day One, I'm sure. I mention it because it happens all the time on Facebook. You're reading a message from a friend and then your brain slams shut because it realizes it's actually an ad!

It's good I suppose for the advertiser and Facebook, but it's not good for my poor brain. Or yours either. And maybe ultimately it'll be bad for Zuck when we all get to the afterlife and get to tell him what we think about it. ;-)

Thanks for listening.

January 05, 2014 12:01 AM

January 04, 2014

Alex Schroeder

The Walrus and the Warwolf

These days I read a lot less books than I used to. I read too much blogs on the topic of role-playing games, too much time spent on Google+, also on the topic of role-playing games, I skim this role-playing book and that PDF, and since I’m mostly interested in the Old School Renaissance of role-playing games—namely D&D from the nineteen eighties—I also feel like I ought to like the books recommended by one of the founding fathers of D&D, Gary Gygax in his Appendix N of the AD&D Dungeon Master’s Guide. If you’re interested, you should check out the articles in Martin Ralya’s blog tagged Reading Appendix N.

These books are weird. Compared with the The Lord of the Rings, The Wheel of Time, A Song of Ice and Fire or Malazan Book of the Fallen, these older books are short. There are sometimes short stories, collection of short stories, novellas, or little paperback books. All of Robert E. Howard’s Conan the Barbarian fit into two books of typical size for these fantasy series.

A while back, I remembered how eagerly I read all those Darkover books by Marion Zimmer Bradley and I decided to find them all second hand, in German, on Amazon, and buy them for Claudia. Every now and the she reads one of them, interspersed with some Steven Erickson and George R. R. Martin. We start talking and comparing. There are two aspects I like about these books:

  1. each book stands on its own
  2. each book only has a single plot line

Tolkien may have started this dreadful fashion of telling multiple stories at once. But in his case, at least each segment was long, very long. When I read George R. R. Martin, I feel like the author is suffering from Attention Deficit Disorder. Is every little segment ending on a cliff hanger? When I start noticing the literary devices, when I start to see the man behind the curtain, it doesn’t really work anymore. It starts to bore me. I start noticing that—like in Zeno’s paradox about Achilles being unable to overtake the turtle—as the number of segments increase, the time slot available decreases. As more stories are told in parallel, less actually happens. Plot is reduced to flashes and still images.

I am exaggerating, of course. In comparison with older books, however, I start to appreciate a tight plot, a unified vision, a drive forward. All the Conan stories stand on their own. They can be arranged in some sort of chronological order, but that’s not the important part. Similarly, the Darkover books can be read in any order. You get the occasional reward for regular readers. Older stories are referred to, but understanding this is strictly optional.

I was once again reminded of this when I read The Walrus and the Warwolf. It was published in Paizo’s Planet Stories line (now discontinued). I liked it very much. The book itself wasn’t short, but the chapters were short. The characterizations were short. Things happened. I felt that it incorporated not the best of literature, of language, of fancy words and synonyms and antonyms but it incorporated what is best in story telling. Keeping things short. Just enough words to let the reader’s imagination embellish it all without ever taking too long to read.

I’m hoping that I’ll like the other volumes in Hugh Cook’s Chronicles of an Age of Darkness series. I’ve ordered many of the volumes second hand, via Amazon. I also ordered the four books that got translated into German. Perhaps Claudia will enjoy them as well.


January 04, 2014 11:06 PM

Dave Winer

The shadow of 157 W 57th St

I went for a walk, of course, in the fantastic cold and brilliantly clear post-snow Central Park today. Here's a picture that gives you an idea of the glory of the day.

Now here's a contrasting picture, of a popular sledding hill, in the shadow of 157 W 57th St, the first of the new skyscrapers to go up on the south end of the park.

You can see how dramatic the difference is on a sunny day.

This shadow is emerging as a political issue in NYC.

January 04, 2014 05:11 PM

&quot;Content&quot; is here to stay

I read Tim Bray's piece about the word content, and I agree. It betrays a point of view. If you're a writer, and someone refers to your work as "content" -- well that's like telling a painter his work is wall-covering. Yes technically, it's accurate -- your painting does cover the wall, Mr Rembrandt and Ms O'Keeffe. But there's also the inspiration. The joy. The dread, the lessons learned, the life lived, the gains and losses. The feeling. All that can be used to cover a wall, or provide a surface for ads to run. But calling it wall-covering doesn't capture its fullness.

Yet there are times when you have to think of a painting as wall-covering -- if you're implementing a wall management system, and you need to account for people hanging all kinds of content on it, paintings, frescoes, posters, quilts, light -- incandescent and candles. Even chairs are wall-covering of a sort. Chandeliers, while they don't hang on a wall do provide light. Viewed that way all art is a wall-covering. It's the engineering view, while it does subtract the art from the art, it's a valid and useful point of view too.

I've spent a good part of my career working on Content Management software, and I'm also a writer, so I see it from both sides. Should I say the C in CMS stands for Creativity? Does that help you understand what it does, or make writers feel better for producing fungible slurry of ad-supporting letters, numbers and punctuation? It doesn't mean a thing to this writer.

There is lots of duality in human language. There's the mother who is also a sister and a daughter. A car that is both a method of transportation and a source of revenue for mechanics and car dealers.

So in some contexts, my writing is art. And in others, it's content.

January 04, 2014 02:42 PM

January 02, 2014

Alex Schroeder

Bryce Likes My Adventure

About two months ago, I submitted an adventure to Bryce Lynch’s Adventure Design Contest. And the results are in!

Bryce has nothing but kind words for my submission as far as I can tell:

This one page adventure packs the full punch that one would expect from Alex. Great NPC’s, great little encounters, all delivered in the “expanded crib notes” format that a one-page dungeon provides for. Good outline of a good adventure.
– Bryce Lynch, Contest Winners! Bryce’s 2013 Adventure Design Contest is OVER!

I’m particularly proud of the way I tried to make every word count. I wanted to keep things short and I think I succeeded when Bryce writes “Alex has a knack for coming up with exactly the right words to use to bring a maximum amount of flavor in a minimal number of words”. Yay!

Bryce also points out the major weakness of my submission: it’s very linear. I stripped some items from my original notes: two more NPCs from Uncaged: Faces of Sigil, a false lead to Hopeless, the Gatetown to the Grey Waste, … but even if I had made it a two page adventure, it wouldn’t have changed a thing because this adventure is “essentially, just the notes that many DM’s will write up before an adventure. A rough outline.”

If you ever use it, let me know. I’d love to hear about it!

Unfortunately the contest dropped off the radar pretty quickly. There weren’t too many entries, as far as I can tell. I had the same problem with the One Page Dungeon Contest in recent years. I don’t know what to do about it. When I keep blowing that trumpet, it feels like spam.

See how I subtly provided myself with the opportunity to repeat something that has been on my mind, lately? I’m not planning on running the One Page Dungeon Contest 2014. I’m looking for somebody to take over. Interested? Let me know!

I should ask Bryce to just run the 1PDC and skip the sponsors and prizes.

Update: Random Wizard has offered to run the One Page Dungeon Contest 2014!


January 02, 2014 11:06 PM

Greg Linden

Quick links

What caught my attention lately:
  • Windows 8 has caused a big drop in PC sales to businesses, most of which has been picked up by Google Chromebooks, not by Apple ([1])

  • Eric Schmidt said, "Every once in a while a perfect storm occurs. Your competitors make some mistakes. You end up with the right product at the right time. There are really no other good choices of products ... That's what happened with Android." ([1])

  • Both the Google Nexus 5 and Moto G are being reviewed as the best phones on the market at half the price of the competition ([1] [2])

  • The iPhone wasn't created because Apple wanted to build a great phone but as a defensive move to protect iPod sales ([1])

  • Interesting experiment: "Zappos is going holacratic: no job titles, no managers, no hierarchy" ([1])

  • Great summary of Netflix's internal practices: "Be honest, and treat people like adults" ([1] [2])

  • Simple and apparently extremely effective idea for combating click fraud, just consider anything with bad ROI for the advertiser to be click fraud ([1] [2])

  • Hal Varian says, "Small datasets will become increasingly inadequate to deal with new problems." ([1] [2])

  • A big difference between our machine learning systems and how humans learn is how to correct errors. "You don't lock [a friend] in a room with terabytes of training data and ask him to spend a week updating his parameters." ([1] [2])

  • Computers make noises when they work harder, and you can use that to crack encryption ([1] [2] [3])

  • That clickthrough agreement you just accepted? Now your computer is owned and mining bitcoins for someone else. ([1])

  • Sounds paranoid, but it appears to be true that the government has a trail on your location (where you have been and where you are) if you have your cell phone on ([1])

  • "The Pentagon is largely incapable of keeping track of its vast stores of weapons, ammunition and other supplies ... half a trillion dollars in unaudited contracts ... repeatedly falls prey to fraud and theft" ([1])

  • A/B testing international aid ([1])

  • "The results consistently showed that drugs and exercise produced almost exactly the same results." ([1])

  • Entanglement works by punching a hole through space-time? ([1])

  • Xkcd on hashtags: "The cycle seems to be 'we need these symbols to clarify what types of things we're referring to!' followed by 'wait, it turns out words already do that.'" ([1])

  • "Chase execs probably thought they were going to be inundated with questions, like, 'What steps can I take to try to become as totally awesome as all of you?'" ([1])

  • The Onion mocks internet ads: "This entire industry we call journalism exists for one purpose and one purpose only: to sell ads. Lots of ads. Big, stupid ads." ([1])

  • Impressive demo video of an unusual means of motion: "A cube that can jump, balance, and walk" ([1])

by Greg Linden ( at January 02, 2014 07:56 PM

Dave Winer

Twitter as a public notepad, day 3

One of the commenters on yesterday's piece asked if Storify would be up to helping Twitter be a "public notepad." At first I thought no -- it's not about curating your own posts, but then I took another look and the answer is -- yes, you can use it to gather and publish your own ideas, you just have to be determined to find the way to do it.

How to

  • Go to and log in using your Twitter account.
  • Click on the big green Create Story button.
  • Click on the Twitter icon at the top of the right panel.
  • Click on User.
  • Enter your Twitter handle.
  • Now your tweets are in the right panel. Screen shot.
  • You can drag your "notepad" posts from the right panel into the left.
  • You can even change the order (you'll likely have to if you want them to be in chronological order).
  • Give it a title, and publish and you're ready to go.

It's a lot of steps

  • Here's the "story" I created.
  • But -- it's easier than doing it manually, which makes it worth doing.
  • However -- I would prefer if it were more compact, if it didn't make such a big deal of wrapping my words in the Twitter-approved envelope. It makes it even harder to follow the flow than it is in my timeline, which is hard to do because it's in the wrong order in the timeline!
  • This is not Storify's fault. Twitter's terms of use force them to do it. Not optimal for the writer, however.

January 02, 2014 01:40 PM

January 01, 2014

Dave Winer

What would a &quot;public notepad&quot; do?

First question of the new year.

Yesterday I wrote about using Twitter as a "public notepad."

Sure, the note-putting part of it was great. One item after another in rapid-fire, with the ability of people to add or comment. Most of it was pretty civil because.. Well I don't know why.

But when it came time to gather it all up and present it as a matter of record, that was a lot of hard work, and the result wasn't very satisfying.

So how would it work?

January 01, 2014 09:01 PM

Alex Schroeder

Not Planning Ahead

I’ve been enjoying a few days off and I’m having the hardest time not planning ahead like crazy. Plans change, the players decide where they will go next… and I prefer reading a book to preparing stuff that will never get used. Sometimes it’s hard to adhere to my own advice. The next adventure is good enough! :)


January 01, 2014 01:46 PM

Giles Bowkett

December 31, 2013

Dave Winer

Twitter as a public notepad

I don't know what came over me this morning, but I got an idea after watching a speech by Elizabeth Warren on YouTube. I was in tears, the ideas were so simple and compelling, and so rarely talked about. We are a country of people, not corporations -- but we've lost track of that, and we're stacking the deck against the people. But then I remembered, she hasn't said anything about the NSA spying on the American people. One idea led to another, and people responded, and I kept going. I wanted to get all of it down here in one place, before moving on into 2014.

The tweets

  • Watching Elizabeth Warren's speech at the DNC, literally in tears she's so great, except -- what has she said about NSA spying on Americans?
  • Same thing with Ezra Klein. What an up-and-comer. So smart. Always has the right answer. Except on NSA spying on Americans. Crickets.
  • I live a few blocks from Times Square. It's already crazy here. Why do people stand in the street? Most don't get to see the ball drop.
  • My opinion about the NSA. Politics in the US stops until it's over. Nothing. It's unacceptable. Outrageous. Fascist. Un-American.
  • The @paulg story is opportunism by Gawker and this new publication. Headline should read: Graham is not a politician. That's the real story.
  • Truth: @paulg has a narrow view of who can make a contribution in tech. However: That's his right as an investor and human being.
  • For example, I'd like @paulg to tell the students who come to Startup School that being an entrepreneur isn't the only way to contribute.
  • I was forced to be an entrepreneur when I was young because there was no other way to be creative. Wasn't a good fit. Yet I did contribute.
  • It's always been a struggle. To this day people describe me as an entrepreneur. I am not an entrepreneur.
  • People say I'm a lousy entrepreneur. True! I'm also a lousy polo player.
  • If I were in my teens today, Zuck would not be my role model.
  • You know who would be my role model? Banksy! :-)
  • Evan Williams is an entrepreneur. Aaron Levie is an entrepreneur. James Hong. Nothing wrong with being an entrepreneur.
  • But -- don't expect entrepreneurs to love your creativity. It's not what they do.
  • One of the good things about the Gawker-created mess is that we can talk about @paulg. In other times, VCs are very much a forbidden topic.
  • Online discourse would work better if it was always understood that there's a difference between The Truth and Your Opinion.
  • It's time for the Knicks to call Phil Jackson.

December 31, 2013 11:39 PM

Alex Schroeder

Scanner Again

We decided to switch from the Apple Mac Mini running Mac OS 10.6.8 (since it’s such an old machine it cannot be upgraded) to Claudia’s 13” Powerbook running the latest Mac OS 10.9.1.

And, as always, the old CanoScan LiDE 25 doesn’t work. The latest drivers are for Mac OS 10.6 – yay. I found fixed : use unsupported scanner in OSX 10.9 Mavericks] which had me install some promising libs. But it didn’t work. The Printer & Scanner preference pane never found the old scanner, and on the command line I didn’t get the scanner listed.

I decided to give Homebrew a try and installed sane-backends. This required a painful and slow uninstalling of libusb and the sane-backends installed by the promising libs I had just installed.

Using the sane-backends installed by Homebrew, I can now scan from the command line. Oh well, better than nothing.

alex@Megabombus:~$ scanimage -L
device `plustek:libusb:004:002' is a Canon CanoScan LiDE25 flatbed scanner
Trace/BPT trap: 5
alex@Megabombus:~$ scanimage --device=plustek:libusb:004:002 --format=tiff --mode=color --resolution=300 -l 0 -t 0 -x 215 -y 297 > Desktop/scan.tiff
Killed: 9
alex@Megabombus:~$ open Desktop/scan.tiff 

It works. ok

Since the scanner is not supported by Image Capture, I can’t use it to scan from Gimp. sucks

The TWAIN-SANE-Interface and the SANE-Preference-Pane I installed appear to be useless. Oh well. sucks

And now that I have scanned the picture I just need to reinstall Tex Live 2013 since the migration appears to have failed. sucks


December 31, 2013 01:44 PM

December 30, 2013

Terry Jones

txdlo – a Twisted deferred list observer

Last night I wrote txdlo, a Python package that provides a class called DeferredListObserver. As you might guess, it lets you observe callback and errback events from a list of Twisted deferreds. You can add observers that will be passed information about deferreds firing. You can add deferreds to the observed list at any time, which is very useful if you’re dynamically creating deferreds that you want to monitor.

The class can be used to easily build functions or classes that provide deferreds that fire when arbitrary combinations of events from the observed deferreds have occurred.

For example you can write functions or classes that support deferreds that:

  • Implement Twisted’s DeferredList or simple variants of it, or that let you separate the various behaviors of DeferredList into simpler functions.
  • Provide a deferred that fires when N of the observed deferreds have fired.
  • Provide a deferred that ignores errors until one of the observed deferred succeeds, only firing with an error if all the observed deferreds fail.
  • Or (a more involved example), suppose you have 3 methods that can return you a user’s avatar: a fast local cache, a filesystem, and a slow network call to Gravatar. You want to write a deferred-returning function that launches all three lookups at once and fires its deferred with the first answer. But if the cache and/or filesystems fails first, you don’t want to trigger an error, you instead want to take the result from Gravatar and add it to the cache and/or filesystem, as well firing the returned deferred with the result (wherever it comes from). Only if all three lookups fail do you want to errback the deferred you returned.

Here’s a sample example usage, which shows how to use DeferredListObserver to build a simplified version of Twisted’s DeferredList class as a function:

from twisted.internet.defer import Deferred, succeed
from txdlo import DeferredListObserver

def deferredList(deferreds):
    Return a deferred that fires with a list of (success, result) tuples,
    'success' being a boolean.

    @param deferreds: a C{list} of deferreds.
    @return: a L{twisted.internet.defer.Deferred} that fires as above.


    if len(deferreds) == 0:
        return succeed([])

    dlo = DeferredListObserver(maintainHistory=True)
    map(dlo.append, deferreds)
    deferred = Deferred()

    def observer(*ignore):
        if dlo.pendingCount == 0:
            # Everything in the list has fired.
            resultList = [None] * len(deferreds)
            for index, success, value in dlo.history:
                resultList[index] = (success, value)


    return deferred

You can grab the code, read more about usage, and see several other examples at

by terry at December 30, 2013 08:46 PM

Dave Winer

Blogging matters

I read a long post this morning about what it's like to be a nurse, and found it incredibly interesting. It filled in a perspective that I had not heard. And yet I spent lots of time talking with nurses during my father's long hospital stay in 2002, and my own -- the same year.

Back then, I had an epiphany about people who work in hospitals, who work in conditions most of us find incomprehensible, helping people in unimaginable pain, unimaginable until it's time for you to deal with it. The epiphany is that it must be wonderful to see the good you do, so clearly. In my own field, software development, it can be hard to feel how you're helping. In fact you get a lot of people sharing pain with you they can't find other outlets for. I learned in reading the post that it's the same in nursing.

While their work is gratifying and grounding, it's also grueling and abusive. She told the story so well, so personally. Yet in the comments people found many things to complain about. She just shared her point of view, wrote a blog post, and it was good, and of course the trolls gave her hell for it.

It's important to feel free to tell your story even if it cues up other people's permission to be jerks. Oh this person is showing vulnerability. Let's make her pay! I get it all the time. I've been getting it since I started blogging in 1994. I still do it, because it's what I do. I couldn't stop, even though I've tried, any more than I could stop breathing.

I don't have a solution, other than to say it helps to stand beside people who put themselves out there. The world is rough. That doesn't mean you can't share what you see. It just means it's important to feel the support. I want to provide what little of that I can, through this post.

What bloggers are guilty of -- always -- is telling their story imperfectly. It's the imperfections that make it interesting, and human -- and worth it.

Keep on truckin!

It's not like anyone gets out of this alive. ;-)


December 30, 2013 05:20 PM

December 29, 2013


WebGL, GPGPU, and Flocking – Part 1

One of my latest contributions to three.js is a webgl bird flocking example simulated in the GPU. Initially I wanted to sum up my experiences in a blog post of “WebGL, GPGPU, and Flocking”, but that became too difficult to write, and possibly too much to read in a go. So I opt to split them into 3 parts, the first part of flocking in general, and second on WebGL and GPGPU, and the third part to put them all together. So for part 1, we’ll start with flocking.

So what is flocking behavior? From Wikipedia, it is

the behavior exhibited when a group of birds, called a flock, are foraging or in flight. There are parallels with the shoaling behavior of fish, the swarming behavior of insects, and herd behavior of land animals.

So why has flocking behavior has caught my attention along the way? It is an interesting topic technically – simulating such behavior may require intensive computation which poses interesting challenges and solutions. It is also interesting for it use of creating “artificial life” – in games or interactive media, flocking activity can be use to spice up liveliness of the environment. I love it for an additional reason – it exhibits the beauty found in nature. Even if I haven’t have the opportunity to enjoy such displays at lengths in real life, I could easily spend hours watching beautiful flocking videos on youtube or vimeo.

You may have noticed that I’ve used of flocking birds previously in “Boid n Buildings” demo. The code I use for that is based on the version included in the canvas flocking birds example of three.js (which was based on another processing example). A variant of that code which was probably also used for “the wilderness downtown” and “3 dreams of black”.

However, to get closer to the raw metal, one can try to get his hands dirty implementing the flocking algorithm. If you can write a simple particle system already (with attraction and repulsion), its not that difficult to learn about and add the 3 simple rules of flocking

  1. Separation – steer away from others who are too close
  2. Alignment – steer towards where others are moving to
  3. Cohesion – steer towards where others are

I usually find it useful to try something new to me in 2d rather than 3d. It’s easier to debug when things go wrong, and make sure that new concepts are understood. So I started writing a simple 2d implementation with Canvas.

See the Pen Flocking Test by zz85 (@zz85) on CodePen

With this 2d exercise done, it would be easier to extend to 3D, and then into the Shaders (GPGPU).

If you are instead looking for guide or tutorial to follow with, you might find that this post isn’t very helpful. Instead, there are many resources, code and tutorials you can probably find online on this topic. With this, I’ll end this part for now, and leave you with a couple of links you can learn more about flocking. The next part in this series would be on WebGL and GPGPU.

Links: Autonomous Agents from Nature of code book. Craig Reynolds’s page on Boids. He’s responsible for the original program named “Boid” and his original paper from 1987 of “Flocks, Herds, and Schools: A Distributed Behavioral Model”. A really nice talk (video) on collective animal behavior. This was recommended by Robert Hodgin who does fantastic work with flocking behavior too. An article on Wired if you just want something easy to read

by Zz85 at December 29, 2013 06:18 PM

Dave Winer

Tech products of the year

This year's BOTY choice was such a big hit, the idea crossed my mind that I have a couple of products that distinguished themselves in my life in 2013, and what the heck, why not have a POTY to go with the BOTY! :-)

The thought came to me while I was on a walk today in Central Park, listening to Grateful Dead music through one of the products, and played by the other one.

I said man, I finally have this figured out after many years of walking and listening, I have a rig that's worth talking about it's so good.

First the headphones. I like to say I buy headphones the way some women I've known buy shoes. I have a closet shelf full of them. Most of them I tried out for a few days or maybe a week or two and put them away, still in search of the ideal set.

But after I bought the Velodyne vFree headphones I not only stopped buying new phones, I starting giving the old ones away to friends. And these were some great listening devices. But none of them put it all together like the Velodyne.

First, they are wireless Bluetooth headphones. You wouldn't believe how much of a mess those wires are for me. Always getting tangled and knotted. Limiting movement. Pulling on my ears and the device. Now I look at people listening on their iPods on the subway and think that in two years the wires will all be gone. Once you try it this way there's no going back.

Also, they're loud enough, and the sound quality is great. A lot of good headphones need an amplifier when used with a mobile device. Not sure why, but it's observable. I guess these headphones, because they have their own power source, have their own amp. Regardless, you don't miss anything with these guys, and music has the feel it's supposed to. And it's a clean sound, maybe a little heavy on the bass, but I like that way. But not so much as some others. ;-)

Another thing that's great about wireless is you can wear them around the house without carrying the player with you.

Now there are problems with wireless. You have to remember to keep it charged. But that's a discipline we've all learned by now. It's just one more device. It takes the same kind of USB cable that Kindles and Google phones do. You probably already have a few. And the Bluetooth connection sometimes drops, but for some reason for me now not so much as it did in the beginning. It feels like my devices have learned to find each other. I know that can't be true, but...

Product #2

Now the other device is the new iPad Mini. I got one with 64GB and LTE. I used Verizon because I already have a T-Mobile device (my Nexus 5), and this gives me a bit of redundancy that may come in handy. Both devices tether. Glad we got over that argument! ;-)

I bought an iPad Air when it came out and loved it, but that got handed down, because I very much wanted to try an iPad that fits in my jacket pocket, which the Mini most definitely does. I miss the larger screen sometimes, but I love the portability. With a few tweaks, I can see not carrying a phone. But remember, it's winter and cold, so I'm pretty much always wearing a jacket. We'll see how it works in summer, when I'm back doing daily bike rides in summer clothes.

But the iPad Air is as rational and lovely a product as the Velodyne, and of course the two go together perfectly, and connect over an open standard, so it's a religion-conformant combination. At the end of the year, it's clear that these two products made the most difference to me, and appeal to my tastes and lifestyle almost perfectly.

It might get better in 2014, I hope so, but it was worth noting that near-perfection has been achieved this year.

BTW, when I bought the Velodyne in April I paid $299. They're selling on Amazon now for $119. Wow.

PS: As I am working on the transition to a new CMS, I'm producing some blog posts in both environments, to get experience, and get a sense of what features are needed. Here's the new version of this post, in case you're interested in such things. ;-)

December 29, 2013 05:59 PM


No Modes vs Buy More Modes

Some thoughts on Jef Raskin’s Canon Cat.

From one perspective, Jobs and Raskin ended up going down two opposite paths.

Raskin emphasized that “modes” were a major cause of UI problems. Essentially you want a UI that the user can habituate to as strongly as possible, so that all one’s attention can be focused on the actual task and all of the administrivia you need to do tell the computer your intention are handled subconsciously. Like touch typing at a higher level.

The issue with modes is that they break habituation. If performing a given UI gesture does one thing in one mode and another thing in another mode, you can’t make that gesture a habit. For example: Cmd+Z is a conventional gesture that many applications interpret as undo. If the keyboard shortcut changed between applications (or worse Cmd+Z meant something else in another application/mode), it wouldn’t be so habitual and you’d be less productive.

Raskin was very serious about no modes. The Cat for example didn’t even have an on/off mode. It would go to sleep to save power, but if you started typing it would buffer all your key strokes and have them in your document by the time the thing woke up. That is, you didn’t have to switch from off mode to on mode! And because you were always in a document (that is, there were no separate application modes), you knew that typing some words always did the same thing, so the scheme really worked.

On the other hand, Apple has really pushed, especially since iOS, on the “App” model. Applications are, of course, giant modes. And the strategy has been to push a separate App (mode) for every single use of the machine. So rather than learning a few powerful gestures and then combining them to do disparate tasks, users need to learn a separate, surface-level gesture complex (App) for each individual task they want to do on their machine.

Which is more efficient or appealing? On what time scale of use?

Did Apple end up this way because Apps are a more natural fit for a consumerist model? “Want to do this task with your machine? Don’t bother figuring out how you can do it yourself. There’s an App for that!” No Modes vs Buy More Modes?

Raskin’s book, The Humane Interface, talks extensively about his UI design philosophy. In addition to explaining the above problems with modes, he discusses how to actually design a computer system with no modes (I believe an elaboration of what he did with the Cat). He also explains other really important UI principles and their ramifications, for example, “The user’s data is sacred” (hence undo).


Raskin’s definitions: A gesture is defined as an action that can be done automatically by the body as soon as the brain “gives the command”. So Cmd+Z is a gesture, as is typing the word “brain”. What constitutes a single gesture will be different depending on the user! A mode is defined as any situation not at the user’s locus of attention that would cause a gesture to perform an action different from another mode. So “pseudomodes” where the user holds down a modifier key or holds the mouse button while performing a drag gesture get around this since they keep the user’s locus of attention on the fact that they are performing the pseudomode.

I think both the above definitions are still a bit problematic but Raskin’s definitions are better than any other that I’ve heard. I hope there are more people who study and discuss these deep UI design issues! What do you think about modes?

by Toby at December 29, 2013 08:00 AM

December 28, 2013


Household Tips: Reviving a Dead Laser Cutter.

Not long ago, I happened to come across a very cheap and heavily used CO2 Laser Cutting Machine, made by Full Spectrum Inc. About 1K USD, including curbside delivery from across the continent.  I also bought the traditional water chiller, air compressor, exhaust manifolds, etc:

The junk seller promised an intact tube, and indeed there was:

Tube. CO2, Sealed, ~25kV operating voltage.

Tube. CO2, Sealed, ~25kV operating voltage.

Naturally, “the miser pays twice.” The poor thing released its magic smoke five minutes into the first test run. The laser would still turn on if triggered manually, but the machine had become: an expensive electric drill! The culprit? X-axis stepper motor driver (Allegro Microsystems A3983) seen below:

Motor Driver Board

Motor Driver Board. Why no Heat Sinks, F.S. Inc.?

Magic Smoke, it Did Escape.

Magic Smoke, it Did Escape.

I then contacted the manufacturer: who demanded a steep “transfer fee” before they would even discuss the sale of a spare. And so, we resort to Chinese methods. The recipe, should you, my dear reader, find yourself in a similar situation:

  1. Obtain new chip. I found, rather surprisingly, that the A3983 could only be had on eBay, from a Chinese vendor.
  2. Remove Stepper Motor Driver Board.
  3. Heat Dead Chip to around 280C with Hot Air Tool.
  4. Carefully lift Dead Chip off the board with Vacuum Tweezer (or, lacking the latter, a sharp set of ordinary tweezers.)
  5. Allow board to cool.
  6. Scrub board with ordinary flux remover. Allow board to dry.
  7. Coat the pads in solder. Especially the large thermal pad found underneath Stepper Motor Drivers like this one.
  8. Place new chip on the pads; secure in place with Kapton tape.
  9. Solder opposite corners, securing the chip. You can now remove the tape.
  10. Solder remaining pads.
  11. Remove all unwanted “bridges,” with the possible exception of those found on pads that are already connected together on the PCB.
  12. Heat the area to ~280C using Hot Air Tool to reflow solder over thermal pad.
  13. Allow unit to cool; re-install in machine.
  14. “Do Not Look Into Laser With Remaining Good Eye.”
New A3983 Driver.

New A3983 Driver.

Result: a working tool again! The motors buzz merrily, the laser cuts.

There was one remaining write-off: the USB to Parallel dongle (made by Full Spectrum) which plugged into the above controller. It breathes no more, merely heating a bit when plugged into a USB port. I blame its malfunction for the death of the stepper driver, though I lack positive proof. And this weird MS-Windows-only gadget is no great loss: turns out, the purely parallel-port motor board runs perfectly well with LinuxCNC. The end.

Now to add heat sinks (~$0.50 each):
Aluminum Heatsinks, Chinese.

Aluminum Heatsinks, Chinese.

Heat Sinks, Top Level.

Heat Sinks, Top Level.

Heat Sinks, Bottom Level.

Heat Sinks, Bottom Level.

by Stanislav at December 28, 2013 08:08 PM

Dave Winer

GitHub Pages

GitHub's Pages service seems ready-made for Fargo, so we're hooking them up. Here's how and why. In November I asked for a simple web server connected to Dropbox. I needed this for the upcoming version of Fargo. Until a couple of days ago we didn't have an answer.

The Pages service works does what we need. It means that users will have to learn how to use GitHub. Yes, it's technical, and will be hard for some users. But it's a beginning. We'll make it easier.

It's good. A place to start building.

PS: Just for fun I put a version of this announcement on my GitHub-hosted site.

December 28, 2013 06:30 PM

Alex Schroeder

Looking Back

The end of the year is always a good opportunity to look over the year’s posts—RPG posts, to be exact. The year itself started on a sad note: Fight On! is going down. The writing was already on the wall in 2012 and the adventure I had submitted for the last issue is available as a free PDF, Caverns of Slime.

But on to positive things! I tried to list the Old School Fanzines I knew, hoping to find a magazine “for me”. It’s weird. What about Fight On! Magazine made me want to contribute? What I remember best are the early levels of The Dismal Depths and the Fomalhaut material by Gabor Lux.

I still use my classic D&D character generator, for non-player characters and for character sheets on my Campaign Wiki. Some examples: Waran and Rinathil using ACKS, Stefan and Garo (this one belongs to my wife) using B/X D&D, Sir Guy (this one by a former player) and Sir Sewolt (another one belonging to my wife) using Pendragon.

Next session we will be assaulting the Barrowmaze using a party generated by drawing from a pile of random first level characters generated by this character generator. Electronic vat men!

I was looking for an alternative to creating a hex map using Inkscape (something I have been doing for my Sea of the Five Winds campaign) and so I wrote Text Mapper. I wrote a post comparing the two methods.

To be honest, however, I haven’t been using it. My Sea of the Five Winds campaigns already has a map, my Pendragon game uses the maps from the book, DM Florian uses Hexographer, DM Harald uses the maps from the book.

It felt weird to return to Red Hand of Doom. I was running it for the kids and using Labyrinth Lord instead of D&D 3.5. I enjoyed it very much. We skipped two chapters, though: no fighting the druid lich and no confronting of Tiamat’s avatar at the end. We used the mass combat rules from JB’s B/X Companion.

I wrote two one page adventures in 2013 that are based on my actual prep notes, To Rob A Witch and Sepulchre of the Clone.

That reminds me. Last spring I ran the One Page Dungeon Contest 2013 and all the posts are tagged 1PDC. I’m currently not planning to run the contest in 2014. Do you know anybody who would like to do it? I wrote How To Run A Contest to help you get started.

I also discontinued the Old School RPG Planet. If you’re willing to do the actual leg work of asking people to submit their sites, talking to bloggers, answering questions, I could set it up again. I am willing to handle the technical aspects of it. I just don’t want to deal with angry dudes on the Internet.

But on to more positive things again!

I still use my Spell Book Notation. That’s because I use a strict reading of the magic system such that elves and magic-users have a repertoire equivalent to their spells per day (to use the Adventure Conqueror King System terminology) and neither elves nor magic-users can copy spells from scrolls and spell books.

In my campaign this means that all the elves of a particular elf settlement will have a subset of the spells available to the elf lord. What I do is this: I write down the elf lord’s spell book using the notation above and whenever we meet a minion of a particular level, it’s easy to figure out which spells they have available by looking at the second column.

In a similar vein, I wrote about using 1d20 instead of 2d6 for dungeon stocking. As it turns out, however, I do this so rarely that I keep forgetting about it. I just don’t run enough dungeon adventures.

Still in the same vein, I was also comparing old school dungeon stocking to other methods of adventure location creation and found the traditional way of doing things to be very quick and the result just as good as the new ways. I’m a gaming traditionalist at heart, I guess.

I thought about using skills inspired by Apocalypse World in my games but ended up not doing it. DM Harald does it in his campaign, but I remain sceptical.

I wrote a bit about running the game. There was a post on my session preparation process for old school games, how to run Fate, how to run settlements in sandbox campaigns, how to let players introduce facts into your traditional campaign, how to use treasure, group initiative and when to roll.

In addition to that, I quoted a Google+ comment by Ian Borchardt on wilderness encounters and a comment by Kevin Crawford on urban campaigns.

And with that, here’s to the blogs, conversations with strangers on the Internet, and freedom, justice and peace for us all.


December 28, 2013 03:57 PM

Dave Winer

Microsoft and netbooks

Just read a piece in ComputerWorld about the success of Google's Chromebooks and how that's bad news for Microsoft. This is where I say "I told you so."

Microsoft had this market zipped up, with the netbooks, tiny inexpensive notebooks that ran Windows XP, had lots of USB ports, wifi, a camera, long battery life. These were incredible computers. I bought three of them over the course of the craze, bought one for my mom, and urged everyone else to get one. Meanwhile, Microsoft was making noises that they didn't approve. I couldn't believe it. Here they were getting lifted up by a gift from god, and they were saying it wasn't good enough. This is a company that had killed its own laptop business by not caring about malware.

When Vista came out, an awful operating system, they forced the netbooks to use it, when they should have dropped the price on XP to $0 to own the whole market instead of sharing it with Linux. They should have ran a victory lap. Fixed the bugs in XP, downsized their OS development group, and paid a huge dividend to shareholders.

Netbooks were wonderful, but they weren't good enough for Microsoft. Now the Google Chromebook is cleaning up the market that Microsoft should own.

We all lost here. Because the new netbooks, from Google and Apple, are closed systems, where the netbooks were wide open. I could access my file server from my netbook. I could put any software on it, or take it off, same with music and movies. Apple and Google are running gulags, the netbooks were Woodstock. That probably was the back-channel reason why Microsoft struggled so mightily to kill them. They were more interested in pleasing the entertainment industry than users.

PS: I have two iPads, and buy them for my friends and family. I gave a friend a Chromebook because I thought it was perfect for what she was doing, reading books and watching Netflix. I just wish netbooks hadn't been so badly treated by the tech industry, because they were great promising products.

December 28, 2013 01:17 PM

Lambda the Ultimate

A glimpse into a new general purpose programming language under development at Microsoft

Microsoft's Joe Duffy and team have been (quietly) working on a new programming language, based on C# (for productivity, safety), but leveraging C++ features (for performance). I think it's fair to say - and agree with Joe - that a nirvana for a modern general purpose language would be one that satisfies high productivity (ease of use, intuitive, high level) AND guaranteed (type)safety AND high execution performance. As Joe outlines in his blog post (not video!):

At a high level, I classify the language features into six primary categories:

1) Lifetime understanding. C++ has RAII, deterministic destruction, and efficient allocation of objects. C# and Java both coax developers into relying too heavily on the GC heap, and offers only “loose” support for deterministic destruction via IDisposable. Part of what my team does is regularly convert C# programs to this new language, and it’s not uncommon for us to encounter 30-50% time spent in GC. For servers, this kills throughput; for clients, it degrades the experience, by injecting latency into the interaction. We’ve stolen a page from C++ — in areas like rvalue references, move semantics, destruction, references / borrowing — and yet retained the necessary elements of safety, and merged them with ideas from functional languages. This allows us to aggressively stack allocate objects, deterministically destruct, and more.

2) Side-effects understanding. This is the evolution of what we published in OOPSLA 2012, giving you elements of C++ const (but again with safety), along with first class immutability and isolation.

3) Async programming at scale. The community has been ’round and ’round on this one, namely whether to use continuation-passing or lightweight blocking coroutines. This includes C# but also pretty much every other language on the planet. The key innovation here is a composable type-system that is agnostic to the execution model, and can map efficiently to either one. It would be arrogant to claim we’ve got the one right way to expose this stuff, but having experience with many other approaches, I love where we landed.

4) Type-safe systems programming. It’s commonly claimed that with type-safety comes an inherent loss of performance. It is true that bounds checking is non-negotiable, and that we prefer overflow checking by default. It’s surprising what a good optimizing compiler can do here, versus JIT compiling. (And one only needs to casually audit some recent security bulletins to see why these features have merit.) Other areas include allowing you to do more without allocating. Like having lambda-based APIs that can be called with zero allocations (rather than the usual two: one for the delegate, one for the display). And being able to easily carve out sub-arrays and sub-strings without allocating.

5) Modern error model. This is another one that the community disagrees about. We have picked what I believe to be the sweet spot: contracts everywhere (preconditions, postconditions, invariants, assertions, etc), fail-fast as the default policy, exceptions for the rare dynamic failure (parsing, I/O, etc), and typed exceptions only when you absolutely need rich exceptions. All integrated into the type system in a 1st class way, so that you get all the proper subtyping behavior necessary to make it safe and sound.

6) Modern frameworks. This is a catch-all bucket that covers things like async LINQ, improved enumerator support that competes with C++ iterators in performance and doesn’t demand double-interface dispatch to extract elements, etc. To be entirely honest, this is the area we have the biggest list of “designed but not yet implemented features”, spanning things like void-as-a-1st-class-type, non-null types, traits, 1st class effect typing, and more. I expect us to have a few of these in our mid-2014 checkpoint, but not all of them.

What do you think?

December 28, 2013 12:59 AM

December 27, 2013

Dave Winer

My blogging story

Justin Hall of asked me to do an audio recording about blogging.

I answered some of his questions, but as usual, talked mostly about what I wanted to. ;-)

Which is a big part of the blogging story imho.

Here's the audio, 24 minutes, hope you enjoy.

PS: This also adds to the thread started by Walter Isaacson about the origins of the Internet.

December 27, 2013 04:13 PM

December 26, 2013

Alarming Development

Hello Lamdu

Interesting new work: Lamdu [Hacker News discussion] from Eyal Lotem and Yair Chuchem. They aren’t showing a lot of results yet, but I really like the espoused principles of the project. This is worth keeping an eye on.

They are building an advanced IDE for a variant of Haskell with keyword arguments and structural record types (Subtext makes the same choices). They have moved type inference from the compiler into the IDE, where it can be exploited for assisting programming. I like that they are thinking beyond just live execution to the bigger issues of code refactoring and intensional versioning. They also appreciate the benefits of normalizing code formatting: “co-macros” re-sugar into normal forms (ditto Subtext).

It will be most interesting to see in what ways Lamdu alters the experience of Haskell. I’ve long said that functional languages are a better fit for advanced IDEs. Haskell is the state of the art in functional programming, so it is a useful experiment to enliven and illuminate it, and perhaps even make it more friendly. If they can pull this off it will be a really big win because they can leverage the large capital investment in Haskell implementation and libraries.

I wish Lamdu the best of luck and look forward to learning more about it.

by Jonathan Edwards at December 26, 2013 04:11 PM

Dave Winer

Blogger of the Year

I spend the last month of each year thinking about who I want to honor as the person who best embodies the spirit of blogging. I always want to do something unusual, something that makes you think, that stretches the boundaries of blogging, but illustrates something about blogging that's essential, and perhaps not fully appreciated. And -- this year -- celebrates success! :-)

This year's Blogger of the Year writes for the NY Times. In the past I would not have so easily thought you could both be a blogger and work at a mainstream publication. But this year our guy did something remarkable. He used his platform, his pulpit, to change the world in a measurable, significant way.

Nick Bilton decided that it was time to ask a question that the FAA didn't want to deal with, or had no way to deal with, or couldn't deal with for some reason. Political organizations often get stuck. The individuals inside may know it's time to act, but they can't pull it together.

Bilton asked a simple question that all of us who fly have asked. Would the plane crash if I kept reading a book on my iPad while the plane takes off? If not, why do I have to turn it off?

He asked this question for the first time in a post in November 2011, and the decision was made late this year, and now we're all flying with this one inconvenience removed. Sure, it's not like solving global warming, or avoiding the next banking crisis, or even getting good connectivity in Manhattan, but it's progress! And it shows the power of an individual and of a news organization to create change, to act as instigator, a provocateur, a problem-solver.

Thank you Nick Bilton for making our lives a little better, and using your blogging voice to accomplish it.

December 26, 2013 03:07 PM

December 25, 2013

Dave Winer

We could douse Internet mobs

Don't kick a man when he's down.

If that were the rule. If kicking a person when they're down was considered as awful as the things you knock people down for, that would end it.

Make the punishment fit the crime, and stop there. And maybe if we wanted to be fair, adopt a rule like innocent until proven guilty, or try to see it from their side, or we understand that sometimes people tweet when they're: 1. Drunk. 2. Tired. 3. Lonely. 4. Feeling unloved. 5. Or neurotic. 6. Being human.

I once saw a pundit with hundreds of thousands of followers call a mob victim an asshole and people who I thought well of (before this) praised him as being a saint.

As Worf might say, sir you have no honor.

There must be a New Year's resolution in here somewhere.

A picture named tree.gif

Happy Holidays!

December 25, 2013 11:50 PM

Reinventing Business

The Big Payoff

I'm reading Give and Take: A Revolutionary Approach to Success by Adam Grant. I'm quite enjoying this book, partly because it's an easy and happy read and also because I suppose it vindicates many of my life choices, and is thus inspiring (confirmation bias, anyone?). The assertions in the book are supported not just by stories about people but also by cited research. Sure, one can never tell how solid this is or whether the author's perspective has biased his viewpoint, which is easy to do. But it (mostly) makes me feel good so I'm just taking it as written for the time being.

I do find the descriptions of "takers" to be disturbing. It turns out I know some people like this and have been trying to ignore their taker-ness and pretend that's not really how they are. But Grant gives a set of clues on how to determine if someone is a taker, and I can no longer hide within my ignorance. Enlightenment is often painful.

The book has gotten me thinking about why people do things (and why I do things). In US culture, and capitalist cultures in general, this motivation is usually The Big Payoff. You accumulate some money, you invest this "capital" in some venture, and the only reason you make this investment is that you hope for The Big Payoff.

But why? Raising funds with no particular goal in mind is actually anti-capitalistic. Imagine going on Shark Tank and pitching that you just want a bunch of money for no particular reason. It's not surprising; it follows from the whole maximize-quarterly-profits-at-all-costs mentality. So often, the whole point of making money is to make more money (or to somehow demonstrate that you've made money by buying flashy stuff).

I like nice things, sure. But there comes a point where you have enough (I find it kind of horrifying to drive through suburbs on weekends. I see open garages so crammed full of stuff that the cars don't fit -- and this is typical). And then what do you do?

I've also seen people go through the process of retiring and suddenly this promise of a golden age that has been held out to them all their lives appears and it's ... empty. In earlier times the shock of retirement tended to kill the person in the first year, which is why the car companies, for example, could offer such terrific retirement benefits: their actuaries told the companies they'd never have to pay them for long.

As a consultant for many years (am I still a consultant? I'm not sure), the value of money for me was as a buffer. It told me how long I could go without another consulting job. So I diligently squirreled it away, because it allowed me to keep writing books, consulting, and doing other such experiments without having what I've always considered the ultimate failure: having to get a "regular" job.

This is the key, I think. What you really want to do is to find something fun and somehow be able to continue doing that. The motivation of The Big Payoff comes from doing things you don't want to do, in an environment you don't like. So you start dreaming of what you would do if The Big Payoff came along and liberated you from the need to kowtow to your boss, your company, etc. Mostly this plan is just "not having to kowtow anymore." That is, it's expressed in terms of what you don't do rather than what you'd do. This is probably why people have such problems figuring out how to be happy when they do get some money (look at studies of lottery winners, for example, who often get deeper in debt than before, which is why lotteries have started paying out over many years). Indeed, if they had figured out what they really wanted to do, they'd probable have stopped their drudgery and followed that dream.

I think The Big Payoff is an illusion. At a workshop I attended in September, one of the attendees expressed various dissatisfactions about his job, and when I queried him he said that it was still the best job he had ever experienced and he just wanted to keep doing it from now on (which is probably why he was so invested in making it better). What else could you ask for than to keep doing something you love?

by (Bruce Eckel) at December 25, 2013 12:39 AM

December 24, 2013

Dave Winer

Be a man

"Be a man" are the three most destructive words you can say to a boy or a man.

Because it really means: Die inside. Betray yourself. Fuck off.

Men Stay Silent in 1998 was all about this idea. It has been a consistent theme of my blogging going all the way back to the beginning.

Please watch this video. It's important.

December 24, 2013 04:00 PM

The next Scripting News CMS

I'm working on the next CMS for Scripting News and then for Fargo.

Here's a blog post created using the new system, it'll give you an idea what's coming.

Happy holidays everyone! :-)


December 24, 2013 03:38 PM

December 23, 2013

Alex Schroeder


Gerade machte ich mir wieder Gedanken über Verfolgungsjagden für meine Helme & Hellebarden Regeln. Die komische Tabelle bei Labyrinth Lord und Basic D&D kann ich mir nicht merken. Da erinnerte ich mich an Skills bei Apocalypse World und machte mich an eine 2W6 Tabelle, die von Erin Smales Kommentar auf meinen Google+ Artikel inspiriert ist.

Verfolgungsjagd: Wer verfolgt wird, muss 2W6 würfeln. Bei 2 haben die Häscher euch überrascht. Bei 3–6 kommt es zum Kampf. Bei 7–9 wähle zwei Punkte, bei 10+ wähle drei Punkte aus der nachfolgenden Liste.

  • ihr konntet zusammen bleiben
  • es ging schnell
  • ihr wisst, wo ihr seid
  • ihr habt Schilde und Rucksäcke noch

Optionale Modifikatoren: Je +1 für die Gejagten, falls es doppelt so viele Verfolger gibt, für eine höhere Bewegungsrate, für Schilde fallen lassen, für Rücksäcke fallen lassen, wenn ein Dieb dabei ist, bei Regen, bei Dunkelheit. Je -1 für die Gejagten, falls ein Elf oder ein Jäger bei den Häschern ist, mit Verwundeten, bei Schnee.

Vincent Baker verwendet in Apocalypse World selber ja keine Modifikatoren für die Moves. Ich vermute, das wird bei mir ähnlich sein. Vielleicht sollte ich noch hinzufügen, dass man bei 12+ einfach entkommt.

Tags: RSS

December 23, 2013 10:43 PM

Tim Ferriss

One Month with No Phone — How to Go Phoneless in a Major US City

Lane Wood’s last photo with his iPhone 5.

Preface by Tim/Editor

This guest post is by Lane Wood, societal entrepreneur, CMO of Humin, and alum of Warby Parker and charity:water.

I recently went four weeks without phone, computer, or calendar, while in Indonesia. But what if you’re in a major US city? Can you go phoneless? Lane shares his experience doing exactly that…

Enter Lane

Just over a month ago, I was in a precarious situation. You see, I’m new to the freelance game and through a series of novice moves, I found myself without a big client and no work lined up for July. It was a rough month.

I had already planned a mini personal retreat with some friends and decided to just go for it— and try to find some solace in the beautiful mountains surrounding Lake Shasta. Early one morning, I was in paradise as I breathed in the mountain air, looked for miles over the mountains and I snapped the photo above. Little did I know it’d be the last picture my poor iPhone would take.

Our crew decided to rent a boat, and we headed out with a tube and a wakeboard. When we were about 300 yards from the marina, the boat engine started having trouble and we thought there was a rope caught in the propeller. I decided to be a hero and dove into the water. With my iPhone 5.

Given my freelancer cash flow issues, a newly signed contract with Verizon and no insurance, I chose not to spend $700 on a new device. I powered up my iPad mini (with 4G) and spent the next month in San Francisco without a phone.

When I mention this to people, heads tilt to the side, eyes bulge and mouths are left gaping open.

“Wait, what? How… I mean… Really? No Phone?”


Now with intense curiosity, they lean in.

“What’s it like?”

They sound as if I’ve just told them I’m on ecstasy.

But I get it. Not a lot of people have had this experience. So I’d like to share what I’ve learned…

How I did it…

Texting: iMessage + Path.

Phone calls: Scheduled Google+ Hangouts and Skype calls.

Camera: Shameful and limited iPad camera usage.

MVP award for this experience goes to DODOcase. I’ve had it with me this whole time disguising the iPad mini. People assume that I’m carrying a journal around, and at a moment’s notice am ready to write down all of my profundities. I keep it tucked away in the back of my jeans and under my shirt.

Lesson #1: Mindless Phone Usage (MPU) is stealing our humanity

When one uses a tablet in public, everyone notices. It is not subtle. So if I want to text a friend, check my email or read an article, I have to answer this question:  “Is this moment appropriate for me to have this big device in my hands?”  Conversations will stop.  Strangers will look.  I will be “that guy.”

Result: I’ve stopped mindlessly checking Twitter. I’ve stopped using Facebook on mobile at all. I don’t refresh my inbox. I don’t fill awkward silences with technology. I’m mindful of the affect of my tech behavior on the people around me. I’m much more present, and I’ve grown incredibly irritated at my friends when they have their phone out for absolutely no reason.

Tinder. Twitter. Tumblr. Tinder. Twitter. Tumblr.

Refresh. Swipe right. Like. Heart.

MPU. Ugh.

I can’t stress how important this shift has been for me.

Lesson #2: Vibrate is the secret killer of mental clarity

Yes, it’s absurd to let our phone ring aloud in any public situation. So we put our phone on vibrate. Even still, we are interrupted by completely inane and non-urgent notifications pleading for our attention.Vibrate is the phone’s temper tantrum. And we reward it by giving our attention, rather than putting it in time out (do not disturb).

Result: Without a vibrating device in my pocket, I’m unaware of messages, notifications and the kicking and screaming that the operating system is doing all day long. I get out my iPad when I need to check in. I may not get back to your text within 30 seconds, and for 99% of situations, that’s acceptable. I’m more focused, less stressed and decidedly present.

Lesson #3: We use 5% of the photos we take and waste some of the best moments viewing real life on a screen

The best camera is the one that you have with you. Unless it’s a tablet.

I live on Alamo Square Park, and at about any point in the day, you can see tourists taking photos of the Full House houses with their tablets. Inexplicably it happens at concerts. Each time, I laugh and judge. Until recently.

Having only a tablet on hand creates a very interesting camera dilemma. I must ask myself, “Self, why do you need a photo of this?  Is it worth the scorn of your friends and strangers alike?”

Result: I don’t take many photos. While at Outside Lands music festival, I took only eight pictures in three days of festival revelry. And honestly, I think that it was enough. I have proof that I saw a Beatle and I have a couple of photos of my friends, The Lone Bellow and Kopecky Family Band, playing on stage.

Instagram users have yet to organize a revolt at the absence of my content.

Lesson #4: Having separation anxiety from a device is ridiculous and serious

Imagine this scenario: You’re at a friend’s house for dinner and your phone is in the car.

How do you feel? Need a Xanax? Are you plotting your escape to rescue your lonely device?

We’ve lost the ability to be fully present. This is not news. After a month of not having a phone, I don’t notice the empty pocket. I walk out of my room regularly without a device. Walk through the park. Eat dinner. No devices. I don’t feel phantom vibrations.There is a serious psychological and emotional difference when I’m not shackled to a device that is constantly begging for my attention.

I know this unintentional yet transformative experiment has been as much of a disruption for my family, friends and clients as it has been for me. So, after 31 full days, I’m currently tracking a FedEx truck bringing to me a shiny new iToy. I wonder if I have the discipline to retain new healthier tech habits. I can already feel the faint buzzing on my right leg.

If you see me out, falling back into MPU tendencies, you have permission to call it out. In hopes that we can all work through this together, I’ve started a list of ways you can gain discipline without spending a month sans phone.

How to “discipline hack” without giving up your phone:

1.  Turn your screen brightness all the way up when you go out at night. You will be very painfully aware of the fact that you’re using a phone and it will drain your battery. These consequences will help you use your phone only when necessary, and your friends will be more likely to call you out for having your phone out.

2.  Experiment with using Do Not Disturb functionality and turn your notifications off. Don’t reward your phone for throwing tantrums.

3.  Make an agreement with family and friends to call each other out for MPU.

4.  Leave a comment below to suggest your own hack!


AFTERWORD BY TIM: Have you ever gone without phone or computer? If so, how did you manage it? If you were to go 2-4 weeks without electronics, how would you approach it? Please share your thoughts below…

This post originally appeared on Medium. Published here with permission.

by Tim Ferriss at December 23, 2013 09:57 PM


The Last Taboo

Sex was a taboo of a previous generation. Normal people don’t think about sex. If you think about sex then you’re not a good person and you should feel ashamed. You need to get control of your mind and stop thinking about sex! Looking back we can see that this was just a guilt complex, a combination of obsession and denial.

Laziness is the taboo of our generation. I hope future cultures will look back and see that we were obsessed with working all the time. Anyone who wasn’t working enough felt ashamed. Be more productive! Your worth as a person is only as good as your job title / how much money you make / however you fit in to the production-consumption system.

I’m not saying people should do no work. I think people should work when they feel like working. But overworking is what causes a lot of problems. That’s when people get stressed out and start treating each other badly. Or maybe blaming other people because they’re not working enough. I have to do all the work around here!

Checking your email is working. As is maintaining your status within social networks. Unread messages! Have to read them and process them!

Whenever you feel like you don’t have enough time to do all the things you “have” to do you are working.

It’s hard to stop working so much. We’re conditioned to always think about working. If we’re not working we feel like we’re falling behind.

If you feel like maybe you’re working too much but you can’t stop, you can’t bear to feel like you’re lazy, then a good antidote is play. Try to find more play in your life. Eventually the play will help you transition to spending time without doing anything in particular and not feeling bad about it.

Overworking really is a problem! It’s like overplanting a field and not letting the soil recover.

In 1932 Bertrand Russell wrote a great essay called In Praise of Idleness. England was just starting to recover from the Industrial Revolution. That was the period where people working the longest and the hardest. Poor people especially, but also the rich people. Everyone worked way too hard and it sucked! People thought they were making progress but it was really a very dark time, more so than the Middle Ages in many ways. There are still places in the world where the Industrial Revolution is still happening, but the developed world was coming out of it by 1932.

Russell’s essay is very optimistic. He realizes that most of our production has been going toward things we don’t need. He predicts that as society reorganizes itself, people can start having more leisure time. Everyone can work 4 hour days. The time that previously only the “leisure” class had, to develop themselves personally and culturally and discover things about the world, that time can be had by all.

“Athenian slave-owners, for instance, employed part of their leisure in making a permanent contribution to civilization which would have been impossible under a just economic system. Leisure is essential to civilization, and in former times leisure for the few was only rendered possible by the labors of the many. But their labors were valuable, not because work is good, but because leisure is good. And with modern technique it would be possible to distribute leisure justly without injury to civilization.”

If you think this would be a better way for all of us to live, I think the key to realizing it is finding an alternative value system other than identifying our human worth based on the work we do. This is difficult. Most people have no idea how to understand their place in the world except in relation to their job. Who am I? I’m a __role__ at __institution__.

So I think the most valuable thing you can do to challenge this taboo is to find something that you know is important in the world. This is personal. Not something someone else says is important, something you know is important. Keep this in mind when you judge yourself and others and it will put things in perspective!

by Toby at December 23, 2013 04:38 AM

Dave Winer

No company is going to stand up to a mob

Impossible scenario: The Twitter mob chooses someone to make an example of. They go after that person's job. The company says "We're standing behind our employee." It'll never happen. Companies have to make the right business decision. And that means firing the radioactive person and replacing them with someone who is not radioactive.

  • Standing behind the employee would just fuel the rage, and cause the company itself to become the target of the mob, probably even more than the employee. Boycott. The management would be fired, and replaced by people who will do the right thing for the business. Which is why no company will stand up to the mob.

A few weeks ago one of the maintainers of node.js was fired because he didn't accept a check-in that would have made language in the code be gender neutral (at least that was my read of it as an outside observer). There was some question whether he understood what was being asked of him because English wasn't his native language. What an ugly scene, for so little, from someone who was so generous!

I have been surrounded like this myself, many times, over the years. Believe me, the mob has tried to get me fired. If I had had a real job I'm sure they would have. When I was the CEO of a company, the mob went after our families. These are not principled acts. Don't kid yourself. If they think they can get you fired for having the wrong political opinion, they will.

I've been told that "Free speech has consequences." Everything has consequences, like hounding people for practicing free speech. The consequence is that people won't speak. Great. What a cruel joke if the greatest communication medium ever invented was used to stifle communication.

December 23, 2013 12:28 AM

December 22, 2013

Dave Winer

About the tech backlash

I don't know anything for sure, and maybe the people who live in working class neighborhoods in San Francisco and the East Bay are the only ones who have a gripe with the people of tech, but my gut says this is just the start.

I think the busses are incredibly good symbols of the problem with tech. They have these big windows, that you can see out of, but I don't think the people inside spend much time thinking about what's on the other side of them. The people of tech have an abstract and incorrect idea of what it's like to be outside their bubble.

I first encountered this in a town hall meeting I went to at Apple in the late 80s. I was one of several speakers, and I went last. I had been asked to tell what it was like to be a developer for Apple's products. I had been an Apple developer for a long time, then. I worked with their first developer relations guy in 1980.

I had very much idealized what it must be like to work at Apple. I imagined it was great! And I knew that my life sucked. Now here was the surprise, they felt the same way. Being a developer must be wonderful! Everything is taken care of for you. All you have to do is put up some dialogs, use our code, and in a few weeks you get rich! And you don't have to deal with the asshole execs. And whatever other grief comes from working in a large organization (which I now understand much better, but still from a distance). Of course none of this has anything to do with what it's like to be a developer. Our paychecks are iffy. We don't have health insurance. You always break our stuff because you don't care or understand. Most of us go out of business leaving the founders unemployed and broken. Etc etc.

Now tech is much bigger today than it was then, and much more pervasive -- and it affects far more people's lives. And people read the news, and they know that the companies are helping the government spy on us. Those busses are such excellent symbols. When are they going to come out of the busses and find out what it's like for the rest of us. Not their idealized view of who we are, but who we really are.

Sadly, all that's really needed here is some public relations pablum. Some feel-good ads on the Superbowl that glorify the users, not the products. Have your employees show up at charity events, and make sure there are reporters there too. With a little time and money, the problem could be "solved" in a superficial way.

I don't know what the real answer is. It's impossible for everyone to understand everyone else's perspective. But the people who live in SF and Oakland who are being driven out of their homes have a real gripe. They probably like to live where they live, like you they have friends and family nearby, a job perhaps, and moving to Walnut Creek or Petaluma isn't what they want to do. And the rest of us who use your stuff, and don't like to be pushed around either, are feeling a little sympathy for the protesters.

December 22, 2013 02:43 PM

Alex Schroeder

Sepulchre of the Clone

Notes for a session:

As you can see, the magic user was not yet a high-level Vivimancer when I ran the adventure. I had to push him up to 15 if I wanted the clone to be based on the actual spell-casting ability of the dude. At the time I justified the clone with rituals and machinery… You might also notice the notes on snow apes, rocket men and shark men. Indeed, I ran this as the tower in the middle of the lake of The Forgotten Depths.

At the time the baboons were “blood monkeys” and the player characters forced one of them to cross the blue room and mash buttons. They didn’t realize that this would revive the clone and once they monkey came back, they killed it. Cruel!

They stole the clone’s spell book and still befriended the clone (who didn’t know that it was they that had stolen the book). Once befriended, they decided to “help” him retrieve his spell book and “hunt” for the blood monkeys that must have done it. And strangely enough they soon found it “in the forest”. All is well that ends well, I guess.

In my game, the clone wasn’t a Vivimancer but a Polymorpher. The spell selection for Vivimancers is cooler, though. It explains the dense plant life, the mushrooms, the degenerate humans, the intelligent monkeys, the minotaurs, and so on.

Resulting second draft:

Sepulchre of the Clone.pdf

It still needs some proof reading. The idea is to submit this for Gavin Norman’s upcoming Vivimancer Supplement. Today I learned that a one page adventure for A5 paper is harder than it looks. :)

The strange “polymorph other into human for a limited time span” is magic item I wanted to keep. I felt that perhaps a player would be able to take advantage of it, or maybe they’d feel like dismantling it and taking it on to their own ship. They never did, however.


December 22, 2013 02:35 PM

Dave Winer

What's the best messaging software to install on an iPad?

I want to get my iPad connected up to SMS and Google's chat system (I use an Android phone, at least for now), and whatever else people are likely to want to use. I've always found this horribly confusing. I want to get it right.

I have a Google Voice account, btw -- and I use it.

Should I install Google's chat app on the iPad (it's now called Hangouts, I wonder what it will be called next year, and what scams it will drag me into).

I want something that's easy to set up, that I can recommend to friends and most important family members.

December 22, 2013 02:26 PM

Questions for reporters to ponder

Is a reporter still a reporter if he or she owns stock in company he or she works for?

Does it matter how much stock the reporter has?

When reporting, how does the reporter keep his or her ownership from influencing the journalistic work?

Should they recuse themselves from writing stories that might increase or reduce the value of their stock?

When a publisher says dealing with sources is entirely up to the reporters, does that still work if the reporter is a co-owner of the publication?

Can you wear the hats of reporter and owner at the same time and still think of yourself as a reporter?

Are the legal protections for owners different from those of a reporter?

When you get a subpoena, can an owner protect sources?

Will an owner aggressively pursue the truth? Or profits? What if there's a conflict?

December 22, 2013 02:27 AM

December 21, 2013


Of Decaying Urbits.

After the sale of my Urbit ‘dukedom’, several readers have written to me, asking ‘why.’ The following was my reply to one such letter, from a fellow who suggested implementing a proper hardware foundation for Nock (Urbit’s computational base.)

Dear [Reader],

Here was my own Nock.

But notice that I made no attempt to implement a Nock in FPGA. To understand why, I recommend: trying it yourself!

I confess that I am entirely uninterested in any further doings involving Nock. To learn why, read on…

The proof of the pudding – if you will – or of the turd, if you must! – is in the eating.

It isn’t that one could not, in principle, wangle together some silicon which executes Nock. But the impedance mismatch between any physically-plausible machine and anything resembling Nock is atrocious. And I do believe that this actually matters (further discussion here.)

The whole concept of ‘immutable data’ (and the more general idea of a formula-reduction approach to computation) is a fundamental dead-end. This is because physical machinery inescapably relies on mutable storage – and the reasonably-efficient use thereof.

The approach taken by Curtis is a result of his mis-spent youth among academics, who accept the costs of this ‘hair shirt’ approach to computation because it allows them to write ‘proofs’ (not to be confused with actual mathematical proofs. The very notion of proving any important property of a computational system as a whole, rather than of an abstract algorithm taken individually, is laughable – because real-world situations do not give you the kind of hard priors required to rise to the level of an honest mathematical proof.)

A. Perlis taught that ‘one cannot transition from the informal to the formal by formal means.’ And indeed you can’t.

The ‘proofs’ so beloved by FP academics are written in order to participate in a bizarre grant embezzlement scheme, rather than for any practical purpose. They are fruits of a poison tree, just the same as anything created by Lysenkoist biologists.

Curtis himself meditated on this fact back in ‘07, but has proceeded to give us exactly the kind of thing he condemned.


‘This is also the reason why functional programming languages ignore macros. The people behind them are not interested in programming automation. Wadler created ML to help automate proofs. The Haskell gang is primarily interested in advancing applied type theory.’ (Vlad Sedach, quoted in ‘Of Lisp Macros and Washing Machines’.)

The people who gave us the pseudo-mathematical ‘computational astrology’ on which Nock is ultimately based did not have the best interests of your brain in mind! Quite the opposite, in fact. Their one and only objective was to make themselves seem clever while adding to a titanic pile of drivel, beneath which virtually all honest work in computer science was mercilessly crushed.

Curtis answered the inescapable clunkiness of formula-reduction with ‘jets.’ And even if the latter did not rely on efficient solutions to NP-hard problems (formula recognition), they are a total cop-out from the ‘turtles all the way down’ approach we’ve been promised. The result is fundamentally rotten.

Anyone who steps up to the task of re-creating computing from the ground up must take hold of the entire stack – software and hardware – and fit it in his head as a coherent whole. This is the only way to reduce the moving parts to an absolutely-essential crystalline minimum. Urbit is quite clearly not the result of such an undertaking. Curtis baited our appetites with the promise of a ‘Year Zero’, and instead gave us a craven surrender to Unix and the von Neumann machine, with yet another layer of even less-comprehensible crud plastered on top.

‘Proof,’ especially of the pseudo-mathematical variety, will never substitute for: understanding. The kind of understanding you have of arithmetic, or of a doorknob. (Where is the mathematical proof that your doorknob turns? And yet it turns!)

It is possible to build a computer which an educated person can understand – in exactly the same way that a Pashtun blacksmith understands a Kalashnikov. But in order to actually do this, one must first believe that such a thing is possible.

Like the infamous Galloping Gertie bridge at Tacoma Narrows, Urbit is now and will forever remain of great educational importance – to all would-be cleaners of the Augean Stables of modern computing. As an elaborately-worked example of what not to do!

If you are interested in physically-plausible and effective bottom-up redesigns of the computational stack, study the Scheme-79 chip and related work. Or better still, consider what can be built from the asynchronous Muller C-gate, and how well the latter plays with a pure-dataflow computational paradigm.


by Stanislav at December 21, 2013 11:41 PM

Axis of Eval

Wat: now in Perl, Python, and Ruby, too

I'm delighted somebody by the name of "shadowcat-mst" has taken my Wat interpreter and reimplemented it in Perl. That really seems fitting. Wat now covers JavaScript and Perl - think of the possibilities!

Update: Piotr Kuchta ported Wat to Python.
Update: Victor Hugo Borja ported Wat to Ruby.

by Manuel Simoni ( at December 21, 2013 12:38 AM

Green threads in the browser in 20 lines of Wat

This page shows 5 independent Wat green threads (view source for full Wat code).

Each thread has an ID and is defined as a function that loops forever, repeatedly printing its ID, and then sleeping 250ms:

["define", ["run-thread", "id"],
[".", document, "write",
["+", ["string", "Active thread: "], "id"]],
["sleep", 250]]],

So, how can a Wat thread sleep inside a loop? Why, with good ole delimited continuations:

To spawn a thread, I just wrap the call to RUN-THREAD in a prompt (which is just a unique object used as an identifier):

["define", "default-prompt", ["quote", "default-prompt"]],

["define", ["spawn-thread", "id"],
["push-prompt", "default-prompt",
["run-thread", "id"]]]

Where it gets interesting is the SLEEP function which captures the continuation up to the prompt, and sets up a callback with JavaScript's setTimeout that will reinstall the continuation later:

["define", ["sleep", "ms"],
["take-subcont", "default-prompt", "k",
["define", ["callback"],
["push-prompt", "default-prompt",
["push-subcont", "k"]]],
[setTimeout, ["wat-js-callback", "callback"], "ms"]]]

So, first, SLEEP aborts up to and including the default prompt using TAKE-SUBCONT. It receives the continuation in the variable K. Once it has K, it defines a CALLBACK function, that will reinstall the default prompt with PUSH-PROMPT, and then continue with K again with PUSH-SUBCONT. All that's left is to give this callback to setTimeout.

Then I can spawn independent threads:

["spawn-thread", 1],
["spawn-thread", 2],
["spawn-thread", 3],
["spawn-thread", 4],
["spawn-thread", 5]

Wat syntax certainly won't win a beauty contest, but it's already practical for adding concurrency and metaprogramming to JavaScript. Deployment is very easy. Include the single wat.js file, put together some code as JSON, and run it.

by Manuel Simoni ( at December 21, 2013 12:27 AM

December 19, 2013

Dave Winer

What if the Knicks had kept Jeremy Lin?

It's so funny, here we are almost two years since Linsanity, and the Knicks are a complete disaster. So what if the Knicks had kept Lin? It's a trick question, because it wouldn't have saved the Knicks, it wouldn't have even helped, but it probably would have destroyed Lin. He'd be where Raymond Felton or J.R. Smith are today. Wasted in body and spirit.

I saw a picture yesterday in an article about how to cope if you're the fan of an NBA team that sucks. There are so many of them. Not many as bad as the Knicks, but this is a year of extremes. Either you suck terribly, or you're great. And the distribution is mostly East vs West. Western teams are kicking ass. And for the most part the ass they're kicking is Eastern ass.

Anyway, back to the picture. It was a really sweet photoshop of LeBron James in a Knicks uniform. I had to look three times before my brain could parse it. What if LeBron had chosen the Knicks instead of Miami? Another trick question. He wouldn't be LeBron, the smartest and most driven player in the NBA (in addition to being the strongest athlete) today. LeBron wouldn't choose the Knicks because he had a choice. He went with the team with Pat Riley as CEO. And the owner, whoever he is, either just as smart as Riley and James, or he's smart enough to let them run the show.

Were it only so in NYC. We are stuck as a basketball town because one of the owners is absent, and the other is vain, over-confident, and as the Oracle says of Neo in the Matrix, "not too bright." It really is a toxic combination.

NYC, the richest city in still the richest country in the world. We have all the nicest things you can imagine, but we can't have a great NBA team because the guy who owns it thinks like a small-town boy. Could we trade teams with, say, Houston -- a town that has no appreciation for basketball? Or Indianapolis? They could probably use the money. What could we give almost any city in the US to take Dolan off our hands so we can engineer a good team, if not in 2013, or even 2017, maybe in say -- 10 years?

Because we're never going to get there with Dolan.

BTW, Carmelo Anthony is a wonderful player, and he's smart and he really cares. This is what's so great about basketball, it's an intimate sport. The players don't wear masks. And there are only five playing at a time. You get to study them. The Knicks are stuck in hell, and it's really no player's fault. A team is not the sum of the parts. You can't do math on the players on a team. The Knicks are proof of that. What the Knicks are missing is drive. You have to have talent, think as a unit, be smart, that's enough to get you on the court. Now what's your ambition? It's not what you say your ambition is, because Melo says his is to win a championship. But it's laughable when he says it. I'm sure he wants to be on a team that wins a championship. That means he has to hook up with a guy like LeBron. Years ago he was too young and lacked the confidence to let a stronger person boss him around. I think that's what the Knicks struggle is really about. The wearing-down of Carmelo's pride, and the circus sideshow, the comic relief, provided by Dolan.

Anyway it's fun to think about basketball, and more fun to write about it because none of it matters one bit. ;-)

December 19, 2013 06:06 PM

Jeru's tapes relocated

I did several workshops with Jeru Kabbal in the mid-late 90s.

I did a website for him, and archived his tapes when he died in 2000.

Also a transcript of one of his talks.

When I was preserving his site, I saw that the links to his tapes were broken. I had let a domain lapse. Then the other day I came across them in an archive, and put them in a safe place in a folder on I figure if any of my sites survive over time, it's this one.

Here are pointers to the tapes, in MP3 format.

Jeru's teachings helped put things in better perspective for me, maybe his wisdom can help other people too, over time. :-)


December 19, 2013 03:10 PM

HTTPS exploration continues

On Tuesday I posted a question -- how to serve HTTPS from an S3 bucket?

Several people suggested using CloudFront or CloudFlare. So yesterday I tried both.

These are not reviews. I'm just briefly reporting the results. I'm an HTTPS newbie. I'm looking for more info, and other options.


  • CloudFront is an Amazon service. Setup takes about five minutes, then about 20 minutes for them to provision it.
  • First, I set up a new bucket called I put a single file in it, hello.html, which contains a single line of JS, alert ("Hello World").
  • Then I went to the CloudFront panel in AWS, and created a new distribution. There's a big dialog with lots of options, but most of the defaults are fine. Choose one of your buckets, it assigns a domain name for you to use to access your distribution. You can provide a CNAME -- I did --, pointing to the domain they provided. You can choose HTTPS, which I did (the point of the experiment). I don't have a certificate, and I am new to HTTPS.
  • I was able to access hello.html via ordinary HTTP, and over HTTPS using Amazon's domain, but not using my domain. This method will not work for hosting Fargo in a bucket that can be accessed over HTTPS without (as I understand it) spending $600 a month.
  • Sticker shock. I wish the big companies had left OAuth as-is, complicated for sure, but widely deployed. An individual developer can't spend that much money to jump through a hoop for large platform companies.
  • Hope we can do something to lower the barrier for independent developers. Amazon or Dropbox could do something here. My opinion: removing barriers to deploying static JavaScript apps is good for business.


  • This service may be closer to doing what I need, but to find out I have to give them my credit card info, and I wish I didn't have to do that just to find out if it would work.
  • CloudFlare wants a whole domain to play with, which isn't a problem -- I have many that I'm not doing anything with. I gave them one and created a sub-domain, put an index file in it, a static HTML page that says hello.
  • To set it up, you go through a series of steps where you turn over DNS to them.
  • Now, it's not clear that they actually did anything -- because when I access the page I get the same headers that I got before I CloudFlare'd it.
  • Regardless, to get HTTPS you have to give them $20 a month. And it's not clear if that's on top of the $600 per month you have to pay for the certificate. (My guess that it is.)

December 19, 2013 01:07 PM

Alex Schroeder

Über die Bildung

A note to English readers: If this post showed up in your feed, you should probably switch to a different feed. Some suggestions: RPG only, just English.

In der WOZ las ich gerade Wer profitiert von der Uni im Netz? Was als gratis Bildung im Netz für alle begann, wird nun zum Werkzeug für Einsparungen an den Universitäten und damit für die Verschlechterung der nicht kommerzialisierbaren Eigenschaften des Studentenlebens: interessante Komillitonen, Politisierung, Engagement…

Auch für die Entwicklungshilfe hat man sich Unis am Netz gewünscht. Bezeichnend fand ich diese Passage:

Wie eine Studie der Universität Pennsylvania kürzlich nachwies, gehören achtzig Prozent der KursteilnehmerInnen auf der Plattform Coursera aus Ländern wie China, Indien oder Brasilien zu den Reichsten und am besten Ausgebildeten ihres Landes.

Die Zahlen zeigen ausserdem: Regelmässig schliessen weniger als zehn Prozent aller ursprünglich Eingeschriebenen einen MOOC ab – und nur rund die Hälfte davon erfüllt dabei auch die notwendigen Anforderungen für ein Zertifikat

Ich bin mir nicht sicher, wie das zu verstehen ist. Auch hier in der Schweiz gehen Kinder von Akademikern tendenziell eher studieren. Auch hier beenden sehr viele ihr Studium frühzeitig, fallen durch, wechseln… Jeder, der schon einmal online etwas organisiert hat, weiss, dass die Hemmschwellen für das nichts tun und das zu spät kommen weg fallen.

Grundsätzlich kann man vielleicht nur sagen, dass die Zahlen auf alle Fälle zeigen, dass Unis am Netz für viele Probleme keine Lösung sein können. Es ist schwieriger. Dies muss man wissen, auch wenn die Technologiegläubigkeit und der Optimismus unter den Verantwortlichen nicht erstaunen.

Wer sich noch nie mit online Kursen beschäftigt hat, kann sich ja mal die Khan Academy anschauen. “Learn for free about math, art, computer programming, economics, physics, chemistry, biology, medicine, finance, history, and more.” Tönt gut!

Hierzu habe ich zufälligerweise gerade auf Google den Artikel Comcast, Khan Academy Aim Multimillion-Dollar Partnership At Low-Income Families gesehen. Dort spricht Kahn das selbe Problem an. Die Mittleklasse nutzt die Angebote, die sie der ganzen Welt anbieten will, auch selber, und so bleiben die alten Strukturen erhalten.

Vermutlich ist es schwierig, den Armen zu helfen, sich selber zu helfen, ohne ihnen etwas zu geben. Umverteilung, Mindestlöhne, eine Reduktion der Wohlstandsschere scheinen mir langfristig bessere Massnahmen.

Was natürlich nichts daran ändert, dass ich Khan Academy ähnlich gut finde wie Wikipedia. Mehr Wissen, mehr Bildung! Dies allerdings als Entwicklungshilfe zu verkaufen, ist – wie gesagt – Technologiegläubigkeit und überzogener Optimismus.

Tags: RSS

December 19, 2013 07:36 AM

December 17, 2013

Alex Schroeder

PDF Button

I’m experimenting with a PDF button for this website. In the past, I suggested Print Friendly & PDF. Yesterday I learned about wkhtmltopdf, which does the same thing without depending on a remote service and their ad revenue. On a typical Debian host, you need to apt-get install wkhtmltopdf. This installs a binary and all the required libraries. The problem is that this version needs an X11 server in order to work, which you don’t have when using it on your website. In addition to a regular installation, you need to install a statically compiled binary which has been compiled with a patched version of Qt and no longer requires an X11 server.

In your Oddmuse config file:

$Action{pdf} = \&DoPdf;
push(@KnownLocks, 'pdf');

sub DoPdf {
  my $id = shift;
  local $StyleSheet = '';
  my $html = PageHtml($id);
  my $source = "$TempDir/document.html";
  my $status = '500 INTERNAL SERVER ERROR';
  open(HTML, '>:utf8', $source)
    or ReportError("Cannot write $source: $!", $status);
  # see GetHeader
  print HTML GetHtmlHeader(NormalToFree($id), $id);
  print HTML $q->start_div({-class=>'header'});
  print HTML $q->h1({-style=>'font-size: x-large'}, GetPageLink($id));
  print HTML $q->end_div(); # header
  print HTML $q->start_div({-class=>'wrapper'});
  # get rid of letter-spacing
  my $sperrung = '<em style="font-style: normal; letter-spacing: 0.125em; padding-left: 0.125em;">';
  $html =~ s/$sperrung/<em>/g;
  my $newthought = '<em style="font-style: normal; font-variant:small-caps; letter-spacing: 0.125em;">';
  $html =~ s/$newthought/<em style="font-style: normal; font-variant:small-caps">/g;
  print HTML $html;
  # see PrintFooter
  print HTML $q->end_div(); # wrapper
  print HTML $q->start_div({-style=>'font-size: smaller; '});
  print HTML $q->hr();
  print HTML $FooterNote;
  # see DoContrib
  SetParam('rcidonly', $id);
  SetParam('all', 1);
  my %contrib = ();
  for my $line (GetRcLines(1)) {
    my ($ts, $pagename, $minor, $summary, $host, $username) = @$line;
    $contrib{$username}++ if $username;
  print HTML $q->p(Ts('Authors: %s',
                      join(', ', map { GetPageLink($_) }
                           sort(keys %contrib))));
  print HTML $q->end_div(); # footer
  print HTML $q->end_html;
  print HTML "\n";
  my $target = "$TempDir/document.pdf";
  my $error = `/home/alex/bin/wkhtmltopdf --print-media-type --quiet '$source' '$target'`;
  ReportError("The conversion of HTML to PDF failed", $status) if $error;
  open(PDF, '<:raw', $target) or ReportError("Cannot read $target: $!", $status);
  local $/ = undef;
  my $pdf = <PDF>;
  ReportError("$target is empty", $status) unless $pdf;
  binmode(STDOUT, ':raw');
  print GetHttpHeader('application/pdf');
  print $pdf;

sub PrintMyContent {
  my $id = UrlEncode(shift);
  if ($id and $IndexHash{$id}) {
print qq{
<form action="$FullUrl"><p>
<input type="hidden" name="action" value="pdf" />
<input type="hidden" name="id" value="$id" />
<input type="submit" value="PDF" />

Let me know if it works for you while I try to figure out whether I need this at all. The position of the PDF button at the very bottom of the page is probably less than ideal.

As you can tell, the markup using increased Wikipedia:letter-spacing is messing it all up, which is why I had to fix it.

Tags: RSS

December 17, 2013 11:45 AM

Tim Ferriss

The Odd (And Effective) Routines of Famous Minds like Beethoven, Maya Angelou, and Francis Bacon

Wine is part of my creative process. How I use it has been influenced by other writers. Why reinvent the wheel?

Sometimes, peculiar routines are the key to sanity… and productivity.

For years, I wrote from 11pm-4am or so, fueled by carefully timed yerba mate tea, Malbec, and Casino Royale left on repeat in my peripheral vision.

But who am I? Let’s explore the odd and effective routines of several creative icons: Maya Angelou (author), Francis Bacon (painter), W.H. Auden (poet), and Ludwig van Beethoven (composer).

Here’s an appetizer, before we get to the full routines:

Maya Angelou rented a “tiny, mean” hotel or motel room to do her writing;
Francis Bacon preferred to work with a hangover;
W.H. Auden took Benzedrine the way many people take a multivitamin; and
Beethoven counted out 60 coffee beans (exactly!) each morning, and developed his compositions through walking and obsessive bathing.

Enjoy the detailed profiles below.

All were excerpted from one of my favorite books–Daily Rituals: How Artists Work–which contains nearly 200 routines of some of the greatest minds of the last four hundred years: famous novelists, poets, playwrights, painters, philosophers, scientists, and mathematicians…

Maya Angelou

Angelou (b. 1928) is an American author and poet best known for her series of seven autobiographies, which began in 1969 with I Know Why the Caged Bird Sings.

Angelou has never been able to write at home. “I try to keep home very pretty,” she has said, “and I can’t work in a pretty surrounding. It throws me.” As a result, she has always worked in hotel or motel rooms, the more anonymous the better. She described her routine in a 1983 interview:

“I usually get up at about 5:30, and I’m ready to have coffee by 6, usually with my husband. He goes off to his work around 6:30, and I go off to mine. I keep a hotel room in which I do my work–a tiny, mean room with just a bed, and sometimes, if I can find it, a face basin. I keep a dictionary, a Bible, a deck of cards and a bottle of sherry in the room. I try to get there around 7, and I work until 2 in the afternoon. If the work is going badly, I stay until 12:30. If it’s going well, I’ll stay as long as it’s going well. It’s lonely, and it’s marvelous. I edit while I’m working. When I come home at 2, I read over what I’ve written that day, and then try to put it out of my mind. I shower, prepare dinner, so that when my husband comes home, I’m not totally absorbed in my work. We have a semblance of a normal life. We have a drink together and have dinner. Maybe after dinner I’ll read to him what I’ve written that day. He doesn’t comment. I don’t invite comments from anyone but my editor, but hearing it aloud is good. Sometimes I hear the dissonance; then I try to straighten it out in the morning.”

In this manner, Angelou has managed to write not only her acclaimed series of autobiographies but numerous poems, plays, lectures, articles, and television scripts. Sometimes the intensity of the work brings on strange physical reactions–her back goes out, her knees swell, and her eyelids once swelled completely shut. Still, she enjoys pushing herself to the limits of her ability. “I have always got to be the best,” she has said. “I’m absolutely compulsive, I admit it. I don’t see that as a negative.”

Francis Bacon

Bacon (1909–1992) was an Irish-born British painter whose abstract portraits of grotesque, distorted figures made him one of the most distinctive and controversial artists of the postwar era.

To the outside observer, Bacon appeared to thrive on disorder. His studios were environments of extreme chaos, with paint smeared on the walls and a knee-high jumble of books, brushes, papers, broken furniture, and other detritus piled on the floor. (More agreeable interiors stifled his creativity, he said.) And when he wasn’t painting, Bacon lived a life of hedonistic excess, eating multiple rich meals a day, drinking tremendous quantities of alcohol, taking whatever stimulants were handy, and generally staying out later and partying harder than any of his contemporaries.

And yet, as the biographer Michael Peppiatt has written, Bacon was “essentially a creature of habit,” with a daily schedule that varied little over his career.

Painting came first. Despite his late nights, Bacon always woke at the first light of day and worked for several hours, usually finishing around noon. Then another long afternoon and evening of carousing stretched before him, and Bacon did not dawdle. He would have a friend to the studio to share a bottle of wine, or he would head out for drinks at a pub, followed by a long lunch at a restaurant and then more drinks at a succession of private clubs. When evening arrived, there was a restaurant supper, a round of nightclubs, perhaps a visit to a casino, and often, in the early-morning hours, yet another meal at a bistro.

At the end of these long nights, Bacon frequently demanded that his reeling companions join him at home for one last drink–an effort, it seems, to postpone his nightly battles with insomnia.

Bacon depended on pills to get to sleep, and he would read and reread classic cookbooks to relax himself before bed. He still slept only a few hours a night. Despite this, the painter’s constitution was remarkably sturdy. His only exercise was pacing in front of a canvas, and his idea of dieting was to take large quantities of garlic pills and shun egg yolks, desserts, and coffee–while continuing to guzzle a half-dozen bottles of wine and eat two or more large restaurant meals a day. His metabolism could apparently handle the excessive consumption without dimming his wits or expanding his waistline. (At least, not until late in his life, when the drinking finally seemed to catch up with him.) Even the occasional hangover was, in Bacon’s mind, a boon. “I often like working with a hangover,” he said, “because my mind is crackling with energy and I can think very clearly.”

W. H. Auden

Auden (1907–1973) is widely regarded as one of the twentieth century’s greatest poets. Born and raised in England, he became an American citizen in 1946. Auden won the Pulitzer Prize in 1948 for his long poem The Age of Anxiety.

“Routine, in an intelligent man, is a sign of ambition,” Auden wrote in 1958. If that’s true, then Auden himself was one of the most ambitious men of his generation. The poet was obsessively punctual and lived by an exacting timetable throughout his life. “He checks his watch over and over again,” a guest of Auden’s once noted. “Eating, drinking, writing, shopping, crossword puzzles, even the mailman’s arrival–all are timed to the minute and with accompanying routines.” Auden believed that a life of such military precision was essential to his creativity, a way of taming the muse to his own schedule. “A modern stoic,” he observed, “knows that the surest way to discipline passion is to discipline time: decide what you want or ought to do during the day, then always do it at exactly the same moment every day, and passion will give you no trouble.”

Auden rose shortly after 6:00 a.m., made himself coffee, and settled down to work quickly, perhaps after taking a first pass at the crossword. His mind was sharpest from 7:00 until 11:30 a.m., and he rarely failed to take advantage of these hours. (He was dismissive of night owls: “Only the ‘Hitlers of the world’ work at night; no honest artist does.”) Auden usually resumed his work after lunch and continued into the late afternoon. Cocktail hour began at 6:30 sharp, with the poet mixing himself and any guests several strong vodka martinis. Then dinner was served, with copious amounts of wine, followed by more wine and conversation. Auden went to bed early, never later than 11:00 and, as he grew older, closer to 9:30.

To maintain his energy and concentration, the poet relied on amphetamines, taking a dose of Benzedrine each morning the way many people take a daily multivitamin. At night, he used Seconal or another sedative to get to sleep. He continued this routine–“the chemical life,” he called it–for twenty years, until the efficacy of the pills finally wore off. Auden regarded amphetamines as one of the “labor-saving devices” in the “mental kitchen,” alongside alcohol, coffee, and tobacco–although he was well aware that “these mechanisms are very crude, liable to injure the cook, and constantly breaking down.”

Ludwig van Beethoven

Beethoven (1770–1827) was a German composer and pianist, and one of the most famous and influential composers in classical music.

Beethoven rose at dawn and wasted little time getting down to work. His breakfast was coffee, which he prepared himself with great care–he determined that there should be sixty beans per cup, and he often counted them out one by one for a precise dose. Then he sat at his desk and worked until 2:00 or 3:00pm, taking the occasional break to walk outdoors, which aided his creativity. (Perhaps for this reason, Beethoven’s productivity was generally higher during the warmer months.)

After a midday dinner, Beethoven embarked on a long, vigorous walk, which would occupy much of the rest of the afternoon. He always carried a pencil and a couple of sheets of music paper in his pocket, to record chance musical thoughts. As the day wound down, he might stop at a tavern to read the newspapers. Evenings were often spent with company or at the theater, although in winter he preferred to stay home and read. Supper was usually a simple affair–a bowl of soup, say, and some leftovers from dinner. Beethoven enjoyed wine with his food, and he liked to have a glass of beer and a pipe after supper. He rarely worked on his music in the evening, and he retired early, going to bed at 10:00 at the latest.

Beethoven’s unusual bathing habits are worth noting here. His pupil and secretary Anton Schindler recalled them in the biography Beethoven As I Knew Him:

“Washing and bathing were among the most pressing necessities of Beethoven’s life. In this respect he was indeed an Oriental: to his way of thinking Mohammed did not exaggerate a whit in the number of ablutions he prescribed. If he did not dress to go out during the morning working hours, he would stand in great de?shabille? at his washstand and pour large pitchers of water over his hands, bellowing up and down the scale or sometimes humming loudly to himself. Then he would stride around his room with rolling or staring eyes, jot something down, then resume his pouring of water and loud singing. These were moments of deep meditation, to which no one could have objected but for two unfortunate consequences. First of all, the servants would often burst out laughing. This made the master angry and he would sometimes assault them in language that made him cut an even more ridiculous figure. Or, secondly, he would come into conflict with the landlord, for all too often so much water was spilled that it went right through the floor. This was one of the main reasons for Beethoven’s unpopularity as a tenant. The floor of his living room would have had to be covered with asphalt to prevent all that water from seeping through. And the master was totally unaware of the excess of inspiration under his feet!”


To download the nearly 200 daily routines in Daily Rituals: How Artists Work, click here.

by Tim Ferriss at December 17, 2013 04:20 AM