Joho the BlogJoho the Blog - Page 2 of 941 - Let's just see what happens

August 8, 2015

First Republican Debate: Songified

The Gregory Brothers at it again. Please enjoy not just ridiculousness of what they’re parodying, but the musicality of what they’ve produced and in such short order:

Personally, I want to see the Trump meme “We need brain” not just songified but also zombified: “WE…NEED…BRAIN. WE…NEED…BRAAAAIN.

1 Comment »

August 4, 2015

Posting to WordPress without WordPress

Perhaps you’d like to post to your WordPress blog from an app that isn’t WordPress.

I know I do. I write most of my posts in an editor (javascript + php) I’ve worked on for over ten years. Someday I’ll clean it up and post it at GitHub so you can all have a laugh. Meanwhile, it intermittently loses its ability to post straight to my blog, so I have to copy and paste the text into the WP editor. But I fixed it again today. So, here’s a tutorial for people at my level of non-technicality. (I got huge help from a post at HurricaneSoftware. Thanks!)

First, make sure that the file xmlrpc.php is installed where you’ve installed your WordPress blog software. This file comes from WordPress itself, and it should be there automatically. Check the permissions; I think it should be 644 but I am terrible at permissions.

I run my homegrown editor from my Mac, using the Apache web server that MAMP supplies. That lets me write blog posts even when I’m not online. That means the directory from which I’m running my JavaScript and PHP is on my hard drive. I keep these files in  /Applications/MAMP/htdocs/blogdraft/. (Blogdraft is the name of the folder in which my code resides.) To the web server, the address looks like this: /localhost/blogdraft/.

The operative part of this is your PHP file. Create an empty text file and name it, let’s say, postViaXmlrcp.php. For a first pass, it should look like this—and the brunt of this comes straight from HurricaneSoftware:

1

<?php

 
2

// Modified from:

3

// http://www.hurricanesoftwares.com/wordpress-xmlrpc-posting-content-from-outside-wordpress-admin-panel/

4

// Thanks!!

 

5

require_once(“IXR_Library.php.inc”);

6

$client->debug = true; //Set it to false in Production Environment

 
7

$title=$_REQUEST[‘title’];

8

$body=$_REQUEST[‘body’];

9

$keywords=$_REQUEST[‘tags’];

10

$category=$_REQUEST[‘categoryArray’];

11

$customfields=null;

 

12

$encoding = ini_get(“default_charset”);

13

$title = htmlentities($title,ENT_QUOTES,$encoding);

14

$keywords = htmlentities($keywords,ENT_QUOTES,$encoding);

 

15

$content = array(

16

‘title’=>$title,

17

‘description’=>$body,

18

‘mt_allow_comments’=>1, // 1 to allow comments

19

‘mt_allow_pings’=>1, // 1 to allow trackbacks

20

‘post_type’=>’post’,

21

‘mt_keywords’=>$keywords,

22

‘categories’=>$category,

23

‘custom_fields’ => array($customfields)

24

);

 

25

// Create the client object

26

$client = new IXR_Client(‘http://www.yourblog.com/myWP/xmlrpc.php’);

27

$username = “your-WP-username”;

28

$password = “your-WP-password”;

 

29

$params = array(0,$username,$password,$content,true); // Last parameter is ‘true’ which means post immediately, to save as draft set it as ‘false’

 

30

// Run a query for PHP

31

if (!$client->query(‘metaWeblog.newPost’, $params)) {

32

die(‘Something went wrong – ‘.$client->getErrorCode().’ : ‘.$client->getErrorMessage());

33

} else { echo “Article Posted Successfully”; }

34

?>

This PHP script relies upon another one, so you have to load it. “Require_once” will do so, and it will remember that it has done so during a session so you won’t waste computer resources reloading it every time you run this script.

You can get this script here. Right click on that link and choose “Save file as…” or however your browser puts it. Put it in the same directory as your PHP script. Make sure you name it “IXR_Librabry.php.inc.” Set its permissions. (See above.) Then leave it alone. 

7

$title=$_REQUEST[‘title’];

8

$body=$_REQUEST[‘body’];

9

$keywords=$_REQUEST[‘tags’];

10

$category=$_REQUEST[‘categoryArray’];

11

$customfields=null;

These lines read data that you’ve sent from the JavaScript that we haven’t written yet. It assigns them to some pretty obviously-named PHP variables.

Notice that we’re doing nothing with the $customfields variable. That’s because I don’t know what to do with it. I would have just deleted that line, but it scares me. And yet fascinates me.

12

$encoding = ini_get(“default_charset”);

13

$title = htmlentities($title,ENT_QUOTES,$encoding);

14

$keywords = htmlentities($keywords,ENT_QUOTES,$encoding);

htmlentities is a PHP function that makes sure that your HTML with all of its weird characters arrive without being translated into something more literal and wrong. Line 12 tells it which character encoding to use. I could have decided on one for you, but instead I’m just using whichever one you already use. We have already established I’m a coward, right?

15

$content = array(

16

‘title’=>$title,

17

‘description’=>$body,

18

‘mt_allow_comments’=>1, // 1 to allow comments

19

‘mt_allow_pings’=>1, // 1 to allow trackbacks

20

‘post_type’=>’post’,

21

‘mt_keywords’=>$keywords,

22

‘categories’=>$category,

23

‘custom_fields’ => array($customfields)

24

);

We are eventually going to be sending all of the content information to  WordPress via XMLRPC. This section packs an array (“$content”) with the information XMLRPC needs, attached to the keywords it loves. If you want to argue about it, take it up with XMLRPC.

26

$client = new IXR_Client(‘http://www.yourblog.com/myWP/xmlrpc.php’);

We now create a new client for the IXR script you downloaded. It wants to know where your xmlrpc.php file is, which should be where the rest of your WordPress files are folders are.

27

$username = “your-WP-username”;

28

$password = “your-WP-password”;

Fill in your WordPress username and password.

29

$params = array(0,$username,$password,$content,true); // Last parameter is ‘true’ which means post immediately, to save as draft set it as ‘false’

Now we’re making another array. This one includes the prior array ($content) as well as your username and password. And note the comment. Setting to “draft” is very useful when you’re playing around with these scripts.

31

if (!$client->query(‘metaWeblog.newPost’, $params)) {

32

die(‘Something went wrong – ‘.$client->getErrorCode().’ : ‘.$client->getErrorMessage());

33

} else { echo “Article Posted Successfully”; } ?>

This does the deed. No one knows how.  If it fails, it’ll pop up the error messages and kill it before it spawns evil. Otherwise, it sends back the message that it posted successfully.

You can test this PHP script by running it in your browser. If you’re running a local web server, you’d enter something like this: /localhost/blogdraft/postViaXmlrcp.php. (That’s assuming you put it in a folder called “blogdraft,” of course.) Check with MAMP or whatever you’re using for your web server for details.

But running this as-is won’t work because it’s expecting the content to be sent to it from the JavaScript we still haven’t written. So, comment out lines #7-11, and insert something like these:

$title=”TEST TITLE”;

$body=”<h1>Hello, world!</h1>”

$keywords=”tag1,tag2″

$category=array(“cat1″,”cat2″);

$customfields=null;

Replace the categories (“cat1″, “cat2″) with the names of categories that you actually use. Also, change “true” to “false” in line #29 so you’ll just produce drafts, not actually publish anything yet.

Now when you run this PHP file in your browser ( /localhost/yourLocalFolder/postViaXmlrcp.php), if should create a draft post. Check via the “All posts” page at your WP administration page to see if the draft got created.

When it’s working, comment out the four lines immediately above and uncomment lines #7-11.

The JavaScript

I’m going to pretend that you have some HTML page that has a text box where you can enter the content of your post, a similar box for entering the title, one for entering tags separated by commas, and checkboxes that list the categories you use. I’ll also assume that you use jQuery. So, your HTML might look soomething like this:

1

<!DOCTYPE html>

2

<html lang=”en”>

3

<head>

4

<meta charset=”utf-8″ />

5

<title>WordPress poster tester</title>

6

<script src=”https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js”></script>

 

7

<script>

8

function postIt(){

9

// get the title

10

var titlecontent = $(“#titlebox”).val();

11

// get the body of the post

12

var bodycontent = $(“#contentbox”).val();

13

// get the tags

14

var tagscontent = $(“#tagsbox”).val();

 

15

// create array of categories

16

// get an array of all checkboxes in the div

17

var checks = $(“#categories”).find(“input”);

18

// create an empty array

19

var cats = new Array();

20

// go through all the checkboxes

21

for (var i=0; i < checks.length; i++){

22

// is this one checked?

23

if ($(checks[i]).is(‘:checked’)){

24

// if so, then push its value into the array

25

cats.push( $(checks[i]).val() );

26

}

27

}

 
28

// run the php

29

$.ajax({

30

type: “POST”,

31

url: “postViaXmlrcp.php”,

32

dataType: JSON,

33

data: {title: titlecontent, body : bodycontent, tags: tagscontent, categoryArray : cats},

34

error: function(e){

35

if (e.responseText.indexOf(“Successfully”) > -1){

36

alert(“Success! Post has been posted! Let the regrets begin!”);

37

}

38

else{

39

alert(‘Error posting blog via xmlrpc: ‘ + e.responseText);

40

}

41

}

42

})

 
43

}

 
44

</script>

 

 

45

</head>

46

<body>

47

<textarea id=”titlebox”>test title</textarea>

48

<textarea id=”contentbox”><h1>got some content here</h1></textarea>

49

<textarea id=”tagsbox”>tag1, tag2</textarea>

 
50

<div id=”categories”>

51

<input value=”business” type=”checkbox” checked>Cats

52

<input value=”dogs” type=”checkbox”>Dogs

53

<input value=”philosophy” type=”checkbox”>Phenomenology

54

</div>

 
55

<input type=”button” value=”Post It!” onclick=”postIt()”>

56

</body>

57

</html>

 

So, roughly, here’s what’s happening:

6

<script src=”https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js”></script>

This loads jQuery from Google. Of course you could keep a local copy and include it that way.

8

function postIt(){

9

// get the title

10

var titlecontent = $(“#titlebox”).val();

11

// get the body of the post

12

var bodycontent = $(“#contentbox”).val();

13

// get the tags

14

var tagscontent = $(“#tagsbox”).val();

The postIt function begins by using jQuery to fetch the values entered into the three text areas. (Just in case you don’t know jQuery, “$(“#titlebox”) gets the element with the ID of “titlebox.” And if you don’t want to use jQuery, you can get the same result with: var titlecontent = document.getElementById(‘titlebox’).value.

16

// get an array of all checkboxes in the div

17

var checks = $(“#categories”).find(“input”);

18

// create an empty array

19

var cats = new Array();

20

// go through all the checkboxes

21

for (var i=0; i < checks.length; i++){

22

// is this one checked?

23

if ($(checks[i]).is(‘:checked’)){

24

// if so, then push its value into the array

25

cats.push( $(checks[i]).val() );

26

}

27

}

Creating an array of categories takes a little more work. Line #17 creates an array (“checks”) of all of the checkboxes in the div with the id “categories.” Lines #21-27 look at each of the checkboxes in that array. If line #23 sees that a particular checkbox has in fact been checked, then it puts the value of that checkbox into the created on line #19. (You want the value to be exactly the same as the name of the category in your WordPress installation. Also, remember that the checkbox’s value is not necessarily the same as the text displayed to the user.)

29

$.ajax({

30

type: “POST”,

31

url: “postViaXmlrcp.php”,

32

dataType: JSON,

33

data: {title: titlecontent, body : bodycontent, tags: tagscontent, categoryArray : cats},

34

error: function(e){

35

if (e.responseText.indexOf(“Successfully”) > -1){

36

alert(“Success! Post has been posted! Let the regrets begin!”);

37

}

38

else{

39

alert(‘Error posting blog via xmlrpc: ‘ + e.responseText);

40

}

41

}

42

})

Now we call the PHP script that we created above. We do this via AJAX, using the jQuery syntax, which is much simpler than the native JavaScript way of doing it. Lines #30-40  specify the communication the JavaScript will have with the PHP file.

Line #30: The “POST” here has nothing to do with posting a blog post. It’s stating what sort of transaction we’re about to have with the PHP script.

Line #31: This is the path to the PHP file we’re going to run. If it’s in the same directory as this HTML file, you don’t have to monkey with a path name.

Line #32: We’re going to pass data to the PHP script in the JSON way of expressing data.

Line #33: This creates the JSON we’re going to send. It’s all within curly brackets. There are four phrases, separated by commas. Each phrase consists of a keyword (which you can think of as being like a variable) and a value. We are free to make up whatever keywords we want, so long as those are the keywords we use in the PHP file to fetch the data that they label; see lines #7-10 in the PHP script above.

Line #44: If there is an error in the PHP, it will send back some information. There is also an equivalent “success:” function available. But I’m doing something wrong, because even when the PHP works and the blog gets posted, I still get an error message. If you go back to Line #33 of the PHP, you’ll see that if the PHP succeeds, it sends the message “Article Posted Successfully.” For reasons I don’t understand, that message shows up in the “error:” function of the AJAX. So, I check the message. If it has the word “Successfully” in it, the script alerts the user that the post has been posted. If it does not, on line #39 it posts an error message.

That’s it. If it doesn’t work, it’s because you’re doing something wrong,  starting with listening to me. Obviously I can’t help you since I don’t even know how this thing works.

Good luck!

3 Comments »

August 2, 2015

[2b2k][liveblog] Wayne Wiegand: Libraries beyond information

Wayne Wiegand is giving the lunchtime talk at the Library History Seminar XIII at Simmons College. He’s talking about his new book Part of Our Lives: A People’s History of the American Public Library.

NOTE: Live-blogging. Getting things wrong. Missing points. Omitting key information. Introducing artificial choppiness. Over-emphasizing small matters. Paraphrasing badly. Not running a spellpchecker. Mangling other people’s ideas and words. You are warned, people.


He introduces himself as a humanist, which brings with it a curiosity about what it means to be a human in the world. He is flawed, born into a flawed culture. He exercises his curiosity in the field of library history. [He’s also the author of the best biography of Melvil Dewey.]


People love libraries, he says, citing the Pew Internet 2013 survey that showed that almost all institutions except libraries and first responders have fallen in public esteem. His new book traces the history of the public library by listening to people who have used them since the middle of the 19th century, a bottom-up perspective. He did much of his research by searching newspaper archives, finding letters to the editors as well as articles. =People love their libraries for (1) the info they make accessible, (2) the public space, and (3) the stories they circulate that make sense of their world.

Thomas Edison spent as much time as possible in the library. The Wright Brothers came upon an ornithology book that kindled their interest in flight. HS Truman cited the library as influential. Lilly Tomlin, too. Bill Clinton, too, especially loving books about native Americans. Barack Obama, too. “The first place I wanted to be was a library,” he said when he returned from overseas. He was especially interested in Kenya, the home of his father.


For most of its history, library info science discourse has focused on what was “useful knowledge” in the 19th century, “best books” in the 20th century, or what we now call “information.” Because people don’t have to use libraries (unlike, say, courts) users have greatly influenced the shape of libraries.


“To demonstrate library as place, let me introduce you to Ricky,” he says as he starts a video. She is an adult student who does her homework in the library. When she was broke, it was a warm place where she could apply for jobs.” She has difficulty working through her emotions to express how much the library means to her.

Wayne reads a librarian’s account of the very young MLK’s regular attendance at his public library. James Levine learned to play piano there. In 1969 the Gary Indiana held a talent conference; the Jackson brothers didn’t win, but Michael became a local favorite. [Who won???] In another library, a homeless man–Mr. Conrad– came in and set up a chess board. People listened and learned from him.


“To categorize these activities as information gathering fails to appreciate the richness” of the meaning of the library for these places.


Wayne plays another video. Maria is 95 years old. She started using the library when was 12 or 13 after her family had immigrated from Russia. “That library was everything to me.” Her family could not afford to buy books “and there were some many other servicces, it was library library library all the time.” “I have seen many ugly things. You can’t live all the time with the bad.” The library was something beautiful.


Pete Seeger remembered all his life stories he read in the library.


The young Ronald Reagan read a popular Christian novel, declared himself saved, and had himself baptized. He went to his public library twice a week, mainly reading adventure stories.


Oprah Winfrey’s library taught her that there was a better world and that she could be a part of it.


Sonia Sotamayor buried herself in reading in the public library after her father died when she was nine. Nancy Drew was formative: paying attention, finding clues, reaching logical conclusions.


Wayne plays a video of Danny, a young man who learned about music from CDs in the library, and found a movie that “dropped an emotional anchor down so I didn’t feel like I was floundering” in his sexuality.


Public libraries have always played a role in making stories accessible to everyone. Communities insist that libraries stock a set of stories that the community responds to. Stories stimulate imagination, construct community through shared reading, and make manifest moral weightings.


In his book, Wayne gives story, people, and place equal weight. “Stories and libraries as place has been as important, and for many people, more important than information.” We need to look at how these activities product human subjectivity as community-based. We lack a research base to comprehend the many ways libraries are used.


The death of libraries has been pronounced too early. In 2012, the US has more libraries than ever. Attendance in 2012 dipped because the hours libraries are open went down that year, but for the decade it was up 28%. [May have gotten the number wrong a bit.] In 2012, libraries circulated 2.2B items, up 28% from 2003. And more. [Too fast to capture.] The prophets of doom have too narrow a view of what libraries do and are. “We have to expand the boundaries of our professional discourse beyond information.”


Libraries fighting against budget cuts too often replicate the stereotypes. “Public libraries no longer are warehouses of book” gives credence to the falsehood that libraries ever were that.

He ends by introducing Dawn Logsdon who is working on a film for 2017 titled Free for All: Inside the Public Library. (She’s been taping people at the conference and assures the audience that whatever doesn’t make into the film will be available online.) She shows a few minutes of a prior documentary of hers: Faubourg Treme.

1 Comment »

August 1, 2015

Restoring the Network of Bloggers

It’s good to have Hoder — Hossein Derakhshan— back. After spending six years in an Iranian jail, his voice is stronger than ever. The changes he sees in the Web he loves are distressingly real.

Hoder was in the cohort of early bloggers who believed that blogs were how people were going to find their voices and themselves on the Web. (I tried to capture some of that feeling in a post a year and a half ago.) Instead, in his great piece in Medium he describes what the Web looks like to someone extremely off-line for six years: endless streams of commercial content.

Some of the decline of blogging was inevitable. This was made apparent by Clay Shirky’s seminal post that showed that the scaling of blogs was causing them to follow a power law distribution: a small head followed by a very long tail.

Blogs could never do what I, and others, hoped they would. When the Web started to become a thing, it was generally assumed that everyone would have a home page that would be their virtual presence on the Internet. But home pages were hard to create back then: you had to know HTML, you had to find a host, you had to be so comfortable with FTP that you’d use it as a verb. Blogs, on the other hand, were incredibly easy. You went to one of the blogging platforms, got yourself a free blog site, and typed into a box. In fact, blogging was so easy that you were expected to do it every day.

And there’s the rub. The early blogging enthusiasts were people who had the time, skill, and desire to write every day. For most people, that hurdle is higher than learning how to FTP. So, blogging did not become everyone’s virtual presence on the Web. Facebook did. Facebook isn’t for writers. Facebook is for people who have friends. That was a better idea.

But bloggers still exist. Some of the early cohort have stopped, or blog infrequently, or have moved to other platforms. Many blogs now exist as part of broader sites. The term itself is frequently applied to professionals writing what we used to call “columns,” which is a shame since part of the importance of blogging was that it was a way for amateurs to have a voice.

That last value is worth preserving. It’d be good to boost the presence of local, individual, independent bloggers.

So, support your local independent blogger! Read what she writes! Link to it! Blog in response to it!

But, I wonder if a little social tech might also help. . What follows is a half-baked idea. I think of it as BOAB: Blogger of a Blogger.

Yeah, it’s a dumb name, and I’m not seriously proposing it. It’s an homage to Libby Miller [twitter:LibbyMiller] and Dan Brickley‘s [twitter:danbri ] FOAF — Friend of a Friend — idea, which was both brilliant and well-named. While social networking sites like Facebook maintain a centralized, closed network of people, FOAF enables open, decentralized social networks to emerge. Anyone who wants to participate creates a FOAF file and hosts it on her site. Your FOAF file lists who you consider to be in your social network — your friends, family, colleagues, acquaintances, etc. It can also contain other information, such as your interests. Because FOAF files are typically open, they can be read by any application that wants to provide social networking services. For example, an app could see that Libby ‘s FOAF file lists Dan as a friend, and that Dan’s lists Libby, Carla and Pete. And now we’re off and running in building a social network in which each person owns her own information in a literal and straightforward sense. (I know I haven’t done justice to FOAF, but I hope I haven’t been inaccurate in describing it.)

BOAB would do the same, except it would declare which bloggers I read and recommend, just as the old “blogrolls” did. This would make it easier for blogging aggregators to gather and present networks of bloggers. Add in some tags and now we can browse networks based on topics.

In the modern age, we’d probably want to embed BOAB information in the HTML of a blog rather than in a separate file hidden from human view, although I don’t know what the best practice would be. Maybe both. Anyway, I presume that the information embedded in HTML would be similar to what Schema.org does: information about what a page talks about is inserted into the HTML tags using a specified vocabulary. The great advantage of Schema.org is that the major search engines recognize and understand its markup, which means the search engines would be in a position to constructdiscover the initial blog networks.

In fact, Schema.org has a blog specification already. I don’t see anything like markup for a blogroll, but I’m not very good a reading specifications. In any case, how hard could it be to extend that specification? Mark a link as being to a blogroll pal, and optionally supply some topics? (Dan Brickley works on Schema.org.)

So, imagine a BOAB widget that any blogger can easily populate with links to her favorite blog sites. The widget can then be easily inserted into her blog. Hidden from the users in this widget is the appropriate Schema.org markup. Not only could the search engines then see the blogger network, so could anyone who wanted to write an app or a service.

I have 0.02 confidence that I’m getting the tech right here. But enhancing blogrolls so that they are programmatically accessible seems to me to be a good idea. So good that I have 0.98 confidence that it’s already been done, probably 10+ years ago, and probably by Dave Winer :)


Ironically, I cannot find Hoder’s personal site; www.hoder.com is down, at least at the moment.

More shamefully than ironically, I haven’t updated this blog’s blogroll in many years.


My recent piece in The Atlantic about whether the Web has been irremediably paved touches on some of the same issues as Hoder’s piece.

10 Comments »

July 29, 2015

Reddit is not a community. But there’s a little more to say.

Dennis Tenen has an excellent post reminding people that calling Reddit a community is at best sloppy. I have committed this sloppiness, although at times I do try to be more careful, because I fundamentally agree with Dennis on this. In fact, I resist calling anything on the Net a community because it’s a word worth preserving, although I’m afraid it has already slipped its moorings and has floated away from its original meaning.

I think of communities in their traditional sense as being people who care about each other more than they have to. Even so, Adrienne Debigare [twitter:adbigare] and I recently wrote about Reddit at HBR.org, and we use the word “community” 32 times. We do, however, try to clarify our sloppiness toward the beginning:

[Reddit] is often talked about as a community, but its scale—169M unique visitors a month—stretches that term. Rather, it’s helpful to think of it not just as a community but as a culture that springs from a set of values and a form of discourse.

Adrienne and I also did a Radio Berkman podcast on this topic, and may have been much sloppier.

Dennis does a more precise job. He notes that a community typically: [1] is a social entity, [2] that occupies some contiguous stretch of real or virtual space, and [3] will usually “share a value system, which in turn manifests itself in specific customs, norms, and modes of governance.”

The pedant in me wants to fiddle with that, but Dennis isn’t arguing about the application of a term. He’s pointing out that it’s a mistake to think that Reddit is a single community, a single culture, a single set of people who share the same values, or whatever terms we want to use. Reddit “can be better described as a platform that facilitates a range of activities: some communal in nature, some commercial, and other simply private.”

Dennis is right.

But I think there are some weak ways in which it make sense to talk about a Reddit culture, even while recognizing that there is nothing one can say about values, discourse, or content that would be true of each of Reddit’s tens of thousands of subreddits. But there are at least four reasons to talk about the “Reddit culture” in the singular.

First, Reddit the Company makes a decision about what the default subreddits are on the front page, and I imagine that some very high percentage of users don’t customize that page. The company therefore has made a decision about what topics, values, and forms of discourse will stand for Reddit.

Second, contributors to those default subreddits, and to others, sometimes express a sense of identity, as Dennis notes. You can be a redditor. You can be a good redditor or a bad one. Of course this identity is fluid and not uniformly shared. But it exists. It has something to do with participating generously, accepting some norms of behavior (will the OP deliver?), and appreciating particular values that are assumed to be Reddit’s. These values include things like: valuing what is perceived as free and open speech, responding to challenges with some type of reasoned answer rather than mere assertions or hostility, etc. I’m not saying that Reddit lives up to these; there are deeply troubling gender issues, for example. But to say that someone is a true Redditor is to say something.

Third, the company has expressed political opinions, and has engaged with the “community” directly, responsively, and as equals-in-culture. (Clearly, that’s not been the case in the recent brouhaha.) That is, the company has expressed itself as a culture.

Fourth, the software itself enacts a set of values. Of course it can be used in ways contrary to those values, but it tends toward certain values. For example, it promotes unfiltered speech or speech filtered by the community and its mods; it gives every user equal upvotes or downvotes; it enables digressions from a thread without cost; it encourages linking out to the Web rather than assuming everything interesting is within its boundaries; it generally respects the user by not plastering itself with ads; it encourages pseudonymous speech; it assumes that the “community” will decide for itself which topics are interesting enough to merit creating a new subreddit; it is open source code.

None of these warrant us calling Reddit a single culture, much less a community. I agree with Dennis. I just want to leave room for also talking about Reddit as a culture, or at least as having something like a dominant culture, even as we always append Dennis’ caveats. As he writes, since “Reddit is not a community, then there is no reason for us to expect a uniform set of responses or behaviors from it as a whole. ” That is definitely a mistake we would be wise not to commit.

3 Comments »

July 26, 2015

Angry Birds Pansies

Pansies are supposed to look like thoughtful faces, right? That’s where the word comes from. But something seems to have pissed them off.

Or maybe their DNA somehow got mingled with Ed Asner’s.

3 Comments »

July 20, 2015

How far wrong has the Net gone? A podcast with Mitch Joel

My friend Mitch Joel and I talk for about an hour (sorry) about whether our hopes for the Net have proven to be forlorn. You can listen here.

The spur for this conversation was my recent article in The Atlantic, “The Net that Was (and Still Could Be).”

3 Comments »

July 19, 2015

Wikipedia is too hard: A suggestion

Frequently we consult encyclopedias because a concept came up in conversation or in something we’re reading, and we need to know just enough about it to be able to move on. But it seems to me that more and more frequently Wikipedia’s explanations are too hard and too detailed for this.

For example, if Planck’s Constant came up in something I was reading and I needed to know just enough to make sense of it, here’s how Wikipedia begins its explanation:

Wikipedia first paragraph about Planck's Constant

That may be fine for a physics student, but I need something more like this:

Simple Wikipedia's Planck Constant explanation

Much better.

That happens to come from the Simple Wikipedia. If the article you’re looking at has the address https://en.wikipedia.org/wiki/Planck_constant, replace the “en” with “simple” (https://simple.wikipedia.org/wiki/Planck_constant) and often you’ll get a far more intelligible answer. Well, “often” means 113,937 articles in English so far.

One of the reasons Simple Wikipedia’s opening paragraphs are clearer than Regular Old Wikipedia’s is that Regular’s explanations often think that links replace explanations: you don’t have to explain “proportionality constant” if you link it to its Wikipedia article. That’s great for browsing on a quiet Sunday afternoon, but not great if you’re looking up something in service of understanding something else. Linking instead of explaining seems to me to be lazy.

So here’s a request for someone to write a browser extension that, when you hover over a link in a WP page, pops up the first paragraph of the linked article. If there’s a Simple WP version, it should pop up that first paragraph. Getting an explanation without leaving the page is not just a convenience. It would help preserve the reading experience and improve comprehension.

If this also encouraged writing first paragraphs that are clear enough that they let us get a quick hit of understanding and then move on, so much the better.

In fact, if I were King of Wikipedia, I’d take the first paragraphs of all 113,937 Simple Wikipedia articles and make them the first paragraph of the articles of which they are the simplifications. And then I would retire to my Wiki Castle and drink some wiki mead.


As i was poking around for a bad example of a first paragraph, I came across many good examples. Here’s just one:

In the late 19th century, luminiferous aether, æther or ether, meaning light-bearing aether, was the postulated medium for the propagation of light. It was invoked to explain the ability of the apparently wave-based light to propagate through empty space, something that waves should not be able to do.

Got it! Thank you, Wikipedia!

6 Comments »

July 13, 2015

What open APIs could do for the news

In 2008-9, NPR, the NY Times, and The Guardian opened up public APIs, hoping that it would spur developers around the world to create wonderful and weird apps that would make use of their metadata and spread the availability of news.

Very few little happened. By any normal measure, the experiment would have to be deemed a failure.

These three news organizations are nevertheless fervid evangelists for the same APIs—for internal use. They provide an abstraction layer that makes the news media’s back ends far easier to maintain without disrupting their availability to users, they enable these organizations to adapt to new devices and workflows insanely quickly, they facilitate strategic partnerships, they lower the risk of experimentation, and more.

This was the topic of the paper I wrote during my fellowship at The Shorenstein Center. The paper then looks at ways we might still get to the open ecosystem for news that was first envisioned.

The full paper is available freely at the Shorenstein site.

There’s an op-ed length version at Nieman Reports.

1 Comment »

July 10, 2015

A solution to the Greek crisis

1 Comment »

« Previous Page | Next Page »