<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/wordpress-mu-1.2.5" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
        xmlns:opencore="http://www.openplans.org/opencore"
	>

<channel>
	<title>OpenCore Software</title>
	<link>http://www.openplans.org/projects/opencore/blog</link>
	<description>Just another  weblog</description>
	<pubDate>Fri, 27 Jun 2008 23:18:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=wordpress-mu-1.2.5</generator>
	<language>en</language>
			<item>
		<title>Hi, I&#8217;m the Opencore Release Manager</title>
		<link>http://www.openplans.org/projects/opencore/blog/2008/06/27/hi-im-the-opencore-release-manager/</link>
		<comments>http://www.openplans.org/projects/opencore/blog/2008/06/27/hi-im-the-opencore-release-manager/#comments</comments>
        	<slash:comments>4</slash:comments> 
		<pubDate>Fri, 27 Jun 2008 23:18:36 +0000</pubDate>
		<dc:creator>slinkp</dc:creator>
                <opencore:userid>slinkp</opencore:userid>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.openplans.org/projects/opencore/blog/2008/06/27/hi-im-the-opencore-release-manager/</guid>
		<description><![CDATA[I&#8217;m going to be playing Opencore Release Manager, starting now. Let me explain what that means, and relay some plans.
Scope

I&#8217;m just talking about opencore, the Plone extension at the heart of the openplans software stack.

I&#8217;m not talking about any other part of the openplans software stack (tasktracker, wordpress, deliverance, &#8230;)

I&#8217;m definitely not talking about openplans.org [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to be playing Opencore Release Manager, starting now. Let me explain what that means, and relay some plans.</p>
<h2>Scope<br />
</h2>
<p>I&#8217;m just talking about opencore, the Plone extension at the heart of the openplans software stack.
</p>
<p>I&#8217;m not talking about any other part of the openplans software stack (tasktracker, wordpress, deliverance, &#8230;)
</p>
<p>I&#8217;m definitely not talking about openplans.org the website.</p>
<h2>Opencore needs a release manager?<br />
</h2>
<p>Opencore was originally created by TOPP for www.openplans.org. So opencore releases have historically been driven by the needs of www.openplans.org&#8217;s deployment schedule. Since our deployment process doesn&#8217;t require a formal opencore release, releases tend to be a rare afterthought.</p>
<p>But there are at least two things that more formal releases would help with:</p>
<ol>
<li>Lower the barrier for other community members to get started using opencore.</li>
<li>Let the world know about what we&#8217;re doing.<br />
   </li>
</ol>
<p>My overarching goal is to promote a lively community of developers and users for opencore, and provide some balance to TOPP&#8217;s path of least resistance&#8211;to only worry about our own deployments.</p>
<h2>Why me?<br />
</h2>
<p>Ethan asked me to do it and I was happy to volunteer. (If you don&#8217;t know who Ethan is either, this picture should suffice: http://www.openplans.org/people/ejucovy )</p>
<h2>Who?<br />
</h2>
<p>I&#8217;m Paul Winkler, a Zope user and developer since 1999, a TOPP employee since October 2007, and Opencore&#8217;s release manager since right now. http://www.openplans.org/people/slinkp</p>
<h2>What will determine the release schedule?<br />
</h2>
<p>I want to decouple Opencore&#8217;s release cycle from the TOPP deployment cycle. Douglas Mayle has volunteered to act as the openplans.org deployment manager; he and I have tentatively agreed on this plan:<br />
</p>
<ul>
<li>Opencore releases will be on a time-based schedule, TBD.</li>
<li>Features that aren&#8217;t ready in time for a release can just wait until the next release.
<p>Rationale: Feature-driven releases inevitably get delayed and delayed, and the features don&#8217;t get done any faster.</li>
<li> Openplans.org deployments will be on an independent time-based schedule. (I believe the plan is to deploy weekly.)</li>
<li>&#8220;Must-have&#8221; openplans.org features and fixes can be deployed independently of the opencore release cycle by putting them in a new package that layers on top of opencore.</li>
<li>Openplans-specific code and text (like the current copyright notice) will be gradually moved out into this new package.</li>
<li>The aforementioned openplans.org customization package does not exist yet; we need to create one ASAP.<br />
   </li>
</ul>
<p>Of course TOPP&#8217;s own needs will continue to drive a lot of opencore development, which is a good thing; but that shouldn&#8217;t be a burden on you, the wider opencore user/developer community.</p>
<h2>Does the Release Manager have to be a TOPP employee?<br />
</h2>
<p>No. I&#8217;m just the first. It should be a rotating job. It&#8217;s my hope that before long, people outside TOPP will be willing and able to play this role.</p>
<h2>When will the job rotate?<br />
</h2>
<p>Don&#8217;t know yet.</p>
<h2>What does the Opencore Release Manager do?<br />
</h2>
<p></p>
<ul>
<li>Manage the release schedule (not TOPP&#8217;s deployment schedule!). This does not mean I&#8217;m the dictator, just the point man and coordinator.</li>
<li>Shepherd release candidates through a stabilization process.</li>
<li>Create and announce final release packages.</li>
<li>Document upgrade process.</li>
<li>Document any backward incompatibilities.</li>
<li>Draft and enforce relevant dev process standards (e.g. which branches or plugins should you commit bugfixes or features to).</li>
<li>Document this process for the next release manager.</li>
</ul>
<p>At this stage, I&#8217;ll also be acting as a sort of ambassador between TOPP and the wider community. Which is a bit silly, as every opencore contributor does that to whatever extent they wish. But I think for now it&#8217;s useful to consciously formalize it as part of my job. I will make an effort to:<br />
</p>
<ul>
<li>Solicit community input about decisions we need to make for opencore.</li>
<li>Remind TOPP employees to discuss and make decisions about opencore out in the open. If you have a real-life relevant conversation I&#8217;ll try to remind you to post a summary to the mailing list.</li>
<li>Keep the community updated on changes to our build process. If we break your builds, you can complain to the opencore-user or opencore-dev mailing list, and you should expect a response from me.</li>
<li>Lobbyist for the community: e.g. prioritizing and scheduling feature requests and bugfixes.</li>
</ul>
<p>There will of course be other forces at TOPP driving things with other priorities, but *my* role will be to ensure that the community&#8217;s needs don&#8217;t get ignored. This is more about release management than development management: I&#8217;m not in charge of deciding which features get done when. But whenever good code comes from the community, we have a responsibility to get that code released in a timely manner, and generally be as responsive as we can.</p>
<p></p>
<h2>What about the rest of the stack?<br />
</h2>
<p>We realize that most of the non-TOPP users of opencore are using some or all of the entire www.openplans.org stack. We&#8217;d eventually like to be making formal releases of all the packages, and possibly some kind of &#8220;batteries included&#8221; big meta-package; but that&#8217;s in the future. For now, opencore is our fastest-moving target and the most in need of release management.</p>
<h2>Release Numbers<br />
</h2>
<p>We supposedly have a policy now (Ethan proposed it here: http://tinyurl.com/4ybpro) &#8230; but we haven&#8217;t been sticking with it. I&#8217;m going to draft a proposal for a simpler convention and process. More on this in a later message.</p>
<h2>Releases, Eggs, and Builds<br />
</h2>
<p>I&#8217;d like to be releasing versioned eggs of opencore to PyPi. These should be installable into a suitable Zope/Plone instance using nothing more than easy-install.</p>
<p>(We have made a few releases to PyPi, but they aren&#8217;t actually usable &#8230; some files are missing.)</p>
<p>For bootstrapping a full stack including Zope, Plone, and other non-egg stuff, TOPP will continue to use and develop our Fassembler build tools. But it should become easier to do without that, if you want.</p>
<h2>Branch Policy<br />
  <br />
</h2>
<p>
  <br />We are currently trying to follow a &#8220;Stable Trunk&#8221; practice. Experimental and risky code should not be on the trunk.<br />
  
</p>
<h2>Developer Infrastructure<br />
</h2>
<p>
  <br />This is only tangentially related to release management. I just wanted to note in passing that we&#8217;re planning a more thought-out integrated home on the web for opencore development. We&#8217;re calling this the &#8220;TOPP Dev Center&#8221; for now. Other open-source packages from TOPP will live there too.</p>
<p>In the meantime:</p>
<p>Wiki and mailing lists are at: http://www.openplans.org/projects/opencore</p>
<p>Trac (bug tracking) is at: http://trac.openplans.org/openplans</p>
<p>If you need a Trac account, just ask. (I wish we could take anonymous bug reports, but we got trac spam.)</p>
<p>If you want SVN commit access, first you should send some bugfixes and features as patches (either in trac or on the dev list). We&#8217;ll happily give commit access to people who have a history of submitting good patches. There will be a contributor agreement you&#8217;ll have to sign, somewhat similar to Zope&#8217;s.</p>
<h2>Current Road Map<br />
</h2>
<p>
  <br />Some things coming up in the short term:</p>
<ul>
<li>Plone 3
<p>We will soon be releasing a version of opencore that runs on Plone 3. Rob Miller has done all the hard work and we just need to QA this branch and merge it back to the trunk.</p>
<p>Currently, the plan is for TOPP to create a release candidate from this branch, QA it, and deploy it to www.openplans.org. When that goes well, I will:<br />
  </p>
<ol>
<li>Branch off the current opencore trunk to an opencore-plone2.5 branch</li>
<li>Make a final stable release from the opencore-plone2.5 branch (to be followed by bugfix releases as necessary)&nbsp;</li>
<li>Merge the plone 3 branch back to the trunk.&nbsp;</li>
</ol>
<p>This will definitely happen this summer; more concrete dates will be forthcoming.&nbsp;</p>
<p>If people in the community expect to continue using the Plone 2.5 version for a while, I would like to hear about it so I can serve you better.
  </p>
</li>
<li>Easier &#8220;plugin&#8221; management using zc.autoinclude. This will replace our usage of zcmlloader, doing the same job but better (and other people are actively developing it).<br />
  </li>
</ul>
<p>
  <br />Some ongoing maintenance tasks I&#8217;d love community help with:<br />
  
</p>
<ul>
<li>Opencore is slow. Let&#8217;s make things faster. (But let&#8217;s get plone 3 merged to trunk first, it already helps substantially.) </li>
<li>The test suite has a lot of problems. More on this in a later message. </li>
<li>Dependency cleanup. I suspect there is cruft in the Products &#8220;bundle&#8221; that we don&#8217;t actually use. </li>
<li>What do you guys want? </li>
</ul>
<p>
  <br />Going forward, this road map should have a permanent home prominently linked in the aformentioned dev center. There is already such a page at http://www.openplans.org/projects/opencore/planning but it badly needs an update. I&#8217;ll be looking to revive that.</p>
<h2>Questions?<br />
</h2>
</p>
<p>
  <br />Whew. Sorry for the length. Feedback would be most welcome.</p>
<p>- PW</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openplans.org/projects/opencore/blog/2008/06/27/hi-im-the-opencore-release-manager/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Our Build Process</title>
		<link>http://www.openplans.org/projects/opencore/blog/2008/06/19/our-build-process/</link>
		<comments>http://www.openplans.org/projects/opencore/blog/2008/06/19/our-build-process/#comments</comments>
        	<slash:comments>2</slash:comments> 
		<pubDate>Fri, 20 Jun 2008 04:50:25 +0000</pubDate>
		<dc:creator>ianb</dc:creator>
                <opencore:userid>ianb</opencore:userid>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.openplans.org/projects/opencore/blog/2008/06/19/our-build-process/</guid>
		<description><![CDATA[ Rob Miller has been thinking about zc.buildout lately, and providing a buildout-based bootstrap for our stack (even if it only calls out immediately to fassembler).&#160; This got me to thinking, and I finished a reflection post about fassembler.

At the end I almost talked myself into refactoring stuff to make the good parts of fassembler [...]]]></description>
			<content:encoded><![CDATA[<p> Rob Miller has been thinking about zc.buildout lately, and providing a buildout-based bootstrap for our stack (even if it only calls out immediately to fassembler).&nbsp; This got me to thinking, and I finished a <a href="http://blog.ianbicking.org/2008/06/19/my-experience-writing-a-build-system/">reflection post</a> about fassembler.
</p>
<p>At the end I almost talked myself into refactoring stuff to make the good parts of fassembler usable in zc.buildout, so that we could move over to that in the future if we want to.&nbsp; Then&#8230; right at the end&#8230; pow!&nbsp; Files!&nbsp; All files, only files!
</p>
<p>What if our build process just built files?&nbsp; Relocatable files.&nbsp; Not-system-dependent files.&nbsp; You could tar the whole thing up, copy it to another location or server, unpack it, and get the exact same site.&nbsp; That tarball would basically be equivalent to the build itself.
</p>
<p>It&#8217;s not that App Engine seems particularly awesome.&nbsp; More that it seems like it might be Just The Right Kind Of Dumb.&nbsp; It&#8217;s that this makes it so easy to think about the build, about what it does, about stuff like the workflow for testing and deployment and rolling back.&nbsp; Easy to explain to other people, easy to audit, easy to debug.
</p>
<p>The problem of course is that it requires pushback into other products.&nbsp; Lots of other products.&nbsp; But we can do that.
</p>
<p>Thoughts?<br />
  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.openplans.org/projects/opencore/blog/2008/06/19/our-build-process/feed/</wfw:commentRss>
		</item>
		<item>
		<title>GrassyKnoll: a pluggable search engine in Python</title>
		<link>http://www.openplans.org/projects/opencore/blog/2008/06/19/grassyknoll-a-pluggable-search-engine-in-python/</link>
		<comments>http://www.openplans.org/projects/opencore/blog/2008/06/19/grassyknoll-a-pluggable-search-engine-in-python/#comments</comments>
        	<slash:comments>0</slash:comments> 
		<pubDate>Thu, 19 Jun 2008 23:16:07 +0000</pubDate>
		<dc:creator>slinkp</dc:creator>
                <opencore:userid>slinkp</opencore:userid>
		
		<category><![CDATA[development]]></category>

		<category><![CDATA[Open source]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.openplans.org/projects/opencore/blog/2008/06/19/grassyknoll-a-pluggable-search-engine-in-python/</guid>
		<description><![CDATA[ This past Tuesday I attended the NYC Python User&#8217;s Group meeting at the offices of DayLife.

The presentation this week was by Peter Fein about GrassyKnoll, a text search engine written in Python.

From TOPP&#8217;s point of view there are several interesting things about it:


It could provide us with a sitewide search solution for openplans.org and [...]]]></description>
			<content:encoded><![CDATA[<p> This past Tuesday I attended the <a href="http://nycpython.org/">NYC Python User&#8217;s Group</a> meeting at the offices of <a href="http://www.daylife.com/">DayLife</a>.
</p>
<p>The <a href="http://code.google.com/p/grassyknoll/wiki/Presentations">presentation </a>this week was by Peter Fein about <a href="http://code.google.com/p/grassyknoll/">GrassyKnoll</a>, a text search engine written in Python.
</p>
<p>From TOPP&#8217;s point of view there are several interesting things about it:
</p>
<ul>
<li>It could provide us with a sitewide search solution for openplans.org and livablestreets.com.<br />
   </li>
<li>It can use any of a number of pluggable back ends (notably PyLucene).<br />
   </li>
<li>You interact with it entirely via a simple REST API.<br />
   </li>
<li>A GrassyKnoll client can also trivially be a GrassyKnoll server. (Peter gave a live demo of this.) In theory this could allow for fun things like smart clustering, where one server gets your query and dispatches queries to N other servers, and then merges the results appropriately. The end client still sees the same simple rest API.</li>
<li>It&#8217;s written entirely in Python and is Free.</li>
<li>They&#8217;re looking for more people to help out and would love for us to get involved. </li>
</ul>
<p>The major down side is that they&#8217;re still some months away from a production-ready release. (There were a few glitches in the live demo.) When I pressed him about this, Peter said &#8220;definitely by the end of the year.&#8221; I got the impression that more hands helping would speed that up.<br />
  
</p>
<p>Also, it doesn&#8217;t define any kind of common query language; it just passes them along to the back end. So you do have to know what you&#8217;re really talking to.<br />
  
</p>
</p>
<p> Peter said he was hopefully coming to the next NYCPUG meeting that we&#8217;re hosting here at TOPP on July 15.
</p>
<p>
  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.openplans.org/projects/opencore/blog/2008/06/19/grassyknoll-a-pluggable-search-engine-in-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>XML and ZPT</title>
		<link>http://www.openplans.org/projects/opencore/blog/2008/06/03/xml-and-zpt/</link>
		<comments>http://www.openplans.org/projects/opencore/blog/2008/06/03/xml-and-zpt/#comments</comments>
        	<slash:comments>3</slash:comments> 
		<pubDate>Tue, 03 Jun 2008 21:41:16 +0000</pubDate>
		<dc:creator>slinkp</dc:creator>
                <opencore:userid>slinkp</opencore:userid>
		
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.openplans.org/projects/opencore/blog/2008/06/03/xml-and-zpt/</guid>
		<description><![CDATA[
   So, Zope&#8217;s handling of XML page templates is kind of broken.

As a result, all of opencore&#8217;s page templates are parsed in ZPT&#8217;s &#8220;html mode&#8221;. This makes for some surprising validation behavior (e.g. unclosed tags is not an error, but putting content in a &#8220;link&#8221; tag is an error&#8230; which sucks if you [...]]]></description>
			<content:encoded><![CDATA[<p>
  <br /> So, Zope&#8217;s handling of XML page templates is <a href="http://wiki.zope.org/zope3/BetterXMLSupportForPageTemplates">kind of broken</a>.
</p>
<p>As a result, all of opencore&#8217;s page templates are parsed in ZPT&#8217;s &#8220;html mode&#8221;. This makes for some surprising validation behavior (e.g. unclosed tags is not an error, but putting content in a &#8220;link&#8221; tag is an error&#8230; which sucks if you happen to be trying to generate georss and not HTML &#8230;)<br />
  
</p>
<p>I ended up not even using ZPT for my georss feed, but for posterity, there are at least two possible workarounds:
</p>
<p>1. Put an xml declaration at the top of your template (this makes the parser to use XML mode). If&nbsp; your template is only for a snippet and not for a whole document, you don&#8217;t want the declaration showing up in the middle of the final document. To avoid that, use METAL macros.&nbsp; It&#8217;s a bit tricky to do this from python, so we have a handy render_tal function in <a href="http://opencore.browser.tal">opencore.browser.tal</a>.&nbsp; And you&#8217;ll need to manually encode to your output encoding if you want to use this with response.write().&nbsp; An example of this that I later reverted can be seen <a href="http://trac.openplans.org/openplans/changeset/17702">here.</a><br />
  
</p>
<p>2. You could, if you don&#8217;t want to use macros and can&#8217;t have the xml declaration in your output, instead subclass Five&#8217;s ZopeTwoPageTemplateFile like so to force the TAL parser to use the right mode. (Thi sis also in the example linked above.)
</p>
<p></p>
<pre> class XmlPageTemplateFile(ZopeTwoPageTemplateFile):

    """This class exists because the process whereby PageTemplateFile
    decides whether to use HTML or XML mode for parsing and validation
    is completely stupid.
    """

    content_type = 'text/xml'

    def _cook_check(self):
        # In PageTemplateFile, this gets called potentially multiple
        # times (if you're in dev mode), sniffs the file's content,
        # and if it doesn't start with an XML declaration, uses HTML
        # mode.  We don't want that.  So here, we duplicate the same
        # code without the sniffing.
        if self._v_last_read and not DevelopmentMode:
            return
        __traceback_info__ = self.filename
        try:
            mtime = os.path.getmtime(self.filename)
        except OSError:
            mtime = 0
        if self._v_program is not None and mtime == self._v_last_read:
            return
        t = self.content_type  # Take my word for it, dammit!
        f = open(self.filename, "rb")
        if t != "text/xml":
            # For HTML, we really want the file read in text mode:
            f.close()
            f = open(self.filename, 'U')
            text = ''
        text = f.read()
        f.close()
        self.pt_edit(text, t)
        self._cook()
        if self._v_errors:
            logger.error('Error in template: %s' % 'n'.join(self._v_errors))
            return
        self._v_last_read = mtime
</pre>
<p>For my georss feed, I ended up deciding this was all too much bother and I just went back to using Python string interpolation. There just wasn&#8217;t enough to the &#8220;template&#8221; to justify the pain of getting TAL to work properly under these constraints.<br />
  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.openplans.org/projects/opencore/blog/2008/06/03/xml-and-zpt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Graphing memory vs. access log</title>
		<link>http://www.openplans.org/projects/opencore/blog/2008/05/30/graphing-memory-vs-access-log/</link>
		<comments>http://www.openplans.org/projects/opencore/blog/2008/05/30/graphing-memory-vs-access-log/#comments</comments>
        	<slash:comments>0</slash:comments> 
		<pubDate>Fri, 30 May 2008 17:45:15 +0000</pubDate>
		<dc:creator>slinkp</dc:creator>
                <opencore:userid>slinkp</opencore:userid>
		
		<category><![CDATA[OpenCore]]></category>

		<category><![CDATA[testing]]></category>

		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.openplans.org/projects/opencore/blog/2008/05/30/graphing-memory-vs-access-log/</guid>
		<description><![CDATA[This showed up on my radar today. It&#8217;s a cute little hack, if a bit rough. (I&#8217;ve already posted a couple patches).
  

&#160;

It could easily be generalized, there&#8217;s nothing really zope-specific about it, all it really cares about is a path to a common-apache-format access log and the PID of a process to watch [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/zope-memory-readings/">This </a>showed up on my radar today. It&#8217;s a cute little hack, if a bit rough. (I&#8217;ve already <a href="http://code.google.com/p/zope-memory-readings/issues/list">posted a couple patches</a>).<br />
  
</p>
<p>&nbsp;
</p>
<p>It could easily be generalized, there&#8217;s nothing really zope-specific about it, all it really cares about is a path to a common-apache-format access log and the PID of a process to watch memory. The result is a nice little Flot graph where you can select a range and see what URLs were hit during that time.
</p>
<p>Here&#8217;s a screenshot of an example from a flunc run against opencore (the &#8220;basic&#8221; suite):
</p>
<p><img alt="zopemem.png" src="/projects/opencore/project-home/zopemem.png" /><br />
  
</p>
<p>
  <br />So what does this tell us really? I&#8217;m not sure. Multiple runs show that the graph generally starts around 400 MB and ends around 500 MB, but what happens between does not seem consistent. So I&#8217;m not sure if this little app is really that useful for opencore.<br />
  
</p>
<p>
  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.openplans.org/projects/opencore/blog/2008/05/30/graphing-memory-vs-access-log/feed/</wfw:commentRss>
		</item>
		<item>
		<title>NetSquared debrief</title>
		<link>http://www.openplans.org/projects/opencore/blog/2008/05/30/netsquared-debrief/</link>
		<comments>http://www.openplans.org/projects/opencore/blog/2008/05/30/netsquared-debrief/#comments</comments>
        	<slash:comments>1</slash:comments> 
		<pubDate>Fri, 30 May 2008 06:28:31 +0000</pubDate>
		<dc:creator>ra</dc:creator>
                <opencore:userid>ra</opencore:userid>
		
		<category><![CDATA[TOPP]]></category>

		<guid isPermaLink="false">http://www.openplans.org/projects/opencore/blog/2008/05/30/netsquared-debrief/</guid>
		<description><![CDATA[I spent the last two days at the Cisco facility in San Jose, attending the third NetSquared conference. NetSquared is a conference that focuses on the intersection of activism and technology. It brings together people from NGOs, foundations, and technology providers to foster conversation, collaboration, fund-raising, and just to generally get folks connected and excited [...]]]></description>
			<content:encoded><![CDATA[<p>I spent the last two days at the Cisco facility in San Jose, attending the third <a href="http://www.netsquared.org/">NetSquared</a> <a href="http://www.netsquared.org/conference">conference</a>. NetSquared is a conference that focuses on the intersection of activism and technology. It brings together people from NGOs, foundations, and technology providers to foster conversation, collaboration, fund-raising, and just to generally get folks connected and excited about the interesting ways that the net is being used to enable social change.</p>
<p>There were a number of talks, panels, and conversations, but the central focus of the event was a contest between 21 <a href="http://www.netsquared.org/2008/conference/projects/n2y3_featured_projects">featured projects</a>. Early on the first day, each of these projects was given 2 minutes to describe themselves; this was immediately followed by an hour-long session where attendees could walk around and chat w/ project members to learn more. Near the end of the last day, they were all given another 2 minutes to make their closing pitch, after which attendees were able to vote for which projects they felt were most deserving. Each person was given 3 votes, which could be distributed as desired (i.e. all for one project or spread among 2 or 3). the top three vote winners received $25000, $15000, and $10000, respectively; the rest split equally the remaining available grant money, which rumor had it came to about $2000 per.<br />
  
</p>
<p>It was a lot fun and inspiring to see what good work people are doing in the world. The coolest thing I saw was by <a href="http://www.ushahidi.com/">Ushahidi</a>, the winner of the $25000 prize. They&#8217;ve been mapping outbreaks of violence and peace as a reporting and research tool during Kenya&#8217;s post-election tumult. They&#8217;ve got a great <a href="http://www.ushahidi.com/timeline.asp">timeline map</a>, with which you can get a great visual representation of the way events developed through time. The <a href="http://simile.mit.edu/timeline/">timeline component</a> is something out of MIT&#8217;s <a href="http://simile.mit.edu/">SIMILE</a> project, and thus is free for us to use. This could be very useful for TOPP; it&#8217;d be a great way to present the summer&#8217;s worth of block parties, for instance. And it&#8217;d be fun to add geocoded event support to OpenPlans; users who are producing events (sprints, protests, fundraisers, whatever) would be able to enter the time and location, and their event would show up on a regional timeline map. Other folks in that region would get a great visual overview of what was going on around them.
</p>
<p>Beyond just generally learning what was out there, the time spent talking to people and listening to talks left me with a few specific takeaways:
</p>
<ol>
<li> <strong>Mapping is the new black</strong><br />
  <br />Nearly everybody is doing mapping related work. Maybe this was a bit slanted, because &#8220;Mash-ups&#8221; was one of the themes of the conference and, frankly, I can&#8217;t think of a compelling mash-up I&#8217;ve seen that <em>wasn&#8217;t</em> mapping-related. But I think it&#8217;s more than that; mapping is very useful, and people are putting mapping tools to good use in all sorts of ways.</li>
<p></p>
<li> <strong>TOPP&#8217;s Geo group is in a great position<br />
  <br /></strong>While there are a lot of people doing mapping work out there, TOPP has been doing geo stuff for longer than just about anybody I&#8217;ve seen in the open source-y non-profit world. And the depth of the work TOPP has done is impressive; we haven&#8217;t just used existing tools in clever ways, we&#8217;ve been one of the driving forces behind the very existence of a high-powered open source end-to-end GIS system. I spoke to a couple of folks who had been in consideration for larger geo-related contracts w/ gov&#8217;t and NGO organizations where the had really wanted to use the open source offering, but had balked in the end from fear of becoming dependent on a one- or two-person consultant team. With TOPP&#8217;s depth of experience and resources (human and otherwise), we&#8217;ll be able to make such organizations feel much more comfortable. This has been the plan all along, but it&#8217;s really exciting to talk to people who are out there in the middle of it confirming that the opportunities really are there, and that we&#8217;re in a great place to be able to take advantage of them.</p>
</li>
<li> <strong>TOPP itself is in a great position<br />
  <br /></strong>Most of the people who are pouring their lives into using technology for good causes are constantly hustling for funding. Either they&#8217;re freelancing and are trying to land their next contract (even as they&#8217;re working on their current one), or they&#8217;re a non-profit that&#8217;s constantly pounding the pavement for grants and other funding. TOPP is very unusual, and very lucky, in that we&#8217;re given the opportunity to develop our offerings without a lot of pressure to monetize them; only after we&#8217;ve established a reputation and developed demonstrable strengths do we start to focus those strengths towards generating a revenue stream. This seems to be working fabulously for the Geo group (see above); I see no reason why it won&#8217;t work similarly for OpenPlans, and other projects that we develop, as long as we continue to produce working, usable software.</p>
</li>
</ol>
<p>I managed to talk to a lot of folks throughout the event, folks were generally very interested in what we&#8217;re doing. I had a number of occasions where someone would approach me and introduce themselves, saying &#8220;Hi! So-and-so said I should come over and talk to you, that I&#8217;d be very interested in what you&#8217;re doing. What are you doing?&#8221; While it was hard to keep describing our organization and our efforts over and over again without sounding lame and canned, that&#8217;s a pretty good problem to have. A couple of the connections I made may end up bearing some fruit down the road. In particular, I&#8217;d guess that our Geo folks would be interested in talking to the folks who find out about but do not end up getting those bigger contracts I was mentioning above, so we can decide whether we might be interested in trying to land those jobs. Also, there were a couple of nice mapping front end tools that would probably add value to our greater GIS offerings, if we made sure those tools work with our stack.
</p>
<p>All in all I think it was valuable for me to be there. And I think that we should have a slightly bigger presence next year, including giving a presentation of our own. I&#8217;m sure they&#8217;d be happy to have us.<br />
  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.openplans.org/projects/opencore/blog/2008/05/30/netsquared-debrief/feed/</wfw:commentRss>
		</item>
		<item>
		<title>openplans.org permissions</title>
		<link>http://www.openplans.org/projects/opencore/blog/2008/05/22/openplansorg-permissions/</link>
		<comments>http://www.openplans.org/projects/opencore/blog/2008/05/22/openplansorg-permissions/#comments</comments>
        	<slash:comments>0</slash:comments> 
		<pubDate>Thu, 22 May 2008 21:35:24 +0000</pubDate>
		<dc:creator>k0s</dc:creator>
                <opencore:userid>k0s</opencore:userid>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.openplans.org/projects/opencore/blog/2008/05/22/openplansorg-permissions/</guid>
		<description><![CDATA[ I&#8217;ve stated before one thing I like about openplans is the &#8220;simple&#8221; permission simple.&#160; I use the quotes because there are several caveats, one of which I&#8217;ll address here.&#160; For a particular project, the permission system is essentially a 3&#215;4 table:





agent\project type
     
Open
     
Medium
   [...]]]></description>
			<content:encoded><![CDATA[<p> I&#8217;ve stated before one thing I like about openplans is the &#8220;simple&#8221; permission simple.&nbsp; I use the quotes because there are several caveats, one of which I&#8217;ll address here.&nbsp; For a particular project, the permission system is essentially a 3&#215;4 table:
</p>
</p>
<table border="1" cellpadding="1" cellspacing="1">
<tbody>
<tr>
<td>agent\project type<br />
     </td>
<td>Open<br />
     </td>
<td>Medium<br />
     </td>
<td>Closed<br />
     </td>
</tr>
<tr>
<td>&nbsp;anonymous</td>
<td>&nbsp;view</td>
<td>&nbsp;view</td>
<td>&nbsp;X</td>
</tr>
<tr>
<td>&nbsp;site member<br />
     </td>
<td>&nbsp;edit</td>
<td>&nbsp;view</td>
<td>&nbsp;X</td>
</tr>
<tr>
<td>&nbsp;project member<br />
     </td>
<td>&nbsp;edit</td>
<td>&nbsp;edit</td>
<td>&nbsp;edit</td>
</tr>
<tr>
<td>&nbsp;project admin<br />
     </td>
<td>&nbsp;manage</td>
<td>&nbsp;manage</td>
<td>&nbsp;manage</td>
</tr>
</tbody>
</table>
<p>&nbsp; This is pretty simple and intuitive I think.&nbsp; We also have a status of being listed on a project.&nbsp; That is, can people see you&#8217;re part of the team.&nbsp; If you&#8217;re a whistleblower at exxon, you might not want your company to see that you&#8217;re part of the ExxonIsSatan project, for instance.&nbsp; For a particular project, other members can see information about your affiliation according to the following rubrik:
</p>
<p><table border="1" cellpadding="1" cellspacing="1">
<tbody>
<tr>
<td>&nbsp;</td>
<td>&nbsp;Listed</td>
<td>&nbsp;Not Listed<br />
      </td>
</tr>
<tr>
<td>&nbsp;anonymous</td>
<td>&nbsp;view</td>
<td>&nbsp;X</td>
</tr>
<tr>
<td>&nbsp;site member<br />
      </td>
<td>&nbsp;view</td>
<td>&nbsp;X</td>
</tr>
<tr>
<td>&nbsp;project member<br />
      </td>
<td>&nbsp;view</td>
<td>&nbsp;view</td>
</tr>
<tr>
<td>&nbsp;project admin<br />
      </td>
<td>&nbsp;view</td>
<td>&nbsp;view</td>
</tr>
</tbody>
</table>
<p><p>&nbsp;I&#8217;m being intentionally over-verbose here for illustration.&nbsp; If user A wants to see information concerning member B about his affiliation with project C, how does this work?
    </p>
<p>- can user A view project C?
    </p>
<p>- can user A view member B&#8217;s affiliation with project C?
    </p>
<p>So its a cascaded permission system, if you will (or something like that, anyway).&nbsp; My main reason for posting this is to put this in programmatic terms and to see what others thought about this. We&#8217;re not really taking advantage of as much as we can here, and I&#8217;m tempted to say that intelligent use of roles could make this all happen behind the curtain, which would be my preference.&nbsp; Also, why not have a reference on line?
    </p>
<p>&nbsp;[Disclaimer:&nbsp; no exxon executives, stakeholders, or stock prices were harmed either financially or materially in the writing of this post]<br />
      
    </p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.openplans.org/projects/opencore/blog/2008/05/22/openplansorg-permissions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Licensing</title>
		<link>http://www.openplans.org/projects/opencore/blog/2008/05/06/licensing/</link>
		<comments>http://www.openplans.org/projects/opencore/blog/2008/05/06/licensing/#comments</comments>
        	<slash:comments>6</slash:comments> 
		<pubDate>Tue, 06 May 2008 16:48:38 +0000</pubDate>
		<dc:creator>ianb</dc:creator>
                <opencore:userid>ianb</opencore:userid>
		
		<category><![CDATA[Open source]]></category>

		<guid isPermaLink="false">http://www.openplans.org/projects/opencore/blog/2008/05/06/licensing/</guid>
		<description><![CDATA[ I would like us to figure out our licensing policy.&#160; So far the policy has been:


If we&#8217;re building on some other code base, use the existing license.
If we&#8217;re building our own code, make something up.

So, sometimes people will ask about some piece of code and its licensing, and I&#8217;m forced to kind of pull [...]]]></description>
			<content:encoded><![CDATA[<p> I would like us to figure out our licensing policy.&nbsp; So far the policy has been:
</p>
<ul>
<li>If we&#8217;re building on some other code base, use the existing license.</li>
<li>If we&#8217;re building our own code, make something up.</li>
</ul>
<p>So, sometimes people will ask about some piece of code and its licensing, and I&#8217;m forced to kind of pull an answer out of thin air, obviously without a great deal of thought.&nbsp; It&#8217;s nice that we make everything open source &#8212; and honestly that&#8217;s pretty much all <em>I</em> care about &#8212; but we need to be a little more clear about what that means for other people.
</p>
<p>So: what licensing should we use?&nbsp; I wrote a <a href="http://blog.ianbicking.org/2008/05/05/choosing-a-license/">post about my own thoughts on licensing</a>.&nbsp; In summary, I think the most practical choice is a permissive license on libraries (MIT, BSD, etc), and perhaps the GPL (v3?) on applications.&nbsp; Though if applications have functionality extracted into libraries then that involves license switching &#8212; fine to do internally, but if there&#8217;s external contributions it can become complicated.
</p>
<p>Ideally, I would like as an end product a document that makes it pretty clear to someone when they start a project (of any size) what how that should be licensed.&nbsp; I&#8217;d rather it not document licensing in terms of <em>options</em>, as I honestly don&#8217;t think it&#8217;s worth the time to put a lot of thought into licensing on a per-project basis.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.openplans.org/projects/opencore/blog/2008/05/06/licensing/feed/</wfw:commentRss>
		</item>
		<item>
		<title></title>
		<link>http://www.openplans.org/projects/opencore/blog/2008/05/02/94/</link>
		<comments>http://www.openplans.org/projects/opencore/blog/2008/05/02/94/#comments</comments>
        	<slash:comments>5</slash:comments> 
		<pubDate>Fri, 02 May 2008 20:36:05 +0000</pubDate>
		<dc:creator>k0s</dc:creator>
                <opencore:userid>k0s</opencore:userid>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.openplans.org/projects/opencore/blog/2008/05/02/94/</guid>
		<description><![CDATA[ Looking at our code (that&#8217;s how it always starts) I was again bitten by that disgust for DRY code. Some of this is inevitable in a web framework, I think. Web frameworks are by their nature complex programs. Should a web framework handle authentication and permissions? Almost definitely. Should a web framework handle unicode [...]]]></description>
			<content:encoded><![CDATA[<p> Looking at our code (that&#8217;s how it always starts) I was again bitten by that disgust for DRY code. Some of this is inevitable in a web framework, I think. Web frameworks are by their nature complex programs. Should a web framework handle authentication and permissions? Almost definitely. Should a web framework handle unicode and i18n and localization issues? One would hope so.</p>
<p> Python has a bunch of these frameworks and I think this is a good thing. What I do question is how much functionality lives in the framework that could be abstracted outside of the framework.&nbsp; What is a framework but a tool kit that you want to apply to HTTP requests and responses?&nbsp; Thinking that way, issues like handling unicode, HTML escaping, authentication, etc are really library type functions.&nbsp; If Bob doesn&#8217;t like pylons but likes how they do auth, that part should be pretty libraried-out (well, there&#8217;s authkit, which is actually a good example of what I consider *bad* library code).
</p>
<p>This isn&#8217;t a magic bullet, not do I encourage programmers to prematurely make their code library-like.&nbsp; I&#8217;ve been bitten by that too.&nbsp; But once one figures out process and what one *really* wants to do, its easy to figure out the pattern, figure out which parts are actually *part* of the web framework and which parts are better *consumed* by the web framework.<br />
  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.openplans.org/projects/opencore/blog/2008/05/02/94/feed/</wfw:commentRss>
		</item>
		<item>
		<title></title>
		<link>http://www.openplans.org/projects/opencore/blog/2008/04/25/93/</link>
		<comments>http://www.openplans.org/projects/opencore/blog/2008/04/25/93/#comments</comments>
        	<slash:comments>0</slash:comments> 
		<pubDate>Sat, 26 Apr 2008 01:17:12 +0000</pubDate>
		<dc:creator>k0s</dc:creator>
                <opencore:userid>k0s</opencore:userid>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.openplans.org/projects/opencore/blog/2008/04/25/93/</guid>
		<description><![CDATA[ Robert and I spent much of the day optimizing the mailing list feed.&#160; Formerly, it was sorted by date of latest reply, with the number of replies displayed and a link to the original post and the latest reply.&#160; The idea was/is that the summary page should just give a brief overview and therefore [...]]]></description>
			<content:encoded><![CDATA[<p> Robert and I spent much of the day optimizing the mailing list feed.&nbsp; Formerly, it was sorted by date of latest reply, with the number of replies displayed and a link to the original post and the latest reply.&nbsp; The idea was/is that the summary page should just give a brief overview and therefore show all the threads separately (if two of the most recent replies are to the same original message, this is shown only once in the feed).&nbsp; Unfortunately, the way listen currently is, doing this meant getting all of the top-level threads and traversing them (only brains, but still).&nbsp; Correction of a simple oversight on my part brought the time for the opencore project down from about 110s to 30s (there are tens of thousands of messages on these lists), but this is still too slow and will cause a proxy error.
</p>
<p>&nbsp;So we took out the traversal to find the thread beginning/end and just display the 5 most recent messages regardless of thread.&nbsp; This brought things down to 5s, but now its different from the design spec of how its displayed.<br />
  
</p>
<p>&nbsp;Which got me to thinking&#8230;
</p>
<p>What I was given was a definitive but tentative plan for how the feeds would work.&nbsp; The blog feed displays the top 5 messages regardless of the most recent comments (the number of which are displayed).&nbsp; The wiki feed displays the five most recently changed/created pages (there are no &#8220;responses&#8221; to a wiki page, at least yet).&nbsp; The listen feed is speced to display the activity of the five most recent threads across all mailing lists (making it a feed aggregator as well as a feed provider).&nbsp; The team feed displays the members sorted by whether they have a portrait or not, though debate has occurred whether additionally the admins should be displayed on top, or sorting users randomly, or&#8230;<br />
  
</p>
<p>It would be nice to have the adaptation controllable with parameters.&nbsp; How the feed is sorted could be such a parameter, or maybe several parameters if sorting by multiple fields (&#8221;i want all admins on top, then members with pictures, with some randomness thrown in&#8221;).
</p>
<p>I hope we can soon figure out our feed story going forward.&nbsp; Its come a long way, but still lots left to do.<br />
  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.openplans.org/projects/opencore/blog/2008/04/25/93/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
