<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.jazkarta.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://blog.jazkarta.com/wp-atom.php">
	<title type="text">Jazkarta Blog</title>
	<subtitle type="text">Python, Django and Plone web application development</subtitle>

	<updated>2012-01-24T22:18:41Z</updated>

	<link rel="alternate" type="text/html" href="http://blog.jazkarta.com" />
	<id>http://blog.jazkarta.com/feed/atom/</id>
	

	<generator uri="http://wordpress.com/">WordPress.com</generator>
<link rel="search" type="application/opensearchdescription+xml" href="http://blog.jazkarta.com/osd.xml" title="Jazkarta Blog" />
<link rel="search" type="application/opensearchdescription+xml" href="http://wordpress.com/opensearch.xml" title="WordPress.com" />
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.jazkarta.com/JazkartaBlog" /><feedburner:info uri="jazkartablog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://blog.jazkarta.com/?pushpress=hub" /><geo:lat>42.364347</geo:lat><geo:long>-71.104319</geo:long><feedburner:emailServiceId>JazkartaBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry>
		<author>
			<name>skleinfeldt</name>
					</author>
		<title type="html"><![CDATA[Agile Development with Plone, Revisited]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.jazkarta.com/~r/JazkartaBlog/~3/Fqq1xMtva3E/" />
		<id>http://jazkarta.wordpress.com/?p=615</id>
		<updated>2012-01-20T18:39:54Z</updated>
		<published>2012-01-20T15:58:10Z</published>
		<category scheme="http://blog.jazkarta.com" term="Agile" /><category scheme="http://blog.jazkarta.com" term="Plone" />		<summary type="html"><![CDATA[The announcement of the 2012 Plone Symposium East (thank you Weblion! always a great gathering) is reminding me of the talk I gave there last year on Agile Development with Plone. Here at Jazkarta we&#8217;re engaged in another large project, similar in many ways to the one that inspired that talk. Because our project management [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;blog=11374782&amp;post=615&amp;subd=jazkarta&amp;ref=&amp;feed=1" width="1" height="1" />]]></summary>
		<content type="html" xml:base="http://blog.jazkarta.com/2012/01/20/agile-development-with-plone-revisited/">&lt;p&gt;The announcement of the &lt;a title="2012 Plone Symposium East" href="http://weblion.psu.edu/events/plone/symposium"&gt;2012 Plone Symposium East&lt;/a&gt; (thank you Weblion! always a great gathering) is reminding me of the talk I gave there last year on &lt;a href="http://www.jazkarta.com/news/agile-development-with-plone"&gt;&lt;em&gt;Agile Development with Plone&lt;/em&gt;&lt;/a&gt;. Here at Jazkarta we&amp;#8217;re engaged in another large project, similar in many ways to the one that inspired that talk. Because our project management tools and techniques have evolved a bit since last year, I figured it was time for an update.&lt;/p&gt;
&lt;h2&gt;The Projects&lt;/h2&gt;
&lt;p&gt;Last year at this time, we were just getting started on a major website redesign for the &lt;a href="http://www.upress.umn.edu/"&gt;University of Minnesota Press&lt;/a&gt;. There&amp;#8217;s lots of information about this project in my Plone Conference presentation &lt;a href="http://www.jazkarta.com/news/how-to-get-a-fabulous-website-on-a-modest-budget-using-plone"&gt;&lt;em&gt;How To Get a Fabulous Website on a Modest Budget Using Plone&lt;/em&gt;&lt;/a&gt;. Briefly, it involved a major data conversion from a FileMaker database into Plone, a small number of complex custom content types, extensive design work, and a featured &amp;#8220;explore&amp;#8221; section powered by eea.facetednavigation.&lt;/p&gt;
&lt;p&gt;Our new project is a major website redesign for &lt;a href="http://doaks.org/"&gt;Dumbarton Oaks Research Library and Collection&lt;/a&gt;, a research institute of Harvard University and the home of a little known but outstanding museum and garden in Washington, D.C. We began with a discovery phase last summer, and have been working on implementation since November.&lt;/p&gt;
&lt;h2&gt;What&amp;#8217;s the Same&lt;/h2&gt;
&lt;p&gt;Both of these are fixed budget projects with a large number of desired features, and at the outset many of these were inadequately defined for development purposes. In both cases there are multiple stakeholders with differing priorities, but there is an intelligent, proactive project owner who is trusted and empowered to make decisions. The Jazkarta team is the same &amp;#8211; Carlos de la Guardia in Mexico, Alec Mitchell in California, and me in Massachusetts &amp;#8211; and none of us ever work full time on any of our projects.&lt;/p&gt;
&lt;p&gt;This all adds up to the same basic project management challenge: how to adapt agile techniques to manage a fixed price, flexible scope project with a distributed, part time team.&lt;/p&gt;
&lt;h2&gt;What&amp;#8217;s Different&lt;/h2&gt;
&lt;p&gt;Happily, the Dumbarton Oaks project does not involve a complicated data import from a FileMaker database. For UMP this required a &lt;a href="http://pypi.python.org/pypi/collective.transmogrifier"&gt;collective.transmogrifier&lt;/a&gt; script, many many many trial and error imports, and over 60 hours of Jazkarta development time. Dumbarton Oaks currently has a static HTML website, which is much simpler to import. &lt;a href="http://pypi.python.org/pypi/funnelweb"&gt;Funnelweb&lt;/a&gt; made this easy &amp;#8211; only a few trial imports and some content massaging were required. We&amp;#8217;re not a quarter through the project but all the old content is already on staging. Total development effort: 10 hours.&lt;/p&gt;
&lt;p&gt;Because the content import was relatively easy and the project mostly requires custom features and content types that are independent of each other, we have been able to divide up the work into several releases. This gives us a series of smaller planning horizons and allows us to be more agile (more on this later). Each release can potentially be deployed to production &amp;#8211; and even if we decide not to, new content is developed on staging which gives the new features a thorough vetting. No matter how much you thought you tested, there are always problems that don&amp;#8217;t get discovered until the software sees serious use. Having a series of small production deployments avoids piling all the bug fixes and theme tweaks into a single mega deployment phase at the end of the project.&lt;/p&gt;
&lt;h2&gt;Our Evolving Agile Development Practices&lt;/h2&gt;
&lt;p&gt;Our basic development process remains the same:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Discovery&lt;/li&gt;
&lt;li&gt;Define schedule and resources (how the budget will get spent)&lt;/li&gt;
&lt;li&gt;User story development&lt;/li&gt;
&lt;li&gt;Story estimation (we use &lt;a href="http://en.wikipedia.org/wiki/Planning_poker"&gt;planning poker&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A series of development iterations alternated with evaluation periods&lt;/li&gt;
&lt;li&gt;Production deployment&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;During discovery the project owner and I distributed the feature requirements into a series of releases, based on a combination of priorities and keeping all the stakeholders happy. (Everyone got something in almost every release.) This high level release plan allows us to do our story development and estimation one release at a time, which saves time and money &amp;#8211; especially considering that &lt;em&gt;all&lt;/em&gt; the developers participate in planning poker sessions. Since we know the customer wants more than their fixed budget will get them, and we also know they will change their mind about what they want as the project progresses, it makes sense to postpone the effort of writing and estimating stories we may never get to.&lt;/p&gt;
&lt;p&gt;As in previous projects, I took the first cut at turning the project requirements into stories, then discussed and revised the stories with the project owner. Because I have intimate knowledge of Plone, I can translate requirements into stories that make sense to develop. For example, we don&amp;#8217;t need to spend time defining stories for CMS functionality or for things that Plone has great add-ons for (like staff directories and bibliographies). Some things may turn out to need tweaking, but it is better to give the customer stock Plone and add-on features to try out first. They may decide to live with the stock features and put their development dollars into new features instead of making changes.&lt;/p&gt;
&lt;p&gt;Our communication tools remain the same: Skype, IRC, chat, Google Calendar, and Google Documents. This combination is the secret sauce that allows a distributed team to work as if they were in the same room. We did switch from &lt;a href="http://pypi.python.org/pypi/ClueMapper"&gt;ClueMapper&lt;/a&gt; (based on svn and trac) to &lt;a href="https://github.com/"&gt;github&lt;/a&gt; for source code repository and ticket tracking. We miss a few management features, but the developers are much happier working in a dvcs.&lt;/p&gt;
&lt;p&gt;Our development iterations remain the same &amp;#8211; one week each, followed by a week of evaluation during which the customer has time to test and reflect on what they want to do next. We kick off each iteration with a planning meeting, which surfaces any questions about the stories we&amp;#8217;re tackling and allows us to do task breakdown and assignment while we are all in the virtual room of a Skype conference call. During the iteration we have a short standup meeting every day to keep things on track &amp;#8211; everyone says what they did yesterday, what they&amp;#8217;ll do today, and raises any blocking issues. My notes from the standups are written in a Google spreadsheet which is shared with everyone. This gives the project owner access to detailed information about how things are going, if they miss a standup meeting.&lt;/p&gt;
&lt;p&gt;The biggest change we&amp;#8217;ve made for this project is to adopt &lt;a href="http://scrumdo.com"&gt;ScrumDo&lt;/a&gt; for story development and iteration planning. ScrumDo is an &lt;a href="http://scrumdo.org/"&gt;open source&lt;/a&gt; agile project management tool that&amp;#8217;s written in Python. We are using the hosted, SaaS version that&amp;#8217;s at &lt;a href="http://scrumdo.com"&gt;scrumdo.com&lt;/a&gt; &amp;#8211; accounts are free for up to 10 users and 10 projects. ScrumDo has a friendly drag and drop UI that makes it easy for for project owners to plan iterations, edit stories, add comments, and see results. Unlike &lt;a href="http://www.pivotaltracker.com/"&gt;Pivotal Tracker&lt;/a&gt;, it allows flexible iteration scheduling and story and task assignments. Google Docs provide better simultaneous editing for multiple users and more flexible formatting, but ScrumDo makes it really easy to add and change tasks, assign them, and mark them as complete. If it managed estimated and actual hours I&amp;#8217;d totally love it.&lt;/p&gt;
&lt;p&gt;ScrumDo added a Planning Poker tool last March, and this has been a real time saver. It&amp;#8217;s a web page where the scrum master selects a story to size and everyone puts down a story point card. Once you play your card you can see the others, and after discussion and reaching consensus, the scrum master assigns the winning value to the story. What set of cards to use is one of the ScrumDo project settings (we use modified Fibonacci).&lt;/p&gt;
&lt;div class="mceTemp mceIEcenter"&gt;
&lt;div id="attachment_623" class="wp-caption aligncenter" style="width: 610px"&gt;&lt;img class="wp-image-623 " title="ScrumDo Planning Poker" src="http://jazkarta.files.wordpress.com/2012/01/planning-poker1.png?w=600&amp;#038;h=335" alt="Screenshot of ScrumDo Planning Poker interface" width="600" height="335" /&gt;&lt;p class="wp-caption-text"&gt;ScrumDo Planning Poker interface&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;The Value of Agile Project Management&lt;/h2&gt;
&lt;p&gt;The planning and standup meetings required by an agile approach do take time. For the UMP project, the meetings and project management activities combined used almost 40% of the total budget. But what is the alternative? Written requirements &amp;#8220;thrown over the wall&amp;#8221; to developers are a recipe for failure. The customers and the developers have to talk to each other to understand the project and its development trade offs. I&amp;#8217;ve never had a customer complain that I&amp;#8217;m using too much project management time when I&amp;#8217;m running a project in this way. The value of open and frequent communications and iterative development cycles is very clear to them. They get full ownership of the project, choose exactly what it will deliver at every step along the way, and in the end they are delighted to get the system they envisioned.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jazkarta.wordpress.com/615/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jazkarta.wordpress.com/615/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jazkarta.wordpress.com/615/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jazkarta.wordpress.com/615/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jazkarta.wordpress.com/615/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jazkarta.wordpress.com/615/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jazkarta.wordpress.com/615/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jazkarta.wordpress.com/615/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jazkarta.wordpress.com/615/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jazkarta.wordpress.com/615/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jazkarta.wordpress.com/615/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jazkarta.wordpress.com/615/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jazkarta.wordpress.com/615/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jazkarta.wordpress.com/615/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;amp;blog=11374782&amp;amp;post=615&amp;amp;subd=jazkarta&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=Fqq1xMtva3E:XI9JU-Muqg0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=Fqq1xMtva3E:XI9JU-Muqg0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=Fqq1xMtva3E:XI9JU-Muqg0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=Fqq1xMtva3E:XI9JU-Muqg0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=Fqq1xMtva3E:XI9JU-Muqg0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=Fqq1xMtva3E:XI9JU-Muqg0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JazkartaBlog/~4/Fqq1xMtva3E" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.jazkarta.com/2012/01/20/agile-development-with-plone-revisited/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://blog.jazkarta.com/2012/01/20/agile-development-with-plone-revisited/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://blog.jazkarta.com/2012/01/20/agile-development-with-plone-revisited/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>carlosdelaguardia</name>
					</author>
		<title type="html"><![CDATA[Plone Quick Start for EC2 now available in all regions]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.jazkarta.com/~r/JazkartaBlog/~3/sxHRCdgTjY0/" />
		<id>http://blog.jazkarta.com/?p=611</id>
		<updated>2011-01-20T08:25:18Z</updated>
		<published>2011-01-20T08:25:18Z</published>
		<category scheme="http://blog.jazkarta.com" term="Uncategorized" />		<summary type="html"><![CDATA[Our Plone Quick Start Amazon EC2 machine images have been in enough demand to warrant availability in all four EC2 regions. We have responded to that demand and now anyone can test drive Plone 4 easily in their preferred region. Just go to our free signup page and fill out the form. You will receive [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;blog=11374782&amp;post=611&amp;subd=jazkarta&amp;ref=&amp;feed=1" width="1" height="1" />]]></summary>
		<content type="html" xml:base="http://blog.jazkarta.com/2011/01/20/plone-quick-start-for-ec2-now-available-in-all-regions/">&lt;p&gt;Our Plone Quick Start Amazon EC2 machine images have been in enough demand to warrant availability in all four EC2 regions. We have responded to that demand and now anyone can test drive Plone 4 easily in their preferred region. Just go to our &lt;a title="Jazkarta Plone Quick Start AMI Signup" href="http://www.jazkarta.com/plone-ami-signup"&gt;free signup page&lt;/a&gt; and fill out the form. You will receive a confirmation email and will be able to create your instance immediately after that.&lt;/p&gt;
&lt;p&gt;The Plone 4 Quick Start gives you a fully working Plone 4.0.2 site, running on Ubuntu 10.10. The site has two instances in a high availability configuration using Nginx as an HTTP frontend, Varnish for caching and HAProxy for load balancing. Supervisor is used for starting and stopping the Plone instances and ZEO.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;ve been wanting to try out Plone or know someone who is, this is probably as easy as it gets. Give Plone a chance.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jazkarta.wordpress.com/611/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jazkarta.wordpress.com/611/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jazkarta.wordpress.com/611/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jazkarta.wordpress.com/611/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jazkarta.wordpress.com/611/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jazkarta.wordpress.com/611/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jazkarta.wordpress.com/611/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jazkarta.wordpress.com/611/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jazkarta.wordpress.com/611/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jazkarta.wordpress.com/611/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jazkarta.wordpress.com/611/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jazkarta.wordpress.com/611/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jazkarta.wordpress.com/611/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jazkarta.wordpress.com/611/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;amp;blog=11374782&amp;amp;post=611&amp;amp;subd=jazkarta&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=sxHRCdgTjY0:XHkVhRbdWoU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=sxHRCdgTjY0:XHkVhRbdWoU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=sxHRCdgTjY0:XHkVhRbdWoU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=sxHRCdgTjY0:XHkVhRbdWoU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=sxHRCdgTjY0:XHkVhRbdWoU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=sxHRCdgTjY0:XHkVhRbdWoU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JazkartaBlog/~4/sxHRCdgTjY0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.jazkarta.com/2011/01/20/plone-quick-start-for-ec2-now-available-in-all-regions/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.jazkarta.com/2011/01/20/plone-quick-start-for-ec2-now-available-in-all-regions/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.jazkarta.com/2011/01/20/plone-quick-start-for-ec2-now-available-in-all-regions/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>natea</name>
						<uri>http://natea.wordpress.com/</uri>
					</author>
		<title type="html"><![CDATA[Plone on WSGI sprint report]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.jazkarta.com/~r/JazkartaBlog/~3/dRBV3ceNn_k/" />
		<id>http://blog.jazkarta.com/?p=515</id>
		<updated>2010-11-22T21:45:11Z</updated>
		<published>2010-11-22T21:44:55Z</published>
		<category scheme="http://blog.jazkarta.com" term="Conferences" /><category scheme="http://blog.jazkarta.com" term="Content Management Systems" /><category scheme="http://blog.jazkarta.com" term="Plone" />		<summary type="html"><![CDATA[Two laptops, two sprinters and two bottles of whiskey. What could possibly go wrong? This is my attempt to document what I can only describe as the &#8220;Plone on Whisk-gi&#8221; sprint&#8230; As part of the Plone deployment sprint at the recent Plone Conference in Bristol, Reed O&#8217;Brien and I decided to try to get Plone [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;blog=11374782&amp;post=515&amp;subd=jazkarta&amp;ref=&amp;feed=1" width="1" height="1" />]]></summary>
		<content type="html" xml:base="http://blog.jazkarta.com/2010/11/22/plone-on-wsgi-sprint-report/">&lt;h2&gt;Two laptops, two sprinters and two bottles of whiskey. What could possibly go wrong?&lt;/h2&gt;
&lt;h2&gt;&lt;span style="font-weight:normal;font-size:13px;"&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/11/p1040977.jpg"&gt;&lt;img class="alignright size-medium wp-image-569" title="P1040977" src="http://jazkarta.files.wordpress.com/2010/11/p1040977.jpg?w=225&amp;#038;h=300" alt="" width="225" height="300" /&gt;&lt;/a&gt;This is my attempt to document what I can only describe as the &amp;#8220;Plone on Whisk-gi&amp;#8221; sprint&amp;#8230; As part of the &lt;a href="http://coactivate.org/projects/ploneconf2010-sprints/deployment"&gt;Plone deployment sprint&lt;/a&gt; at the recent &lt;a href="http://ploneconf2010.org"&gt;Plone Conference&lt;/a&gt; in Bristol, Reed O&amp;#8217;Brien and I decided to try to get Plone 4 working on WSGI. &lt;/span&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;span style="font-weight:normal;font-size:13px;"&gt;Why is this important? Hanno Schlichting (current Zope2 release manager) tells us on his &lt;a href="http://blog.hannosch.eu/2010/06/zope-213-alpha-imminent.html"&gt;blog post&lt;/a&gt; about the recent &lt;a href="http://docs.zope.org/zope2/releases/2.13/WHATSNEW.html#wsgi"&gt;Zope 2.13 release&lt;/a&gt;:&lt;/span&gt;&lt;/h2&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span style="font-weight:normal;font-size:13px;"&gt;Zope 2.13 comes with native &lt;a href="http://wsgi.org/wsgi/"&gt;WSGI&lt;/a&gt; support. First pioneered in the &lt;a href="http://repoze.org/about.html"&gt;repoze.zope2&lt;/a&gt; project, this capability finally found its way back into the core and obsoletes the externally managed project. With WSGI, Zope 2 can natively talk to a variety of web servers and isn&amp;#8217;t restricted to its own ZServer anymore. It also opens up new possibilities for writing or reusing &lt;a href="http://wsgi.org/wsgi/Middleware_and_Utilities"&gt;middleware&lt;/a&gt; in Zope 2 or factoring out capabilities into WSGI endware. It&amp;#8217;s expected that this new deployment model will over time become the default and the old ZServer implementation will be deprecated. There&amp;#8217;s no concrete timeline for this yet.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;What is Hanno saying here? Basically, it means that Zope 2.13 (and subsequently Plone) can run on a server without the added complexity of a long-running process (ZServer). Just as PHP-based applications enjoy ease of deployment since Apache already has mod_php enabled, so too could Zope-based applications be easily deployed if mod_wsgi were enabled.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:normal;font-size:13px;"&gt;In thinking about how Plone and Zope can be more accessible to systems administrators and hosting companies, moving to a scenario in which Zope does not require a separate long-running process, and can be deployed essentially at the Apache layer is a step in the right direction.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:normal;font-size:13px;"&gt;As Hanno alludes to above, with the WSGI deployment model, Zope/Plone are able to tap into a whole ecosystem of 3rd party WSGI middleware tools. &lt;a href="http://repoze.org/"&gt;Repoze&lt;/a&gt; is an initiative to extract many of the core Zope technologies into reusable &lt;a href="http://repoze.org/repoze_components.html#middleware"&gt;WSGI middleware components&lt;/a&gt;, that can be used in other Python web application frameworks. More WSGI components can be found on PyPi by &lt;a href="http://pypi.python.org/pypi?:action=search&amp;amp;term=wsgi"&gt;searching for &amp;#8220;wsgi&amp;#8221;&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:normal;font-size:13px;"&gt;Also, by adopting a more typical deployment method, Zope will not seem so exotic to developers coming to Zope from other Python web frameworks. For example, the official Django documentation recommends &lt;a href="http://docs.djangoproject.com/en/1.2/howto/deployment/"&gt;deploying Django using mod_wsgi&lt;/a&gt;, so Django developers will likely already be familiar with this way of deploying Python web applications. Incidentally, if you&amp;#8217;re doing Django development, check out &lt;a href="http://packages.python.org/twod.wsgi/"&gt;twod.wsgi&lt;/a&gt; which makes WSGI a first-class citizen in Django applications.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;How does Plone fit in this picture?&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/11/p1040976.jpg"&gt;&lt;img class="alignright size-medium wp-image-570" title="P1040976" src="http://jazkarta.files.wordpress.com/2010/11/p1040976.jpg?w=225&amp;#038;h=300" alt="" width="225" height="300" /&gt;&lt;/a&gt;Plone, arguably being the most popular Zope2 application on the market, can stand to benefit from the WSGI deployment strategy. There have already been some efforts to do so with repoze.plone and repoze.zope2 (now deprecated with the release of Zope 2.13).&lt;/p&gt;
&lt;p&gt;Calvin Hendrix Parker blogged about &lt;a href="http://www.sixfeetup.com/blog/deploying-plone-and-zine-together-with-deliverance-using-repoze"&gt;deploying Plone and Zine together with Deliverance using Repoze&lt;/a&gt;, and Wojciech Lichota blogged about his &lt;a href="http://lichota.pl/blog/2009/07/12/buildout-for-plone-3-with-deliverance-on-wsgi"&gt;buildout for Plone 3 with Deliverance on WSGI&lt;/a&gt;. Nathan Van Gheem has also written a couple blog posts about his experiences &lt;a href="http://nathanvangheem.com/news/running-plone-4-with-a-zope2-wsg"&gt;running Plone 4 with a Zope2 WSGI&lt;/a&gt; and &lt;a href="http://nathanvangheem.com/news/running-plone-4b4-with-zope-2.13.0a1"&gt;running Plone 4b4 with Zope 2.13.0a1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now that Plone 4 is officially out and &lt;a href="http://pypi.python.org/pypi/Zope2/2.13.0"&gt;Zope 2.13 has had a final release&lt;/a&gt;, the instructions for getting this working are considerably easier.&lt;/p&gt;
&lt;p&gt;Here are the steps required to get Plone 4 running under WSGI using paster.&lt;/p&gt;
&lt;h3&gt;1. Create a buildout.cfg file with the following:&lt;/h3&gt;
&lt;pre&gt;
[buildout]
extends =

http://dist.plone.org/release/4.0.1/versions.cfg

http://download.zope.org/zopetoolkit/index/1.0/zopeapp-versions.cfg

http://download.zope.org/Zope2/index/2.13.0/versions.cfg

parts =
    instance
    paster

versions = versions

eggs +=
    roman
    Products.ZSQLMethods

[versions]
Zope2=2.13.0
Products.ZSQLMethods = 2.13.3

[instance]
recipe = plone.recipe.zope2instance
user = admin:admin
eggs +=
    ${buildout:eggs}
    Plone
    Paste
    PasteScript
    PasteDeploy
    repoze.tm2
    repoze.retry

[paster]
recipe = repoze.recipe.egg
scripts = paster
eggs = ${instance:eggs}
&lt;/pre&gt;
&lt;h3&gt;2. Create a zope2.ini file:&lt;/h3&gt;
&lt;pre&gt;
[DEFAULT]
debug = True

[app:zope]
use = egg:Zope2#main
zope_conf = %(here)s/parts/instance/etc/zope.conf

[pipeline:main]
pipeline =
    egg:paste#evalerror
    egg:repoze.retry#retry
    egg:repoze.tm2#tm
    zope

[server:main]
use = egg:paste#http
host = localhost
port = 8080
&lt;/pre&gt;
&lt;h3&gt;3. Run the buildout and modify the zope.conf file:&lt;/h3&gt;
&lt;p&gt;Run the buildout which will generate the paster script in the bin dir and the zope.conf file in parts/instance/etc. You then need to comment out the &amp;lt;http-server&amp;gt; part in this file. If you don&amp;#8217;t comment out these lines, then paster will complain that there is already a server running on port 8080.&lt;/p&gt;
&lt;pre&gt;#&amp;lt;http-server&amp;gt;
# valid keys are "address" and "force-connection-close"
#  address 8080#
#&amp;lt;/http-server&amp;gt;&lt;/pre&gt;
&lt;h3&gt;4. Start up paster using the zope2.ini file:&lt;/h3&gt;
&lt;pre&gt;$ paster serve zope2.ini
Starting server in PID 4666.
serving on http://127.0.0.1:8080&lt;/pre&gt;
&lt;p&gt;You can now go to http://127.0.0.1:8080 to see your Plone site served up by Zope on WSGI!&lt;/p&gt;
&lt;p&gt;In the next blog post, we will describe how to get this semi-working in a production environment using mod_wsgi. For a sneak preview you can check out &lt;a href="http://svn.plone.org/svn/plone/sandbox/wsgi-plone4.1-devel/wsgi/"&gt;this buildout &lt;/a&gt;that Reed put together at the sprint. Note that there are a few patches that must be applied to Zope2, and hopefully Tres Seaver is reading this and will respond to them. &lt;img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;h2&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/11/p1040975.jpg"&gt;&lt;img class="alignright size-medium wp-image-572" title="P1040975" src="http://jazkarta.files.wordpress.com/2010/11/p1040975.jpg?w=300&amp;#038;h=225" alt="" width="300" height="225" /&gt;&lt;/a&gt;What&amp;#8217;s the official word on WSGI support for Plone 4?&lt;/h2&gt;
&lt;p&gt;Plone 4.1 will ship with Zope 2.13, but as Hanno states in &lt;a href="http://dev.plone.org/plone/ticket/10776"&gt;PLIP #10776&lt;/a&gt;:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;While Zope 2.13 provides native WSGI functionality, it is outside of this PLIP to make use of this in any way. There&amp;#8217;s a large number of open questions around WSGI and the changes it requires to instance creation and setup, which warrant their own PLIP. A good number of those will also have an impact on the Zope 2 codebase itself, which is going to be already past a beta release by the time this PLIP gets started and thus will have to wait for Zope 2.14. I expect to see more community experimentation being done with WSGI once the capability is there. We might see a PLIP for Plone 4.2 to see those experimentations being solidified into good practice, standards and documentation.&lt;/p&gt;
&lt;p&gt;So in other words, it&amp;#8217;s still on the bleeding edge to try to use it, and probably not advised for production use just yet. As Hanno mentions, it&amp;#8217;s expected that there will be more experimentation around WSGI, and as a community, we can come up with some best practices and documentation for how to do it in a sane way. Please let me know if you have done any experimentation with WSGI already, or if you&amp;#8217;re interested in getting involved in these efforts.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jazkarta.wordpress.com/515/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jazkarta.wordpress.com/515/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jazkarta.wordpress.com/515/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jazkarta.wordpress.com/515/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jazkarta.wordpress.com/515/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jazkarta.wordpress.com/515/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jazkarta.wordpress.com/515/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jazkarta.wordpress.com/515/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jazkarta.wordpress.com/515/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jazkarta.wordpress.com/515/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jazkarta.wordpress.com/515/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jazkarta.wordpress.com/515/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jazkarta.wordpress.com/515/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jazkarta.wordpress.com/515/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;amp;blog=11374782&amp;amp;post=515&amp;amp;subd=jazkarta&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=dRBV3ceNn_k:asYS8LRqUKg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=dRBV3ceNn_k:asYS8LRqUKg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=dRBV3ceNn_k:asYS8LRqUKg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=dRBV3ceNn_k:asYS8LRqUKg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=dRBV3ceNn_k:asYS8LRqUKg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=dRBV3ceNn_k:asYS8LRqUKg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JazkartaBlog/~4/dRBV3ceNn_k" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.jazkarta.com/2010/11/22/plone-on-wsgi-sprint-report/#comments" thr:count="8" />
		<link rel="replies" type="application/atom+xml" href="http://blog.jazkarta.com/2010/11/22/plone-on-wsgi-sprint-report/feed/atom/" thr:count="8" />
		<thr:total>8</thr:total>
	<feedburner:origLink>http://blog.jazkarta.com/2010/11/22/plone-on-wsgi-sprint-report/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>natea</name>
						<uri>http://natea.wordpress.com/</uri>
					</author>
		<title type="html"><![CDATA[Easily launch Plone sites on Amazon EC2 with mr.awsome]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.jazkarta.com/~r/JazkartaBlog/~3/B2KTV6CQrrU/" />
		<id>http://blog.jazkarta.com/?p=544</id>
		<updated>2010-11-08T23:02:48Z</updated>
		<published>2010-11-08T12:53:14Z</published>
		<category scheme="http://blog.jazkarta.com" term="Amazon Web Services" /><category scheme="http://blog.jazkarta.com" term="Content Management Systems" /><category scheme="http://blog.jazkarta.com" term="Plone" /><category scheme="http://blog.jazkarta.com" term="Uncategorized" /><category scheme="http://blog.jazkarta.com" term="amazon" /><category scheme="http://blog.jazkarta.com" term="aws" /><category scheme="http://blog.jazkarta.com" term="ec2" />		<summary type="html"><![CDATA[While we&#8217;ve been promoting our Plone 3 and Plone 4 AMIs which are really great to evaluate Plone on Amazon EC2 quickly, I want to tell you about another way you can get started with Amazon EC2 that gives you more control over where you launch the EC2 instances and what specific commands get executed [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;blog=11374782&amp;post=544&amp;subd=jazkarta&amp;ref=&amp;feed=1" width="1" height="1" />]]></summary>
		<content type="html" xml:base="http://blog.jazkarta.com/2010/11/08/intro-to-mrawsome/">&lt;p&gt;While we&amp;#8217;ve been promoting our &lt;a href="http://blog.jazkarta.com/2010/09/28/plone-quick-start-easily-evaluate-plone-using-amazon-web-services/"&gt;Plone 3 and Plone 4 AMIs&lt;/a&gt; which are really great to evaluate Plone on Amazon EC2 quickly, I want to tell you about another way you can get started with Amazon EC2 that gives you more control over where you launch the EC2 instances and what specific commands get executed on the server the first time it boots up. I mentioned this during my &lt;a href="http://blog.jazkarta.com/2010/11/08/scalable-plone-hosting-with-amazon-ec2/"&gt;Scalable Plone hosting with Amazon EC2&lt;/a&gt; talk at the Plone conference, but in this blog post, I want to go into more details about how to actually get it set up.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s an example of a very simple set up of mr.awsome. You can either add this to an existing buildout (in which case you would name this file aws.cfg instead of buildout.cfg), or you can make a separate buildout as we have done here:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;buildout.cfg:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;[buildout]
parts = aws

[aws]
recipe = zc.recipe.egg
eggs = mr.awsome
entry-points =
    aws=mr.awsome:aws
    assh=mr.awsome:aws_ssh
arguments = configpath="${buildout:directory}/etc"&lt;/pre&gt;
&lt;p&gt;Then you put a config file in the  /etc directory of your buildout, that might look something like this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;etc/aws.conf:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;[securitygroup:demo-server]
description = Demo Server
connections =
    tcp 22 22 0.0.0.0/0
    tcp 80 80 0.0.0.0/0
    tcp 8080 8080 0.0.0.0/0&lt;/pre&gt;
&lt;pre&gt;[instance:demo-server]
keypair = demo-server-keypair
securitygroups = demo-server
region = us-east-1
placement = us-east-1c
instance_type = t1.micro
image = ami-480df921
startup_script = startup-demo-server.sh
fabfile = fabfile.py&lt;/pre&gt;
&lt;p&gt;There are a few things to note about this configuration:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We open port 8080 in the firewall so that we can access our Plone site directly without making an Apache vhost, but for a production server you would not want to do this. We leave it as an exercise to the reader to extend the startup-demo-server.sh script to create the Apache vhost config file  and activate it.&lt;/li&gt;
&lt;li&gt;
&lt;div id="attachment_551" class="wp-caption alignright" style="width: 310px"&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/11/keypair.png"&gt;&lt;img class="size-medium wp-image-551 " title="keypair" src="http://jazkarta.files.wordpress.com/2010/11/keypair.png?w=300&amp;#038;h=182" alt="" width="300" height="182" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Creating a keypair&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;You&amp;#8217;ll need to have created a keypair in the &lt;a href="https://console.aws.amazon.com/s3/home"&gt;AWS Management Console&lt;/a&gt; or using &lt;a href="http://aws.amazon.com/developertools/609"&gt;ElasticFox&lt;/a&gt;, that has the name &amp;#8220;demo-server-keypair&amp;#8221;. You&amp;#8217;ll want to save the keypair file someplace safe on your computer, as you will need this in order to SSH into the server.&lt;/li&gt;
&lt;li&gt;We specify the &amp;#8220;demo-server&amp;#8221; security group that we defined at the top of the config file. This is important not only for defining the ports to be open, but also for identifying which EC2 instance is the demo server, since Amazon doesn&amp;#8217;t provide any other way to &amp;#8220;tag&amp;#8221; a server with such an identifier, so we use the security groups for that.&lt;/li&gt;
&lt;li&gt;You might have to play around with the settings for the region, placement, instance type and AMI image ID. Not all instance types are available in all regions, and the AMI ID must match the architecture (32-bit or 64-bit) and the region (us-east, us-west, eu-west, ap-southeast). We use the &lt;a href="http://uec-images.ubuntu.com/lucid/current/"&gt;Ubuntu 10.04 LTS AMIs provided by Canonical&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you choose an AMI that uses EBS as it&amp;#8217;s root store (also known as EBS bootable instances), then you will be able to stop the EC2 instance, restart it later and not lose all the data in the meantime. The other advantage is that you don&amp;#8217;t pay for the instance while it&amp;#8217;s in the stopped state. If you use the &amp;#8220;instance store&amp;#8221;, then your only option is to terminate the instance at which time you lose all the data, unless you&amp;#8217;ve attached an &lt;a href="http://aws.amazon.com/ebs/"&gt;EBS volume&lt;/a&gt; and have stored all data you want to persist there.&lt;/li&gt;
&lt;li&gt;If you are a new AWS customer, you qualify for &lt;a href="http://aws.amazon.com/free/"&gt;free AWS hosting&lt;/a&gt; for one year with the smallest &lt;strong&gt;t1.micro&lt;/strong&gt; instance. This is probably enough horsepower  to run a very low traffic Plone 4 site, but I wouldn&amp;#8217;t recommend trying to run Plone 3, or any site that has a significant amount of traffic. The t1.micro instance size is great for making demo sites or test instances, but should not be considered ideal for a production site.&lt;/li&gt;
&lt;li&gt;The startup script is the script that will be run the first time the EC2 instance starts up. This makes it possible to use a very generic AMI, and then use the startup script to bootstrap the server with all the dependencies needed to run Plone. This is also where you can customize the script to take care of things specific to your Plone site, such as importing data.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here is an example of an atypical startup script, but one that I think we&amp;#8217;ll be making more use of in the future. I found out about this at the Plone Conference when Alan Runyan mentioned on a discussion list that his company Enfold Systems had come up with an Ubuntu package for Plone. This means that to install Plone, you literally can type: &lt;strong&gt;apt-get install plone-default&lt;/strong&gt;, which will install Plone 4 and a default Plone site. This startup script makes use of this Ubuntu package to bootstrap the server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;etc/startup-demo-server.sh:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- p.p1 {margin: 0.0px 0.0px 19.0px 0.0px; font: 20.0px Courier} p.p2 {margin: 0.0px 0.0px 19.0px 0.0px; font: 20.0px Courier; min-height: 24.0px} span.s1 {letter-spacing: 0.0px} span.s2 {text-decoration: underline ; letter-spacing: 0.0px} --&gt;&lt;/p&gt;
&lt;pre&gt;#!/bin/bash
set -e -x
export DEBIAN_FRONTEND=noninteractive
wget &lt;a href="http://www.enfoldsystems.com/pubkey.gpg"&gt;http://www.enfoldsystems.com/pubkey.gpg
&lt;/a&gt;apt-key add ./pubkey.gpg
echo "deb &lt;a href="http://dist.clients.enfoldsystems.com/ubuntu"&gt;http://dist.clients.enfoldsystems.com/ubuntu&lt;/a&gt; lucid universe" &amp;gt;&amp;gt; /etc/apt/sources.list
apt-get update &amp;amp;&amp;amp; apt-get upgrade -y --force-yes
apt-get install plone-default -y --force-yes
/etc/init.d/plone-default&lt;/pre&gt;
&lt;p&gt;What this script does it essentially add the plone-default and plone4 packages to your apt sources.list file, and then installs Plone 4 on the server and sets up a default Plone site, and starts it up. What&amp;#8217;s great about this way of installing Plone is that it&amp;#8217;s very fast since all the eggs are already pre-compiled for your platform (no need to install gcc), and you don&amp;#8217;t have to run buildout on the server which can often be very error-prone and risky.&lt;/p&gt;
&lt;p&gt;The last thing that you need to do is set up your AWS key and secret key. The way I do this is by making a simple bash script with the following:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;setkeys.sh&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- p.p1 {margin: 0.0px 0.0px 19.0px 0.0px; font: 17.0px Courier} span.s1 {letter-spacing: 0.0px} --&gt;&lt;/p&gt;
&lt;pre&gt;#!/bin/bash
export AWS_ACCESS_KEY_ID="&amp;lt;your_access_key_id&amp;gt;"
export AWS_SECRET_ACCESS_KEY="&amp;lt;your_secret_access_key&amp;gt;"&lt;/pre&gt;
&lt;p&gt;Obviously, you need to replace the &amp;lt;your_access_key_id&amp;gt; and &amp;lt;your_secret_access_key&amp;gt; with your actual keys which you can find by logging into &lt;a href="http://aws.amazon.com"&gt;aws.amazon.com&lt;/a&gt;, and clicking on the &lt;a href="https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;amp;action=access-key"&gt;Security Credentials tab&lt;/a&gt;.&lt;/p&gt;
&lt;div id="attachment_552" class="wp-caption alignright" style="width: 310px"&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/11/security-credentials.jpg"&gt;&lt;img class="size-medium wp-image-552" title="security-credentials" src="http://jazkarta.files.wordpress.com/2010/11/security-credentials.jpg?w=300&amp;#038;h=214" alt="" width="300" height="214" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Getting your access key and secret key&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Then to set these environment variables:&lt;/p&gt;
&lt;pre&gt;$ source setkeys.sh&lt;/pre&gt;
&lt;p&gt;Once your keys are set, and you have the aws.conf file and startup-demo-server.sh script in place, then you can run your buildout and try starting up a demo-server on Amazon:&lt;/p&gt;
&lt;pre&gt;$ ./bin/buildout -v
...
$ ./bin/aws start demo-server&lt;/pre&gt;
&lt;p&gt;&lt;!-- p.p1 {margin: 0.0px 0.0px 19.0px 0.0px; font: 17.0px Courier} span.s1 {letter-spacing: 0.0px} --&gt;&lt;/p&gt;
&lt;pre&gt;INFO: Instance 'demo-server' unavailable
INFO: Creating instance 'demo-server'
INFO: Instance created, waiting until it's available
....
INFO: Instance 'demo-server' available
INFO: Instance running.
INFO: Instances DNS name ec2-50-16-25-92.compute-1.amazonaws.com
INFO: Instances public DNS name ec2-50-16-25-92.compute-1.amazonaws.com
&lt;strong&gt; &lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;Your site is now running at http://ec2-50-16-25-92.compute-1.amazonaws.com:8080. You&amp;#8217;ll need to substitute the domain name that is returned when you run this command, and remember to put the port :8080 at the end, since we haven&amp;#8217;t set up an Apache vhost to proxy requests from port 80 to 8080.&lt;/p&gt;
&lt;p&gt;Within a few minutes you should see the &lt;strong&gt;Welcome to Plone &lt;/strong&gt;screen!&lt;/p&gt;
&lt;p&gt;Please note that if you are not a new AWS customer, or you already have a t1.micro instance running, you will be charged by Amazon for every hour that this instance is running, so when you&amp;#8217;re done evaluating it, you should either stop it (if you used an EBS bootable instance), or terminate it (if you used an instance store).&lt;/p&gt;
&lt;pre&gt;$ ./bin/aws stop demo-server
$ ./bin/aws terminate demo-server&lt;/pre&gt;
&lt;p&gt;You can also stop the instance from the AWS console or using ElasticFox. That&amp;#8217;s it!  Hope you&amp;#8217;ve found this little tutorial useful, and let me know if you have any questions about how mr.awsome or Amazon EC2 works for hosting Plone sites.&lt;/p&gt;
&lt;br /&gt; Tagged: &lt;a href='http://blog.jazkarta.com/tag/amazon/'&gt;amazon&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/aws/'&gt;aws&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/ec2/'&gt;ec2&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/plone/'&gt;Plone&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jazkarta.wordpress.com/544/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jazkarta.wordpress.com/544/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jazkarta.wordpress.com/544/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jazkarta.wordpress.com/544/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jazkarta.wordpress.com/544/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jazkarta.wordpress.com/544/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jazkarta.wordpress.com/544/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jazkarta.wordpress.com/544/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jazkarta.wordpress.com/544/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jazkarta.wordpress.com/544/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jazkarta.wordpress.com/544/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jazkarta.wordpress.com/544/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jazkarta.wordpress.com/544/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jazkarta.wordpress.com/544/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;amp;blog=11374782&amp;amp;post=544&amp;amp;subd=jazkarta&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=B2KTV6CQrrU:9cnK_sI5B5o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=B2KTV6CQrrU:9cnK_sI5B5o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=B2KTV6CQrrU:9cnK_sI5B5o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=B2KTV6CQrrU:9cnK_sI5B5o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=B2KTV6CQrrU:9cnK_sI5B5o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=B2KTV6CQrrU:9cnK_sI5B5o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JazkartaBlog/~4/B2KTV6CQrrU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.jazkarta.com/2010/11/08/intro-to-mrawsome/#comments" thr:count="5" />
		<link rel="replies" type="application/atom+xml" href="http://blog.jazkarta.com/2010/11/08/intro-to-mrawsome/feed/atom/" thr:count="5" />
		<thr:total>5</thr:total>
	<feedburner:origLink>http://blog.jazkarta.com/2010/11/08/intro-to-mrawsome/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>natea</name>
						<uri>http://natea.wordpress.com/</uri>
					</author>
		<title type="html"><![CDATA[Scalable Plone hosting with Amazon EC2]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.jazkarta.com/~r/JazkartaBlog/~3/o3A2cqS5PnY/" />
		<id>http://blog.jazkarta.com/?p=541</id>
		<updated>2010-11-08T01:52:33Z</updated>
		<published>2010-11-08T01:23:57Z</published>
		<category scheme="http://blog.jazkarta.com" term="Amazon Web Services" /><category scheme="http://blog.jazkarta.com" term="Conferences" /><category scheme="http://blog.jazkarta.com" term="Content Management Systems" /><category scheme="http://blog.jazkarta.com" term="Higher Ed" /><category scheme="http://blog.jazkarta.com" term="Plone" />		<summary type="html"><![CDATA[At the recent Plone Conference in Bristol, UK, I had the privilege of giving a talk about Scalable Plone hosting with Amazon EC2. In particular, the talk centered around a project that we did recently with Rice University. Rice has been at the forefront of online teaching and learning platforms with their Plone-powered Connexions site which [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;blog=11374782&amp;post=541&amp;subd=jazkarta&amp;ref=&amp;feed=1" width="1" height="1" />]]></summary>
		<content type="html" xml:base="http://blog.jazkarta.com/2010/11/08/scalable-plone-hosting-with-amazon-ec2/">&lt;p&gt;At the recent &lt;a href="http://www.ploneconf2010.org/"&gt;Plone Conference&lt;/a&gt; in Bristol, UK, I had the privilege of giving a talk about &lt;a href="http://www.ploneconf2010.org/the-event/talks/scalable-and-high-availability-plone-hosting-with-amazon-ec2-for-rice-universitys-enterprise-rhaptos-open-education-platform"&gt;Scalable Plone hosting with Amazon EC2&lt;/a&gt;. In particular, the talk centered around a project that we did recently with Rice University. Rice has been at the forefront of online teaching and learning platforms with their Plone-powered &lt;a href="http://www.cnx.org"&gt;Connexions&lt;/a&gt; site which serves more than 2 million visitors every month! In fact, I remember first hearing about Connexions at the very first Plone conference in New Orleans, so they&amp;#8217;ve been around for a long time, and publish an excellent &lt;a href="http://devblog.cnx.org/"&gt;development blog&lt;/a&gt;. The Connexions project is a significant showcase for the power and flexibility of Plone as a development platform.&lt;/p&gt;
&lt;p&gt;What&amp;#8217;s even more cool is that they&amp;#8217;ve open-sourced the software that powers the www.cnx.org site as &lt;a href="http://rhaptos.org"&gt;Rhaptos&lt;/a&gt;, so if you want to set up your own open learning platform, you can check out the code and be up and running in minutes.&lt;/p&gt;
&lt;p&gt;But it didn&amp;#8217;t always used to be this easy though. The suite of software that powers a Rhaptos site has evolved over the years, and has grown into a formidable stack. In order to get this software installed on a server used to require many hours of reading documentation and manual steps.&lt;/p&gt;
&lt;p&gt;One reason that Rice hired Enfold Systems and Jazkarta was to get expert assistance in getting the Rhaptos software stack up to modern standards with buildout to make a repeatable deployment and a full test suite to ensure that bugs would be identified more quickly when running tests. Enfold did this beautifully, and then it was Jazkarta&amp;#8217;s job to make it easy to deploy Rhaptos up onto an Amazon EC2 instance with just a few commands. For this we used &lt;a href="http://pypi.python.org/pypi/mr.awsome"&gt;mr.awsome&lt;/a&gt;, a buildout recipe written by Florian Schulze from Jarn.&lt;/p&gt;
&lt;p&gt;You can see the &lt;a href="https://trac.rhaptos.org/trac/rhaptos/browser/aws/buildout/trunk"&gt;AWS buildout&lt;/a&gt; that we created to deploy not only test/demo instances but full multi-server &lt;a href="https://trac.rhaptos.org/trac/rhaptos/browser/aws/buildout/trunk/production.cfg"&gt;production&lt;/a&gt; deployments of Rhaptos and CNX. There&amp;#8217;s also &lt;a href="https://trac.rhaptos.org/trac/rhaptos/browser/aws/buildout/trunk/docs-source"&gt;full Sphinx-based documentation&lt;/a&gt; that explains how to use the buildout and launch new instances of Rhaptos on Amazon EC2.&lt;/p&gt;
&lt;p&gt;Since I completely spaced at the end of my talk, and forgot to invite Mark and Roche to come up and tell people about the conference sprint, I don&amp;#8217;t want to forget this time. The next sprint is happening at the&lt;a href="http://devblog.cnx.org/2010/10/sprint-with-us.html"&gt; Connexions conference on February 10&lt;/a&gt;, so if you&amp;#8217;re a developer interested in working on Connexions/Rhaptos, this is an excellent opportunity to get involved and meet the core developers.&lt;/p&gt;
&lt;p&gt;Here is the &lt;a href="http://ploneconference2010.blip.tv/file/4322131/"&gt;video&lt;/a&gt; and &lt;a href="http://www.slideshare.net/Jazkarta/scalable-plone-hosting-with-amazon-ec2-for-rice-universitys-rhaptos-open-learning-platform"&gt;slides&lt;/a&gt; from my talk:&lt;/p&gt;
&lt;script type="text/javascript" src="http://blip.tv/syndication/write_player?skin=js&amp;posts_id=4340791&amp;cross_post_destination=-1&amp;view=full_js"&gt;&lt;/script&gt;
&lt;iframe src='http://www.slideshare.net/slideshow/embed_code/5697561' width='600' height='492'&gt;&lt;/iframe&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jazkarta.wordpress.com/541/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jazkarta.wordpress.com/541/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jazkarta.wordpress.com/541/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jazkarta.wordpress.com/541/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jazkarta.wordpress.com/541/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jazkarta.wordpress.com/541/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jazkarta.wordpress.com/541/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jazkarta.wordpress.com/541/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jazkarta.wordpress.com/541/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jazkarta.wordpress.com/541/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jazkarta.wordpress.com/541/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jazkarta.wordpress.com/541/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jazkarta.wordpress.com/541/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jazkarta.wordpress.com/541/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;amp;blog=11374782&amp;amp;post=541&amp;amp;subd=jazkarta&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=o3A2cqS5PnY:Ju3qSJtA0gk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=o3A2cqS5PnY:Ju3qSJtA0gk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=o3A2cqS5PnY:Ju3qSJtA0gk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=o3A2cqS5PnY:Ju3qSJtA0gk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=o3A2cqS5PnY:Ju3qSJtA0gk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=o3A2cqS5PnY:Ju3qSJtA0gk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JazkartaBlog/~4/o3A2cqS5PnY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.jazkarta.com/2010/11/08/scalable-plone-hosting-with-amazon-ec2/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://blog.jazkarta.com/2010/11/08/scalable-plone-hosting-with-amazon-ec2/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://blog.jazkarta.com/2010/11/08/scalable-plone-hosting-with-amazon-ec2/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>carlosdelaguardia</name>
					</author>
		<title type="html"><![CDATA[Plone quick-start: easily evaluate Plone using Amazon EC2]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.jazkarta.com/~r/JazkartaBlog/~3/QVa29jXIJGw/" />
		<id>http://blog.jazkarta.com/?p=531</id>
		<updated>2010-09-29T03:44:59Z</updated>
		<published>2010-09-28T20:56:59Z</published>
		<category scheme="http://blog.jazkarta.com" term="Amazon Web Services" /><category scheme="http://blog.jazkarta.com" term="Content Management Systems" /><category scheme="http://blog.jazkarta.com" term="Plone" /><category scheme="http://blog.jazkarta.com" term="Web Services" />		<summary type="html"><![CDATA[Plone 4 is undoubtedly one of the best open source content management systems out there, and it&#8217;s also very easy to download and install. However, there are times when you just need a quick evaluation or have to set up a test or demo site that people at different locations can use. In those cases, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;blog=11374782&amp;post=531&amp;subd=jazkarta&amp;ref=&amp;feed=1" width="1" height="1" />]]></summary>
		<content type="html" xml:base="http://blog.jazkarta.com/2010/09/28/plone-quick-start-easily-evaluate-plone-using-amazon-web-services/">&lt;p&gt;Plone 4 is undoubtedly one of the best open source content management systems out there, and it&amp;#8217;s also very easy to &lt;a title="Download Plone" href="http://www.jazkarta.com/plone-ami-signup"&gt;download and install&lt;/a&gt;. However, there are times when you just need a quick evaluation or have to set up a test or demo site that people at different locations can use. In those cases, our Plone quick-start instances may be just what you need.&lt;/p&gt;
&lt;p&gt;To quickly and painlessly get your own Plone site, you&amp;#8217;ll need an &lt;a title="Amazon Web Services" href="http://aws.amazon.com/"&gt;Amazon Web Services&lt;/a&gt; account. Running your Plone site there is not free but it&amp;#8217;s comparatively cheap and the set up cost is zero. We have prepared a couple of fully featured Plone Amazon Machine Images (AMIs), so all you need to do is &lt;a title="Plone quick-start with AWS" href="http://www.jazkarta.com/plone-ami-signup"&gt;fill out this form&lt;/a&gt; to add the Plone image that you want to use to your AWS account. You can be up and running in minutes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is included with the &lt;a title="Plone quick-start with AWS" href="http://www.jazkarta.com/plone-ami-signup"&gt;Plone quick-start AMI&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Latest stable releases of Plone: 4.0 or 3.3.5&lt;/li&gt;
&lt;li&gt;Apache is configured to proxy to Varnish for caching&lt;/li&gt;
&lt;li&gt;Varnish is configured to proxy to Zope&lt;/li&gt;
&lt;li&gt;CacheFu is included (Products.CacheSetup for Plone 3.3.5, plone.app.caching for Plone 4.0)&lt;/li&gt;
&lt;li&gt;Supervisor is used to start/stop the Zope instance&lt;/li&gt;
&lt;li&gt;Backups of the Data.fs file are run daily (incremental) and weekly (full)&lt;/li&gt;
&lt;li&gt;ZODB packing prior to backups&lt;/li&gt;
&lt;li&gt;Logfile rotation of Zope logs&lt;/li&gt;
&lt;li&gt;Start/stop the instance and only pay Amazon while the instance is running. Stop the instance and not lose your data.&lt;/li&gt;
&lt;li&gt;Full SSH access to the server using your keypair for further configuration and customization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that at the moment we only have set up the Plone AMIs for the US East region. If you are interested in having them available for other regions, please leave a comment on this post. We&amp;#8217;ll consider adding other regions if there&amp;#8217;s enough interest.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jazkarta.wordpress.com/531/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jazkarta.wordpress.com/531/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jazkarta.wordpress.com/531/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jazkarta.wordpress.com/531/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jazkarta.wordpress.com/531/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jazkarta.wordpress.com/531/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jazkarta.wordpress.com/531/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jazkarta.wordpress.com/531/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jazkarta.wordpress.com/531/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jazkarta.wordpress.com/531/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jazkarta.wordpress.com/531/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jazkarta.wordpress.com/531/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jazkarta.wordpress.com/531/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jazkarta.wordpress.com/531/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;amp;blog=11374782&amp;amp;post=531&amp;amp;subd=jazkarta&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=QVa29jXIJGw:VVL86t3FKDw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=QVa29jXIJGw:VVL86t3FKDw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=QVa29jXIJGw:VVL86t3FKDw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=QVa29jXIJGw:VVL86t3FKDw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=QVa29jXIJGw:VVL86t3FKDw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=QVa29jXIJGw:VVL86t3FKDw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JazkartaBlog/~4/QVa29jXIJGw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.jazkarta.com/2010/09/28/plone-quick-start-easily-evaluate-plone-using-amazon-web-services/#comments" thr:count="11" />
		<link rel="replies" type="application/atom+xml" href="http://blog.jazkarta.com/2010/09/28/plone-quick-start-easily-evaluate-plone-using-amazon-web-services/feed/atom/" thr:count="11" />
		<thr:total>11</thr:total>
	<feedburner:origLink>http://blog.jazkarta.com/2010/09/28/plone-quick-start-easily-evaluate-plone-using-amazon-web-services/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>aaronvanderlip</name>
					</author>
		<title type="html"><![CDATA[Handling large files in Plone with ore.bigfile]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.jazkarta.com/~r/JazkartaBlog/~3/XcaUr2BuOkA/" />
		<id>http://blog.jazkarta.com/?p=471</id>
		<updated>2010-09-21T20:06:15Z</updated>
		<published>2010-09-21T20:06:15Z</published>
		<category scheme="http://blog.jazkarta.com" term="Plone" />		<summary type="html"><![CDATA[Plone The Application is great. Out of the box it has a set of sensible defaults and features that are useful for a wide range of use cases. You can install Plone and without having to make any adjustments start using it immediately. The stack that Plone is built on is very flexible, but if [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;blog=11374782&amp;post=471&amp;subd=jazkarta&amp;ref=&amp;feed=1" width="1" height="1" />]]></summary>
		<content type="html" xml:base="http://blog.jazkarta.com/2010/09/21/handling-large-files-in-plone-with-ore-bigfile/">&lt;p&gt;Plone The Application is great. Out of the box it has a set of sensible defaults and features that are useful for a wide range of use cases. You can install Plone and without having to make any adjustments start using it immediately.&lt;/p&gt;
&lt;p&gt;The stack that Plone is built on is very flexible, but if you push the defaults hard enough you will begin to discover the limits. This is the scaling issue: how does the application perform under high load. For Plone, as well as many other web applications, a sure way to increase the load on the system is to have it process large files. What is a large file? The answer is &amp;#8216;it depends&amp;#8217;. For purposes of this post we will assume it is any file large enough to make Plone feel slow for the end user, or worse result in a time out.&lt;/p&gt;
&lt;p&gt;To be clear, handling large files is not a problem exclusive to Zope/Plone, it is an issue with many application servers. This description of the issue come straight from the Rails community:&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px;"&gt;&lt;em&gt;&amp;#8220;When a browser uploads a file, it encodes the contents in a format&lt;br /&gt;
called ‘multipart mime’ (it’s the same format that gets used when&lt;br /&gt;
you send an email attachment). In order for your application to do&lt;br /&gt;
something with that file, rails has to undo this encoding. To do&lt;br /&gt;
this requires reading the huge request body, and matching each line&lt;br /&gt;
against a few regular expressions. This can be incredibly slow and&lt;br /&gt;
use a huge amount of CPU and memory.&lt;/em&gt;&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px;"&gt;&lt;em&gt;While this parsing is happening your rails process is busy, and can’t&lt;br /&gt;
handle other requests. Pity the poor user stuck behind a request which&lt;br /&gt;
contains a 100M upload!&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://therailsway.com/tags/porter"&gt;http://therailsway.com/tags/porter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Plone has the same issue of thread blocking. Let&amp;#8217;s take the example of a 15MB file uploaded to Plone, with the file contents ultimately stored as a BLOB in the ZODB.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/08/untitled.png"&gt;&lt;img class="aligncenter size-full wp-image-485" title="big-file-1" src="http://jazkarta.files.wordpress.com/2010/08/untitled.png?w=600" alt=""   /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Browser encodes file data in multipart mime format (payload) and sends  this in the request body along with additional parameters such as the  name of the file, etc.&lt;/li&gt;
&lt;li&gt;Apache receives the file and forwards the request to Zope.&lt;/li&gt;
&lt;li&gt;Zope must undo the coding, which is both CPU and memory intensive.  During this processing the Zope thread is blocked, thus unable to service  additional requests. The risk is that, in a multiple user scenario, you can  potentially tie up all available threads.&lt;/li&gt;
&lt;li&gt;Once Zope has parsed the request, it can then write the file data &amp;#8211; in this case it writes the data to ZODB BLOB storage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For many sites, having Zope process the file in the above manner is an adequate solution. The size of the uploads is not usually large, and the site traffic is not heavy. Recently however, we had a client who needed a high availability site that could handle large file uploads and downloads. We had to find a way to increase Plone&amp;#8217;s stock file handling performance. In order to do this we partnered with Kapil Thangavelu to develop both an implementation strategy and supporting code.&lt;/p&gt;
&lt;p&gt;The general strategy can be summed up as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Offload ﬁle encoding/unencoding and read/write operations from Plone.&lt;/li&gt;
&lt;li&gt;Web servers are really good at handling the above tasks.&lt;/li&gt;
&lt;li&gt;Unlike application servers, for web servers like Apache ﬁle streaming is fast and threads are cheap.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Learning from Rails&lt;/h2&gt;
&lt;p&gt;The first step is to move the file processing from Plone to Apache (or your web server of choice). A solution that comes from the Rails community is to use the &lt;a href="http://modporter.com/"&gt;ModPorter&lt;/a&gt; Apache module.&lt;/p&gt;
&lt;p&gt;In a nutshell, ModPorter does the following to an incoming request.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parses the multipart mime data&lt;/li&gt;
&lt;li&gt;Writes the ﬁle to disk&lt;/li&gt;
&lt;li&gt;Modifies the request to contain a pointer to the temp ﬁle on disk&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/08/mod-porter.png"&gt;&lt;/a&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/09/mod-porter.png"&gt;&lt;img class="aligncenter size-full wp-image-523" title="mod-porter" src="http://jazkarta.files.wordpress.com/2010/09/mod-porter.png?w=600" alt=""   /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;Clearly ModPorter is powerful magic, but we still have to integrate it with Plone. This is where Kapil&amp;#8217;s &lt;a href="http://svn.objectrealms.net/view/public/browser/ore.bigfile"&gt;ore.bigfile&lt;/a&gt; package comes into play. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;ore.bigfile provides the following:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A modified file upload widget that supports two upload methods&lt;/li&gt;
&lt;li&gt;Code to securely move the temp file created by the web server/ModPorter to BLOB Storage and link the data to a Plone File object (Blob.consumeFile).&lt;/li&gt;
&lt;li&gt;Code to provide an efficient method of downloading large files.&lt;/li&gt;
&lt;li&gt;An alternate (not CMFEditions) way of providing file versioning&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With ore.bigfile in place, once ModPorter has finished writing the file data to disk, Blob.consumeFile is called with the necessary parameters to store the data in ZODB BLOB storage. The key is that Plone only has to process a lightweight request body to create the Plone File &amp;#8211; the heavy lifting has already been done by Apache.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/08/consume-file.png"&gt;&lt;img class="aligncenter size-full wp-image-486" title="consume-file" src="http://jazkarta.files.wordpress.com/2010/08/consume-file.png?w=600" alt=""   /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I mentioned that the file upload widget supports two upload methods. The first method supports uploading via the browser, as described above. The second method supports processing a file that was uploaded using an FTP client. Browsers in general are unreliable for long upload operations. However most FTP clients support continuation in the event that the transfer is interrupted. So for very large uploads (again it depends on the speed and quality of your network), the file is first uploaded via FTP to an incoming directory. When a new File object is created in Plone, the user has a choice to upload a new file using the browser, or select from list of files that have already been uploaded to the incoming directory. Data files are swept from the incoming directory after they are used in the creation of a Plone File.&lt;/p&gt;
&lt;h2&gt;What goes up, must come down&lt;/h2&gt;
&lt;p&gt;Solving the upload problem only gets you half way there.&lt;/p&gt;
&lt;p&gt;Downloading large files will also tie up a Zope thread until the file is passed entirely to the front-end webserver. The solution is to use the second feature of ore.bigfile, which offloads the serving of the file from Zope to the front-end web server. The initial request is still handled by Plone to ensure the necessary security checks are in place, but instead of having Zope read the data from BLOB storage, ore.bigfile constructs a custom response to send to the webserver. When using Apache, the response consists of an &lt;a href="http://john.guen.in/past/2007/4/17/send_files_faster_with_xsendfile/"&gt;X-Sendfile header&lt;/a&gt; and a path to the file data in BLOB storage. This results in Apache reading the file directly from disk, instead of having to read the data from Zope. This ensures that the Zope thread is quickly released so that it can respond to new requests.&lt;/p&gt;
&lt;h2&gt;Where to go from here&lt;/h2&gt;
&lt;p&gt;To recap, the default installation of Plone is incredibly useful. It works because it makes as few assumptions as possible about the installation&amp;#8217;s environment. However for most production sites you need to begin integrating other tools &amp;#8211; such as a caching proxy &amp;#8211; to maintain system performance. In the case of caching, Plone uses a combination of internal software (Cache-Fu for example) and supporting software (Varnsih, Squid, etc.) &lt;span style="color:#000000;"&gt;As with caching, efficient large file handling could be implemented in Plone by extending the code and concepts from ore.bigfile to provide utilities that could be configured to work with common front-end webservers.&lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jazkarta.wordpress.com/471/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jazkarta.wordpress.com/471/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jazkarta.wordpress.com/471/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jazkarta.wordpress.com/471/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jazkarta.wordpress.com/471/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jazkarta.wordpress.com/471/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jazkarta.wordpress.com/471/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jazkarta.wordpress.com/471/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jazkarta.wordpress.com/471/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jazkarta.wordpress.com/471/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jazkarta.wordpress.com/471/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jazkarta.wordpress.com/471/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jazkarta.wordpress.com/471/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jazkarta.wordpress.com/471/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;amp;blog=11374782&amp;amp;post=471&amp;amp;subd=jazkarta&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=XcaUr2BuOkA:eGVsk-wBzVU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=XcaUr2BuOkA:eGVsk-wBzVU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=XcaUr2BuOkA:eGVsk-wBzVU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=XcaUr2BuOkA:eGVsk-wBzVU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=XcaUr2BuOkA:eGVsk-wBzVU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=XcaUr2BuOkA:eGVsk-wBzVU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JazkartaBlog/~4/XcaUr2BuOkA" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.jazkarta.com/2010/09/21/handling-large-files-in-plone-with-ore-bigfile/#comments" thr:count="14" />
		<link rel="replies" type="application/atom+xml" href="http://blog.jazkarta.com/2010/09/21/handling-large-files-in-plone-with-ore-bigfile/feed/atom/" thr:count="14" />
		<thr:total>14</thr:total>
	<feedburner:origLink>http://blog.jazkarta.com/2010/09/21/handling-large-files-in-plone-with-ore-bigfile/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>aaronvanderlip</name>
					</author>
		<title type="html"><![CDATA[Would you buy this guy a beer?]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.jazkarta.com/~r/JazkartaBlog/~3/OGi0-TbZZYg/" />
		<id>http://blog.jazkarta.com/?p=458</id>
		<updated>2010-05-18T23:03:27Z</updated>
		<published>2010-05-18T22:31:40Z</published>
		<category scheme="http://blog.jazkarta.com" term="Uncategorized" />		<summary type="html"><![CDATA[Attracting and keeping talented developers is the lifeblood of any open source project. Domen Kožar is one such developer.  I met Domen at the 2009 Plone Conference and he showed me a thing or two about Vim that I didn&#8217;t know. He has already contributed to a number of Plone related projects. As he is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;blog=11374782&amp;post=458&amp;subd=jazkarta&amp;ref=&amp;feed=1" width="1" height="1" />]]></summary>
		<content type="html" xml:base="http://blog.jazkarta.com/2010/05/18/would-you-buy-this-guy-a-beer/">&lt;p&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/05/5026887.jpg"&gt;&lt;img class="alignleft size-thumbnail wp-image-461" title="_5026887" src="http://jazkarta.files.wordpress.com/2010/05/5026887.jpg?w=150&amp;#038;h=112" alt="" width="150" height="112" /&gt;&lt;/a&gt;Attracting and keeping talented developers is the lifeblood of any open source project. Domen Kožar is one such developer.  I met Domen at the 2009 Plone Conference and he showed me a thing or two about Vim that I didn&amp;#8217;t know. He has already contributed to a number of Plone related projects. As he is currently a student, he needs a little help from the community so he can attend the &lt;a href="http://plone.org/events/community/sauna-sprint-2010/"&gt;Sauna &lt;/a&gt;&lt;a href="http://plone.org/events/community/sauna-sprint-2010/"&gt;Sprint&lt;/a&gt;.  I am sure a lot of us can relate to the unique financial circumstances you find yourself in as a student.  You can read more about his request &lt;a href="http://www.fubar.si/2010/5/17/sauna-sprint-2010-in-helsinki"&gt;here&lt;/a&gt;. This community has come through in the past to help a fellow member. I am asking, &lt;strong&gt;for a minimum donation of the cost of a beer in your country&lt;/strong&gt;, &lt;a href="http://ielectric.chipin.com/airplane-returning-ticket-for-plone-sauna-sprint"&gt;help Domen get to the sprint&lt;/a&gt;. Let&amp;#8217;s make this happen.&lt;/p&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jazkarta.wordpress.com/458/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jazkarta.wordpress.com/458/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jazkarta.wordpress.com/458/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jazkarta.wordpress.com/458/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jazkarta.wordpress.com/458/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jazkarta.wordpress.com/458/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jazkarta.wordpress.com/458/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jazkarta.wordpress.com/458/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jazkarta.wordpress.com/458/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jazkarta.wordpress.com/458/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jazkarta.wordpress.com/458/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jazkarta.wordpress.com/458/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jazkarta.wordpress.com/458/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jazkarta.wordpress.com/458/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;amp;blog=11374782&amp;amp;post=458&amp;amp;subd=jazkarta&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=OGi0-TbZZYg:6nUglPw1RnQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=OGi0-TbZZYg:6nUglPw1RnQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=OGi0-TbZZYg:6nUglPw1RnQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=OGi0-TbZZYg:6nUglPw1RnQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=OGi0-TbZZYg:6nUglPw1RnQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=OGi0-TbZZYg:6nUglPw1RnQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JazkartaBlog/~4/OGi0-TbZZYg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.jazkarta.com/2010/05/18/would-you-buy-this-guy-a-beer/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.jazkarta.com/2010/05/18/would-you-buy-this-guy-a-beer/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.jazkarta.com/2010/05/18/would-you-buy-this-guy-a-beer/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>natea</name>
						<uri>http://natea.wordpress.com/</uri>
					</author>
		<title type="html"><![CDATA[Announcing deliveranceproject.org, a new home for Deliverance]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.jazkarta.com/~r/JazkartaBlog/~3/tDI6905p4_0/" />
		<id>http://blog.jazkarta.com/?p=447</id>
		<updated>2010-05-16T04:26:59Z</updated>
		<published>2010-05-16T10:00:36Z</published>
		<category scheme="http://blog.jazkarta.com" term="Conferences" /><category scheme="http://blog.jazkarta.com" term="Deliverance" /><category scheme="http://blog.jazkarta.com" term="Plone" /><category scheme="http://blog.jazkarta.com" term="cmsexpo" /><category scheme="http://blog.jazkarta.com" term="cmsx" /><category scheme="http://blog.jazkarta.com" term="deliverance" /><category scheme="http://blog.jazkarta.com" term="pse2010" /><category scheme="http://blog.jazkarta.com" term="theming" /><category scheme="http://blog.jazkarta.com" term="xdv" />		<summary type="html"><![CDATA[At the CMSExpo 2010 conference in Chicago, Chris Johnson from ifPeople asked me what URL to give people who were interested in learning more about Deliverance. I was embarrassed to say that there wasn&#8217;t really a good landing page &#8211; the page on coactivate.org was outdated, and the Deliverance documentation was not exactly very welcoming [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;blog=11374782&amp;post=447&amp;subd=jazkarta&amp;ref=&amp;feed=1" width="1" height="1" />]]></summary>
		<content type="html" xml:base="http://blog.jazkarta.com/2010/05/16/announcing-deliveranceproject-org-a-new-home-for-deliverance/">&lt;p&gt;&lt;a href="http://deliveranceproject.org"&gt;&lt;img class="alignright size-full wp-image-448" title="dp_logo" src="http://jazkarta.files.wordpress.com/2010/05/dp_logo.gif?w=600" alt=""   /&gt;&lt;/a&gt;At the &lt;a href="http://cmsexpo.net"&gt;CMSExpo 2010&lt;/a&gt; conference in Chicago, Chris Johnson from ifPeople asked me what URL to give people who were interested in learning more about Deliverance.&lt;/p&gt;
&lt;p&gt;I was embarrassed to say that there wasn&amp;#8217;t really a good landing page &amp;#8211; the page on &lt;a href="http://coactivate.org/projects/deliverance"&gt;coactivate.org&lt;/a&gt; was outdated, and the &lt;a href="http://packages.python.org/Deliverance/"&gt;Deliverance documentation&lt;/a&gt; was not exactly very welcoming to a newcomers.&lt;/p&gt;
&lt;p&gt;I had registered the domain name deliveranceproject.org awhile ago and even had my brother Luke put together this logo you see to the right.&lt;/p&gt;
&lt;p&gt;I was &lt;a href="http://www.coactivate.org/projects/deliverance/lists/deliverance-discussion/archive/2009/12/1260671149815/forum_view"&gt;intending to&lt;/a&gt; make the site a showcase of Deliverance itself, bringing the &lt;a href="http://packages.python.org/Deliverance/"&gt;documentation&lt;/a&gt;, &lt;a href="http://www.coactivate.org/projects/deliverance/lists/deliverance-discussion"&gt;mailing list archive&lt;/a&gt;, &lt;a href="http://codespeak.net/svn/z3/deliverance/trunk/"&gt;code repository&lt;/a&gt; and &lt;a href="https://projects.openplans.org/deliverance/"&gt;Trac site&lt;/a&gt; under a single umbrella with a unified theme using Deliverance.&lt;/p&gt;
&lt;p&gt;But as my colleague Aaron likes to say, &amp;#8220;The perfect is the enemy of the good enough,&amp;#8221; and I never launched the site because it wasn&amp;#8217;t ready.  So I pinged Aaron in the morning of the first day of the conference and said, &amp;#8220;How quickly can you whip up a static page for deliveranceproject.org&amp;#8221;. He said 1 hr, and one hour later, &lt;a href="http://deliveranceproject.org"&gt;deliveranceproject.org&lt;/a&gt; was born! Thanks Aaron for the quick turnaround. Chris Johnson quickly updated his slides to include this URL, as did I.&lt;/p&gt;
&lt;h2&gt;DeliveranceProject.org&lt;/h2&gt;
&lt;p&gt;The &lt;a href="http://deliveranceproject.org"&gt;site&lt;/a&gt; is purposely a very simple one-page of information with links and a couple embedded presentations. Eventually we may expand it to have more examples and showcase what cool things you can do with Deliverance, but for now it serves it&amp;#8217;s purpose: a place to direct you to other resources.&lt;/p&gt;
&lt;p&gt;I also have Aaron to thank for his expertly prepared &lt;a href="http://www.slideshare.net/Jazkarta/deliverance-talk-at-plone-meetup"&gt;slides about Deliverance&lt;/a&gt; which he put together for &lt;a href="http://blog.jazkarta.com/2010/04/28/world-plone-day-in-boston/"&gt;World Plone Day Boston&lt;/a&gt;, and which I re-purposed for my &lt;a href="http://cmsexpo.net/plone/493-plone-site-theming"&gt;talk at CMSExpo&lt;/a&gt;, with a few extra easter eggs thrown in.  Here are the &lt;a href="http://www.slideshare.net/Jazkarta/theming-websites-effortlessly-with-deliverance-cmsexpo-2010"&gt;slides&lt;/a&gt;:&lt;/p&gt;
&lt;iframe src='http://www.slideshare.net/slideshow/embed_code/3965791' width='600' height='492'&gt;&lt;/iframe&gt;
&lt;p&gt;There&amp;#8217;s also a &lt;a href="http://qik.com/video/6472945"&gt;video&lt;/a&gt; that I recorded on my &lt;a href="http://google.com/phone"&gt;Nexus One&lt;/a&gt; using Qik. I&amp;#8217;m not really sure why the video is rotated, but hopefully your neck won&amp;#8217;t get strained too much.&lt;/p&gt;
&lt;p&gt;I think we were somewhat successful in spreading the good news about Deliverance to the conference goers, especially the non-Plone people from the Drupal, Joomla! and WordPress communities. A couple guys who were in my session said it was the highlight of the conference for them, and another guy said that learning about Deliverance saved him $9,000 that he otherwise would have had to pay an outside consultant to build a Plone theme add-on.&lt;/p&gt;
&lt;h2&gt;Deliverance training opportunity&lt;/h2&gt;
&lt;p&gt;If you&amp;#8217;re interested in learning more about using Deliverance to theme your Plone site, or any site for that matter, I&amp;#8217;ll be teaching a class right before the Plone Symposium East conference on May 24. There are still spots left, so if you want to take your theming knowledge to the next level, &lt;a href="http://plone-theming-with-deliverance-blog.eventbrite.com/"&gt;register today&lt;/a&gt; for the class.&lt;/p&gt;
&lt;p&gt;Take my class on monday and then go to Chrissy&amp;#8217;s theming Plone or Steve McMahon&amp;#8217;s Javascript, jQuery and jQuery Tools classes on tuesday and wednesday, or Tres and Chris class on WSGI. See all the &lt;a href="http://weblion.psu.edu/symposium/training"&gt;excellent training classes&lt;/a&gt; that are offered at very reasonable prices.&lt;/p&gt;
&lt;br /&gt; Tagged: &lt;a href='http://blog.jazkarta.com/tag/cmsexpo/'&gt;cmsexpo&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/cmsx/'&gt;cmsx&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/deliverance/'&gt;deliverance&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/plone/'&gt;Plone&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/pse2010/'&gt;pse2010&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/theming/'&gt;theming&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/xdv/'&gt;xdv&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jazkarta.wordpress.com/447/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jazkarta.wordpress.com/447/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jazkarta.wordpress.com/447/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jazkarta.wordpress.com/447/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jazkarta.wordpress.com/447/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jazkarta.wordpress.com/447/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jazkarta.wordpress.com/447/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jazkarta.wordpress.com/447/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jazkarta.wordpress.com/447/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jazkarta.wordpress.com/447/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jazkarta.wordpress.com/447/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jazkarta.wordpress.com/447/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jazkarta.wordpress.com/447/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jazkarta.wordpress.com/447/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;amp;blog=11374782&amp;amp;post=447&amp;amp;subd=jazkarta&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=tDI6905p4_0:h-edbRrtv5M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=tDI6905p4_0:h-edbRrtv5M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=tDI6905p4_0:h-edbRrtv5M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=tDI6905p4_0:h-edbRrtv5M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=tDI6905p4_0:h-edbRrtv5M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=tDI6905p4_0:h-edbRrtv5M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JazkartaBlog/~4/tDI6905p4_0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.jazkarta.com/2010/05/16/announcing-deliveranceproject-org-a-new-home-for-deliverance/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://blog.jazkarta.com/2010/05/16/announcing-deliveranceproject-org-a-new-home-for-deliverance/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://blog.jazkarta.com/2010/05/16/announcing-deliveranceproject-org-a-new-home-for-deliverance/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>natea</name>
						<uri>http://natea.wordpress.com/</uri>
					</author>
		<title type="html"><![CDATA[Rapid deployment of Plone to Amazon EC2]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.jazkarta.com/~r/JazkartaBlog/~3/R4_LSH_gYmE/" />
		<id>http://blog.jazkarta.com/?p=395</id>
		<updated>2010-05-16T02:54:16Z</updated>
		<published>2010-05-16T02:54:16Z</published>
		<category scheme="http://blog.jazkarta.com" term="Amazon Web Services" /><category scheme="http://blog.jazkarta.com" term="Higher Ed" /><category scheme="http://blog.jazkarta.com" term="Plone" /><category scheme="http://blog.jazkarta.com" term="amazon" /><category scheme="http://blog.jazkarta.com" term="cloud" /><category scheme="http://blog.jazkarta.com" term="cms" /><category scheme="http://blog.jazkarta.com" term="connexions" /><category scheme="http://blog.jazkarta.com" term="courseware" /><category scheme="http://blog.jazkarta.com" term="deployment" /><category scheme="http://blog.jazkarta.com" term="ec2" /><category scheme="http://blog.jazkarta.com" term="education" /><category scheme="http://blog.jazkarta.com" term="hosting" /><category scheme="http://blog.jazkarta.com" term="ploneconf2009" /><category scheme="http://blog.jazkarta.com" term="rhaptos" /><category scheme="http://blog.jazkarta.com" term="zope" />		<summary type="html"><![CDATA[If you were at my Plone hosting on Amazon EC2 talk at the Plone Conference 2009 in Budapest, you know that I have a keen interest in making it easier to get a Plone site deployed and running on a production server. While there are many hosting providers that offer VPS machines or &#8220;slices&#8221;, none of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;blog=11374782&amp;post=395&amp;subd=jazkarta&amp;ref=&amp;feed=1" width="1" height="1" />]]></summary>
		<content type="html" xml:base="http://blog.jazkarta.com/2010/05/16/rapid-deployment-of-plone-to-amazon-ec2/">&lt;p&gt;If you were at my Plone hosting on Amazon EC2 talk at the &lt;a href="http://ploneconf2009.org"&gt;Plone Conference 2009&lt;/a&gt; in Budapest, you know that I have a keen interest in making it easier to get a Plone site deployed and running on a production server. While there are many hosting providers that offer VPS machines or  &amp;#8220;slices&amp;#8221;, none of them come close to providing the level of scalability  and flexibility that Amazon provides. Whether you want a single small  server or a cluster of highly available machines that auto-scale as  traffic and resources on your site increases, Amazon offers room to grow  as your needs change over time.&lt;/p&gt;
&lt;p&gt;Here is the &lt;a href="http://blip.tv/file/3147066"&gt;video&lt;/a&gt; and &lt;a href="http://www.slideshare.net/Jazkarta/plone-on-ec2"&gt;presentation slides&lt;/a&gt; of my talk:&lt;/p&gt;
&lt;script type="text/javascript" src="http://blip.tv/syndication/write_player?skin=js&amp;posts_id=3166666&amp;cross_post_destination=-1&amp;view=full_js"&gt;&lt;/script&gt;
&lt;iframe src='http://www.slideshare.net/slideshow/embed_code/4113052' width='600' height='492'&gt;&lt;/iframe&gt;
&lt;h2&gt;Case study: Deploying Plone-powered Rhaptos software to Amazon EC2&lt;/h2&gt;
&lt;p&gt;On a recent customer project with Rice University, I had the opportunity to explore using &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2&lt;/a&gt; to deploy the &lt;a href="http://rhaptos.org"&gt;Rhaptos&lt;/a&gt; software. Rhaptos is the open source software built on Plone that powers &lt;a href="http://www.cnx.org"&gt;Connexions&lt;/a&gt;, a web-based repository of educational materials. I remember hearing about Connexions at the very first &lt;a href="http://plone.org/events/conferences/new-orleans-2003"&gt;Plone Conference 2003&lt;/a&gt; in New Orleans, and being very impressed with what they had built on top of Plone.&lt;/p&gt;
&lt;p&gt;In this 2006 &lt;a href="http://www.ted.com/talks/richard_baraniuk_on_open_source_learning.html"&gt;TED talk&lt;/a&gt; by Connexions founder Richard Baraniuk, he explains the vision behind Connexions : cutting out the textbook and allowing teachers to share and modify  course materials freely, anywhere in the world.&lt;/p&gt;
&lt;p&gt;The Connexions team is taking it a step further and making it even easier for prospective universities to evaluate and run Rhaptos by providing a &lt;a href="http://enterpriserhaptos.org/new-features.html"&gt;cloud-based hosting solution&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Scalable infrastructure&lt;/h2&gt;
&lt;p&gt;The Connexions site gets over 1,500,000 visitors per month, so having an infrastructure that is built to handle this amount of traffic is essential. Using Amazon&amp;#8217;s &lt;a href="http://aws.amazon.com/elasticloadbalancing/"&gt;Elastic Load Balancing&lt;/a&gt; (ELB), &lt;a href="http://aws.amazon.com/autoscaling/"&gt;auto-scaling&lt;/a&gt; and &lt;a href="http://aws.amazon.com/cloudfront/"&gt;CloudFront&lt;/a&gt; as a CDN, plus the ease with which you can launch additional instances to run as Zeo clients, makes Amazon a perfect platform on which to build a highly scalable Plone site.&lt;/p&gt;
&lt;h2&gt;Fault tolerance and disaster recovery&lt;/h2&gt;
&lt;p&gt;In addition, the servers that currently host the Connexions site are located at Rice University in Houston, which is in hurricane territory. One reason for exploring a cloud-based hosting strategy is to provide a backup plan in the event that a hurricane were to strike Houston and take out the Rice University data center, the entire operation could be quickly deployed up on Amazon EC2.&lt;/p&gt;
&lt;h2&gt;Easy testing and demoing&lt;/h2&gt;
&lt;p&gt;Another advantage of building this deployment strategy is that new EC2 instances can quickly be launched for testing or demo purposes. For example, if another university wants to have their own sandbox to explore the Rhaptos software, they can very easily launch a machine that has all the software pre-installed and ready to use.&lt;/p&gt;
&lt;p&gt;Or if you want to run a &lt;a href="http://buildbot.net/"&gt;buildbot&lt;/a&gt; farm to run unit tests or functional tests, Amazon EC2 makes that very easy &amp;#8211; and you only pay for the time that the machine is active. Once the tests are completed, you can shut down the machine and stop paying for it.&lt;/p&gt;
&lt;p&gt;As you will see in this blog post, launching a new server with Plone already installed on it, is a matter of typing in one command, or pointing-n-clicking in a web-based dashboard.&lt;/p&gt;
&lt;h2&gt;What makes Amazon EC2 different?&lt;/h2&gt;
&lt;p&gt;Before we get started, there are a few key concepts that I want to explain. Amazon&amp;#8217;s Web Services (AWS) differ from traditional hosting providers in several ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The virtual machines are intended to be disposable&lt;/li&gt;
&lt;li&gt;Any data you want to persist needs to be installed on Elastic Block Storage (EBS) or S3&lt;/li&gt;
&lt;li&gt;You only pay for what you use&lt;/li&gt;
&lt;li&gt;You can take a snapshot of a running instance and turn it into an Amazon Machine Image (AMI) which can be shared with others&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Instead of starting up a machine and putting all of your data on it, you typically start up a machine, attach and mount an EBS volume to it, and store all of your data on that volume. If the EC2 instance shuts down or gets terminated for any reason, your data will be safely persisted on the EBS volume. You can also take snapshots of the EBS volumes and restore from them, and you can create new EBS volumes from a saved snapshot, or share the snapshot with another Amazon AWS customer.&lt;/p&gt;
&lt;p&gt;Think of an EBS volume as an external harddrive, that you plug into the machine and access as if it were part of your file system. The performance of the EBS volumes rivals that of the local data store, so it&amp;#8217;s advised to use them wherever possible, not only for safety reasons but because you&amp;#8217;ll get better performance out of a high data I/O application such as Zope.&lt;/p&gt;
&lt;h2&gt;Rhaptos Enterprise deployment usage scenarios&lt;/h2&gt;
&lt;p&gt;For Rhaptos Enterprise, we explored 3 different scenarios for deployment balancing simplicity with flexibility. The following diagram shows these scenarios:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jazkarta.files.wordpress.com/2010/05/cnx-diagram.png"&gt;&lt;img class="alignnone size-full wp-image-441" title="cnx-diagram" src="http://jazkarta.files.wordpress.com/2010/05/cnx-diagram.png?w=600&amp;#038;h=543" alt="" width="600" height="543" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;0) Standard AMI bootstrapped with user-data script&lt;/h3&gt;
&lt;p&gt;After you&amp;#8217;ve signed up for an &lt;a href="http://www.amazon.com/gp/aws/registration/registration-form.html"&gt;Amazon AWS account&lt;/a&gt;, the next thing you would usually do is select a base AMI that you want to use. We chose a standard &lt;a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1615&amp;amp;categoryID=101"&gt;Debian Lenny AMI&lt;/a&gt; put together by the prolific &lt;a href="http://www.anvilon.com/eric/"&gt;Eric Hammond&lt;/a&gt; who also maintains an excellent &lt;a href="http://alestic.com/"&gt;blog&lt;/a&gt; about Amazon EC2. I prefer using the &lt;a href="http://uec-images.ubuntu.com/karmic/current/"&gt;official Ubuntu Karmic AMIs from Canonical&lt;/a&gt; but Connexions was already familiar with Debian, so we stuck with that for this project.&lt;/p&gt;
&lt;p&gt;We then started up a small instance on EC2 using the Debian Lenny AMI (ami-dcf615b5)  and bootstrapped it with a &lt;a href="http://alestic.com/2009/06/ec2-user-data-scripts"&gt;user-data script&lt;/a&gt; with all of our Rhaptos/CNX specific dependencies. Then we checked out the buildout on the server which initiated the dataset download and import. Everything was built from scratch which takes 30 min to 1 hr from start to finish to bootstrap the server, run the buildout and import all the data into the PostgreSQL database.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the code is always fresh since it&amp;#8217;s checked out from trunk&lt;/li&gt;
&lt;li&gt;the data is always fresh since it&amp;#8217;s downloaded every time from the repository&lt;/li&gt;
&lt;li&gt;we can check out a particular branch for testing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it takes a long time to run the buildout and import the data every time&lt;/li&gt;
&lt;li&gt;it&amp;#8217;s risky to run the buildout in place, because it can fail if there any servers that are offline&lt;/li&gt;
&lt;li&gt;the data is co-mingled with the application which can make it more tricky to upgrade&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: This first step is necessary in order to make snapshots of the AMIs and EBS volumes which are used in the other scenarios we&amp;#8217;re about to describe. This approach to deploying the stack takes a long time, so it&amp;#8217;s not very suitable for demo instances, but it is useful for testing out a particular branch of the codebase, or a specialized dataset.&lt;/p&gt;
&lt;h3&gt;1) All-in-one: AMIs containing system dependencies, application and data&lt;/h3&gt;
&lt;p&gt;In this usage scenario, we create specialized AMIs based on the standard Debian Lenny AMI, and make these AMIs publicly available in the AMI directory. These AMIs contain the entire stack necessary to run an instance of Rhaptos or Connexions software including the data. Everything lives on the EC2 instance, and no EBS volumes are mounted. These instances launch in about 3-7 minutes and Plone is running almost immediately after they&amp;#8217;ve finished booting up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;instances start up quickly because everything is pre-loaded (no need to copy large data sets and import them into the database)&lt;/li&gt;
&lt;li&gt;deployment is simple because all the software and data necessary to run the app is contained on the AMI (no need to create and mount EBS volumes)&lt;/li&gt;
&lt;li&gt;management is easy because there is just a single EC2 instance to start/stop in the control panel (no need to track down associated EBS volumes)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if instance terminates unexpectedly, all data is lost application and data are co-mingled, so cannot easily upgrade application without moving data out of the way first&lt;/li&gt;
&lt;li&gt;system and application/data are co-mingled, so cannot easily upgrade OS dependencies without moving application out of the way&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: This approach is good for demo instances and testing instances in which the server is temporal and disposable. No need for backups, redundancy, and failover. Everything is self-contained, so it makes it easy to deploy. Should not be used for production instances, because the risk for data loss is too great, and maintainability is potentially difficult.&lt;/p&gt;
&lt;h3&gt;2) AMI with system dependencies + EBS volume with application and data&lt;/h3&gt;
&lt;p&gt;In this scenario, we separate out the system dependencies that don&amp;#8217;t change very often (Squid, Postgres, Postfix, etc.) as part of the AMI, and store all of the application code (that changes more often) in an EBS&lt;br /&gt;
snapshot. When new EC2 instances are launched, a new EBS volume will be created from the master EBS snapshot, and it will already have all of the application code and data pre-loaded.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if the EC2 instance terminates for some reason, all the important data is preserved persistently on the EBS volume.&lt;/li&gt;
&lt;li&gt;updating to a new version of the application only requires mounting a new EBS volume from a snapshot of the new application code. (no need to build a whole new AMI)&lt;/li&gt;
&lt;li&gt;can update the OS level dependencies by simply launching a newly updated AMI and attaching the EBS volume to it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;introduces an EBS volume into the stack, which makes the deployment story more complex, especially for demo sites.&lt;/li&gt;
&lt;li&gt;data is co-mingled with the application, so in order to update the application, you either update in-place (risky) or move the data out of the way first.&lt;/li&gt;
&lt;li&gt;management is more complicated because you must keep track of which EBS volume is associated with which EC2 instance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; this solution adds complexity with an EBS volume, but with the benefit of persistent data storage and the added flexibility of being able to upgrade the OS level dependencies or application independently of each other. This solution is suitable for instances that are going to be around for awhile, so persistent data is important, but instances that might not be upgraded so often, so keeping the data co-mingled with the application is acceptable.&lt;/p&gt;
&lt;h3&gt;3) AMI with system dependencies + EBS volume with application + EBS volume with data&lt;/h3&gt;
&lt;p&gt;This is similar to #2, except that we introduce a 2nd EBS volume which contains the data (Data.fs and Postgres database). This requires modifying the standard Postgres layout to store the database on a volume other than where the Postgres application is stored, and modifying Zope to store it&amp;#8217;s Data.fs file on a separate volume from where the Zope instance is living.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;all the benefits of #2 separation of concerns: OS, application and data can be managed independently of each other&lt;/li&gt;
&lt;li&gt;don&amp;#8217;t need to SSH into the machine to update the application or restore data from a backup. This can all be done within the ElasticFox control panel by mounting EBS volumes from snapshots.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;more EBS volumes to manage means more complexity&lt;/li&gt;
&lt;li&gt;more EBS volumes means higher cost potentially&lt;/li&gt;
&lt;li&gt;changing the location where Postgres and Zope store their data diverges from convention&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: this solution has the most complexity, but also the most flexibility in that each part is separate and can be upgraded independently of the other parts. This way of componentizing the server architecture is advantageous from a redundancy and upgradeability perspective, but comes at the cost of more moving parts, and more places that things can become disconnected due to mismanagement of these resources.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;We chose #3 for Enterprise Rhaptos because it&amp;#8217;s the most flexible, although it&amp;#8217;s likely that an &lt;a href="http://aws.typepad.com/aws/2009/12/new-amazon-ec2-feature-boot-from-elastic-block-store.html"&gt;EBS bootable AMI&lt;/a&gt; will be created for easy launching of testing and demo instances. Thanks to Florian Schulze&amp;#8217;s &lt;a href="http://pypi.python.org/pypi/mr.awsome"&gt;mr.awsome&lt;/a&gt;, with one command, a new site can be created in a matter of minutes:&lt;/p&gt;
&lt;pre style="padding-left:30px;"&gt;$ ./bin/aws start rhaptos-partial-32
&lt;/pre&gt;
&lt;p&gt;This command will launch a new EC2 instance on a 32-bit machine, create an EBS volume from a saved EBS snapshot with a partial dataset and start the Plone site proxied behind Squid. If we wanted to launch Rhaptos on a 64-bit machine with a full dataset, we would simply substitute &amp;#8220;rhaptos-partial-32&amp;#8243; for &amp;#8220;rhaptos-full-64&amp;#8243;.&lt;/p&gt;
&lt;p&gt;Stay tuned for a future blog post describing how you can get started using mr.awsome to easily deploy your Plone sites to Amazon EC2.&lt;/p&gt;
&lt;p&gt;In the meantime, the folks at Connexions have been blogging about this virtualization project &lt;a href="http://devblog.cnx.org/2010/03/virtualization-update.html"&gt;here&lt;/a&gt; and &lt;a href="http://devblog.cnx.org/2010/04/ready-for-pre-alpha-virtualization.html"&gt;here&lt;/a&gt;. For the adventurous, you can try to follow the &lt;a href="https://trac.rhaptos.org/trac/rhaptos/wiki/AWSQuickInstall"&gt;instructions&lt;/a&gt; to launch your own copy of Enterprise Rhaptos.&lt;/p&gt;
&lt;p&gt;If you are coming to the &lt;a href="http://weblion.psu.edu/symposium"&gt;Plone Symposium&lt;/a&gt; at Penn State University in State College, PA later this month, I will be giving a talk on &lt;a href="http://weblion.psu.edu/symposium/best-practices-for-plone-hosting-and-deployment"&gt;Best Practices for Plone Hosting and Deployment&lt;/a&gt; where I will discuss these new hosting strategies for Plone and more.&lt;/p&gt;
&lt;br /&gt; Tagged: &lt;a href='http://blog.jazkarta.com/tag/amazon/'&gt;amazon&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/cloud/'&gt;cloud&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/cms-2/'&gt;cms&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/connexions/'&gt;connexions&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/courseware/'&gt;courseware&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/deployment/'&gt;deployment&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/ec2/'&gt;ec2&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/education/'&gt;education&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/hosting/'&gt;hosting&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/plone/'&gt;Plone&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/ploneconf2009/'&gt;ploneconf2009&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/rhaptos/'&gt;rhaptos&lt;/a&gt;, &lt;a href='http://blog.jazkarta.com/tag/zope/'&gt;zope&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jazkarta.wordpress.com/395/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jazkarta.wordpress.com/395/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jazkarta.wordpress.com/395/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jazkarta.wordpress.com/395/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jazkarta.wordpress.com/395/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jazkarta.wordpress.com/395/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jazkarta.wordpress.com/395/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jazkarta.wordpress.com/395/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jazkarta.wordpress.com/395/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jazkarta.wordpress.com/395/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jazkarta.wordpress.com/395/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jazkarta.wordpress.com/395/" /&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jazkarta.wordpress.com/395/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jazkarta.wordpress.com/395/" /&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.jazkarta.com&amp;amp;blog=11374782&amp;amp;post=395&amp;amp;subd=jazkarta&amp;amp;ref=&amp;amp;feed=1" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=R4_LSH_gYmE:15ILPKDeqY8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=R4_LSH_gYmE:15ILPKDeqY8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=R4_LSH_gYmE:15ILPKDeqY8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=R4_LSH_gYmE:15ILPKDeqY8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.jazkarta.com/~ff/JazkartaBlog?a=R4_LSH_gYmE:15ILPKDeqY8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JazkartaBlog?i=R4_LSH_gYmE:15ILPKDeqY8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JazkartaBlog/~4/R4_LSH_gYmE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://blog.jazkarta.com/2010/05/16/rapid-deployment-of-plone-to-amazon-ec2/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://blog.jazkarta.com/2010/05/16/rapid-deployment-of-plone-to-amazon-ec2/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://blog.jazkarta.com/2010/05/16/rapid-deployment-of-plone-to-amazon-ec2/</feedburner:origLink></entry>
	</feed>

