The State of Salsa: Empowering Online Activists

From DevSummit
Revision as of 21:55, 15 May 2015 by Vivian (Talk | contribs) (1 revision imported)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Facilitated by Geoffrey Sean Harcourt, Wired for Change

Salsa and Wired for Change provide a powerful platform for online advocacy and activism. Geoff will discuss the state of platform, demo new features, and invite feedback from participants.

Developing for Nonprofits in Salsa Where things are going for developers

Presenters: Geoff - director, Salsa Marketplace Jesse - developer at Wired for Change (political arm of DIA)

Audience: Tech discussion of Salsa

Download Geoff's slides

What is Salsa? - Toolset - Dev platform - A way to connect w/100s of nonprofits

 2/3 NPO, 1/3 political

Salsa is a toolset - Supporter mgmt - Donations - Email blast - Advocacy campaigns (e.g. contact legislators for 1Sky based on zip codes) - Chapters/sub-orgs - partition tools/info based on

Salsa is a platform - SalsaScript - server-side Javascript for building Salsa packages - Will have app store for devs to build - Marketplace

SalsaScript - Server-side javascript - In HTML files with .sjs file extension

Common methods - Getting stuff - Use the DB object to retrieve info:

 * DB.getObject
 *getCount, getSum
 * getLeftJoin
 * Objects in Salsa - stuff we store
 * Can tag objects - like gmail - then, aggregate by tags
   (e.g. tag a group of supporters that attended a house party, tag donations, tag emails)
   Have to specify by type

Common Methods - Rendering Forms - Generate forms quickly: <?=render.input(...) - See slides for - Handles validation - Pass the field to the render function and they will get rendered

 * Including custom fields
 * Provides field labels (internationalized)

Q: How is HTML generated? - SalsaScript is hosted; URL forwarding to hide

Q: What form validation support is there?

 * You still have to do highlighting of invalid form values yourself, probably in Javascript.  Still under development, they know that validation is a feature desired by dev community

Release model is incremental - not by version - New features are deployed as soon as they are considered stable - However, big "release" in October:

 * Includes JSDocs - auto-generated API docs

Documentation - They are open to requests to improve, clarify, add to documentation. Email your requests to: - Cookbooks - How-to questions

Salsa API - How Salsa interact with external systems - Also used to create custom forms - Generally speaking, don't need to be authenticated for read access, do need it for write ( - Prevent auto harvesting of supporter information

Q: How do you partition organizational data - Some orgs have their own DB, some share a DB, but in all cases org data is kept separate and not shared - Use an organizational key

Q: Can use DIA payment processor via the API - No, due to security considerations - Workaround: use subdomains - side benefit is shorter URLs (otherwise Salsa URLs tend to be long)

What does this all mean? - Salsa is great platform for NPOs - lots of potential users of your ideas and work

Salsa Marketplace - Launch this winter, like iTunes/app store for Salsa packages - Will include automated billing system and online package purchase - Flexible pricing: tiered, by # of emails, # of text messages, fixed monthly fee, # of supporters, tiered by size of organization - GlobalCommons - will bill based on # of text message - Want to make it easy for devs to contribute and be rewarded - In the foreseeable future, they will NOT take a percentage of the proceeds. Their main priority is to encourage adoption of Salsa.

Developers are really open to receiving questions

How do I get started - Create dev account at - Docs: cookbooks, SalsaScript reference docs, API docs, examples, tutorials

Goal: make Salsa's documentation not suck!

Q: Can you create new objects in Salsa? - Previously, could only extend the "Supporter" object - Right now: can extend (add custom fields) existing Salsa objects - Still in development: creating new objects - suggest waiting awhile before trying out this new functionality - They can also provide one-off custom tables for customers - talk to them if you need solutions

Q: How do you debug Salsa? - Log method - to print your debugging messages - Supports FirePHP (plug-in for Firebug on Firefox) - No step for step-through debugging (yet)

Q: How do you manage a Salsa codebase for one's org? - SVN right now, probably moving to git this Thanksgiving - For external devs, not the greatest version control - After moving to git, planning support to let external devs create their own git branch (not till post-2009) - They are looking to improve this process; need to balance fast/incremental deployment with the need to protect client's interest & system stability - Vetting developers - During business hours they can push your change out pretty quickly (~15 mins)

Q: How to regression test changes to your existing Salsa package - The code runs on their servers (not locally) for testing - There is a development sandbox/demo account you can use - You can use Selenium, other Javascript test frameworks for testing

Salsa is open source - but practically impossible to install by yourself

Q: Can you use SalsaScript to write an API wrapper - Yes, and it's been done

Q: Are there tools to sync between sandbox & production environment so that the environments will match - They are working feverishly on this, it is a very frequent request - The hurdle is email blasts - don't want people to accidentally send an email blast - Other option being considered - auto-generated data for test set - They are looking at options for this, it's a high priority

Q: Any ideas for Salsa package ideas? What are people already building? - Text message blasting - Ground Crew - coordinate a geographically distributed group of volunteers through text messaging - Predictive dialing tools, war dialer, robo-calls - Peer-to-peer fundraising campaigns - Tracking supporter actions and rewarding them

Q: Can you set up jobs that run periodically? What about triggers? - SalsaScript scheduler - like cron jobs - Support for post-save triggers - by object type - For Drupal integration - use data sync connector to dump entire Drupal DB into Salsa. Changes in Salsa are pushed back to Drupal DB via the data sync connector again. They will probably follow this general approach for large-scale integration, rather than having an integration API

Q: What's the dev website like? - Lots of docs, examples - they have a dev who's really proactive about supplying examples

Q: Performance: are there guarantees for response time for API calls? - No

Check out Janette's Salsa session tomorrow

If you have any questions, issues, roadblocks, don't hesitate to talk to Geoff: He spends a lot of time talking to external devs and his goal is to make Salsa Marketplace a vibrant community.

Hundreds of clients are awaiting your Salsa contributions!

Jesse welcomes your discussions/ideas on server-side Javascript