<?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>Grails Rocks &#187; plugins</title>
	<atom:link href="http://www.anyware.co.uk/2005/tag/plugins/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.anyware.co.uk/2005</link>
	<description>Grails, Apple, usability and world stuff</description>
	<lastBuildDate>Fri, 27 Jan 2012 13:52:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Smart ETag and Last-Modified handling with cache-headers plugin</title>
		<link>http://www.anyware.co.uk/2005/2010/10/26/smart-etag-and-last-modified-handling-with-cache-headers-plugin/</link>
		<comments>http://www.anyware.co.uk/2005/2010/10/26/smart-etag-and-last-modified-handling-with-cache-headers-plugin/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 15:30:05 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Examples]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=740</guid>
		<description><![CDATA[I&#8217;ve been working on the next release of Weceem CMS these last few weeks and one of the issues to tackle was that Weceem was not setting any of the useful response headers used by browsers and intermediate proxies/caches. This obviously needed improvement, and this tied in well to work I had already done on [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on the next release of <a href="http://weceem.org">Weceem CMS</a> these last few weeks and one of the issues to tackle was that Weceem was not setting any of the useful response headers used by browsers and intermediate proxies/caches.</p>
<p><span id="more-740"></span>This obviously needed improvement, and this tied in well to work I had already done on the small but beautiful Grails <a href="http://grails.org/plugin/cache-headers">cache-headers</a> plugin.</p>
<p>The problem: with a CMS you generally can&#8217;t make the client cache any content, not without some config for the CMS author/administrator to specify how long to cache it for &#8211; this is a problem we will tackle later. However at the very least you want to avoid re-generating content when requested if the client already has the same content.</p>
<p>The solution: Implement ETag and Last-Modified handling correctly so that when you receive requests with If-None-Match or If-Modified-Since you can return &#8220;304 Not Modified&#8221; if the content is the same as that the client last downloaded. This can give you major improvements in client response time and also server load, even in applications with highly dynamic content.</p>
<p>The thing is, implementing this from scratch in every <a href="http://grails.org">Grails</a> controller action you have is rather dull.</p>
<p>So in steps the new <strong>withCacheHeaders</strong> method in the <a href="http://grails.org/plugin/cache-headers">Cache-Headers plugin</a>. This method works a little like Grails&#8217; excellent withFormat method, using a simple DSL to specify:</p>
<ul>
<li>How to generate the ETag for this request</li>
<li>How to calculate the Last-Modified date for this request</li>
<li>How to render the response, if we need to do this because the content has changed since the client last downloaded it.</li>
</ul>
<p>Using this information that you provide, the cache-headers plugin will automatically work out if it can return &#8220;304 Not Modified&#8221; or if it has to render your response for you.</p>
<p>Here&#8217;s a working example from Weceem&#8217;s content rendering controller:<br />
<script type="text/javascript" src="https://gist.github.com/1195792.js">// < ![CDATA[
// < ![CDATA[
// < ![CDATA[</p>
<p>// ]]&gt;</script></p>
<p>As you can see there are three &#8220;method&#8221; calls inside the withCacheHeaders call: etag, lastModified and generate. You simply implement these and the plugin handles the rest.</p>
<p>In the &#8220;generate&#8221; closure we&#8217;re also calling the lastModified method added to controller actions by the cache-headers plugin. This lets us easily set the Last-Modified header of the response, and then we make a token effort at setting client/proxy caching headers with the &#8220;cache&#8221; method. This will be subject to later refinement.</p>
<p>For more details <a href="http://grails.org/plugin/cache-headers">see the docs</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2010/10/26/smart-etag-and-last-modified-handling-with-cache-headers-plugin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Javascript and CSS frameworks in Grails plugins</title>
		<link>http://www.anyware.co.uk/2005/2010/04/26/javascript-and-css-frameworks-in-grails-plugins/</link>
		<comments>http://www.anyware.co.uk/2005/2010/04/26/javascript-and-css-frameworks-in-grails-plugins/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 20:38:24 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/2010/04/26/javascript-and-css-frameworks-in-grails-plugins/</guid>
		<description><![CDATA[The Weceem CMS plugin for Grails uses the Blueprint CSS framework, jQuery and jQuery UI Javascript libraries. As the Grails plugin marketplace continues to mature, other plugins will have more polished user interfaces or reusable tags that require certain libraries. This raises an ugly prospect: a new resource dependency problem. Only unlike java dependency problems [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://weceem.org">Weceem CMS plugin</a> for <a href="http://grails.org">Grails</a> uses the <a href="http://blueprintcss.org">Blueprint CSS framework</a>, <a href="http://jquery.com">jQuery</a> and <a href="http://jqueryui.com">jQuery UI</a> Javascript libraries. As the Grails plugin marketplace continues to mature, other plugins will have more polished user interfaces or reusable tags that require certain libraries.</p>
<p>This raises an ugly prospect: a new resource dependency problem. Only unlike java dependency problems this is worse as you end up with multiple copies of resources in your app, even if they are the same version because plugins will typically bundle the resources themselves. Your app may add some of these too and your site becomes slow to load or experiences failures related to clashing library versions.</p>
<p>There is however a staggeringly simple solution to this: lightweight Grails plugins that contain the resources.</p>
<p>Thanks to Grails&#8217; automatic dependency resolution we (the grails community) can just create plugins to wrap up each such library and then we just make any apps or plugins that require them depend on them by installing the library plugin or adding it to the dependsOn clause of other plugins.</p>
<p>An important caveat here is that the library plugins need to use version numbers matching the version of the library they encapsulate. Then if you want jQuery 1.4.2 you depend on/install grails-jquery version 1.4.2 or higher. The grails-jquery plugin authors have already done this.</p>
<p>These plugins should implement a simple tag called &#8220;resources&#8221; in an appropriate namespace e.g.  or .</p>
<p>I strongly believe that such plugins should NOT include other tags or more heavyweight tags wrapping up library features &#8211; do that in another plugin e.g. &#8220;grails-jquery-tools&#8221;.</p>
<p>This approach does provide new challenges for optimizing static content &#8211; minifying JS and CSS and including only required modules from a larger library remains awkward as it is today with non-dependency solutions.</p>
<p>Ultimately I think we need smarter solutions than those currently in use to solve this. I have some ideas forming&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2010/04/26/javascript-and-css-frameworks-in-grails-plugins/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8230;and another Grails plugin</title>
		<link>http://www.anyware.co.uk/2005/2009/09/25/and-another-grails-plugin/</link>
		<comments>http://www.anyware.co.uk/2005/2009/09/25/and-another-grails-plugin/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 17:14:26 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=561</guid>
		<description><![CDATA[I have released version 0.1 of Taxonomy plugin for Grails. This new plugin lets you add hierarchical categories (taxons) to any domain object in Grails. Inspired by Graeme&#8217;s excellent Taggable plugin, this uses a similar underlying data structure but adds hierarchy and the extra querying methods you need to find any objects that have a given [...]]]></description>
			<content:encoded><![CDATA[<p>I have released version 0.1 of <a href="http://grails.org/plugin/taxonomy">Taxonomy plugin for Grails</a>.</p>
<p>This new plugin lets you add hierarchical categories (taxons) to any domain object in Grails.</p>
<p>Inspired by <a href="http://grails.org/plugin/taggable">Graeme&#8217;s excellent Taggable plugin</a>, this uses a similar underlying data structure but adds hierarchy and the extra querying methods you need to find any objects that have a given category or any of its sub-categories.</p>
<p>See the <a href="http://grails.org/plugin/taxonomy">docs and examples here</a> and and give it a try.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2009/09/25/and-another-grails-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;ve released another Grails plugin</title>
		<link>http://www.anyware.co.uk/2005/2009/09/18/ive-released-another-grails-plugin/</link>
		<comments>http://www.anyware.co.uk/2005/2009/09/18/ive-released-another-grails-plugin/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 13:01:05 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Programming links]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=556</guid>
		<description><![CDATA[Witness the power of the bean-fields plugin for Grails! &#60;bean:withBean beanName="form"&#62; &#60;bean:field property="firstName"/&#62; &#60;bean:field property="lastName"/&#62; &#60;bean:field property="company"/&#62; &#60;bean:field property="email"/&#62; &#60;/bean:withBean&#62; This will render input fields of the appropriate type, with sizes set according to the fields&#8217; constraints, select field items from inList etc. It also renders label tags, errors local to the field, and required [...]]]></description>
			<content:encoded><![CDATA[<p>Witness the power of the <a href="http://grails.org/plugin/bean-fields">bean-fields</a> plugin for <a href="http://grails.org">Grails</a>!</p>
<pre lang="groovy">&lt;bean:withBean beanName="form"&gt;
    &lt;bean:field property="firstName"/&gt;
    &lt;bean:field property="lastName"/&gt;
    &lt;bean:field property="company"/&gt;
    &lt;bean:field property="email"/&gt;
&lt;/bean:withBean&gt;</pre>
<p>This will render input fields of the appropriate type, with sizes set according to the fields&#8217; constraints, select field items from inList etc. It also renders label tags, errors local to the field, and required indicators.</p>
<p>You can customize the markup used for all this stuff, so that you get a consistent and noise-free rendering of fields across all your GSP views.</p>
<p><a href="http://grails.org/plugin/bean-fields">Please do check it out</a> and let me know if you have any issues.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2009/09/18/ive-released-another-grails-plugin/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Weceem 0.1 to 0.2 &#8211; changes under the hood</title>
		<link>http://www.anyware.co.uk/2005/2009/08/20/weceem-01-to-02-changes-under-the-hood/</link>
		<comments>http://www.anyware.co.uk/2005/2009/08/20/weceem-01-to-02-changes-under-the-hood/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 19:35:40 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Programming links]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[weceem]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=494</guid>
		<description><![CDATA[We released Weceem CMS 0.2 just before I went away on holiday a couple of weeks ago, so I haven&#8217;t had time to write anything about it until now. Weceem is a CMS written purely in Grails, using Grails plugins as much as possible. It has some history at jCatalog AG who have worked on [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://weceem.org"><img class="alignright" src="http://www.weceem.org/weceem/WeceemFiles/weceem/images/weceem-logo.png" alt="" width="234" height="56" /></a>We <a href="http://www.weceem.org/weceem/news/Weceem-0.2-released">released Weceem CMS 0.2</a> just before I went away on holiday a couple of weeks ago, so I haven&#8217;t had time to write anything about it until now.</p>
<p><a href="http://weceem.org">Weceem</a> is a CMS written purely in Grails, using Grails plugins as much as possible. It has some history at <a href="http://jcatalog.com">jCatalog AG</a> who have worked on the code and core concepts in various forms for a while now, and for the last 10 months or so I&#8217;ve been helping them out with Grails approaches, architecture and a little coding.</p>
<p>We didn&#8217;t want to write another CMS just for the sake of it. Lord knows there are so many out there, its almost painful to write another. However we believe we can bring simplicity and novel functionality to the CMS space that is missing in other Java-based CMSes. (Perhaps this is the folly of all who re-invent the wheel?)</p>
<p>Release 0.1 was a line in the sand, whereas 0.2 includes some major overhaul. It took a lot longer to get to 0.2 than we intended, but there were some major changes behind the scenes, aside from bringing it up to <a href="http://grails.org">Grails 1.1.1</a> compatibility and splitting it out into a <a href="http://grails.org/plugin/weceem">Grails plugin</a> and an app, so you can embed it in your own Grails apps or use it standalone.</p>
<p>Here&#8217;s a brief write-up of some of the changes we made, and why. <a href="http://s3.amazonaws.com/AnyWare/Blog/Screencasts/Weceem%200.2%20dev%20screencast.mov">There is also a short screencast that shows these changes here.</a></p>
<p><strong>Reworking the admin UI</strong></p>
<p>The admin UI desperately needed some love, and we want to move to a much more contemporary and less &#8220;Windows app&#8221; like feel. Something that is bright, bold and clear.</p>
<p>We also greatly simplified it, reducing the number of screens. We are for the moment at least using <a href="http://blueprintcss.org">BlueprintCSS</a> for the structural layout of the admin UI. It has been a major timesaver for us coders who, if we are honest are not the best cross-browser CSS designers.</p>
<p>What we&#8217;ve done so far with the admin styling is begin the migration away from the old UI. The work is by no means complete yet, and the UI will be more polished in time. We&#8217;re very much focusing on getting the bare bones functionality working well first before we do anything too fancy with the visuals.</p>
<p><strong>Switching to jQuery and jQuery UI</strong></p>
<p>A wide mix of tech was used in 0.1 for legacy/RAD/prototyping reasons, resulting in a fair amount of bloat, and slow page load times.</p>
<p>As a result we ditched all of the Dojo/Dijit/Dojox stuff that was there and complete rewrote the UI in pure <a href="http://jquery.com">jQuery</a> and j<a href="http://jqueryui.com">Query UI</a>. Our code is wonderfully lean now.</p>
<p>We looked at all the libraries out there and decided on jQuery. Its &#8220;where its at&#8221; as far as we&#8217;re concerned. Unfortunately we have had to use a &#8220;non-core&#8221; tree table widget and some custom behaviours for the draggable content repository, which is currently a bit ugly in places &#8211; but it is a work in progress that improves greatly on the old tree UI.</p>
<p>We still have some cross-browser glitches eg badly floated button icons in Safari and a few layout &#8220;blow outs&#8221; that we will fix in time. Any help with these jQuery UI style issues would be much appreciated &#8211; I haven&#8217;t received any help on the jquery ui mailing list about the Safari icon issue in particular.</p>
<p><strong>Dynamic content editor</strong></p>
<p>In 0.1, which had effectively evolved from a prototype, each content type had its own controller and views for editing, with lots of duplication. Much of this was modified scaffolding, and we all know that while scaffolding is great for helping you to build a house, nobody lives in a house and leaves the scaffolding up once the work is done!</p>
<p>Extensibility of content types in Weceem is very important to us. So in 0.2 we introduced a dynamic editor framework. There is a single controller and view set for editing all content types in Weceem now.</p>
<p>We achieved this by using some convention properties on the content classes to declare which fields are to be presented in the content editor, and how they should be rendered.</p>
<p>Because of Groovy&#8217;s wonderful dynamic abilities and Grails taglib support, we are able to render any custom editor you may wish to use on a content field &#8211; you just have to supply a Grails tag that follows a specific naming convention, and use the correct name in the editor declaration of the field in the content class.</p>
<p>For example, rich html editing as used for the &#8220;content&#8221; properties of <a href="http://fisheye.codehaus.org/browse/grails-plugins/grails-weceem/tags/RELEASE_0_2/grails-app/domain/org/weceem/html/HTMLContent.groovy?r=54466">HTMLContent</a> and WikiItem, is achieved by specifying the &#8220;RichHTML&#8221; editor:</p>
<pre lang="groovy">static editors = {
    template(group:'extra')
    content(editor:'RichHTML')
    keywords()
}</pre>
<p>The editor then invokes the editorFieldRichHTML() tag when rendering the &#8220;content&#8221; field of a <a href="http://fisheye.codehaus.org/browse/grails-plugins/grails-weceem/tags/RELEASE_0_2/grails-app/domain/org/weceem/html/HTMLContent.groovy?r=54466">HTMLContent</a> node in the editor. Its as simple as that. We also have hooks for custom editors to pull in extra resources in the &lt;head&gt; section of the page, such as JS and CSS files.</p>
<p>We have grouping of fields into the &#8220;Extra&#8221; section, and perhaps more in future, and you can force the hiding of certain properties.</p>
<p>This mechanism works with inheritance, which we use heavily in the content model &#8211; although the details of precedence rules are yet to be finalized.</p>
<p><strong>Reduced plugin dependencies</strong></p>
<p>We removed our dependency on RichUI and a couple of other plugins, which were either not fully used yet by the CMS&#8217;s current features, or were providing unnecessary bloat.</p>
<p>In fact we don&#8217;t use any Grails plugins for JS-related UI work now, only the FCKEditor plugin for the rich editor for HTML editing.</p>
<p><strong>Separation into Grails Plugin and Application</strong></p>
<p>This was a bit of an upheaval what with all the refactoring going on too, but Weceem which was formally a Grails application is now 99% encapsulated in the Grails WeceemCMS plugin which you can install into your own Grails applications to instantly add a great extensible CMS with a ready to use admin interface.</p>
<p>The plugin is hosted in the central Grails plugin repository (eg: grails install-plugin weceem).</p>
<p>The other 1% of the original Weceem application functionality remains a standalone application that uses the Weceem CMS plugin and simply adds some config mechanisms for the DataSource, and adds Acegi security and a default content repository, a copy of the weceem.org site. Its literally a run-and-go CMS, the full source of which is under 250KB zipped!</p>
<p>The plugin has a very simple abstraction of security which may be subject to change in coming releases until we hit 1.0, but this allows the plugin to not care about what authentication and authorisation mechanisms you want to use. We simply abstracted this functionality into a service where you can inject your own handlers to obtain the currently logged in user id etc.</p>
<p><strong>Navigation and extensible admin</strong></p>
<p>More work remains to be done on this but we have utilized the <a href="http://grails.org/plugin/navigation">Grails Navigation plugin</a> for the admin menus, including the items in the Administration page.</p>
<p>What this means is that applications that use the Weceem CMS plugin can <em>inject their own admin screens</em> into the UI provided by Weceem. This is absolutely trivial to achieve with the navigation plugin, and exactly this approach is used by the Weceem application to add user management screens which are specific to the app, into the Administration screen:</p>
<pre lang="groovy">class UserController {
  static navigation = [group:'weceem.app.admin',
    action: 'list', title: 'users']
...
}</pre>
<p><strong>Chowing down</strong></p>
<p>Eating your own dog food is always recommended (who invented that phrase&#8230; who eats dog food anyway, I know I wouldn&#8217;t recommend it) and we do this in a big way:</p>
<ol>
<li>Weceem.org is self hosted with Weceem CMS application</li>
<li>Weceem CMS application uses the Weceem CMS plugin, and proves that the abstractions work</li>
<li>The people that are developing Weceem are using it for real world sites other than weceem.org</li>
</ol>
<p><strong>Next up&#8230;</strong></p>
<p>We&#8217;re already working on version 0.3 which should bring full blog functionality in, clean up some UI niggles and bugs and flesh out the Wiki functionality too &#8211; time permitting. Oh and more test coverage and functional tests. The gap to the next release has to be a <strong>lot</strong> shorter!</p>
<p>I&#8217;ve put together a quick screencast showing a quick run through the admin parts of Weceem from a developer perspective. <a href="http://s3.amazonaws.com/AnyWare/Blog/Screencasts/Weceem%200.2%20dev%20screencast.mov">You can download it here.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2009/08/20/weceem-01-to-02-changes-under-the-hood/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Status update &#8211; the plugins hanging around my neck!</title>
		<link>http://www.anyware.co.uk/2005/2009/04/22/status-update-the-plugins-hanging-around-my-neck/</link>
		<comments>http://www.anyware.co.uk/2005/2009/04/22/status-update-the-plugins-hanging-around-my-neck/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 09:33:40 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[Programming links]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=468</guid>
		<description><![CDATA[I&#8217;m extremely busy at the moment with work projects, and this has meant I&#8217;ve got a backlog of Grails plugin updates to tackle. There&#8217;s a number of tweaks to Navigation Plugin, improvements and fixes for Functional Testing (G-Func), as well as some bug fixes for the Authentication plugin. I&#8217;m not sure when I will get [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m extremely busy at the moment with work projects, and this has meant I&#8217;ve got a backlog of Grails plugin updates to tackle.</p>
<p>There&#8217;s a number of tweaks to <a href="http://grails.org/plugin/navigation">Navigation Plugin</a>, improvements and fixes for <a href="http://grails.org/plugin/functional-test">Functional Testing (G-Func)</a>, as well as some bug fixes for the <a href="http://grails.org/plugin/authentication">Authentication plugin</a>.</p>
<p>I&#8217;m not sure when I will get time to do these, but they are on my radar. Sadly one has to earn money and plugins don&#8217;t generate any (directly). I really want to work on these things but you know how it goes. Good will doesn&#8217;t pay the bills!</p>
<p>I was toying with the idea of &#8220;crowd-funding&#8221; updates to plugins, for specific iterations of plugins that users are willing to pay small sums for in order to get it turned out quicker. I think the model could work&#8230; eg 100 people pay $10 to get a new iteration of G-Func released. It could be a new model for open source..</p>
<p>The tools for collecting crowd-funding revenue are already out there for fundraising projects.</p>
<p>Anyway I hope to knock out a new nav plugin iteration in the next week or so, ditto for G-Func. I just can&#8217;t promise it <img src="http://www.anyware.co.uk/2005/wp-includes/images/smilies/icon_sad.gif?9d7bd4" alt=':(' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2009/04/22/status-update-the-plugins-hanging-around-my-neck/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 11/18 queries in 0.037 seconds using disk: basic

Served from: www.anyware.co.uk @ 2012-02-10 03:25:26 -->
