software


25
Aug 10

publicly thanking dwdiff

High on the list of things I really enjoy doing is thanking people who contribute to free software. Also high on the list is using software that works well.

So I just wanted to combine the two and say a public thanks to GP Halkes, for writing and maintaing dwdiff. I’ve been using dwdiff since early on in the MPL process, and thanks to two recent changes GP made at my request, it now works even better for my needs (and hopefully better for most people’s needs.) Thanks, GP!


24
Aug 10

Why I love (and hate) Panorama

I’ve been trying to get back to living my life in a task-centric manner, and Firefox Panorama, without necessarily being designed for those goals, is perfect for it. Someone else put the words in my mouth: when you’re trying to do task-centric computing, what you need is not just a place to dump tasks (a task organizer) but also a good task switcher. Virtual desktops (in either Linux or OSX) can be used to dump tasks, but they lack effective visual task switchers. Once you get used to Tab Candy, in contrast, it is an effective way to give you an overview of the tasks you’re handling and move between them in a quick, fairly non-distracting manner.

Unfortunately, it also drives me nuts, because it isn’t comprehensive. I’m very rarely using new desktop apps these days, but I’m still stuck with a lot of old ones (particularly until there is a competent, secure, self-hosted web-based word processor) and not being able to interact with them through panorama is driving me insane; it means switching back and forth between two different mental models on a regular basis, and that is painful. I’ve literally found myself trying to drag application windows into my Panorama desktop. That’s just not good, and I really hope someone uses the Panorama idea for a complete desktop soon.

(Note that despite the original name of tab candy, I don’t think ‘tabs’ is really the important thing here- the important thing is grouping data/applications together, and then having a good high-level overview of the groups when switching between them. That clicking on a collection-task brings up a ffox window with a bunch of tabs, rather than a desktop with a bunch of windows, is (I think) an implementation detail; I’d be happy with a similar organization for ‘traditional’ desktops without tabs as a starting place.)


20
Aug 10

Notes on Diaspora Talk

Diaspora came to lunch at Mozilla today. Some notes.

  • They gave me a nice shoutout. ;)
  • They’re doing pair-programming and test-driven development this summer, which I think is great. Sounds like they’re getting some great guidance from Pivotal Labs.
  • Very explicitly trying to focus on things everyone can use, rather than something for geeks.
  • Are trying to do micro-networks, rather than ‘everyone on the same plane’; I’m curious to see where that goes.
  • They’ll have single-user ‘seeds’ or multi-user ‘pods’ for servers. Push-driven, like email.
  • They’re doing Rails and Mongo, and even Websockets; they’re having problems between Websockets and Rails.
  • Planning on doing a code release by ‘flipping the github bit’ on September 15th, but will continue hacking after that, since they have a ‘low burn rate.’
  • Seem a bit worried about the community management problem once they go live.
  • Have a slide describing feature set for beta; focus on easy group management for you and close friends; private broadcasting to those friends; full data exportability.
  • Longer term: work with ostatus/other stuff to work closely with other distributed technologies; plugin and application infrastructure; build community and focus on design.
  • Anonymity is not currently a design goal, but still thinking about basic crypto and heavy focus on privacy (including privacy expectations-setting.)
  • In the move to california, they appear to have abandoned arepas for tacos. Bad news.
  • I admit I’m troubled that there is lots of talk about technology, and not much talk about UI/HCI/design, but in response to my question they say they mostly didn’t talk about it because it is still very much in flux. They’re talking with others about the problem, which is good to hear.

Anyway, interesting stuff- I continue to wish them well.


9
Aug 10

The Libre Web Application Stack (A Code Story)

[This was originally published at autonomo.us- comments over there.]

[Disclaimer: since my last post at autonomo.us, I have become an employee of the Mozilla Corporation. I don't feel this has tainted my views, but feel free to weigh that information as part of your analysis of this article. Relatedly, I do not speak for that employer when writing here; my words and ideas here are my own.]

tl;dr version: We shouldn’t throw the baby out with the bathwater. The bathwater is the ethical problems with software hosted on someone else’s server; the baby is the strength of the libre web application development stack- which may actually be the best platform for building autonomy-preserving user-oriented software.

Put yourself in 1995. I’m going to tell the you of 1995 that in 2010, there will be a software platform with the following properties:

  • The widget toolkit for this platform will have two independent, competitive, Libre implementations; one of those implementations will be the most widely used consumer-facing piece of free software ever, and the other one will have the support of the second and third largest software companies on earth.
  • Tens of millions of dollars a year in engineering time will go into improving those free implementations of the standard; in fact, Microsoft will spend lots of money and PR time saying ‘we’ve caught up to the libre implementations.’
  • This widget toolkit will have no vendor gatekeepers or tolls; in fact, all the biggest software vendors on earth will have attempted to disclaim patent claims against it, making it not only no-cost but also perhaps the safest free software toolkit available from an IP perspective. New additions to the toolkit will be free by default; there will be some exceptions to this but those exceptions will be bitterly contested, sometimes with huge proprietary software companies weighing in on the side of free implementations.
  • The major implementations of the widget toolkits will be extensible using a simple scripting language, making them much easier for users to customize than most (non-emacs) toolkits.
  • Free software written for this platform can be made trivially available not just to users of free operating systems but also to people on other platforms, potentially helping grow the community of free software developers and users.
  • This widget toolkit will be available on every computing platform on earth; not just PCs but also many phones and soon on TVs. If your hardware supports this widget toolkit, it immediately has enough applications that it is considered commercially viable, leading to an unprecedented blossoming of operating systems platforms (unlike the situation in 1995, where new platforms have no apps and so find it impossible to compete with Win3.1/95.)
  • The logic and data storage systems backing this widget framework will also be varied- there will be proprietary implementations, but there will be dozens if not hundreds of free frameworks as well, in essentially every programming language you can imagine. It is taken for granted that these frameworks run on Linux first. Among many others, the White House will use such a free framework to deliver software.
  • At the same time, because of elegant design, it is easy to swap out backends, so if you want to write backends in different ways, you can do that; in fact, people are taking advantage of this every day to write completely new frameworks with a variety of different properties.
  • A function called ‘view source’ is viewed as a key competitive differentiator in this platform; it is actually hard to close the source describing widget layout and behavior (though easy to close the backend.)
  • Millions of high school kids are taught (at least part of) this framework; millions more will have taught it to themselves using view source!
  • This platform will have been so successful that virtually every single first-world computer user will use it (in some way) every day.

At this point, 1995-you says ‘This sounds too good to be true. There must be a catch.’1

There are two major catches, the second a consequence of the first.2

The first catch is that the default data storage architecture is distributed, and the default licensing is effectively permissive, making it expected (though not mandatory) that users are separated from both the code they run and their data. In other words, developers who use this stack are perhaps more free than they’ve ever been in the history of computing (and not surprisingly they’ve adopted it in droves)- but users often have even less control than they had when they were using traditional proprietary desktop applications.

The you from 1995 would probably think that freedom-lovers would have reacted to this unfreedom by rewriting the thin layer of proprietary code sandwiched between gigantic gobs of free code, and/or by working to make the platform more amenable to local or distributed use. You might expect that they would even have embraced and extended the platform to make it even better for freedom.

Instead, the second catch is that fans of freedom have largely thrown the baby out with the bathwater, ignoring (or at best failing to embrace) this rich, free platform. Instead, in a story straight out of the Innovator’s Dilemma, they’ve continued to focus on traditional widget toolkits and interfaces which lack all the benefits I’ve just listed out.

It should be obvious by this point that the platform I’m talking about is HTML and the many, many application frameworks that can be used to generate it. This platform- what I’ll call the libre web application stack- is not perfect, but it has the potential to be hugely freedom-enhancing, and free software advocates should carefully consider it when thinking about developing their next app, or when planning to extend traditional software platforms to make them more free. Just because most web apps are not free does not mean the stack itself should be disregarded.

  1. This is true whether 1995-you is a free software fan or not; if you’re a free software fan, you’re particularly excited, but if you’re a die-hard silicon valley capitalist you should also be pretty excited by the potential of this platform. []
  2. There are plenty of minor catches too; performance isn’t great; the widget toolkit does not have the vast variety of widgets that more mature toolkits have. But these have been improving consistently for years, and (more importantly) they’ve been improving much faster than traditional toolkits have improved. []

5
Aug 10

Notes on Eugene Bestor’s ‘Backwoods Utopias’

A few months ago I finished reading Eugene Bestor‘s ‘Backwoods Utopias‘, a book on the Utopian social-communitarian movements of the pre-Civil War US. Some belated notes on the book’s themes follow.

The average high school US history textbook gives a thumbnail sketch of these movements, but for those who didn’t get that or don’t remember it, the gist is that, from very shortly after Europeans reached North America until right around the Civil War, groups of people regularly launched themselves into the North American wilderness, trying to found new communities organized around communitarian and egalitarian principles. They met with some success, but eventually the movements petered out, with none of them truly surviving into the modern age.

Owen by BinaryApe, used under CC-BY

The tie from this book to my own interests should be clear, but if not, I should make them explicit: free and open source software often thinks of itself as being sui generis, but in fact it is part of a history (in this country) of retreat from established economic structures with the intent of creating parallel systems that would eventually compete with or replace those established structures with something simultaneously individually empowering and socially just. (See also.) I’m both personally and professionally curious about gleaning lessons from such past experiments- so I picked up the book. If any of this blog’s readers have suggestions either of more histories of this movement, or of histories of other similar movements (watch this space for a post on the local food movement soon), please do let me know in email or comments.

Unfortunately, Bestor’s intended follow-up book (covering the 1840s to the end of the movement) was never completed, which limits the lessons that can be drawn about the decline of the movement.  Nevertheless, some observations and themes from the book:

  • The movement had a broad spectrum of motivations and philosophies- some were heavily religious, while others were overtly anti-religious; some had (or were intended to have) quite complex governance systems, while others were nearly anarchist, and indeed Marx condemned them in strong terms because (to over-simplify) they were not dedicated to fighting the good fight in the cities. Interestingly, while the community focus of these groups was typically very strong, in modern terms we might also call them libertarian (or what Erik Olin Wright calls ‘interstitial’ revolutionaries): they all believed that they had the right and the ability to make a better world by striking off on their own, rather than working within or against established structures.
  • Religion was initially a major motivating force; this faded over time, but Bestor does not make it clear why later groups tended to be non-religious. Interestingly, American critics of later movements like Owenism apparently tended to focus on this non-religious aspect, rather than the practical/anti-capitalist issues modern critics might focus on.
  • As with every movement, looking at who left is often as important as understanding who stayed. In particular, Bestor mentions that when pragmatists became frustrated and left New Harmony (perhaps the highest profile of the various communities), those left behind were a combination of those too lazy to leave and those too fanatic to leave. This was a huge problem for the morale of the remaining pragmatists, who resented the free-riders and were driven nuts by the fanatics, and so they repeated the cycle.
  • Relatedly, Bestor argues that the repeated talk of ‘everyone will live in our miraculous new society any day now’ meant that many newcomers were not prepared for the long haul; that may have disillusioned some people and contributed to a sense of lack of momentum. To paraphrase Bestor, ‘a new society cannot be built on excuses.’
  • When the movement started, it was actually pretty easy to get a community going- lots of land was effectively empty, and the median community size in the US was in the low hundreds, making it quite easy to form a community that had all the ‘comforts’ (such as they were) of traditionally organized communities. As time progressed, two things began to work against this: first, more and more ‘normal’ landowners migrated to the midwest, causing land to become more scarce, and second, even the smallest villages became larger as the country’s overall population grew. This meant that finding enough space for a ‘basic’ community became a much more capital intensive process over time. Not coincidentally, later communities tended to have wealthy patrons- with all the plusses and minuses that brings.
  • As economic complexity increased (more machinery, more specialists) it became harder to create a self-sustaining village, especially if your human capital stocks were limited to ‘believers.’ For example, when the movement started in the late 1600s/early 1700s, having a self-sustaining community required very little specialization, while by the mid-1800s, it was understood that you needed machinists and manufacturers who would trade with other areas. Bestor says that New Harmony was bitten by this, as the land they bought for the town had the hardware for extensive wool manufacture, but lacked the people familiar with the machines, killing an expected source of financial sustainability.
  • Over time, some of the social goals of early communitarians became more broadly accepted or supplied by other organizations. For example, public education was a significant goal of New Harmony, but over the course of the 1800s, that became more common in non-utopian communities. New Harmony also had a concept of mandatory social insurance; unions started providing similar services in the late 1800s. This again made recruitment harder.
  • As for most world-changers, the gap between theory and practice was often large. Robert Owen, the wealthy patron of New Harmony, created an elaborate philosophical scheme intended to encompass everything from the individual to the nation-state, but he was bad at creating practical schemes, which led to constant reorganizations at New Harmony. This may reflect the extreme difficulty of organizing a full society; capitalism has the advantage of being simple and direct in general scheme relative to a centrally planned society like Owen’s.

I’ll refrain from drawing any direct conclusions for free and open source software here, in part because many of them will be obvious to many of my readers, and also because my reading of the book (especially several months after the fact) is inevitably heavily biased by my own thinking about social movements like this one, so I’m not sure whether any ‘lessons’ would reflect actual history or just my interpretation (compounded with Bestor’s.) With or without direct applicability, though, the book was an interesting read for a history nut, and left me with a lot of food for thought.


14
May 10

some data points on facebook

My boss has written a blog post that tries to bring together some recent data points from across the privacy spectrum; it is worth a read. I’ve been noting a few (much smaller, more trivial) things myself over the past few days that suggest to me that privacy concerns in general, but facebook-related privacy concerns in particular, may be reaching a bit of a critical mass.


No Facebook by avlxyz used under CC-BY-SA.

Some anecdata:

These are just anecdotes, and not real data, but to me this feels vaguely different from the ‘rebellion’ in 2006. At that time I said ‘people adjust and things blow over sometimes.‘ This one feels different to me, but that is just a vague feeling; it may stem as much from my own facebook fatigue as from any concrete reality. It will be interesting to watch, at any rate.


8
May 10

responding to joindiaspora

The joindiaspora guys, in a generally good response to my questions, conclude by asking:

[W]hat would be un-pragmatic about giving four excited dudes who spent their last semester of school thinking about a problem you are “worried-about-but-can’t-deal-with-now,” twenty bucks so they can take an honest crack at solving it? :)

Lots of people asked some variant on ‘it is just $20′ or whatever. First, I tend to be one of these people who don’t give token amounts to charity- I prefer to give larger amounts to a small number of projects that have very high impact (or very high odds of success if they aren’t having an impact yet.)

But the money is secondary. The important thing is that there are already a fairly good number of projects in this space, with a fairly small amount of users, developers, testers, and attention to spread between them. And to be blunt, I don’t want someone coming in with more web design and marketing sense than actual hacking chops and using up all the oxygen in the room. I think DiSo did this to some extent, frankly. So yes, giving a little bit of money to someone can be quite counterproductive and unpragmatic- and I wanted to reassure myself that I wouldn’t be contributing to that problem again.

Given that it looks like they’re going to be doing this crazy thing ($13K raised of their $10K target) that concern is now irrelevant.


(untitled) by Môsieur J. [version 3.0b], used under CC-BY.

So some thoughts on the rest of the responses, again in hopes that they are supportive and constructive:

We plan to “build less.”

Hooray! Most of these questions don’t have right answers, but this one did. And the followup priorities seem reasonable- those probably are the right minimum bits necessary. That said, where people have already built things, consider building less than less by working with other projects. Status.net comes screamingly to mind for the message passing component, but I’m sure there are others. Don’t just build shared specs- where possible, build shared code.

We see all of this communication happening between two Diaspora servers, rather than strictly between peers.

This seems like the very pragmatic solution to me; all the talk of real peer-to-peer is terrific but that is a very hard slog- both technically (getting it working) and socially (getting users to install it.)

With regards to DiSo, the response had one set of great things, and one part that was very ambiguous to me:

It seems to us that all of the previous attempts at solving the problem are trying to create the perfect solution in the first version.

I think this is right, and I’m heartened to hear the talk about building answers that satisfy rather than perfect. These are all signs
of excellent taste (not just this sentence, but many of the things both in this specific answer and in the entire blog post.)

Ambiguously:

[DiSo] tried to add on to WordPress, a project which was not designed from the ground up to be a distributed
network.

I’d love to hear more elaboration about ‘designed from the ground up to be a distributed network.’ WordPress has
proven to be a very flexible platform for a lot of things, and it both publishes and consumes structured data very well to that distributed network we call the internet (particularly that subset of the distributed network that consists of Atom/RSS publishers and consumers- I subscribe successfully to many friend’s wordpress blogs in something that looks very much to me like a distributed network.) In addition, things have improved since DiSo started, since there is now PuSH, possibly webfinger, etc. So which features are you looking for in a ‘designed from the ground up’ distributed network that wordpress doesn’t have? I’m not saying that wordpress is the solution, but I’m curious to hear more about what it specifically lacks.

With regards to Mugshot… I wish the Red Hat folks had posted a good post-mortem on that; to the best of my recollection I never saw one. My own sense is that: (1) it was very difficult for others to set up, so it never got an outside development community, and no one looked to it as a distributed solution to the problem. (2) The community it attracted was heavily tech-y, so the community that built on it looked to outsiders (frankly) like it was a bunch of nerds, which made it hard to expand into a more broad-based audience. (e.g., it was a great source of community for linux distributions, not so much for sports. Identica has the same problem relative to twitter; compare a search for lebron on twitter to a search for lebron on identica some time. Ditto Bieber or Gaga. This is very related to Pick The Right Customers.) Both are problems worth being aware of.

Solid answers on specs and services, including a couple projects I hadn’t been aware of- usually a good sign (even if one of them appears to be completely insane :)

We will be constantly sharing our ideas, and 100% of our code at the end of the summer.

I’m still not clear on why no code until the end of the summer. Care to elaborate? I’m not an absolutist on this- mostly for reasons related to bikeshedding and design- but it does seem like an odd default choice.

We think in the future (after the summer), we will work on an easy installation…

Only clearly wrong answer of the whole thing. Easy installation should be baked-in from day one- adding it afterwards is hard. As a bonus, it helps you write automated tests (since automated deployment is easy) and easy installation helps you choose the right customers by helping you attract users who are interesting in talking to other people rather than playing with software.

What are your three favorite books on software development? three favorite essays? what about on design?

Is this one of the questions where if I don’t say “Kernighan and Ritchie,” “Getting Real”, “Mythical Man-Month,” “Don’t Make Me Think!” or something like that, you will disapprove? :)

Yeah, sort of. But ‘Getting Real’ was the right answer. ;) (I sort of wish I had the time to write a mashup of Getting Real and Producing OSS, maybe with a dash of The Poignant Guide.) I also highly recommend Rework and Designing From Both Sides of the Screen. Blog-wise, you might find this list interesting, though not necessarily pertinent to this discussion.

Finally:

We bought him some arepas. They were delicious.

I’m sort of bitter that you live near that particular deliciousness. Also that you called me an old dude. But mostly because I miss those arepas. And the yo-yos. Enjoy one or two for me during your hacking breaks. :)


27
Apr 10

Questions for the Diaspora

So lots of friends were tweeting this morning about Diaspora, a project to raise funds to get a summer’s worth of hacking done on a distributed, Libre social network. A distributed, Libre social network would be a terrific thing to have; I’d love to support it. And I love the eager energy I’m seeing around Diaspora.


Questioned Proposal, by Eleaf, used under CC-BY

But I’m also keenly aware that distributed social networks are hard, and so I’d only give of my money (or my time) to someone who looks like they have what it takes to take a serious stab at the problem. They’re hard:

  • as a design question: how do you make a social network whose UI doesn’t suck?
  • as a technical question: the code involved is complex, particularly if you want to interoperate robustly with other platforms, and doubly so if you want to do that with proprietary platforms.
  • as a social question: getting users to migrate is not easy.

So here are some questions for Diaspora, or really for anyone working in this space. These are not questions with right answers, necessarily. But anyone serious about solving this problem probably has at least some answers for them, so showing that you’ve given them some thought will go a long way towards convincing people that you’re serious about attacking the problem. If you haven’t given them thought yet, I could think of worse places to start. :)

  • What do you think are the most important features a social network should have? How would you prioritize them? Do you plan to Build Less or go big? If building less, what is the minimal set of features you can get away with?
  • DiSo is now two-plus years old. Any ideas why it didn’t get off the ground? Bonus points: same question for Mugshot.
  • What standards, if any, do you plan to work with/build on? (just to throw out a couple, all of which have strengths and flaws to consider: webfinger, oauth, xauth, the buzz APIs.)
  • What other services, if any, do you want to interoperate with? why? how will you prioritize?
  • Any other Libre code bases in the same space you’d like to work with? GNU Social? StatusNet? What ones are you aware of, and why will you/won’t you build on/work with those?
  • Would a smarter client (like Mozilla Contacts) be useful to you? If so, how?
  • What is the strategy to get to a critical mass of users (or avoid having to get a critical mass?)
  • What are your three favorite books on software development? three favorite essays? what about on design?

I don’t mean to ask these questions to piss on anyone’s parade; I deeply want to believe. Heck, what I want to do is fly to New York, sit down in a room, and help you brainstorm and plan. But unfortunately I’m a pragmatist with a day job. I can’t directly help out. So instead I offer these questions. Answer these1 and you’ll begin convincing people that you are also pragmatists: that you’ve thought hard about the questions at hand and you are worth investing in. And I’ll be first in line to do that.

(I should note that unlike some I don’t need code; I think code that is created without much thinking is all too common and frequently damaging. But if you don’t have code, I suggest doing planning- and talking about it- before doing a PR week. :)

  1. or questions like these- you’ll note I skipped some hard ones like ‘business model?’ []

22
Apr 10

three features I’d love in leechblock

I love leechblock. It really helps keep my life sane. I was working some with it this morning to tweak my settings, and it seemed like a good time to write about three features I’d kill for, even to the point of putting up money for them if there were a way to sponsor features (or sponsor third-party hacking- bounties, if you will):

  1. ‘block all sites except this one for ____ minutes’- a button that blocks the browser from going to any other domain for ____ minutes. Sort of like Freedom but with an out for one specific website (and obviously only for your browser.) Goal would be to allow you to focus on one site for 45-50 minutes, so it should probably close or block access to other tabs as well.
  2. ‘no, I really need this’- give an option (probably a popup of some sort?) that allows you to break through leechblock in the off case you really need something. For example, I like to block nytimes.com all the time, but (when I was editing a journal) I often needed to access a times article to confirm a claim in an article. This would obviously require some sort of time-consuming task in order to prevent you from ‘just’ clicking through all the time- probably something like a series of captchas, or just typing in a specific series of random characters that can’t be copied/pasted.
  3. ‘this page has an RSS feed: subscribe to it and add it to leechblock? [yes/no/don't ask again for this domain]‘- one of the strategies that has helped save me over the past few years is aggressively subscribing to feeds, blocking the actual domains, and then only visiting them when I’m in feedreading mode. Making that semi-automatic, and easy to do, would be terrific.

It may well be time to port leechblock to jetpack and rethink the UI as well, but those are bigger projects that I can’t randomly beg (or bribe) people to do.


4
Apr 10

building software to let me read more and less at the same time?

There are lots of sources of links these days- delicious, twitter, and blogs. Many of these are interesting, but not so interesting that I want to read them all the time. Currently I have to decide either to read or not read these people.

I’d like to add a third option: to have a ‘middle’ pool of sources who I don’t read directly, but who are monitored and serve as pointers to other, interesting things. I think having such a third option would let me read less (because I’d stop skimming these intermediate sources), but still also give me fairly good confidence that I’m not missing important things that I should read.

The outline of the software in my head goes something like this:

Step 1: User provides a list of RSS feeds (a mix of blogs, twitter/identica, and delicious feeds).

Step 2: A harvester collects the contents of said RSS feeds.1

Step 3: Parse the content of those feeds for URLs and dump them in a db.2

Step 4: Unshorten the URLs if necessary. 3

Step 5: When a particular url has been mentioned X times in the past Y days4, fetch the URL5, find the content within it6, and jam it in an RSS feed for consumption along with the rest of my top-level RSS feeds.

Bonus step: mash up snippets from the posts/twitters/delicious feeds to provide context for the URL’s content, similar to what Google Reader does when friends comment on a feed item.

I feel like someone must have done this already. If not, the pieces are available (see the footnotes for details on many of the pieces); I sure wish I had the time/skill to put them together myself. :/ This project is one of the things I wish we had more reliable bounty infrastructure for- I’d actually put money up for it if I thought there were a reliable way to get some matching funds and find good developers for it.

Ideas, either about the rough feature sketch, existing software that fits this need, or about methods to make it happen, are all welcome.

  1. Planet is an example of infrastructure that does this. []
  2. Planet’s meme plugin can do this. []
  3. There are scripts and web services available for this; the basics aren’t that complicated. []
  4. again, meme plugin has this concept already implemented []
  5. not in memeplugin- it only provides links []
  6. not trivial, but source is available that does this via readability []

This work by Luis Villa is licensed under a Creative Commons Attribution-ShareAlike 3.0 United States.