<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0">

    <channel>

        <title>Blog</title>
        <link>http://www.sixfeetup.com/blog</link>
        <description></description>

        <generator>basesyndication</generator>
        <!-- TODO
        <lastBuildDate>Mon, 30 Sep 2002 11:00:00 GMT</lastBuildDate>
        <copyright>Copyright 1997-2002 Dave Winer</copyright>
        <docs>http://backend.userland.com/rss</docs>
        <category domain="Syndic8">1765</category>
        <managingEditor>dave@userland.com</managingEditor>
        <webMaster>dave@userland.com</webMaster>
        -->

        <!-- TODO: Should there be an individual image associatable with each
        Weblog object?  I think so... -->
        <image>
            <title>Blog</title>
            <url>http://www.sixfeetup.com/logo.png</url>
            <link>http://www.sixfeetup.com/blog</link>
        </image>

        
            <item>
                <title>National Healthcare Marketing Strategies Summit to Address Industry Challenges</title>
                <guid>http://www.sixfeetup.com/blog/national-healthcare-marketing-strategies-summit</guid>
                <link>http://www.sixfeetup.com/blog/national-healthcare-marketing-strategies-summit</link>
                <description>&lt;p&gt;&lt;img alt="Ritz Carlton in Orlando" class="image-inline" src="Ritz_Orlando.jpg/image_preview" /&gt;&lt;/p&gt;
&lt;p&gt;This coming weekend in sunny Orlando, Florida, while thousand of kids chase &lt;i&gt;“Pirates of the Caribbean,”&lt;/i&gt; fly “&lt;i&gt;Space Mountain&lt;/i&gt;,” and take pictures with Mickey Mouse, I’ll be sharing modern marketing strategies and best practices with executives from hospitals, medical centers, healthcare systems, and medical group practices.&lt;/p&gt;
&lt;p&gt;The &lt;a class="internal-link" href="../company/news/calendar/healthcare-marketing-strategies-summit-2012"&gt;National Healthcare Marketing Strategies Summit&lt;/a&gt; starts this Sunday at the Orlando Ritz Carlton and Six Feet Up was kind enough to invite me to join with several members of their brain trust, speaking with attendees at the Six Feet Up exhibitor booth.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New Challenges in Healthcare&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The healthcare industry is in a period of rapid disruption. Nobody can say with certainty what impact the Affordable Care Act (“ObamaCare”) will have, especially with key provisions being reviewed right now by the Supreme Court.&lt;/p&gt;
&lt;p&gt;Additionally, healthcare providers are beginning to shift away from “fee-for-service” to a value-based system in an effort to contain out-of-control costs. Huge carrots and sticks have been put in place to strongly encourage the implementation of electronic medical record (EMR) systems, with the goals of reducing costs and increasing efficiencies.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;How to Communicate?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;In periods of transition, it is especially important for organizations to reevaluate their communications. Healthcare marketers wonder how they can deepen relationships with patients and practitioners, and how they can communicate more clearly, rapidly, and transparently, improving the overall patient experience.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Role of Technology&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Technology plays an enormous role in facilitating this transition. We’ll discuss with healthcare CMOs, Strategists, and Marketing Communication Executives, how web technology can disrupt healthcare as it did music, news, entertainment, finance, and so many other industries. We’ll demonstrate several technical platforms (such as open source technologies like the &lt;a href="../technologies/plone-content-management"&gt;Plone&lt;/a&gt; Content Management System and the &lt;a href="../technologies/karl-knowledge-management"&gt;KARL&lt;/a&gt; Knowledge Management System) and how marketers can use these technologies to their advantage.&lt;/p&gt;
&lt;p&gt;Several of the “Sixies” (that’s what we call Six Feet Up employees) will be available to show technology demonstrations at our conference booth, and for those that don’t have time during the conference, we’ll have an easy way of registering for a future demo.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Conversation Continues&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="internal-link" href="../company/news/calendar/sharepoint-alternatives-webinar"&gt;&lt;img alt="SharePoint Alternatives Webinar" class="image-left" src="../company/news/calendar/sharepoint_alternatives_banner.jpg/image_mini" /&gt;&lt;/a&gt;SharePoint is a widely used platform for collaboration, especially in Microsoft-centric environments. Microsoft says SharePoint “makes it easier for people to work together.” But, every time Six Feet Up attends a technology conference, a ton of people complain that it’s a bear – that it’s hard to work with and not user-friendly. They seem relieved and excited to learn that there are real alternatives.&lt;/p&gt;
&lt;p&gt;To meet this strong demand, Six Feet Up will be offering a free webinar on May 16 at 2pm called “&lt;a href="../company/news/calendar/event-registration"&gt;SharePoint Alternatives&lt;/a&gt;.” Six Feet Up CTO Calvin Hendryx-Parker will present several legitimate SharePoint replacements, including Plone, KARL, and Alfresco.&lt;/p&gt;
&lt;p&gt;Healthcare marketers are particularly encouraged to attend the webinar, as the content will be especially relevant for them. Of course, we will be heavily promoting the webinar at the conference.&lt;/p&gt;
&lt;p&gt;You can register for it &lt;a href="../company/news/calendar/event-registration"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Conference Goes Mobile&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="internal-link"&gt;&lt;img alt="HCMS App" class="image-left" src="hcmsicon128.png" /&gt;&lt;/span&gt;Finally, Six Feet Up did something super cool for the conference – they created the official conference mobile app!&lt;/p&gt;
&lt;p&gt;Point your mobile browser to &lt;a href="http://m.sixfeetup.com/hcms/"&gt;http://m.sixfeetup.com/hcms/&lt;/a&gt; for the conference schedule, speaker information, online conversation, and more.&lt;/p&gt;</description>
                <author>Scott Paley</author>


                <pubDate>Tue, 24 Apr 2012 16:55:00 -0400</pubDate>

                
            </item>
        
        
            <item>
                <title>The Most Important Thing To Do When Starting With Plone</title>
                <guid>http://www.sixfeetup.com/blog/the-most-important-thing-to-do-when-starting-with-plone</guid>
                <link>http://www.sixfeetup.com/blog/the-most-important-thing-to-do-when-starting-with-plone</link>
                <description>&lt;p&gt;Back in March of 2011, I had the opportunity to start working for Six Feet Up as a member of their Quality Assurance team. I had previous exposure to Plone years earlier creating an out-of-the-box site using standard Plone plug-ins, but not much exposure to Plone customizations.&lt;/p&gt;
&lt;p&gt;My job is to test sites in various development stages for any issues that may cause a client's site to stop working as it was intended. At different phases I test for standard functionality, customized features, design and the intended user experience. Just like the project managers and developers, I must keep the entire project in mind while testing in order to foresee any possible hiccups that may arise.&lt;/p&gt;
&lt;div class="pullquote"&gt;"I was so focused on learning every step of the QA testing process that I  almost missed one of the most important steps: learning Plone's default  behavior."&lt;/div&gt;
&lt;p&gt;Right away it seemed intimidating and perhaps I had bitten off more than I could chew. Six Feet Up's projects usually involve some rather sophisticated implementations and my first weeks were spent shadowing Six Feet Up's Lead QA.  I could see that, if I did not think the whole testing process through, and did not test a feature, or forgot to test an attribute, I could miss even a small difference that could potentially cost more later down the road.&lt;/p&gt;
&lt;p&gt;I was so focused on learning every step of the QA testing process that I almost missed one of the most important steps: learning Plone's default behavior. Just spending time exploring and clicking around Plone's features is invaluable and should be any Plone newbie's first steps toward better understanding what makes this product one of the best open source CMS' on the market.&lt;/p&gt;
&lt;p&gt;Thankfully Six Feet Up has many individuals who are expert at customizing and deploying Plone sites, and I am glad they were patient with me while I learnt my way through Plone's UI.&lt;/p&gt;
&lt;p&gt;It's been almost a year since I first started and I am now more familiar with what Plone can do to meet client needs. It's been a great journey, and I am eagerly looking forward to learning more and more about Plone's wide array of possibilities in the arena of enterprise content management.&lt;/p&gt;</description>
                <author>Elizabeth Stratton</author>


                <pubDate>Thu, 19 Apr 2012 06:35:00 -0400</pubDate>

                
            </item>
        
        
            <item>
                <title>4 Critical Mantras For Effective QA</title>
                <guid>http://www.sixfeetup.com/blog/4-critical-mantras-for-effective-qa</guid>
                <link>http://www.sixfeetup.com/blog/4-critical-mantras-for-effective-qa</link>
                <description>&lt;p&gt;If you would like to have a great career in QA, and be seen as a Super Hero in your development team, here are 4 critical mantras to keep in mind at all times:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. Adopt a neutral, non-judgmental tone... no matter what!&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Sometimes it can be tempting to quickly downgrade a developer's mental agility and furiously write something like:&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;"Feature was implemented completely wrong."&lt;/li&gt;
&lt;li&gt;"Developer obviously didn't read the spec."&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But how you "feel" about the bug and getting on the developer's bad side will reduce open communication with team members. &lt;i&gt;Instead, bug reports should use neutral language and remain non-judgmental. &lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. Be explicit and describe how the system should behave&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Here's a common example: an issue ticket says "Header on page 1 and page 2 is blue." Developer responds by changing all other page headers to blue. But the tester had assumed the developer knew that they meant the header on page 1 and page 2 should be black, like all the other pages. Assumptions like this one cause unnecessary work for developers and can negatively affect a project's budget. &lt;i&gt;Rather than describe a problem, be sure to explain how the system should behave.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. Do NOT follow developers' test instructions&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Developers will send you comments like this one: "Create 3 terms: apple, banana, mango. The drop-down should display the terms sorted alphabetically."&lt;/p&gt;
&lt;p&gt;If you were to follow the developer's test plan to a T, the following issues may be missed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sort order could be defaulting to ascii value instead of alphabetical (found by adding terms with different capitalizations or numerical values, etc.)&lt;/li&gt;
&lt;li&gt;Sort order could be defaulting to order the terms were created instead of alphabetical&lt;/li&gt;
&lt;li&gt;Drop-down menu could not display entire text of much longer terms than "banana"&lt;/li&gt;
&lt;li&gt;Drop-down menu could throw error when odd characters are included in labels (e.g. "apple &amp;amp; banana")&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;i&gt;While it's useful to review developers' descriptions of how it "should" work, be sure to formulate your own ideas about how to test!&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4. Spend your time where it matters most&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Are those 2 pixels left of the column driving you nuts? Have you sent it back already, and now there are 3 pixels? And it comes back again, only this time there is 1 extra pixel?&lt;/p&gt;
&lt;p&gt;Meanwhile, you've spent almost half an hour worrying to death about these 2 pixels while main functionalities of the site, such as an e-commerce cart, remain untested. This is obviously a pretty inefficient approach to testing.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Instead, try to organize your day so that mission critical or time sensitive issues are tested first. &lt;/i&gt;Some examples might include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Very first releases of large features&lt;/li&gt;
&lt;li&gt;Any complex logic situation&lt;/li&gt;
&lt;li&gt;Features that would satisfy an entire Business Requirement in one shot&lt;/li&gt;
&lt;/ul&gt;</description>
                <author>Christine Shaw</author>


                <pubDate>Mon, 16 Apr 2012 06:30:00 -0400</pubDate>

                
            </item>
        
        
            <item>
                <title>Git Credential Helpers</title>
                <guid>http://www.sixfeetup.com/blog/git-credential-helpers</guid>
                <link>http://www.sixfeetup.com/blog/git-credential-helpers</link>
                <description>&lt;p&gt;&lt;img alt="RedKeyIcon.jpg" class="image-right" src="RedKeyIcon.jpg/image_mini" /&gt;In the most recent major release of git (&lt;strong&gt;1.7.9.x&lt;/strong&gt;), a new &lt;a href="https://github.com/gitster/git/blob/v1.7.9/Documentation/RelNotes/1.7.9.txt#L18"&gt;"credential API"&lt;/a&gt; was introduced. This allows you to store supplied HTTP credentials in a variety of containers (OS X's keychain, in-memory cache and plain-text flat file). This is a major step forward in usability for anyone cloning repositories over HTTP/HTTPS. Before, you either had to enter your username and password every time you interacted with the remote server or use the insecure method of embedding your password in plain-text in the &lt;strong&gt;~/.netrc&lt;/strong&gt; file.&lt;/p&gt;
&lt;p&gt;The documentation for this new API can be obtained via &lt;strong&gt;git help credentials&lt;/strong&gt;. By default, git comes with 2 methods of caching supplied HTTP/HTTPS credentials: an in-memory cache and a plain-text on-disk store. Probably the more interesting however, is the &lt;strong&gt;osxkeychain&lt;/strong&gt; helper in contrib. It is available by default if you build git via &lt;strong&gt;&lt;a class="external-link" href="http://www.macports.org/"&gt;MacPorts&lt;/a&gt;&lt;/strong&gt;. This helper will store your username and password securely in &lt;a class="external-link" href="http://en.wikipedia.org/wiki/Keychain_(Mac_OS)"&gt;OS X's keychain&lt;/a&gt;. In order to activate this helper for all repositories by default, do the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global credential.helper osxkeychain&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After the next interaction with a remote git repository over HTTP/HTTPS, git will store your supplied credentials in your login keychain. You can confirm by using the &lt;strong&gt;Keychain Access&lt;/strong&gt; utility and searching for the domain name hosting the repository.&lt;/p&gt;
&lt;p&gt;If you install git via &lt;strong&gt;MacPorts&lt;/strong&gt;, you can ensure you have the helper installed by typing the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ port installed | grep git
git-core @1.7.9.2_0+credential_osxkeychain+doc+pcre+python27 (active)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;strong&gt;credentials_osxkeychain&lt;/strong&gt; variant confirms we have a functioning setup.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;While not quite as exciting as keychain storage, the ability to cache credentials in memory can be extremely useful when operating on a remote server. This can be activated via:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global credential.helper cache&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The default is to cache values in memory for 15 minutes (see &lt;strong&gt;git help credential-cache&lt;/strong&gt; for available options). After the next time you access a repository over HTTP/HTTPS, you should see a process similar to the following running:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;davidb         44198   0.0  0.0  2438820   1164 s002  S     2:29PM   0:00.00 git-credential-cache--daemon /Users/davidb/.git-credential-cache/socket&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you a are a Plone developer using &lt;strong&gt;mr.developer &lt;/strong&gt;with repositories hosted over HTTP or HTTPS, these new options will be an extremely welcome addition to your toolset.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;i&gt;Interested in more technical opinions and reviews? &lt;a class="internal-link" href="../signup"&gt;Sign up for our mailing list&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;</description>
                <author>David Blewett</author>

                
                    <category>keychain</category>
                
                
                    <category>git</category>
                
                
                    <category>Buildout</category>
                
                
                    <category>MacPorts</category>
                
                
                    <category>cache</category>
                
                
                    <category>http</category>
                
                
                    <category>authentication</category>
                
                
                    <category>https</category>
                
                
                    <category>credentials</category>
                
                
                    <category>Tips</category>
                
                
                    <category>Technology</category>
                
                
                    <category>Usability</category>
                

                <pubDate>Wed, 11 Apr 2012 06:20:00 -0400</pubDate>

                
            </item>
        
        
            <item>
                <title>How to Dramatically Speed Up In-Browser Web Testing</title>
                <guid>http://www.sixfeetup.com/blog/how-to-dramatically-speed-up-in-browser-web-testing</guid>
                <link>http://www.sixfeetup.com/blog/how-to-dramatically-speed-up-in-browser-web-testing</link>
                <description>&lt;p&gt;Cross-browser testing can be time consuming when performed manually. Selenium Grid can distribute automated UI tests across multiple platforms, reducing test time overhead and providing quick feedback independent of infrastructure.&lt;/p&gt;
&lt;h3&gt;Quick Start Guide for Selenium Grid:&lt;/h3&gt;
&lt;p&gt;1. On the grid host machine and the remote machine or VM (which the browsers will run on):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;install Java&lt;/li&gt;
&lt;li&gt;download the &lt;a class="external-link" href="http://code.google.com/p/selenium/downloads/list"&gt;Selenium standalone server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2. The host machine will distribute the requests to the remote machines. On the host, start the server with the command:&lt;/p&gt;
&lt;pre&gt;java -jar selenium-server-standalone-X.Y.Z.jar -role hub&lt;/pre&gt;
&lt;p&gt;where "X.Y.Z" is the version you downloaded.&lt;/p&gt;
&lt;p&gt;You can view the console in your web browser by going to:&lt;/p&gt;
&lt;pre&gt;http://HOST.IP.ADDRESS:4444/grid/console&lt;/pre&gt;
&lt;p&gt;where "HOST.IP.ADDRESS" is the IP of the host machine.&lt;/p&gt;
&lt;p&gt;3. Start the remote node on your remote machine or VM with the command:&lt;/p&gt;
&lt;pre&gt;java -jar selenium-server-standalone-X.Y.Z.jar -role node -port 5572 -hub http://HOST.IP.ADDRESS:5555/grid/register&lt;/pre&gt;
&lt;p&gt;where "X.Y.Z" is the version you downloaded, and "HOST.IP.ADDRESS" is the IP of the host machine which will distribute the requests.&lt;/p&gt;
&lt;p&gt;4. Write your test script in the language of your choice. For example, in Python -- install the selenium package. To launch Firefox and load Google on the remote machine:&lt;/p&gt;
&lt;pre&gt;from selenium import webdriver

driver = webdriver.Remote("http://HOST.IP.ADDRESS:4444/wd/hub", webdriver.DesiredCapabilities.FIREFOX)
driver.get("http://www.google.com")
driver.quit()
&lt;/pre&gt;
&lt;p&gt;For more information about, check out the &lt;a class="external-link" href="http://selenium-grid.seleniumhq.org/"&gt;Selenium Grid website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Interested in getting more tips to make your development more efficient? &lt;a class="internal-link" href="../signup"&gt;Sign up for our mailing list...&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;</description>
                <author>Christine Shaw</author>


                <pubDate>Mon, 09 Apr 2012 06:30:00 -0400</pubDate>

                
            </item>
        
        
            <item>
                <title>PyCon 2012 Wrap Up</title>
                <guid>http://www.sixfeetup.com/blog/pycon-2012-wrap-up</guid>
                <link>http://www.sixfeetup.com/blog/pycon-2012-wrap-up</link>
                <description>&lt;p&gt;&lt;img alt="PyCon 2012 Logo" class="image-right" src="pycon_logo.png" /&gt;This was the 9th &lt;a class="external-link" href="http://us.pycon.org"&gt;PyCon&lt;/a&gt; that Clayton and I have attended since the first one in 2003 where we were 2 of the 250 that were in attendance. This year was amazing and there were around 2200 people this time. The organizers deserve a huge pat on the back for a job well done and they set the stage perfectly for us all to learn and connect with the Python Community.&lt;/p&gt;
&lt;h2 id="pywebsummit"&gt;PyWeb Summit&lt;/h2&gt;
&lt;p&gt;This year we participated in the &lt;a class="external-link" href="https://us.pycon.org/2012/community/WebDevSummit/"&gt;PyWeb Summit&lt;/a&gt; organized by Michael Ryabushkin and Chris McDonough. If the goal was to get us all in a room and start talking with one another, it worked, which was critical given the lack of conversation happening on the &lt;a class="external-link" href="http://mail.python.org/mailman/listinfo/web-sig"&gt;Web SIG mailing list&lt;/a&gt;. There was much discussion about deployment and packaging, but most suggestions seemed geared toward small site deployments with little additional needs.&lt;/p&gt;
&lt;p&gt;The most interesting part of the day was probably the lightening talks and the "State-of multi talk". Each of these provided interesting windows into what was coming up or how things were going in the various projects. For instance, there appears to be work toward making all of the major web frameworks Python 3 compatible, but most of the folks in the room aren’t using Python 3 yet. Certain projects, such as &lt;a class="external-link" href="http://cherrypy.org"&gt;CherryPy&lt;/a&gt; and &lt;a class="external-link" href="http://twistedmatrix.com"&gt;Twisted,&lt;/a&gt; are at a point where they are very stable and considered complete. Other projects such as the &lt;a class="external-link" href="http://www.pylonsproject.org/"&gt;Pylons Project&lt;/a&gt; are experiencing a surge in growth as they adopt new technology like the &lt;a class="external-link" href="http://www.pylonsproject.org/projects/pyramid/about"&gt;Pyramid web application framework&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="pyconkeynotes"&gt;PyCon Keynotes&lt;/h2&gt;
&lt;p&gt;As many have said already, any event that kicks off with dancing robots is an awesome sign of things to come during the conference. The keynote sessions were very enlightening and all very different from one another. Stormy’s talk about community was a great reinforcement of the things I have learned while participating in the Plone community.&lt;/p&gt;
&lt;p&gt;Go view them at &lt;a class="external-link" href="http://pyvideo.org/category/17/pycon-us-2012"&gt;PyVideo.org&lt;/a&gt; where the &lt;a class="external-link" href="http://nextdayvideo.com/"&gt;Next Day Video&lt;/a&gt; team did an amazing job of getting them all online almost before we left the conference.&lt;/p&gt;
&lt;h2 id="tracksgalore"&gt;Tracks Galore&lt;/h2&gt;
&lt;p&gt;One of my favorite tracks this year was the maker track that was full of awesome talks about hacking &lt;a class="external-link" href="http://www.arduino.cc/"&gt;Arduinos&lt;/a&gt; to control pyrotechnics, printing 3D models with &lt;a class="external-link" href="http://www.makerbot.com/"&gt;MakerBots&lt;/a&gt; and even using Python and computer vision to track and shot squirrels in your backyard. Python people do the coolest stuff on earth.&lt;/p&gt;
&lt;p&gt;If you were into the more serious topics, there was a great mix of advanced Python talks about web, data processing and scientific topics. In addition, this year also had some great talks that were only loosely Python-related, such as how to do better sketches and a historical look at asking for forgiveness vs. permission.&lt;/p&gt;
&lt;p&gt;The most important track though, as usual, was the hallway track. The layout of the conference and the expo hall was highly conducive to this great form of catching up and meeting new folks. How else do you recruit people to participate in your next FedEx Day or find out cool tidbits of information such as the fact that Industrial Light and Magic uses Plone internally. People are truly what makes PyCon one of the best conferences to hit all year.&lt;/p&gt;
&lt;h2 id="readysetsprint"&gt;Ready, Set, Sprint&lt;/h2&gt;
&lt;p&gt;I didn’t get to stay for much of the sprints, but just the sight of an estimated 700 people working on Open Source is breathtaking and inspiring. This community is a model to be emulated. I was in the Pyramid room where they had to bring in additional tables just to handle all of the people who wanted to help with the project.&lt;/p&gt;
&lt;h2 id="lookingforwardtonextyear"&gt;Looking forward to next year&lt;/h2&gt;
&lt;p&gt;I can’t wait to see everyone again next year and I’m sure I’ll run into some of you before then at &lt;a class="external-link" href="http://opensourcebridge.org/"&gt;Open Source Bridge&lt;/a&gt; or the &lt;a class="external-link" href="http://www.ploneconf.org/"&gt;Plone Conference&lt;/a&gt;.&lt;/p&gt;</description>
                <author>Calvin Hendryx-Parker</author>

                
                    <category>Conference</category>
                
                
                    <category>Open Source</category>
                
                
                    <category>Python</category>
                
                
                    <category>Plone</category>
                
                
                    <category>PyCon</category>
                

                <pubDate>Wed, 21 Mar 2012 09:19:29 -0400</pubDate>

                
            </item>
        
        
            <item>
                <title>A Solution to Fixed-Bid vs. Hourly Contracts (Part 3)</title>
                <guid>http://www.sixfeetup.com/blog/a-solution-to-fixed-bid-vs-hourly-contracts-3</guid>
                <link>http://www.sixfeetup.com/blog/a-solution-to-fixed-bid-vs-hourly-contracts-3</link>
                <description>&lt;p&gt;In &lt;span class="internal-link"&gt;my last post&lt;/span&gt;, I described &lt;a class="internal-link" href="a-solution-to-fixed-bid-vs-hourly-contracts-2"&gt;why "Time and Materials" contracts ("T&amp;amp;M" in short) are the only sensible structure for sophisticated software development&lt;/a&gt; like we work on at Six Feet Up, but only in concert with a project management methodology that reduces risk for clients.&lt;/p&gt;
&lt;p&gt;As I wrote, &lt;i&gt;"The key to reducing the risk of time and materials is transparency and frequent check-ins... A successful engagement must transparently manage your risk, enabling you to see exactly how your dollars are being spent, and empowering you to make frequent, well-informed decisions that concern the budget and scope."&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Our "Flex6" methodology does just that.&lt;/p&gt;
&lt;h3&gt;First, Traditional Project Management&lt;/h3&gt;
&lt;p&gt;Traditionally, your service provider spends a bunch of up-front time putting the project details on paper and getting client approval. Then development takes place. The provider tests and debugs and finally shows the project to you. With a little luck, the original estimate was accurate and the project, at this point, is right on budget and on time.&lt;/p&gt;
&lt;p&gt;But...&lt;/p&gt;
&lt;p&gt;What happens when you review the work and want changes? Certain features maybe didn't get implemented in quite the way you imagined. Remember, this is the first time you’re really getting a chance to play with the new system. We all know how hard it is to give feedback on something you haven't actually seen yet.&lt;/p&gt;
&lt;p&gt;Inevitably, something unexpected comes up during that client review. Since it was, by definition, unexpected, it wasn’t budgeted for. Uh oh. Now there’s a problem. If you are to get what you want, the project is going over budget.&lt;/p&gt;
&lt;p&gt;But now you’re angry. You think your service provider misinterpreted something you wanted. They think they built exactly what you asked for and show you the approved scope of work, proving they’re in the right.&lt;/p&gt;
&lt;p&gt;But does that make any difference? What really matters is that even though the project is nearly done, and even if in the end the project is a big success, everybody is left with a bad taste. The relationship has been damaged.&lt;/p&gt;
&lt;h3&gt;A Better Way: Flex6&lt;/h3&gt;
&lt;p&gt;To better manage our client’s projects we have developed a methodology we call "Flex6." The key attributes of Flex6 are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; We build, test, and debug one component or milestone at a time, working on the most critical tasks first, and immediately have a client review before moving on.&lt;/li&gt;
&lt;li&gt; During this review, we get our clients’ feedback on the work performed and discuss the budget. We know how much time was supposed to be put into the component. If we’re tracking too high or low, we can adjust much earlier in the process.&lt;/li&gt;
&lt;li&gt; After each review, we tweak the reviewed component based on the feedback, and work on the next component. Then, we do another detailed feature and budget review.&lt;/li&gt;
&lt;li&gt; Since we work on the most critical features first, if something needs to be cut from the scope in order to keep to a budget, it's the least important features that will be cut.&lt;/li&gt;
&lt;li&gt; All throughout this process, our clients can fully control their budget allocation. There are no surprises.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: center; "&gt;&lt;a class="internal-link" href="copy_of_SixFeetUpFlex6DeliveryMethod.png"&gt;&lt;img alt="Flex6-Controlling Project Risks" class="image-inline" src="copy_of_SixFeetUpFlex6DeliveryMethod.png/image_preview" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While this process is still hourly, it meets all of the important criteria I mentioned in my last post:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;b&gt;Confidence&lt;/b&gt;: Set and manage your budget. &lt;i&gt;Yes&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt; &lt;b&gt;Transparency&lt;/b&gt;: Know how much money you’ve spent at all times. &lt;i&gt;Yes&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt; &lt;b&gt;Visibility&lt;/b&gt;: Know how much of the project is done, and how much is left to complete. &lt;i&gt;Yes&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt; &lt;b&gt;Understanding&lt;/b&gt;: Understand the impact of any desired scope changes (and allow you to make them in the first place). &lt;i&gt;Yes&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt; &lt;b&gt;Alignment&lt;/b&gt;: Make sure your service provider is properly incented. &lt;i&gt;Yes&lt;/i&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;i&gt;Interested in discussing how our Flex 6 process can benefit your custom software development needs? &lt;a class="internal-link" href="../company/contact-us"&gt;Just contact us&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Also, be sure to &lt;a class="internal-link" href="../signup"&gt;sign up for our newsletter&lt;/a&gt; to read more interesting articles and blog posts related to sophisticated software development.&lt;br /&gt;&lt;/i&gt;&lt;/p&gt;</description>
                <author>Gabrielle Hendryx-Parker</author>


                <pubDate>Tue, 20 Mar 2012 13:10:00 -0400</pubDate>

                
            </item>
        
        
            <item>
                <title>A Solution to Fixed-Bid vs. Hourly Contracts (Part 2)</title>
                <guid>http://www.sixfeetup.com/blog/a-solution-to-fixed-bid-vs-hourly-contracts-2</guid>
                <link>http://www.sixfeetup.com/blog/a-solution-to-fixed-bid-vs-hourly-contracts-2</link>
                <description>&lt;p&gt;A few weeks ago, I wrote about &lt;a class="internal-link" href="a-solution-to-fixed-bid-vs-hourly-contracts"&gt;how hard it is to estimate creative projects&lt;/a&gt; including sophisticated software development like we work on here at Six Feet Up.&lt;/p&gt;
&lt;p&gt;From that post:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;"When every project has unique requirements, how can a precise estimate be developed? (It can't.) And how can any project move forward without a reliable budget estimate? (Again, it can't.)"&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Given that a budget gets set based on a guesstimate that’s more likely to be wrong than right, what’s the best way to set up a contract?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;What Makes a Good Contract?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A contract defines a structure for managing your project. A good structure provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Confidence: &lt;/b&gt;Set and manage your budget&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Transparency: &lt;/b&gt;Know how much money you’ve spent at all times&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Visibility: &lt;/b&gt;Know how much of the project is done, and how much is left to complete&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Understanding: &lt;/b&gt;Understand the impact of any desired scope changes (and allow you to make them in the first place)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Alignment: &lt;/b&gt;Make sure your service provider is properly incented&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Fixed-Price Contracts&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;While fixed price projects seem to provide you with confidence, reduced risk, and incentives for us service providers to get the work done faster, they just don’t get you the items above.&lt;/p&gt;
&lt;p&gt;Our strategy and design partner Abstract Edge did a great job explaining &lt;a href="http://blog.abstractedge.com/2010/07/why-you%E2%80%99re-better-off-paying-hourly-vs-fixed-price/"&gt;why fixed-price contracts aren’t as wonderful as they seem&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The key takeaways are that fixed-price projects set the wrong incentives, tend to be overpriced, and are inefficient, unending and inflexible.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Hourly, But With a Cap&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A better way to handle this might be to pay by the hour, but with a cap. This gives you more flexibility, but some protection if things get out of hand.&lt;/p&gt;
&lt;p&gt;But there are hidden problems. First of all, the service provider is penalized for finishing the work ahead the schedule, which is the wrong financial incentive.&lt;/p&gt;
&lt;p&gt;Second, if the project hits the cap, it becomes a fixed price project anyway, with all of the issues I described earlier.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Time and Materials&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The traditional way to pay for professional services is “time and materials.” This simply means that you pay based on the amount of time it takes to complete the work, plus for the cost of any out-of-pocket items. We’re all used to paying contractors and lawyers this way.&lt;/p&gt;
&lt;p&gt;The time increment can be hourly, daily, weekly, or even monthly. For companies like Six Feet Up, hourly works best because it creates more flexibility for our clients than larger time increments.&lt;/p&gt;
&lt;p&gt;On the other hand, what if we completely underestimated the project scope? Isn’t it too risky to pay by the hour?&lt;/p&gt;
&lt;p&gt;Not necessarily. It’s how nearly all of our clients do it, and we have a lot of happy clients.&lt;/p&gt;
&lt;p&gt;The key to reducing the risk of time and materials is transparency and frequent check-ins.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Reducing Risk&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;A successful engagement must transparently manage your risk, enabling you to see exactly how your dollars are being spent, and empowering you to make frequent, well-informed decisions that concern the budget and scope.&lt;/p&gt;
&lt;p&gt;Time and materials is the only billing method that can support confidence, transparency, visibility, understanding, and alignment, but only with strong and effective project management processes in place.&lt;/p&gt;
&lt;p&gt;Our proven project management methodology, which we call “Flex 6,” is the key to a successful project outcome. Flex 6 aligns interests and minimizes risk. It provides transparency and allows flexibility. It’s relationship-building and hands-on.&lt;/p&gt;
&lt;p&gt;How does it work?&lt;/p&gt;
&lt;p&gt;Don’t miss part 3 where I describe &lt;a class="internal-link" href="a-solution-to-fixed-bid-vs-hourly-contracts-3"&gt;how we manage risks inherent to software development&lt;/a&gt;….&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Want to be notified when part 3 is ready? &lt;a class="internal-link" href="../signup"&gt;Sign up here...&lt;/a&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;</description>
                <author>Gabrielle Hendryx-Parker</author>


                <pubDate>Tue, 21 Feb 2012 09:30:00 -0500</pubDate>

                
            </item>
        
        
            <item>
                <title>Create Your Own Plone Content Types With Dexterity</title>
                <guid>http://www.sixfeetup.com/blog/create-your-own-plone-content-types-with-dexterity</guid>
                <link>http://www.sixfeetup.com/blog/create-your-own-plone-content-types-with-dexterity</link>
                <description>&lt;p&gt;Like other Content Management Systems (CMS), Plone allows users to easily create and manage online content through the web by leveraging content types such as pages, blog posts, news items, calendar events, comments, etc. Those content types are typically custom-developed by programmers and require a formal code release to add the new types to a website.&lt;br /&gt;&lt;br /&gt;And now Plone goes even farther: the &lt;a class="external-link" href="http://pypi.python.org/pypi/plone.app.dexterity"&gt;Dexterity add-on&lt;/a&gt; allows non technical content contributors to not only use pre-existing content types, but to also define and create their own content types through the web (see screenshot).&lt;br /&gt;&lt;br /&gt;&lt;img alt="Dexterity Interface" class="image-right" src="http://www.sixfeetup.com/blog/files/blog-images/dexterity.png/image_preview" /&gt;Using Legos as an analogy, this means users can do more than just create a structure based on a given number of basic bricks: they can also design and use their own custom bricks.&lt;br /&gt;&lt;br /&gt;Dexterity is Plone 4 compatible and the Six Feet Up development team is using it on most of our projects. It has several advantages over the classic "Archetype" content types, but the main improvement lies in the ability users now have to create content types in a WYSIWYG fashion. Many of our clients appreciate the fact that they can create their own content types, or tweak them on their own without having to ask for a developer's help every time they want to add or arrange a simple field.&lt;br /&gt;&lt;br /&gt;Dexterity is also very developer friendly. For example, it is easy for a developer to export the content types created by a content contributor via Dexterity and reintegrate them into the code for optimal site efficiency. This also makes the content types data-independent and easily accessible to other web development projects.&lt;/p&gt;
&lt;p&gt;With Dexterity, Plone now closes the feature gap with other well-known open source CMSs such as Wordpress and Drupal, which already offer this ability.&lt;/p&gt;</description>
                <author>thomas</author>

                
                    <category>Dexterity</category>
                
                
                    <category>Planet Plone</category>
                
                
                    <category>Plone</category>
                

                <pubDate>Tue, 07 Feb 2012 06:30:00 -0500</pubDate>

                
            </item>
        
        
            <item>
                <title>A Solution to Fixed-Bid vs. Hourly Contracts (Part 1)</title>
                <guid>http://www.sixfeetup.com/blog/a-solution-to-fixed-bid-vs-hourly-contracts</guid>
                <link>http://www.sixfeetup.com/blog/a-solution-to-fixed-bid-vs-hourly-contracts</link>
                <description>&lt;p&gt;Right now, I’m waiting for Audi to give my car an oil change and fix a problem with the power steering. While the technician told me that it shouldn’t take more than two hours, we’re nearly at three (and counting.)&lt;/p&gt;
&lt;p&gt;&lt;img alt="20120130FixedBidvsHourly_illustration.png" class="image-right" src="20120130FixedBidvsHourly_illustration.png/" style="float: right; " width="300px" /&gt;&lt;/p&gt;
&lt;p&gt;Of course, the moment I wrote that, the technician came over to explain the delay. Turns out they found a couple of unexpected (but legitimate) issues which they needed to fix. Things weren’t quite as simple as he originally assumed.&lt;/p&gt;
&lt;p&gt;Pretty typical.&lt;/p&gt;
&lt;p&gt;Which brings me to this. If an auto-mechanic can’t accurately estimate a quick and simple car fix, what hope do software developers have when building something new and complex, over the course of many months (or years,) that’s never been exactly done before?&lt;/p&gt;
&lt;p&gt;Technology projects are notorious for cost overruns.&lt;/p&gt;
&lt;p&gt;The Hubble Space Telescope, which has allowed us to look back in time nearly all the way to the big bang, was originally supposed to cost $400 million to build. &lt;a href="http://en.wikipedia.org/wiki/Hubble_Space_Telescope"&gt;Final construction costs actually came in at $2.5 billion&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Boston’s “Big Dig” and Denver’s International Airport were each supposed to cost $2.8 billion. They cost &lt;a href="http://en.wikipedia.org/wiki/Big_Dig_%28Boston,_Massachusetts%29"&gt;$14.6 billion&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Denver_International_Airport"&gt;$4.8 billion&lt;/a&gt; respectively.&lt;/p&gt;
&lt;p&gt;A &lt;a href="http://en.wikipedia.org/wiki/Cost_overrun#cite_ref-chaos_1-0"&gt;study&lt;/a&gt; performed a few years back by the Standish Group discovered that 71% of IT projects were over budget with a total average overage of 43%.&lt;/p&gt;
&lt;p&gt;Why does this happen? And what does a space telescope or a major construction project have to do with your website or intranet?&lt;/p&gt;
&lt;p&gt;The answer is they are all creative exercises. They are unique. There isn’t another tunnel exactly like Boston’s in the entire world, and there isn’t another website exactly like yours. You can’t build your website on an assembly line, and if you could, you really wouldn’t want to.&lt;/p&gt;
&lt;p&gt;Sure, it would be great if we could send a bunch of commodity-priced raw materials into an airport construction factory, click the “on” button, wait a predictable amount of time, and out comes your airport, ready for takeoffs, landings, and weather delays.&lt;/p&gt;
&lt;p&gt;Predictable inputs. Predictable outputs. Ah….&lt;/p&gt;
&lt;p&gt;But websites and intranets are more like art, music, and literature. I want to commission you to compose a 45-minute orchestral masterpiece for our symphony. How much time will that take you? Um…&lt;/p&gt;
&lt;blockquote class="pullquote"&gt;"Websites and intranets are more like art, music, and literature..."&lt;/blockquote&gt;
&lt;p&gt;OK, not &lt;i&gt;all&lt;/i&gt; web projects are complex. Some are simple and straightforward and can be easily developed by your nephew who learned some HTML as part of a school project. Those just aren’t the kinds of projects we work on.&lt;/p&gt;
&lt;p&gt;Six Feet Up builds sophisticated websites, intranets, and extranets.&lt;/p&gt;
&lt;p&gt;For example, we develop a lot of websites on Plone, an open source, Python-based content management system. Plone is perfectly suited for complex content management, customized content types, intricate workflows and permission structures, and integration with other discrete technology platforms (i.e. CRM systems like Salesforce, authentication systems like LDAP, etc.) With Plone, you can create and manage numerous sub-sites that inherit content and templates from a parent site. You can build a global website, managing content in dozens of different languages.&lt;/p&gt;
&lt;p&gt;Plone is unbelievably powerful and flexible. It’s also quite user-friendly for content managers.&lt;/p&gt;
&lt;p&gt;But, Plone &lt;i&gt;development&lt;/i&gt; is not simple. For those with generic, simpler needs, a solution like WordPress may be more appropriate (and easier to estimate.)&lt;/p&gt;
&lt;p&gt;So when it comes to budget estimates, where does this leave us? When every project has unique requirements, how can a precise estimate be developed? (It can’t.) And how can any project move forward without a reliable budget estimate? (Again, it can’t.)&lt;/p&gt;
&lt;p&gt;What kind of payment structure can be created that’s fair for all parties?&lt;/p&gt;
&lt;blockquote class="pullquote"&gt;"What kind of payment structure can be created that’s fair for all parties?"&lt;/blockquote&gt;
&lt;p&gt;We have an answer that’s worked extremely well for our clients. Our solution and process aligns interests and minimizes risk. It provides transparency and allows flexibility. It’s relationship-building and hands-on.&lt;/p&gt;
&lt;p&gt;What is it?&lt;/p&gt;
&lt;p&gt;Stay tuned for part 2 where I go over &lt;a class="internal-link" href="a-solution-to-fixed-bid-vs-hourly-contracts-2"&gt;why "Time and Materials" contracts are the only sensible structure for sophisticated software development...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Want to be notified when similar blog posts get published? &lt;a href="http://sixfeetup.com/signup"&gt;Sign up here….&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;</description>
                <author>Gabrielle Hendryx-Parker</author>

                
                    <category>Inspiring</category>
                
                
                    <category>Process</category>
                
                
                    <category>Collaboration</category>
                
                
                    <category>Clients</category>
                
                
                    <category>Plone</category>
                
                
                    <category>Culture</category>
                
                
                    <category>Planet Plone</category>
                

                <pubDate>Tue, 31 Jan 2012 06:30:00 -0500</pubDate>

                
            </item>
        
        
            <item>
                <title>Optimize Your Plone Development by Packing the ZODB</title>
                <guid>http://www.sixfeetup.com/blog/optimize-your-plone-development-by-packing-the-zodb</guid>
                <link>http://www.sixfeetup.com/blog/optimize-your-plone-development-by-packing-the-zodb</link>
                <description>&lt;p&gt;&lt;img alt="HiRes.jpg" class="image-right" height="250" src="HiRes.jpg/image_preview" width="333" /&gt;&lt;/p&gt;
&lt;p&gt;What does it mean to "pack" a database?  In shortest form, it means to remove unused records in order to reduce the memory required to hold the database.&lt;/p&gt;
&lt;p&gt;Think of it like this: each time you delete a page in your website, a copy of that page is kept in the database. These copies are kept in case you need to get it back later. Over time, as you create and delete content and make other changes in your website, the number of unused objects can grow and grow, expanding the memory needed to operate the website, and slowing down operations.  When you pack the database, the system finds the unused objects and removes them. Performing this job regularly helps to keep the size of a database manageable.&lt;/p&gt;
&lt;h2&gt;Perform database packs regularly&lt;/h2&gt;
&lt;p&gt;What is the benefit of scheduling routine database packs? If the database is not being packed on a regular basis, the amount of resources and time to perform a database pack may increase exponentially. Making sure that the packs are happening on a scheduled basis will save time in the long run. These are tasks that can easily be added into your buildout and then released into a production environment.&lt;/p&gt;
&lt;p&gt;As an example, we recently had a Plone site that was using RelStorage backed with MySQL that had not been packed in over a year. The size of the MySQL dump grew to nearly 8GB and took 45 minutes to complete. This means that any time a release was made, there would be 45 minutes of lead time just to make a backup of the data.&lt;/p&gt;
&lt;p&gt;Having this large database does not only impact the ability to swiftly do a release. If a new bug is discovered that can only be re-produced on the production environment, you certainly don't want to be debugging it there. Instead, you will want to be able to quickly bring back the data to your testing instance, hence the benefit of keeping the size of the database to a manageable size.&lt;/p&gt;
&lt;h2&gt;Setting up the automatic pack&lt;/h2&gt;
&lt;p&gt;When using a ZEO server, either from &lt;a class="external-link" href="http://pypi.python.org/pypi/plone.recipe.zeoserver"&gt;plone.recipe.zeoserver&lt;/a&gt; or &lt;a class="external-link" href="http://pypi.python.org/pypi/plone.recipe.zope2zeoserver"&gt;plone.recipe.zope2zeoserver&lt;/a&gt;, a &lt;code&gt;zeopack&lt;/code&gt; script is automatically generated for you with all the necessary parameters to run the pack. This can simply be run from the command line:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd path/to/buildout
$ bin/zeopack
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now your database is packed, that was easy! As programmers and systems administrators, we know that doing things manually will eventually fail. How do we automate this process? Simple, we add a cron job to take care of the work for us. Here is an example configuration that gets everything set up for us:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="k"&gt;[buildout]&lt;/span&gt;
&lt;span class="na"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;instance zeoserver cron-pack&lt;/span&gt;
&lt;span class="na"&gt;extends&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;http://dist.plone.org/release/4.1.3/versions.cfg&lt;/span&gt;

&lt;span class="k"&gt;[instance]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;plone.recipe.zope2instance&lt;/span&gt;
&lt;span class="na"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;admin:admin&lt;/span&gt;
&lt;span class="na"&gt;http-address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;8080&lt;/span&gt;
&lt;span class="na"&gt;zeo-address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;8100&lt;/span&gt;
&lt;span class="na"&gt;zeo-client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;True&lt;/span&gt;
&lt;span class="c"&gt;# Set the shared blob option so blobs work with zeoserver&lt;/span&gt;
&lt;span class="na"&gt;shared-blob&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;on&lt;/span&gt;
&lt;span class="na"&gt;blob-storage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;${buildout:directory}/var/blobstorage&lt;/span&gt;
&lt;span class="na"&gt;eggs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="s"&gt;Pillow&lt;/span&gt;
    &lt;span class="s"&gt;Plone&lt;/span&gt;

&lt;span class="k"&gt;[zeoserver]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;plone.recipe.zeoserver&lt;/span&gt;
&lt;span class="na"&gt;blob-storage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;${instance:blob-storage}&lt;/span&gt;
&lt;span class="na"&gt;zeo-address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;${instance:zeo-address}&lt;/span&gt;
&lt;span class="c"&gt;# keep history for 7 days instead of the default 1&lt;/span&gt;
&lt;span class="na"&gt;pack-days&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;7&lt;/span&gt;

&lt;span class="k"&gt;[cron-pack]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;z3c.recipe.usercrontab&lt;/span&gt;
&lt;span class="na"&gt;times&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;@weekly&lt;/span&gt;
&lt;span class="na"&gt;command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;${buildout:bin-directory}/zeopack&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;After running this buildout, there will be a cron job added to the cron of the user that ran the buildout. This job will run weekly and pack the database, leaving 7 days of history.&lt;/p&gt;
&lt;h3&gt;RelStorage&lt;/h3&gt;
&lt;p&gt;Now for a more complex scenario using &lt;a href="http://pypi.python.org/pypi/RelStorage"&gt;RelStorage&lt;/a&gt;. The &lt;code&gt;zeopack&lt;/code&gt; script will no longer work, but fear not, RelStorage comes with a script called &lt;code&gt;zodbpack&lt;/code&gt; that can do the job.&lt;/p&gt;
&lt;p&gt;First some setup to make the generation of the conf file work:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd path/to/buidout
$ mkdir templates
$ mkdir etc
$ touch templates/zodbpack.conf.tmpl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This sets up a directory for our &lt;code&gt;zodbpack.conf&lt;/code&gt; template, and an output directory named &lt;code&gt;etc&lt;/code&gt;. In the &lt;code&gt;zodbpack.conf.tmpl&lt;/code&gt;, place the following code:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;relstorage&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;mysql&amp;gt;&lt;/span&gt;
    host &lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;
    db &lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;
    user &lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;
    passwd &lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;passwd&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/mysql&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/relstorage&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now here is our example buildout configuration that sets up Plone to use RelStorage with MySQL:&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="k"&gt;[buildout]&lt;/span&gt;
&lt;span class="na"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;instance relstorage zodbpack-conf cron-pack&lt;/span&gt;
&lt;span class="na"&gt;extends&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;http://dist.plone.org/release/4.1.3/versions.cfg&lt;/span&gt;

&lt;span class="k"&gt;[settings]&lt;/span&gt;
&lt;span class="c"&gt;# settings for RelStorage connection&lt;/span&gt;
&lt;span class="na"&gt;mysql-host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;localhost&lt;/span&gt;
&lt;span class="na"&gt;mysql-db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;mydbname&lt;/span&gt;
&lt;span class="na"&gt;mysql-user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;root&lt;/span&gt;
&lt;span class="na"&gt;mysql-passwd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
&lt;span class="c"&gt;# options for the cron job&lt;/span&gt;
&lt;span class="na"&gt;pack-days&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;7&lt;/span&gt;

&lt;span class="k"&gt;[instance]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;plone.recipe.zope2instance&lt;/span&gt;
&lt;span class="na"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;admin:admin&lt;/span&gt;
&lt;span class="na"&gt;http-address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;8080&lt;/span&gt;
&lt;span class="na"&gt;eggs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="s"&gt;Pillow&lt;/span&gt;
    &lt;span class="s"&gt;Plone&lt;/span&gt;
    &lt;span class="s"&gt;RelStorage&lt;/span&gt;
    &lt;span class="s"&gt;MySQL-python&lt;/span&gt;
&lt;span class="na"&gt;rel-storage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="s"&gt;type&lt;/span&gt; &lt;span class="s"&gt;mysql&lt;/span&gt;
    &lt;span class="s"&gt;host&lt;/span&gt; &lt;span class="s"&gt;${settings:mysql-host}&lt;/span&gt;
    &lt;span class="s"&gt;db&lt;/span&gt; &lt;span class="s"&gt;${settings:mysql-db}&lt;/span&gt;
    &lt;span class="s"&gt;user&lt;/span&gt; &lt;span class="s"&gt;${settings:mysql-user}&lt;/span&gt;
    &lt;span class="s"&gt;passwd&lt;/span&gt; &lt;span class="s"&gt;${settings:mysql-passwd}&lt;/span&gt;
    &lt;span class="s"&gt;blob-dir&lt;/span&gt; &lt;span class="s"&gt;${buildout:directory}/var/blobstorage&lt;/span&gt;

&lt;span class="c"&gt;# Generate the RelStorage scripts&lt;/span&gt;
&lt;span class="k"&gt;[relstorage]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;zc.recipe.egg&lt;/span&gt;
&lt;span class="na"&gt;eggs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="s"&gt;${instance:eggs}&lt;/span&gt;
    &lt;span class="s"&gt;RelStorage&lt;/span&gt;
    &lt;span class="s"&gt;MySQL-python&lt;/span&gt;

&lt;span class="k"&gt;[zodbpack-conf]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;collective.recipe.template&lt;/span&gt;
&lt;span class="na"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;${buildout:directory}/templates/zodbpack.conf.tmpl&lt;/span&gt;
&lt;span class="na"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;${buildout:directory}/etc/zodbpack.conf&lt;/span&gt;

&lt;span class="k"&gt;[cron-pack]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;z3c.recipe.usercrontab&lt;/span&gt;
&lt;span class="na"&gt;times&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;@weekly&lt;/span&gt;
&lt;span class="na"&gt;command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;${buildout:bin-directory}/zodbpack -d ${settings:pack-days} ${zodbpack-conf:output}&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;In this example, we are generating a conf file for the &lt;code&gt;zodbpack&lt;/code&gt; script to use with the &lt;code&gt;[zodbpack-conf]&lt;/code&gt; part. Since the RelStorage information will be used in two places, and might be different on each deployment platform, there is a &lt;code&gt;[settings]&lt;/code&gt; section that both the &lt;code&gt;[instance]&lt;/code&gt; and &lt;code&gt;[zodbpack-conf]&lt;/code&gt; parts take advantage of.&lt;/p&gt;
&lt;p&gt;Once this buildout has run, it will be set up similar to our conventional buildout. The cron job will pack the RelStorage database once a week, keeping 7 days of history.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Packing your Plone site's database on a regular basis is as simple as adding some configuration to buildout. There is really no reason you shouldn't be keeping up on this maintenance task with your Plone sites, especially when you run complex websites or intranets. It will save you time during your development and release cycles by making sure the database is at its leanest.&lt;/p&gt;</description>
                <author>Clayton Parker</author>

                
                    <category>Systems Administration</category>
                
                
                    <category>Zodb</category>
                
                
                    <category>Plone</category>
                
                
                    <category>Relstorage</category>
                

                <pubDate>Fri, 27 Jan 2012 06:30:00 -0500</pubDate>

                
            </item>
        
        
            <item>
                <title>Set up IPython for Plone Development</title>
                <guid>http://www.sixfeetup.com/blog/set-up-ipython-for-plone-development</guid>
                <link>http://www.sixfeetup.com/blog/set-up-ipython-for-plone-development</link>
                <description>&lt;p&gt;IPython is a powerful interactive Python shell that can be used with Zope to aid in debugging issues in your Plone development activities. Syntax highlighting, tab completion and code introspection are just a few reasons to use it.&lt;/p&gt;
&lt;p&gt;Think of the Zope-enabled IPython shell as &lt;code&gt;bin/instance debug&lt;/code&gt; on steroids. When you start up the default Zope instance debugger, you are only given an &lt;code&gt;app&lt;/code&gt; variable to access the current Zope instance. The IPython Zope profile enhances this with some useful defaults. It sets the variable &lt;code&gt;portal&lt;/code&gt; to the first Plone site that it finds, sets up a dummy request on it and then does a &lt;code&gt;setSite&lt;/code&gt; to make the component architecture work properly. There is also a &lt;code&gt;utils&lt;/code&gt; object that is set up to allow you to sync the database, commit your changes, switch users and a host of other things. This gives you a series of effective tools to improve your Plone development practices.&lt;/p&gt;
&lt;p&gt;A while back, Kees Hink wrote up a blog post about &lt;a href="http://keeshink.blogspot.com/2010/07/ipython-in-plone-4.html"&gt;using IPython with the powerful content management system Plone 4&lt;/a&gt;. Since then, a newer version of IPython has come out and is no longer compatible with Python 2.4. This post will help you get it working with Python 2.4 and IPython 0.10 (for Plone sites on version 3.x or earlier), then Python 2.6 and IPython 0.11 or 0.12 (for Plone sites running Plone 4+).&lt;/p&gt;
&lt;h3&gt;Add Zope enabled IPython to buildout&lt;/h3&gt;
&lt;p&gt;We will assume that your Zope instance is created with a part named &lt;code&gt;[instance]&lt;/code&gt; and, in the case of Plone 3, Zope is installed with a part called &lt;code&gt;[zope2]&lt;/code&gt;. Here is what the Zope enabled IPython part looks like (uncomment the Plone 3 lines if needed).&lt;/p&gt;
&lt;div class="highlight"&gt;
&lt;pre&gt;&lt;span class="k"&gt;[buildout]&lt;/span&gt;
&lt;span class="na"&gt;parts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="c"&gt;# NOTE: You will have a zope2 part if using Plone 3&lt;/span&gt;
&lt;span class="c"&gt;#    zope2&lt;/span&gt;
    &lt;span class="s"&gt;instance&lt;/span&gt;
    &lt;span class="err"&gt;...&lt;/span&gt;
    &lt;span class="s"&gt;ipzope&lt;/span&gt;
&lt;span class="na"&gt;versions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;version&lt;/span&gt;

&lt;span class="k"&gt;[versions]&lt;/span&gt;
&lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="c"&gt;# NOTE: Use IPython 0.10 for Plone 3&lt;/span&gt;
&lt;span class="c"&gt;#ipython = 0.10.2&lt;/span&gt;
&lt;span class="na"&gt;ipython&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0.12&lt;/span&gt;

&lt;span class="k"&gt;[ipzope]&lt;/span&gt;
&lt;span class="na"&gt;recipe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;zc.recipe.egg&lt;/span&gt;
&lt;span class="na"&gt;eggs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;ipython ${instance:eggs}&lt;/span&gt;
&lt;span class="na"&gt;initialization&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="s"&gt;import sys, os&lt;/span&gt;
    &lt;span class="c"&gt;# NOTE: Include this line for Plone 3&lt;/span&gt;
    &lt;span class="c"&gt;#os.environ["SOFTWARE_HOME"] = "${instance:zope2-location}/lib/python"&lt;/span&gt;
    &lt;span class="s"&gt;os.environ["INSTANCE_HOME"] = "${instance:location}"&lt;/span&gt;
    &lt;span class="s"&gt;sys.argv[1:1] = "--profile zope2".split()&lt;/span&gt;
&lt;span class="c"&gt;# NOTE: Include this line for Plone 3&lt;/span&gt;
&lt;span class="c"&gt;#extra-paths = ${instance:zope2-location}/lib/python&lt;/span&gt;
&lt;span class="na"&gt;scripts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;ipython=ipzope&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Notice that the &lt;code&gt;--profile&lt;/code&gt; option is new, they removed the &lt;code&gt;-p&lt;/code&gt; option in the latest IPython. The &lt;code&gt;--profile&lt;/code&gt; still works with IPython 0.10, so we can keep that option for both versions of our part. We are also calling the profile &lt;code&gt;zope2&lt;/code&gt; instead of the normal &lt;code&gt;zope&lt;/code&gt;. This is because IPython 0.10 was bundled with the &lt;code&gt;zope&lt;/code&gt; profile, so we won't be able to use our new and improved profile unless we rename it.&lt;/p&gt;
&lt;h3&gt;Set up the zope2 IPython profile&lt;/h3&gt;
&lt;p&gt;Now that we have this added to our buildout, we need to get IPython set up with the profile. This is where things get difficult. The profile format has changed from 0.10 to 0.12, this means we should make a copy before we do anything else. This directory will only be present if you have already used IPython in the past.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd
$ cp -r .ipython .ipython_0.10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you don't have an IPython directory, running &lt;code&gt;ipython&lt;/code&gt; or &lt;code&gt;bin/ipzope&lt;/code&gt; will create one for you. The 0.10 version will tell you that it is creating it, the 0.12 version just silently does it. Let's go ahead and create the config skeleton.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd path/to/buildout
$ bin/ipzope
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now let's add in the &lt;a href="https://svn.plone.org/svn/collective/dotipython/trunk/"&gt;Zope profile&lt;/a&gt;. I have merged the Plone 4 branch that Kees created and fixed up a few other things, so we can now use the trunk. Let's check that out for use later.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd
$ svn co http://svn.plone.org/svn/collective/dotipython/trunk/ .dotipython
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now let's symlink into the proper places. The 0.10 profile expects this to be a file named &lt;code&gt;ipy_profile_&amp;lt;name&amp;gt;.py&lt;/code&gt;, where &lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt; is the profile name.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd ~/.ipython
$ ln -s ~/.dotipython/ipy_profile_zope.py ipy_profile_zope2.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice that we have renamed it to &lt;code&gt;zope2&lt;/code&gt; here to avoid the clash with the profile included with IPython.&lt;/p&gt;
&lt;p&gt;Now let's add a 0.12 friendly version. The latest version expects a profile to be a directory in the format &lt;code&gt;profile_&amp;lt;name&amp;gt;&lt;/code&gt;. The actual Python file will live in a &lt;code&gt;startup&lt;/code&gt; sub-folder of the profile.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd ~/.ipython
$ mkdir -p profile_zope2/startup
$ cd profile_zope2/startup
$ ln -s ~/.dotipython/ipy_profile_zope.py .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In this case, it doesn't matter what the name of the Python file is inside the &lt;code&gt;startup&lt;/code&gt; directory. IPython will just read each file in alphabetically.&lt;/p&gt;
&lt;p&gt;Now we can start up &lt;code&gt;ipzope&lt;/code&gt; and we will have all of the Zope features that we are accustomed to.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd path/to/buildout
$ bin/ipzope
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just remember that you will have to change the &lt;code&gt;[ipzope]&lt;/code&gt; part slightly and require &lt;code&gt;ipython = 0.10&lt;/code&gt; for use on Plone 3.&lt;/p&gt;
&lt;h3&gt;Working with 0.10 and 0.11+&lt;/h3&gt;
&lt;p&gt;The last nagging issue that you will run into is that when you run a IPython 0.12 shell, it will automatically upgrade your &lt;code&gt;~/.ipython&lt;/code&gt; directory. If you want the prompt to work correctly with 0.10, you will have to have a copy of your &lt;code&gt;ipythonrc&lt;/code&gt; and &lt;code&gt;ipy_user_conf.py&lt;/code&gt; files handy to put back in place. We can use the copy we made earlier.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cp ~/.ipython_10/ipythonrc ~/.ipython/.
$ cp ~/.ipython_10/ipy_user_conf.py ~/.ipython/.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you can use the 0.10 version properly again. If you don't have a copy of a 0.10 &lt;code&gt;~/.ipython&lt;/code&gt;, you can run the 0.10 version of ipython to generate a new &lt;code&gt;~/.ipython&lt;/code&gt; directory (you will have to move the current one out of the way first).&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;If you are doing Plone development without the use of a good interactive debugger, you are missing out because you can't run code interactively and figure out an issue efficiently. Try setting up IPython or try out &lt;a class="external-link" href="http://blog.ipnext.it/?p=285"&gt;bpython for an alternate option&lt;/a&gt;. This will take your Plone development to the next level by getting you closer to the code and making you more productive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; To use the 0.10 version after having used 0.12, you need the &lt;code&gt;ipy_user_conf.py&lt;/code&gt; also. Instructions above updated.&lt;/p&gt;</description>
                <author>Clayton Parker</author>

                
                    <category>IPython</category>
                
                
                    <category>Plone 4</category>
                
                
                    <category>Buildout</category>
                
                
                    <category>Plone</category>
                

                <pubDate>Thu, 12 Jan 2012 10:45:00 -0500</pubDate>

                
            </item>
        
        
            <item>
                <title>Why PEP8 Makes your Plone Development Easier</title>
                <guid>http://www.sixfeetup.com/blog/why-pep8-for-plone-development</guid>
                <link>http://www.sixfeetup.com/blog/why-pep8-for-plone-development</link>
                <description>&lt;p id="whypep8makesyourplonedevelopmenteasier"&gt;Hardly any software is maintained by the original author for its whole life and some claim that 80% of the lifetime cost of a piece of software comes from maintaining that code.&lt;/p&gt;
&lt;p&gt;Plone, as an open source software, is developed and maintained by thousands of developers from around the world. Therefore our Plone development team gets regularly tapped for help to make a Plone site faster or add new functionalities to it.&lt;/p&gt;
&lt;p&gt;Picking up code that is badly written is like picking up a book in another language. Imagine reading your favorite book in English if the words were written from right to left. Scanning is hard. You have to read every single word. Understanding the story plot (i.e. code) is a much slower process and much less enjoyable experience.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Good vs. Evil" class="image-right" id="goodvs.evil" src="goodvsevil.png/image_mini" /&gt;&lt;/p&gt;
&lt;p&gt;Code validation (i.e. testing) is also a necessary activity that sends developers on a hunt for what might be causing a specific bug. If the code is clean, finding and resolving the error is much faster.&lt;/p&gt;
&lt;p&gt;In short: bad code is both evil and expensive to both a development team and their client.&lt;/p&gt;
&lt;h2 id="codestandardstotherescue"&gt;Code Standards To The Rescue&lt;/h2&gt;
&lt;p&gt;Fortunately, standards are here to prevent issues that could arise from bad code. Code standards define code layout (indentation, spacing, blank lines, line length, etc.), naming conventions, comment usage and code structure.&lt;/p&gt;
&lt;p&gt;Senior Plone Developer David Blewett explains: "Code standards are all about making code look consistent. When people from several projects all use the same guidelines, you can scan a given piece of code for a section that you are looking for much more easily."  Enhanced code readability allows developers to find errors more easily and more quickly, and collaborate with each other more effectively. This is crucial for Six Feet Up as we closely collaborate with our clients' Plone developers and other Plone Development partners.&lt;/p&gt;
&lt;p&gt;Code standards also make finding similar chunks of code across a large code base much easier. This saves our Plone Development team valuable time when working on large  development projects. Not to mention the fact that educated clients often require their enterprise software development vendors to follow best practices...&lt;/p&gt;
&lt;p&gt;Lastly, if you ship your source code as a product, you need to make sure it is as well packaged and clean as any other product you create. This speaks to the quality of your work and the reliability of your brand.&lt;/p&gt;
&lt;h2 id="whyusepep8inyourplonedevelopment"&gt;Why Use PEP8 In Your Plone Development&lt;/h2&gt;
&lt;p&gt;PEP8 is a coding convention for Python code that was established in 2001. What we like about PEP8 is that it was written at the language level. PEP8 doesn't explicitly mandate each detail of how to format code. It provides the basis for the big choices (tabs vs. spaces for indenting, indent width, line length, etc). As long as code follows those and is internally consistent, it's easy to read.&lt;/p&gt;
&lt;p&gt;Just for fun, here are our Plone development team's top two PEP8 pet peeves: 1) lines of code should be less than 79 character long so as to have 3 files open side by side on your screen, and 2) you should organize import statements by external package to make dependencies explicit.&lt;/p&gt;
&lt;h2 id="howtostartincorporatingpep8inyourdailyplonedevelopmentroutine"&gt;How To Start Incorporating PEP8 In Your Daily Plone Development Routine&lt;/h2&gt;
&lt;p&gt;Read the &lt;a class="external-link" href="http://www.python.org/dev/peps/pep-0008/"&gt;style guide for Python code&lt;/a&gt; written by Guido van Rossum and Barry Warsaw. Then watch the talk that Clayton Parker, Senior Developer at Six Feet Up, gave at PyOhio entitled &lt;a class="external-link" href="http://python.mirocommunity.org/video/1799/pyohio-2010-code-with-style"&gt;Code with Style&lt;/a&gt; (slides are up on &lt;a class="external-link" href="http://www.slideshare.net/claytron/code-with-style"&gt;Slideshare&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Also read the following article about having a concept of "bad" and "well" formatted code: &lt;a href="http://www.joelonsoftware.com/articles/Wrong.html"&gt;http://www.joelonsoftware.com/articles/Wrong.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Finally, leverage a command-line script that you can run to check existing code: &lt;a href="http://pypi.python.org/pypi/pep8/"&gt;PEP8&lt;/a&gt; is released on PyPI so you can install it using your favorite packaging tool (easy_install, pip, buildout).&lt;/p&gt;
&lt;p&gt;And make sure to train your Plone development team on PEP8 techniques on a regular basis. It usually is a great idea to appoint one of your programmers as your PEP8 champion.&lt;/p&gt;</description>
                <author>Calvin Hendryx-Parker</author>

                
                    <category>Development</category>
                
                
                    <category>Python</category>
                
                
                    <category>Tips</category>
                
                
                    <category>Plone</category>
                

                <pubDate>Mon, 09 Jan 2012 09:35:00 -0500</pubDate>

                
            </item>
        
        
            <item>
                <title>5 Ways to Improve Your Blogging Effectiveness</title>
                <guid>http://www.sixfeetup.com/blog/5-ways-to-improve-your-blogging-effectiveness</guid>
                <link>http://www.sixfeetup.com/blog/5-ways-to-improve-your-blogging-effectiveness</link>
                <description>&lt;p&gt;Here are five tips to help you get the most out of your blogging efforts:&lt;/p&gt;
&lt;h3&gt;1. Understand why blogging is key...&lt;/h3&gt;
&lt;p&gt;... This will motivate you to blog more. Most people who don't blog cite lack of time as a major excuse. But blogs have a big impact on traffic and online visibility. First off, blog posts influence SEO because the frequency of content changes is important to search engines. Then they promote the fact that your organization is keeping up with new technologies and is using it to reach out and communicate with its audiences (communication is more key than ever). Finally, blogs have a training benefit because they force marketers to think harder about positioning and key messages.&lt;/p&gt;
&lt;div&gt;
&lt;h3&gt;2. Target the right frequency and length&lt;/h3&gt;
&lt;p&gt;Many people also imagine they need to blog every day and output a full-blown white paper each time. This just isn't true. Blogging twice a week and targeting about 300-400 words per blog is adequate. This should relieve some pressure and make the task easier to fit in a calendar.&lt;/p&gt;
&lt;div&gt;
&lt;h3&gt;3. Set up individual blogs&lt;/h3&gt;
&lt;p&gt;&lt;a class="external-link" href="http://bit.ly/sCkxUS"&gt;&lt;img alt="Indiana Historical Society Blog as Implemented by Six Feet Up" class="image-right" src="IndianaHistoricalSociety_blog.png/image_mini" /&gt;&lt;/a&gt;Mid to large companies wonder whether to set up a corporate blog or rely on individual blogs. Yet most customers are yearning for a one-on-one discussion with an individual, not a corporation. We, at Six Feet Up, set up our company blog to be a collection of individual voices and we think this structure resonates much better than a soul-less corporate message. Which is why we also ask our team members to redistribute our blog posts. This is also the strategy embraced by one of our clients: the Indiana Historical Society.&lt;/p&gt;
&lt;div&gt;
&lt;h3&gt;4. Turn to your clients for inspiration&lt;/h3&gt;
&lt;p&gt;Marketers sometimes wonder what to blog about. An endless supply list is simply your clients' questions. Just identify the most comment topics and address them in your blog posts. Another great way to leverage blog posts is to use them as a follow-up to an event where you presented. Simply prompt your audience to opt-in a mailing list by offering "6 Tips You May Have Missed From Today's Presentation Emailed to You Tomorrow. Just Opt In Here".&lt;/p&gt;
&lt;div&gt;
&lt;h3&gt;5. Include a call-to-action&lt;/h3&gt;
&lt;p&gt;Remember to use a very effective technique to boost your blog's effectiveness: always end your post with a powerful call-to-action. State who you are, what benefits your clients enjoy by working with you, and what your readers can easily do to get something for free. The key is to make it easy for people to connect with you easily and passively.&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;&lt;i&gt;Gabrielle Hendryx-Parker is the CEO and co-founder of Six Feet Up, a company that helps universities, non-profits and life sciences organizations implement sophisticated websites. To see how we helped Indiana Historical Society roll-out their blog, please visit &lt;a class="external-link" href="http://bit.ly/sCkxUS"&gt;http://bit.ly/sCkxUS&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
                <author>Gabrielle Hendryx-Parker</author>

                
                    <category>Search Engines</category>
                
                
                    <category>Blogging</category>
                

                <pubDate>Fri, 09 Dec 2011 06:30:00 -0500</pubDate>

                
            </item>
        
        
            <item>
                <title>Six Feet Up’s Take-Aways from the 2011 Plone Conference</title>
                <guid>http://www.sixfeetup.com/blog/six-feet-up2019s-take-aways-from-the-2011-plone-conference</guid>
                <link>http://www.sixfeetup.com/blog/six-feet-up2019s-take-aways-from-the-2011-plone-conference</link>
                <description>&lt;p&gt;&lt;img alt="2011 Plone Conference Logo" class="image-right" src="2011PloneConfLogo.gif" /&gt;Six Feet Up attended the &lt;a href="http://ploneconf.org"&gt;Plone Conference&lt;/a&gt; in force this year with 8 Sixies traveling to San Francisco, and 4 of them presenting. Here’s a summary of what we learned and why we think it is important if you are using or considering using the open source CMS &lt;a href="http://plone.org"&gt;Plone&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="thefutureofplone"&gt;The Future of Plone&lt;/h2&gt;
&lt;p&gt;Some of our favorite talks during the conference were those related to up-and-coming tools and technologies. Plone is heading toward separating authoring tools from template HTML with &lt;a href="http://pypi.python.org/pypi/plone.app.cmsui"&gt;CMSUI&lt;/a&gt;, which means that the standard UI elements are moved out of the main template and the main page markup, and into an isolated iframe so they don’t interact with the overall theme. This will result in faster performance for anonymous users and will make it easier to theme Plone sites. Upgrading to newer versions and integrating new add-on functionalities will also get simplified as a result of that change. And it will be possible to offer multiple default themes to choose from out-of-the box.&lt;/p&gt;
&lt;p&gt;Last, the community is finally hearing content editors’ cries for a better visual editor, which is prompting a group of developers to evaluate and re-evaluate options available out there, including &lt;a href="http://ckeditor.com"&gt;CKEditor&lt;/a&gt;, &lt;a href="http://aloha-editor.org"&gt;Aloha&lt;/a&gt;, and &lt;a href="http://www.tinymce.com"&gt;TinyMCE&lt;/a&gt;. Stay tuned for the WYSIWIG Battle!&lt;/p&gt;
&lt;h2 id="integration"&gt;Integration&lt;/h2&gt;
&lt;p&gt;David Glick (&lt;a href="http://groundwire.org/"&gt;Groundwire&lt;/a&gt;) presented an interesting Plone-Salesforce integration project for &lt;a href="http://netimpact.org/"&gt;Net Impact&lt;/a&gt; leveraging &lt;a href="http://plone.org/products/dexterity"&gt;Dexterity&lt;/a&gt;, a Plone add-on that makes it possible to create new content types through the web. Using the Dexterity-based membrane user code, dexterity.membrane, Groundwire rolled out two-way content syndication so that member profiles were kept in sync in both Plone and Salesforce.com.&lt;/p&gt;
&lt;p&gt;David also showcased a donation system implementation using a custom &lt;a href="http://www.plonegetpaid.com"&gt;GetPaid&lt;/a&gt; wrapper. The small library allowed them to use GetPaid without the heavy front-end code that comes with the Plone e-commerce product.&lt;/p&gt;
&lt;p&gt;Geir Baekholt (&lt;a href="http://jarn.com"&gt;Jarn&lt;/a&gt;) presented a fantastic integration project between XMPP (Jabber) and Plone called &lt;a href="http://plone.org/products/jarn.xmpp.core"&gt;jarn.xmpp&lt;/a&gt;. He demoed realtime collaborative editing a la Etherpad inside a Plone site. This will definitely be a winning feature for Plone-based intranets.&lt;/p&gt;
&lt;h2 id="theming"&gt;Theming&lt;/h2&gt;
&lt;p&gt;Six Feet Up Senior Template Developer Chrissy Wainwright spent her first two full days in San Francisco training a group of 13 people on how to theme Plone.&lt;/p&gt;
&lt;p&gt;The hot topic always seemed to be &lt;a href="http://diazo.org"&gt;Diazo&lt;/a&gt; and Chrissy was asked a lot of questions about her opinions and level of difficulty in presenting it as a training topic. While currently we aren’t using Diazo much ourselves, it is exciting to see all the plans in the making for &lt;a href="http://pypi.python.org/pypi/plone.app.theming"&gt;plone.app.theming&lt;/a&gt; and how it will be used.&lt;/p&gt;
&lt;p&gt;Geir Baekholt also showed a demo of CMSUI (see “The Future of Plone above”), the new slick editing interface for Plone with Google-style editing tools that are sure to delight content contributors.&lt;/p&gt;
&lt;p&gt;Rob Porter (&lt;a href="http://weblion.psu.edu"&gt;Weblion&lt;/a&gt;) presented a talk on “Making Plone Mobile using Responsive Web Design” and demoed examples of mobile pages where page elements automatically resize and move around to adapt to new screen constraints in order to answer the challenges posed by a plethora of mobile devices. His tip: design the user experience with a small screen size first, and then expand. Rob also stressed on the fact many organizations are currently rolling out mobile versions of their sites.&lt;/p&gt;
&lt;p&gt;We also learned a bit from Steve McMahon’s (&lt;a href="http://www.reidmcmahon.com/"&gt;Reid-McMahon&lt;/a&gt;) Javascript talk in relation to HTML5 and Plone 4 overlays.&lt;/p&gt;
&lt;h2 id="intranets"&gt;Intranets&lt;/h2&gt;
&lt;p&gt;Six Feet Up CEO Gabrielle Hendryx-Parker spoke with many Plone company owners and several of them are rolling out Plone-based intranets that are now more than just collaboration platforms. In addition to wiki pages, blog posts and file sharing, new intranets also include custom tools to address specific business needs. Interestingly, many of those projects are about moving legacy intranets out of Microsoft SharePoint. And more and more Plone consultants are investigating the open source Knowledge Management System, &lt;a href="http://karlproject.org"&gt;KARL&lt;/a&gt;, as a platform for those intranet projects, as Six Feet Up started doing over a year ago.&lt;/p&gt;
&lt;h2 id="relatedtechnologies"&gt;Related Technologies&lt;/h2&gt;
&lt;p&gt;This year at the Plone Conference there was a well attended related technologies track. There were a lot of talks on technologies that compliment Plone such as &lt;a href="http://lucene.apache.org/solr/"&gt;Solr&lt;/a&gt;, &lt;a href="http://wsgi.org"&gt;WSGI&lt;/a&gt;, &lt;a href="http://git-scm.com"&gt;git&lt;/a&gt; and &lt;a href="http://www.pylonsproject.org/"&gt;Pyramid&lt;/a&gt;. Six Feet Up Senior Developer Clayton Parker gave a well-received talk about how to configure Solr to address specific customer’s needs. There was a lot of interest in these new technologies and how they relate to the Plone community.&lt;/p&gt;
&lt;h2 id="hosting"&gt;Hosting&lt;/h2&gt;
&lt;p&gt;The main focus of the conference was on developement, yet there were a few talks about the hosting aspects of Plone. One exceptional talk was given by Adam Terry and the &lt;a href="http://www.pretaweb.com/"&gt;PretaWeb Group&lt;/a&gt; about their development of a high availability, high traffic site in Australia designed to deliver tsunami warnings and information. Their talk covered both the use of geographically dispersed hosting centers and content delivery networks to maintain a high level of service in the event of a natural disaster. Projects like these showcase the capabilities of Plone and the maturity of the platform.&lt;/p&gt;
&lt;h2 id="lastword"&gt;Last Word&lt;/h2&gt;
&lt;p&gt;Overall, the conference was very well attended, with close to 60% of the participants coming from another country, and 50% new-comers, which are signs of a healthy and growing community. We are very excited about the direction Plone is taking and we look forward to the great improvements that are coming, especially in the area of usability.&lt;/p&gt;
&lt;p&gt;As is the case every year, the &lt;a href="http://plone.org/foundation"&gt;Plone Foundation&lt;/a&gt; met and elected a new board. This year, our very own Director of Business Development, Carol Ganz, was selected to serve with a group of 7 talented individuals from around the world.&lt;/p&gt;
&lt;p&gt;San Francisco is still as energizing as it ever was, and shows no sign of ever slowing down.&lt;/p&gt;</description>
                <author>Calvin Hendryx-Parker</author>

                
                    <category>Conference</category>
                
                
                    <category>Six Feet Up</category>
                
                
                    <category>Plone Conference</category>
                
                
                    <category>Plone</category>
                

                <pubDate>Thu, 08 Dec 2011 07:00:00 -0500</pubDate>

                
            </item>
        

    </channel>
</rss>



