<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Christopher Warner</title>
	<atom:link href="http://weblog.kernelcode.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://weblog.kernelcode.com</link>
	<description>Studies and thoughts, usually in coherent fashion.</description>
	<lastBuildDate>Thu, 27 Sep 2012 12:38:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Specification Pepsi Openindiana Build 148 &#8211; FAQ</title>
		<link>http://weblog.kernelcode.com/2011/03/14/specification-pepsi-openindiana-build-148-faq/</link>
		<comments>http://weblog.kernelcode.com/2011/03/14/specification-pepsi-openindiana-build-148-faq/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 02:48:39 +0000</pubDate>
		<dc:creator>Christopher Warner</dc:creator>
				<category><![CDATA[Advogato]]></category>
		<category><![CDATA[Commentary]]></category>
		<category><![CDATA[openindiana]]></category>
		<category><![CDATA[faq]]></category>

		<guid isPermaLink="false">http://weblog.kernelcode.com/?p=642</guid>
		<description><![CDATA[I&#8217;m going to try in earnest to keep this post updated with relevant information about Specification Pepsi &#8211; Openindiana Build 148 as i&#8217;m now calling it. How much energy does the entire machine use? On initial boot with the Samsung &#8230; <a href="http://weblog.kernelcode.com/2011/03/14/specification-pepsi-openindiana-build-148-faq/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to try in earnest to keep this post updated with relevant information about <a title="Specification Pepsi - Openindiana Build 148" href="http://weblog.kernelcode.com/2011/03/06/openindiana-zfs-server/" target="_blank">Specification Pepsi &#8211; Openindiana Build 148</a> as i&#8217;m now calling it.</p>
<div class="wp-caption aligncenter" style="width: 568px"><img title="Specification Pepsi Openindiana Build 148" src="http://dl.dropbox.com/u/5510475/oipepsi.jpg" alt="" width="558" height="193" /><p class="wp-caption-text">Specification Pepsi Openindiana Build 148</p></div>
<ol>
<li>
<h2>How much energy does the entire machine use?</h2>
<div>On initial boot with the Samsung Optical SH-223L/BEBS spinning up we hit 95 watts, the system then drops to about 50 watts and as it idles out drops to between 47 and 48 watts. While pushing the machine using all 4 drives as stated in the spec, we fluctuate between 50 and 57 watts.
</div>
</li>
<li>
<h2>Why the 750w ATX Power supply?</h2>
<div>Based on the above data the 750w would seem to be overkill but in my specific case I have multiple units plugged into the motherboard. If one doesn&#8217;t plan on adding more than 4-6 hard drives you could easily get away with a 200-250 watt power supply. I&#8217;m going to search around for one and update the original specification.
</div>
</li>
<li>
<h2>Do you need to have the optical drive?</h2>
<div>Not necessarily, you could technically remove the optical drive after install of the specification if you wanted to save on initial start up power. However the unit spins up only on start-up and considering it will be rarely if ever used, it&#8217;s pretty much a complete non-issue.
</div>
</li>
<li>
<h2>No ECC memory, will that be an issue?</h2>
<div>In the original specification I noted the addition of ECC memory. Well, the Intel D5x doesn&#8217;t support ECC memory most likely to save as much energy as possible. It also doesn&#8217;t support Dual Channel memory, again for the same reason. Not the biggest deal in the world for this machine as it&#8217;s primarily used for storage and technically speaking the likelyhood of getting severe degradation or errors are low. Still, it would of been a nice to have. To my knowledge I don&#8217;t know of any mini-itx motherboard manufacturers that support ECC memory. At least not yet.</div>
<div></div>
</li>
<li>
<h2>Instead of the D510, why not the D525?</h2>
<div>Well, if we take a <a title="Comparision between the D510 and the D525 Intel mini-itx motherboard" href="http://ark.intel.com/Compare.aspx?ids=43098,49490" target="_blank">quick look at a comparison between the D510 and the D525</a> we see that we gain a minute speed bump in processing and DDR3 instead of DDR2 and wattage remains unchanged. None of this quite frankly mattered to me at the time as the D510 was roughly $20.00 USD less. None of the stated improvements would significantly speed up the function of archival and storage. This obviously changes if you plan to do compression or encryption with ZFS in which case it may then become useful. In reality though it would make much more sense to apply that extra $20.00 USD to a proper gzip or encryption off-board card.
</div>
</li>
<li>
<h2>How much will it cost you to operate this unit?</h2>
<div>I pay roughly 9 cents per kwh off the top of my head. I&#8217;ll have to update with exacts next time I check but based on that number we are looking at close to $3.05 USD per month with the machine running at an average of 0.47kw/h or roughly $37.00 USD a year. Not such a horrible price for the machine that backs up my lively hood. Not that bad at all.</div>
</li>
</ol>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://weblog.kernelcode.com/2011/03/06/openindiana-zfs-server/" rel="bookmark" class="crp_title">OpenIndiana ZFS Server</a></li><li><a href="http://weblog.kernelcode.com/2008/12/26/opensolaris-zfs-timemachine-backup-server/" rel="bookmark" class="crp_title">Openindiana ZFS + TimeMachine Backup Server</a></li><li><a href="http://weblog.kernelcode.com/2009/03/17/mini-displayport-to-vga-firmware-update-awesome/" rel="bookmark" class="crp_title">Mini DisplayPort to VGA firmware update &#8211; Awesome!</a></li><li><a href="http://weblog.kernelcode.com/2010/05/27/steve-is-right/" rel="bookmark" class="crp_title">Steve is right.</a></li><li><a href="http://weblog.kernelcode.com/2009/04/07/how-to-make-proper-design-decisions-processing-xml/" rel="bookmark" class="crp_title">How to make proper design decisions &#8211; Processing XML</a></li></ul></div><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Bookmark</a> </p>]]></content:encoded>
			<wfw:commentRss>http://weblog.kernelcode.com/2011/03/14/specification-pepsi-openindiana-build-148-faq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenIndiana ZFS Server</title>
		<link>http://weblog.kernelcode.com/2011/03/06/openindiana-zfs-server/</link>
		<comments>http://weblog.kernelcode.com/2011/03/06/openindiana-zfs-server/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 21:26:41 +0000</pubDate>
		<dc:creator>Christopher Warner</dc:creator>
				<category><![CDATA[Advogato]]></category>
		<category><![CDATA[Commentary]]></category>
		<category><![CDATA[openindiana]]></category>
		<category><![CDATA[zfs]]></category>

		<guid isPermaLink="false">http://weblog.kernelcode.com/?p=613</guid>
		<description><![CDATA[Recently I had to upgrade the hardware for my research server due to a massive hardware failure. The failure itself hasn&#8217;t been diagnosed properly but turns out it was essentially a ram failure of my OCZ DDR2 PC2-6400 modules or &#8230; <a href="http://weblog.kernelcode.com/2011/03/06/openindiana-zfs-server/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Recently I had to upgrade the hardware for my research server due to a massive hardware failure. The failure itself hasn&#8217;t been diagnosed properly but turns out it was essentially a ram failure of my OCZ DDR2 PC2-6400 modules or a chip failure. The near loss of all of my research data and work had me in a slight panic. Luckily getting new hardware got me up and running and everything worked out fine.</p>
<div class="wp-caption aligncenter" style="width: 568px"><img title="Specification Pepsi Openindiana Build 148" src="http://dl.dropbox.com/u/5510475/oipepsi.jpg" alt="" width="558" height="193" /><p class="wp-caption-text">Specification Pepsi Openindiana Build 148</p></div>
<p>The machine is named &#8216;pepsi&#8217; and consist of the following hardware (all prices are current as of 03/22/2011):</p>
<ul>
<li><a title="Lian LI PC-Q08B" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811112265&amp;cm_re=lian_li_pc-q08-_-11-112-265-_-Product">Lian LI PC-Q08B Black Aluminum Mini-ITX Tower Computer Case</a> &#8211; $119.00 USD &#8211; Optional</li>
<li><a title="Intel BOXD525MW Intel Atom D525 @ 1.8GHz (Dual Core) BGA559" href="http://www.buy.com/prod/intel-d525mw-desktop-motherboard-intel-mini-itx-1-x-processor-support/q/loc/101/217168207.html" target="_blank">Intel BOXD525MW Intel Atom D525@ 1.8GHz (Dual Core) BGA559 Intel NM10 Mini ITX Motherboard/CPU Combo</a>- $79.99 USD</li>
<li>Custom SATA card built to my specifications &#8211; $PRICELESS</li>
<li><a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16815287006&amp;nm_mc=OTC-Froogle&amp;cm_mmc=OTC-Froogle-_-Add-On+Cards-_-Vantec-_-15287006">Vantec 6-Port SATA II 150 Pci Host Card Model UGT-ST310R</a> &#8211; $31.99 USD</li>
<li><a title="Corsair DDR2 Memory 2GB module" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820145239">Corsair 2GB 240-Pin DDR2 SDRAM DDR2 800 Model VS2GB800D2 G</a> &#8211; $29.99 USD</li>
<li><a title="Zalman 120mm Case Fan" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16835118069&amp;cm_re=120_mm_fan_zalman-_-35-118-069-_-Product">Zalman F3 FDB 120mm Fluid Dynamic Bearing Case Fan</a> &#8211; $12.99 USD &#8211; Optional</li>
<li><a title="CoolerMaster R4 Silent 140mm Case Fan" href="http://www.amazon.com/gp/product/B00314J422">Cooler master R4 Silent 140mm Case Fan R4-S4S-10AK-GP</a> &#8211;  $11.99 USD &#8211; Optional</li>
<li><a title="Cooler Master GX series 750W ATX Power Supply" href="http://www.amazon.com/Cooler-Master-Power-Supply-RS750-ACAAE3-US/dp/B0035WTD2Q">Cooler master GX series 750W ATX Power Supply RS570-ACAAE3-US</a> &#8211; $100.00 USD  *</li>
<li><a title="Samsung DVD+RW Optical drive SH-S223L/BEBS" href="http://www.amazon.com/gp/product/B002HFWBIA">Samsung DVD+RW Optical drive SH-S223L/BEBS</a> &#8211; $28.54 &#8211; Optional</li>
<li>2x Western Digital 1TB *</li>
<li>2x Western Digital 320GB *</li>
</ul>
<p>* This item is to be part of a refactor meaning that this was originally built for my needs but one doesn&#8217;t actually need 750 Watts for power and can get by with a 200-250W power supply. Also not included is the price of the 4 hard drives as these are what I had in the original pool. In this case a sufficient comparable HD should do and not fall to far out of bounds in regards to power requirements.</p>
<p>Software wise we have:</p>
<ul>
<li><a title="OpenIndiana Build 148 x86 dvd iso" href="http://dlc.openindiana.org/isos/148/oi-dev-148-x86.iso">OpenIndiana Build 148 x86</a></li>
</ul>
<p>A couple of things to note here on the machine build. The BIOS for the D510 Intel NM10 needed to be upgraded to the latest version as the board I ordered and received was almost a year behind in updates. Newegg did get the delivery to me within 1 day of ordering however which was blazingly fast considering. The fans were ordered because the case comes with a 120 and 140mm fan. The 120mm fan isn&#8217;t that loud but the 140mm fan has blue leds, which I simply have no tolerance for. The D510 mini-itx board itself is amazingly small and includes a mini pcie port that I can eventually stash a mini pcie wireless card in.</p>
<p>Also, the Vantec 6-Port has 4 internal sata ports and 2 external ESATA ports. It&#8217;s powered by the SiS 3114 raid controller which is basically some hodge podge mess onboard. They provide a straight-through IDE BIOS upgrade for the chipset available from the <a title="Silicon Image Driver/BIOS download page" href="http://www.siliconimage.com/support/searchresults.aspx?pid=28&amp;cat=15">Silicon Image manufacturers website</a>. You will need this if you want to use this chipset under OpenIndiana primarily because it doesn&#8217;t automatically detect this chipset otherwise. Moving from sata to ide may mean no hot-swap but I haven&#8217;t necessarily tried this yet. I&#8217;ll update after I hook up another 4TB store, i&#8217;m moving the data around now as we speak.</p>
<p>Luckily my custom board wasn&#8217;t damaged and all of the data on disk were fine. I am currently not at liberty to discuss the custom add-on board but hopefully i&#8217;ll remember to revisit this post when I am.</p>
<p>Normally I only buy ECC ram however to keep cost low and because I had verified my data wasn&#8217;t severely damaged, I have foregone the option for this machine. After some burn-in time I will most likely upgrade to an ECC ram module.</p>
<p>Before the hardware failure the most critical and important pool was my research pool which was a RAIDZ 1TB zfs pool. After installing OpenIndiana and setting up netatalk which now supports Time Machine backup I simply did a zfs import -f poolname and was back in business.</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://weblog.kernelcode.com/2011/03/14/specification-pepsi-openindiana-build-148-faq/" rel="bookmark" class="crp_title">Specification Pepsi Openindiana Build 148 &#8211; FAQ</a></li><li><a href="http://weblog.kernelcode.com/2008/12/26/opensolaris-zfs-timemachine-backup-server/" rel="bookmark" class="crp_title">Openindiana ZFS + TimeMachine Backup Server</a></li><li><a href="http://weblog.kernelcode.com/2010/05/27/steve-is-right/" rel="bookmark" class="crp_title">Steve is right.</a></li><li><a href="http://weblog.kernelcode.com/2009/03/17/mini-displayport-to-vga-firmware-update-awesome/" rel="bookmark" class="crp_title">Mini DisplayPort to VGA firmware update &#8211; Awesome!</a></li><li><a href="http://weblog.kernelcode.com/2009/03/04/external-screen-blanking-apple-driverhardware-issue/" rel="bookmark" class="crp_title">External Screen Blanking &#8211; Apple Driver/Hardware Issue</a></li></ul></div><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Bookmark</a> </p>]]></content:encoded>
			<wfw:commentRss>http://weblog.kernelcode.com/2011/03/06/openindiana-zfs-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plone and div blocking</title>
		<link>http://weblog.kernelcode.com/2011/01/19/plone-and-div-blocking/</link>
		<comments>http://weblog.kernelcode.com/2011/01/19/plone-and-div-blocking/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 19:15:05 +0000</pubDate>
		<dc:creator>Christopher Warner</dc:creator>
				<category><![CDATA[Advogato]]></category>
		<category><![CDATA[Commentary]]></category>
		<category><![CDATA[content management system]]></category>
		<category><![CDATA[plone]]></category>
		<category><![CDATA[body]]></category>
		<category><![CDATA[browserview]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[document]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[page templating]]></category>
		<category><![CDATA[templates]]></category>
		<category><![CDATA[zpt]]></category>

		<guid isPermaLink="false">http://weblog.kernelcode.com/?p=597</guid>
		<description><![CDATA[Excuses I haven&#8217;t written any functional tutorial or such for Plone in a while. I&#8217;m working on a paper involving openid and started some work on an introduction to object and dynamic publishing that I need more time to work &#8230; <a href="http://weblog.kernelcode.com/2011/01/19/plone-and-div-blocking/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h1>Excuses</h1>
<p>I haven&#8217;t written any functional tutorial or such for Plone in a while. I&#8217;m working on a paper involving openid and started some work on an introduction to object and dynamic publishing that I need more time to work on, have random other things moving and etc excuses here. Something quick and useful in the meantime I suppose.</p>
<h1>What is div blocking?</h1>
<p>Div blocking is what I&#8217;m calling the process of returning a CoookedBody() back to your template into a specific html div. It&#8217;s not specific to plone and it&#8217;s a simple and straight-forward method many Plone developers call on. The idea is that you want to be able to return a section of html back into your overall template using a &#8220;Page&#8221; or &#8220;Document&#8221; content type. A simple use case for this is when you want to allow content-editors a chance to change something in the overall webpage using the standard Plone page content type. No sense in creating a new content-type just to return some formatted structured text. The end result is that you would like the final rendered html from that page to fit in-between &lt;div&gt;&lt;/div&gt; tags and for the overall look to leave your layout alone.<span id="more-597"></span>CookedBody() is a method that is apart of the overall Document object located in the Products.CMFDefault egg. It is an accessor method and it looks like this:</p>
<pre>    #
    #   IDocument methods
    #   

    security.declareProtected(View, 'CookedBody')
    def CookedBody(self, stx_level=None, setlevel=0, rest_level=None):
        """ Get the "cooked" (ready for presentation) form of the text.

        The prepared basic rendering of an object.  For Documents, this
        means pre-rendered structured text, or what was between the
         tags of HTML.

        If the format is html, and 'stx_level' or 'rest_level' are not
        passed in or is the same as the object's current settings, return
        the cached cooked text.  Otherwise, recook.  If we recook and
        'setlevel' is true, then set the recooked text and stx_level or
        rest_level on the object.
        """
        if (
            (self.text_format == 'html' or self.text_format == 'plain'
            or (stx_level is None)
            or (stx_level == self._stx_level))
            and
            ((rest_level is None)
            or (rest_level == self._rest_level))
            ):
            return self.cooked_text
        elif rest_level is not None:
            cooked = ReST(self.text, initial_header_level=rest_level)
            if setlevel:
                self._rest_level = rest_level
                self.cooked_text = cooked
            return cooked
        else:
            cooked = stx2html(self.text, level=stx_level, header=0)
            if setlevel:
                self._stx_level = stx_level
                self.cooked_text = cooked
            return cooked</pre>
<p>Reading the documentation of the object method we can see that it returns the cached cooked text which is stored in Plone&#8217;s portal_catalog. One can go ahead and set stx_level or rest_level if you want which will use the reStructuredText parser to get you what you want.</p>
<p>I&#8217;m normally using a <a title="Creating a custom template for a Plone content type" href="http://weblog.kernelcode.com/2010/05/12/creating-a-custom-template-for-a-plone-content-type-2/" target="_blank">custom template in the form of a BrowserView</a> and very rarely am I utilizing Plone&#8217;s default theme. So if you know nothing about BrowserViews then please read the previous link first.</p>
<h1>How to do?</h1>
<p>Pretty simple, you just get the page object that you are looking for and run CookedBody(). So create a page and let&#8217;s call it &#8220;Example&#8221; and fill it with some content. From there in creating your BrowserView lets add the method getTextFromPage() which will take the content from the page Example and return the CookedBody.</p>
<pre>class MySpecialThemeView(BrowserView):

    implements(IMySpecialThemeView):

    def getTextFromPage(self):
    """Get the structured text from a page object with the id/name Example"""

        # We grab the root of our site here
        root = self.portal_eroor.getPortalObject()

        # We then grab the page object with the id Example
        example = getattr(root, "Example")

        # We then grab the body of the page as that is where the content lies
        # We could just as easily grab the title of the page or other attributes if needed
        body = example.CookedBody()

        # We then return body to our web browser
        return body</pre>
<p>That finished our template would resemble something like:</p>
<div class="wp-caption alignnone" style="width: 522px"><img class=" " title="Cooked Template" src="http://dl.dropbox.com/u/5510475/cookedtemplate.png" alt="Cooked Template HTML" width="512" height="368" /><p class="wp-caption-text">HTML Template for CookedBody</p></div>
<p>Where right at the top of the page we have the div named example. That&#8217;s pretty much it!</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://weblog.kernelcode.com/2010/05/12/creating-a-custom-template-for-a-plone-content-type-2/" rel="bookmark" class="crp_title">Creating a custom template for a Plone content type</a></li><li><a href="http://weblog.kernelcode.com/2009/02/19/html-entities-and-encodings/" rel="bookmark" class="crp_title">HTML Entities and Encodings</a></li><li><a href="http://weblog.kernelcode.com/2009/09/29/creating-a-content-type-for-plone-3-x/" rel="bookmark" class="crp_title">Creating a Content Type for Plone 3.x</a></li><li><a href="http://weblog.kernelcode.com/2009/01/29/plone-where-is-it-useful-example-2/" rel="bookmark" class="crp_title">Plone where is it useful? Example #2</a></li><li><a href="http://weblog.kernelcode.com/2007/11/17/zopeplone-have-changed-my-life/" rel="bookmark" class="crp_title">Zope/Plone have changed my life</a></li></ul></div><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Share/Bookmark</a> </p>]]></content:encoded>
			<wfw:commentRss>http://weblog.kernelcode.com/2011/01/19/plone-and-div-blocking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plone 3 Intranets Review</title>
		<link>http://weblog.kernelcode.com/2010/09/30/plone-3-intranets-review/</link>
		<comments>http://weblog.kernelcode.com/2010/09/30/plone-3-intranets-review/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 02:18:36 +0000</pubDate>
		<dc:creator>Christopher Warner</dc:creator>
				<category><![CDATA[Advogato]]></category>
		<category><![CDATA[Commentary]]></category>
		<category><![CDATA[content management system]]></category>
		<category><![CDATA[plone]]></category>
		<category><![CDATA[web semantics]]></category>
		<category><![CDATA[cwarner]]></category>
		<category><![CDATA[cwarner@kernelcode.com]]></category>
		<category><![CDATA[intranets]]></category>
		<category><![CDATA[packt]]></category>
		<category><![CDATA[plone 3 intranets]]></category>
		<category><![CDATA[plone4]]></category>
		<category><![CDATA[victor fernadez de alba]]></category>

		<guid isPermaLink="false">http://weblog.kernelcode.com/?p=519</guid>
		<description><![CDATA[All things considered this book in so far as a technical manual is great coverage of the topic of Plone and Intranets. The author does an excellent job in conveying the material and even if you aren't doing anything with intranets there are several solid chapters on Plone deployment, theming and others that make the book a solid purchase for anyone planning to use Plone for almost any application. I give the author my congrats and highly recommend it as a solid buy. <a href="http://weblog.kernelcode.com/2010/09/30/plone-3-intranets-review/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignleft" style="width: 310px"><img title="Plone 3 Intranets" src="http://ecx.images-amazon.com/images/I/51-58jyDKmL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg" alt="Plone 3 Intranets" width="300" height="300" /><p class="wp-caption-text">Víctor Fernandez de Alba</p></div>
<p>When <a title="Packt Publishing" href="http://www.packtpub.com/" target="_blank">Packt</a> asked me to review this book I have to honestly say that I wasn&#8217;t looking forward to it. Plone as a product has a notorious track record for what I believe to be not the friendliest or most accessible documentation. Regardless of it&#8217;s technical superiority and usability, it&#8217;s a glaring deficiency. This is getting better with time but there is still a lot of work to do. Unfortunately my apprehension was filled with curiosity and I agreed to do so at one of the busiest times for me. That and the fact that instead of going on another tirade about documentation it would probably be useful to<a title="Writing good documentation and presenting your work" href="http://weblog.kernelcode.com/2010/05/20/writing-good-documentation-and-presenting-your-work/" target="_blank"> use my own guidelines </a>in reviewing the book.</p>
<h2>Nutshell for the impatient.</h2>
<p>For those of you that cannot wait, have ADD, or TLDR syndrome here&#8217;s a short summary. Actually, this may come as a shock but I really enjoyed the book. My initial wanton and disregard was primarily for <a title="Chapter 8 Plone 3 Intranets" href="https://www.packtpub.com/sites/default/files/9089-chapter-8-using-content-type-effectively.pdf" target="_blank">Chapter 8</a> but clearly it was simply due to context. Packt should really not use that as a sample chapter for this book, it&#8217;s a complete turn off for several reasons. I will pass that gripe along. That said, there are some tidbits in this book that really make it a good reference manual and a keeper for at least a little while. In regard to technical documentation that means it&#8217;s something you probably want on your shelf if you&#8217;re doing anything with Plone and intranets in the forseeable future. Quite frankly the book should be updated in minor fashion with a subsequent release for Plone 4 as not much has changed and it will help to get the book in hands of more new administrators and users of Plone. With some very minor changes this book could be called Plone 4 Intranets. This issue was most likely do to time constraints as Plone 4 has only recently been released. The intended audience for this book is administrators or new users who tend to do their own administration and I think it&#8217;s successful in reaching that audience. That said on a scale of 1 &#8211; 10 I give the book a strong 7.</p>
<h2>Chapter 1</h2>
<p>The introduction gives a good general background to Plone and how it came into existence. Discussing the excellent security track record of the CMS and it&#8217;s general history up until present. It then begins to segue into the more complicated but powerful features of Plone. Workflow, States and Transitions. This chapter also covers and introduces Python and ZODB (Zope Object Database) and why they are useful not only to Plone but to the entire content management space. It&#8217;s short-and-sweet providing just enough information and background to make it useful to the reader.  There is also a nice overview of the Plone community which introduces the reader to the entire community with a great handshake and welcome that is actually quite refreshing. An introduction on the fine line between extranet and intranets and how the spaces merge in some use case is a great cap for this chapter.<span id="more-519"></span></p>
<h2>Chapter 2</h2>
<p>Some introduction to the ZMI (Zope Management Interface) and a discussion of blob file types with no background was a bit too early I believe. The issue is that blob file types are native to Plone 4 and not Plone 3. It&#8217;s again an issue of time constraint and it must of been difficult for Victor to find the right balance between the two versions but I just don&#8217;t think the mention of the information was relevant here. Also even though ZMI is explained in detail it will be a little hard for non-technical users to fully grasp. The installation of Plone is shown with the <a title="Buildout" href="http://buildout.org" target="_blank">Buildout</a> system instead of the unified installer as a first option which I felt was a little hard to swallow as well. For non Plone users this will all seem foreign extremely early on in the book. However the book shines in guides for installing with the unified installer on the major operating systems environments. This really should have been outlined before the buildout instruction but even there the documentation is precise. The explanation of buildout and how it functions is really good and it takes you down into the specific sections for each buildout configuration which is quite handy. If you don&#8217;t know how to install Plone or have been having trouble you can follow along step-by-step with these instruction.</p>
<p>All in all Chapter 2 feels a little abbreviated and some of the concepts I felt should have been introduced through a relevant example in using them. If you are well versed in Plone it may seem rote here but will make good printed reference material for buildout. Otherwise this chapter maybe slighty confusing to a completely new administrator of Plone. If as a new user you aren&#8217;t readily thrown off by <a title="Buildout" href="http://www.buildout.org/" target="_blank">Buildout</a> introduction you&#8217;ve survived one of the more difficult chapters. Also there is no dire need to use buildout. If you are confused then I recommend reading the sections for the unified installer specified for your operating system and it should help you along digesting some of the concepts.</p>
<h2>Chapter 3</h2>
<p>The chapter starts off with creating a Plone site named &#8220;intranet&#8221;. That one example would of been wholly useful as a step through from Chapter 2. That said this chapter gives a great overview of the breakdown of the default Plone theme installed with Plone 3. This has since been replaced in Plone 4 but that is pointed out in the chapter. We also get a well versed overview of the Plone user interface and how one can go about navigating it. As well as a few good examples on adding some of Plones default content types. This includes a walk-through and breakdown of the content structure and default hierarchy of a Plone site. The <a title="Dublin Core Metadata specification" href="http://dublincore.org/" target="_blank">Dublin Core Metadata specification</a> and good coverage of creating content in Plone is discussed. Including setting up content with some of the default content views. This chapter will certainly help the intended audience in navigation and use of Plone&#8217;s interface and it succeeds in a comprehensive overview here.</p>
<h2>Chapter 4</h2>
<p>In this chapter we deal with the configuration of Plone through it&#8217;s configlets. They are identified, explained and then broken down into a detailed explanation of usage. Good coverage of ZODB (Zope Object Database) packing via the maintenance configlet and the issues and concerns wrapped around that. There is also a section specifically page 65 which discusses the fact that Plone 4 has its own UI for site creation that simply feels a little out of place. The mention of this should have been in Chapter 3. Otherwise this chapter gives a great overview of the power of the ZMI (Zope Management Interface) and how it can affect site health if administered incorrectly. A valid and perfect apt warning as we delve deeper into the ZMI. For anyone well versed in Plone this is simply a fantastic overview of the ZMI and all of the objects related to Plone. Adding new products is also discussed in the two-way fashion. Meaning the old style products and the new standard de facto recommended procedure of using buildout and eggs (like zip files). The example given for eggs is really a poor one I believe. TinyMCE is native to Plone 4 and even though this book is specifically for Plone 3 one has to suspect that some users will just grab the latest package of Plone which will cause problems. Other than that this is a great chapter that begins to show you the power of Plone and the ZMI.</p>
<h2>Chapter 5</h2>
<p>This chapter begins one of the most important series of chapters in regards to Plone. Managing users and groups. The discussion on roles in Plone as well as the entire overview of the security system is excellent coverage of the topic that simply doesn&#8217;t get much mention at all. Even experienced Plone administrators or developers get confused about the setup from time to time. So for instance, the fact that roles are isolated so an editor who may have the rights to edit content may not have rights to explicitly read that content. For that you&#8217;d need to be granted the reader role. This chapter also covers how to create and manage a new user or group. There is also more coverage of administration through the ZMI to create user and groups. The author even clears up some common misconceptions that a new administrator to Plone may have such as confusing Plone PAS with the Zope PAS module. This is a solid meat and potatoes chapter.</p>
<h2>Chapter 6</h2>
<p>Next in this important series of chapters is Managing Workflows. This is probably one of the most critical and useful topics covered in this book. So far and up until this point there haven&#8217;t been many visual diagrams and explanations for the most part. With the exception of stepping through commands we don&#8217;t get much visual aid. This begins to change here as it begins to become necessary. There is great overview of workflows and what they are comprised of. Including coverage on out of the box workflows related with Plone. The difference between a state and a transition and what you can do with each specific action. There is also light discussion on tales/tal which exposes the lack of documentation on topics like ZPT (Zope Page Templates). The book does it&#8217;s best to provide a link but no coverage is giving there. Quite frankly one should be able to pickup another manual on ZPT or the likes but a comprehensive manual doesn&#8217;t really exist here.  We also talk about some third party add-on products for Plone primarily collective.workflowed, collective.wtf and DcWorkflowGraph which is simply a requirement if you are going to be doing anything with workflows. I really wish one tool was chosen instead a discussion of the three. Having the three divergent paths even though useful in the context of choice may confuse a new user should one of those paths fail. Otherwise this was an excellent chapter and worth the read even if you are an experienced Plone user, administrator or developer. This chapter along with the previous one make this book worth keeping as a reference manual.</p>
<h2>Chapter 7</h2>
<p>Security is important and this chapter covers securing the intranet. Concentrating primarily on permissions and workflows the chapter goes into great detail on converging what we have learned up until now in the previous chapters. The differences between Global and Local roles is great. I feel the discussion on Anonymous, Owner and Authenticated functional roles was a bit brief and needed much more detailed explanation. The coverage on actually creating and implementing a policy is pretty good. From outlining requirements, building an example intranet workflow, creating a private section for your intranet and even taking into account third party addon products security and settings you will be well versed towards this chapters end on security. This is also the chapter where we start to see a bit of python code that quite frankly is ok. There is a note, noting that basic product development will take place in Chapter 10. New users to Plone will most likely have to skip to this chapter to ramp up and immediately cover that background if they would like to continue following in earnest but it&#8217;s not absolutely necessary. There is also a discussion on collective.sharingroles at the end which nicely caps the chapter. I&#8217;m not sure if it&#8217;s absolutely required, but it&#8217;s a decent addition to the overall chapter.</p>
<h2>Chapter 8</h2>
<p>Using a content type effectively. This chapter in the context of reading the book is completely useful. Otherwise in the context of simply a sample chapter it&#8217;s useless. Quite frankly, there is nothing in this chapter that isn&#8217;t already on <a title="Plone.org" href="http://www.plone.org" target="_blank">Plone.org</a> in some fashion. This doesn&#8217;t exactly entice one to buy the book, as I read this as a sample chapter I said to myself, I have already read this stuff many a time over. Sans this one gripe in this chapter you&#8217;ll learn about creating collections and querying the ZODB (Zope Object Database). We also learn about the useful features of other out-of-the-box Plone content types. Other than that there is not much to say about this chapter. I wouldn&#8217;t have necessarily called it useful outside of the context of the book and even in context it&#8217;s more of a standard straight forward chapter.</p>
<h2>Chapter 9</h2>
<p>This is a nice progression from the previous chapter as it discusses external content-types and products that can be used with Plone. Most of these products are primarily for intranet purposes obviously and a good over view is given of each product. You have calendar, events, blog, survey, poll, document management and form generation products. In specific the form generation product covered is PloneFormGen and I&#8217;m pleased that this was the only thing covered on the topic of form generation. There are actually other different ways to create a form but the author picks one and sticks with it. An experienced user or administrator of Plone would be able to branch off where necessary. Also the discussion on the document management products is really quite useful for intranet settings. This chapter is great in introducing these add-on products that most intranets will need to use and gives a good overview of each different type of product.</p>
<h2>Chapter 10</h2>
<p>This chapters goal is to introduce the readers to the basics of Plone product development and I think it succeeds in that regard. It steps through the basics of creating and building a completely useful product. Obviously it&#8217;s not as comprehensive as my own documentation on the topic but it&#8217;s a very comprehensive take and is readable. GenericSetup the tool used to manage some of the major tool objects in Plone is broken down in detail and explained including a matrix of all the relevant xml and it&#8217;s subsequent description. There is even an example of cloning a content type with GenericSetup through the ZMI (Zope Management Interface).  The only issue with this chapter is any mention of Dexterity. Dexterity is on track to be a replacement/sister for Archetypes. Unfortunately there are some sacrifices that will be made and incompatibility with the previous Archetype system is unavoidable. Quite frankly Archetypes will be around for sometime to come and there was nothing useful to be had by even mentioning Dexterity in any context at this point in the book.</p>
<h2>Chapter 11</h2>
<p>Content rules are triggered based on Zope event handlers and this coverage is pretty decent you&#8217;ll learn how to create rules and have them triggered based on specific event. You&#8217;ll also learn how to create syndicated feeds from folderish content type objects. However the most important piece in this chapter will have to go to versioning. Versioning is an absolute requirement for any content management system and Plone has a simple and straight-forward way it handles changes to content. This chapter will give a great overview of how to use the versioning system as well as managing version policy. The WebDAV and External Editor coverage is also useful.</p>
<h2>Chapter 12</h2>
<p>Chapter 12 starts with the pronouncement &#8220;Theming &#8212; what a huge subject in Plone!&#8221; This is quite right as Plone and theming opens all avenue of possibility I was surprised to see this chapter in this book. After reading it and with the prior knowledge that there are numerous other manuals, reference material and books on the topic of Plone theming this chapter is in my opinion superfluous. All that stated the chapter does give a decent overview of theming Plone. Changing logos, managing viewlets describing the page render process and useful tools like <a title="Gloworm" href="http://plone.org/products/gloworm" target="_blank">Gloworm</a> it makes itself a chapter of bonus material. Viewed in that context this again makes the book a solid and useful reference manual.</p>
<h2>Chapter 13</h2>
<p>This is simply a great chapter that discusses proper deployment of Plone for three different types of deployments. Victor goes into useful detail on site deployment describing it as a continuous process there are many different options and implementations but breaking the process down into 3 different deployment sizes is reachable. We have small 1-50, medium 50-100 and large 100+ every essential process for a working deployment is covered from backing up, restoring and packing the database to rotating log files, scheduling, virtual hosting, load balancing between ZEO clients for redundancy, caching and even externally authenticating against LDAP (Lightweight Directory Access Protocol). Each process has enough coverage to get any of your deployments off of the ground. The only thing that I think is missing from this chapter is a way to assess and manage performance which I would have easily given up chapter 12 for. All in all however the final chapter in this book is yet another solid and useful chapter in what has turned out to be a great and useful manual.</p>
<h2>Recommendation</h2>
<p>All things considered this book in so far as a technical manual is great coverage of the topic of Plone and Intranets. The author does an excellent job in conveying the material and even if you aren&#8217;t doing anything with intranets there are several solid chapters on Plone deployment, theming and others that make the book a solid purchase for anyone planning to use Plone for almost any application. I give the author my congrats and highly recommend it as a solid buy.</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://weblog.kernelcode.com/2007/11/17/zopeplone-have-changed-my-life/" rel="bookmark" class="crp_title">Zope/Plone have changed my life</a></li><li><a href="http://weblog.kernelcode.com/2010/05/20/writing-good-documentation-and-presenting-your-work/" rel="bookmark" class="crp_title">Writing good documentation and presenting your work.</a></li><li><a href="http://weblog.kernelcode.com/2009/09/29/creating-a-content-type-for-plone-3-x/" rel="bookmark" class="crp_title">Creating a Content Type for Plone 3.x</a></li><li><a href="http://weblog.kernelcode.com/2010/05/12/creating-a-custom-template-for-a-plone-content-type-2/" rel="bookmark" class="crp_title">Creating a custom template for a Plone content type</a></li><li><a href="http://weblog.kernelcode.com/2008/10/09/ploneconf-2008-day-one/" rel="bookmark" class="crp_title">PloneConf 2008 &#8211; Day One</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://weblog.kernelcode.com/2010/09/30/plone-3-intranets-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forget Agile, try Software Engineering.</title>
		<link>http://weblog.kernelcode.com/2010/09/14/forget-agile-try-software-engineering/</link>
		<comments>http://weblog.kernelcode.com/2010/09/14/forget-agile-try-software-engineering/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 18:51:03 +0000</pubDate>
		<dc:creator>Christopher Warner</dc:creator>
				<category><![CDATA[Advogato]]></category>
		<category><![CDATA[Commentary]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://weblog.kernelcode.com/?p=499</guid>
		<description><![CDATA[Agile as a methodology for software engineering? Nope, that is for idiots. <a href="http://weblog.kernelcode.com/2010/09/14/forget-agile-try-software-engineering/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Here are some tips on my new methodology in no order for software engineers and management. It&#8217;s not XP/Scrum or any take on Agile because NONE of this is Agile in definition, manner or anything else. I like to call it, &#8220;Software Engineering (or SW for short)&#8221;. I&#8217;m gonna make this short and I&#8217;m not going to qualify anything because I don&#8217;t feel like I should have to.</p>
<ol>
<li>Should you need someone to tell you to chop up your project into smaller units that are more easily digested? You&#8217;re a bad manager/team lead/leader/whatever you are calling yourself. Needless to say a two or three year old is smarter than you and that MBA money went to waste.</li>
<li>If something is a smaller unit, that doesn&#8217;t make the problem you are trying to solve through programming or anything else any easier.</li>
<li>If you need someone to tell you that you need to sit down and discuss what you plan to do before you do it? You&#8217;re a bad manager/team lead/leader/whatever you are calling yourself.</li>
<li>If there are more bad than good things to say about something. It is rotten, throw it out.</li>
<li>No external force can run your company better than you and your employees.</li>
<li>Team building involves no methodology, it&#8217;s a constant reassessing and making tough decisions. You want to make your weak programmers strong and reward your stronger programmers appropriately. If you need someone to tell you this. You&#8217;re a bad manager/team lead/leader/whatever you are calling yourself.</li>
<li>If you are a programmer that can&#8217;t say &#8220;I don&#8217;t know, i&#8217;ve never done it before&#8221; or &#8220;This will take too long for X reasons&#8221; and/or &#8220;I don&#8217;t know anything about X&#8221;. Grow some backbone, you seriously aren&#8217;t all knowing either so stop acting like a dick.</li>
<li>If you are a manager practicing Agile in any context. You&#8217;re a bad manager/team lead/leader/whatever you are calling yourself.</li>
<li>There&#8217;s nothing Agile about agile; Work is work, someone has to do it no matter how you cut it up. Agile doesn&#8217;t make your resources work faster, more smoothly or any of that.  Building a comprehensive team does that; not some methodology.</li>
<li>Why can&#8217;t you all be like Google and have the best programmers/admins working for you? You don&#8217;t reward or pay a decent salary, and then on top of that you use crappy ass tools. Google is only successful because good programmers decide to work for Google; not because they have some secret sauce. That&#8217;s how it works for ANYTHING. When the best people want to work for you well then you&#8217;re gonna corner any market they are in. If all of Google&#8217;s programmers left tomorrow they&#8217;ll be a closed shop soon as those programmers go to Doogle.com or whatever.</li>
<li>How can I get the best programmers working for me? Choose the best tools and only the best tools. They will come looking for you; guaranteed. In your next job posting put &#8220;We like to use these tools, because they are the fucking best most awesome kickass tools available and we are building great shit.&#8221; Also, i&#8217;d recommend not having HR write up the copy and less the profanities. Keep it simple, short and to the point. See what type of reaction you get.</li>
<li>Software engineering is mentally draining. It&#8217;s not like filing papers. It isn&#8217;t rote, so you can&#8217;t treat your employees like it&#8217;s some factory line.</li>
<li>The best feedback you get is from your programmer and if he/she gives you a comprehensive reason on why X is horse shit and it makes sense. Heed that warning.</li>
<li>Here&#8217;s a typical stakeholder request. &#8220;I want to go to Mars&#8221;. Here&#8217;s a typical agile response &#8220;Lets break that story down into tasks and see how best we can do this if possible or break the overall problem into multiple sprints&#8221;. Here&#8217;s a typical Christopher Warner SW response &#8220;Well, I don&#8217;t know if i&#8217;m in the right room at present but this is not fucking NASA, there would have to be a lot of work to get there. Maybe you should think about getting to Florida first&#8221;.</li>
<li>Here&#8217;s a typical Agile question &#8220;If you&#8217;re in space and lost your tether and you had X tools which one would be best to use in aide of saving your life&#8221;. Here&#8217;s a typical agile response &#8220;The gun would be best&#8221;. Here&#8217;s a typical Christopher Warner response &#8220;You&#8217;re fucked&#8221;. It doesn&#8217;t matter what tools you have at that point. The idea is to NEVER lose your tether so you never have to make that decision.</li>
<li>How do I know I have a good programmer/admin? He or she is usually busy getting shit done, and pretty much needs little to no management. They tell you what&#8217;s going on, how things are progressing. What issues problems, concerns they may have etc. Pretty much everything is quiet on the front when they are around.</li>
<li>How do I get a team of good programmers? Good programmers will want to work with good programmers. Primarily because when one gets lost it pays to have a decent wing man or someone who can say &#8220;Welllllllsssssstttt this isn&#8217;t working because you&#8217;re a fucking idiot and wrote this module wrong, you&#8217;re a dumbass. We&#8217;ll work it out over lunch.. you know what?? lets finish this in X&#8217;s office she&#8217;s working on some similar shit; we&#8217;ll order up. Bang this out and then hit the gym, after the beer you buy me. It always taste different when you buy it&#8221;.</li>
<li>How do I reward my team? Contrary to popular belief, money is on the top of the list but sans that proper recognition. Beers and pizzas and all that shit, save it for highschool. At the very least offer expensive liquor, we are all adults here.</li>
<li>How can I be a better manager/team lead/leader/whatever you are calling yourself? Make sure the road is paved and fill in potholes. When something from the top comes down that is horse shit? Say &#8220;This is horse shit&#8221;. Don&#8217;t go back to your team with a &#8220;This is horse shit but we have no choice.&#8221;  Say &#8220;This is horse shit, I said it&#8217;s horse shit and I explained the detrimental waste of fucking time. They still want to do it. Of course, you guys are free to do something more awesome and when asked I&#8217;ll show them more awesome with a, my apologies, I guess this more awesome thing I have right here will have to suffice&#8221; or &#8220;Sorry we just can&#8217;t fucking do this stakeholders.. It&#8217;s just not possible for X reasons, the top one being that I know my job better than you and this request is simply in management lingo, UNpossible&#8221;. Wrap that in termination free language; unless you happen to be in a mood in which case have another job already lined up and be sure some of your team can come. Don&#8217;t want to abandon them.</li>
<li>&#8220;I don&#8217;t know anything about computers I just want a measurement of when I can expect things!&#8221; When it&#8217;s done, or accept variable estimates. Unless for some reason you believe the art of writing a program to be a measurable unit of work. In which case, let me explain. Writing a program is much like being an artist. You start with a blank canvas with a couple of constructs and then you have to take whatever came out of the human MIND and create a reality out of it. Think it&#8217;s easy? Think of anything you have never built before until now.. Now go build it, but before you do. Tell me when it&#8217;s gonna be done. I&#8217;ll wait.</li>
<li>Anything successful takes a long time of proper foundation building, team building and regression. If you don&#8217;t have that or experience it. You will not be successful. It&#8217;s that simple there is no methodology or luck involved besides hard work and building a good team. FOR ANYTHING.</li>
</ol>
<p>Ok that&#8217;s enough. I hope you apply &#8220;Software Engineering&#8221; as a method to your next project; even if it isn&#8217;t software.</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://weblog.kernelcode.com/2009/02/05/blog-catchup/" rel="bookmark" class="crp_title">Blog catchup</a></li><li><a href="http://weblog.kernelcode.com/2008/05/15/the-myth-that-content-management-is-easy/" rel="bookmark" class="crp_title">The Myth that Content Management is easy</a></li><li><a href="http://weblog.kernelcode.com/2008/03/13/yes-actually-its-not-easy/" rel="bookmark" class="crp_title">Yes, actually, it&#8217;s not easy.</a></li><li><a href="http://weblog.kernelcode.com/2008/10/09/ploneconf-2008-day-one/" rel="bookmark" class="crp_title">PloneConf 2008 &#8211; Day One</a></li><li><a href="http://weblog.kernelcode.com/2010/08/30/relational-databases-are-killing-content-management/" rel="bookmark" class="crp_title">Relational Databases are killing content management.</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://weblog.kernelcode.com/2010/09/14/forget-agile-try-software-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 2.368 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-11-20 04:48:23 -->
