Open Sourcing and Improving the Citizen’s Briefing Book

The formatting got a little messed up (no paragraphs!) for my posting, but I’ve left my 2-cents for the Obama Administration for my thoughts on implementing and improving future participatory online tools.

If you’re so inclined, give the posting a look (and vote or comment on what you think). The Citizen’s Briefing Book project closes at 6PM today, so if you want to put anything up, now’s probably the time to do it. (there are almost 50K entries so far – that’s a lot of internet rantings to sort through 🙂

Also, a copy of what I posted (w/ paragraphs):

Open Sourcing and Improving the Citizen’s Briefing Book

The Citizen’s Briefing Book was a great project and I’d like to commend everyone involved. I’m looking forward to seeing these experiments with participatory tools continue with the Administration at WhiteHouse.gov.

This is an area I’m particularly interested in, so my suggestions pertain to the meta-discussions that have popped up around improving the Briefing Book (voting bias, aggregating and surfacing related ideas and discussions probably being at the top of that list). While the suggestions themselves point to specific weaknesses in the current implementation, I believe that they more importantly highlight the larger opportunities of generating useful discussion, analysis and direct involvement in improving future participatory online tools.

I’m aware that most government IT is contracted out, but the development of these online tools should perhaps be an exception, both because of their strategic importance to the government and the people, but also for the more pragmatic reasons of their development intensiveness and the deep, fast-changing, and often esoteric expertise required. As talented as agencies like Reside, or Blue State Digital are, many of the most difficult challenges exceed the capabilities of any single group and would benefit from tapping into a much larger pool of motivated technologists.

While, MyBO (which, full disclosure, I worked on last year) and Change.gov were campaign or pseudo-governmental projects, as “government works,” the new WH.gov projects would provide a great, high-profile opportunity for the new Administration to embrace an open process, not just in publishing the source code, but by actively encouraging participation and engagement with distributed source control, open APIs and bulk data access, and dedicated discussion and feedback loops. Furthermore, it’s my belief (based on my observations and experiences within the high technology and the Internet) that creating a transparent and level playing field would also serve to encourage the best and brightest in industry when it comes to contributing infrastructure and other resources that would be required for any sort of serious online undertaking.

There are many talented people working on political tools, and many great third-party non-profits (Sunlight, Maplight, MySociety, to name a few) working on data transparency and other aspects of digital government, but when I look at the challenges facing the development and scaling (in both technical and social interaction terms) of what may eventually be the most transformative of new online democratic tools–those for radically distributed policy deliberation, agenda setting, and direct involvement–it seems to me that fostering an open approach would do much to spur development with tremendous benefits (and almost no additional cost) for all parties, not least of which would be the American people.

Notes on the development of the Citizen’s Briefing Book app:

A Few Random Observations on Events

As one might expect, I have a few thoughts now and again about “events,” even if I have continued my life as a shut-in so far this year. That being said, some days are more event-filled than others (today for example there’s a dinner, drinks w/ an out of town friend, Larry Lessig’s last SF book reading, and a show I just found out about – all, unfortunately, happening at the same time tonight…).

In any case, it was the last event that I want to write about a bit since it was a bit of a serendipitous discovery, and is a good example at some of the gaps that still exist with event tools.

A couple days ago, I saw a pretty neat video featuring a new Electro Harmonix effects box. This demo was definitely a cut above the average music gear demo (this one is even better). Browsing around today, it turned out that Mark blogged about this video yesterday on Boing Boing, and that an EHX employee ended up posting some more info about the performers, including a link to their YouTube accounts. Their current video is entitled Show on Wednesday! and 10 seconds in, it turns out that it’s in San Francisco (the YouTube profile doesn’t have anything about the location). A quick check on the posting date (yesterday) confirmed that the show is in fact happening tonight.

The reason for this lengthy description of how I discovered this event is because it’s really quite a long (and fragile) chain of serendipitous events (particularly in clicking into the comment thread (which definitely wouldn’t have happened if I had caught this post later in my feed instead of randomly browsing on the site), and then choosing the right YouTube account (of three linked), and then clicking play on their new video to discover that they were local).

Now, of course, as any band of any sort would, they have a MySpace page. Which has a big graphic highlighting their show – and they have their show entered (and a MySpace blog post), so if someone happened directly on there, I guess they could find out about it.

At this point, I had enough information to enter it onto the old red and yellow, where I could continue to add to my copious notes on entry improvements (perhaps the topic of some future post).

Red Devil Lounge Calendar DetailNow, of course, since I’m an events geek, I decided to continue along this trail and the next stop was to the Red Devil Lounge’s site and more specifically, their calendar. It, like most other venue sites, is about par for the course, appearing to be hand generated in Dreamweaver. Interestingly, it does have an RSS feed, generated by a commercial desktop app no less (FeedForAll). The interesting (and somewhat amazing) thing about venue sites is that across the board, they haven’t really changed much in the past decade…

Now one interesting thing about the event is that I got the official title wrong (I didn’t change it on the Upcoming event – one of the things we (and no-one else) ever tackled was multiple representations/ownership of the same event). But, rather than go off on tangents about the minutiae of event modeling (there are a bunch of more interesting coinciding process issues with editing even of canonical entries as well), I did want to point out something that caught my eye.

Pirate Cat Radio‘s official link for the “Baghdad By The Bay Showcase” is actually an Upcoming RSS syndication link of the guy who runs the Baghdad By The Bay show, RICK!. Now, it’s pretty cool that Rick has a somewhat active account that has his radio show schedule (sorry recurring events never got better), but surprisingly, the actual physical show wasn’t listed (score one for Upcoming’s entry-dupe checking).

Now, since I don’t do this for a living anymore (and haven’t for a while now, so I’m out of the loop), so this isn’t really any sort of rigorous analysis, and there are some guys attacking the music side of things much more vigorously (for example, it looks like Rick added the concert to Sonic Living last month, and there’s a heckuva lot of Tour/Ticket related activity), so that area, while still incomplete is actually getting a lot more attention than others.

But I guess one of the things that struck me was how there’s lots of information out there, but it’s not particularly well connected. There are some pretty huge gaping holes and the “serendipity” feels more haphazard than gratifying, and well, it’s all just a lot of work.

Hmm, I’ll just end here. I think I started off wanting to talk more about interactions of calendaring/semi-private/public event planning/interactions and proactive discovery, but this is getting a bit long for a ramble, so maybe next time when the spirit moves me (i.e. when I’m avoiding real work).

Clipboard Copying in Flash 10

One of the things I noticed about the DevFormatter plugin I’m using was that the clipboard copying code was no longer working. This apparently is because of the new security upgrades in Flash 10 which now have additional user-initiated action (UIA) requirements for various functions, including System.setClipboard().

While inconvenient, especially since it’s somewhat commonly used, it was a necessary change due to some high-profile clickjacking attacks, and well, a good idea regardless, when you think about it.

Surprisingly, months after Flash 10’s release, it seems that neither the WP plugins I looked at, nor the most popular general syntax highlighter script seem to have fixed their clipboard functionality, as the workaround isn’t too onerous. Instead of the having a JS triggered Flash copy, just reverse it with a Flash button calling a JS function – not quite as elegant since you’ll need as many Flash buttons as you want copy triggers, but not too onerous. It’s been a while since I’ve done any Flash work, but luckily, it didn’t take very long at all.

Since this might prove useful to others, I’ve done this in AS 2.0 for more compatibility and made the package available here under a GPLv3 license: clipboard_copy.

Of course, if you want to create your own unencumbered version, the code is easy enough to create yourself. The JS call looks something like:

function clipboard_copy(id) {
return document.getElementById(id).innerHTML;
// or instead of innerHTML, you can get plain text:
// [((document.all)? "innerText" : "textContent")]
}

Note, you can have the clipboard JS function act on a selection if you’d like, but for my purposes (integration w/ code blocks, getting the text was better).

The Flash is similarly simple. Here’s the AS 2.0 event attachment and ExternalInterface:

// AS 2.0 Event
copyButton.addEventListener("click",click);
function click(event:Object):Void {
var item = "testid";
var jsFunction:String = "clipboard_copy";
var returnValue:String = ExternalInterface.call(jsFunction, item).toString();
System.setClipboard(returnValue);
}

Easy peezy.

A couple of notes:

  • If you’re testing, you’ll want to run from a web server, not the file system, otherwise you’ll get sandbox errors
  • Regular cross-domain rules also apply of course
  • I used the Button Component for my version, which is admittedly a bit fugly. You could in theory have a text-only Flash link that you subsequently styled w/ JS (i.e., to match font-family and font-size), but I’ll leave that as an exercise for the reader

Printing with Python on OS X

Lately I’ve been doing more application programming. I’ve found that the best way to minimize the pain is to write as little Cocoa/Objective-C as possible. For example, here is a snippet is how you’d create a print job in Cocoa:

- (void)print:(id)sender {
[[NSPrintOperation printOperationWithView:self] runOperation];
}

- (void)printDocument:(id)sender {
// Assume documentView returns the custom view to be printed
NSPrintOperation *op = [NSPrintOperation
printOperationWithView:[self documentView]
printInfo:[self printInfo]];
[op runOperationModalForWindow:[self documentWindow]
delegate:self
didRunSelector:
@selector(printOperationDidRun:success:contextInfo:)
contextInfo:NULL];
}

- (void)printOperationDidRun:(NSPrintOperation *)printOperation
success:(BOOL)success
contextInfo:(void *)info {
if (success) {
// Can save updated NSPrintInfo, but only if you have
// a specific reason for doing so
// [self setPrintInfo: [printOperation printInfo]];
}
}

Yeah, I know, kill me now. My approach towards maintaining sanity and productivity has been to minimize these shenanigans by trying to use as little Cocoa as possible. Also, since I’ve come to [[really] disdain] Objective-C, doing the equivalent in Python was also high on my list. (That being said, I’ve also come to realize that writing Python and PyObjC is actually much worse than Objective-C and Cocoa.) What I really wanted was a pythonic way to print on OS X. The ideal scenario would be to import something and say be able to call printer.print() or something like that.

I wasn’t able to find anything like that. But, while I had originally dismissed lpr, it turned out that that was actually able to do what I needed. On OS X, lpr hooks right up to the CUPS used by the rest of the system and can be passed in not just text files, but PDFs and image files as well. Printing looks like this:

lpr -P [printer_name] file.jpg

There are several helpful commands like lproptions and lprstat that can help you with printer specific options. Here’s the CUPS documentation on Command-Line Printing and Options that’s quite useful.

So, the final code looks something like:

import popen2
popen2.popen4("lpr -P [printer] " + output_file)

Ignorance Is Strength

The SF Chronicle had an interesting article, Venture capitalist says U.S. losing green race, on a policy briefing held in Congress today. Here’s the paragraph that jumped out at me (emphasis mine):

Doerr was invited to speak by California Sen. Barbara Boxer, who chairs the committee, along with Friedman, the author of a new book, “Hot, Flat and Crowded,” which calls for a green tech revolution to solve the country’s climate, energy and foreign policy challenges. They spoke at a policy briefing, not a formal hearing, but most of the committee’s Democrats stopped by. None of the panel’s Republicans attended, a sign of the continuing partisan split on Capitol Hill over how to address global warming.

Now, I’m far too jaded to say that I’m honestly surprised, but read that again, and reflect that the context of this discussion was not climate change per se, but rather, a policy briefing on the country’s lack of competitiveness within the new global order:

Doerr, a partner at Kleiner Perkins Caufield & Byers, which is betting billions on clean energy technologies, told senators that two of his firm’s biggest investments were with foreign firms because U.S. companies did not have the most advanced technology. Of the top 30 companies in solar, wind and advanced batteries, just six are U.S. firms.

“Notice the trend here,” Doerr told members of the Senate Environment and Public Works Committee. “We won the space race with the Soviet Union. Now as (New York Times columnist) Tom Friedman says, we’re in an Earth race with other nations to see who can invent the technology so that men and women can stay on Earth. And we are not winning today.”

Switched to WordPress

One of the things that I reassessed at the end of the year was the likelihood that resuming development on my personal blogging software would be anywhere near the top of my priority list. With the answer being a resounding no, and the advances that WordPress 2.7 has made (particularly w/ the admin interface), it made sense to finally stop putting it off and switch over.

Whipping up a direct database import was pretty straightforward and didn’t take long (less than 80 lines all-told), and I was able to import all 4,149 entries (and over 900 revisions) without a hiccup. I also imported additional the legacy urls and IDs as additional metadata. I ported over my current look into a template, and added my legacy code handling so even my most ancient blogger and other static-based posts should continue to resolve (the 404 checks to see files resolve in legacy.randomfoo.net and I have a few additional redirects that mostly seamlessly forward along the most ancient requests).

The last thing on my plate is figuring out how to best migrate Disqus comments to the new posts. I think that I’ll need to modify the Disqus WP plugin to pull from the legacy_id when applicable. Until then, I’m just redirecting old posts to the old system.

Also, sorry for those subscribing to my feeds for the potential dupe-age. Old posts retain their previous guids, so I guess it’s up to your feedreader to see how it’ll handle the transition…

A few interesting numbers:

  • 2554 posts in Blogger starting in 2000 (not counting my older FA410 class blog from ’99)
  • 1256 posts via text files in vim starting in 2003
  • 1300 posts in a custom db-backed system starting in mid-2004

So, anyone have recommendations on indispensable plugins?

Kicking off the New Year Right

My music consumption lately has been pretty out of control. This past year I clocked well over 1000 new albums, so listening to something twice practically qualifies it for my “best of the year” list. As anyone who listens to a lot of music knows, the (irony? inevitability?) is that as you listen to more, it gets harder and harder to find something that really stands out of knocks your socks off.

Still, when you do, I don’t think it loses any of its power. So thanks Mark, for helping me kick off the new year right.

Chessie: on MySpace, on Last.fm

Online Tools for A New Small Business

One of the interesting things I’ve been doing recently has been looking at support tools for running a new company. I remember Ev writing about this a couple years ago. This research was pretty new for me since none of the following services even existed when we started Upcoming (not that we had any need for most of these anyway; we were focused exclusively on building a cool app: our only capital cost was servers [offset by AdSense] and our burn rate was our cost of living).

Anyway, after a day or two of poking around, here’s a list of the top picks (and in some cases, worthy alternatives):

  • Google Apps – a no-brainer for email and document sharing. Unfortunately, while good for individual services, its functionality for even basic sharing is rudimentary to non-existent. Shared documents require manually sharing each document (no shared spaces) and there’s no concept of shared email (for handling shared support, customer service, etc.)

    Price: free

  • Dropbox – Fully integrated w/ on the Desktop, up to 2GB. It just works.

    Price: free

  • FogBugz On Demand – I’ve been using hosted FogBugz for a couple years now. It still has some UI rough edges (although less than JIRA, I suppose) and its Evidence-Based Scheduling is a unique (and awesome) feature. Also, it’ll hook up to email for handling support, which fills in that gap. So, we’re using it for Task, Issue, Effort, and Support Tracking.

    Price: free (2 person Student and Startup Edition)

  • Xero – the international edition (they are New Zealand-based) of this Accounting service was released just a couple days ago, but so far I’ve been incredibly impressed by the functionality and polish. It’s far better than anything else we looked. Besides all the regular banking features, it also does Invoicing and Expense claims tracking. (Reading about the company itself is interesting – I guess there aren’t lots of NZ startups, and the fact that they did an early IPO means all their early growth numbers are public record).

    Price: ~$25/mo (NZ$499/yr)

  • PipelineDeals – after reviewing all the big CRM tools (starting with Salesforce and SugarCRM) I was feeling pretty depressed – they’re all ridiculously bloated, clunky, and just pretty much unusable. I couldn’t imagine being forced to use anything like that on a daily basis. PipelineDeals was a breath of fresh air and supported everything we need for contact tracking as well as providing the best lead/sales tools that I found.

    Price: $15/mo per user

    One alternative worth highlighting is Relenta (Demo l/p:demo). It integrates a shared email system with contact management (it also supports pretty robust email campaigns/newsletters) with support for canned response, auto-responders, role filtering, etc. I remember talking about an app like this w/ some friends years ago, and it’s a great implementation. It wasn’t a good fit for us since we needed something for, well, selling stuff (a surprise, I know), but if your needs are more customer support focused, be sure to take a look at Relenta. I also looked at Highrise, which is slick, but found it to be pretty shallow.

  • MailChimp – although CampaignMonitor is nice, its per/campaign pricing model didn’t make a lot of sense for our use. Mailchimp’s more flexible pricing (which includes monthly pricing) was a better fit, and support for segmentation and A/B testing I guess makes up for individual stats being an add-on. (Vertical Response is another service that has some interesting services like Online Surveys and Snail Mail Postcards, so that might be worth looking into, but at least by my Twitter @replies, MailChimp won out unanimously).

    Price: $10/mo (0-500 subscribers)

Lastly, while Silicon Valley Bank got a lot of love for being the bank for startups, for the day to day business needs (bill/direct payments, business taxes, payroll, merchant account) it looks like Wells Fargo Small Business is a much better fit. Other payroll options include SurePayroll (which used to do WF’s payroll) and PayCycle, although I’m not sure there’s enough of a cost difference to justify the extra hassle. That being said, it might be worthwhile to use Costco/Elavon Merchant Processing.

There are a few other things that we’ll probably end up trying out (UserVoice, GetSatisfaction, maybe some MOO cards) but I think this pretty much covers most (if not all) of our business needs. Anything I’m missing? Or are there any favorite apps/services that people like? Feel free to comment.

See also:

Update: Zoho looks pretty decent as an all-around solution, anyone try it? One caveat I should mention w/ the use lotsa apps approach is that I’ll need to spend a bit of time writing glue code for syncing contacts between the CRM and everything else (most of the tools appear to have decent APIs, but still a bit of a pain).

2008: Looking Back, Looking Ahead

Some years seem to pass by without much to commemorate them. I’d be hard pressed for example to recall anything specific about 2003 (that’s sort of embarrassing actually, but literally true). This year flew by for me, and while it wasn’t filled with any monumental realizations, it was abound with changes and things that happened – I thought I’d make a few notes in case I find myself looking back in 5 years…

Early this year I felt like I closed a chapter, tying up loose ends and wrapping up at Yahoo! and by extension (and with more finality), Upcoming. I left for my 9th SXSW in March a free man – and for the first time with both the inclination and the time to stick around for SXSW Music. I’ve booked my two weeks for next year.

I had a couple months to play (thanks Brady) before getting wrapped up in presidential politics. Enough has been written about how a bunch of geeks helped make a new type of campaign possible. For now I’ll just say that I’m proud (and rather humbled) to have been able to spend a big chunk of 2008 helping to elect a better President. It was worth doing.

There were a lot of things that I didn’t get to this year, and I’ve made a list of the things I want to make an effort to do better for next year, not least of which is emerging from semi-hermitude — at some point over the past couple years, “hanging out” seems to have become a much harder thing to do; not a novel observation I know, but true nonetheless. Still, this year I think was a great boon in terms of tempering, in the best way, both my expectations and ambitions. Rather than being dulled, I feel rather my resolve and focus being made more durable. And while I’m stilling processing it all, I emerge not feeling old, but rather older, and maybe a bit wiser.

I’ve been up for the past 2 days working on a brand new project that I’m incredibly excited about, and I’m thinking that 2009 might see a return to regular blogging – sharing the news lessons I’m learning, and maybe telling some old war stories as well.

Happy New Year everyone.

Additional Personal Storage

One of the things that I spent some time working on the past couple weeks was organizing my file storage (currently about 3TB of NAS and 3TB of DAS, all RAIDed). I haven’t made 100% progress, but I have made a big dent on shuffling files around – my goal is to have 2 (and only 2) RAIDed copies of important personal files, and then most “media” on a single RAID6 device. Of course, in the course of shuffling, it occurred to me that it might be easier if I had some additional storage…

After evaluating options, the real choices came down to either building a low-power NAS or daisy-chaining a bunch of drives up to my Mac Mini. The latter option is actually cheaper as long as you don’t mind some manual management of mount points (which I don’t), however, finding out about enclosure support for spin-down, noise, and power consumption is pretty much impossible – even though these are pretty much the only distinguishing factors of an enclosure (IMO), no one online, reviewers or users, seems to care all that much.

In the end I decided to hold off a bit to see how the 2TB Barracudas turn out (all other things being equal, I’m leaning towards building a new NAS since I sorta want to play w/ Nexenta and ZFS/RAIDZ – although OpenFiler looks quite sharp). But, since the data/research here is pretty up-to-date (and soon out of date I’m sure), I’m publishing it in case anyone might find it useful: