<?xml version="1.0" encoding="UTF-8"?>
<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:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Evolving Bits &#187; Plone</title>
	<atom:link href="http://www.evolvingbits.com/category/plone/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.evolvingbits.com</link>
	<description>Django. Python. iPhone. Plone. Physical Computing. Worker Owned Cooperatives.</description>
	<lastBuildDate>Sun, 20 Jun 2010 09:12:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Snow Leopard Smooth Except Python 32/64 Cocktail</title>
		<link>http://www.evolvingbits.com/2009/09/02/snow-leopard-smooth-except-python-3264-cocktail/</link>
		<comments>http://www.evolvingbits.com/2009/09/02/snow-leopard-smooth-except-python-3264-cocktail/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 05:11:57 +0000</pubDate>
		<dc:creator>Brian Gershon</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Plone]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Snow Leopard]]></category>
		<category><![CDATA[Zope3]]></category>

		<guid isPermaLink="false">http://www.evolvingbits.com/?p=88</guid>
		<description><![CDATA[UPDATE: Thanks to the helpful commenters, I found success getting an older Zope instance running on Python 2.4 on Snow Leopard using buildout.
NOTE: This post is for installing Python 2.4 on a brand new Snow Leopard Instance. If upgrading on top of Leopard, you may have to update easy_install, macports, etc.  More Googling around may [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE: Thanks to the helpful commenters, I found success getting an older Zope instance running on Python 2.4 on Snow Leopard using buildout.</strong></p>
<p><strong>NOTE: This post is for installing Python 2.4 on a brand new Snow Leopard Instance.</strong> If upgrading on top of Leopard, you may have to update easy_install, macports, etc.  More Googling around may be required.<strong><br />
</strong></p>
<p>Though I had to create two buildouts to get this to work &#8212; is there a way to get this into one buildout?</p>
<p>I first tried to create one buildout by combining  Florian Schulze&#8217;s buildout recipe with a standard Zope recipe &#8212; but since initial bootstrap was run by Python 2.5, I couldn&#8217;t get the Zope instance to use the new Python 2.4. <strong>So I first ran a buildout to build Python 2.4 (using OSX-installed Python 2.5), then used that new Python 2.4 to run bootstrap.py on the Zope 2.8.x buildout.</strong></p>
<p>Here&#8217;s the recipe I used to just build Python 2.4 (requires Florian&#8217;s buildout, see Alexander Limi&#8217;s comment below for where to find this):</p>
<pre>[buildout]
#extends = src/snowleopard.cfg     # no longer required as Joe mentions below
python-buildout-root = ${buildout:directory}/src
parts -=
   ${buildout:python25-parts}
   ${buildout:python26-parts}

[install-links]
prefix = /opt/local</pre>
<p>Then I ran a simple Zope 2.8 buildout to see if it would compile (using new Python 2.4 to bootstrap), and it did!</p>
<pre>[buildout]
parts =
   zope2
   instance

[zope2]
recipe = plone.recipe.zope2install
url = http://www.zope.org/Products/Zope/2.8.9.1/Zope-2.8.9.1-final.tgz

[instance]
recipe = plone.recipe.zope2instance
zope2-location = ${zope2:location}
user = admin:admin
http-address = 8080
debug-mode = on
verbose-security = on</pre>
<hr />
<p>Here is my initial post:</p>
<p>I have to say &#8212; most everything I&#8217;ve installed on a fresh Snow Leopard install has worked flawlessly and swiftly &#8212; except for (the minor inconvenience of) iStat not working.  <strong>UPDATE: iStat 2.0 is available for Snow Leopard now.</strong> <em>There&#8217;s a new beta of MenuMeters too for Snow Leopard</em>.</p>
<p>There are also nice subtle improvements, see Mac Life&#8217;s <a href="http://www.maclife.com/article/feature/100_snow_leopard_tips_tricks_and_features" target="_blank">100 Top Snow Leopard Tips, Trick and Features</a> for improvements to Preview, Expose, Stacks, etc.  I&#8217;ve very happy with the upgrade.</p>
<p>Now for the bad news for those like myself who depend on Python 2.4 for Plone, since many versions of Zope require Python 2.4.  <em>I also use Python for Django, though that should run fine on Python that shipped with Snow Leopard.</em></p>
<p>You can read many of the initial details around the web, but here&#8217;s what I&#8217;ve experienced and have been able to put together:</p>
<ul>
<li>Note that these details are for a fresh Snow Leopard install &#8211; there are a different set of issues if you&#8217;re upgrading over your existing Leopard.  <strong>NEW:<span style="font-weight: normal;"> &#8220;Clark&#8217;s Tech Blog&#8221; has a nice write-up about </span></strong><a href="http://www.libertypages.com/clarktech/?p=719" target="_blank">upgrading Python after upgrading Leopard to Snow Leopard</a>.</li>
<li>Snow Leopard ships with Python 2.5.4, and this runs as a 32-bit application.</li>
<li>I also need 2.4 branches of Python too, so I tried rolling my own (as usual) and it didn&#8217;t compile.  I then followed that thread for awhile.</li>
<li>I then thought I pulled a fast one when I compiled from MacPorts and everything ran great!</li>
<li>&#8230; but then I compiled Zope, and attempted to run an instance.  I saw a mysterious &#8220;No such file or directory&#8221; error.  Hmmm, I can navigate to that file, but running the script with my new Python interpretor was causing this error.</li>
<li>After digging around with Activity Monitor, I discovered that the Python I built from scratch was running as a 64-bit app &#8212; while the Python that comes with Snow Leopard was only running 32-bit &#8212; which is telling, since most everything else on Snow Leopard is running 64-bit.</li>
<li>Guessing that the the mysterious &#8220;No such file or directory&#8221; (when the file and directory did indeed exist) was due to a <strong>weird cocktail of 32-bit pieces living with 64-bit pieces</strong>.</li>
<li>My latest theory was that I needed to figure out how to build Python as 32-bit.  I played with Macports and various architecture settings to hardwire this, but long-story-short &#8212; the architecture override isn&#8217;t used everywhere &#8212; so parts still compile natively as 64-bit on Snow Leopard.</li>
<li><strong>The best thread on the topic (that&#8217;s steadily growing) is here: <a href="http://bugs.python.org/issue6802" target="_blank">http://bugs.python.org/issue6802</a> with msg92153 left today</strong>, which basically offers some additional settings for compiling Python as a 32-bit app (for Python 2.6).  Also mentions that Snow Leopard did some magic to get Python 2.5 working as a 32-bit app.<strong><br />
</strong></li>
<li>My hope is that once &#8220;32-bit&#8221; Python 2.4 happens, the rest of the Zope install, etc, will be back to the good ol&#8217; days in Leopard.</li>
</ul>
<p><strong>Plan B&#8217;s:</strong></p>
<p>Otherwise, to save some headache, I&#8217;m wondering about installing a small Linux distro on VMWare as a local mini web-server where I can easily install Python and Zope &#8212; though that&#8217;s a bit of a pain too.</p>
<p>Luckily I also have my old Leopard in a separate partition (see my <a href="http://www.evolvingbits.com/2009/08/29/extra-life-for-my-macbook-pro-with-snow-leopard-and-inexpensive-hardware/" target="_blank">Extra life for my MacBook Pro with Snow Leopard and inexpensive hardware</a> blog entry) and can boot that if necessary to work on various Zope/Plone sites (that required Python 2.4) while this is all being sorted out.</p>
<p>Now time to see if I can get 32-bit Python 2.4.6 compiled and installed, while waiting for more patches and information to appear&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evolvingbits.com/2009/09/02/snow-leopard-smooth-except-python-3264-cocktail/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>PyCon2009 Tutorial Recap: Real World Django / Optimizations in Python</title>
		<link>http://www.evolvingbits.com/2009/03/25/pycon2009-tutorials-real-world-django-optimizations-in-python/</link>
		<comments>http://www.evolvingbits.com/2009/03/25/pycon2009-tutorials-real-world-django-optimizations-in-python/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 03:54:27 +0000</pubDate>
		<dc:creator>Brian Gershon</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Plone]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Zope3]]></category>

		<guid isPermaLink="false">http://www.evolvingbits.com/?p=54</guid>
		<description><![CDATA[I primed the pump on the flight to PyCon by catching up on my reading. &#8220;Expert Python Programming&#8221; (Tarek Ziade) reminded me that I wanted to play with ipython shell and virtualenv (just learned today about the handy extension &#8220;virtualenvwrapper&#8221;), and reinforced and offered many great Best Practices.
Optimization Tutorial
I then got on my geek at [...]]]></description>
			<content:encoded><![CDATA[<p>I primed the pump on the flight to PyCon by catching up on my reading. &#8220;Expert Python Programming&#8221; (Tarek Ziade) reminded me that I wanted to play with ipython shell and virtualenv (just learned today about the handy extension &#8220;virtualenvwrapper&#8221;), and reinforced and offered many great Best Practices.</p>
<p><strong>Optimization Tutorial</strong></p>
<p>I then got on my geek at &#8220;Faster Python Programs through Optimization&#8221; (Mike Müller of Python Academy), where we dove deeper into profiling and tips on improving speed or saving memory.</p>
<p>Some paraphrased guidelines to consider before you start optimizing (which were also reinforced in the &#8220;Real World Django&#8221; tutorial which I&#8217;ll chat about next):</p>
<ul>
<li>Make sure your program is really too slow &#8211; could be other factors like network traffic, database, etc.</li>
<li>Don&#8217;t optimize as you go &#8211; might ultimately not need to spend that time.  Also working code is always important first.</li>
<li>Only consider realistic use cases and user experience</li>
</ul>
<p>We played with the profiling tools (profile, cProfile, time, pystone, heapy) and used them to compare various techniques:</p>
<ul>
<li>xrange and also Generators shaved off time by not having to allocate memory for large data sets.</li>
<li>use built-in types as much as possible (including some newer collection classes)</li>
<li>iterating and appending strings by first appending to lists, then using a join statement to create large strings (versus building strings via += and loops)</li>
<li>One new one for me was converting lists to Sets before testing for membership of an item in the list, which is fast due to Set optimizations.</li>
<li>The tutorial also covered pysco, processing and numpy modules, as well as caching techniques.</li>
</ul>
<p><strong>Real-world Django Tutorial</strong></p>
<p>This very aptly named presentation by Jacob Kaplan-Moss and James Bennett was excellent for those of us who develop and deploy Django websites.  The full skinny (with link to slides) is here: <a href="http://jacobian.org/speaking/2009/real-world-django/" target="_blank">http://jacobian.org/speaking/2009/real-world-django/</a></p>
<p>Some highlights for me included:</p>
<ul>
<li>Focus on tight Django Applications that promote reuse while also breaking a website into components. Benefits of also leveraging packaging up your own components.</li>
<li>Gain flexibility by leveraging Django Managers, and they help encapsulate behavior behind an API.</li>
<li>Can extend models via new (in Django 1.1) Proxy subclasses.</li>
<li>Lots of discussion and recommendations for testing &#8212; from unit testing, through functional testing, and then browser-based functional testing. Yep, you need them all. I&#8217;d like to play more with Twill and Windmill.</li>
<li>Automating deployment &#8211; including options like virtualenv (and virtualenvwrapper), Ian Bicking&#8217;s <a href="http://blog.ianbicking.org/2008/10/28/pyinstall-is-dead-long-live-pip/" target="_blank">pip</a> (&#8221;pip installs packages&#8221;), zc.buildout, and <a href="http://pypi.python.org/pypi/Fabric/" target="_blank">Fabric</a>.  <em>zc.buildout&#8217;s power was emphasized (with its recipes, etc) was a bit overshadowed by comments on lack of documentation.</em> I&#8217;d like to give pip and Fabric a try.</li>
<li>Apache + mod_wsgi is now a preferred platform for server Django sites (or at least much more consistent performance and memory-usage wise than Apache + mod_python).</li>
<li>Definitely flip through the session slides!  <em>These were just some highlights for me out of 189 slides of useful information.</em></li>
</ul>
<p>Various tidbits for the next few days here at PyCon:</p>
<ul>
<li>Open Space sessions come highly recommended</li>
<li>There&#8217;s a <a href="http://us.pycon.org/2009/conference/talks/?filter=testing" target="_blank">heavy testing thread</a> throughout conference (10 sessions worth!)</li>
<li><a href="http://us.pycon.org/2009/conference/schedule/event/P37/" target="_blank">Friday 11am</a>: Using Windmill</li>
<li><a href="http://us.pycon.org/2009/conference/schedule/event/76/" target="_blank">Saturday 4:15p</a>: Ian Bicking&#8217;s session (creator of PIP and virtualenv, among many other topics)</li>
<li><a href="http://us.pycon.org/2009/conference/schedule/event/88/" target="_blank">Sunday 10:35a</a>: Panel: Functional Testing Tools in Python</li>
<li>&#8230; though it will ultimately be tough to pick and choose from all the great topics!</li>
</ul>
<p>Time for some sleep&#8230; more tutorials tomorrow, then 3 days of conference, then 4 days of sprints!</p>
<p>ps: It&#8217;s been great to see familiar faces from the Zope and Plone communities, which is often where I &#8220;get my Python on&#8221;.  Lately I&#8217;m also doing a lot of Django, so enjoying all the synergy around Python here at PyCon2009!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evolvingbits.com/2009/03/25/pycon2009-tutorials-real-world-django-optimizations-in-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Social and Economic Justice, The Interra Project, Center for Ethical Leadership &#8212; and Plone</title>
		<link>http://www.evolvingbits.com/2009/02/12/social-and-economic-justice-the-interra-project-center-for-ethical-leadership-and-plone/</link>
		<comments>http://www.evolvingbits.com/2009/02/12/social-and-economic-justice-the-interra-project-center-for-ethical-leadership-and-plone/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 01:21:07 +0000</pubDate>
		<dc:creator>Brian Gershon</dc:creator>
				<category><![CDATA[Plone]]></category>
		<category><![CDATA[Web Collective Inc]]></category>

		<guid isPermaLink="false">http://www.evolvingbits.com/?p=53</guid>
		<description><![CDATA[Congratulations to Jon Ramer from The Interra Project, and Mark Okazaki from Neighborhood House for winning this year&#8217;s Bill Grace Leadership Legacy Award awards from the Center for Ethical Leadership.
Both the Interra Project and Center for Ethical Leadership are clients (and friends) of ours at Web Collective and we&#8217;re impressed with the great work they [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Congratulations to </strong><strong>Jon Ramer</strong> from <strong>The Interra Project</strong>, and <strong>Mark Okazaki</strong> from <strong>Neighborhood House </strong>for winning this year&#8217;s Bill Grace Leadership Legacy Award awards from the Center for Ethical Leadership.</p>
<p>Both the Interra Project and Center for Ethical Leadership are clients (and friends) of ours at <a href="http://www.webcollective.coop" target="_blank">Web Collective</a> and we&#8217;re impressed with the great work they are doing.</p>
<p>We developed websites for them in <a href="http://www.plone.org/" target="_blank">Plone</a>, including <a href="http://www.bostoncommunitychange.org/" target="_blank">Boston Community Change</a>, <a href="http://www.pugetsound.cc/" target="_blank">Puget Sound Community Change</a> and <a href="http://www.ethicalleadership.org" target="_blank">Center for Ethical Leadership</a>.</p>
<p>This award &#8220;celebrates Puget Sound leaders whose vision, commitment and unceasing efforts are significantly advancing social, environmental, and economic justice.&#8221;</p>
<p>Tickets are available for the <a href="http://www.brownpapertickets.com/event/50921" target="_blank">4th Annual Bill Grace Leadership Legacy Awards Dinner</a> on March 5th, 2009.</p>
<p><a href="http://www.interraproject.org/" target="_blank">The Interra Project</a> &#8220;provides consumers with the incentives they need to shift their purchasing habits to support the health of their communities by shopping with locally-focused, environmentally and sustainably-minded businesses.&#8221;  I was part of the team that built the <a href="http://www.bostoncommunitychange.org/" target="_blank">Boston Community Change</a> website.  Now there is a  <a href="http://www.pugetsound.cc/" target="_blank">Puget Sound Community Change</a> in our local community.  You can <a href="http://www.pugetsound.cc/join-now" target="_blank">sign-up for a community change card</a> for free and use when purchasing at local businesses, or if you own a business you can offer your services to those who have cards.</p>
<p>My experience with <a href="http://www.nhwa.org/" target="_blank">Neighborhood House</a> is through a monthly Multicultural Committee meeting where I live (at New Rainier Vista) where they provide language translation and other great community services. Our community has native speakers from Somalia, Ethiopia, China, and Vietnam.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evolvingbits.com/2009/02/12/social-and-economic-justice-the-interra-project-center-for-ethical-leadership-and-plone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Effortless Email Management with GTD and Remember the Milk</title>
		<link>http://www.evolvingbits.com/2008/10/25/effortless-email-management-with-gtd-and-remember-the-milk/</link>
		<comments>http://www.evolvingbits.com/2008/10/25/effortless-email-management-with-gtd-and-remember-the-milk/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 16:46:43 +0000</pubDate>
		<dc:creator>Brian Gershon</dc:creator>
				<category><![CDATA[GTD]]></category>
		<category><![CDATA[Plone]]></category>

		<guid isPermaLink="false">http://www.evolvingbits.com/?p=47</guid>
		<description><![CDATA[If you&#8217;re using Gmail, and want to manage it using GTD, I found a great solution.
I&#8217;m now using Remember the Milk as my primary GTD tool with the Firefox extension for Gmail. The extension lets you see all your action items on the right side of the Gmail page (grouped by day) and lets you [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re using Gmail, and want to manage it using GTD, I found a great solution.</p>
<p>I&#8217;m now using <a href="http://www.rememberthemilk.com" target="_blank">Remember the Milk</a> as my primary GTD tool with the <a href="http://www.rememberthemilk.com/services/gmail/" target="_blank">Firefox extension for Gmail</a>. The extension lets you see all your action items on the right side of the Gmail page (grouped by day) and lets you add new ones and roll-over existing ones and make quick changes and reschedules.</p>
<p><strong>Its most useful feature is that you can add action items automatically when you &#8220;star&#8221; (or tag) a Gmail message.  With many of my actionable items and reminders coming in through email, this is a killer feature for me.</strong></p>
<p>For example&#8230;<span id="more-47"></span></p>
<p>&#8230;if a client sends me an email that I need to respond to later in the day, I just star it and it registers as an action item for today.  If I decide I really could answer it tomorrow, I can roll over the new action item, and click the &#8220;postpone&#8221; button or type in a due date of &#8220;tomorrow&#8221;.</p>
<p>Then, when tomorrow comes and it&#8217;s time to act on this, I roll over the action item and now see a little &#8220;envelope&#8221; icon which allows me to jump to the email, reply to it, unstar it, and the task disappears because it&#8217;s done.</p>
<p>There are some very nice OSX GTD apps (like OmniFocus, and Things) but after personally jumping from client to client, I decided I wanted to go with a web-based service that had an API in case I wanted to extend it with a new UI, or maybe integrate it with another web service.</p>
<p>I looked at many web-based tools, but liked Remember the Milk for its API, its web-based interface (not flashy, but useful), no syncing worries, the Gmail Firefox extension (my main interface for using it), and it even has a <strong>nice iPhone web interface</strong> (with a native iPhone app rumored).  <em>For the iPhone interface, they ask you to join their Pro membership, but $25 for a year is well worth supporting this great service.</em></p>
<p>I also built <a href="http://plone.org/products/collectivegtd-thoughts" target="_blank">CollectiveGTD for Plone</a>, but have decided to take a different direction with this product.  Instead of it being a tool to manage all my general GTD needs, it will evolve into a set of tools for managing Plone content within a site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evolvingbits.com/2008/10/25/effortless-email-management-with-gtd-and-remember-the-milk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agility was one of the themes of Plone Conference 2008</title>
		<link>http://www.evolvingbits.com/2008/10/18/agility-was-one-of-the-themes-of-plone-conference-2008/</link>
		<comments>http://www.evolvingbits.com/2008/10/18/agility-was-one-of-the-themes-of-plone-conference-2008/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 19:18:19 +0000</pubDate>
		<dc:creator>Brian Gershon</dc:creator>
				<category><![CDATA[Plone]]></category>
		<category><![CDATA[Web Collective Inc]]></category>
		<category><![CDATA[Zope3]]></category>
		<category><![CDATA[cooperative]]></category>
		<category><![CDATA[ploneconf2008]]></category>

		<guid isPermaLink="false">http://www.evolvingbits.com/?p=45</guid>
		<description><![CDATA[
A recurring conference theme for me centered around agility. Plone has benefited by moving from Zope2 to the more flexible Zope3 Component Architecture.  Zope technologies are being made available as middleware for use on other platforms (via Repoze and WSGI). Grok is a Zope3 framework for projects needing something more lightweight. There were several very [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.evolvingbits.com/wp-content/uploads/2008/10/ploneconf2008-regancenter.jpg"><img class="alignleft size-thumbnail wp-image-46" title="Regan Center in DC" src="http://www.evolvingbits.com/wp-content/uploads/2008/10/ploneconf2008-regancenter-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>A recurring conference theme for me centered around agility. Plone has benefited by moving from Zope2 to the more flexible Zope3 Component Architecture.  Zope technologies are being made available as middleware for use on other platforms (via Repoze and WSGI). Grok is a Zope3 framework for projects needing something more lightweight. There were several very useful sessions on Agile Project Management.</p>
<p>There are also continuous improvements making Plone more agile for end-users.  Plone 4.0 aims to make it even easier for end-users to manage their content (including better media support, unified widgets for easier page compositioning, &#8220;page centric&#8221;, kupu improvements around layout), as well as more through-the-web features done right!</p>
<p><strong>Tuesday Arrival</strong></p>
<p>On my Tuesday Amtrak ride to DC, I connected with some conference folks on Twitter, found my hotel and ended up at the Science Club for a few drinks and mini-reunions. Hotel Harrington wasn&#8217;t fancy, but clean, had wifi and was only two blocks from the conference and metro, so I was happy.</p>
<p><strong>Wednesday </strong></p>
<p>&#8220;10% Manifesto&#8221; was my first session. In Seattle, we&#8217;ve been holding a weekly Open Source Friday, which has a lot of parallels to discussions in this session.  We&#8217;re all practicing ways of putting that extra effort in to give back to the Plone community in which we all flourish, and also socialize and learn in the process.</p>
<p>I then caught up on the latest happenings with Ecommerce in Plone with the GetPaid project.  This is now being used for a variety of use cases, and its component architecture seems to make it relatively straight-forward to create modules for your own needs.</p>
<p>&#8220;When Software is a Service, Will Only Network Luddites Be Free&#8221; brings up an interesting question: What does a free [as in freedom and open] computing cloud look like? <a href="http://autonomo.us" target="_blank">http://autonomo.us</a></p>
<p><strong>Thursday </strong></p>
<p>I started the day as a member of the &#8220;So you want to be a Plone consultant?&#8221; panel.  It&#8217;s a big discussion for a short amount of time, but we had a nice variety of panelists and good questions. Geir Baekholt&#8217;s discussion of Open Scope contracts peaked my curiosity.</p>
<p>One of the questions asked &#8220;How do project come into Web Collective?&#8221;  Clients often find us through our existing work with many progressive businesses and non-profits, our contributions of software and presentations in the open source community and Seattle Plone user group, and an interest in working with a company that practices a cooperative business model where all the members are owners of the company.</p>
<p>I was pleasantly surprised by a several tracks on Agile Project Management (&#8221;What makes a great development team&#8221; by Mike Robinson, and &#8220;High performance teams: What&#8217;s the secret sauce?&#8221; by Gerry Kirk on Friday).  Communication and project management often determine the success or failure of a software project, and tips and tricks in this area are always welcome.</p>
<p>Another interesting session was &#8220;Using Grok to walk like a duck&#8221; which covered several component architectures (from the limits of subclassing all the way through to the beauty of Adapters) and how Grok (and Zope3) support a dynamic version of Adaption.</p>
<p>After hearing about Deliverance 6 months earlier, &#8220;Using Deliverance to theme a website&#8221; was a nice way to catch up with the latest happenings here.  If you want to apply themes to multiple sites, this seems the way to go.</p>
<p><strong>Friday </strong></p>
<p>Experiencing some of the complexities and limitations of formlib, I wanted to check out Stephan Richter&#8217;s &#8220;z3c.form&#8221; session. z3c.form seems more refined, and can be used in in viewlets and portlets.</p>
<p>After talking with Jim Fulton at the Plone Summit at Google several months ago, I&#8217;ve been anxious to play with ExtJS, but haven&#8217;t had an opportunity.  Godefroid Chapelle showed us a rich browser solution using ExtJS and KSS.</p>
<p>&#8220;Repoze.bfg: A zope explosion&#8221; &#8211; Several months ago, we had the pleasure of bringing Chris McDonough to Seattle to talk about Repoze.  It was pretty new back then, and WSGI wasn&#8217;t something I had played with.  Since then, and after working with some other platforms such as Django, I was excited to catch up with the latest on this project.  The primary concept is to make Zope technologies available as middleware which could mix&#8217;n'match with other Python technologies via WSGI pipeline. In addition to the nice lightweight infrastructure, I think this highlights a longer term vision of being able to share best-of-breed Python technologies across various Python frameworks.</p>
<p><strong>Saturday and Sunday Plone Sprints</strong></p>
<p>Record turnout of people at the Plone sprints!</p>
<p>I was happy to collaborate for a couple of days with Aaron VanDerlip on Plone4Artists Calendar.  I had used this on a recent project, and wanted to help make improvements to what&#8217;s becoming a defacto solution for Plone calendaring, including an implementation of recurring events.  I&#8217;m relatively new to the project and have been impressed with the product&#8217;s architecture and its recent 2.0 alpha release.  I enjoyed lending a hand to help fix bugs and refining some functionality.</p>
<p>I also though the concept of a &#8220;Beginner Sprint&#8221; was ingenious and helpful for including new people in the community and getting them up and running with everything they need. Nice work Jon Stahl and Joel Burton (and other Plonistas that participated).</p>
<p><strong>Monday, Heading Home</strong></p>
<p>Then a perfect ending &#8212; I lucked out on a direct flight to Seattle (pays to get to the airport early) and ended up sitting right next to my friend and fellow Plone collaborator Andrew Burkhalter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evolvingbits.com/2008/10/18/agility-was-one-of-the-themes-of-plone-conference-2008/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CollectiveGTD for Plone 3.1 (Beta 2 Released)</title>
		<link>http://www.evolvingbits.com/2008/08/19/collectivegtd-for-plone-31-beta-2-released/</link>
		<comments>http://www.evolvingbits.com/2008/08/19/collectivegtd-for-plone-31-beta-2-released/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 10:01:49 +0000</pubDate>
		<dc:creator>Brian Gershon</dc:creator>
				<category><![CDATA[GTD]]></category>
		<category><![CDATA[Plone]]></category>

		<guid isPermaLink="false">http://www.evolvingbits.com/?p=41</guid>
		<description><![CDATA[
This is a Plone product that implements an Open Source version of the Getting Things Done (GTD) methodology.
New in this release:
This version fixes all known unicode issues, so that non-ascii characters can now be used throughout interface for editing, viewing, and KSS inline editing.
For download, please visit http://plone.org/products/collectivegtd-thoughts/releases/1.0b2
Change log:

NEW: Fixed all known unicode issues which [...]]]></description>
			<content:encoded><![CDATA[<div class="description">
<p>This is a Plone product that implements an Open Source version of the Getting Things Done (GTD) methodology.</p>
<p><strong>New in this release:</strong><br />
<span>This version fixes all known unicode issues, so that non-ascii characters can now be used throughout interface for editing, viewing, and KSS inline editing.</span></p>
<p>For download, please visit <a href="http://plone.org/products/collectivegtd-thoughts/releases/1.0b2" target="_blank">http://plone.org/products/collectivegtd-thoughts/releases/1.0b2</a></p>
<p><strong>Change log:</strong></p>
<ul>
<li>NEW: Fixed all known unicode issues which were causing context/project tagging to break when editing and when viewing, and were preventing KSS from updating the UI. Language-to-date features are still only supported in English.  Templates have not been internationalized.
<ul>
<li>Future Plan is to replace home-grown language-to-date functionality with the parsedate python module, which also supports multiple languages.</li>
</ul>
</li>
<li>NEW: Added new getAllActiveActions(outputFormat=&#8221;xml) method to spit out all ActionItems, Context tags and Project tags for use by a desktop application.</li>
<li>INCOMPLETE: Started to build an iPhone interface. Partially complete. Further work on this postponed.</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.evolvingbits.com/2008/08/19/collectivegtd-for-plone-31-beta-2-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mixing Cooperative Business and Open Source</title>
		<link>http://www.evolvingbits.com/2008/08/16/mixing-cooperative-business-and-open-source/</link>
		<comments>http://www.evolvingbits.com/2008/08/16/mixing-cooperative-business-and-open-source/#comments</comments>
		<pubDate>Sat, 16 Aug 2008 20:36:56 +0000</pubDate>
		<dc:creator>Brian Gershon</dc:creator>
				<category><![CDATA[Plone]]></category>
		<category><![CDATA[Seattle]]></category>
		<category><![CDATA[Web Collective Inc]]></category>
		<category><![CDATA[co-op]]></category>
		<category><![CDATA[cooperative]]></category>

		<guid isPermaLink="false">http://www.evolvingbits.com/?p=40</guid>
		<description><![CDATA[Cooperative Businesses are relatively new in the consulting and services field, as compared with more well known producer coops.
We&#8217;ve spent the last two years forming and running a Cooperative Business, and hope others consider doing the same.
The combination of organizing as a Cooperative, being part of Plone and other Open Source software communities, and partnering [...]]]></description>
			<content:encoded><![CDATA[<p>Cooperative Businesses are relatively new in the consulting and services field, as compared with more well known producer coops.</p>
<p>We&#8217;ve spent the last two years forming and running a Cooperative Business, and hope others consider doing the same.</p>
<p>The combination of organizing as a Cooperative, being part of Plone and other Open Source software communities, and partnering with clients who share our values, have led to a strong year of collaboration and growth.</p>
<p>Here is a <a href="http://www.webcollective.coop/Members/briang/why-a-cooperative-business" target="_blank">brief list of incentives and highlights</a> for others thinking about alternative business models that may include Cooperatives and Open Source software.<a href="http://www.webcollective.coop" target="_blank"></a></p>
<p><a href="http://www.webcollective.coop" target="_blank">Web Collective, Inc</a> recently celebrated its one-year anniversary as a Washington State Cooperative Business.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evolvingbits.com/2008/08/16/mixing-cooperative-business-and-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inline Editing of Multi-row Data in Plone with KSS</title>
		<link>http://www.evolvingbits.com/2008/04/25/inline-editing-of-multi-row-data-in-plone-with-kss/</link>
		<comments>http://www.evolvingbits.com/2008/04/25/inline-editing-of-multi-row-data-in-plone-with-kss/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 22:53:52 +0000</pubDate>
		<dc:creator>Brian Gershon</dc:creator>
				<category><![CDATA[GTD]]></category>
		<category><![CDATA[KSS]]></category>
		<category><![CDATA[Plone]]></category>

		<guid isPermaLink="false">http://www.evolvingbits.com/2008/04/25/inline-editing-of-multi-row-data-in-plone-with-kss/</guid>
		<description><![CDATA[Here is how I added inline editing for multiple rows of data to my CollectiveGTD Plone 3.0 product using KSS.
This was challenging in that it was my first KSS project, plus most of the KSS editing examples I&#8217;ve found deal with editing just one piece of content (instead of multiple rows).
Here is a screencast to [...]]]></description>
			<content:encoded><![CDATA[<p>Here is how I added inline editing for multiple rows of data to my CollectiveGTD Plone 3.0 product using KSS.</p>
<p>This was challenging in that it was my first KSS project, plus most of the KSS editing examples I&#8217;ve found deal with editing just one piece of content (instead of multiple rows).</p>
<p><strong>Here is a screencast to whet your appetite for inline editing.</strong>  Basically, CollectiveGTD has many rows of Action Items (each with Name, Start Date, Due Date, etc) that needed to be edited.</p>
<p align="center"><a href="http://www.evolvingbits.com/wp-content/uploads/2008/04/collectivegtd_inline.mov" title="Example of Inline Editing used in CollectiveGTD" target="_blank"><img src="http://www.evolvingbits.com/wp-content/uploads/2008/04/collectivegtd_screencast_thumbnail.png" alt="collectivegtd_screencast_thumbnail.png" /><br />
Screencast: Example of Inline Editing in CollectiveGTD</a></p>
<p>Here were the issues that needed to be solved:</p>
<ul>
<li>How do we capture KSS events for a specific field in a specific row?</li>
<li>How do we display inline editing forms?</li>
<li>How do we handle the same row of content if it shows up in multiple places? e.g. CollectiveGTD also has a portlet which might display the same content in both the multi-row form</li>
</ul>
<p><strong>Here are highlights, issues and lesson&#8217;s learned:</strong></p>
<p>Note: If you generally want to see all of the new KSS code in one place:<br />
<em>svn diff -r59525:60742 https://svn.plone.org/svn/collective/CollectiveGTD/trunk</em></p>
<p><strong>1. Converting from a plain old HTML form to a nice KSS template</strong></p>
<p>Prior to adding KSS, I started with a single HTML form that allowed users to check &#8220;Done&#8221; or &#8220;Starred&#8221; fields and click &#8220;Submit&#8221; to update all the pieces of content.  The goal was to replace that with KSS, plus add inline editing. To do this, I had to remove the one HTML form since you can&#8217;t have mini-inline forms inside of a big form.</p>
<p><img src="http://www.evolvingbits.com/wp-content/uploads/2008/04/warning.jpg" alt="warning.jpg" /> Issue: Not sure how to degrade this functionality nicely if someone doesn&#8217;t have JavaScript enabled.</p>
<p>I recommend creating macros for each field you&#8217;re editing, and a unique naming scheme for your inline fields.</p>
<p>I created 4 TAL macros (in collectivegtd_kss.pt) &#8211; one for each field to be edited with KSS.  There is a lot of HTML to put in, so doing this simplifies the main page template which then just generates the page and repeats through multiple rows of data (actions_view.pt).</p>
<p>The first goal was to uniquely id each editable field, even if the same piece of content shows up in more than one place on the page.</p>
<p>To do this, each field&#8217;s CSS ID was based on the content&#8217;s short-name (to represent the specific piece of content, aka &#8220;row&#8221;) with a &#8216;prefix&#8217; string (to represent the specific fieldname in case it appears in many places).  For CollectiveGTD there are 4 prefixes for the main page (main_startdate, main_duedate, main_complete, main_flag) and 4 prefixes for the portlet (portlet_startdate, portlet_duedate, portlet_complete, portlet_flag).</p>
<p><img src="http://www.evolvingbits.com/wp-content/uploads/2008/04/warning.jpg" alt="warning.jpg" /> Issue: A period in the field&#8217;s CSS ID breaks KSS.  A period can appear because the short-name for a Plone piece of content can contain periods, and I&#8217;m using the short-name as the unique identifier.  I haven&#8217;t fixed this one yet.</p>
<p>The macros require two pieces of information: &#8216;actionItem&#8217; and &#8216;prefix&#8217;.  ActionItem is a single piece of content that has all the fields a row needs.    These prefix also allowed the KSS code to be able to update multiple fields if the same piece of content appears more than once.  e.g. Changing Start date on the form, should also update the Start date for that items if it also appears in the portlet.</p>
<p><strong>2. Inline Editing Issues</strong></p>
<p>The initial tricky part of multi-row data (specifically with inline-editing) is that you can&#8217;t dynamically create KSS events for every row (nor would you want to!), so you need to structure your HTML and CSS a specific way so that when you trigger a KSS event it is smart enough to know which fields are connected with that row. My first version ended up showing and hiding all the rows forms instead of just the one I wanted.</p>
<p>How to hide and show the inline form:</p>
<p>Since inline text editing requires grouping several elements together, it&#8217;s important to group everything in one tag (e.g. &lt;div&gt;) and make sure all the KSS selectors for that inline form starts with that tag.  The reason is that you want the parent of all the forms to be the same, so that when your KSS action fires, you can capture it within that form &#8212; and not all forms.  You do all this magic via the &#8220;parentnode&#8221; function in your KSS selector.</p>
<p>I also set each form to have these two classes to start with (editform hiddenform) so that all the form default to being hidden.</p>
<p>Here&#8217;s the example of the &#8220;Due Date&#8221; field:</p>
<p><img src="http://www.evolvingbits.com/wp-content/uploads/2008/04/collectivegtd_kss.png" alt="collectivegtd_kss.png" /></p>
<p><img src="http://www.evolvingbits.com/wp-content/uploads/2008/04/collectivegtd_pt.png" alt="collectivegtd_pt.png" /></p>
<p><strong>3. What happens after submitting an inline-edit form?</strong></p>
<p>New ActionItemListKSS view for handling the server-side content updates</p>
<p>I created a new ActionItemListKSS (which subclasses PloneKSSView) to provide the server-side code to update content, and also reflect the changes back to the webpage (via those unique IDs we generated in the templates).</p>
<p>The unique IDs are used by our ActionItemListKSS.</p>
<p>The methods of my view are connected to the form via KSS (in collectivegtd.kss).  The major methods include: update_dueDate(), update_startDate(), update_complete(), update_flag().  This is where a lot of code duplication happens (similar code in all 4 methods), but easy to understand.</p>
<p>They all basically are passed a ActionItem ID (content short-name) and the new value (via KSS magic).  The method then updates the piece of content, reindexes the content to make sure the catalog is updated, then updates the webpage by doing an HTML replace for both prefixes (&#8221;main&#8221; and &#8220;portlet&#8221;).  It the content only exists in one place, the other replace is ignored.  Finally, a Portal Message is sent to the user to let them know what was changed.  The two &#8220;inline edited&#8221; fields are naturally more complex.</p>
<p><img src="http://www.evolvingbits.com/wp-content/uploads/2008/04/warning.jpg" alt="warning.jpg" /> Issue: This still seems like too much duplicate code is needed in ActionItemListKSS. Once I had one field working, I found myself refactoring common code as I learned KSS and discovered which code to reuse across fields.  The refactoring is leading toward a view class useful for inline editing though!</p>
<p>Lesson Learned: I ended up adding helper functions in ActionItemListKSS to handle the individual field-level updates of content, because updating fields like Start Date and Due Date were complex because of the complex date conversion code &#8212; converting strings to dates, then converting dates back to strings. This was largely because I didn&#8217;t build individual field update code in CollectiveGTD.  I started with formlib code which created new ActionItems all at once.  In hindsight, it would be good to have a view that allows updating of each individual field &#8212; then it could be reused in both formlib and KSS without having to duplicate code.  I still may do this refactoring at some point.</p>
<p>4. CSS file (collectivegtd.css)</p>
<p>The CSS was straight-forward.  Minor note: The only reason some of the selectors have a lot of options is that I was playing with CSS rollovers (where one image has both rollover states) and found some boilerplate code that looks like it works for all browsers imaginable.  I&#8217;m sure some of those could be removed.</p>
<p>5. Tests</p>
<p>I added tests for the ActionItemListKSS methods, but haven&#8217;t tried UI testing yet.</p>
<p><strong>Conclusion</strong></p>
<p>Therefore, thus&#8230;</p>
<p>* It&#8217;s worth learning KSS because of the power it brings you without having to write JavaScript code directly.</p>
<p>* The tricky piece was learning how the various pieces work together (KSS, PloneKSSView, and figuring out best-practices for structuring HTML and CSS), though once that is understood, it was easy to maintain the pieces separately by breaking the templates up into macros (to keep things simple and reusable), put all the server-side code in one Python class, with one KSS file that connects the two.</p>
<p>I hope this example provides you with what you need to avoid some of that initial learning curve.</p>
<p>I&#8217;m also interested in learning from KSS gurus if there is a way to simplify any of these pieces.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evolvingbits.com/2008/04/25/inline-editing-of-multi-row-data-in-plone-with-kss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.evolvingbits.com/wp-content/uploads/2008/04/collectivegtd_inline.mov" length="1647765" type="video/quicktime" />
		</item>
		<item>
		<title>CollectiveGTD for Plone: Beta Release (and screencast)</title>
		<link>http://www.evolvingbits.com/2008/04/19/collectivegtd-for-plone-beta-release-and-screencast/</link>
		<comments>http://www.evolvingbits.com/2008/04/19/collectivegtd-for-plone-beta-release-and-screencast/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 23:14:05 +0000</pubDate>
		<dc:creator>Brian Gershon</dc:creator>
				<category><![CDATA[GTD]]></category>
		<category><![CDATA[Plone]]></category>

		<guid isPermaLink="false">http://www.evolvingbits.com/2008/04/19/collectivegtd-for-plone-beta-release-and-screencast/</guid>
		<description><![CDATA[I&#8217;ve just released the beta of CollectiveGTD, and have included a screencast to provide an overview of current functionality.
This beta release of CollectiveGTD for Plone 3.0 includes new features such as:

AJAX Inline Editing using KSS
Filtering of Actions by Context tag and Project tag
An Import script that will import an iGTD CSV export and which is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released the beta of CollectiveGTD, and have included a screencast to provide an overview of current functionality.</p>
<p>This beta release of CollectiveGTD for Plone 3.0 includes new features such as:</p>
<ul>
<li>AJAX Inline Editing using KSS</li>
<li>Filtering of Actions by Context tag and Project tag</li>
<li>An Import script that will import an iGTD CSV export and which is easy to modify for importing other formats.</li>
</ul>
<p>The 8-minute screencast is available here: <a href="http://www.evolvingbits.com/wp-content/uploads/2008/04/collectivegtd_demo1.mov" target="_blank" title="CollectiveGTD Beta 1 Screencast">CollectiveGTD Beta 1 Screencast</a></p>
<p>The project page and link to the code is here: <a href="http://plone.org/products/collectivegtd-thoughts/releases/1.0" target="_blank">http://plone.org/products/collectivegtd-thoughts</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.evolvingbits.com/2008/04/19/collectivegtd-for-plone-beta-release-and-screencast/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.evolvingbits.com/wp-content/uploads/2008/04/collectivegtd_demo1.mov" length="8298076" type="video/quicktime" />
		</item>
		<item>
		<title>Plone, Zope3 and Django Love Fest</title>
		<link>http://www.evolvingbits.com/2008/04/18/plone-zope3-and-django-love-fest/</link>
		<comments>http://www.evolvingbits.com/2008/04/18/plone-zope3-and-django-love-fest/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 16:36:46 +0000</pubDate>
		<dc:creator>Brian Gershon</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Plone]]></category>

		<guid isPermaLink="false">http://www.evolvingbits.com/2008/04/18/plone-zope3-and-django-love-fest/</guid>
		<description><![CDATA[Justin James and I presented our talk &#8220;Plone and Django: Comparing Tools for Python Web Developers&#8221; at Seattle Plone last night to an enthused audience.
Most were familiar with just one platform or the other, so it was a great opportunity to ask questions and learn about the strengths of each platform.
http://presentations.webcollective.coop/django-plone
]]></description>
			<content:encoded><![CDATA[<p>Justin James and I presented our talk &#8220;<strong>Plone and Django: Comparing Tools for Python Web Developers</strong>&#8221; at Seattle Plone last night to an enthused audience.</p>
<p>Most were familiar with just one platform or the other, so it was a great opportunity to ask questions and learn about the strengths of each platform.</p>
<p><a href="http://presentations.webcollective.coop/django-plone" class="external-link">http://presentations.webcollective.coop/django-plone</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.evolvingbits.com/2008/04/18/plone-zope3-and-django-love-fest/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
