Author: Karl Fogel

I just had a very satisfying free software experience!

Over the last few months, my non-profit organization ( has been having the sort of problem any non-profit would want: we’ve been getting lots of donations from many sources. The majority are directed donations to the Sita Distribution Project, so the money is used only there and not for general operating expenses. But the bookkeeping overhead is the same either way: the money has to actually get into the correct bank account somehow, a tax receipt has to go out to the donor (at least for donations over a certain amount), and both the donor and this donation need to be entered into our records.

That last part is more of a challenge than you might think. We started out with a manual process for recording donations: every time we got a payment (by Google Checkout, PayPal, check, or bank transfer), I’d create a new text file (based on a template) in a version-controlled directory, recording the details of the transaction. It was a poor substitute for a database — grep was our query mechanism :-). But it worked well enough, as long as there were only a few donations to process in any given week.

However, as the project got under way, the donation rate quickly rose while the average amount of each donation went down. In other words, we were getting a lot more donations, for smaller amounts. Pretty soon it was up to several a day, sometimes more than ten, with most of them coming in through online payment processors: Google Checkout or PayPal. My manual process for transferring information from the Google Checkout and PayPal web pages into text files quickly became totally untenable. If I spent the whole day processing donations, I might be able to keep up, but that’s hardly a good use of time.

Enter CiviCRM

I’d heard about CiviCRM for a while, but never used it before. It’s a free software, web-based membership and donation management system designed for non-profits. It fits into popular content management systems like Drupal, which happens to be what uses, so on the recommendation of Donald Lobo — about whom more in a moment — I installed it and started poking around.

Within about ten minutes I knew I had the right tool for the job. It wasn’t the CiviCRM user interface that convinced me (though the interface is good enough that I could find my way around before reading any documentation), but rather the fact that the data entities were organized in the right way. For example: like most non-profits, we get repeat donations, and therefore want to organize things around the donor rather than the donation. In database-speak, donors stand to donations in a one-to-many relationship. While CiviCRM keeps track of each donation individually, donations are always attached to a donor, and the donor is the “primary” object — which makes sense, because the donor is usually much more interesting to the organization than any individual donation is. This and other things convinced me that in CiviCRM, our information would be organized in a sane way.

But even though I could see that CiviCRM would solve our problems in the long term, we still had an immediate, pressing need: how to get at the donations still pending in the Google Checkout and PayPal queues? By this time there were quite a few, as I’d had to stop doing manual processing while searching for an automated solution, just due to time constraints. As far as is concerned, those donations don’t exist until we process them. If we were going to switch to CiviCRM (which I very much wanted to do), then we had to have a way to get those donations into the system, and to continue pulling future donations from those sources in some semi-automated way.

It turns out that Donald Lobo, the same fellow who had pointed me to CiviCRM in the first place, works on CiviCRM full-time (CiviCRM development is supported by the non-profit Social Source Foundation) and had wanted to solve this problem anyway. When he heard that needed the feature, he wrote the ContributionProcessor.php script to solve the problem, and then — I’m not making this up — stayed up with me several nights in a row, after putting his kids to bed, to test and debug the script in real time so he could be sure it really solved the problem. He was in California, I was in New York, so we would get into the same IRC channel and walk through data pulls, tweaking the script until we saw that CiviCRM was pulling all the data it should be. The script works quite reliably now, and should be available in an upcoming release of CiviCRM.

I now run the script every week or so, once for Google Checkout and once for PayPal. By “run the script”, I just mean hit the script’s URL along with the correct parameters. Something like this:\

or this:\

In case you’re thinking of trying this yourself:

  • The type field is google or paypal.
  • The ppID is the CiviCRM Payment Processor ID associated with that online service. The Payment Processor is an entity you create in the CiviContribute section of CiviCRM (when you create each payment processor, you’ll tell it the appropriate login information for talking to the service it’s supposed to talk to). Although the IDs of the two processors I created happen to be 3 and 5, they could be different numbers for you.
  • I typically set start and end to 30 days ago and 1 day ago. Even though I run it weekly, that’s okay — CiviCRM won’t double-process any donations; it detects duplicates and skips them. You’ll see the “skipped” notices in the script’s output.
  • The name field is for the name of the Drupal user whom the script should run as. Typically one makes up a role user; I called it civicrm_api, which seems like a reasonable default.
  • The pass is the Drupal password for that user.
  • The key is the CIVICRM_SITE_KEY, usually specified in the file .../sites/default/civicrm.settings.php, like so: "define( 'CIVICRM_SITE_KEY', 'YYYYYYYYYY' );".

When we get the occasional donation by other means (check or bank transfer) I simply log into CiviCRM, create a new donor record, and then create a donation attached to that donor. After that, it looks just like any other kind of donation, and we can deal with it in the system the same way we deal with all donations.

Thanks to CiviCRM (and to Donald), a great weight has been lifted off my shoulders. We’re not dropping any donations on the floor, and I can start to explore CiviCRM’s other features. Next on my list: learning how to send out automatic acknowledgement emails (with tax information), and how to manage “campaigns” (as I think they’re known in CiviCRM) to make sure that that directed donations are recorded as such in a more formal way than the notes we’re currently attaching to them.

In the meantime, if you’re responsible for IT at a non-profit that doesn’t yet have a donor information management system, I strongly suggest checking out CiviCRM. Support is available, both from the volunteer community and from professional consultants.

This notice just went up at the Software Freedom Law Center…

Could it have anything to do with Microsoft filing suit against TomTom I mean Microsoft filing suit against the free world?

They don’t say, but the timing certainly is interesting:

SFLC Seeks Patent Attorney dedicated to Software Freedom

The Software Freedom Law Center, a New York based not-for-profit legal services organization that provides legal representation and other law-related services to protect and advance Free and Open Source Software (FOSS), seeks a registered patent attorney passionate about defending software freedom.

The Patent Attorney will principally be assigned to patent related legal matters, including counseling, opinion work, drafting of requests for reexamination and possibly litigation support. The Patent Attorney will also be asked to assist with other SFLC legal matters involving copyright, licensing, trademark and corporate issues. In addition, the Patent Attorney will be expected to publish writings and make public presentations on topics relating to patent law’s impact on FOSS.

In addition to being registered to practice before the USPTO, candidates should have a minimum of two years patent law experience, a software or computer science related technical background, and familiarity with FOSS. Ideal candidates will already be a competent and regular user of a Free Software operating system.

Salary is comparable to public sector legal positions in New York and not commensurate with private practice. An excellent benefits package is provided. To apply, please submit a resume in a free data format (such as OpenOffice) to SFLC is an equal opportunity employer.

If you know a patent attorney who wants to work with a great bunch of people on protecting the free software world, please tell them about this opening!

[frdm] Support SFLC

Outdoors at the inaugural celebration, Columbia University:

Obama speaking.

Never forget — we must be the change we wish to see on TV (zoom in on the screen):

Crowd watching a crowd on TV.

This poster, on a lawyer’s office door in Harlem, is one of my favorites. It’s been up for months, and was still up after the inauguration today:

"Love We Can Believe In" poster, close up.

Obligatory snarky comment: did Rick Warren not show his speech to anyone who could recognize a fencepost error? We’re celebrating the peaceful transfer of power for the 43rd time, not the 44th. 44 presidents means 43 transfers.

Inauguration Day, From Above.

I just spent weeks learning more than I ever wanted to know about the sorry state of video editing on Linux, but the result is worth it:

Nina Paley, being interviewedsite logo for

It’s an in-depth interview with animator and cartoonist Nina Paley, whose award-winning, feature-length film Sita Sings The Blues cannot be distributed because of copyright restrictions.

She built the film around episodes from the Indian epic the Ramayana and songs recorded by torch singer Annette Hanshaw in the 1920s. The recordings are no longer in copyright jail, and the Ramayana never was, but the compositions are. Nina Paley is therefore expected to pay tens to hundreds of thousands of dollars for the right to distribute the film. That’s a lot of money just to affix some 1s and 0s to some platters. Are we running out of 1s and 0s? Is there a shortage?

The most chilling part of the interview, for me, is where she talks about how thoroughly most filmmakers have “internalized the permission culture”, to the point where they won’t even consider incorporating existing art into their works, because of the potential copyright entanglements. Everything must be separate; everything must unconnected to everything else; novelty is enforced by decree, whether it suits the artist’s inspiration or not.

Hello? This is not censorship because… why, exactly?

Apparently Barack Obama has now gotten his first intelligence briefing.

Hearing that made me think of one of my favorite passages from John Piña Craven‘s book The Silent War (Craven was Chief Scientist of the U.S. Navy and a key figure in developing its nuclear submarine program):

The Silent War, by John Piña Craven.

Whenever I participated in the presentation of similar briefings to new cabinet secretaries and undersecretaries, new presidents and vice presidents, and other newly elected or appointed officials, I would watch for the same psychophysiological encounter with terror at a point in the briefing that I called “the overwhelming moment”. Poker players will have observed such a moment in the glaze that forms on the eyes of the neophyte when he realizes that he is out of his depth and that he has already staked more than he can afford or its emotional equivalent on the outcome of the game. In these briefings, the overwhelming moment would invariable be followed by either a blind surrender to the exigencies of the program or by a bracing of the shoulders as the members of the [military program] had braced their shoulders in realization of the authority, responsibility, and accountability that participation entailed. Only one official, Defense Secretary Robert McNamara, would not respond this way. Initially, I believed this to be the result of a superhuman level of understanding and self-confidence. Sadly, I would discover that this only reflected his unshakable belief in a dogma of management practice that substituted bean-counting formulas for knowledge and understanding.

For some reason, Craven’s publisher decided to market the book as a kind of real-life military thriller, hence the cheesy cover. That’s a pity, because it’s actually a serious book about how technological innovation happens in the military — the Navy, in this case — and about the political implications of that process.

It is no romanticization of imperial might to realize that the moment when a president-elect is told exactly what the intelligence services really know, and exactly what the capabilities of the military really are, must be sobering in a way that makes the campaign seem like child’s play. If the candidate has any ability to grasp the magnitude of what he’s hearing, he cannot help but feel unsettled, and probably terrified, at the responsibility.

Let’s hope, for the world’s sake, that Obama is an Obama, not a McNamara.