[This episode is sponsored by Frontend Masters. They have a terrific lineup of live courses you can attend either online or in person. They also have a terrific backlog of courses you can watch including JavaScript the Good Parts, Build Web Applications with Node.js, AngularJS In-Depth, and Advanced JavaScript. You can go check them out at FrontEndMasters.com.]
[This episode is sponsored by Codeship.io. Don’t you wish you could simply deploy your code every time your tests pass? Wouldn’t it be nice if it were tied into a nice continuous integration system? That’s Codeship. They run your code. If all your tests pass, they deploy your code automatically. For fuss-free continuous delivery, check them out at Codeship.io, continuous delivery made simple.]
[This episode is sponsored by Hired.com. Every week on Hired, they run an auction where over a thousand tech companies in San Francisco, New York, and L.A. bid on JavaScript developers, providing them with salary and equity upfront. The average JavaScript developer gets an average of 5 to 15 introductory offers and an average salary offer of $130,000 a year. Users can either accept an offer and go right into interviewing with the company or deny them without any continuing obligations. It’s totally free for users. And when you’re hired, they also give you a $2,000 signing bonus as a thank you for using them. But if you use the JavaScript Jabber link, you’ll get a $4,000 bonus instead. Finally, if you’re not looking for a job and know someone who is, you can refer them to Hired and get a $1,337 bonus if they accept a job. Go sign up at Hired.com/JavaScriptJabber.]
[This episode is sponsored by Component One, makers of Wijmo. If you need stunning UI elements or awesome graphs and charts, then go to Wijmo.com and check them out.]
CHUCK:
Hey everybody and welcome to episode 135 of the JavaScript Jabber Show. This week on our panel, we have Dave Smith.
DAVE:
Hello, world.
CHUCK:
Jamison Dance.
JAMISON:
Hey friends.
CHUCK:
I’m Charles Max Wood from DevChat.TV. And this week we have a special guest, Ward Cunningham.
WARD:
Hi there.
CHUCK:
Do you want to introduce yourself Ward, real quickly?
WARD:
Well, I’ve been a long-time developer, best known for making the first wiki which was an advocate’s wiki. It’s a place where people who cared about patterns and pattern languages got together and talked about how they might influence design. It was really kind of a birthplace for what we now call agile software development. So, that’s a couple of cool things. And I still love programming. And I still get paid for it, too.
JAMISON:
[Chuckles]
DAVE:
Very cool.
JAMISON:
I regularly use c2 wiki just in, I don’t know. I come across it all the time, so it’s still a really valuable resource.
WARD:
Yeah.
CHUCK:
Yeah, awesome.
WARD:
Yeah, there’s still a community there. You know, its high point was probably years two through five. It took a year for people to really catch on to what it was and to get enough accounts to get on the net, because this started in early 1995. But five years after that, the encyclopedia people got ahold of it and made me famous. [Laughter]
DAVE:
Awesome.
CHUCK:
I love it. So, we brought you on to talk about the Smallest Federated Wiki.
WARD:
Yes.
CHUCK:
Do you want to give us an overview of what that is about?
WARD:
It was called the Smallest Federated Wiki because I had this notion at the IndieWebCamp that we could knock it off as an interesting prototype in a day. And three years later, I’m still working on it. So, I dropped the ‘smallest’ part. But you know, it was basically to encourage people to not overthink things. Let’s just see this federation concept work. And of course, we know federation email is federated. It used to be more federated. Now most people just go to Gmail.
But this concentration of our cyber lives onto a handful of servers was considered a real problem at the IndieWebCamp. And I admitted that I had seen the way a big wiki would prevent little wikis from flourishing, because why would you write in a little wiki when there’s a big wiki with more readers?
So, I had seen that capture effect firsthand and was a little saddened by it.
And so, I’ve been pondering how to fully distribute a wiki. My original thought would be it was servers, servers talking to each other. And then you would just hop onto your nearby server and find out what it had brought you, because that’s really the experience I had. I had this wiki running under my desk and I was serving the internet through a 14.4 modem. But I had Ethernet from my desk computer to that server. So, it was fast for me and slow for everyone else.
JAMISON:
[Chuckles]
WARD:
But you know, I also was careful to not do too many images or whatever, because I knew I was going through 14/4. I always made everything nice and tight. And the people who would read it would be reading it through their 14.4 modems and they would meet me at conferences. It’s, “How do you make that site so fast?”
JAMISON:
[Chuckles]
WARD:
And I explained, “It’s because I had a 14.4 modem.” But that was really it. It stayed very text-y and very simple. But after years of everybody else in the world making a wiki, I got around to having another go at it. And that’s certainly relevant to this call because the thing that I learned is that the center of sharing was not servers talking to each other, but a single page application talking to a bunch of servers.
DAVE:
Oh, cool.
WARD:
Using this cross-origin resource sharing. And so, I’ve learned a lot of JavaScript. And I’m very excited about its potential, especially when you do this cross-origin stuff, because you bring stuff from different sites into one object space. And even though it’s designed not to do this, you can get it to have those pages (I call them pages, wiki pages), work together in one webpage. And that’s a pretty exciting model, I think.
DAVE:
Yeah. So, have you preserved the requirement to operate on a 14.4 modem?
CHUCK:
[Chuckles]
WARD:
Well, you know I do yeah, in some degree. If you talk to the server and ask for an HTML page, it will give you one and it doesn’t render much. But it will put images into text pages. And that makes sure that even stupid robots can understand what’s there.
DAVE:
Super cool. I kind of wish we could do an informal poll of our listeners right now and have them raise their hand if they ever got on the internet with a 14.4 modem.
CHUCK:
[Laughs]
DAVE:
I know I did. But I’m sure a lot of people listening haven’t. Anyway.
WARD:
But you don’t get that nice object model with a text-based browser. You see one page at a time.
CHUCK:
Ward, you cut out there for about a minute.
WARD:
Oh no.
DAVE:
Oh, sorry.
JAMISON:
So, you were talking about the object model that you don’t get. Can you explain a little bit more what you mean by the object model that the Federated Wiki has? Or the Smallest Federated Wiki has?
WARD:
Yeah. Well yeah, I call it Federated Wiki now. In fact, we moved the repository out of my space on GitHub where it was called Smallest Federated Wiki and it’s now on an organization called fedwiki for Federated Wiki. Yeah, the thing that’s interesting is it’s all fetch pages from different sites and pages are represented in JSON. And it’s a very simple JSON. But the paragraphs of JSON are tagged with the name of a plugin that can interpret it.
So, one plugin we use all the time is called ‘paragraph’ and it just renders a very simple wiki markup as a text paragraph. And another one’s called ‘image’ and it does the obvious thing. But we can have, one I like is the ‘method calculator’. You type in a sequence of operations and it will compute an answer. But if you refer to a variable that isn’t defined, it will go looking around to see if it finds it on some other page you might have read. So, the pages are communicating in an interesting way.
CHUCK:
So, with it being federated, I’m a little bit confused here as to how it all works, but…
JAMISON:
First of all can you define what federated means?
CHUCK:
Yeah.
WARD:
Well, it means that I can write a link on a page in my server and when I click it will look on my server to see if it has that link. And if it doesn’t find it on my server it will go to your server, and then Chuck’s server, and around and around looking for it. It’s like the same way object inheritance works. You send a message to self and if self doesn’t know how to handle it, it goes and looks around in the hierarchy. In my federation, that’s all done with JavaScript code handling that click.
And it needs to know about the sites that could be talking about. And that’s done through a mechanism called the neighborhood.
So, when you start browsing your neighborhood is one site. And as you start clicking and clicking and clicking, it will grow until it’s a dozen sites or two dozen sites. And each time it learns of a new site, this single page app, it goes to that site and fetches a site map so it knows all the pages on that site. The idea is that we could have dozens of pages in a locality. Not dozens of pages, dozens of sites, each with hundreds of pages. But that would overlap with some other dozens of sites and hundreds of pages about something else, or some other community. and when they are introduced to each other, then all of a sudden you’ve got, what did I say, 200, 20 sites with 200 pages, whatever arithmetic it is.
JAMISON:
Sure, sure.
WARD:
So, the idea is that as I click around, the page name is more important than where it found it from. And it’ll look around for a page by page name.
JAMISON:
So, is that per instance of the app running in the browser? It stores the state of what your neighborhood is in the single-page app itself?
WARD:
Yes. So, if I’m weaving this web of associations I will often have, or if I have tabs that are rooted in different places each with different collections of sites merged together to form a neighborhood. In fact, if a neighborhood gets too big, it gets confusing. If you type a search it searches the neighborhood and you’ll find too many results. So, you like to keep the neighborhood size to what you’re thinking about on that tab. But it learns about sites by just finding pages that have traveled around through the federation. And if a page has been to three different sites and you look at that page, just looking at the page will say, “Oh, well I better get the site maps for those three different sites.” And so, that’s how the neighborhood grows.
JAMISON:
Sure. It’s kind of a beautiful concept. It seems like a lot of the connections on the web feel very static. And you’re building these strong links between things with URLs and stuff like that. And this is a lot more ephemeral. And it seems like you might create a Federated Wiki and you’d go back the next day and you might not necessarily be able to get that same state back.
WARD:
That certainly happens. One thing you find yourself doing is saying, “I better grab something off that site and put it somewhere in my site that I won’t lose it.” And then you know you’ll always find your way back. Of course, there’s no guarantee when you go back to it that it’ll still be up.
JAMISON:
Sure.
WARD:
And so, that’s all the more reason that if you find something that you like, you should copy it to your site. And the licensing is this Creative Commons Attribution, which are alike. So, as you build up a site you’re drawing in content from everywhere else. And because it remembers where that page has been, you’re weaving your site into this corner of the federation. I’m assuming that the federation will be thousands or millions of servers. Right now it’s probably dozens or maybe hundreds. Nobody actually has to tell me if they put a server up. So, I don’t know for sure.
CHUCK:
Oh, you should put that into the license.
JAMISON:
[Laughs]
WARD:
Yeah, that they have to tell me. Well, I’ve worked real hard to make sure that nothing about this requires anything centralized. And that’s, it just, everybody else is trying to figure out how to make things more centralized. So I figure it’s a good time for me to try to make things less centralized.
JAMISON:
Yeah, it really feels like a technology built off of philosophy instead of just trying to solve a problem almost.
WARD:
Yeah, and it kind of suffers from that in the sense that if you know what the problem you’re trying to solve is then you can take a lot of shortcuts and go straight to that solution. But I’m building a technology that nobody actually asked for.
CHUCK:
[Chuckles]
WARD:
And so, I have to guess what they’ll want in the future. And what I like to think about is, you know how stories are going. Let’s call it gossip or folk tales, or anything cultural. It gets, word gets around. And so, I want the pages I write and the pages you write to circulate in that same way where what server they happen to be on at the moment is not so important. But that just means I have to write JavaScript that makes that seem normal.
So, the blogosphere of course worked this way. People talked about the blogosphere and people would quote their blogrolls and stuff like that. But every blog tried to be different. And there was this idea that you would quote from blogs but you wouldn’t just take pages wholesale. So, I just said, “Well, let’s make the pages more similar and make it easier to take them wholesale and call that a commons. Not a blogosphere but a Creative Commons.” And it’s a very different way to think.
CHUCK:
So, let’s say that I want to set up a site, a node, or whatever you want to call it, set up a server. Do I
just go and basically clone the GitHub repository onto my machine and run it on Node.js?
WARD:
Yeah, yeah. That’s a good way to do it. It is an npm packaged named wiki. So you can npm install wiki and you’re up and running.
CHUCK:
And then is there a client for it as well?
WARD:
Well, in the GitHub we have broken it down to a bunch of different repos. There’s a repo for the server, the Node version, a repo for there’s a Ruby version of the server. We have a repo for the client code. But then the client code has lots of plugins for the different kinds of things, the different markups you might want to have. So, there’s a repo for each one of those. But by the time you get to npm install wiki it brings down everything you need to have a nice site. And I would encourage people to just try that on their laptop. Get it running and talk to localhost and give it a try. Type some pages. It’s a little different. Of course if it’s on localhost, it’s not any more public than your localhost is.
Probably half the pages I write are just on localhost. I use it as a scratchpad. But the other half of pages I write are on a server and up there 24/7. And it might be 24/6 and a half actually. I don’t think it’s all that reliable. But they’re to be copied. And the more people I can get copying it, it’s actually a nice fit with these cloud platforms. Anybody who can host a Node program. On a laptop we use flat files for the storage. But we talk to a number of different databases and that’s necessary for some of these platforms because they don’t keep your flat files but they will keep your database.
JAMISON:
So, you said that the Federated Wiki is implemented as a single-page app. Do you think, how do I say what I’m trying to say? How do you keep up with the developments in single-page app technologies in JavaScript? Because you’ve been working in this for years now.
WARD:
Three years, yeah.
JAMISON:
And that’s like several cycles of evolution in best practices and thinking on how to build single-page applications in JavaScript.
WARD:
Yes, yes, yes. And this is where being an open source project has been interesting because people will come look through my code and they won’t quite understand everything I’m doing. But they’ll see that I’m doing something the old-fashioned way so they send me a pull request. And before I
accept it I go research what they did and learn me some new JavaScript
JAMISON:
[Chuckles]
WARD:
And that’s been an interesting way to keep up. I would say that I suffer the same way lots of firsttime single-page authors suffer by doing too much jQuery, keeping too much in the DOM. I only had three or four things in the DOM, three or four kinds of things. But after you get four or five pages with those three or four things, it gets a little confusing where things are. And it slows down the evolution. It’s hard to keep up because you have to know too much to make anything work. So, the first thing we did is we broke it into a bunch of repos and then a bunch of files and got Browserify in there so we could reason about it. Then we got the dependency hierarchy upside down. So, that was a real challenge, to turn that around, and got that turned around.
JAMISON:
What do you mean by that, the dependency hierarchy upside down?
WARD:
That it was such that there was everything ultimately depended upon one file called wiki. And once you brought that in, you brought everything in. So, there was no real modularity there. It was just a bunch of files. And so, if I tried to do anything, I would actually introduce loops. I didn’t have a discipline for how it all worked. With Browserify, if you have loops it just quietly hands you nil and you think you got an object. So, that was some learning. But got that turned around. So now, it’s reasonably modular.
The challenge is to get the whole process of from clicking a link to figuring out where the page is to reading that page to getting it rendered, to getting all the plugins loaded that are needed for that, any special CSS. I’m basically implementing the browser in the browser. So, all that machinery is still a little too dependent upon nodes left behind in the DOM. And so, we’ve built a pretty good model you would say, making it more model based. And the model isn’t used uniformly throughout. But we’re probably two or three long weekends from fixing that up. And then I think it’ll be a lot more fun to work on.
There is an abstraction in the model called a ‘lineup’. And that makes more sense if you’d seen the thing work. You click on a link and it opens another page. The pages are narrow, about the width of a phone which is intentional. And on a regular laptop, they just start staking up, left to right. And we call that the lineup. There is a model underneath that now that models each of those instances. And if you’re actually computing by having paragraphs on one page interacting with paragraphs to the left of it, pulling data around, then having that abstraction is really useful. Because then you can have something you can wrap your hands around and say, “This is the expression,” or what that calculation is.
And this is where I get to, one of the motivations was to be able to share data. And I wanted to be able to pull data from one site and pull a visualization from another site, have that visualization discover the data and hook it up. And manage events back and forth and so forth so that if I scrub the data, the visualization can respond to that motion.
JAMISON:
That’s super cool. I’m always interested to hear about the architecture of projects, especially projects that have launched. [Chuckles]
WARD:
Yeah.
JAMISON:
Because then they have constraints on them. You don’t have this idealized vision anymore. You’ve made tradeoffs to get something up and running. And it’s always interesting to see the tradeoffs that people make in order to launch things. I have a friend that always says that there are two kinds of companies: those that ship and those that, what is it? Oh I’m butchering his quote. It’s like…
DAVE:
I think I know this one, two kinds of startup.
JAMISON:
Alright, save me Dave.
DAVE:
Two kinds of startups: those that fail and those that are embarrassed by their code.
JAMISON:
There you go.
[Chuckles]
JAMISON:
Yeah, but I think it doesn’t have to be a startup. It still applies to a successful product, project, or something.
WARD:
Well, that pretty much describes the original wiki in that it was my first ever Perl program. And as I was writing it I said, “Well, I know there’s got to be a better way. And maybe I can get some Perl experts to help me straighten out this program.” And I pretty quickly learned that Perl experts like to write programs but they don’t like to fix other people’s messed up programs. [Laughter]
WARD:
So, I never, never got any help. It’s been better in this project. But the advice is slow and it isn’t always consistent. It can be contradictory.
JAMISON:
Sure. [Chuckles]
WARD:
The place that I think is most interesting by the way, and the thing that is least settled is when you load a page and it goes and it says, “Okay, let me load some plugins to understand the markup,” and it says, “Oh, well here’s a new plugin,” some kind of visualizer or something. And it says, this visualizer comes up and it says, “Well, let me go say if I can find some data.” and once it finds some data, the contract between that source of data and that visualization of the data is completely ad hoc now. It’s all JavaScript. And you know what you can do.
And so, as I constructed plugins that did that sort of thing, I said, “Well, I’m not sure how they should work.” So, every case I did a little differently. And so, I have a lot of experience in different ways to do it but I haven’t gotten to the point where I can say, “Yes, this is the one right way to do it.” And I have had a lot of advice. Some people say, “Well yeah, you got to use,” I’m forgetting the word, the delayed evaluation thing with lambdas. Promises. But then I talk to other people and they say, “Well, if you look at the way Node works,” and I am kind of copying Node by using Browserify and stuff, they say there’s really two ways to talk. One is with events and the other is with pipes.
And so, I have events which I’ve been kind of using now and looking through the DOM to see what’s near me. And I have this aspiration to do pipes because this lineup is a lot like a pipeline in Unix. And it has that same similar ad hoc, you stick some things together and if it works, great. And if it doesn’t, you change it around a little bit. But then I get this dynamics that well, it isn’t hooked together. Oops, now it’s hooked together. Maybe that means… oops, now it’s not hooked together anymore. And that is not what you usually see in a web app. A web app is usually pretty in control of what’s loaded when. And you can reason about it. Whereas in my case, it’s the end user and what they choose to click, determines what’s put together and how it works.
What I’d love to be able to do is grab a whole page and then just drag it over other pages and have it rebinding while it’s still in the air or a sorts. I do, do refactoring. So, if I have pages from two different sites and I don’t like the way they were organized and I say, “Well, this paragraph ought to be on this other site,” I can just drag paragraphs back and forth. And that works because it doesn’t actually write on either one of the sites. It writes the improved pages on my site, because remember pages can be anywhere.
JAMISON:
It seems like this delves into the realm of distributed systems. Do you care about things like consistency or do you just say whatever your sitemap is, is a snapshot of what it was at the time that you crawled? Do you do much to solve that problem or do you just kind of not worry about it?
WARD:
Well, the first principle I’ve assumed is that having a bunch of computers feel like a bunch of computers is actually a feature, not a flaw. I’m not trying to make a bunch of computers behave like one computer. I’m trying to let each one be its own individual, whatever it is. So, my challenge is to make that manageable to a user that’s trying to make sense of a world that’s diverse. And the example I always give is on wikis you usually have to have some sort of guiding principles about how you’re going to maintain order. Otherwise people go off on different directions and that’s not too good on a wiki.
On Wikipedia the rule is neutral point of view and no original research. If you want to do original research, you don’t belong on Wikipedia. That’s how they keep the peace. But in a Federated Wiki, because the only place I can write is on my own wiki, I can write whatever I darn well please. And if it’s interesting to other people, they’ll read it and copy it. And if it’s not interesting to other people, they won’t. So in that sense, the diversity is the feature that allows us to explore a space beyond conventional wisdom. And I think that that’s important.
Now, it won’t really do anything amazing if we don’t find that there is some sort of force for eventual consistency. That people can take different points of view but eventually they say, “Well, you know really I like your idea better than mine and I’m just going to fork your version of my page over mine,” that kind of resolution. But I think that could take, it’s a slow-motion thing.
CHUCK:
What about areas where there isn’t some kind of consensus?
WARD:
Oh, I think people will go their own ways and stay apart.
JAMISON:
So, the job of the tool isn’t to establish consensus. It’s to let people create whatever they want, right?
WARD:
Yes.
JAMISON:
Is that what you’re saying?
WARD:
Yes.
JAMISON:
It’s kind of a design decision?
WARD:
Well, it’s the way life works, right? I tell people you have your children and you give them everything you can. And they move out of the house and they don’t even bother to call home.
[Chuckles]
WARD:
Right? They’re their own thing. And sure, there’s a little bit of you in there, but not anymore. That’s progress. Same with storytelling. Every storyteller customizes the story. This is when we used to have storytellers. Now we have books. One of the things that I remember as a kid is it really confused me why the section of the library devoted to fiction is so much larger than everything else. And to me fiction sounded like lies. Fiction is not true. But there’s something about that that is attractive to humans. And that’s the kind of material that I want.
If you want to find out what the mass of an electron is, you check Wikipedia. But if you want to debate how we’re going to live together on this earth 50 years from now, it’s good to have some good data. But it’s that interpretation of that data. “Well, this data says we can’t do this or we can’t do that, but there are four more things we could do. But maybe not all four.” That sort of conversation is the sort of thing that I think this is good for, where interpretation is an important part of the process of doing anything.
CHUCK:
So, I think it’s interesting that you can have these different points of view in the different wikis. And you can merge your page with somebody else’s page, so to speak. But do you see this creating conversations somehow, some way? You know, maybe saying, “If you have a different point of view or if you’re interested in this different point of view, go over here”?
WARD:
Sure, sure, very much so. And if you think about it, people talk about the scientific literature as a conversation. But it is more slow-motion than this. It takes months to get your paper published. And when it’s finally published it takes months for people to read it. But when they write their papers they cite your paper. And it all gets woven together through this scientific citation. And that carries science along. So, science is really the, it’s gossip improved. But it’s also something that’s pretty tedious in the sense that if you don’t make your references right, your paper doesn’t get accepted. And you pretty much have to get a PhD. The difference between getting a Masters’ degree and a PhD is you’ve been trained to participate in this community. So, if you have to spend so many years to learn how to even participate in the community, we’ve made that community pretty hard. So, I think it would be great if wiki isn’t a giant chatroom but is more like a repository for thought that has the characteristic of the scientific literature but it’s just a lot easier to do.
CHUCK:
So, one thing that I can see coming out of this is just the idea of the community putting all of its knowledge together and sharing it. Is there a way that we can facilitate that with Federated Wiki or encourage people to set up their own wikis? I don’t know.
WARD:
I set the bar pretty high in the sense that I said, “Well gee, if you want to participate in a conversation with me you’ve got to set up a wiki.” And then I say, “Well, it’s a one-line command if you’ve got Node installed.” But still, you got to get Node installed and you got to understand what a domain name is and it would help if you bought one. By refusing to run the single website that’s going to host all of these conversations, by insisting that people do it for themselves, I’m running against the grain. But I’m willing to wait. I’m willing to wait ‘til people figure it out and join me. So, I write in it every day. I like it. I make sites like most people make documents. And to me, a site is a place where you define a bunch of pages that go together and depend upon each other, and in some sense represent my part of some conversation. And that conversation could be going on in the present, which it is in some of my sites. And it could be going on in the future on other sites I make, because there are no participants in that conversation yet.
It’s something that’s kind of hard to understand. And remember, I started out by saying I make a version of wiki that nobody asked for. Well so, if this is seeming kind of strange, it’s because you never thought to ask for it. And you won’t ask for it. Nobody’s going to want this unless they see it working. And then they’ll say, “Wow, how does it even work? How is this working so well?” And then they’ll study it and they’ll find out that there are a handful of design decisions that really favored this style of collaboration. And I’m hoping that it’ll be successful as the original wiki. The original wiki is the same way. It was there on my site for five years before the encyclopedia people even paid attention. And they’re still bitterly fighting over whether it was a good idea or not.
CHUCK:
[Chuckles]
WARD:
So, it’s a grand experiment. But you know, I find that… Well a friend of mine who writes every day, and he said, “You know, if you write once a week you’ll wonder why Federated Wiki isn’t more like Word. But if you write in Federated Wiki every day, pretty soon you’re wondering why Word isn’t more like Federated Wiki.” And it’s that sense, if you write every day then just your own interests are so varied that you’ll find yourself talking about different things. And then you say, “You know, I think I talked about this two weeks ago.” And sure enough you did. And then you just link that page to whatever you have or copy it around, or pull it out of one wiki and stick it on another wiki. And then these two wikis that were really about a different subject have this thread between them. That somebody who finds that part of this other wiki will find its way back to the first.
It’s a little like spelunking. You quickly admit that I make it easier for the writer to write and I put a burden on the reader to go figure out what’s there. It’s not like reading an article on a magazine where the first five paragraphs prepare you to read the next five and then the next five tell you the important point, and then the next five paragraphs after that wind it up where you’ve had a whole experience. It’s like watching a movie from beginning to end. This is much more chopped up. It’s like finding a bunch of notes scattered along a hallway. [Chuckles]
WARD:
And you’re trying to figure out, “Well this note seems important and it’s right next to this note. So, that must mean something. What does it possibly mean?”
DAVE:
So, have you found that this style appeals to a certain kind of reader?
WARD:
Well, that’s a good question. I have a friend who’s run a class in it. It’s a class on educational technology. And he told the students, he said, “Well, we’re going to use this new wiki. And it will be unlike anything you’ve ever used before. But the thing that’s different in this class is that we insist that you look at everybody else’s work and copy from it freely.” So, they would study different educational tools for educational technology and principles and whatever.
It was taught like a class. But instead of writing their notes on a blogs which has been done, this is writing it in a wiki and with the insistence that people copied from each other. So, you ought to make it up to your standards because you will be judged on what’s on your wiki as representing you. It’s like, “We’re in this together to learn this material on the class. We’re all moving through that material at the same rate. We’re all understanding different aspects of the material. And we’re all writing about what we understand. And then we’re carrying each other forward by sharing the words you write.”
And if you think about it, I don’t know, it’s communism or something like that. But it’s certainly not the fight for grades that you usually associate. You really are better off if you help other people because then they’re more likely to help you tomorrow.
CHUCK:
That does lead me to one thing you mentioned, that the content on the wiki is Creative Commons.
WARD:
Yes.
CHUCK:
It feels a little bit like the conversation that we have as technologists when we talk about things like the GPL license.
WARD:
Yes.
CHUCK:
Do you get blowback at all? Or I don’t know if blowback’s the right word. But do you have people that object to it being Creative Commons?
WARD:
I think by the time they’re interested in what I’m doing, they’re well beyond that fear. But I will say that, sometimes I sum it up, I say that the Federated Wiki or I’ll just say wiki, the future of wiki is Federated Wiki. And a Wiki is a combination of three things. One is that Creative Commons license. Another is cross-origin resource sharing, CORS. And the third thing is JSON, the schema that I use. So, the pages are in JSON. It’s very simple and it’s not versioned. It’s my version of HTML I guess you could say. And you can copy it freely because you have the license. And you have the headers that make it possible. The browser tries very hard to keep you from starting on one site and writing on another. It’s programmed to not let you do that. So, we’re always bumping up against that assumption.
But this… of course that was true of the original wiki. There was supposed to be a PUT command in there and nobody implemented it. So, you used this crazy forms kluge to make, rewrite web. And it became something. It wasn’t the most direct route. And so, every time we’re skirting issues of cross-origin, we just say, “Well, that’s just what we have to do to use the environment that’s been given us to make something new.”
JAMSION:
So, I have a question about community. Lots of these communities like Hacker News or Twitter or something where it’s a centralized group running it and owning it, you have tools for moderating the community and expressing disapproval. And you can report people for abuse and stuff like that.
And even though they don’t work very well there’s at least somewhere to turn.
WARD:
Mmhmm.
JAMISON:
And it seems like in a Federated Wiki like this, it’s kind of Wild West. There’s no centralized control possible. Have you thought about how you would deal with someone that’s doing things that the community deems abusive?
WARD:
Yeah, it’s something that I go back to continuously and I’m hoping that people will be able to tell somebody who’s there in a giving sense and trying to help you be successful with whatever you’re doing, and someone who’s abusive, a griefer, griefer is what I think of, people who enjoy causing you unhappiness, that you just say, “Well, I’m just not going to that guy’s site anymore.” And there might be schemes. There can be people who are psychopathic or what is it, where they can appear to be very different than they truly are.
CHUCK:
Hypocritical?
WARD:
No, it’s sociopath, sociopathic is the phrase. Typically these people in real life end up forming cults where people become devoted to them where their interest is not at heart. And I think that that could form. I hope that that would be a small part of… I mean anything that happens in a real culture will eventually happen here. But I hope it will happen in a way that it’s actually just easier to manage than it would be without the aid of a computer. But no, I worry about that a lot. And a lot of people say, “Well, how could I know if anybody has read my pages?” And I say, “Well I could make it so anytime they read them that I make a record of it and tell you who they are.” But do you really want to spy on other people? Is that really your goal? You’ll know that people have been reading you when you start reading other people who mention you.
This idea that we have to measure our reach really comes from publishing. And we now in publishing, your readers are the product, because you need to know what your reach is so that you can convince your advertisers to pay a premium rate. And I’m hoping that just, that it’s easy enough to put up a server. And if we all carry a few hundred pages, then we can have millions of pages and it won’t need a central resource.
I think that that was the vision of the internet in the first place and certainly the web in the first place. But it was just incomplete enough to really use it in a two-way way. As taken, big data centers and concentration. And Wikipedia is certainly that. And I admire everything they do. But they have to be vigilant in how their equipment is being used and protect the investment that’s already been made. And Google, and Facebook, Twitter, and all these things. In fact, it’s a model for success, is let’s get some eyeballs and see if we can monetize them. And if you’re, I don’t know how fast you’re disconnecting from these services. But I just try to keep the services to a minimum because eventually they turn against me.
CHUCK:
So, if somebody is a griefer, is there a way to say, “I don’t want them in my neighborhood anymore”?
WARD:
Sure, because your neighborhood, remember your neighborhood is formed as you start following the links that you’ve assembled. So, every tab I open in my browser starts at some site that I’ve chosen, that I know the URL of. And usually, it’s my own. But then as I browse pages, it grows. And there’s a list of pages. So, if there’s an area, if there’s a site that I don’t like anymore, I don’t go there. In fact, I can pull the pages I like and leave the pages I don’t and make my own version of the site. Now, through this attribution requirement of the license, if there’s somebody that I’ve fallen out with but I’ve taken half their pages, I still have to give attribution to them. So, if you come to my site you might say, “Well, who is this guy?” Then you might say, “Oh gee, Ward’s pages are so much better than his. I can’t believe he ever dealt with him,” because clearly a griefer. He’s gone off the deep end.
CHUCK:
Oh right, because you can pull in his content and then modify it to make it nicer, better, form better to your point of view.
WARD:
Yeah. Yeah, this is like my teacher friend who says you can take any student’s stuff and put it on your own site and call it your own. But it better be your own. You better know it and own it and raise it to your standards. And so, rising tide raising all boats sort of thing. All boats that choose to participate, [chuckles] all boats that don’t sink I guess. And it takes a tremendous amount of energy to manage a community on the modern internet. It was easy for me in 1995 to the year 200. It just took care of itself. But then as the population grew and I don’t know, people started getting nasty. And this think called the wiki spam showed up. And then we had to fight spam. And we had to come up with all this machinery. And it’s was an arm’s race.
I opted, I dropped out of Google at one point because Google, it was really cool early on that I was on the two or three, pretty much every query that had anything to do with computers, computer science anyway. And that was cool. But then it sent me too much traffic. And I just said, well, let’s just not have so much traffic and maybe it will stick around a little longer. I didn’t want to enter into an arms race with griefers. So, I didn’t.
But now I think I have something that it might be harder to have a real clear sense of what the agreement is on the site, because maybe there isn’t an agreement because it’s really a bunch of sites. But I think that from that it will have a stability that is natural. Of course, you go look at ecological systems and there are invasive species. Botanists don’t like that term because they say, “This is just because this specie wasn’t here a hundred years ago. That’s just what species do.” So, there’ll be a washing of genomes back and forth across the space. So, in mine we’ll have a washing of pages back and forth across the space. And I just hope it comes out better. I’m kind of pleased with the way life turned out. All those genomes have made some pretty amazing things.
CHUCK:
So, has this, I just keep thinking about the way that I create content and it’s generally podcasting and blogging. Has this replaced blogging for you? Do you just create pages about the things that you’re interested in?
WARD:
I actually listen to lots of podcasts. I thrive on the BBC and all the content they produce. And it’s outside of my usual field of study. I read lots of Twitter. I try to keep it to, it’s kind of my morning newspaper, is to see what Twitter has brought me. And all day long I’m on Stack Exchange, Stack Overflow to figure out, because I’m programming in five different languages at the same time and I can never remember how to write a loop in each one. So yeah, that stuff I’m glad those are there. And those are some of my favorite services. I wouldn’t want them to go away.
But in that sense, I think that Federated Wiki will always be at its best, it will just be a part of the internet, a part that’s well-suited for the kind of things it does. But I think it does encourage personal writing and reflection and study. I don’t think you should have to meet the editorial standards of Wikipedia to talk about something that’s important to you. I don’t think you should have to understand video codecs to send a video. I think it should all be done in small scale, with the easy stuff, with the computers that are available today. And if you write content that goes viral, it will go find all of the computers to be viral on. So, you don’t even need to have a data center to survive being slashdotted.
So, I guess that’s a yes and a no. I think that people who can produce a highly-produced product will be appreciated. A feature length movie for example is highly produced, very expensive. But it’s concentrated entertainment. But there’ll also be this, among people who are like-minded or find each other interesting it will be something that’s a little more formal and lasting than a party conversation and a little less formal than a research report. And I think there’ll be a lot of it.
CHUCK:
Any other questions guys, before we go to picks?
JAMISON:
I am fresh out.
DAVE:
Me too.
WARD:
Well, I hope I’ve been useful. I have this feeling that I’ve brain-dumped on you here. And just because there’s three of you and one of me, I’ve tried to speak in a way that challenges you to make sense, to emphasize the difference of what I’m doing. But there is a sense that I wanted to seem familiar. I wanted to seem easy. The things that we’ve been talking about are the things that make it different and the things that have been a challenge to me. But in the end, if I get the JavaScript to just remind you at the right point that, “Oh, well this little green dot here means that there’s more.” And if I feel like it, I click the dot and I get more. And nothing more complicated than that, that it’ll be something of lasting value. And then the lasting value will come from people like you and me.
JAMISON:
I have bad news for you, Ward. [Chuckles]
WARD:
Yeah?
JAMISON:
There’s three of us and one of you. There are thousands of us.
WARD:
Yes, oh right.
JAMISON:
[Laughs]
CHUCK:
[Chuckles]
WARD:
Awesome. Well, if you all install wiki then I’ll be very happy.
JAMISON:
[Chuckles]
WARD:
That’s wiki on npm.
CHUCK:
Well, the thing that’s interesting to me about it is just you talked about the community aspects and the fact that we can mindshare this stuff. And then other thing that’s interesting is the parts where we deviate. We just, I can check out yours or I can check out mine, and it works out. But the idea of community knowledge and the ability to share it, and the ability for it to be mostly automatic is just really cool.
WARD:
Yeah, and I think that this will really be attractive to people that have an open mind who actually enjoy reading two or three points of view, or admire somebody who’s obsessive compulsive in their study of X, or Y, or Z. And that you can travel through that for a day and then go somewhere else tomorrow.
CHUCK:
Alright. Well, let’s go ahead and do some picks. Dave, do you want to start us off with picks?
DAVE:
Sure, can do. I have two picks today and they both start with the letter S. The first one is a little Python open source project called Sentry. And we use it at work and I really like it. You install it in your Python application. Like if it’s a Django web application for example. And anytime your Python code throws an unexpected exception, it will report it to the Sentry server and group like errors and do all kinds of fun stuff with them so that you can search them and comment on them with each other, mark them as resolved. And it’s just a great way to get sanity around the errors that your application emits. I’ve been pretty happy with it.
The second pick that starts with the letter S is Splunk. I’m sure lots of you have used Splunk but I just wanted to pick it because I’ve really been enjoying it lately. It’s another way to help me get my head around what my system is doing. I could set up alerts with it. Of course, search logs. Realtime search, all kinds of fun stuff. But there we go. Those are my two picks, brought to you this week by the letter S.
CHUCK:
Alright. Jamison, I expect yours to have the number 12.
JAMISON:
It has the number three. And three is a divisor of 12. So, that works, right?
CHUCK:
I guess.
JAMISON:
Okay [chuckles]. Cool. So, I have three picks. One is a book called ‘The Terror’ by Dan Simmons. He wrote the Hyperion sci-fi series. But ‘The Terror’ is like an exploration horror book. It’s about this ship that gets trapped in the ice in the arctic in the 1800s. And then spooky stuff happens. It was really well written, I thought. And it did a good job of making the environment and the weather scarier than the spooky stuff that happens, which is cool.
My next pick is a band called Until The Ribbon Breaks. They cover this Robert Palmer song which was released before I was born but I remember growing up and listening to and dancing around in my dad’s sunglasses to. And it’s super great. So, there’s a link to the YouTube video, the cover. The video is garbage, but the song is really good.
And then the last pick, I cannot not pick this. It’s Flow by Facebook. They just released it today. They’ve been talking about it for a couple of months though. It’s their optionally-typed JavaScript superset. It seems like it’s so hot right now to make one of those. But theirs takes a different tack. It does a lot of type inference for you, so if you just start using it and don’t put any types on any of your JavaScript code, it’ll still warn you about passing in different types of arguments to functions. And you still get some benefits just right out of the box. And then you can do what you can do in TypeScript and add script where you can optionally add on types later and get some better checking and stuff. Yeah, so that came out today. It’s still pretty rough around the edges, but it’s super cool. Those are my picks.
CHUCK:
Awesome. I’ve got a few picks here. The first one is, so I was a guest on The Entreprogrammers Podcast about two weeks ago and they invited me back as a regular. So, it’s just been really fun. So anyway, I’m going to pick The Entreprogrammers Podcast. It’s kind of a mastermind group/business discussion by guys who are programmers. So, that to give you some context there. It’s been really fun. I’ve gotten some great advice on there. And they usually have a pretty good discussion about stuff. Or we now, I have to say we because I’m on the show. Anyway, it’s also nice to be on a podcast that I don’t have to produce. But anyway, so that’s one pick.
My next pick is the angular-timer. It’s a plugin for Angular. And essentially, you just hook it in and then you can do things like countdown timers. Or you can have it count the seconds or milliseconds, count up, or all kinds of stuff. It’s a pretty handy thing. So, if you’re into AngularJS, go check that out.
While I’m talking about it, I’ve had several people on Twitter basically saying, “I didn’t know you did an Angular podcast.” We do an Angular podcast. You can go to AdventuresInAngular.com and check it out. And it’s gotten to be fairly popular. So, I’m excited for what we can do for the community there. And if you’re into AngularJS, go check it out.
Finally, my wife and I took some time this weekend. I have to say it was one of those timeshare deals where you show up and then you have to go sit through their pitch in order to get the vacation. So, part of the vacation was two hours of them trying to sell us timeshares. But it was nice just to get away. So, we just had some us time. We watched some movies. We wandered around Park City, Utah, which is where they hold the Sundance Film Festival and it’s also where the Olympic training for the Winter Olympics is. So, if you want to do either of those interesting things, you can definitely go up there. I think that those are about the only times you’re going to see celebrities in Utah, is during Sundance Film Festival. But it’s a great little town. And we had a good time. So, just taking some time for yourself or with your significant other and finding a sister-in-law who’s willing to watch your kids. And go out to Park City or go somewhere near you that’s fun and different. And yeah, just awesome stuff. So, those are my picks.
DAVE:
Hey Chuck, there’s one other time you can see a celebrity in Utah.
CHUCK:
When’s that?
CHUCK:
That’s right.
JAMISON:
Oh my gosh. I was going to make that joke about Dave Smith.
[Laughter]
JAMISON:
Oh, I’ve been out-joked.
CHUCK:
No. Alright, Ward do you have some picks for us?
WARD:
Oh, gosh. I’ll recommend Mike Caulfield who is the educator I was mentioning. And he writes a blog called Hapgood. And I always find it by just typing Mike Caulfield into the browser. And he writes regularly about educational technology and has been on a Federated Wiki jag for half a year now. And what I love is he did this fictionalized account of Arthur Clarke inventing GPS satellites using Federated Wiki. You can imagine it happening. What he’s really doing is taking progress in science that took decades and imagining it happen in weeks and people collaborating and not even realizing they’re collaborating, discovering collaborations with the Federated Wiki. It’s a good way to absorb it. And I’m going to leave it at that. He writes a lot and as a very successful traditional blogger. So, people will feel very comfortable reading his stuff. And it will give you a good dose of the best that’s going on with my stuff.
DAVE:
Alright.
CHUCK:
Awesome. Well, thanks for coming, Ward. It was fun to talk. And hopefully we’ll see you at a few more conferences here.
WARD:
Well, I enjoyed being at the Mountain West. That was a very big conference.
CHUCK:
Yeah, and it was fun to see you and talk to you. And maybe we’ll be able to get you on some of the other shows.
WARD:
I’d enjoy it. This has been very comfortable.
CHUCK:
Alright. Well, I want to thank all of our listeners for listening. And thank you again Ward, for coming. And we’ll catch you all next week.
[This episode is sponsored by MadGlory. You’ve been building software for a long time and sometimes it’s get a little overwhelming. Work piles up, hiring sucks, and it’s hard to get projects out the door. Check out MadGlory. They’re a small shop with experience shipping big products. They’re smart, dedicated, will augment your team and work as hard as you do. Find them online at MadGlory.com or on Twitter at MadGlory.]
[Hosting and bandwidth provided by the Blue Box Group. Check them out at Bluebox.net.]
[Bandwidth for this segment is provided by CacheFly, the world’s fastest CDN. Deliver your content fast with CacheFly. Visit CacheFly.com to learn more.]
[Do you wish you could be part of the discussion on JavaScript Jabber? Do you have a burning question for one of our guests? Now you can join the action at our membership forum. You can sign up at
JavaScriptJabber.com/jabber and there you can join discussions with the regular panelists and our guests.]