find . -name .svn -type d -print0 | xargs -0 /bin/rm -fr
Finding Forrester (he’s not at JCCSF)
One of my favourite scenes from Finding Forrester is when Jamal corrects Professor Crawford:
Prof. Robert Crawford: [to Jamal] Perhaps your skills do reach farther than basketball.
Jamal: “Further”
Prof. Robert Crawford: What?
Claire Spence: [whispered to Jamal] Don’t…
Jamal: [to Crawford] You said that my skills reached “farther” than basketball. “Farther” relates to distance, “further” is a definition of degree. You should have said “further”.
Prof. Robert Crawford: Are you challenging me, Mr. Wallace?
Jamal: Not any more than you challenged Coleridge.
The JCCSF’s new tagline is “Your Membership Goes Farther.”
You can see it on their yelp page and on their bus ads:
Where, exactly, does the JCC’s membership take you?
Spammer fail
Dogs don’t buy dog food
A customer is someone who buys software. A user is someone who uses software.
When it comes to enterprise software, these stop being the same person. This is why enterprise software is so bad.
Data. It’s not sexy. It works.
Engineers Without Borders is running a terrific ad in Engineering Dimensions. I can’t make this any better.
Pac-Man ate my RAID
[>....................] recovery = 2.5% (3836544/152247936) finish=35.1min speed=70370K/sec [>....................] recovery = 3.0% (4642752/152247936) finish=37.5min speed=65481K/sec [===>.................] recovery = 15.2% (23276800/152247936) finish=32.2min speed=66725K/sec [===>.................] recovery = 18.4% (28154624/152247936) finish=28.9min speed=71392K/sec [====>................] recovery = 21.5% (32802560/152247936) finish=28.6min speed=69451K/sec [=====>...............] recovery = 28.3% (43166336/152247936) finish=33.4min speed=54268K/sec [======>..............] recovery = 33.6% (51163008/152247936) finish=25.9min speed=64964K/sec [================>....] recovery = 84.7% (129098432/152247936) finish=7.9min speed=48742K/sec [===================>.] recovery = 99.4% (151444800/152247936) finish=0.4min speed=32068K/sec
Mmmm, dots.
Excel is not a database
The New Organizing Institute Education Fund, in conjunction with the Funders’ Committee for Civic Participation released the 2nd Annual Survey of Civic Engagement Technology.
The report is full of interesting information on how nonprofits (mis)(ab)use technology to manage their organizations.
APIs
Page 9 of the report discusses data integration:
Data Integration
Many of the data integration challenges cited by organizations could be alleviated by a concerted effort by vendors to provide better access to APIs for their tools. Rather than every organization independently developing processes to manually import, export, and merge data, increasing the availability and quality of vendor APIs will help minimize lost resources on data integration.
An increased availability of scripts or programs to automate the transfer of data would also help address organizational difficulty with data integration. For example, vendors could provide a tool that pulls data to the VAN from theDatabank and back with minimal user involvement.
My experience with these APIs is pretty poor. FirstLogic used WDSL and SOAP. Catalist returned comma- or tab-separated text. Blue State Digital’s fundraising tools didn’t even have APIs to get, say, lists of donors.
So how should an API work? Kellan Elliott-McCrea, who works on flickr, explains what an API should do for you:
Political and nonprofit vendors: do this: complete APIs. REST. XML. JSON. Performant. Bulk data.
With Flickr you can get out, via the API, every single piece of information you put into the system. Every photo, in every size, plus the completely untouched original. (which we store for you indefinitely, whether or not you pay us) Every tag, every comment, every note, every people tag, every fave. Also your stats, view counts, and referers. […] Flickr actually goes a bit farther, not only can you get your data out, but it gets enriched as it passes through the system. […] This isn’t the exhaustive list, just a few of the things Flickr does to respect, and collaborate with the people who share their time and data with us.
Excel
Excel is almost always the wrong tool for the job. Whenever someone tells me they want something in Excel, I immediately start discounting other things they’re saying.
So what do nonprofits do wrong? Using Excel as a database:
- 32% use Excel for voter registration data (p. 10)
- 29% use Excel to track membership (p. 13)
- 27% use Excel to track volunteers (p. 13)
- 26% use Excel to track donors (p. 13)
- 26% use Excel to manage their mailing list (p. 14)
Excel is not a database. If you’re using Excel, you’re doing it wrong.
Inspired by Cory Booker
The closing plenary of the Personal Democracy Forum — an hour long — was a great discussion between Cory Booker, Arianna Huffington, RNC tech chair Saul Anuzis, PDF founder Andrew Rasiej, NYT Times tech writer Nick Bilton and Tim O’Reilly.
Cory Booker was by far the highlight. This man is inspiring.
“The biggest thing we’re going to have to repent for as a generation is not the violent wars and violent actions of the bad people, but the appalling silence and inaction of the good people.”
— Cory Booker, paraphrashing Martin Luther King, Jr.
rake task for extracting database contents
db:fixtures:load
. I modified the version I found to take the FIXTURES
environment variable as a parameter. Saved as gist 440058.
# extract_fixtures.rake # by Paul Schreiber <paulschreiber at gmail.com> # 15 June 2010 # # I got this from Peter Gulezian <http://metoca.net/> # Looks like another version is here # <http: //redmine.rubyforge.org/svn/trunk/lib/tasks/extract_fixtures.rake> # # This is the inverse of the built-in rake db:fixtures:load # # Usage: rake db:fixtures:extract # rake db:fixtures:extract FIXTURES=foo # rake db:fixtures:extract FIXTURES=foo,bar # desc ‘Create YAML test fixtures from data in an existing database. Defaults to development database. Set RAILS_ENV to override.’ namespace :db do namespace :fixtures do task :extract => :environment do sql = “SELECT * FROM %s” skip_tables = [“schema_migrations”] ActiveRecord::Base.establish_connection if ENV[“FIXTURES”] tables = ENV[“FIXTURES”].split(“,”) else tables = (ActiveRecord::Base.connection.tables – skip_tables) end tables.each do |table_name| i = “000” File.open(“#{RAILS_ROOT}/test/fixtures/#{table_name}.yml”, ‘w’) do |file| data = ActiveRecord::Base.connection.select_all(sql % table_name) file.write data.inject({}) { |hash, record| hash[“#{table_name}_#{i.succ!}”] = record hash }.to_yaml end end end end end