Deprecated: Function get_magic_quotes_gpc() is deprecated in /home/customer/www/ on line 37 - New pages [en] 2022-10-05T06:36:41Z From MediaWiki 1.26.2 E-democracy 2014-07-01T17:13:36Z <p>Admin: </p> <hr /> <div>''This is a revived page from the former DoWire Wiki. As narrower terms like open government, civic technology, etc. are [;cmpt=q in vogue today], it is notable that [ the debate over defining terms] has shifted to more popular terms. &quot;E-democracy&quot; as a shorten term pre-dated use of e-commerce, e-business, starting in [ 1994] etc. but came after teledemocracy and the long-form rare use of the phrase &quot;electronic democracy.&quot;<br /> <br /> ==Defining E-democracy==<br /> <br /> The working definition for e-democracy used by the [ Democracies Online Newswire] is:<br /> <br /> * E-democracy represents the use of information and communication technologies and strategies by democratic actors within political and governance processes of local communities, nations and on the international stage. Democratic sectors/actors include governments, elected officials, the media, political organizations, and citizen/voters. (see below)<br /> <br /> * To many, e-democracy suggests greater and more active citizen participation enabled by the Internet, mobile communications, and other technologies in today’s representative democracy as well as through more participatory or direct forms of citizen involvement in addressing public challenges.<br /> <br /> Source: [ Steven Clift's E-Democracy Resource Links]<br /> <br /> The framework is presented in his Global E-Democracy Trends presentations this way:<br /> <br /> E-democracy is:<br /> <br /> * the use information and communication technologies and strategies by democratic sectors<br /> * within the political processes of local communities, states, nations and on the global stage.<br /> <br /> E-democracy ...<br /> <br /> * is now, what kind is it?<br /> * is accelerating &quot;as is&quot; politics<br /> * will promote active citizen participation only with the &quot;e-citizen&quot; perspective included<br /> <br /> Each democratic sector is contributing to e-democracy and needs to do its part. Only with democratic intent and the application of best practices across all democratic sectors will e-democracy be viewed as a positive contribution. E-democracy success will be achieved when we drop the &quot;e&quot; and simply call it democracy.<br /> <br /> == Democratic Sectors ==<br /> <br /> Democratic sectors<br /> <br /> DoWire's pragmatic definition of e-democracy is based on the simple idea that e-democracy will make a positive contribution to citizens and democracies if best practices and democratic intent are applied by actors within the democratic sectors.<br /> <br /> Our detailed list:<br /> <br /> Representative Institutions and Elected Officials<br /> * Administrations including Public Officials and Civil Servants<br /> * Local, Regional, State/Provincial, National, Supra-National, Intergovernmental, International Governmental <br /> * Organizations<br /> <br /> Political Interests<br /> * Political Parties<br /> * Candidates<br /> * Interest Groups<br /> * Community Groups, NGOs<br /> * Activists and Elites<br /> <br /> Media<br /> * Mass Media<br /> * Online Media and Commercial Content<br /> * Power Blogs, Citizen-based Online News<br /> <br /> Private Sector<br /> * Software Developers including Open Source<br /> * Connectivity (Technical access primarily market driven, government/libraries/others play role)<br /> * Technology Devices<br /> <br /> Citizens<br /> * Participating E-Citizens<br /> * Informed Citizens Online<br /> * Passive Citizens<br /> * Disengaged Citizens</div> Admin Welcome neighbors 2014-03-30T16:48:49Z <p>Admin: </p> <hr /> <div>A simple list of informal &quot;Welcome Neighbors&quot; gatherings spontaneously hosted by [ Neighbors Forum] members.<br /> <br /> We are suggesting mid-April - perhaps a day between Friday, April 11 and Thursday, April 17.<br /> <br /> This is an experiment! If any events are missing from this list, [ contact us.]<br /> <br /> * Stay tuned!</div> Admin Event Site Guidance 2014-03-12T23:28:31Z <p>Wbushey: </p> <hr /> <div>Some brief and useful information to follow when one want's to put up a quick site for an event or cause.<br /> <br /> = Main Site/Blog =<br /> <br /> # WordPress is your friend. A basic install is pretty easy to setup, there are a ton of plugins and themes, and the content editing is flexible enough for a site that isn't going to have a complicated information hierarchy.<br /> # Themes - It's important to decide on a theme and colors early. Simple, responsive themes tend to work best. So far, we've had success with:<br /> ## Epic - Two tone theme with nice social media buttons and a nice sidebar.<br /> ## Ward - Theme with a Jumbo Headline and four image/text blocks on the front page. Sidebar isn't quick as useful, and the footer needs a bit of editing.<br /> # Setup [ Google Analytics] - At the very least create a new site, if not a new property, in your account. If you don't have an account, create one.<br /> # Create a MailChimp list and campaign for the site. You can drive a campaign via RSS, which quickly creates a list users can subscribe to to be emailed about new posts from the site. You can also [ integrate a MailChimp campaign with Google Analytics].<br /> # A few plugins that are useful for helping to promote the site:<br /> ## [ Google XML Sitemaps] - A sitemap generator; helps search engines discover content on your site.<br /> ## [ WP Open Graph] - A simple plugin for defining the tags that Facebook/Twitter/Other Social Media use to find pictures and content associated with the pages on your site when they are shared on these platforms. You can define default values for these tags for the whole site, and post/page specific ones.<br /> ## [ MailChimp for WP] - The free version makes it pretty easy to create simple signup forms for the MailChimp campaign you setup above. The free version is a bit limited in what it can do (no Ajax, no fancy datatypes), but those aren't big problems.<br /> # Submit the sitemap.xml that the above plugin is generating to<br /> # Other useful plugins:<br /> ** [ Google Analytics] - Simply adds Analytics tracking to all content on WordPress<br /> ** [ Ninja Forms] - If you want to collect information from users, ask they to support your cause, etc... The free version doesn't integrate directly with MailChimp, but a plugin can be purchased.<br /> <br /> = Event Registration =<br /> <br /> # [ Eventbrite] is the standard go to for this, and pretty good. <br /> # Make sure to add Google Analytics integration<br /> <br /> = Solicit Ideas =<br /> <br /> The free version of [ IdeaScale] works pretty well. It doesn't let you customize too much about the platform, but just enough to brand it. Paid versions are available, but they're pricey.<br /> <br /> [[Category:Technology]]</div> Wbushey Open government 2014-02-03T15:38:08Z <p>Admin: </p> <hr /> <div>E-Democracy hosts the new ...<br /> <br /> '''Open Government and Civic Technology Facebook Group'''<br /> <br /> == [ Join Here] ==<br /> <br /> <br /> The global exchange on open government and civic technology around the world.<br /> <br /> From the local to national to global trends, connect with the #opengov and #civictech community via Facebook.<br /> <br /> Ask a question and share your knowledge. Elected officials interested in open government are in particular encouraged to join us and use the network as a resource.<br /> <br /> New topics are moderated to keep online group within scope.<br /> <br /> This online group, hosted by, is open to posts in any language about open government related topics. This group includes discussion of posts to E-Democracy's Democracies Online Newswire.<br /> <br /> With dozens of country specific &quot;open government&quot; groups on Facebook, this online space is designed for broadly inclusive exchange.<br /> <br /> Commercial announcements are welcome from sponsors of E-Democracy's open government and civic technology knowledge exchange effort. Contact Steven Clift for more information:</div> Admin White House Safety Datapalooza 2014-01-13T20:45:08Z <p>Admin: </p> <hr /> <div>All the details on &quot;unofficial&quot; 2014 White House Safety Datapalooza Google Hangout is available here:<br /> <br /><br /> <br /> The official government morning webcast will be linked above as well.<br /> <br /> Also see Twitter [ #safetydata]</div> Admin Minneapolis parents 2014-01-03T04:30:54Z <p>Admin: </p> <hr /> <div>Join our new [ Minneapolis Parents Facebook Group].<br /> <br /> Minneapolis parents connecting our families and children to build a vibrant and inclusive community. <br /> <br /> This community-wide online group seeks to connect families across our communities diverse cultures and neighborhoods.</div> Admin Internationalize and Localize GroupServer Controls 2013-10-22T01:21:43Z <p>Wbushey: Created page with &quot;See Category:Technology:Project IdeasCategory:Technology:Project Ideas:GroupServerCategory:Technology:Project Ideas:Python[[Cat...&quot;</p> <hr /> <div>See<br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:GroupServer]][[Category:Technology:Project Ideas:Python]][[Category:Technology:Project Ideas:UI]]</div> Wbushey Integrate Civic Apps with GroupServer 2013-10-21T22:03:05Z <p>Wbushey: </p> <hr /> <div>Very brainstormy. Thanks to organizations like Code for America, Sunlight, and OpenGov, a number of civic/community applications have developed. Below is a fairly random list of such applications, some of which are great complements to what E-Democracy currently uses GroupServer for:<br /> <br /> * [ RecordTrac]<br /> * [ The Madison Project]/[ The State Decoded]<br /> *<br /> *<br /> *<br /> *<br /> *<br /> *<br /> * []<br /> * [[Bring Sunlight to Issue Forums|Sunlight APIs]]<br /> * [ Tweet3po] (Currently Orlando only)<br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:GroupServer]][[Category:Technology:Project Ideas:Python]][[Category:Technology:Project Ideas:Experimental]]</div> Wbushey Javascript in GroupServer 2013-08-20T15:15:58Z <p>Wbushey: </p> <hr /> <div>A growing number of browser UI elements in GroupServer are using JavaScript. As this growth continues, the JavaScript environment provided in the GroupServer framework continues to mature. The following is a summary of the JavaScript environment that is in GroupServer as of August 2013.<br /> <br /> ==gs.content.js.*==<br /> <br /> Nearly every egg that provides a part of the JavaScript foundation of GroupServer is in this namespace.<br /> <br /> ==jQuery==<br /> <br /> Everything uses [ jQuery]. GroupServer provides jQuery via [ gs.content.js.jquery.base]. It currently provides version 1.9.1.<br /> <br /> ==Bootstrap==<br /> <br /> GroupServer provides [ Bootstrap] via [ gs.content.js.bootstrap]. It currently provides version 2.2.2.<br /> <br /> ==jQuery UI==<br /> <br /> GroupServer provies [ jQuery UI] via [ gs.content.js.jquery.ui].<br /> <br /> ==Loader==<br /> <br /> Because many pages are made up of loosely coordinated viewlets, any of which could require any given JavaScript resources, GroupServer developed a dynamic JavaScript module loader that manages which modules have already been requested and retrieved.<br /> <br /> Loader is provided via [ gs.content.js.loader].<br /> <br /> ==Form Supporting JS==<br /> <br /> * [ gs.content.js.autocomplete]<br /> * [ gs.content.js.multifile] - jQuery's Multiple File Upload plugin<br /> * [ gs.content.js.required] - Resource to validate that a form has all required fields<br /> * [ gs.content.js.submit] - Resource that provides a sane UI implementation of submitting/executing a form<br /> <br /> ==Showing/Hiding Content==<br /> <br /> * [ gs.content.js.condense]<br /> * [ gs.content.js.disclosure]<br /> * [ gs.content.js.more]<br /> <br /> ==GroupServer JS Objects==<br /> <br /> The following eggs provide JavaScript resources that include JavaScript objects for interacting with GroupServer.<br /> <br /> * [] - Provides a GSSearch object to fetch and display search results.<br /> <br /> [[Category:Technology:GroupServer Development Reference]]</div> Wbushey Forum showcase 2013-08-17T13:59:04Z <p>Admin: Created page with &quot; We are adding a listing of showcase forums here with some textual context: * * *;</p> <hr /> <div><br /> We are adding a listing of showcase forums here with some textual context:<br /> <br /> *<br /> *<br /> *</div> Admin Managing Development in GroupServer 2013-06-27T23:56:36Z <p>Wbushey: /* Copy Files into the New Egg */</p> <hr /> <div>GroupServer is a mature open source project which uses a full set of tools for managing development.<br /> <br /> =Buildout=<br /> <br /> GroupServer uses Buildout for building (both production and development), retrieving code, and managing development. If you have never used Buildout before, [;hl=en this 15 minute video] provides an introduction. Documentation is at<br /> <br /> To use Buildout you will need setuptools. On Ubuntu, install setuptools via<br /> <br /> &lt;pre&gt;sudo apt-get install python-setuptools&lt;/pre&gt;<br /> <br /> ==Files==<br /> <br /> GroupServer and E-Democracy use a number of Buildout config files to manage building an instance and developing code.<br /> <br /> ===buildout.cfg===<br /> <br /> The main config file for Buildout. This is what Buildout looks to for directions. In GroupServer, buildout.cfg indicates what core eggs should be installed from GroupServer and from third parties. It also indicates which configuration sections should run, and defines a few.<br /> <br /> ===custom.cfg===<br /> <br /> Refers to additional eggs developed for projects downstream from GroupServer. This which custom eggs should be installed, as well as which versions of those eggs. In general, anything written specifcally for E-Democracy will be referred to in this file.<br /> <br /> ===develop.cfg===<br /> <br /> Contains a list that tells Buildout how to retrieve the source for an egg. Every egg from GroupServer and E-Democracy should have an entry in here indicating the address to that egg's repository, and version control tool used on that repository.<br /> <br /> In addition, this file tells Buildout to use the [ Mr. Developer] extension.<br /> <br /> ===versions.cfg===<br /> <br /> This controls which version of a core egg Buildout will retrieve and build. Most core eggs will have an entry in this file that pins the egg to some version. Some 3rd party eggs will also have their versions pinned by this file.<br /> <br /> ==Managing the Buildout Files==<br /> <br /> The above files need to be updated whenever a new egg is created or a new version of an egg is deployed. Because the above files are critical to building and developing GroupServer and E-Democracy, and they are updated pretty often, [ a repository has been created on Github] to keep E-Democracy's developers' Buildout files up to date.<br /> <br /> Assuming you've followed the instructions for [[Installing GroupServer and E-Democracy]], you should already have a git repository setup for the Buildout files on your instance. <br /> <br /> To update the Buildout files, simply run &lt;code&gt;git pull&lt;/code&gt; in the root folder of your E-Democracy instance.<br /> <br /> If you make a change to any of the Buildout files, simply do a &lt;code&gt;git add .&lt;/code&gt;, &lt;code&gt;git commit&lt;/code&gt;, and &lt;code&gt;git push&lt;/code&gt; to publish those changes.<br /> <br /> ==Building==<br /> <br /> Building GroupServer/E-Democracy is one of the two things you will most often do with Buildout (checking out code for active development is the other, and is covered [[#Checking_out_Existing_Eggs|below]].)<br /> <br /> To build E-Democracy and Groupserver, simply run the following from the root folder of your instance of E-Democracy:<br /> &lt;pre&gt;./;/pre&gt;<br /> <br /> =Code Repositories=<br /> <br /> E-Democracy and GroupServer use a few repository locations and tools for storing code. The differences in location and tools roughly correspond to the division between E-Democracy specific code and GroupServer code.<br /> <br /> ==GroupServer Repository==<br /> <br /> - Mercurial===<br /> <br /> All code for GroupServer core is stored at and uses [ Mercurial] for version control. Each egg in GroupServer will have a corresponding repository.<br /> <br /> Eggs that are part of GroupServer core almost always start with either 'gs' or 'Products'.<br /> <br /> ==E-Democracy Repositories==<br /> <br /> ===Github - Git===<br /> <br /> Most new code written by E-Democracy is stored at and uses [ Git] for version control. Like GroupServer, each E-Democracy egg will have a corresponding repository.<br /> <br /> In general, any new eggs created by E-Democracy will have its repository stored on Github. These eggs will almost always start with 'edem'.<br /> <br /> - Mercurial===<br /> <br /> Some E-Democracy code is stored at and uses [ Mercurial] for version control. Eggs with repositories here usually were created by [ OnlineGroups.Net] (OGN) when E-Democracy would contract with OGN to write custom code.<br /> <br /> Of the eggs which have repositories on, the most important is (which is an E-Democracy egg despite starting with 'gs').<br /> <br /> ==Registering for Repository Access==<br /> <br /> In order to commit code to either GroupServer's or E-Democracy's repositories on, you will need to [ register an account on the site]. Once you have registered, email techteam [at] to confirm your registration (you will not be able to commit until confirming registration).<br /> <br /> For E-Democracy's repositories on Github, you can either request permission to commit to the repository(ies) by emailing techteam [at], or you can fork the repository of interest and send us a [ pull request].<br /> <br /> ==Setting up SSL for Mercurial Repositories==<br /> <br /> Because's SSL certificate is not signed by a certificate authority, Mercurial will default to displaying an error when trying to send or receive code from the repositories on This can be prevented by adding the following to ~/.hgrc:<br /> <br /> &lt;pre&gt;<br /> [hostfingerprints]<br /> = CE:CC:DF:DF:E6:32:89:E3:8A:CD:0B:A1:8F:15:FC:B7:0A:AC:23:D3<br /> &lt;/pre&gt;<br /> <br /> =Issue Tracking=<br /> <br /> Because GroupServer and run on code that spans 100+ modules/repositories, both projects maintain project level Redmine instances for issue tracking/ticketing. The vast majority of tickets should be submitted to one of the Redmine instances below.<br /> <br /> For non-GroupServer projects (e.x. [ edemsignups]) it is much more likely that we will use an issue tracker associated directly with the project's repository.<br /> <br /> ==Redmine==<br /> <br /> There are two instances of Redmine to be aware of:<br /> <br /> * E-Democracy Redmine - - Tickets related specificly to Most problems that you encounter will probably become tickets in here.<br /> * GroupServer Redmine - - Tickets related to the GroupServer platform. In general, it is best to ask about your problem in the [ GroupServer Development group] before submitting a ticket here.<br /> <br /> Because's SSL certificate is not signed by a certificate authority, you will probably see a warning from your browser about the site's certificate. This is entirely normal, and you should disregard this warning.<br /> <br /> You will need to [ register an account on]. Once you have registered, you will also need to email techteam [at] so we can confirm your registration.<br /> <br /> ===Estimating Project Time Requirements===<br /> <br /> GroupServer's Redmine includes a couple of useful advice pages. provides a great guide on how to estimate the amount of time a certain programming task will take (assuming design and specs are already established.)<br /> <br /> =Deployed Eggs Server=<br /> <br /> The source repositories for eggs are outlined above. These, however, are not where Buildout fetches eggs from during a build.<br /> <br /> Buildout instead fetches eggs from, a server that hosts deployed versions of eggs. Deployed GroupServer eggs can be found in, while E-Democracy eggs can be found in<br /> <br /> =Editing Eggs=<br /> <br /> The code for eggs involved in a build can not be directly edited. Instead, there is a process for managing the editing of eggs.<br /> <br /> ==Checking out Existing Eggs==<br /> <br /> In order to edit the eggs used in E-Democracy and GroupServer, you need to explicitly check out the egg for editing. This is done by running the following command from the root folder of your E-Democracy instance:<br /> <br /> &lt;code&gt;./bin/develop co &lt;EGG NAME&gt;&lt;/code&gt;<br /> <br /> Doing this will cause Mr. Develop to fetch and place a folder in the src/ directory of your instance of E-Democracy that contains a version controlled repository for the egg's code. This will also tell Buildout to use the code in src/ for that egg during a build instead of the version of the egg specified in versions.cfg or custom.cfg. This, however, does not actually cause a rebuild to occur, so you will need to a &lt;code&gt;./bin/buildout -N&lt;/code&gt;.<br /> <br /> Once checked out, changes to the egg's files in src/ will be reflected in your instance of E-Democracy Generally, changes to templates will be reflected immediately, while changes to source files will require a restart of Zope.<br /> <br /> ==Pushing and Pulling Code Changes==<br /> <br /> Since the folders fetched by Mr. Develop are version controlled (with master repository's URL defined in develop.cfg), you simply use [ Mercurial] or [ Git] (depending on the egg) to manage changes to the code. If you know how to pull, add, commit, and push with these, then you're set.<br /> <br /> ==Deploying a new Version of an Egg==<br /> <br /> Once you have written code that is ready to be used by others, you are ready to deploy a new version of the egg you have been working on. Doing this will package up and upload a new version of the egg to the Deployed Eggs Server described above.<br /> <br /> In order to deploy eggs to the Deployed Eggs Server, you need to have a copy of in the root folder of your E-Democracy instance. If you do not have this file, contact techteam [at] to get a copy.<br /> <br /> To actually deploy a new version of an E-Democracy egg, run the following command in the root folder of your E-Democracy instance:<br /> <br /> &lt;code&gt;./bin/fab deployegg:THE.COMPONENT.NAME,custom&lt;/code&gt;<br /> <br /> If the egg you are deploying a new version for is a GroupServer core egg, then run this instead:<br /> <br /> &lt;code&gt;./bin/fab deployegg:THE.COMPONENT.NAME&lt;/code&gt;<br /> <br /> When the deployment finishes, it will provide a version string for the newly deployed version in the format &lt;EGG NAME&gt; = &lt;VERSION&gt;. For existing eggs, overwrite the egg's entry in versions.cfg or custom.cfg with this version string. For new eggs, add this string to versions.cfg (if a new GroupServer core egg) or custom.cfg (if a new E-Democracy egg), and add the egg's name to the list of eggs to include during a build in either buildout.cfg (for GroupServer core) or custom (for E-Democracy). Then [[#Managing_the_Buildout_Files|push out these changes to the Buildout config files]].<br /> <br /> ==Un-check out Egg==<br /> <br /> Once you have pushed changes, deployed a new version of an egg, and updated Buildout's config files, it is time to tell buildout to stop using the code in src/ for the egg in question. To deactivate checked out code, run the following command from the root folder of your E-Democracy instance:<br /> <br /> &lt;code&gt;./bin/develop d &lt;EGG Name&gt;&lt;/code&gt;<br /> <br /> The egg's source will still be in src/, but it will no longer be referenced during a build. If you prefer a clean src/ directory, feel free to delete an egg's folder from src/ after you have deactivated it.<br /> <br /> Now, rebuild: &lt;code&gt;./bin/buildout -N&lt;/code&gt;<br /> <br /> ==Update Production's Buildout Config Files==<br /> <br /> The [ buildout-config] repository doesn't affect the production server that runs To update these files with new egg version strings, email codedeploy [at] Be sure to include the egg version string produced by the egg deployment, and a short description of what was changed in the deployed egg.<br /> <br /> ==Create a New Egg==<br /> <br /> Creating a new egg involves creating a new repository on or Github, adding its info to the Buildout config files, copying files into the new egg, and setting the basic configuration of the egg.<br /> <br /> GroupServer also provides [ a page describing how to create a new egg]. The process described by GroupServer is a bit different than the one described below, but also includes a lot more detail.<br /> <br /> ===Create a new Repository===<br /> <br /> If you're creating a new E-Democracy egg, create a new repository on Github. If you're creating a new GroupServer egg, create a new repository on In both cases, copy the URI for the new repository, you'll need that for the next step.<br /> <br /> ===Update the Buildout Config Files===<br /> <br /> Open develop.cfg and a line for the new egg under [sources]. This new line should include the name of the new egg, the tool used for version control (hg or git), and the URI from above. Save and close.<br /> <br /> If the new egg is an E-Democracy egg, add the egg's name to custom-zope-eggs section of custom.cfg. If the new egg is a GroupServer egg, and the egg's name to the zope-eggs section of buildout.cfg. Save and close.<br /> <br /> Now git add ., git commit, and git push.<br /> <br /> ===Copy Files into the New Egg===<br /> <br /> Once the Buildout config files have been updated, [[#Managing_the_Buildout_Files|check out the egg]]. Note that you may receive an error along the lines of &quot;ERROR: abort: unknown revision 'default'!&quot;. This is OK, as you will soon create the default branch.<br /> <br /> In the src/ folder you should find two empty_egg folders. These are templates for new eggs - one for eggs stored in git and one for eggs stored in mercurial. Copy the contents of the appropriate folder and paste them into the newly checked out repository folder.<br /> <br /> ===Customize the README===<br /> <br /> The new egg templates include a template for the README file that you would fill out. Open the README file and, at minimum, fill in the egg name, egg purpose, the block of meta data near the top (Author through Copyright), and the Resources near the bottom. At the very bottom is a space for you to associate URLs with any text above that is in the format `TEXT`_.<br /> <br /> You should also write an Introduction section, and any other sections you want to at this time.<br /> <br /> ===Set Basic Configuration===<br /> <br /> In the folder for your new egg, edit In the call to setup, a number of arguments need to be changed, including:<br /> <br /> * name - This should be the same as your egg's name<br /> * description<br /> * classifiers - Pay attention to Development Status<br /> * keywords<br /> * author<br /> * author_email<br /> * namespace_packages - This need to reflect the hierarchy. For example, in the case of, namespace_packages should be set to &quot;['edem', '', '']&quot;. The final directory is supposed to be missing; it is a normal package, not a namespace package.<br /> * install_requires - Set this to just 'setuptools' for now. As time goes on, add other eggs that the new egg depends on.<br /> <br /> Save and close.<br /> <br /> Next, create the file structure represented by your egg's name. For example, the egg should have the folder structure edem/group/messages/topics. In each namespace folder (in this case, edem, group, and messages), make a copy of a special that is included in the egg template.<br /> <br /> Next you need a in the actual package (module) directory. Just enter the following into the module directory<br /> <br /> &lt;pre&gt;<br /> # coding=utf-8<br /> # This space deliberately left blank<br /> &lt;/pre&gt;<br /> <br /> Finally, create a basic configure.zcml in your module directory. Enter the following into configure.zcml:<br /> <br /> &lt;code&gt;<br /> &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;<br /> &lt;configure xmlns=&quot;;<br /> xmlns:browser=&quot;;<br /> xmlns:five=&quot;;<br /> i18n_domain=&quot;groupserver&quot;&gt;<br /> &lt;/configure&gt;<br /> &lt;/code&gt;<br /> <br /> Basic configuration is done. Commit your changes, cd back up to the root folder of your E-Democracy instance, and do a &lt;code&gt;./bin/buildout -N&lt;/code&gt;. Your instance of E-Democracy should not be running the egg you have just created (which does nothing.)<br /> <br /> =Testing Instance=<br /> <br /> E-Democracy maintains a publicly accessible testing instance of This instance is located at The testing instance runs on a database that contains data from backups of production, making it useful for testing code on (mostly) live data. This database needs to be manually updated, so if you would like to have the database updated, please email techteam [at]<br /> <br /> The testing instance also provides shell access for updating Buildout config files, running builds, and even editing code (though egg deploys are currently not possible from the testing instance.) To gain command line access to the testing instance, please email techteam [at]<br /> <br /> The testing instance also has its own ZMI, accessible at However, you will again need to email techteam [at] to gain access.<br /> <br /> [[Category:Technology:GroupServer Development Reference]]</div> Wbushey Installing Group Server and E-Democracy 2013-04-14T21:43:36Z <p>Wbushey: /* Make /groups Work */</p> <hr /> <div>This page attempts to walk you through the installation of GroupServer, E-Democracy's custom eggs, and the ZMI files required to make many of E-Democracy's pages work as they do on The resulting local instance will not be a perfect replica of the pages and functionality that is currently hosted at, but it will provide an instance that you can use to develop on E-Democracy's code.<br /> <br /> If you are interested in simply installing and developing on core GroupServer, please visit to download the most recent release and find instructions on how to install it.<br /> <br /> == Set Hosts ==<br /> <br /> The absolute first thing you need to do is decide on the host name you will use to access your local instance of GroupServer/E-Democracy. Zope will behave differently based on what URL you use to access it, and it is best to choose a host name besides 'localhost'.<br /> <br /> The host name used as an example through this document is 'e-dem-box'.<br /> <br /> Once you have decided on a host name, you must edit /etc/hosts to add a reference for your host name. If your hosts file contains lines for both and (common in Debian and Ubuntu), add a reference for your chosen name on the line.<br /> <br /> == Requirements ==<br /> <br /> In the following list, the brackets [] contain the name of the apt package to get.<br /> <br /> * Debian based OS (Debian and Ubuntu both known to work)<br /> * Sudo [sudo]<br /> * Git [git]<br /> * Mercurial* [mercurial]<br /> * Python 2.7 [python2.7]<br /> * Postfix [postfix]<br /> * PostgreSQL [postgresql]<br /> * Nginx [nginx]<br /> * libxslt1-dev [libxslt1-dev]<br /> <br /> It actually is possible to install E-Democracy without Mercurial. However, GroupServer's code is kept in Mercurial repos, so if you plan on doing any programming, you will need to have Mercurial installed to push your changes.<br /> <br /> There is a [ great write-up] by a user who attempted to install GroupServer on Scientific Linux (a variant of RHEL), which gives hope to those who want to install on rpm based distros. That said, it will probably be a lot easier to just install Ubuntu or Debian.<br /> <br /> === Sudo ===<br /> <br /> If you are installing on Ubuntu, you can skip this section, since sudo is already installed and setup on Ubuntu.<br /> <br /> Several of the steps that follow require root access. More importantly, (the file that will drive a lot of the installation) assumes that sudo is available and configured for the user that runs it. In theory it is possible to run as root, but this will mess up the permissions of all files created in the process, and will make it harder in the future to develop on E-Democracy as a regular user.<br /> <br /> Assuming that sudo is installed, you can enable sudo for a regular user by running the following as root<br /> <br /> &lt;code&gt;adduser REGULARUSERNAME sudo&lt;/code&gt;<br /> <br /> === Configure Postfix ===<br /> <br /> While installing the required packages, you will be asked to configure Postfix. Fortunately, [ Ubuntu provides an easy to follow example of how to configure Postfix] that you can follow. The goal here isn't to make Postfix work (the linked to configuration doesn't fully succeed in doing that), but to provide GroupServer with enough of a Postfix installation/configuration to make it think it can send/receive emails (while developing, there will be other ways by which we can feed GroupServer emails and observe what it wants to send out.)<br /> <br /> === Fix Postgresql Authentication ===<br /> <br /> Postgresql out of the box also does not allow you to login to a database by supplying a username/password to the command line client (psql). If you plan to do any development work and want to be able to peek inside the database (you probably will), this will become super annoying. To change this, edit /etc/postgresql/&lt;version&gt;/main/pg_hba.conf, find the following line:<br /> <br /> local all all peer<br /> <br /> change it to<br /> <br /> local all all md5<br /> <br /> And save.<br /> <br /> Now restart postgresql:<br /> <br /> service postgresql restart<br /> <br /> === Configure Nginx ===<br /> <br /> You will want to add a site configuration for E-Democarcy. This is important for two reasons:<br /> <br /> # Its always good to create a configuration for any web-app you are developing on, since you may have multiple web apps you are working on at any given time<br /> # The Nginx configuration does two very important things:<br /> ## It inserts a string into the URL of requests that tells GroupServer to apply E-Democracy's custom eggs/skin<br /> ## It inserts a header that tells GroupSever which configuration instance to use<br /> <br /> On your file system go to /etc/nginx/sites-available and create a file named 'e-democracy'. In e-democracy, insert the following:<br /> &lt;nowiki&gt;<br /> upstream uwsgi_upstream {<br /> server e-dem-box:8080;<br /> }<br /> <br /> server {<br /> listen 80;<br /> server_name e-dem-box;<br /> <br /> location / {<br /> rewrite /(.*) /++skin++edem/VirtualHostBase/http/$host/groupserver/Content/initial_site/VirtualHostRoot/$1 break;<br /> proxy_pass http://uwsgi_upstream/;<br /> proxy_set_header INSTANCEID edemtest;<br /> include proxy_params;<br /> }<br /> }<br /> &lt;/nowiki&gt;<br /> <br /> Note that in the above we refer to the host name established earlier. Replace 'e-dem-box' with whatever host name you choose. Also note the value of INSTANCEID we insert; this must correspond to a configuration instance that we will create in gsconfig.ini later.<br /> <br /> Save /etc/nginx/sites-available/e-democracy. Then go into /etc/nginx/sites-enabled and create a link to sites-available/e-democarcy:<br /> <br /> ln -s ../sites-available/e-democracy e-democracy<br /> <br /> Now restart Nginx:<br /> <br /> service nginx restart<br /> <br /> == Get the E-Democracy Config Files ==<br /> <br /> Visit E-Democracy's [ buildout-config repo] and grab the URI that you wish to use. Then, in your development space on your file system, create a folder named 'e-democracy' and cd into it. Finally, clone the above repo. It's recommended that you clone into a folder with a name that makes sense, such as 'forums', '', or 'groupserver'. Thus, your clone command might look like:<br /> <br /> git clone forums<br /> <br /> This will fetch all of the files that are needed to build GroupServer and E-Democracy's custom eggs. This repo is also used to save and share changes to the buildout configuration. If you plan to develop on E-Democracy, always be sure to do a ''git pull'' to get the latest buildout configuration and eggs.<br /> <br /> == Set config.cfg ==<br /> <br /> Cd into the folder you just cloned into. Before we can run the installation script, we must first create and edit config.cfg. A config.cfg.sample is included in the buildout-config repo to make this a lot easier. Copy that:<br /> <br /> cp config.cfg.sample config.cfg<br /> <br /> Now edit config.cfg. Read the comments, and edit the values as necessary. ''host'' and ''zope_host'' should be set to the host name you selected earlier ('e-dem-box' in our example). Once you reach the ''Advanced Configuration Options'' section you should be done.<br /> <br /> == Run ==<br /> <br /> You should now be ready to run the installation script. Go to the folder that you cloned buildout-config into earlier and run the following command, as a regular user without sudo:<br /> <br /> ./<br /> <br /> If you haven't used sudo recently, you will be prompted right away for your sudo password. After that, grab some coffee/beer/food, cause this will take a bit of time (20 to 60 minutes depending on your system and Internet connection). <br /> <br /> This script will install a few other required system packages. It will then create an environment in which to install GroupServer, and create the databases that GroupServer and Zope need. Finally, it will run buildout, which will fetch the 100+ eggs that GroupServer/E-Democracy require.<br /> <br /> Because this relies on fetching so much from the Internet, it is possible the script will fail due to network errors/congestion. If this happens, simply re-run the script. If it continues the fail at the same step, visit either irc:// (that's and let us know what problem you are having with the script.<br /> <br /> == Start GroupServer ==<br /> <br /> Woohoo. At this point, you should now have an instance of GroupServer with custom E-Democracy eggs installed on your machine. Now it's time to start this thing up.<br /> <br /> From the root folder of your local install (where you cloned buildout-config into earlier), simply run:<br /> <br /> ./bin/instance fg<br /> <br /> If things go well, you will see some info scroll by in your console, concluding with the line 'INFO Zope Ready to handle requests'. Assuming this works well, you can now open your browser and enter the following (replacing 'e-dem-box' with whatever host name you choose earlier):<br /> <br /> e-dem-box/groups<br /> <br /> A page with the E-Democracy skin should appear that lists the groups currently available on your new local instance (which, at this point, will only be the Example Group.)<br /> <br /> === See Bare GroupServer ===<br /> <br /> Earlier we configured Nginx so that requests to our selected host name would result in E-Democracy's custom eggs being used. If you want to see what GroupServer looks and acts like without the custom eggs, simply visit the same address at port 8080 (assuming you kept the default port in config.cfg). Thus, to see the bare GroupServer version of the groups page, you would visit:<br /> <br /> e-dem-box:8080/groups<br /> <br /> === Go to the ZMI ===<br /> <br /> All of the steps that follow require you to work in the Zope Management Interface, a backend interface that lets you manipulate some of the objects (users, groups, pages, etc...) that make up your local instance of GroupServer/E-Democracy. <br /> <br /> To get to the ZMI, enter the following address in your browser:<br /> <br /><br /> <br /> This assumes you are on Debian/Ubuntu, which provides a address. If you are not, then use instead. If you try to visit the manage page via your selected host name (i.e. e-dem-box/manage or e-dem-box:8080/manage), you will get caught by GroupServer's authentication system, which does not properly authenticate you to access the ZMI.<br /> <br /> Once you go to the above address, you will be prompted for a username and password. This corresponds to the zope_admin and zope_password settings in config.cfg, and default to admin/admin.<br /> <br /> == Set the E-Democracy Homepage Welcome Text ==<br /> <br /> The text at the top of the E-Democracy Homepage is set by the contents the file /groupserver/Content/initiat_site/welcome . If this file is empty or missing, GroupServer provides a default welcome statement. You can edit `welcome` to say whatever you would like.<br /> <br /> == Set Metadata ==<br /> <br /> And we have to add a little bit of HTML metadata:<br /> <br /> # Create a Page Template named '''metadata.xml'''<br /> # In the file field, browse to the zmi folder in your GroupServer folder, and select metadata.xml<br /> # Click Add and Edit<br /> # You will see a compliation error, that is fine.<br /> # Set the Content-Type to text/html<br /> # Click Save Changes<br /> <br /> == Make Digests Work ==<br /> <br /> # Go to ZMI<br /> # Go to /groupserver/Content/initial_site<br /> # Create a page template named digest_news.txt<br /> # Set Content-Type to text/html<br /> # Set body to the following (plain text):<br /> <br /> &lt;nowiki&gt;<br /> Hello World<br /> &lt;/nowiki&gt;<br /> <br /> # Create a page template named digest_news.xml<br /> # Set Content-Type to text/xml<br /> # Set body to the following:<br /> <br /> &lt;nowiki&gt;<br /> &lt;p&gt;Hello World!&lt;/p&gt;<br /> &lt;/nowiki&gt;<br /> <br /> == Make /groups Work ==<br /> <br /> === Add the groups_intro.xml Page Template ===<br /> <br /> # In /groupserver/Content/initial_site/groups, create Page Template named '''groups_intro.xml'''<br /> # Using the file field, browser to the zmi folder in your GroupServer folder, and select groups_intro.xml<br /> # Click Add and Edit<br /> # You will see a compilation error, that is fine.<br /> # Set the Content-Type to text/html<br /> # Click Save Changes<br /> <br /> ===Remove An Old Interface===<br /> <br /> # In /groupserver/Content/initial_site/groups, go to the Interfaces tab<br /> # In the Provided Interfaces list on the left, click the checkbox next to Products.GSContent.interfaces.IGSContentFolder<br /> # Click the Remove button<br /> <br /> === Set category properties ===<br /> <br /> # In /groupserver/Content/initial_site/groups, go to Properties tab<br /> # Add a property named 'categories' of type lines<br /> # Once saved, enter a couple of categoires ('Test', 'Empty')<br /> # For each group that currently exists<br /> ## Go into the group's folder<br /> ## View the group's Properties<br /> ## Create a property named 'category' of type 'string', with a value equal to one of the categories entered above<br /> <br /> [[Category:Technology:GroupServer Development Reference]]</div> Wbushey Developing for E-Democracy 2013-03-14T19:47:24Z <p>Wbushey: /* Beginner Proejcts */</p> <hr /> <div>Hello. This page is meant to be an introduction for anybody who is interested in developing code for<br /> <br /><br /> <br /> Our primary online platform, [], is a email list and web forum hybrid. It is actually a slightly customized version of [ GroupServer], which is an email/forum platform built on [ Zope 2]. Anybody interested in developing on should check out the GroupServer home page (you'll note in the following section a number of links to GroupServer specific lists/repos/tools).<br /> <br /> =Project Ideas=<br /> <br /> Looking for a project to work on? Or inspiration for an E-Democracy project of your own? Check out the [[:Category:Technology:Project_Ideas|Project Ideas Category]] for a listing of several technology ideas we have identified. Many are tagged in multiple categories based on the required technology and the purpose of the project. Some are quite detailed, others are simply inspiration.<br /> <br /> =Developer Tools &amp; Resources=<br /> <br /> ==References==<br /> <br /> If you would like to install an instance of E-Democracy on your local machine, follow the instructions in [[Installing GroupServer and E-Democracy]].<br /> <br /> To see an overview of an entire installation of GroupServer - including a web server, database servers, and email transfer agent, please see the [ Technical Architecture] page on Note that this is slighly out of date; GroupServer is now built on Zope 2 (which is actually an upgrade despite the smaller number ;) ) and installations can use Nginx as a webserver.<br /> <br /> [[:Category:Technology:GroupServer_Development_Reference |GroupServer Development Reference]] is a growing category of technical references related to the GroupServer platform. For those who have never coded in Zope before, [[Zope Component Architecture]] is a good place to learn about one of the foundations of Zope and GroupServer.<br /> <br /> ==Repositories==<br /> <br /> * - The primary repository for GroupServer<br /> * - One of two repositories for E-Democracy created code.<br /> * - The second repository for E-Democracy specific code. E-Democracy's skin (, is housed here.<br /> <br /> ==Bug Trackers==<br /> <br /> * - The GroupServer bug tracker<br /> * - The E-Democracy bug tracker<br /> <br /> ===Beginner Proejcts===<br /> <br /> If you're new to the GroupServer project, we suggest you checkout the [ Low Hanging Fruit] tickets in the GroupServer bug tracker. This tickets are great projects for getting your feet wet as a developer in GroupServer - they are actual features and bugs that need to be taken care of, but they are small enough that you can take the time to learn about the GroupServer platform, the development tools we use, and the community.<br /> <br /> Also, we encourage anybody interested in developing on E-Democracy or GroupServer to join the GroupServer Development list, introduce yourself, and let us know what ticket you're going to tackle. Post your problems as you encounter them and ask questions. The community will be happy to help you contribute to GroupServer.<br /> <br /> ==Lists and IRC==<br /> <br /> * [] - - The main development list for GroupServer<br /> * [] - - The main list for discussing E-Democracy projects of any type<br /> * #gsdevel on - Primary IRC room for GroupServer developers. E-Democracy coders hang out there too.<br /> <br /> [[Category:Technology]]</div> Wbushey Tracking Parameter 2013-03-12T14:49:11Z <p>Wbushey: </p> <hr /> <div>E-Democracy has started to add a tracking parameter to links within, so we can get a better sense of how our users are navigating through the site. The idea is that in the short term we can use regular expressions in Google Analytics to see the traffic that is being generated by certain links. In the long term, we can consider building some analytics into GroupServer (though at the moment I don't know if that's worth the effort considering what Google Analytics offers for free.)<br /> <br /> =rb=<br /> <br /> The tracking parameter that is being used is rb - short for referred by. Quite simply, this is added to links in the code and templates, in the same way that any other URL parameter is added: ?rb=&lt;value&gt; -or- &amp;rb=&lt;value&gt;.<br /> <br /> ==values==<br /> <br /> The following values are currently being used:<br /> <br /> * '''group-home-us-bar''' : The Us Bar that is displayed on group home pages.<br /> * '''topic-us-bar''': The Us Bar that is displayed on topic pages.<br /> * '''topicsdigest-daily''': The daily topics digest html email.<br /> * '''topicsdigest-reminder''': The reminder topics digest html email.<br /> <br /> [[Category:Technology]]</div> Wbushey Page Components 2013-02-26T15:51:02Z <p>Wbushey: /* Input Pages */</p> <hr /> <div>Zope and GroupServer provide a sophisticated set of components and classes for building web pages. This set consists of templating tools, widget like content providers and viewlet, to form building/handling classes, to general web page containers.<br /> <br /> This set provides the tools a developer needs to display information and create user interfaces on E-Democracy.<br /> <br /> =Templating=<br /> <br /> All pages in GroupServer use Zope's Template Attribute Language (TAL) and Template Attribute Language Expression Syntax (TALES).<br /> <br /> * [ TAL and TALES reference]<br /> * [ A number of references and tutorials]<br /> * [ Information on tal:repeat]<br /> <br /> =Content Providers=<br /> <br /> While quite common in GroupServer, these are mostly being phased out in favor of the more flexible Viewlets and Viewlet Managers. However, understanding Content Providers will help new developers to understand Viewlets and Viewlet Managers, which are described below.<br /> <br /> Content providers are indivisible content displays or UI components (aka widgets) - the providers of content and structure for complete components (e.g. a post) that can be included as part of an overall page (e.g. the topic display page).<br /> <br /> Most Content Providers are declared in an egg's configure.zcml to have:<br /> <br /> * a '''name''';<br /> * a '''class'''; <br /> * a '''template'''; <br /> * and maybe a '''factory''' or '''adapter''' <br /> <br /> Content Providers are included on pages by using the [ tal:replace] or [ tal:content] tags and the structure <br /> <br /> ==Site Content Provider==<br /> <br /> [ gs.viewlet.contentprovider.SiteContentProvider]<br /> <br /> The base for content providers used on a site. It is simply an object with knowledge of the context, request, and view. It provides the following properties:<br /> <br /> * siteInfo - A groupserver.SiteInfo instance<br /> * loggedInUser - A groupserver.LoggedInUser instance<br /> <br /> ==Group Content Provider==<br /> <br /> []<br /> <br /> Base for content providers that are intended to be used in a group. This is a subclasses of SiteContentProvider, and provides the following properties that are relevant for groups:<br /> <br /> * groupInfo - A groupserver.GroupInfo instance.<br /> * viewTopics - Indicates if the user has permission to view topics in the group.<br /> * isAnnouncement - Indicates if the group is an announcement group.<br /> <br /> =Viewlets and Viewlet Managers=<br /> <br /> Viewlets are a more flexible means of constructing indivisible displays or UI components. Viewlet Managers are a container for Viewlets. Basically, a page or Viewlet, via its template, includes a Viewlet Manager. Viewlets attach themselves to Viewlet Managers, and any Viewlet attached to an included Viewlet Manager will become part of the final rendered page. <br /> <br /> Viewlets and Viewlet are now the preferred way of constructing displays and UI in GroupServer, because they are more flexible (Viewlets can be added to Viewlet Managers by any egg's configuration) and are much easier to override (any egg can override a Viewlet or Viewlet Manager).<br /> <br /> [ Understanding Viewlets] by the Grok Project provides a good overview of the idea of Viewlets and Viewlet Managers, though specific implementation differs in Zope. The package documentation for [ zope.viewlet] provides a lot of detail (too much frankly) on how Viewlets and Viewlet Managers are used. <br /> <br /> ==Viewlet Managers==<br /> <br /> Viewlet Managers are usually a defined space that eggs can plug content into via Viewlets, so the interesting code is usually found in Viewlets. <br /> <br /> ===Declaring===<br /> <br /> In brief, a Viewlet Manager is often declared in an egg's configure.zcml. This declaration will usually include:<br /> <br /> * a marker '''interface''' (usually extends zope.viewlet.interfaces.IViewletManager)<br /> * a '''class''' (usually gs.viewlet.manager.WeightOrderedViewletManager or a subclass of it)<br /> * a '''template'''<br /> * a '''name'''<br /> * a '''layer''' if overriding a default Viewlet Manager<br /> <br /> The template typically defines the layout of the ViewManager’s area and pulls in content from the Viewlets registered with the ViewletManager. Sometimes, this is nothing more than an iteration through the registered Viewlets.<br /> <br /> While the interface and class can in theory define interesting properties or methods, these are usually quite bare. <br /> <br /> ===Properties===<br /> <br /> Instances of a Viewlet Manager will have access to the current<br /> <br /> * context<br /> * request<br /> * view<br /> <br /> In addition, viewlet managers provides a global options/viewlets variable (in templates) that is an iterable of all the available viewlets in the correct order.<br /> <br /> ===Types===<br /> <br /> * WeightOrderedViewletManager (a GroupServer override is often used: [ gs.viewlet.WeightOrderedViewletManager])<br /> * ConditionalViewletManager<br /> <br /> <br /> ==Viewlets==<br /> <br /> Viewlets tend to be where the look of a display or UI component is defined, and where the fetching and processing of content occurs or is initiated.<br /> <br /> ===Declaring===<br /> <br /> Like Viewlet Managers, Viewlets are usually declared in an egg's configure.zcml. These declarations usually include <br /> <br /> * the '''interface''' of the Viewlet Manager being attached to<br /> * a '''class''' (usually gs.viewlet.viewlet.SiteViewlet, or, or a subclass of it)<br /> * a '''template'''<br /> * a '''weight''' (used for ordering in WeightOrderedViewletManager)<br /> * a '''title'''<br /> * a '''name'''<br /> * a '''layer''' if overriding a default viewlet<br /> <br /> Note that it is entirely possible, and not uncommon, for an egg to declare a new Viewlet using interfaces, classes, and templates defined entirely in other eggs.<br /> <br /> ===Classes===<br /> <br /> Viewlet classes tend to be more sophisticated than Viewlet Manager classes. Viewlet classes usually define properties that are used by the Viewlet's templates to display information. Viewlets classes often also include methods for processing information retrieved from data sources.<br /> <br /> GroupServer provides a couple of Viewlet classes. When creating Viewlets for GroupServer/E-Democracy, the Viewlet class will almost always extend one of these classes.<br /> <br /> ====GroupServer Site Viewlet====<br /> <br /> [ gs.viewlet.viewlet.SiteViewlet]<br /> <br /> Very similar to the Site Content Provider above. This viewlet is used on site pages, and provides the following properties:<br /> <br /> * siteInfo - A groupserver.SiteInfo instance<br /> * loggedInUser - A groupserver.LoggedInUser instance<br /> <br /> ====GroupServer Group Viewlet====<br /> <br /> []<br /> <br /> Very similar to the Group Content Provider above (currently, this Viewlet is actually a simple wrapper of the Group Content Provider).<br /> <br /> In addition to the properties provided by gs.viewlet.SiteViewlet, the following properties are provided:<br /> <br /> * groupInfo - A groupserver.GroupInfo instance.<br /> * viewTopics - Indicates if the user has permission to view topics in the group.<br /> * isAnnouncement - Indicates if the group is an announcement group.<br /> <br /> =Pages=<br /> <br /> GroupServer provides a number of Page objects, classes which can be extended to create a full webpage that is associated with some URL and context. They are based on Zope's Page objects, with a couple of additional convience attributes and methods (such as a SiteInfo attribute and the GSUserInfo instance of the current viewing user). Generally speaking, these Page objects are divided between Group page objects - objects meant for pages that are viewed within a group content (i.e. group home pages, topics, etc...) - and Site page objects - meant for pages viewed outside of a group context (i.e. site homepage, user profile page, etc...). These Page objects are also divided based on the primary purpose of the page, with Page objects available for pages that are meant to be viewed via a browser, pages that are meant to be email messages, and pages that are meant to take input from the user.<br /> <br /> ==Browser Pages==<br /> <br /> * SitePage - Provided by [ gs.content.base]<br /> * GroupPage - Provided by []<br /> <br /> ===Input Pages===<br /> <br /> * SiteForm - Provided by [ gs.content.form.base]<br /> * GroupForm - Provided by []<br /> * ProfileForm - Provided by [ gs.profile.base]<br /> <br /> ==Email Pages==<br /> <br /> * SiteEmail - Provided by []<br /> * GroupEmail - Provided by []<br /> <br /> =Style=<br /> <br /> GroupServer uses two systems to style Pages, one for Browser Pages, and one for Email Pages. In both cases, a given page will rely on the CSS that is provided by one of these two systems. In both cases, the CSS is based on [ Twitter's Bootstrap].<br /> <br /> ==Browser Page CSS==<br /> <br /> [ gs.content.css] is the core of the CSS system for browser pages. If you are using the default GroupServer style, then all styling will come from this class. This class provides icons and fonts to support the default style, as well as two important CSS files: globalstyle.css - the file that establishes the Bootstrap based CSS framework - and site.css - the fill that defines the style of a given skin.<br /> <br /> Note that the URLs of globalstyle.css and site.css should contain a date string. This is so browsers can cache CSS files for long periods of time (~10 years), thus reducing unneccessary file deliveries. This also requires that all skins served by the same instance of GroupServer must provide matching globalstyle.css/site.css URLs with matching date strings. In the future, this whole aspect of serving CSS [ will be streamlined].<br /> <br /> In general, a GroupServer instance will implement its own skin. In these cases, the skin class will provide its own site.css file. For an example, see [].<br /> <br /> ==Email Page CSS==<br /> <br /> The styling associated with an email message is provided by a different system. This is for two reasons: <br /> <br /> * CSS for email messages can not be delivered in the same way as CSS for browser pages<br /> * Email messages are using an early version of a [ new GroupServer architecture for providing CSS]<br /> <br /> Because email messages can not fetch resources beyond what is already contained in a message (and images of the user allows), CSS is delivered as part of the HTML message. Thus, there are no URLs associated with email CSS.<br /> <br /> [] is the foundation of the Email Page CSS system. Email Pages pull in viewlets provided by that provide CSS. Notably, provides viewlet managers that other eggs can associate their own CSS viewlets with, providing a way for eggs to define their own style for their unique UI elements.<br /> <br /> =Layout=<br /> <br /> Virtually all pages provided by a GroupServer instance will inherit one of a handful of layouts provided by two classes, making it easy to provide a consistent layout across your site and make updates quickly.<br /> <br /> ==Brower Page Layouts==<br /> <br /> [ gs.content.layout] provides the core layouts for browser pages. Skins that wish to alter this layout can override the layouts provided by gs.content.layout.<br /> <br /> ==Email Page Layouts==<br /> <br /> [] provides the core layout for email pages. Again, skins that wish to alter this layout can override the layout provided by<br /> <br /> [[Category:Technology:GroupServer Development Reference]]</div> Wbushey Sponsor Display 2013-02-21T15:33:06Z <p>Wbushey: /* Criteria for Existing Tool */</p> <hr /> <div>Sponsorship of neighborhood forums by local businesses can create new sources of funding to support E-Democracy's work. At the same time, local business sponsorship can support our mission of promoting community by providing local businesses with an advertising opportunity that they might otherwise not have access to.<br /> <br /> At the moment, the technology used on prevents us from seriously considering sponsor displays. However, changes can be made to the various group pages to enable them to display sponsorship information. In addition, the forthcoming digest upgrade will make it possible for E-Democracy to more easily modify digests, allowing us to place group sponsors displays in digests as well.<br /> <br /> =Existing Tool or Build Our Own=<br /> <br /> There are existing tools and websites that handle the display and management of ads, with [ Google Display Network] being the most well known example. If we can find a tool that matches our criteria, then integrating the tool's ad display into our site and digests could happen fairly quickly.<br /> <br /> ==Criteria for Existing Tool==<br /> <br /> An incomplete list, but at minimum an existing tool would have to allow:<br /> <br /> * Strong editorial control by site and/or group administrators regarding the ads that are displayed<br /> ** Ads should only be displayed in a forum if the business has a presence in the neighborhood, or a near by neighborhood<br /> ** Ads should only be displayed for small, locally owned businesses<br /> ** Where applicable, ads must conform to the [ Rules of Participation] in forums<br /> * Selection of neighborhoods that a business wants to sponsor/advertise in<br /> * Easy reporting of display and click statistics to site/group admins and sponsors<br /> <br /> Not an absolute requirement, but it would be preferable for the tool to allow group administrators to manage the ads on their groups, either by an interface that can be added to, or by creating separate ad administration accounts on the tool for each group admin.<br /> <br /> It is assumed here that an existing tool would take care of managing the submission of ads, selection of ads to display based on price, and charging of sponsors for sponsorship.<br /> <br /> ==Building our Own==<br /> <br /> If a suitable existing tool can not be found, then we would have to develop our own. This would involve<br /> <br /> # Creating a template for displaying ads<br /> # Creating a system for storing ad information in the database<br /> # Creating a system to determine which ad (if multiple are available) to display<br /> # Creating a system to track display and click statistics of ads, and report these statistics<br /> # Creating an interface for sponsors to submit ads, bids, and payment information<br /> # Creating an interface for site/group admins to manage the ads displayed in a group<br /> # Modifying existing group pages/digests to include the ad display template<br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:GroupServer]][[Category:Technology:Project Ideas:Python]]</div> Wbushey E-Democracy Redesign 2013-02-19T19:35:55Z <p>Wbushey: Created page with &quot;GroupServer will soon be releasing a [ new base layout and design]. When released, this will not re...&quot;</p> <hr /> <div>GroupServer will soon be releasing a [ new base layout and design]. When released, this will not result in an immediate change to the design of However, it will present new ideas and techniques for displaying information, and provide E-Democracy with an opportunity to critically evaluate our existing design. In the long term, the new design will likely require E-Democracy to update its own design, as code that the current E-Democracy design relies on will become unsupported by GroupServer.<br /> <br /> =some rough ideas on the table=<br /> <br /> * A new home page that entices more people to join a local Neighbors Forum, and separates the organizational information of E-Democracy from the neighborhood forums. We also need some imagery, info graphics, site navigation improvements. We should follow the [ KISS principle]: identify what users want to do, make it easy for them to do that, and remove everything else.<br /> <br /> * Forum home pages that better display the life within and entices more people to join. Visitors currently can't easily get the vibe about just how active most of our online spaces are.<br /> <br /> *We want communities to feel that their group on E-Democracy is their online home for discussion. Part of promoting that feeling is to allow a community to customize the look of their group. Doing this properly means we need to strike a balance between allowing a group the freedom to customize, maintaining a design and layout that is consistent across the site, and providing easy to use tools for communities to make visually appealing custom designs. Twitter strikes this balance well, and could be an inspiration. <br /> <br /> * Further simplify the registration text and consider additional join via Facebook options - we need to better understand where we are losing people in the process<br /> <br /> * A simple way for users to post to a forum via the website that bridges a huge generational digital skills gap<br /> <br /> * A better directory for forums with some geo-awareness so people can find forums to join<br /> <br /> * Better ways for people search and navigate our forum archives<br /> <br /> * Build a design that could allow for experimenting with revenue generation ideas, such as: a Local Market option for E-Democracy donors, how to integrate sponsorship credits in a balanced public radio kind of way (looking at Addiply or other options), and local &quot;community table&quot; events at local restaurants.<br /> <br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:GroupServer]][[Category:Technology:Project Ideas:Python]][[Category:Technology:Project Ideas:UI]]</div> Wbushey Administration Control Panels 2013-02-19T19:21:54Z <p>Wbushey: /* Bouncers */</p> <hr /> <div>Currently the administration functions for the site, and for a group, are a loosely organized mix of ZMI scripts and GroupServer web pages. The ZMI scripts should be converted to GroupServer web pages so that site support staff and administrators do not have to use the unfriendly and potentially dangerous ZMI. <br /> <br /> All administrative pages should be organized into pages accessible by viewlets. In some cases, this will not be a major change, except to make the display of the pages and links easier to understand.<br /> <br /> =Bouncers=<br /> <br /> Group admins/moderators/coaches need to be provided with more information and recourse about people with bouncing email addresses. This should include the email address that is bouncing, and the ability to resend verification emails.<br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:GroupServer]][[Category:Technology:Project Ideas:Python]][[Category:Technology:Project Ideas:UI]]</div> Wbushey Online Group Signup Tool 2013-02-19T19:03:43Z <p>Wbushey: /* Drupal Signup Tool */</p> <hr /> <div>Currently, the process of converting paper signup sheets that are collected during our summer outreach work into memberships on is labor intensive. The process involves the following steps:<br /> <br /> # Enter information from paper signup sheet into a spreadsheet<br /> # Send an email to the captured addresses to test the valitity of the provided email address '''and''' offer the user a chance to opt-out of joining a group<br /> # Create a CSV based on all of the addresses that have not opt-ed out or bounced and upload them the group they have signuped for<br /> # Track various steps in the process, and statistics regarding # of paper signups, # of bounces, # of opt-outs, # of successful signups, signup event, and signup volunteer.<br /> <br /> Some of these steps can be automated - namely steps 2 through 4.<br /> <br /> =Drupal Signup Tool=<br /> <br /> To automate steps 2 through 4, we are planning to develop a web tool based on Drupal. This tool will allow the user to enter information about potential group members into a database that can be edited when needed. Once all the information for a gorup of potential members has been entered, the tool will send the verification/opt-out email and keep track of bounces and opt outs. After a set period of time, a CSV will be generated based on successful email addresses and made available for download. The tool will also keep track of the statistics mentioned in #4.<br /> <br /> While any number of platforms could be used for this idea, we have choosen Drupal not only because it is a good match for our needs, but also as a chance for our organization to become more famaliar with the tool in preperation for the [[Electronic Block Clubs]] idea.<br /> <br /> =Multi-Platform Signup CSV=<br /> <br /> In its first version, this tool will produce a CSV designed for GroupServer. However, this tool can be of use to any individual or organization who wants to create an online space for neighborhood dialog using any number of platforms. Thus, future versions of this tool will include the ability to produce CSV files made for other online platforms.<br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:Neighbor Connecting]][[Category:Technology:Project Ideas:PHP]][[Category:Technology:Project Ideas:Drupal]]</div> Wbushey Electronic Block Clubs 2013-02-19T18:39:13Z <p>Wbushey: /* Protocol/API */</p> <hr /> <div>=Core Idea=<br /> <br /> # Assume a leader in the center for an online group at a block or building level.<br /> # Support that leader so they can easily create accounts for those who will likely not self-serve. Street addresses will be geo-coded by the system.<br /> # Assume that E-Democracy will go door to door, etc. to reach 80% of households in a few areas/buildings of 50 to 200 households to sign people up. At least one of the areas will have a large non-English speaking population.<br /> # Design group communication alert preferences to allow a normal channel and an urgent channel. Have primary and secondary language preferences.<br /> # The normal channel will default e-mail notification with full-text, link to audio file(s). Other less invasive options will be available.<br /> # The urgent channel will default robo-call on telephone with SMS or e-mail alternatives. (There probably needs to be some sort of don't call after 9 p.m. option)<br /> # Posting options via e-mail key: (in addition to web, sms, tele)<br /> <br /> <br /> =Scenarios=<br /> <br /> ==Small Group==<br /> <br /> Focus on a tool for the block connector to use to foster mostly private exchange among most of their neighbors whether they are online or not. Telephone/recorded voice, sms, e-mail, web, ... maybe IM alerts with a personalized normal and a priority channel. Most information will be one-way from the block connector, but two-way will be assumed with members empowered to share. This is all about leveraging VOIP Drupal/ There is a leader in the center deciding who is an and out of the group, so Alpha testing would leave out fancy registration with geo-coding. Some rough gathered notes:<br /> <br /> ==Geo-Messaging==<br /> <br /> A possible Drupal module where the members usual street address is mapped to their &quot;usual&quot; longitude and latitude. Option for multiple addresses like work or cabin. Then add some sort of scheme where a site can determine (or the member) the number of X closest people who may send them a geo-group message and where the group can then be taken to read it. The author could determine its visibility - circle of X nearest people only or public and would own it in terms of deleting the topic. This module could be used widely by other Drupal sites and therefore engender open source collaboration.<br /> <br /> ==Map/Directory==<br /> <br /> Use Drupal to host a directory of local online groups, place blogs, neighborhood association websites and facebook pages, etc. with a mapping option to display groups covering a specific bounded territory, a dot for a specific block or building (it could be bounded if zoomed), and perhaps a radius for a group tied to a focal point state of mind (Uptown). This is the &quot;Got Milk?&quot; promotional directory idea:<br /> <br /> ==Neighbor Connecting==<br /> <br /> Advanced sorting or match-making function to connect neighbors based on needs, offers, interests, etc. (There must be something out there in the dating service world on Drupal that could be used.) This rolls into the collaborative purchasing and bidding area too like coordinating alley snow removal.<br /> <br /> =Existing Tools and Technologies=<br /> <br /> ==VoIP Drupal==<br /> <br /> * [ MyVoxBox]<br /> * [ VozMob]<br /> * [ Vojo]<br /> * [ Roller-coasting VoIP with Drupal by Arijit Dutta]<br /> * [ Drupal Balkan Summit Zagreb 2012 session by Tamer Zoubi]<br /> <br /> =Group (Geo) Messaging Architecture=<br /> <br /> Here is a first rough draft of a system architecture that implements the scenarios and ideas discussed above and at the Drupal meetup. It is designed to allow for piecemeal development, flexibility of platforms, and to be generalizable to other initiatives that might wish to use or develop a multi-medium group messaging system. It is far from complete, but it hopefully provides a starting point.<br /> <br /> ==Group Messaging System==<br /> <br /> The kernel of the architecture is the Group Messaging System (GMS). The GMS is responsible for storing user information (including contact information and locations of significant places such as home and work) and messages. Messages are delivered by Interface Services (described below). The GMS is also responsible for relaying messages to members of a group via the Interface Services. Except for user management and administration pages, the GMS does not provide a user interface - this is the responsibility of the Interface Services.<br /> <br /> Components of the Group Messaging System include:<br /> <br /> * '''User Information Database''' - Stores information about users’ contact information and preferences.<br /> * '''Messages Database''' - Stores the content of messages delivered to the GMS and the intended destination group.<br /> * '''Group Controller''' - This defines and implements a “group”. When a message is received, the Group Controller is responsible for deciding which users should receive the message, and when, based on its definition of a group. This component is really an abstraction (an interface in the Java/C++ sense). Plugins would define what a group is, allowing for different initiatives to customize a “group” for their needs. Plugins can also modify the above database schemas.<br /> * '''Administrative Website''' - Provides a way for server/site administrators to administrate. Probably can be augmented by the Group Controller.<br /> * '''Profile Management Website''' - Provides users a way to create and modify their profiles, which includes contact information and preferences. (Upon reflection, this might belong in the Interface Services). Probably can be augmented by the Group Controller.<br /> * '''API''' - Implements the protocol through which Interface Services communicate with the GMS. This API allows Interface Services to deliver and receive messages. A basic API is provided by the core GMS, but Group Controller plugins can augment it.<br /> <br /> ==Interface Services==<br /> <br /> Interface Services are responsible for allowing users to interact with (i.e. send and receive messages) the GMS through various mediums, such as the web, email, and phone. Each Interface Service is responsible for one medium, and relays user interactions from the medium it covers to the Group Messaging System’s API.<br /> <br /> Examples of mediums that Interface Services would be created for include:<br /> <br /> * Web<br /> * Email - Could use <br /> * Plain Old Telephone System (POTS)<br /> * Text/SMS<br /> * Facebook<br /> * Twitter<br /> <br /> ==Protocol/API==<br /> <br /> Not much thought has gone into the specifics of the protocol used to communicate between the GMS and the Interface Services. Its implementation will likely be based on currently popular web protocol paradigms (some combination of REST, RPC, XML, JSON.) The protocol might also be inspired by (or simply an implementation of) SIP or XMPP. At minimum, the protocol has to allow the Interface Services to: <br /> <br /> * Register with a GMS instance<br /> * Send the content, destination group, and some location information, to a GMS<br /> * Request messages destined for a user from the GMS<br /> <br /> The Protocol also has to allow the GMS to:<br /> <br /> * Deliver messages to users through the Interface Service<br /> * The Protocol more than likely also has to allow for user profile CRUD.<br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:Neighbor Connecting]][[Category:Technology:Project Ideas:PHP]][[Category:Technology:Project Ideas:Drupal]][[Category:Technology:Project Ideas:VoIP]][[Category:Technology:Project Ideas:Mobile]][[Category:Technology:Project Ideas:Experimental]]</div> Wbushey Mobile App 2013-02-19T17:54:41Z <p>Wbushey: </p> <hr /> <div>=Scenario=<br /> <br /> A forum member (lets call her Susan) is at a community picnic and wants to post a picture from her mobile phone to her neighborhood forum. Susan is on a limited data plan and is concerned about using her limited data capacity.<br /> <br /> =Current User Experience=<br /> <br /> Susan users her phone’s native Camera app to take the picture. She then either<br /> <br /> * Uploads the photo to a cloud sharing service (Google+, iCloud, Facebook, etc...), copies the resulting URL, and includes that in an email to her forum<br /> * Emails the picture to her forum via her phone’s email app, which is available as an option in the phone’s share menu.<br /> * Navigates to her group via the website and adds the photo from her on phone gallery as an attachment to a new post from the website -or- includes the link mentioned in method 1.<br /> <br /> ==Problems==<br /> <br /> <br /> ===Method 1===<br /> <br /> The photo is stored somewhere other than E-Democracy. This forces readers to leave the site/email app to view the picture, prevents E-Democracy from including the picture in file searches and digests, and introduces another ToS into the user’s experience. Furthermore, the process of uploading a photo to another site, then copying a url into an email or web form is a bit clumsy, especially on a mobile phone. Also, a user either has to upload the photo immediately, and author and transmit a post on their data plan, or remember to upload the photo and author and transmit a post at a later time when they are on wifi.<br /> <br /> ===Method 2===<br /> <br /> Many E-Democracy users are unaware that they can start a new topic via email. Many E-Democracy users also do not know how to attach a file to an email - although this is moot if the user uses the phone’s share menu to start an email with the photo. This method also requires the user to know the email address for her forum - or have it in her address book - and the name of the thread if she wishes to post to an existing thread. If concerned about data plan usage, users have to remember to transmit the photo and post when they are on wifi.<br /> <br /> ===Method 3===<br /> <br /> Difficulty navigating the site is a common piece of feedback among users. This is even more true on mobile devices, as the site is not optimized for mobile use. This method also requires users to use two applications, contributing to a confusing experience (similar to method 1 problems). Also, a user either has to upload the photo immediately, and author and transmit a post on their data plan, or remember to upload the photo and author and transmit a post at a later time when they are on wifi.<br /> <br /> ==Benefits==<br /> <br /> ===Method 1===<br /> <br /> The photo is stored somewhere other than E-Democracy. This means less bandwidth usage and storage for us. The photo is also own a social network, though there might not be a link to the E-Democracy topic.<br /> <br /> ===Method 2===<br /> <br /> This is the closest of the methods to an end-to-end method with smooth transitions between the apps involved. This method also gives the user the option of delaying transmission of the complete post if she wishes, but she does have to remember to send the mail later.<br /> <br /> ===Method 3=== <br /> <br /> This method provides the ability to read posts and respond in an existing topic at one screen. This method also gives the user the option of delaying transmission of the photo, but she has to remember to author her post and attach the photo later.<br /> <br /> =Alternatives=<br /> <br /> ==Educate Users on Email Usage==<br /> <br /> Most of the problems with method 2 revolve around user skills and knowledge, which can be tackled by an effort to educate users about how to use E-Democracy via email. This could involve regular emails containing helpful information, creating a text and/or video tutorial on how to use E-Democracy via email, and a campaign to get users to add the email addresses of their forums to their address book.<br /> <br /> ===Benefits===<br /> <br /> '''Low tech costs''': Sitewide emails can be sent either via MailChimp, or something can be figured out for sitewide emailing on GroupServer. Hosting a text or video tutorial is also pretty simple.<br /> Email is on every phone, in their share menus: Every smartphone comes with some email app, and Android and iOS (and probably Windows and Blackberry, but haven’t investigated) include the email app in their media sharing menus, contributing to the smooth end-to-end user experience.<br /> <br /> ===Problems===<br /> <br /> '''Users still have to remember thread names''': As far as I can tell, there is no tech or general education solution for this - users simply have to remember the name of a thread if they wish to reply to that thread via email. Awareness campaigns for event based threads, similar to establishing Twitter hashtags for an event, can probably work in some cases, but doesn’t address the issue for general threads.<br /> <br /> '''Reading and replying to an existing thread''': Unless the user is getting an email for every post, the user will have to visit the website to read a thread if they wish to do so before responding to it.<br /> Users need to manually manage data plan usage: A user can take a picture and author a post, but if they don’t want to use their data plan, they have to save the post in their email app and remember to send the email later when they are using wifi. Not the most convenient option for users.<br /> <br /> '''Costs of Email campaign and Tutorial creation''': Executing either of these well takes time and money.<br /> <br /> <br /> ==HTML 5 Posting Page==<br /> <br /> HTML 5 includes a lot of features that benefit mobile users, and in general make websites more capable with fewer dependencies and hassles. In this case, HTML 5’s File API and [ Capture tag] can be used to [ create a page that allows a user to add an image directly from their camera] to a post. The current post pages can also be modified to use HTML 5’s File API for a similar effect.<br /> <br /> ==Mobile Applications==<br /> <br /> In generally, a mobile app provides us with the most flexibility in creating a user experience and interacting with the mobile device. We could design and implement an application whose sole purpose is to allow a user to easily post to groups she is a part of and add a photo from her device’s storage or camera.<br /> <br /> ===Benefits===<br /> <br /> '''Can delay photo and post transmission''': An app can provide a user with the ability to attach a photo to a post and author the post, then instruct the app to transmit the post later when she is on a wifi network. Assuming the user keeps the app running in the background, this can happen without requiring additional effort on the part of the user.<br /> <br /> '''Can provide users with a purpose built UI''': A single purpose app can guide a user through a process and provide the user with needed choices and information. For example, upon entering the app<br /> <br /> ===Problems===<br /> <br /> '''iOS does not allow apps to add share menu items''': Why? [ Cause Apple, that’s why]. Hopefully that will change in future iOS versions.<br /> <br /> '''Development Costs and Multiple Platforms''': You need a Mac to develop an iPhone app. Why? Cause Apple, that’s why. Beyond that, an app would have to be developed for at least iOS and Android, and maybe Blackberry and Windows as well. For this reason, it is common to see organizations create an app on one platform, and then wait months before releasing the app on another platform.<br /> <br /> '''[[GroupServer API]]''': It doesn't exist. Some of the functionality can work around this (using email methods to post for example, and special web pages for the interface), but this idea can be executed better if there is an API for authenticating the user and fetching their groups.<br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:GroupServer]][[Category:Technology:Project Ideas:Mobile]][[Category:Technology:Project Ideas:UI]]</div> Wbushey Bring Sunlight to Issue Forums 2013-02-19T03:09:27Z <p>Wbushey: /* Provide Relevant Info */</p> <hr /> <div>The Sunlight Foundation provides [ APIs for accessing information on the federal and state governments]. Plus, there are [ convenient python libraries] for these APIs.<br /> <br /> Some of E-Democracy's largest groups are the political issues forums, such as [ Minneapolis Issues] and [ St. Paul Issues], which are great testing grounds for how to bring Sunlight's information to the public discussion. <br /> <br /> =Provide Relevant Info=<br /> <br /> One fairly easy idea is to search Sunlight's API for the keywords of a topic, and then display the returned information to users who view that topic.<br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:GroupServer]][[Category:Technology:Project Ideas:Python]][[Category:Technology:Project Ideas:Experimental]]</div> Wbushey GroupServer API 2013-02-19T02:54:56Z <p>Wbushey: /* API Foundation */</p> <hr /> <div>There is a lot of content available on E-Democracy, and a lot of potential uses of E-Democracy as a communications platform across devices and platforms. However, E-Democracy's underlying platform - GroupServer - does not provide an API for accessing or interacting with groups, topics, and posts.<br /> <br /> =Required or Useful Skills=<br /> <br /> * '''Python''' - GroupServer is written in Python 2.7<br /> * '''Object Orientation''' - Like most web applications, OO is used significantly in GroupServer.<br /> * '''Model-View-Controller''' - Likewise, the MVC paradigm is used significantly in GroupServer.<br /> * '''Buildout''' - A Python code distribution and development system used by GroupServer. See [[Managing Development in GroupServer and E-Democracy#Buildout]].<br /> * '''Git or Mercurial''' - Both distributed version control systems are used in during development. Fortunately, they are very similar. See [[Managing Development in GroupServer and E-Democracy#Code_Repositories]].<br /> * '''Zope''' - The framework that GroupServer is built on. Familiarity with any flavor of Zope or its derivatives (i.e. Plone, Grok) will be very helpful. Even more important is familiarity with the [[Zope Component Architecture]].<br /> * '''API Creation''' - Since this project is about creating an API, experience in designing and developing APIs will be very helpful.<br /> * '''Authentication and Authorization in Zope''' - A big chunk of this project can not be implemented unless a system is in place to authenticate a user and check her authorization via the API. GroupServer make's heavy use of Zope's built in Authentication and Authorization systems, so experience with these will be valuable when working on authentication and authorization on the API.<br /> <br /> =Project Plan=<br /> <br /> To develop a project plan for an API, we are working to answer several questions:<br /> <br /> * What data and functionality should be exposed?<br /> * What type of API should be developed (RESTful vs. RPC vs. something else...)?<br /> * Should the API conform to some existing standard (i.e. [ OpenSocial])?<br /> * What format should the API return data in?<br /> * What will the URL(s) be for accessing the API?<br /> * Should the API be available to all, or require a token to access?<br /> * How should authentication and authorization work?<br /> * How should the API code be organized in GroupServer's codebase?<br /> <br /> None of these questions have been definitively answered yet. But, significant steps have been taken to answer those questions on this page, on this [ 5 year old ticket] (which will be extended as the project's plan solidifies), and on [ this thread] in GroupServer's Development group.<br /> <br /> ==API Foundation==<br /> <br /> To support responding to API endpoint requests that submit data, [ gs.content.form.api.json] has been created. It provides two classes - SiteEndpoint and GroupEndpoint - that behave similarly to SiteForm and GroupForm except that they return responses as application/json. All of these classes are based on zope.formlib.<br /> <br /> For general foundational objects in GroupServer (i.e. objects that represent users, groups, posts, etc...), see the [[GroupServer Object and Interface Index]].<br /> <br /> ===Endpoint Example===<br /> <br /> For an example of an API that has been build n GroupEndpoint, checkout [].<br /> <br /> ==Proposed Order==<br /> <br /> The first phase of the project should involve providing access to content that does not require authentication. The next phase of the project should allow for a client to authenticate via the API. The third phase of the project should allow for adding content based on the authorization of an authenticated client.<br /> <br /> =What data and functionality should be exposed?=<br /> <br /> This can be divided roughly into:<br /> <br /> * What data should a client be able to retrieve (GET)?<br /> * What data should a client be able to write (POST/PUT)?<br /> <br /> ==GET==<br /> <br /> Ideally, the API would allow developers pull the following.<br /> <br /> ===Groups===<br /> <br /> '''Egg''':<br /> <br /> A group object should be accessible by a group id and should include:<br /> <br /> * The group's '''name''' (<br /> * The group's '''url''' (<br /> * &lt;strike&gt;The group's '''policy''' &lt;/strike&gt;<br /> * A reference to a list of the group's '''members''' (<br /> * A reference to the group's '''administrators''', '''moderators''', and '''coach''' (<br /> * A reference to a list of the group's '''topics''' (<br /> * A reference to a list of the group's '''posts''' (<br /> <br /> A '''list''' of references to publicly visible groups should also be available.<br /> <br /> ===Topics===<br /> <br /> '''Egg''':<br /> <br /> A topic object should be accessible by one of its post's ids and should include:<br /> <br /> * A '''url''' to the topic's page<br /> * The '''subject''' of the topic<br /> * A reference to a list of '''posts''' in the topic <br /> * A list of the '''keywords''' of the topic<br /> * A reference to the '''group''' that the topic is in (<br /> <br /> A '''list''' of references to publicly visible topics should also be available. There should be the option to specify a group-id to as to retrieve a list of topics of a specific group.<br /> <br /> A note about topic/post ids. To my knowledge, there is no canonical id for a given topic. Instead, a topic can be accessed via the id of any post that is found in that topic.<br /> <br /> ===Posts===<br /> <br /> '''Egg''':<br /> <br /> A post object should be accessible by its ID and should include:<br /> <br /> * A '''url''' to the post's page<br /> * A reference to the '''topic''' that the post is a part of (<br /> * A reference to the '''author''' of the post (edem.profile.api.json)<br /> * The '''datetime''' of the post<br /> * The '''body''' of the post<br /> * A list of the '''keywords''' of the post<br /> * A list of references to '''files''' attached to the post.<br /> <br /> A '''list''' of references to publicly visible posts should also be available. There should be the option to specify a group-id to as to retrieve a list of posts of a specific group. There should also be the option to retrieve a list of posts for the topic that the post is a part of.<br /> <br /> ===Users===<br /> <br /> '''Egg''': edem.profile.api.json<br /> <br /> A user object should be accessible by the user's id and nickname, and should include:<br /> <br /> * A url to the user's '''profile page'''<br /> * The '''first''', '''last''', and '''full name''' of the user<br /> * A url to the user's '''avatar''' (gs.profile.image.base)<br /> * A list of references to '''groups''' that the user is a member of<br /> * A list of references to '''posts''' that the user has made<br /> <br /> ===Pagination===<br /> <br /> Any of the list retrieval methods should limit the number of results returned, and allow requests to be made for a specific number of results, specific indices, and offsets. Where it makes sense, a request should also be able to specify an order by parameter.<br /> <br /> <br /> ==PUT==<br /> <br /> Assuming we can authenticate a client, we should be able to provide the ability for a client to add content to the site. Upon completion of content addition, the client should receive a simple object indicating the status of the addition (Success, Error, etc...) and either a reference to the successfully added content or an explanation of why the content was not added.<br /> <br /> ===Post===<br /> <br /> To add a new post, a client will need to specify:<br /> <br /> * The '''id''' of the topic being added to<br /> * The '''body''' of the new post<br /> * The '''email address''' the client wants to use to make the post<br /> <br /> Additionally/optionally, a client can also specify:<br /> <br /> * A list of '''files''' to attach to the post<br /> <br /> ===Topic===<br /> <br /> To add a new topic, a client will need to specify:<br /> <br /> * The '''id''' of the group the topic is being added to<br /> * The '''subject''' of the topic<br /> * The '''body''' of the first post of the topic<br /> * The '''email address''' the client wants to use to create the topic<br /> <br /> Additionally/optionally, a client can also specify:<br /> <br /> * A list of '''files''' to attach to the first post of the topic<br /> <br /> =How should authentication and authorization work?=<br /> <br /> All of the above GET methods are ok for anonymous users. Like any good API, the GroupServer API should have some means of authenticating requests so that more sensitive information and functionality can be made available via the API to clients that have the appropriate permission.<br /> <br /> Zope already provides a strong system for allowing/disallowing access to content based on the role of the user. The primary challenge then is to allow a client to authenticate with GroupServer/Zope via the API securely. Beyond that, the challenge is how [ strictly one want's to adhere to REST] (assuming the API is RESTFUL). If we are ok with relying on a cookie to store the authentication token, then nothing else really has to be done. If we are not ok with that, then we must allow a token parameter for API requests that the API view can feed to Zope's understanding of the user state.<br /> <br /> Once authentication is implemented, we should go back trough the list of GET methods and determine which ones can provide more information based on the authentication of the client.<br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:GroupServer]][[Category:Technology:Project Ideas:Python]]</div> Wbushey Facebook Interface 2013-02-19T02:38:18Z <p>Wbushey: /* How does moderation work? */</p> <hr /> <div>GroupServer currently provides two interfaces for users: email and a website. With more and more people using Facebook for public discussions, its tempting to figure out how to bridge the conversations that are happening on GroupServer sites (including E-Democracy) and on Facebook.<br /> <br /> =Facebook Application=<br /> <br /> In order to build this bridge, a Facebook application will need to be built. Ideally, this application can be installed on groups/pages. With a page for each E-Democracy group that has this application installed, the following interactions could happen:<br /> <br /> * Topics created on E-Democracy would lead to new discussions started on the wall of the corresponding Facebook page, with a link to the discussion on E-Democracy.<br /> * Posts made to topics on E-Democracy would lead to comments created on the corresponding discussion on a Facebook page.<br /> * Discussions started on a Facebook page for an E-Democracy group would lead to a new topic created on E-Democracy, with a link created in the Facebook discussion to the newly created E-Democracy topic.<br /> * Comments to existing discussions on a Facebook page would lead to a new post in the corresponding topic on E-Democracy.<br /> <br /> =Road Blocks=<br /> <br /> If the following don't work out, this idea can't be implemented.<br /> <br /> ==Facebook ToS==<br /> <br /> First, we need to verify that this idea is permitted by the Facebook user and developer terms of service documents. We also need to make sure we don't do anything that provides Facebook with licenses to user content.<br /> <br /> ==GroupServer API==<br /> <br /> [[GroupServer API |It doesn't exist]]. And this application can't exist without an API for the application to interact with.<br /> <br /> =Other Questions=<br /> <br /> Not show stoppers, but tough questions to figure out.<br /> <br /> ==What about Facebook Page followers who are not E-Democracy users?==<br /> <br /> Conceivably there will be Facebook users who want to interact with an E-Democracy Facebook Page. If these users post, and they do not have an E-Democracy account, what do we do? Create an account for them?<br /> <br /> ==How does moderation work?==<br /> <br /> Facebook has virtually no moderation system, while E-Democracy has a fairly sophisticated one that can vary across groups. Can the Facebook application be designed to work well with E-Democracy's moderation?<br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:GroupServer]][[Category:Technology:Project Ideas:Python]][[Category:Technology:Project Ideas:Social Media]][[Category:Technology:Project Ideas:UI]][[Category:Technology:Project Ideas:Experimental]]</div> Wbushey Search Alerts 2013-02-19T02:13:46Z <p>Wbushey: </p> <hr /> <div>In some cases, users have stated that they would like to receive notification when a specific topic is being discussed on the forums. GroupServer now tracks the keywords that describe a post and a topic, which provides one of the basic pieces of information needed for search alerts.<br /> <br /> =How=<br /> <br /> Somehow a user indicates that they would like to receive notification when a post or a topic is created that is tagged with a certain keyword. <br /> <br /> Then, once a post is made, GroupServer would search for all users who have indicated that they wish to be notified of posts tagged with a keyword, and email those users a message indicating that such as been made. This email could include the the url to the post, as well as a clip of the text.<br /> <br /> ==Alternative Implementations==<br /> <br /> The search-and-email-on-post method described above will probably be taxing on servers. A couple of alternative implementations include:<br /> <br /> ===Alert Lookup Table===<br /> <br /> Create a database table that is simply (groupId, keyword, userId). When a post is made, this table is queried for the specific groupId/keyword to retrieve all users who want to be alerted about the post. Databases are a lot more efficient at searching and retrieving, and the lookup table method is a lot more efficient than the naive search-all-users method above.<br /> <br /> ===Alert Digests===<br /> <br /> Similar to the current Topics Digests, alert emails could be generated only every X hours. <br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:GroupServer]][[Category:Technology:Project Ideas:Python]]</div> Wbushey Evaluation Dashboard 2013-02-18T22:13:28Z <p>Wbushey: </p> <hr /> <div>An '''Evaluation Dashboard''' would be a page, or a group of pages, that E-Democracy staff would use to view statistics about the platform (, groups on the platform, groups of groups on the platform (e.g. all groups in neighborhood groups in Minneapolis), and users on the platform.<br /> <br /> =Why=<br /> <br /> As an organization with ambitious goals and limited resources, we need to use data to drive decisions about what actions to take where. <br /> <br /> =Where and Who=<br /> <br /> A site wide evaluation dashboard could be provided at Sub pages could display specific measures in greater detail. <br /> <br /> Each group could also have a group level display of statistics at;groupId&gt;/evaluation/. Again, sub pages could display specific measures in greater detail.<br /> <br /> The primary audience for this would be E-Democracy staff. Depending on the nature of information displayed, or the server resources required to display, these pages could be made to only be accessible to a limited group of people, which would initially include only staff and forum managers/coaches. Outside researchers could be an additional audience, and could be granted access on request.<br /> <br /> =What=<br /> <br /> ==Statistics and Comparisons==<br /> A long list of desired statistics and evaluations can be found in the Google Doc [ Metrics, Research, and Evaluation Execution Plan - Detailed]. In summary, these statistics include:<br /> <br /> * Membership statistics: # of group/site members; # of joiners/leavers in a time period<br /> * Demographics: education; household income, race, ethnicity, etc...<br /> * Registration statistics: # who started registration; # who completed registration; # of unverified email addresses<br /> * Posting statistics: # of people posting; average # of posts per user; % of authors<br /> * Topics statistics: # of new topics; # of active existing topics; average # of posts per topic; most common keywords<br /> * Technology statistics: % of web users; % of digest users; % of email only users<br /> <br /> In most cases, a user should be able to view these statistics in aggregate across the site, for a single group, and in aggregate for a group of groups. A user should be able to see comparison displays; such as the registration statistics for a single group compared to the registration statistics of all groups in St. Paul, or % of authors compared to % of digest users.<br /> <br /> In most cases, a user should also be able to view a time series of these statistics, include a time series of aggregate statistics. A user should be able to include time series into comparison displays.<br /> <br /> ==General Information==<br /> <br /> Beyond statistics, a set of information about groups and the site that is useful includes:<br /> <br /> * A list of group members that includes certain attributes (member organizations, email addresses, etc...)<br /> * A list of topics or posts that include certain attributes (author, keywords, post body, etc...)<br /> <br /> ==Exportable Formats==<br /> <br /> Ideally, every page related to evaluation will allow a user to download the displayed information in a CSV, and access the data in an interchange format (i.e. JSON or XML). Doing so will allow users to perform analysis beyond what is built into the evaluation pages.<br /> <br /> =How=<br /> <br /> ==Existing Tools==<br /> <br /> A set of pages and scripts already exist that provide a level of evaluation support. In some cases, these existing tools can be modified and moved to a site/group evaluation section. In other cases, the tools would need to be rewritten to improve performance and usability.<br /> <br /> ===Existing Pages===<br /> <br /> A display of the number of posts made each month, for every group since its founding, can be viewed at This page also allows somebody to download the statistics as a CSV. The current page takes considerable time and server resources to display. In addition, it does not display information in a way that makes comparing multiple groups easy.<br /> <br /> Every group has a page that displays the number of posts made each month, and the number of authors each month. This page can be found at;groupId&gt;/stats.html. This page also takes some time and server resources to display, though not nearly as much as the site wide stats page. This page does not allow a user to download the statistics as a CSV, and does not allow a user to easily compare one group to another group.<br /> <br /> Every group also has a more detailed set of statistics available at;groupId&gt;/historicalstats.html. This page includes statistics about memberships, topics, and posts, for every month since the group was founded. This page does not allow users to download statistics as a CSV, and does not allow users to compare groups to other groups.<br /> <br /> ===ZMI Scripts===<br /> <br /> In the ZMI, /sites/edem/management_scripts/ provides useful scripts for administrators, including a few evaluation scripts.<br /> A number of scripts meant to output information on group membership or group posts can be consolidated and moved into an evaluation section on the website. These include<br /> <br /> * reports/group_member* - Various scripts that generate lists of group members<br /> * reports/post_detail* - Various scripts that produce lists of posts in a group<br /> <br /> ==A New GroupServer Module==<br /> <br /> Creating the pages that allow users to view this evaluation information would involve creating a new module (aka egg) - perhaps named gs.statistics. Where possible, this egg would reuse the existing tools mentioned above. Like other eggs, gs.statistics would build on the tools provided by Zope and GroupServer, such as [[GroupServer_Object_and_Interface_Index | GroupServer's Data Interfaces]].<br /> <br /> Using Javascript, a fairly dynamic interface could be presented to the user. This interface would allow the user to refine the information displayed, how it is displayed, and add comparisons at will. However, this interface could take more time to develop than a similar, static interface.<br /> <br /> A static interface would be developed more easily, using just Zope/GroupServer/HTML. However, this interface may not be as user friendly as the dynamic Javascript display.<br /> <br /> ==Sparkwise==<br /> <br /> [ Sparkwise] is a free data dashboard aimed at non-profits who need to perform evaluations. With a JSON API available, we could use Sparkwise's nice UI to display the data made available from GroupServer, compare different views of the data, and incorporate this data in displays with other data sources (Google Analytics, Facebook, Census, etc...)<br /> <br /> <br /> [[Category:Technology:Project Ideas]][[Category:Technology:Project Ideas:Evaluation]][[Category:Technology:Project Ideas:Python]][[Category:Technology:Project Ideas:Javascript]][[Category:Technology:Project Ideas:GroupServer]]</div> Wbushey Configuring Group Server 2013-02-05T02:23:28Z <p>Wbushey: Trying to move into a subcategory</p> <hr /> <div>=gsconfig.ini Overview=<br /> <br /> The [ gs.config package], along with the file etc/gsconfig.ini or parts/instance/etc/gsconfig.ini, provide the mechanism for configuring the GroupServer parts of GroupServer (as opposed to Zope parts.)<br /> <br /> Significant documentation on the syntax of gsconfig.ini can be found locally in the egg documentation of gs.config or [ online].<br /> <br /> There are four components that can be configured: database; smtp; cache; and webservice (documentation refers to ‘tokenauth’, this seems to have been replaced by ‘webservice’). Each component can have one or more specific configuration sections, loosely based on the instance or environment for which they are intended. I.e., there can be database-live; smtp-test; smtp-live; cache-dev; etc...<br /> <br /> [config-&lt;my_instance&gt;] sections list which component configurations will be used for the instance represented by &lt;my_instance&gt;.<br /> <br /> More specific documentation on configuration is available for some components:<br /> <br /> * database - Configuration is primarily via a [ dsn string]<br /> * smtp - See the Configuration section of []<br /> * cache - I haven't yet found a reference for cache configuration, but for development I haven't needed to worry about it<br /> * webservice - See the Configuration File section of []<br /> <br /> = Configuring Email for Development = <br /> <br /> For development, it is useful to configure Group Server to use a local folder for its mailqueue and to not pass emails off to Postfix. By doing so, a developer can quickly see the complete email that the platform has generated, and doesn't have to worry about spamming actual users while developing. <br /> <br /> To do this:<br /> <br /> # Create the directory &quot;mailqueue&quot; in the root of your GroupServer installation<br /> # In the mailqueue directory, create the following directories: &quot;new&quot;, &quot;cur&quot;, and &quot;old&quot; <br /> # In gsconfig.ini, creating the following smtp section and include it in your active instance: <br /> [smtp-dev]<br /> queuepath=mailqueue<br /> processorthread=False. <br /> <br /> <br /> Now emails that Group Server generates and attempts to pass on to Postfix will end up in mailqueue/new/. <br /> <br /> Not that the mailqueue folder used here can be different than the maildir set is Postfix's configuration file. That’s OK, as the goal here is not to actually send the email, but to place it in a convenient location.<br /> <br /> [[Category:Technology:GroupServer Development Reference]]</div> Wbushey United States 2013-02-04T02:29:44Z <p>Admin: </p> <hr /> <div>Please visit the [ United States Issues Forum]</div> Admin Google Summer of Code 2013 2013-01-14T21:10:31Z <p>Wbushey: /* Extracting Evaluation Data */</p> <hr /> <div>=Welcome=<br /> <br /> Hello Summer of Code students! We are happy that you are interested in applying to work with E-Democracy this summer. If you are completely new to E-Democracy, you can check out the [ About Page] for more information about the organization and our mission. You can also check out the [[Developing for E-Democracy]] page for background on E-Democracy's forum platform and resources for developers.<br /> <br /> Below are a few projects that we feel will make great Summer of Code projects. We also encourage you to submit an idea of your own that fits our mission of building communities using online communications. Finally, we have a set of other [[:Category:Technology:Project_Ideas|Technology Project Ideas]] that you may want to look through for more inspiration for your project application.<br /> <br /> =Project Ideas=<br /> <br /> == Mobile Posting ==<br /> <br /> '''Skills Needed:''' Mobile Development (mobile optimized HTML5/CSS/JavaScript; Python; MVC; Zope; GroupServer; possible Android or iOS app programming); Git<br /> <br /> In an effort to make online neighborhood dialog more accessible, we are looking to create a great posting experience for our mobile users. We are especially interested in making the process of posting a photo from a mobile device as smooth as possible.<br /> <br /> In this project, you will implement a front end that easily allows users to make a post from their mobile device. The frontend should be optimized to look good and function well on a smartphone, and should have the specific purposes of allowing a user to select which group to post to, select which thread to post to (or a new thread), author a post, add a photo from their device's storage or camera (if they choose), and submit the post/photo. <br /> <br /> The initial version of this front end will be developed using HTML 5 and JavaScript. After developing this page, OS specific apps might be developed that rely heavily on the webpage. The goal of the OS apps is to allow a user to delay transmitting their post until they are on a Wi-Fi network, and add Post to E-Democracy as an option to the OS photo sharing menu.<br /> <br /> See [[Mobile App]] for a more thorough description of this idea and its background.<br /> <br /> == Extracting Evaluation Data ==<br /> <br /> '''Skills Needed or Learned:''' Python; MVC; Zope; GroupServer; Basic Data Processing and Analysis; API Creation; Git; Buildout<br /> <br /> Like any other organization, we need to make decisions based on data. There is quite a bit of data stored in the E-Democracy platform about how our users interact with the platform and each other. However, most of this data is not currently accessible outside of database queries. This means that a lot of this data is not available for decision making. A module that makes it easy to request data about our dozens of groups or thousands of members would be hugely valuable to our staff and researchers.<br /> <br /> In this project, you will implement the View and Controller portions of a module that retrieves data about the groups, topics, posts, and users of E-Democracy. This module will allow a user to set boundaries on the data retrieved (e.g. posts in certain groups over a certain month) and will provide the user with a CSV for download. Time permitted, an API can be created to export this data in JSON for consumption by other programs, and a simple data preview display can be created.<br /> <br /> For more information on the broader evaluation project that this is a part of, see [[Evaluation Dashboard]]<br /> <br /> == GroupServer API ==<br /> <br /> '''Skills Needed or Learned:''' Python; MVC; Zope; GroupServer; API Creation; Git; Buildout<br /> <br /> There is a lot of content available on E-Democracy, and a lot of potential uses of E-Democracy as a communications platform across devices and platforms. However, the platform that E-Democracy is built on does not provide an API for accessing or interacting with groups, topics, and posts.<br /> <br /> This project overlaps a bit with the Extracting Evaluation Data project, except that it focuses on the content of groups/topics/posts/users, and is solely concerned with creating an API. <br /> <br /> See [[GroupServer API]] for more details on this project.<br /> <br /> A good plan for this project is to follow the order presented in the [[GroupServer API]] page. The first phase of the project should involve providing access to content that does not require authentication. The next phase of the project should allow for a client to authenticate via the API. The third phase of the project should allow for adding content based on the authentication of the client.<br /> <br /> == Web and VoIP Blockclub Prototype ==<br /> <br /> '''Skills Needed or Learned:''' VoIP Implementation; Git; [ Software Prototyping]; Drupal (maybe)<br /> <br /> We have a dream that neighbors should be able to share community and emergency information on whatever technology they are most comfortable with. Imagine a service where your neighbor could call a number and record a message for her nearest 50 neighbors. Then you could listen to her message on a website, and respond via a text message. Or, imagine a service where you could call a number to immediately alert your nearest 50 neighbors of an emergency like a robbery.<br /> <br /> In this project, you will help create that dream.<br /> <br /> This project is about creating a prototype/[ MVP] of the above idea that we can test in one or two neighborhoods. You will need to create a site that allows users to post messages to a group via their computer and via audio based phone. Users should also be able to read/listen to these posts via their computer or phone, and be able to register via their computer or phone. Block captains/administrators should also have the ability to add users to the group via CSV upload.<br /> <br /> As the most experimental idea, this project will require significant leadership from the student. We recommend that anybody who applies for this project should have a well-developed plan for how they will create the prototype described above. Our own research has found interesting projects in Drupal (particularly [ MyVoxBox] and [ VozMob]) that can be the foundation for a prototype, but you should feel free to submit a proposal using any technology that you are confident can be used to create the above prototype in roughly 10 weeks. We also would love to hear your thoughts on how to extend this idea to make it more accessible and a stronger tool for building community (there is a conspicuous lack of text messaging above).<br /> <br /> Check out [[Electronic Block Clubs]] for a lot more info on this idea, including a draft system architecture for a more sophisticated multi-media group messaging system.</div> Wbushey DemocracyMap Representatives 2013-01-14T04:24:07Z <p>Philipashlock: /* Pennsylvania */</p> <hr /> <div>== State Data ==<br /> * State legislators are covered by the [ OpenStates API]<br /> * Governors are covered by this National Governor's Association and this Scraper:<br /> * Additional data may also be available within State Blue Books which can be found listed at:<br /> <br /> == County Data ==<br /> <br /> NACO provides national coverage:<br /> <br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> * Source:<br /> <br /> == City Data By State ==<br /> <br /> Note: See [ Individual City Data] for resources on a city by city basis<br /> <br /> Most states have a league of cities or association of cities that publishes representative data for each of its member cities. This list catalogs the sources of such data state by state. Some of this data may also be available within State Blue Books which can be found listed at:<br /> <br /> ==== Alabama ====<br /> <br /> Representatives: <br /> <br /> * Source:<br /> <br /> ==== Alaska ====<br /> <br /> Representatives: <br /> <br /> * Print version available for order at :<br /> <br /> ==== Arizona ====<br /> <br /> Representatives: <br /> <br /> * Source:<br /> <br /> ==== Arkansas ====<br /> <br /> Representatives: <br /> <br /> * Source:<br /> <br /> ==== California ====<br /> <br /> Representatives:<br /> * Source:<br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> * Source (clerks):<br /> * Source (clerks):;Itemid=90&amp;option=com_community&amp;view=search&amp;isMenu=true&amp;uuId=5237bfb7855f0&amp;limitstart=20<br /> <br /> Social Media: <br /> * Source:<br /> * Source:<br /> * Source:<br /> * Source:;amp;previewStory=28310<br /> * Source:!/CaCitiesLearn/cacities<br /> * Source:<br /> <br /> ==== Colorado ====<br /> <br /> Representatives:<br /> * Source:<br /> <br /> ==== Connecticut ====<br /> <br /> Representatives: <br /> * Municipal CEOs, Source: ([;Q=383032 more info])<br /> * Municipal CFOs, Source: ([;Q=383034 more info])<br /> * Municipal Tax Assessors, Source: ([;Q=390068 more info])<br /> * Complete print, CD, and online directories available for a fee ($200):<br /> <br /> City URLs: <br /> * Source:;q=257266&amp;ctportalPNavCtr=|27610|#38191<br /> <br /> ==== Delaware ====<br /> <br /> Representatives: <br /> <br /> * Source:<br /> <br /> ==== District of Columbia ====<br /> <br /> * Source:<br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> <br /> ==== Florida ====<br /> <br /> Representatives:<br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> * Source:<br /> * Source (clerks):<br /> <br /> ==== Georgia ====<br /> <br /> Representatives: <br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper: As of March 15 dane summers has started working on one&lt;/span&gt;<br /> * Source:<br /> <br /> ==== Hawaii ====<br /> ==== Idaho ====<br /> <br /> City URLs:<br /> * Source:<br /> * Source:<br /> <br /> Representatives: <br /> <br /> * Print version available for order at<br /> <br /> ==== Illinois ====<br /> <br /> Representatives: <br /> <br /> * Print version available for order at;parent=1168<br /> <br /> Mayors:<br /> * Source (PDF)<br /> <br /> ==== Indiana ====<br /> <br /> City URLs:<br /> <br /> * Source:<br /> * Source:<br /> <br /> Representatives<br /> <br /> * Available for order:;action=i&amp;id=110<br /> <br /> ==== Iowa ====<br /> <br /> Representatives<br /> <br /> * Source: - Uses Silverlight, seems mostly limited to Mayors. Raw XML source that Silverlight points to:$orderby=Name&amp;$expand=CRMOrgCounties,CRMCityMayorsClerks<br /> <br /> ==== Kansas ====<br /> <br /> Representatives:<br /> * Source:<br /> <br /> ==== Kentucky ====<br /> <br /> Representatives: <br /> <br /> * Source:<br /> <br /> ==== Louisiana ====<br /> <br /> Representatives: <br /> <br /> * Source:<br /> <br /> ==== Maine ====<br /> <br /> City Contact Info<br /> * Source:<br /> * Source:<br /> <br /> Representatives: <br /> <br /> * Can be ordered from<br /> <br /> ==== Maryland ====<br /> <br /> Seems to be only available as a PDF. See<br /> <br /> Representatives<br /> * Source (PDF):<br /> * Source:<br /> <br /> ==== Massachusetts ====<br /> <br /> Officials:<br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> * Source:<br /> <br /> City Phone Numbers:<br /> * Source:<br /> <br /> City Contact Info:<br /> * Source:<br /> <br /> Election Contact Info:<br /> * Source:<br /> <br /> City URLs:<br /> * Source:<br /> * Source:<br /> <br /> ==== Michigan ====<br /> <br /> City URLs:<br /> * Source:,1607,7-192-29701_31713_31714-97070--,00.html<br /> * Source:<br /> <br /> Township Officials:<br /> * Source:<br /> <br /> ==== Minnesota ====<br /> <br /> City Information:<br /> * Source:<br /> <br /> Representatives:<br /> * The directory is only available in print and costs $35<br /> <br /> ==== Mississippi ====<br /> <br /> Representatives:<br /> <br /> * Source:<br /> <br /> ==== Missouri ====<br /> <br /> Representatives<br /> <br /> * Available for $350!<br /> <br /> City URLs<br /> * Source:<br /> <br /> ==== Montana ====<br /> <br /> City URLs:<br /> * Source:<br /> <br /> Representatives: <br /> * Available for order<br /> <br /> ==== Nebraska ====<br /> <br /> City URLs<br /> <br /> * Source:<br /> <br /> ==== Nevada ====<br /> <br /> Mayors<br /> <br /> * Source:<br /> <br /> ==== New Hampshire ====<br /> <br /> City URLs:<br /> * Source:<br /> * Source:<br /> <br /> Officials<br /> * Available for order:;id=4&amp;parent=0<br /> <br /> ==== New Jersey ====<br /> <br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> <br /> OMG Machine Readable Raw Data! See:<br /> <br /> Representatives (Mayors only)<br /> * Source:<br /> * Full PDF available for $50 -<br /> <br /> ==== New Mexico ====<br /> <br /> Representatives<br /> * Available for order $35 -<br /> <br /> ==== New York ====<br /> <br /> City URLs<br /> <br /> * Source:;content=munibyalpha<br /> <br /> Representatives<br /> <br /> * Available for order?<br /> * Towns, available for order:<br /> <br /> ==== North Carolina ====<br /> <br /> City URLs<br /> * Source:<br /> <br /> Representatives: <br /> <br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> * Source:<br /> * Source (clerks) :<br /> <br /> ==== North Dakota ====<br /> <br /> Representatives<br /> <br /> * Available for order:<br /> <br /> ==== Ohio ====<br /> <br /> Representatives:<br /> <br /> * Available for order:<br /> <br /> City URLs<br /> <br /> * Source:<br /> * Source:;cty=<br /> <br /> ==== Oklahoma ====<br /> <br /> City URLs: <br /> <br /> * Source:<br /> <br /> Representatives:<br /> <br /> * Some listed at<br /> * Print copy available for order at and<br /> <br /> ==== Oregon ====<br /> <br /> Representatives<br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> * Source:<br /> <br /> City Contact Info<br /> * Source:<br /> <br /> ==== Pennsylvania ====<br /> <br /> Representatives<br /> <br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> * Source (19mb CSV);F=C<br /> * Source<br /> <br /> ==== Puerto Rico====<br /> <br /> City Contact Info:<br /> * Source:<br /> <br /> ==== Rhode Island ====<br /> <br /> City Contact Info:<br /> * Source:<br /> <br /> Representatives:<br /> * Source (PDF)<br /> <br /> ==== South Carolina ====<br /> <br /> Representatives<br /> <br /> * Source:<br /> <br /> ==== South Dakota ====<br /> <br /> Representatives<br /> <br /> * Available for order:;SEC={5E957446-C492-4183-8408-FA70CE26D0D4}<br /> <br /> ==== Tennessee ====<br /> <br /> Representatives:<br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper: As of March 8 philipashlock has started working on one&lt;/span&gt;<br /> * Source:<br /> <br /> More Info:<br /> *<br /> <br /> ==== Texas ====<br /> <br /> Representatives:<br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> * Source:<br /> <br /> City Managers:<br /> * Source: (not working on last inspection)<br /> * Source (PDF): -&gt;<br /> <br /> ==== Utah ====<br /> <br /> City URLs<br /> * Source:<br /> <br /> Representatives<br /> * Print version available for order at<br /> <br /> ==== Vermont ====<br /> <br /> OMG Machine Readable Data! See<br /> <br /> Representatives:<br /> * Source:<br /> <br /> City Information:<br /> * Source:<br /> <br /> ==== Virginia ====<br /> <br /> City URLs:<br /> <br /> * Source:<br /> <br /> ==== Washington ====<br /> <br /> Representatives:<br /> * Source:<br /> * &lt;span style=&quot;background-color:#DAFF8A&quot;&gt;Scraper:;/span&gt;<br /> * Source (clerks):<br /> <br /> ==== West Virginia ====<br /> <br /> Representatives: <br /> <br /> * Print version available for order at<br /> <br /> ==== Wisconsin ====<br /> <br /> City URLs<br /> * Source:;Type=B_BASIC<br /> * Source:<br /> <br /> ==== Wyoming ====<br /> <br /> Representatives:<br /> <br /> * Print version available for order at:;SEC={39883395-64A6-411A-AF31-ED715C1916ED}<br /> <br /> == Example ==<br /> <br /> See [[DemocracyMap Officials Example]]<br /> <br /> == Number of Cities Per State ==<br /> <br /> Based on the [ 2007 GID]<br /> <br /> &lt;pre&gt;<br /> <br /> +------------+--------+<br /> | STATE_ABBR | cities |<br /> +------------+--------+<br /> | IL | 2598 |<br /> | TX | 2418 |<br /> | PA | 2032 |<br /> | MO | 1904 |<br /> | IA | 1894 |<br /> | OH | 1876 |<br /> | MN | 1708 |<br /> | KS | 1254 |<br /> | NY | 1236 |<br /> | OK | 1188 |<br /> | WI | 1184 |<br /> | IN | 1134 |<br /> | NC | 1096 |<br /> | GA | 1070 |<br /> | MI | 1066 |<br /> | NE | 1060 |<br /> | AR | 1004 |<br /> | CA | 956 |<br /> | AL | 916 |<br /> | KY | 838 |<br /> | FL | 822 |<br /> | ND | 714 |<br /> | TN | 694 |<br /> | NJ | 648 |<br /> | SD | 618 |<br /> | LA | 606 |<br /> | MS | 592 |<br /> | WA | 562 |<br /> | CO | 540 |<br /> | SC | 536 |<br /> | OR | 484 |<br /> | UT | 484 |<br /> | WV | 464 |<br /> | VA | 458 |<br /> | ID | 400 |<br /> | MD | 314 |<br /> | AK | 296 |<br /> | MT | 258 |<br /> | NM | 202 |<br /> | WY | 198 |<br /> | AZ | 180 |<br /> | DE | 114 |<br /> | VT | 90 |<br /> | MA | 90 |<br /> | CT | 60 |<br /> | ME | 44 |<br /> | NV | 38 |<br /> | NH | 26 |<br /> | RI | 16 |<br /> | | 6 |<br /> | HI | 2 |<br /> | DC | 2 |<br /> +------------+--------+<br /> <br /> &lt;/pre&gt;<br /> <br /> == City Data ==<br /> The OpenStates project has been compiling resources on a city by city basis<br /> * [ Google doc spreadsheet listing cities]<br /> * [ Github wiki page]</div> Philipashlock Minneapolis election 2012 candidates 2012-12-27T14:20:19Z <p>Admin: /* Template */</p> <hr /> <div>This directory is an detailed as the voters and candidates themselves make it. [;action=edit Edit this page] to add additional candidates websites (if you don't who will?).<br /> <br /> == Template ==<br /> <br /> Not all candidates will use all of these online tools now, but the more that are identified early the more people can get connected with the candidates of interest.<br /> <br /> Gather the links first and then we can embed the links behind the text.<br /> <br /> * Candidate Name<br /> ** Web: http://<br /> ** E-mail:<br /> ** Campaign Telephone:<br /> ** E-mail Newsletter:<br /> ** Blog: <br /> ** Twitter: [ @something]<br /> ** Facebook Campaign Page:<br /> ** Facebook Profile:<br /> ** Facebook Group:<br /> ** YouTube:<br /> ** LinkedIN:<br /> ** Google+:<br /> ** Campaign Mailing Address:<br /> ** Political Party: <br /> ** Current Position/Job:<br /> ** Current Position Web:<br /> ** Current Position Blog:<br /> ** Current Position E-Newsletter:<br /> <br /> == Mayor ==<br /> <br /> * Candidate Name<br /> ** Web: http://<br /> ** E-mail:<br /> ** Campaign Telephone:<br /> ** E-mail Newsletter:<br /> ** Blog: <br /> ** Twitter: [ @something]<br /> ** Facebook Campaign Page:<br /> ** Facebook Profile:<br /> ** Facebook Group:<br /> ** YouTube:<br /> ** LinkedIN:<br /> ** Google+:<br /> ** Campaign Mailing Address:<br /> ** Political Party: <br /> ** Current Position:<br /> ** Current Position Web:<br /> <br /> == City Council ==<br /> <br /> ===Ward 1===<br /> <br /> ===Ward 2===<br /> <br /> ===Ward 3===<br /> <br /> ===Ward 4===<br /> <br /> ===Ward 5===<br /> <br /> ===Ward 6===<br /> <br /> ===Ward 7===<br /> <br /> ===Ward 8===<br /> <br /> ===Ward 9===<br /> <br /> ===Ward 10===<br /> <br /> ===Ward 11=== <br /> <br /> ===Ward 12===<br /> <br /> ===Ward 13===<br /> <br /> <br /> == Board of Estimate and Taxation ==<br /> <br /> <br /> == Minneapolis Park and Recreation Board ==<br /> ===District 1===<br /> <br /> ===District 2===<br /> <br /> ===District 3===<br /> <br /> ===District 4===<br /> <br /> ===District 5===<br /> <br /> ===District 6===<br /> <br /> ===At-Large seats===</div> Admin GroupServer Object and Interface Reference 2012-12-24T02:36:56Z <p>Wbushey: /* EmailUser */</p> <hr /> <div>GroupServer has many objects, interfaces, and components. This page serves as an incomplete list and quick reference of the data structures of GroupServer. In many cases, a brief description of the structure's purpose and listing of its properties/methods is provided. In general, the EGG-INFO/PKG-INFO of the structure's egg will provide much more detail, and will probably be more current. And of course, there's the code itself. <br /> <br /> = Groups, Group, and GroupMembers =<br /> <br /> == GSGroupsInfo ==<br /> <br /> '''Package''': gs.groups.groupsInfo.GSGroupsInfo<br /> <br /> '''ZCA Name''': groupserver.GroupsInfo - adapter<br /> <br /> Provides info/access for all groups on the site, and creates lists of groups based on user membership.<br /> <br /> * .get_all_groups()<br /> * .get_visible_groups() - Returns all groups visible to the logged in user<br /> * .get_visible_group_ids() - Returns ids of .get_visible_groups()<br /> * .filter_visible_groups_id(gIds)<br /> * .clear_groups_cache()<br /> * .get_non_member_groups_for_user(user)<br /> * .get_joinable_groups_for_user(user)<br /> * .get_joinable_group_ids_for_user(user)<br /> * .get_member_groups_for_user(user, authUser=None) - Returns a list of groups the user is a member of. If &quot;user&quot; is the same as the &quot;authenticatedUser&quot;, then the list will be of all groups that &quot;user&quot; is a member of. Otherwise only the groups that the user is a member of, and has posted to, will be listed.<br /> <br /> == IGSGroupInfo ==<br /> <br /> '''Package''': [ Products.GSGroup.interfaces.IGSGroupInfo]<br /> <br /> Declares basic properties of a group:<br /> <br /> * group_exists()<br /> * get_id()<br /> * get_name()<br /> * get_url()<br /> * get_property(prop, default)<br /> <br /> == GSGroupInfo ==<br /> <br /> '''Package''': [ Products.GSGroup.groupInfo.GSGroupInfo]<br /> <br /> '''ZCA Name''': groupserver.GroupInfo<br /> <br /> Implements IGSGroupInfo and provides the following constructor:<br /> <br /> * __init__(self, context, groupId=None): If no groupId, the group will be figured out by acquisition.<br /> <br /> Additional properties/methods provided:<br /> <br /> * groupObj<br /> * description<br /> * relativeURL<br /> * group_type<br /> * ptn_coach<br /> * group_admins<br /> * group_stats<br /> * site_admins<br /> * joinability<br /> <br /> == IGSGroupMembersInfo ==<br /> <br /> '''Package''': [ Products.GSGroupMember.interfaces.IGSGroupMembersInfo]<br /> <br /> Declares properties related to the set (and subsets) of members of a group.<br /> <br /> * groupInfo<br /> * siteInfo<br /> * members<br /> * fullMembers<br /> * fullMembersCount<br /> * invitedMembers<br /> * invitedMembersCount<br /> * etc...<br /> <br /> == GSGroupMembersInfo ==<br /> <br /> '''Package''': [ Products.GSGroupMember.groupMembersInfo.GSGroupMembersInfo]<br /> <br /> == IGSMailingListInfo ==<br /> <br /> '''Package''': Products.GSGroup.interfaces.IGSMailingListInfo<br /> <br /> * is_moderated<br /> * is_moderated_new<br /> * get_moderators<br /> * get_moderatees<br /> * get_blocked_members<br /> <br /> == GSMailingListInfo ==<br /> <br /> '''Package''': Products.GSGroup.mailinglistinfo.GSMailingListInfo<br /> <br /> '''ZCA Name''': groupserver.MailingListInfo<br /> <br /> Implements IGSMailingListInfo. Also includes an instance of the Mailing List Manager for the group as .mlist.<br /> <br /> = Site Objects =<br /> <br /> == IGroupserverSite ==<br /> <br /> '''Package''': Products.GroupServer.interfaces.IGroupserverSite<br /> <br /> Simple interface for a GroupServer site folder.<br /> <br /> Provides:<br /> <br /> * get_site()<br /> <br /> == GroupserverSite ==<br /> <br /> '''Package''': Products.GroupServer.GroupserverSite<br /> <br /> Implements IGroupserverSite and subclasses OFS.OrderedFolder.OrderedFolder.<br /> <br /> == IGSSiteInfo ==<br /> <br /> '''Package''': Products.GSContent.interfaces.IGSSiteInfo<br /> <br /> A marker interface. <br /> <br /> == GSSiteInfo ==<br /> <br /> '''Package''': [ Products.GSContent.view.GSSiteInfo]<br /> <br /> '''ZCA Name''': groupserver.SiteInfo<br /> <br /> Implements IGSSiteInfo.<br /> <br /> Provides the following properties:<br /> <br /> * id <br /> * name<br /> * title<br /> * url<br /> * site_admins<br /> * showImage - Don’t know what this does<br /> * skin<br /> <br /> Also provides: <br /> <br /> * siteObj<br /> * config<br /> * get_path<br /> * get_support_email<br /> * get_property(prop, default=None) - Convenience method for .siteObj.getProperty(prop, default)<br /> <br /> = User Objects =<br /> <br /> == IGSUserInfo ==<br /> <br /> '''Package''': [ Products.CustomUserFolder.interfaces.IGSUserInfo]<br /> <br /> '''ZCA Name'''<br /> <br /> * groupserver.UserFromId - Factory based on a provided user ID<br /> * groupserver.LoggedInUser - Factory returned the logged in user<br /> <br /> Declares methods to get available information about individual users.<br /> <br /> * get_id<br /> * get_profile_url<br /> * get_names<br /> * get_display_name<br /> * get_image_url<br /> * get_groups<br /> * get_email_address_visibility<br /> * get_all_email_addresses<br /> * get_preferred_email_addresses<br /> * get_timezone<br /> <br /> == GSUserInfo ==<br /> <br /> '''Package''': [ Products.CustomUserFolder.userInfo.GSUserInfo]<br /> <br /> Implements IGSUserInfo and adapts ICustomUser. However, the methods declared by IGSUserInfo are not defined.<br /> <br /> == ICustomUser ==<br /> <br /> '''Package''': Products.CustomUserFolder.interfaces.ICustomUser<br /> <br /> Appears to be a marker interface<br /> <br /> == CustomUser ==<br /> <br /> '''Package''': Products.CustomUserFolder.CustomUser.CustomUser<br /> <br /> Inherits from User and Folder, and implements ICustomUser<br /> <br /> * get_image(url_only=True) - Returns the image of a user, or just the url by default.<br /> <br /> == IGSEmailUser ==<br /> <br /> '''Package''':<br /> <br /> Represents a user who can add and remove email addresses to and from their profile. Also allows user to manage other settings related to email delivery.<br /> <br /> '''Methods'''<br /> <br /> * add_address<br /> * remove_address<br /> * is_address_verified<br /> * get_addresses - Returns a list of all email addresses associated with the user<br /> * get_verified_addresses<br /> * get_unverified_addresses<br /> * get_delivery_addresses - Returns default delivery email addresses<br /> * set_delivery<br /> * drop_delivery<br /> <br /> ==EmailUser==<br /> <br /> '''Package''': []<br /> <br /> '''ZCA Name'''<br /> <br /> * groupserver.EmailUserFromEmailAddress - Returns an EmailUser based on a provided email address string<br /> <br /> '' Factory''<br /> <br /> *<br /> <br /> Implements IGSEmailUser and Adapts IGSUserInfo<br /> <br /> == ACL User ==<br /> <br /> '''Retrieving ACL User by Email'''<br /> <br /> user = context.acl_users.get_userByEmail(email)<br /> <br /> '''Properties of ACL User'''<br /> <br /> * user.getId() - User ID<br /> * user.getProperty(&lt;string&gt;, &lt;string&gt;) - General Properties<br /> <br /> [[Category:Technology:GroupServer Development Reference]]</div> Wbushey Zope Component Architecture 2012-12-24T01:42:34Z <p>Wbushey: </p> <hr /> <div>Zope Component Architecture (ZCA) is one of the most important frameworks used in GroupServer. ZCA is involved in defining classes that can be used throughout GroupServer (i.e. components) by declaring a component name and corresponding class through registration (usually via configure.zcml). ZCA also has an events framework.<br /> <br /> A couple of comprehensive references are mentioned/linked to below. It is worthwhile to skim them, especially parts that describe how the component architecture works. Below the References section you will find info on specific parts of the component architecture that serve as a quick reference.<br /> <br /> = References =<br /> <br /> [ Comprehensive online reference about ZCA] - Recommend sections for reading: <br /> * [ 1.1] - Introduction to ZCA<br /> * [ 2] - Example of using ZCA (if unfamaliar with OO and/or the adapter pattern)<br /> * [ 3] - Interfaces (keeping in mind that zope.schema is used in place of Attribute and invariants in GroupServer)<br /> * [ 4] - Adapters<br /> * [ 5] - Utilities<br /> * [ 7.1] - ZCML<br /> Other useful sections:<br /> *[ 6] - Issuing and handling events (haven’t yet seen this come up in GroupServer, but its probably in there somewhere)<br /> *[ 9] - API of ZCA.<br /> <br /> There is also lengthy documentation in the EGG-INFO/PKG-INFO of each of the three packages that make up ZCA:<br /> * zope.component<br /> * zope.interface<br /> * zope.event<br /> In addition, zope.schema augments zope.interface (specifically attribute declaration), and its EGG-INFO/PKG-INFO is also worth a read.<br /> <br /> = Adapters =<br /> <br /> Adapters can be registered. They can be registered as global components via Python using zope.component.globalSiteManager (or getGlobalSiteManager()). They can be registered via configure.zcml. They can also be registered as local components via ZMI’s adapter element. Older ways to register these start with provide and can be seen in some parts of GroupServer.<br /> Once an adapter is registered, it can be retrieved using the getAdapter(&lt;adaptee&gt;, &lt;interface&gt;, &lt;name&gt;) or queryAdapter(&lt;adaptee&gt;, &lt;interface&gt;, &lt;name&gt;) functions of zope.component. If the adapter is registered without a name, it can also be invoked by calling the desired interface with the assignee as an argument, i.e. IPet(dog).<br /> <br /> = Utilities =<br /> <br /> Utilities can be registered and retrieved in a similar manner to Adapters. In this case, you are registering an instance that provides a specified interface, making that instance (and all of its attributes/methods) available to the rest of the site. <br /> <br /> = Factories =<br /> <br /> These are a special case of Utilities. zope.component.factory.Factory(&lt;class-name&gt;, ‘&lt;title&gt;’) creates a Factory object (which is an implementation of the IFactory interface) that creates instances of class-name and has a title. This can be registered using zope.component.globalsitemanager.registerUtility(&lt;instance&gt;, IFactory, &lt;‘factory-name’&gt;, args), and can be retrieved either by zope.component.get/queryUtility(IFactory, &lt;’factory-name’&gt;) or zope.component.createObject(&lt;’factory-name’&gt;, args)<br /> <br /> = Schema =<br /> <br /> Schemas add a bit of control to the declaration of interface attributes. Namely, by using a schema, an interface author can mark an attribute as required, set a default value, and create a validator.<br /> <br /> [[Category:Technology:GroupServer Development Reference]]</div> Wbushey Archived Start A Forum 2012-12-06T17:02:33Z <p>Admin: Created page with &quot;'''ARCHIVED PAGE - THIS PAGE NO LONGER MAINTAINED''' [ Back to About Issues Forum] ==Intro== '''So you want to start a local Issues Forum in your com...&quot;</p> <hr /> <div>'''ARCHIVED PAGE - THIS PAGE NO LONGER MAINTAINED'''<br /> <br /> [ Back to About Issues Forum]<br /> <br /> <br /> ==Intro==<br /> <br /> '''So you want to start a local Issues Forum in your community!'''<br /> <br /> Here is a step by step process designed to walk you through the steps of organizing an online local Issues Forum in your community or neighborhood/neighbourhood. This process assumes that you will be hosting your forum on [ our site], however you can use this process even if you plan to host your forum elsewhere.<br /> <br /> Here are a couple of things to think about, before you get started:<br /> <br /> # Before launching a local Issues Forum with E-Democracy.Org, you ought to make sure that you know what you are getting yourself into. Please, take a look at the following resources:&lt;br&gt;&lt;br&gt;<br /> #* [ Start an Issues Forum in 10 Steps] - Or see the short [[Starting a neighbors forum]]<br /> #* [[Forum manager job description]]<br /> #* Optional - [ Video Interview on Issues Forum] - 6 minutes<br /> #* Optional - Download and print relevant sections from our [[Issues Forum Guide]].<br /> #* Optional - Review our [[Inclusive Social Media]] work in lower income, highly diverse neighborhoods. We provide special digital inclusion coaching and assistance to such areas.&lt;br&gt;&lt;br&gt;<br /> # [[Why Host]] at E-Democracy.Org&lt;br&gt;&lt;br&gt;<br /> # [[Terms of Hosting]] your forum on E-Democracy.Org&lt;br&gt;&lt;br&gt;<br /> # This is the &quot;wiki&quot; ([ What is a Wiki]) portion of our web site. Please, make sure you have an account. ''Go to the [;type=signup&amp;returnto=Start_A_Forum Log in/Create Account link] in the upper right hand corner of this screen. We just need your name and email address to set up an account.''&lt;br&gt;&lt;br&gt;<br /> # Adopt a worksheet below, entering the name of your community next to it, to indicate that it is taken. Edit your new worksheet as you see fit, as you work your way through the process of launching a local Issues Forum. &lt;br&gt;&lt;br&gt;NOTE: '''This will be a public page.''' In initiating your planning process this way, any work you create on this site will be available to anyone. &lt;br&gt;&lt;br&gt;<br /> # As you move from start-up to opening, see our [[Forum manager resources]].<br /> <br /> ==Templates==<br /> <br /> * [[Start A Forum - 0001]] - Template<br /> <br /> '''Available Worksheets:'''<br /> * [[Start A Forum - 0015]] - (Enter Your Community Name Here)<br /> <br /> '''In Progress:'''<br /> * [[Start A Forum - 0014]] - Fort Collins, Colorado<br /> * [[Start A Forum - 0013]] - Westborough, Massachusetts<br /> * [[Start A Forum - 0012]] - Cedar Riverside, Minneapolis, Minnesota<br /> * [[Start A Forum - 0010]] - Bemidji, Minnesota<br /> * [[Start A Forum - 0011]] - Cook County, Minnesota<br /> * [[Start A Forum - 0009]] - Highland Park, St. Paul, Minnesota<br /> * [[Start A Forum - 0006]] - Powderhorn Neighborhood, Minneapolis<br /> * [[Start A Forum - 0005]] - Greater Chicagoland, Illinois<br /> <br /> Part way done? Are you looking for your [[Charter Worksheets|Charter template]]?<br /> <br /> '''Complete:'''<br /> * [[Start A Forum - 0003]] - Brislington<br /> * [[Start A Forum - 0008]] - Cass Lake Leech Lake, Minnesota<br /> * [[Start A Forum - 0002]] - Oxford - Central, South, and West<br /> * [[Start A Forum - 0004]] - Oxford - Headington and Marston<br /> * [[Start A Forum - 0007]] - Las Vegas, New Mexico&lt;br&gt;&lt;br&gt;<br /> * If you need help with any part of this process, please [ Contact Us].<br /> <br /> {{Forum Managers}}<br /> {{E-Democracy.Org}}</div> Admin Archived forum manager resources 2012-12-04T16:42:47Z <p>Admin: Created page with &quot;'''ARCHIVED PAGE - THIS PAGE NO LONGER MAINTAINED''' [ Back to About Issues Forum] Helpful forum management guides and samples of messages for common s...&quot;</p> <hr /> <div>'''ARCHIVED PAGE - THIS PAGE NO LONGER MAINTAINED'''<br /> <br /> [ Back to About Issues Forum]<br /> <br /> Helpful forum management guides and samples of messages for common situations in forum management. <br /> <br /> The sample text has been tested and refined by Forum Managers in many situations. If you find text works for you, they should need only minor modifications.<br /> <br /> ''Many of these resources were drafted before our large expansion into neighborhood Issues Forums, but are still relevant.''<br /> <br /> ==First Step to Opening a New Forum==<br /> <br /> After you've gone through the [[Start A Forum]] process, worked with staff to technically create your forum, and started recruitment efforts (using our [[example forum invitations]]), you can now prepare to open and manage your community's new Issues Forum. <br /> <br /> * The first few messages to the forum ought to accomplish the following goals:<br /> # We highly recommend starting with an initial round of &quot;Introductions&quot; to humanize the forum - You may do this with 50 or more members to help you build &quot;who's who&quot; momentum to attract the next 50 your need to open. Getting 25 of 100 members to introduce themselves publicly is a good start. Introductions are a simple way for people to learn how to post to the forum and it creates the impression/reality that the members themselves are the content producers/sharers.<br /> # Ask them to invite others to become members (provide a [[example forum invitations|sample invitation]] for participants to pass along to others) - one idea is an e-invite signed by at least seven initial members for forwarding<br /> # Introduce the purpose, local scope, and rules of the forum<br /> # Make sure that participants understand how the forum works ... or that they will be getting lots of e-mail, unless they change their delivery settings<br /> # Make sure that they understand the different ways to read and post (One message per post, &quot;[[sample digest|digest]]&quot;, and &quot;web only&quot;) - Assuming we've set up the Facebook Page and Twitter feed, introduce that option separately down the road<br /> # How to sign up for other forums<br /> # Introduce an opening topic or simply ask participants what community topics they would like discussed o the forum. You can use the list generated down the road when forum traffic is light or when you want to direct attention away from a topic that is less civil than you'd like by trumping it with something more interesting to members.<br /> <br /> ==Examples of Messages for Common Situations of Your Forum==<br /> <br /> '''Startup Messages'''<br /> * [[Example forum invitations]]<br /> * [[Welcome message]]<br /> * Messages to help get a new forum off to a good start, these are samples we used when launching the Roseville Issues Forum in July 2006 - feel free to use them as is, or modify them to fit your circumstances:<br /> *# [[Welcome 1]]<br /> *# [[Welcome 2]]<br /> *# [[Starting introductions]]<br /> *# [[Forum Guidelines Reminder]]<br /> <br /> * ''More recent start-up sample messages to be integrated into this wiki section''<br /> ** Moderated - Pre-Opening Period<br /> ** [ Invite Others] <br /> ** [ Invite Public Institutions/Power Players] - They have announcements to share and can often take our discussions into the political process <br /> ** [ Digest Instructions]<br /> ** [ Call for Introductions]<br /> ** [ Features Summary]<br /> ** [ Additional advice]<br /> ** Once you get your desired number of introductions and you've reached your recruitment goal (we strongly recommend 100 members, but we are experimenting at 50), your would then announce that the forum in open for general posting and switch those who have introduced themselves to unmoderated.<br /> <br /> ==NEW - Example Hamline Midway &quot;priming posts&quot; pre-opening from 2011==<br /> ** If you cut and paste this text, reformat the text from scratch or you may end up with broken lines<br /> ** [ Welcome, still recruiting to 100]<br /> ** [ Use and Interaction with Forum]<br /> ** [ Local Scope]<br /> ** [ Forum Rules]<br /> ** [ Invite to Forward]<br /> ** [ Digest Version] - Note if you cut and paste this you need to replace &quot;e-mail obscured&quot; with the posting address<br /> ** [ Call for Introductions]<br /> ** [ Open for Posting]<br /> <br /> <br /> '''Examples Messages for Other Situtations'''<br /> * What is a [[Definition of Forum Manager | Forum Manager]]<br /> * [[Definition of Local Issues]]<br /> * How to: [[Start A Discussion]] - A list of tips, directed at forum participants, on how to start a discussion in their forum.<br /> * [[Subject Lines]] - Advice on how and when to change them<br /> * [[Forum Guidelines Reminder]]<br /> * [[Email Management]]<br /> * [[File Upload Suggestions]] - Groupserver<br /> * [[Official Warning]] - Example of warning message to forum member.<br /> * [[Notice of Official Warning]] - Example of a message to tactfully inform other forum members about recently issued warning messages<br /> * [[Forum features summary]] - Text to customize per forum<br /> <br /> <br /> ==Administering Your Forum - Drafting==<br /> * [[Forum Managers Guide To Groupserver]] - A guide to using groupserver<br /> <br /> ==Facilitating Your Forum - Drafting==<br /> * Encouraging introductions<br /> * Welcoming new members<br /> * [[Rules]] education and enforcement<br /> * [[Information seeking]] - Monitoring local websites (gov, media, orgs, etc.) for items of interest like new documents on your local government or neighbourhood/neighborhood website<br /> * Discussion starting - <br /> * [[Neighborhood links template]] - While we do have a &quot;links tab&quot; on a forum home page, these links are not yet editable via the web admin. Even if they were, there is value in opening a simple longer links directory for local websites. You will need to copy this template to its own wiki page - like [[Cedar Riverside]] or [[Frogtown]] - and fill it out considerably to get your forum members to &quot;crowd source&quot; the rest.<br /> <br /> <br /> ==Other Resources==<br /> <br /> * [[Issues Forums FAQ]]<br /> * [[Forum manager job description]]<br /> <br /> <br /> <br /> {{Forum Managers}}<br /> {{E-Democracy.Org}}</div> Admin Strategic Plan 2010-12 2012-11-29T16:30:16Z <p>Admin: </p> <hr /> <div>Current [[strategic plan]]<br /> <br /> E-Democracy.Org Strategic Plan 2010-12<br /> <br /> Mission: Harness the power of online tools to support participation in public life, strengthen communities, and build democracy.<br /> <br /> *Goal 1 - Engagement: Strengthen, broaden, and diversify engagement through effective, meaningful, and informed online discussion and exchange on public issues <br /> ** Strategy 1.1: Actively engage people from diverse and less represented communities to participate in e-democracy projects<br /> ** Strategy 1.2: Strategically expand number and geographical distribution of Issues Forums and next generation online engagement opportunities<br /> ** Strategy 1.3: Improve effectiveness and sustainability of existing Issues Forums<br /> <br /> *Goal 2 - Active Citizenship: Empower people through interactions, experiences, and online skills to have an impact on their communities and governments <br /> ** Strategy 2.1: Increase the use and relevance of information resources about governance, elections, the media, and public affairs to help address public challenges <br /> ** Strategy 2.2: Build capacity by teaching people how to participate in more effective ways <br /> ** Strategy 2.3: Partner with other organizations that bring people together around issues and places <br /> ** Strategy 2.4: Create opportunities for people to come together beyond online platforms<br /> <br /> * Goal 3 - Effective Practices and Tools: Develop, leverage, and disseminate practices and tools from around the world to promote engagement and active citizenship <br /> ** Strategy 3.1: Collect, curate, and disseminate relevant good practices <br /> ** Strategy 3.2: Help practitioners and organizations make use of effective e-democracy practices, tools, and lessons<br /> ** Strategy 3.3: Create and implement evaluation tools for all our projects <br /> ** Strategy 3.4: Provide education and training for elected officials and their staff on online engagement and transparency, and provide models and tools<br /> ** Strategy 3.5: Use open source tools to the greatest extent possible and work to ensure that major investments in our primary software platforms are released under common open source licenses</div> Admin Disaster 2012-11-20T18:00:15Z <p> </p> <hr /> <div>E-Democracy is a source of knowledge and information on how to use local online groups to respond to natural disasters.<br /> <br /> * [ Top Tips for Using Social Media for Local Community Disaster Recovery] - From sharing email addresses to creating Facebook Groups to using advanced tools.<br /> * [ Local Online Groups for Community Recovery from Hurricane Sandy] - Dozens of local online groups (mostly on Facebook)</div> Admin Search Page Parameters 2012-11-13T23:01:14Z <p>Wbushey: Created page with &quot;This page lists the available URL parameters for the search page [] and atom search page[]. This inform...&quot;</p> <hr /> <div>This page lists the available URL parameters for the search page [] and atom search page[]. This information should apply to any GroupServer site.<br /> <br /> The format for specifying parameters via the URL is as follows:<br /> <br />;parameter2=value2<br /> <br /> where parameter1 and parameter2 are the names of parameters you are specifying. Note that all specified parameters values, expect for the final parameter value, must be followed by an amperstand (&amp;). There is no limit to the number of parameters that can be specified.<br /> <br /> The format is nearly the same for the atom search page, except for a slight difference in the portion of the URL before parameter specification:<br /> <br />;parameter2=value2<br /> <br /> The known parameters for the search pages are<br /> <br /> * g: The *group* to search in. Default: All groups on the site.<br /> * t: Include *topics* in results? 1 = yes; 0 = no. Default: 1<br /> * This '''does not''' cause actual topic content to be part of the search result.<br /> * p: Include individual *posts* in results? 1 = yes; 0 = no. Default: 0<br /> * This '''does''' cause actual post content to be part of the search result.<br /> * f: Include *files* in results? 1 = yes; 0 = no. Default: 0<br /> * i: The *index* (aka offset) into the search-results. Default: 0<br /> * l: The number of results to return (the *length*). Default: 6<br /> * s: The text to *search* for. Default: Nothing<br /> <br /> The following parameters are known to exist, but have an unknown impact on the search:<br /> <br /> * a<br /> * m</div> Wbushey St. Paul News 2012-10-09T13:06:57Z <p>Admin: Created page with &quot;Sources for local new about St. Paul, Minnesota. * [ St. Paul Pioneer Press - Local] * [ StarTribune - S...&quot;</p> <hr /> <div>Sources for local new about St. Paul, Minnesota.<br /> <br /> * [ St. Paul Pioneer Press - Local] <br /> * [ StarTribune - St. Paul] - [ Feed]</div> Admin St. Paul East Side 2012-09-25T20:48:52Z <p>Jennifer: </p> <hr /> <div>E-Democracy hosts four [ Neighbors Forums] across the East Side of [ Saint Paul].<br /> <br /> &lt;table&gt;&lt;tr valign=&quot;top&quot;&gt;&lt;td align=center&gt;[ &lt;span style=&quot;font-size: 14pt; font-weight: bold;&quot;&gt;Payne-Phalen (D5)&lt;/span&gt;]<br />;/td&gt;<br /> &lt;td align=center&gt;[ &lt;span style=&quot;font-size: 14pt; font-weight: bold;&quot;&gt;Greater East Side (D2)&lt;/span&gt;]<br />;/td&gt;&lt;/tr&gt;&lt;tr valign=&quot;top&quot;&gt;&lt;td align=center&gt;[ &lt;span style=&quot;font-size: 14pt; font-weight: bold;&quot;&gt;Dayton's Bluff&lt;/span&gt;]<br />;/td&gt;&lt;td align=center&gt;[ &lt;span style=&quot;font-size: 14pt; font-weight: bold;&quot;&gt;District 1&lt;/span&gt;]&lt;br&gt;(Eastview, Conway, Highwood Hills, Battle Creek)<br />;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div> Admin Seattle 2012-09-25T14:34:06Z <p> /* Neighbors Online in Seattle */</p> <hr /> <div>This is a list of active two-way online community groups in the Seattle area. It includes e-mail lists, web forums, Facebook Groups and related online spaces designed for many to many exchange.<br /> <br /> Identified in the outreach process for the [ Community Engagement Online for All workshop] please add more. A broader selection of community sites are listed on the [ Seattle.Gov's Neighborhoods on the Net] directory. <br /> <br /> As Facebook Pages are more a kin to a place blog where people react to stories, they are not listed. If you know of exceptional two-way examples, please add them. Facebook Groups do fall within our scope. We maintain a similar directory as part of a [ &quot;Be Neighbors&quot; promotional campaign in Minneapolis and St. Paul].<br /> <br /> This is a &quot;wiki&quot; page in progress. Feel free to help edit in the online group titles.<br /> <br /> == Neighbors Online in Seattle ==<br /> * [ Admiral] - 123 members<br /> * [ Alki Beach]- 185 (quiet)<br /> * [ Ballard] - 110<br /> * [ Beacon Hill] (Mailman)<br /> * [ Columbia] - Forum<br /> * [ Hillman City] - 192<br /> * [ Hillman City-Brighton] - 186 - Facebook Group<br /> * [ Georgetown] - 557<br /> * [ Greenwood] - 420<br /> * [ Montlake] - 946<br /> * [!forum/north-ravenna-neighbors North Ravenna]<br /> * [ Squire Park] - 330<br /> * [ South Park]- 759<br /> * [ West Seattle] - Forum<br /> * Some private Google Groups (may be limited to council business): [!forum/northdelridge North Delridge], [!forum/south-capitol-neighborhood-board South Capitol]<br /> * [ EveryBlock Seattle] - Search to get into content like [ top messages]<br /> ** [ Green Lake] <br /> * [ - Seattle]<br /> * [ Talk2.Seattle.Gov] - Relatively uniquely, the Seattle city government hosts e-mail discussions lists that involve the public. Of the [ 318 lists with 116,852 subscribers] there are many neighborhood level lists. Like many &quot;officially hosted&quot; neighborhood association online groups we are ''guessing'' most are limited to the typical mission of neighborhood groups and not wider items like social exchange among neighbors, free items, business recommendations, etc. Please add direct links to most active neighborhood e-mail lists.<br /> <br /> Note: Which online neighborhood groups are missing? Please add them via the wiki or e-mail: FYI - We maintain a [ directory] and [ map] of similar [ online groups in the Twin Cities.]<br /> <br /> == Online Parent Groups ==<br /> <br /> * - 1705 members<br /> * - 122<br /> * - 835<br /> * - 136<br /> * - 136<br /> * - 903<br /> * - 878<br /> * - 2085<br /> * - 1876<br /> * - 199<br /> * - 350<br /> * [ North Seattle Parents FBGroup] - 58 <br /> * - 835<br /> * - 282<br /> * - 2785<br /> * - 305<br /> * - 131<br /> * - 86 (public archive)<br /> * - 65 (private archive)<br /> * - 35 (another one?)<br /> * Bainbridge<br /> * P.S. - 1 :-)<br /> <br /> <br /> Note: ''Holy cow, and we thought [;task=view&amp;id=140&amp;Itemid=1 Brooklyn was the center of Parent e-mail lists]. While the Twin Cities has some commercial online Moms forum mega-sites, this &quot;parents&quot; networking happens on our general [ Neighbors Forums]. It is notable that our largest and most active forums have lots of family-related exchange.''<br /> <br /> == Ethnic Online Groups ==<br /> *<br /> *<br /> *<br /> *<br /> * (religious)<br /> *<br /> * <br /> * (not active)<br /> <br /> Note: We are seeking connections with those who have experience connecting within ethnic/cultural groups online and an interest how those communities can raise their voices within specific neighborhoods.<br /> <br /> == Other ==<br /> * - 550<br /> *<br /> * - 26,000<br /> * [!forum/freegeek-seattle FreeGeek Seattle]</div> Admin Cass Lake Leech Lake Outreach and Engagement Leader 2012-08-27T13:15:27Z <p>Admin: Protected &quot;Cass Lake Leech Lake Outreach and Engagement Leader&quot;: Job description ([edit=sysop] (indefinite) [move=sysop] (indefinite))</p> <hr /> <div>Back to [[Inclusion]], [[Work]], [ Cass Lake Leech Lake Forum]<br /> <br /> <br /> '''Join E-Democracy's Outreach Team!'''<br /> <br /> builds online public space in the heart of real democracy and community. Our mission is to harness the power of online tools to support participation in public life, strengthen communities, and build democracy.<br /> <br /> We have a special 150 hour position to improve Forum Engagement on the [ Cass Lake Leech Lake Community Forum]. The part-time contract work may be spread over 3 to 6 months. It builds on the recent work of Sally Fineday who took a new full-time position with the Leech Lake Band of Ojibwe as well as volunteer Forum Manager Amanda Burnette.<br /> <br /> '''Location:''' Cass Lake, Leech Lake Area<br /> <br /> '''Description:''' The proposed duties.<br /> <br /> '''Forum Engagement'''<br /> * Generate community information sharing - Plan and lead outreach to organizations and community groups to post community announcements, news links, and other content (initially forward announcements to the forum but then teach organizational members how to post direct).<br /> * Promote community dialogue - Identify and promote intentional online discussion topics to promote digital storytelling about community life experiences and happenings across the community.<br /> ** Intentional content seeding. Post twice weekly to the forum.<br /> ** Collect and post images and video from outreach activities to the Forum.<br /> ** Post a monthly update on the forum purpose and how posting can solve problems and/or create new relationships for work and recreation.<br /> ** Post a monthly update to the forum on membership growth and outreach activity.<br /> * Volunteer recruitment - Identify and recruit forum members to fulfill volunteer roles, volunteer position descriptions to be provided. Provide direction and oversee volunteers, as needed.<br /> * Organize at least one interactive social media training/community meeting targeting 20-30 attendees. <br /> <br /> '''Forum Recruitment'''<br /> * Accurately explain the nature of our community life online forums and encourage those who sign up to post to the forums.<br /> * Conduct face-to-face, phone and email recruitment, including process follow-up requests.<br /> * Present at community meetings, distribute flyers, and table at community events targeting outlying communities of the Leech Lake Band of Ojibwe at least once monthly.<br /> <br /> '''Project Evaluation'''<br /> * Develop short written narratives describing project experiences (300-600 words) quarterly.<br /> * Participate in project evaluation, as requested.<br /> <br /> <br /> '''Time Commitment:''' 150 hours from November 2012 for three to six months. Contractors must be flexible, reliable, and able to work on a flexible schedule.<br /> <br /> '''Rate:''' $15/hour. As an independent contractor, you are responsible for all of your own Federal, State, Social Security taxes, and any insurance you choose to carry. Actual gas expenses for required travel may be reimbursed.<br /> <br /> '''Requirements:'''<br /> <br /> * Passionate and enthusiastic; positive outlook and willing to lead. Inspires other contractors and volunteers to do high-quality organizing and outreach work.<br /> * Proven ability to work as part of a team. Willing to pitch in to help others with day-to-day project tasks (event logistics, preparing/delivering materials, record-keeping, data entry, etc.)<br /> * Excellent personal accountability and follow through. Can meet deadlines and manage multiple tasks in a fast-paced work environment; highly flexible and able to handle high- stress situations. Highly self motivated, self directed, and organized.<br /> * Effective communicator. Values and fosters open communication; uses and understands the importance of active listening skills, and is an effective public speaker with above-average English-language writing skills.<br /> * Detail oriented and respectfully work with volunteers.<br /> * Willing to learn and values self-improvement. Able to accept and offer praise and critical feedback; seeks and offers feedback and evaluation.<br /> * Reliably and consistently available via email and mobile phone.<br /> * Must have reliable transportation, including ability to haul materials for events and activities.<br /> <br /> '''Desired Qualifications and Experience:'''<br /> <br /> We are looking for exceptional people who may have talents in the following:<br /> <br /> *Experience or training in leadership development, multicultural outreach and communications, political science, online civic engagement, digital technologies or other related fields.<br /> * Field outreach or organizing in diverse communities (tabling, doorknocking, etc.). <br /> * Deep connections to the targeted communities, including involvement in neighborhood/ community organizations.<br /> * Proficiency with Google Apps, social media, and digital video devices preferred.<br /> <br /> <br /> '''How to apply:''' Send a statement of interest describing your qualifications and resume with three references to This position will be filled when the person with the right skills, community connections, and time availability is found.<br /> <br /> Use the subject line: CLLL Community Outreach Leader Application. Include any questions in your email. No calls please. For more information, about, please visit:, and click on “About”.</div> Admin