I was working with Doc Searls this afternoon, and saw how Scripting News looks in the version of Firefox he has running on his laptop. It looks awful. One tab is visible all scrunched up in a corner of the window.

I have the latest Firefox on my Mac and it looks fine. All the tabs are where they are. If you're seeing the problem on your system and have any idea what the problem might be, please leave a comment below. It really bothers me that what Doc is seeing is so awful.

02/27/15; 05:23:42 PM

First, thank you for reading this blog.

Now I want to try to sell you on an idea.

The idea: Supporting the open web.

Everywhere you look things are getting siloized, but for some reason, I must be an idiot, but I keep making software that gives users the freedom to choose. If my software isn't the best for you, now or at any time in the future, you can switch to whatever you like.

I make it because I dream of a world where individuals have power over their own lives, and can help inform each other, and not be owned by companies who just want to sell them stuff they don't want or need.

I work hard. And I stay focused on what I do. But my ideas don't really get heard that much. And that's a shame, because if lots of people used my software, that would encourage more people to make software like it, and eventually we'd be back where we were not that long ago, with you in charge of your own web presence.

Anyway, I'm almost finished. I spent two years porting everything I care about to run in Node.js and in the browser. I don't plan to dig any more big holes. This is basically it.

What can you do? Well honestly, if you see something you think is empowering or useful here on my blog, please tell people about it. The tech press will not be covering it, so you can't find out about it that way. It would be a shame to have put all this effort into creating great exciting open software, only to have very few people ever hear about it.

Thanks again for reading my blog, and I hope to be making software for you and your friends for a long time to come.

PS: The place to watch, for the new stuff, the stuff that has the most potential of rewriting the rules of the web, is on my new liveblog. That's where I'm telling the story I think is so important.

02/27/15; 11:51:05 AM

Hear what Kobe Bryant thinks.

02/25/15; 11:33:58 AM

Eran Hammer posted a long piece yesterday about why he does not support a Node Foundation.

I am a relative newcomer to Node, having started developing in it a little over a year ago. I've shipped a number of products in Node. All my new server software is running in Node, most of it on Heroku. I love Node. Even though it's a pain in the ass in some ways, I've come to adore the pain, the problems are like crossword puzzles. I feel a real sense of accomplishment when I figure it out.

The server component of my liveblog is running in Node, for example.

I am new to Node but I also have a lot of experience with the dynamics Hammer is talking about, in my work with RSS, XML-RPC and SOAP. What he says is right. When you get big companies in the loop, the motives change from what they were when it was just a bunch of ambitious engineers trying to build an open underpinning for the software they're working on. All of a sudden their strategies start determining which way the standard goes. That often means obfuscating simple technology, because if it's really simple, they won't be able to sell expensive consulting contracts. He was right to single out IBM. That's their main business. RSS hurt their publishing business because it turned something incomprehensible into something trivial to understand. Who needs to pay $500K per year for a consulting contract to advise them on such transparent technology? They lost business.

IBM, Sun and Microsoft, through the W3C, made SOAP utterly incomprehensible. Why? I assume because they wanted to be able to claim standards-compliance without having to deal with all that messy interop.

As I see it Node was born out of a very simple idea. Here's this great JavaScript interpreter. Wouldn't it be great to write server apps in it, in addition to code that runs in the browser? After that, a few libraries came along, that factored out things everyone had to do, almost like device drivers in a way. The filesystem, sending and receiving HTTP requests. Parsing various standard content types. Somehow there didn't end up being eight different versions of the core functionality. That's where the greatness of Node comes from. We may look back on this having been the golden age of Node.

There are reasons why, once a technology becomes popular, it's very hard to add new functionality. All the newcomers want to make a name for themselves by authoring one of the standard packages. Everyone has an idea how it should be done, and won't compromise. So what happens is very predictable, and NOT BAD. The environment stops growing. I saw that happening in RSS, as all the fighting over which way to rip up the pavement and start over took over the mail lists. So when RSS 2.0 came out I froze it. No more innovation. That's it. It's finished. If you want to do new stuff, start a module (very much like the NPM packages of Node). Luckily, at that moment, I had the power to do that, as Joyent did with Node, when embarking on this ill-advised foundation track.

Now there are many things about Node culture that I don't understand, being a newbie, as I am. But based on what I know about technology evolution from other contexts, the lack of motion at Joyent wasn't a problem, it was realistic. It was what I, as a removed-from-the-fray developer want. I want this platform to stay what it is. I want to rock and roll in my software, not be broken every time someone decides we should hit the ball from one side of the plate, then the other, then back to the original. Nerd debates about technology never end, until someone puts their foot down and says, no more debates, it's done. And the confusion in those debates is always manipulated by the BigCo's who have motives that we'd be happier not really understanding. I know I would be. Nightmarish stuff.

I love Node. I want it to be solid, that's the most important thing to me. I'd love to see a list, in a very simple newbie-friendly language, that explains what it is that Node needs so desperately to justify both the fork, and the establishment of this foundation. Seems to me we might be pining for the good old days of last year before too long. ;-(

PS: Hat-tip to the io.js guys. In the RSS world, the forkers claimed the right to the name. At least you guys had the grace to start with a new name, so as not to cause the kind of confusion the RSS community had to deal with.

02/25/15; 10:54:26 AM

I now finally have a Narrate Your Work public page.

http://reader.liveblog.co/davewiner

This has been a goal of mine for many years.

I had a worknotes outline a few years back, but it wasn't like this.

It was published. This is just what I type as I type it.

I still have another level of project management in an outline that is not public, can't be, because it contains private information.

But I'm going to move more and more into the liveblog.

Also looking forward to actually liveblogging a live event with it. If I knew/cared more about the Oscars I would have done that. Maybe the NBA playoffs? We'll see.

02/24/15; 05:33:52 PM

Suppose you watched a movie illegally, because it was convenient to watch it at home, and you feel like a jerk for not paying the $15 for a seat in the theater.

There are lots of reasons not to go to a theater. Poor sound quality. People who bring infants to the theater, or talk about the movie loudly as if we were in their living room.

What if?

What if there was a way to pay for the movie, after-the-fact?

No movie chain is going to do this, so why not start a proxy for them?

  1. You'd log into a central site, if you're new, enter your credit card info

  2. Navigate to the page for the movie you just watched.

  3. Click the box, and click OK, and you've paid the fee.

I don't think it should be a voluntary amount. It should the the price of a ticket, either the average price, or the price at a theater local to you (think about this). This isn't charity, it's about convenience. You're not trying to avoid paying for the movie-watching experience, or negotiate a better price.

Where does the money go?

This is where it gets interesting.

At first, at least, no movie company is going to want this to exist. They might try to sue it out of existence. In the meantime, the money goes into escrow accounts, earning interest, to be paid to the rights-holder, when they demand it. Who is the rights holder? That's probably a large part of what will be litigated.

It would be like the lottery, the jackpot would keep growing, and the pressure would build (think about shareholders) to just take the money. And if that were to happen, we would have a whole new way of doing content on the Internet, for pay.

Why?

It's a way to bootstrap a new economy, one that will be useful in other contexts.

For example, I was just reminded that I could pay the New Yorker $1 per month to read all their articles. I would totally do this. If I didn't have to create an account, and give them all my info, and be subject to all the marketing these guys do. The price isn't just $1 a month. That's just what you pay so they can begin to aggressively upsell you. But I'd like to give them the money.

We need a middle-man here, some entity that doesn't belong to the vendors or the users. It cares equally for both. This would ultimately be good for the vendors, because the system is very inefficient.

02/24/15; 04:30:22 PM

Update: I came up with a different solution, so this is no longer a priority for me.

I want to write a routine that emojifies an OPML file.

https://gist.github.com/scripting/bcd76324a27b5567874b

It takes OPML text as input, parses it, walks the whole structure, and emojifies the text, and then replaces the original text with the new text.

At the end of the traversal, it re-serializes the XML text, and returns it.

However, I get an error at the crucial point, the call to serializeToString.

Uncaught TypeError: Failed to execute 'serializeToString' on 'XMLSerializer': Invalid node value.
02/24/15; 02:57:31 PM

This is really a very simple idea, but a hard one for a lot of people to grasp, probably due to the way our culture mystifies personal relationships. In the classic romance, the Other is only thought to really love you if they can anticipate your every need. If they can read your mind. This is actually an infantile version of love. A parent has to be able to discern the needs of an infant who doesn't have language to explain that his or her diaper needs changing, or has gas, or feels vulnerable and needs a hug, or whatever. It's a guessing game, but there's no choice. But once we develop language, you no longer have to guess what The Other is feeling, he or she can tell you.

There's a great scene in one of my favorite movies, As Good As It Gets, where Melvin is doing something very sweet for Verdell, the dog. An observer says "I want to be treated like that." What she's really saying is she misses being a baby. It's a fine feeling, because it really was, for many of us, great being an infant. But it's a bad basis for an adult relationship.

"Good fences make good neighbors" comes from a famous Robert Frost poem, and I think he's being ironic, but it's still true. If you want to really love someone, you have to always recognize that they are a separate person, and unless you ask, you do not know how they're feeling, or what they really mean, etc. The opposite is true. Unless you've said something, clearly, your husband or wife has no idea what you think. It's so boring to have to say everything, but that's how you stay sane and build trust.

Imagine a relationship as a circle, and draw a vertical line through it. On one side, write the other person's name, and write your name on the other side. You stay in your side, and they stay in theirs. You can touch, share, admire each other, tell jokes, share truths, but only from your side of the line. Once you put your presence in their body and start talking about what they think or see, you've just been invasive. It's a form of abuse, a violation, a psychic rape. Most relationships are complete sloshes, with people all over the place all the time, you never know who's where when. No wonder no one trusts each other! You can't trust someone if you never know when they'll show up inside your body, without permission.

Over the years, I've kept friendships with people who are good at this separation. It's how we get to be intimate, because it's safe to do so. The ones that have fallen away are those where the Other thinks they know what you really mean, even if it isn't anything you said or did. As Melvin said in As Good As It Gets, "this is exhausting." Keeping the Other on their side of the line, after a while, gets too much, and you choose to spend your time with other Others.

As Sting sang: "If you love someone set them free."

Same idea.

PS: I've been doing most of my writing last week on my Liveblog. I love it. At this point I think I will migrate my blog over there. Same old story on Scripting News, it's always in motion. For now if you want to keep up on my writing, you have to follow both blogs. There's a new tab on Scripting News with the full contents of the liveblog. So you don't have to travel very far to keep up. And of course the liveblog has an RSS feed.

PSS: This post is not about you.

02/22/15; 09:59:41 AM

I like to think my blog is interesting because of what I write here, but it's also interesting in how it works. And this is something, I think, anyone with a little experience in HTML can appreciate.

If you open most web pages of news sites, you'll see a combination of markup, things in <angle brackets> that tell the browser how to present stuff, and the text that makes up the page. Do a view-source on the home page of the New York Times for example.

If you do the same thing on the home page of Scripting News, you'll see something quite different. The content isn't there. Look more closely, near the top, there's a section of script code that says where it is:

var urlRss = "http://scripting.com/essayblog.xml";
var urlRiver = "http://rss.scripting.com/rivers/iowa.js";
var urlLiveblog = "http://liveblog.co/users/davewiner/rss.xml";
var urlCardFeed = "http://littlecardeditor.com/users/davewiner/rss.xml";
var urlFlickrFeed = "http://api.flickr.com/services/feeds/photos_public.gne?id=22221172@N00&lang=en-us&format=rss_200";
var urlAbout = "http://scripting.com/abouttab.opml";

Each tab on the home page displays a feed, each from a different source of content: my main blog, liveblog, cards, Flickr photos, links, river, and an outline with information about the site.

In other words: Scripting News looks like a blog, but it's actually a feed reader.

02/18/15; 11:17:35 AM

A picture named blog.pngThis is so recursive, I can't tell you how confused I am, I can only imagine how confused others are. But it works, so here goes.

I just added a new tab to Scripting News, called Liveblog.

It is based on the RSS feed for my liveblog.

The liveblog, as its name suggests, is faster than Scripting News. It contains notes from my work, ideas that are too long for tweets, or that I want to come back to later.

The liveblog is more casual than Scripting News. Not sure what that says about Scripting News. I've always wanted it to be loose and friendly, but there you go. I am posting regularly to the liveblog now, so if you want to follow me, that should be on my home page too, it seems.

Hopefully at some point there will be a "singularity" event where it all collapses down to one thing. But for now, all my feeds meet up on scripting.com.

And yes, I plan to release the liveblog software. But it's a tricky bit, and I want to get it right before letting it out in the wild. It's can be hard to change software after it's released, and I'm still learning a lot about this.

PS: It seems like today is a good day to take a screen shot of the Scripting News home page. Continuously updated since 1997.

PPS: Thanks to my friend Hugh MacLeod for the excellent cartoon in the right margin of this post, from the early days of blogging.

02/17/15; 12:03:11 PM

A picture named mywordOnIPhone6.png

I think myword.io finally looks good on a phone.

02/16/15; 07:15:23 PM

Yesterday I introduced two people on Facebook, people who I thought would very likely get off on each other's imaginations, humor, positive outlook. So of course I introduced them. I think there's real magic possible in these things.

There are billions of minds on our mote of dust suspended in a sunbeam. Very few of them ever get to engage. Maybe the secret of life is that there is a truth that can only be uncovered if two people connect and share something. They might not even know what it is. One person has a lock, the other a key.

Random things happen leading you to think of other things, and then you end up back where you started. Earlier in the day I had lost a huge file because I was editing it in a buggy app, still in development. Then, on Facebook, a question pops up. Maybe Google might have my lost OPML file in a cache somewhere. That led me on a train of thought back to 2002, when I published a post saying how cool it would be if Google would not only index OPML, but understand it. A very small amount of code would have been needed, but it isn't any code I could have written. They would have had to do it. So I did my best to explain why it would be a great idea. These things almost never happen, either no one is listening, or they think I'm too insignificant to matter (the fallacy of working at a huge company, they forget that people are the same size no matter where they work).

My whole career I've been asking for small favors from platform vendors, almost always being turned down, and then spending 5 or 10 years doing what they do just so I can put the teeny little bit of code in there that I wanted. Often the reason given is security, but it's usually not really that. It's being too busy to listen (I understand, me too, sometimes). Or a perception about the significance of the person doing the asking.

Maybe the two lovely people I introduced on Facebook, in collaboration, will figure out how to make something like this work. I think they're both the kind of people who would just say "WTF let's give it a try" if someone made a suggestion. I watch for that in people. It's the rarest quality, but they're the only people you can actually do stuff with!

BTW it would still be fucking awesome if Google would parse and display OPML. I have a great editor for it. And we need services to run at scale doing intelligent things with these structures. Oh the fun we could (still) have! I never give up.

PS: There were a few times people said yes to these kinds of things and incredible stuff did actually result. One was the NYT and permission to use their content for RSS. Another was Microsoft and XML-RPC, which led to the idea of websites having APIs. Something that's still shaking up the tech world today (though few people talk about it). NPR adopting podcasting is in the same class.

PPS: It happened in the inverse when Adam Curry tried repeatedly to get me to build a framework for podcasting in Frontier (long before it was called podcasting, btw). My mind was pretty closed to the idea, at first. But to both our credit, he persisted and eventually I heard what he was saying.

PPPS: A few days ago I wrote about awards for technology. Let's add another award. Best combination of ideas. Don't just reward people for being brilliant or brave, reward them for working with other people. The more diverse the interests, the more rewarding.

02/16/15; 02:03:57 PM

Explaining myword.io yesterday, to Doc, in a tweet: "Ev built a nice house but didn't put a door on it. So I built one so I could have a door." This happens a lot in software, it turns out. Then I tweeted "This happened with Matt Mullenweg's house too. I needed a door, he wouldn't add it, so I had to build the whole house just to get the door."

That was necessarily abbreviated to fit in 140 chars. More accurately, I needed an extra bedroom for each post so the source code for the post could be stored alongside the rendered version.

Why the source code?

So what really happened without all the metaphors?

In the case of WordPress, let's say you want to make a great blog post editor, but you don't want to have to write a whole blogging system, or you want to let people use it with WordPress which is incredibly popular.

So the user creates a post, saves it, we render it, then send it to the blogging platform, WordPress. The author makes some changes, and it's still good, we just tell WordPress to update the post. But what happens if two weeks from now, the editor is long-closed, or the user is on another system, and they need to update the post? No can do. Because I don't have the source code for the post.

I can get the rendered version from WordPress, but we were working at a higher level. If we had had a place to put the source, alongside the rendered version, we would have been in business.

I asked, nicely I hope

I asked that WordPress allow me to store a bit of data along with the post. They did consider the idea, but explained that this might create security issues, so they couldn't do it. So I build a whole CMS, so I could have the editor I wanted. This post is written using that CMS.

The missing front-door on Medium

Re Ev's product, Medium -- I wanted a front door so I could hook their great rendering engine into my writing environment. I really shouldn't be doing what I'm doing with myword.io, they should just provide an easy way for other tools to hook in.

What I have is 90 percent of the effect people are looking for, and it's good for the web. An ecosystem could develop around it. I know Ev doesn't believe in software ecosystems. Fine. Let's see if he's right.

I know there are great CSS guys out there who don't work for him. myword.io is open source, so anything can happen. And maybe writers will help this part of the web stay free from Silicon Valley siloization. I know it's a dream, but I'm a dreamer.

02/13/15; 01:18:52 PM

Tweets are objects

Twitter calls them tweets, but in programming terms, they are objects.

Objects have attributes. If an object has a picture attached to it, that should not be represented as part of the text attribute of the object. There should be a separate attribute for each picture. Yet, totally for historic reasons, that's how it works in Twitter.

Note that in the API they are objects. It's just in the UI that they aren't. That seems wrong.

Hyperlinks are mature technology, let's use them

When Twitter was invented we already had conventions for embedding addresses in text. They are called hyperlinks. I think Twitter's designers should decide if they want to have hyperlinks, and if so they should support them the way the web does. There was no good reason to make it work differently. I guess at the time Twitter had problems scaling their servers, so that's where their attention was focused. But those days are behind us.

Neaten up tweets, get rid of the dangling URLs

Seriously, the onboarding process of Twitter is made more difficult and confusing for people because of all those URLs dangling all over the place. When showing a non-technical user Twitter you have to tell them to ignore those things. Or try to explain why some tweets have two URLs and what they mean. It's 2015. It's almost ten years. Wouldn't it be great to finish this product, really, before it turns ten?

Make images an attribute (actually in some cases I think they are). Or allow text to be hyperlinked. Even better: do both.

140 character limit? Give it up

And while you're at it, let us put more than 140 chars in a tweet. Yes I know the drill, it's supposed to be better if people are forced to be concise. To which I say "Have you looked at your timeline recently?" There are lots of ways to not be concise, and people are using all of them. Give it up. It's over. And btw there are plenty of important, good ideas that require more than 140.

Hashtags are intimidating, they could be easy, even fun

Another thing: It should be easy to ask Twitter what a given hashtag means. If necessary use Mechanical Turk to implement this. In this area, Twitter is mysterious and difficult for newbies and experts alike. These are easy fixes. At some point Twitter stopped improving. Use some of the resources you have to fix them! It's long overdue.

Hashtags are not some obscure technical artifact, as they were when Twitter started. They are now part of human language. Look at ads on buses if you don't believe me. I think baseballs have hashtags on them now!

If Twitter made hashtags easy people would cheer hooray! when Dick Costolo walked into a room. (Not that they don't already.) Hey you could even make the definitions funny.

02/13/15; 11:16:17 AM

This kind of shit happens all the time.

02/13/15; 10:52:06 AM

We met on October 16 last year at a theater district bar in NYC.

It was a getting-to-know-you meeting. Lively conversation, even though our points of view were very far apart. I liked him. It's so sad that he's gone.

Whenever a Carr column popped up in my river I read it from beginning to end.

02/12/15; 10:50:58 PM

I have a new writing tool I'm working on and wanted it to be easy to create beautiful essay pages from it, like Medium. But Medium doesn't have an API. So I made an essay-viewer that has one.

http://myword.io/

Now, I'm not a great CSS hacker. That's obvious. But all that's needed is a framework to get started. That's the idea.

I'm going to keep iterating over it. I really like the way it feels. And if you have any ideas on how to improve it, please feel free to fork.

How to make an essay of your own

  1. It's not pretty.

  2. You have to type in a technical language called JSON. It makes sense and it's pretty simple, but it's also exacting. If you misplace a quote or a comma it will fail. If you've been thinking you want to learn to code, this would be a very easy way to start. (Another way of saying that programming isn't easy.)

  3. You must have a way of storing a file in a public place with an http:// address. I like to use the Public folder in Dropbox.

  4. Start with one of the example JSON files, for example this one.

  5. Edit it, and upload it. Suppose the new address is this: http://someaddress.com/my.json

  6. You can get myword.io to display it with this URL:
    http://myword.io/url=?http://someaddress.com/my.json

That's really all there is to it!

An example that works

http://myword.io/?url=http://liveblog.co/misc/demo.json

02/12/15; 01:58:22 PM

Note: Small spoiler re Boyhood movie at the very end.

I read a story on Joey de Villa's blog yesterday about an over-55 community in Florida where people have wild consensual sex all the time. Being over 55 myself I have to say it sounded interesting.

I'm getting ready for something different. I like programming, and I'll keep doing it for sure, as long as my right arm holds up (I'm having pretty radical RSI pain right now). But I'm not trying to change the world, or make a billion dollars. I have no expectation that I can change the world, and no great ideas on how to do it either. And I don't need more money than I have saved, I think. The stock market been berry berry good to me. (You have to be of a certain age to get that joke.)

Anyway the retirement community story said something. They've thought of everything by now. There isn't room to be innovative in lifestyle anymore. Back when I was a kid, that's what we thought we were doing. Creating something new in life. But the hippies are either gone or very old. Did you see what Joni Mitchell says about Bob Dylan? She looks like my grandmother! There's just a cranky old person being cranky. No the hippies didn't really break through in lifestyle. We all got old anyway.

Here's the thing: it's got to be even worse for young people with kids today. That feeling that everything is all figured out. There isn't any need for me to think up anything creative to do with my life. If I try, I just find out that someone thought of it long ago, and it has a price tag. So you look for little ways you can be different. Unfortunately not vaccinating kids turned out to be one of them. It could have been not eating cheese, something harmless. But it was vaccinating kids.

I thought Obama understood this, btw, and had ideas for how to involve all of us in making the world work better. If the US can elect a black president, can't we lead the world in making a difference, as people? Nah, he didn't get any big ideas until Year 6 of his presidency, when it's almost too late. And his big ideas didn't turn out to be very great either. Just that he could be an asshole to the Republicans and they might relate to that, appreciate that, respect that. It was true back at the beginning and he should have been doing that all along. And it would have been nice if each of us had a way to feel our life had meaning, that we were making a difference, and being creative, heard and understood -- by someone, anyone. I think that's the real crisis of our times, in the first world at least.

The mom in Boyhood said it best: "I just thought there would be more."

02/11/15; 09:27:52 PM

The other day my dear friend NakedJen was waking up to the power Facebook has because we use their system. She saw an endorsement by her friend, in the right margin on Facebook, of a product. It had her picture on it. She wondered if her friend had been paid for the endorsement, or even consulted. While I don't know for sure, I think the answer is "neither." Facebook has the right to do that. I'm sure it's in the user agreement. Which we all agree to, or we wouldn't be using Facebook.

The conversation continued.

I told her that I had stayed off Facebook for years because I didn't want to appear to endorse this system. But eventually the battle was lost, and my holding out wasn't accomplishing anything other than cutting me off from a social phenomenon. If I wanted to develop software in a post-Facebook world, if I didn't understand Facebook, my software would be missing an important historic precedent. Facebook exists, and nothing I can do can change that. So I might as well join the party, and I did, and no regrets.

Thing is, we've already ceded this kind of power to Google with video via YouTube. I heard a report on NPR on Sunday that was very depressing, an interview with a musician saying that YouTube had given her an agreement, take it or leave it, that said either you sign everything over to us, or you can't be part of YouTube. I didn't get the full story, just the gist. She said she thought the Internet was going to free us from the music industry. But it didn't do that. The music industry has rebooted, on the Internet. The money just flows to different bank accounts now.

You can see the process of ceding control happening right now, as essayists post their stories on Medium instead of their own blogs. There seems to be an assumption that you get more flow if you do this. I kind of doubt it. But even if there were more flow, you're ultimately forcing all of us to accept a deal that's probably going to be as bad as or worse than the one Facebook and YouTube have given us. Why? Because the lawyers and entrepreneurs of tech are learning, and they're getting better at grabbing, and users are not acting in their self-interest, any more than they were when Facebook and YouTube were taking over.

But even today it's not too late. Because economically and technically, we could reproduce what we have on Facebook on open systems, where everyone controls their own space, without signing over the kinds of rights that make users feel used. We saw some of the enthusiasm when Diaspora launched a few years ago, but they were college students, and weren't realistic about how to bootstrap such a system. You might say But Zuck was a college student when he booted up Facebook. But that system got to grow slowly, and their mistakes weren't exposed so quickly because they were small when they happened. If you wanted to boot up something that would do what Facebook does, today, you'd have to be prepared for a much bigger user community, almost immediately.

But what is Facebook, really? Where is the value in it, and is that so hard to reproduce? Seems to me it's basically a discussion board with a network data structure called "the graph." It's FriendFeed 2.0 (the current Facebook was designed by the creator of FriendFeed). There doesn't appear to be any rocket science in there. Maybe there is and I'm missing something. (There's no mystery to a graph. When I was a math undergrad I studied graph theory and wrote software that processed graphs. Long before there was a Facebook.)

Economically, there are huge economic resources that can be marshalled by users pooling their money. This isn't speculative, the money does flow. And I don't think each Facebook user consumes all that much in the way of computing and storage resources. $100 a year perhaps? Would you be willing to pay that to control your online destiny? You probably pay half that each month to your ISP.

It seems to me that all that's needed is the will to do it. By a few developers, and by a few users, to get a bootstrap started.

I'm not advocating anything. This isn't a proposal of any kind. But I thought about this the other day and asked myself the question -- is it possible? And I decided it is possible. So I thought, being a blogger and a developer and a user, as I am, that I should say that.

02/10/15; 10:05:03 AM

This began as an outline on my liveblog, but I felt the idea deserved more attention.

The Crunchies are a product of what I call the VC-based tech industry. But that's not the only tech industry. There's so much more going on here than bankers and advertising. I started making a list of awards I'd like to see, here it is, with some ideas.

Open format and protocol of the year

  • Past honorees would include HTTP and BitCoin, as examples.

  • Hackathons please include these among your commercial sponsors' APIs. It's important to build around open formats and protocols too.

Hall of Fame

  • People or products that influenced all that came after. We have a lot of catching up to do here. For me, the big ones are the C programming language, the PDP-11 machine architecture, Unix, Visicalc, 1-2-3, the Macintosh and IBM PC, Mosaic, Flickr, Twitter.

  • Like sporting halls of fame, we should also include leaders who made a difference, and journalists who covered our work intelligently and with care.

Giving back

  • Giving money to hospitals is great. But let's honor technologists who got rich and gave back to the ecosystem that produced the technology that made their work possible. This would be pure philanthropy, not embrace and extend. There is very little of this, but awarding it would create incentives for there to be more.

User trust

  • What company gave the users freedom to switch. The bigger the trust, the more we want to honor you.

Best commercial API

  • We hardly ever compare them. Last year I discovered there was a huge diff betw Twitter's and Facebook's APIs.
02/09/15; 01:05:39 PM

Here's a link to my new liveblog software (still very much in development).

Try viewing that link in Twitter's card validator.

I see an error that isn't help me to figure out what's wrong.

ERROR: FetchError:exceeded 4.seconds to Portal.Pink-constructor-safecore while waiting for a response for the request, including retries (if applicable) (Card error)

If you have experience with Twitter card metadata, do you have any ideas about how I can get this working? I'd really like to have links look as good in Twitter as they do in Facebook. (That's a requirement, not a like.)

Thanks in advance!

I'm trying to think but nothing happens!

Update -- found the problem

Marco Fabbri confirmed the metadata was valid by storing it on another server and it validated. He said to check if I was getting a call from twitterbot. His theory was my Heroku server was blacklisted because of another app running on the same physical machine. This theory turned out not to be correct, but it led me to the fix.

  1. I was getting a request from Twitterbot, for /robots.txt.

  2. My little server app wasn't doing anything special for that file, and it thought it was a twitter user, so it tried to fetch its reader app, opml file, etc, and got lost.

  3. Twitter got a timeout for the /robots.txt call.

  4. It barfed.

The fix.

  1. Add a special case for "/robots.txt" and return a 404.

Result -- twitter love!

02/08/15; 01:28:16 PM

People use blogs primarily to discuss one question -- what is a blog? The discussion will continue as long as there are blogs.

It's no different from other media, all they ever talk about is what they are. We got dinged by the NY Times because all bloggers talked about at the DNC was other bloggers. But what were they busy doing -- talking about other reporters, except when they were talking about bloggers -- talking about bloggers.

Nothing wrong with it.

In the early days we joked that they were watching us watch them watch us watch them. And so on.

In 2003, when I was beginning my stint as a fellow at Berkman Center, since I was going to be doing stuff with blogs, I felt it necessary to start by explaining what makes a blog a blog, and I concluded it wasn't so much the form, although most blogs seem to follow a similar form, nor was it the content, rather it was the voice.

If it was one voice, unedited, not determined by group-think -- then it was a blog, no matter what form it took. If it was the result of group-think, with lots of ass-covering and offense avoiding, then it's not. Things like spelling and grammatic errors were okay, in fact they helped convince one that it was unedited. (Dogma 2000 expressed this very concisely.)

Do comments make it a blog? Do the lack of comments make it not a blog? Well actually, my opinion is different from many, but it still is my opinion that it does not follow that a blog must have comments, in fact, to the extent that comments interfere with the natural expression of the unedited voice of an individual, comments may act to make something not a blog.

We already had mail lists before we had blogs. The whole notion that blogs should evolve to become mail lists seems to waste the blogs. Comments are very much mail-list-like things. A few voices can drown out all others. The cool thing about blogs is that while they may be quiet, and it may be hard to find what you're looking for, at least you can say what you think without being shouted down. This makes it possible for unpopular ideas to be expressed. And if you know history, the most important ideas often are the unpopular ones.

Me, I like diversity of opinion. I learn from the extremes. You think evolution is a liberal plot? Okay, I disagree, but I think you should have the right to say it, and further you should have a place to say it. You think global warming is a lie? Speak your mind brother. You thought the war in Iraq was a bad idea? Thank god you had a place you could say that. That's what's important about blogs, not that people can comment on your ideas. As long as they can start their own blog, there will be no shortage of places to comment. What there is always a shortage of, however, is courage to say the exceptional thing, to be an individual, to stand up for your beliefs, even if they aren't popular.

I sat next to Steven Levy the other night at dinner in NY. He volunteered that in his whole career he had never written a word that wasn't approved of by someone else, until he started a blog. I applaud him for crossing the line. I give him a lot of credit for writing without a safety net. It really is different. Comments wouldn't make the difference, what makes the difference is standing alone, with your ideas out there, with no one else to fault for those ideas. They are your responsibility, and yours alone.

For me, the big rush came when I started publishing DaveNet essays in late 1994. I would revise and edit, for an hour maybe more, before hitting the Send button. Once I did that, there was no turning back. The idea was out there, with my name on it. All the disclaimers (I called the essays "Amusing rants from Dave Winer's desktop") wouldn't help, if the ideas were bad, they were mine. But if they were good, they were mine too. That's what makes something blog-like, imho.

Note: This is a re-run of a post from 2007. On-topic in light of the "blogging is dead" debate. This is what a blog is, imho. DW

02/07/15; 11:34:19 AM

This is the story of nodeStorage.

In April last year I decided it was time for me to get my Twitter act together in my new JavaScript-based work environment. Back when I was working primarily in Frontier, and before the great breakup with Twitter and app developers, I had a pretty easy Twitter programming interface. I wanted the same thing for apps written in JavaScript in the browser.

It took a total of about two months from beginning to end to get it all working and to get a few apps built on top of it to prove that I had a complete interface.

Then I got interested in Facebook, and realized I'd have to do the same thing for it, and when I started I figured it would take about two months, the same amount of time I had spent on Twitter. Nope. It took two days. That's because Facebook had written a special library for browser-based JavaScript apps that hides all the details of connecting with Facebook from the browser.

This has value

At that point I realized that what I had in my glue for Twitter had value on its own. There was no other Node.js package that was as complete or easy. So I spent some time cleaning it up and adding S3-based storage (all apps need storage), and last month I released it as MIT-licensed open source.

That's nodeStorage.

Why it's a big deal

  1. It makes Twitter as easy to program in browser-based JavaScript as Facebook.

  2. It adds storage, which even Facebook doesn't offer.

It takes the Twitter API, which was significantly less easy than Facebook's and gives it parity, and adds an essential feature, making app development on top of the Twitter API incredibly easy and most important complete for app-building.

Now, I understand some people feel burned by Twitter, and don't want to risk building on its API, but nodeStorage takes a lot of the risk out of it. And I don't think today's Twitter is as concerned about app developers as the earlier version was.

Anyway, that's the story! If you're looking for an easy way to get started with the Twitter API and you can deploy a Node.js app, then nodeStorage is probably what you're looking for.

02/05/15; 06:04:40 PM

There wasn't much response to this post, so I won't be doing the office hours this afternoon in the city. Thanks to those who did respond. I'm always happy to look at products created by people who read this site, so please feel free to send me links via email. Thanks!

I'm thinking of holding informal "office hours" at a coffee place south of market this afternoon. If you have an interest, we could talk about your development project (esp if it's JavaScript) or talk about open formats and protocols, or my various projects, or other tech stuff. Thinking mainly of Scripting News readers. And please no trolls. If you have an interest, send me an email -- dave.winer@gmail.com.

02/03/15; 11:54:18 AM

Seahawks fans -- remember the 12th man concept?

That means there is no "they."

Maybe it was a dumb call. It's a test. Do you own it or complain like a mere fan. If you're on board, there's always next year.

Spoken as a Mets/Knicks fan, with no illusions about what that means.

02/02/15; 10:20:49 AM

Last built: Fri, Feb 27, 2015 at 5:30 PM

By Dave Winer, Sunday, February 1, 2015 at 8:41 PM.