<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/"
         xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
         xmlns="http://purl.org/rss/1.0/">



    



<channel rdf:about="http://www.simplesconsultoria.com.br/blog/ultimos-posts/RSS">
  <title>Blog</title>
  <link>http://www.simplesconsultoria.com.br</link>
  
  <description>
    
       
       
  </description>
  
  
  
            <syn:updatePeriod>daily</syn:updatePeriod>
            <syn:updateFrequency>1</syn:updateFrequency>
            <syn:updateBase>2009-01-08T16:21:46Z</syn:updateBase>
        
  
  <image rdf:resource="http://www.simplesconsultoria.com.br/logo.gif"/>

  <items>
    <rdf:Seq>
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/search-engine-optimization-seo-e-o-plone"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/melhores-intranets-de-2012"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/varnish3-plone4-discutindo-a-relacao"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/plone-e-jquery-ao-gosto-do-cliente"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/cmsui-uma-nova-maneira-de-editar-conteudo-no-plone"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/plone-e-finalista-do-open-source-awards-2011-deixe-seu-voto"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/regras-do-diazo-questao-de-ordem"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/google-analytics-e-a-busca-dentro-do-seu-plone-site"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/vmods-o-lego-do-varnish-3"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/como-adicionar-eventos-do-plone-no-google-calendar"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/migrando-varnish-2.1-para-varnish-3.0"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/como-criar-um-tema-para-plone-usando-o-diazo"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/plone-4-velocidade-e-chameleon-tudo-em-comum"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/buildout-para-o-que-der-e-vier-parte-2"/>
        
        
            <rdf:li rdf:resource="http://www.simplesconsultoria.com.br/blog/buildout-para-oque-der-e-vier"/>
        
    </rdf:Seq>
  </items>

</channel>

    <item rdf:about="http://www.simplesconsultoria.com.br/blog/search-engine-optimization-seo-e-o-plone">        <title>Search Engine Optimization (SEO) e o Plone</title>        <link>http://www.simplesconsultoria.com.br/blog/search-engine-optimization-seo-e-o-plone</link>        <description>
&lt;p&gt;Uma das perguntas que mais escuto durante os cursos de Gestão de Conteúdo que ministramos pelo Brasil é como podemos melhorar o desempenho de um site nos mecanismos de Busca. Para ajudar com a resposta, fiz essa apresentação no ano passado durante o World Plone Day que realizamos aqui em São Paulo.&lt;/p&gt;
&lt;p&gt;Nela mostro tudo o que o Plone já faz a respeito e as principais ações que você pode ter com seu conteúdo para alcançar melhor resultados. Confira:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="__ss_7764153"&gt; &lt;strong&gt;&lt;a title="SEO e o Plone" href="http://www.slideshare.net/simplesconsultoria/seo-e-o-plone" target="_blank"&gt;SEO e o Plone&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/7764153" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" height="497" width="595"&gt;&lt;/iframe&gt;
&lt;div&gt; View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/simplesconsultoria" target="_blank"&gt;Simples Consultoria&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>andre</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Apresentação</dc:subject>                    <dc:subject>SEO</dc:subject>                    <dc:subject>Gestão de Conteúdo</dc:subject>                <dc:date>2012-01-31T19:11:19Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/melhores-intranets-de-2012">        <title>As Melhores Intranets de 2012</title>        <link>http://www.simplesconsultoria.com.br/blog/melhores-intranets-de-2012</link>        <description>
&lt;p&gt;O Ano de 2012 mal começou e o pessoal do use.it já divulgou sua lista com as 10 melhores intranets de 2012. Jakob Nielsen e sua turma prepararam um relatório de mais de 400 páginas com muitas imagens de tela para explicar o motivo da escolha dos vencedores.&lt;/p&gt;
&lt;p&gt;Veja a seguir algumas das principais constatações do relatório sobre o perfil dessas empresas e como elas encaram seu portal corporativo:&lt;/p&gt;
&lt;h3&gt;Evolução contínua da Intranet&lt;/h3&gt;
&lt;p&gt;Um portal corporativo não pode ser lançado e esquecido. O design e as funcionalidades devem evoluir constantemente para atender as necessidades da empresa e do ambiente ao redor, que mudam diariamente. Entre os vencedores apenas um foi vencedor anteriormente, o que demostra claramente a necessidade de renovação constante.&lt;/p&gt;
&lt;h3&gt;Empresas menores possuem Intranets melhores&lt;/h3&gt;
&lt;p&gt;Entre os dez vencedores a média do número de funcionários é de 19.700. Três das empresas vencedoras possuem menos de 10 mil funcionários.&amp;nbsp; Esse número é bem menor do que os anos anteriores, quando a média era maior do que 30 mil funcionários.&lt;/p&gt;
&lt;h3&gt;As equipes cresceram&lt;/h3&gt;
&lt;p&gt;Apesar da queda no número de funcionários das empresas vencedoras, o número de profissionais envolvidos com o desenvolvimento do portal aumentou. Entre os vencedores a média passou para 15 profissionais, o que nos dá um número mágico aproximado de 1 especialista de internet para cada mil funcionários. Nesse número estão incluídos os especialistas da empresa e tambem parceiros externos de consultorias e agências.&lt;/p&gt;
&lt;h3&gt;Parceria&lt;/h3&gt;
&lt;p&gt;Oito dos dez vencedores contam com a ajuda externa no desenvolvimento e no design de sua solução de intranet. Na maioria dos casos existe uma grande parceria entre a equipe interna, que possui um grande conhecimento da empresa e do negócio e uma consultoria externa, que possui o conhecimento sobre a tecnologia e as práticas de design.&lt;/p&gt;
&lt;p&gt;Mais detalhes sobre o relatório pode ser encontrado num rápido resumo publicado no use.it:&lt;br /&gt; &lt;strong&gt;&lt;a class="external-link" href="http://www.useit.com/alertbox/intranet_design.html"&gt;http://www.useit.com/alertbox/intranet_design.html&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Além disso o relatório completo pode ser adquirido no website da Nielsen Norman Group por U$248,00. &lt;strong&gt;&lt;a class="external-link" href="http://www.nngroup.com/reports/intranet/design/"&gt;http://www.nngroup.com/reports/intranet/design/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Interessado em construir uma intranet de sucesso? &lt;strong&gt;&lt;a title="Contato" class="internal-link" href="/fale-conosco"&gt;Entre em contato&lt;/a&gt;&lt;/strong&gt; e conheça o que a Simples Consultoria e o Plone podem oferecer.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>andre</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Intranet</dc:subject>                    <dc:subject>Portal Corporativo</dc:subject>                <dc:date>2012-01-20T17:00:59Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/varnish3-plone4-discutindo-a-relacao">        <title>Varnish 3, Plone 4: Discutindo a Relação.</title>        <link>http://www.simplesconsultoria.com.br/blog/varnish3-plone4-discutindo-a-relacao</link>        <description>
&lt;p&gt;Não preciso dizer o quanto a&amp;nbsp;&lt;a class="external-link" href="http://www.pythonbrasil.org.br/2011"&gt;PythonBrasil [7]&lt;/a&gt; foi um sucesso :-D , infelizmente não tive como ver todas as palestras o que seria bizarro conseguir, dado que não sou onipresente. Apesar da minha palestra ter sido em uma sexta-feira no final do dia eu pude extrapolar o tempo, e ainda ficou faltando diversos detalhes.&lt;/p&gt;
&lt;p&gt;Um detalhe importante é que o &lt;a class="external-link" href="http://twitter.com/ericof"&gt;@ericof&lt;/a&gt; apareceu e também participou da palestra, &amp;nbsp;conhecidencia ou não, ocorreu após&amp;nbsp;eu ter invocado seu nome 3 vezes. Em minha apresentação pude mostrar o quanto o Varnish é poderoso, e o quanto a combinação Varnish [3] e Plone [4] pode ser igual a &lt;strong&gt;&lt;a class="external-link" href="http://www.google.com.br/search?aq=0&amp;amp;oq=resposta+para&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=resposta+para+a+vida+o+universo+e+tudo+mais"&gt;[42]&lt;/a&gt;.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9561251?rel=0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" height="497" width="595"&gt;&lt;/iframe&gt;
&lt;div&gt; View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/simplesconsultoria" target="_blank"&gt;Simples Consultoria&lt;/a&gt;&lt;/div&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>cleber</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Apresentação</dc:subject>                    <dc:subject>Varnish</dc:subject>                    <dc:subject>Tuning</dc:subject>                    <dc:subject>PythonBrasil</dc:subject>                    <dc:subject>Plone4</dc:subject>                <dc:date>2012-01-10T10:00:32Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/plone-e-jquery-ao-gosto-do-cliente">        <title>Plone e JQuery ao gosto do Cliente</title>        <link>http://www.simplesconsultoria.com.br/blog/plone-e-jquery-ao-gosto-do-cliente</link>        <description>
&lt;p&gt;Dando sequência a série de posts sobre as palestras ministradas durante a PythonBrasil [7], apresentamos agora os slides da apresentação "Plone e JQuery ao gosto do Cliente" executada pelos simplificadores &lt;a class="external-link" href="http://twitter.com/cleberjsantos"&gt;@cleberjsantos&lt;/a&gt; e &lt;a class="external-link" href="http://twitter.com/Tamosauskas"&gt;@Tamosauskas&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Na oportunidade foram mostrados alguns exemplos práticos de como aprimorar a interface de sites em Plone usando alguns recursos de jQuery. Em especial são mostradas maneiras de integrar os métodos e atributos dos 
objetos do Zope em seus scripts jQuery.&lt;/p&gt;
&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9561254" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" height="355" width="425"&gt;&lt;/iframe&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt; View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/simplesconsultoria" target="_blank"&gt;Simples Consultoria&lt;/a&gt;&lt;/div&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>thiago</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Apresentação</dc:subject>                    <dc:subject>JQuery</dc:subject>                    <dc:subject>PythonBrasil</dc:subject>                    <dc:subject>Plone 4</dc:subject>                    <dc:subject>World Plone Day</dc:subject>                <dc:date>2011-10-13T12:40:33Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/cmsui-uma-nova-maneira-de-editar-conteudo-no-plone">        <title>Cmsui: Uma nova maneira de editar conteúdo no Plone</title>        <link>http://www.simplesconsultoria.com.br/blog/cmsui-uma-nova-maneira-de-editar-conteudo-no-plone</link>        <description>
&lt;p&gt;Nos próximos dias vamos começar a publicar aqui no blog todas as palestras ministradas pelos simplificadores durante a &lt;strong&gt;&lt;a class="external-link" href="http://www.pythonbrasil.org.br/2011"&gt;PythonBrasil [7]&lt;/a&gt;&lt;/strong&gt; , que foi realizada em São Paulo entre os dias 28 de setembro e 1 de outubro.&lt;/p&gt;
&lt;p&gt;A primeira a ser publicada é a palestra&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;Cmsui: Uma nova maneira de editar conteúdo no Plone&lt;/strong&gt;&amp;nbsp;que ministrei na sexta-feira. A idéia principal da palestra era mostrar a evolução da edição de conteúdo no Plone e os caminhos que estamos seguindo para as próximas versões. Aproveitem e aguardem as outras palestras que serão publicadas nos próximos dias.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="__ss_9522716"&gt; &lt;strong&gt;&lt;a title="Cmsui: Uma nova maneira de editar conteúdo no Plone" href="http://www.slideshare.net/simplesconsultoria/cmsui-uma-nova-maneira-de-editar-contedo-no-plone-9522716" target="_blank"&gt;Cmsui: Uma nova maneira de editar conteúdo no Plone&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9522716?rel=0" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" height="497" width="595"&gt;&lt;/iframe&gt;
&lt;div&gt; View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/simplesconsultoria" target="_blank"&gt;Simples Consultoria&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>andre</dc:creator>        <dc:rights></dc:rights>                <dc:date>2011-10-03T13:39:09Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/plone-e-finalista-do-open-source-awards-2011-deixe-seu-voto">        <title>Plone é finalista do Open Source Awards 2011 - Deixe seu voto!</title>        <link>http://www.simplesconsultoria.com.br/blog/plone-e-finalista-do-open-source-awards-2011-deixe-seu-voto</link>        <description>
&lt;p&gt;Mais uma vez o Plone chega aos finalistas da premiação Open Source Awards promovida pela Packt Publishing na categoria Open Source CMS. O Plone também está concorrendo nas seguintes novas&amp;nbsp; subcategorias:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Best Open Source CMS for performance &lt;/strong&gt;(Melhor performance de CMS Open Source)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Best CMS for Best Community:&amp;nbsp; &lt;/strong&gt;(Melhor Comunidade de CSM Open Source)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Best CMS for Ease of Use: &lt;/strong&gt;(CMS Open Source Mais Fácil de Usar)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;Os votos podem ser feitos até dia 31 de Outubro, logo antes do início da Plone Conference&amp;nbsp; em São Francisco. Mas se você faz parte da comunidade Plone, &lt;strong&gt;deixe seu voto agora&lt;/strong&gt; para não correr o risco de esquecer.&lt;br /&gt;&lt;br /&gt;Plone já ganhou prêmios neste concurso em 2008 e 2009. As&amp;nbsp; subcategorias devem ser votadas separadamente da categoria principal. Veja abaixo como proceder:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;a class="external-link" href="https://www.packtpub.com/open-source-awards-home/vote-open-source-cms"&gt;Clique aqui e vote no Plone na categoria CMS. &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external-link" href="http://www.packtpub.com/open-source-awards-home/vote-cms-subcategory"&gt;Clique aqui e adicione o Plone nas subcategorias &lt;/a&gt;Performance, Community e Ease of Use, respectivamente Performance, Comunidade e Facilidade de Uso.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;Dica: Coloque "N/A” e “http://example.com” na categoria .NET se você não tiver nenhum favorito em mente.&lt;br /&gt;&lt;br /&gt;A Comunidade Plone Agradece.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>thiago</dc:creator>        <dc:rights></dc:rights>                <dc:date>2011-09-26T14:58:24Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/regras-do-diazo-questao-de-ordem">        <title>Regras do Diazo: questão de ordem</title>        <link>http://www.simplesconsultoria.com.br/blog/regras-do-diazo-questao-de-ordem</link>        <description>
&lt;p&gt;Ao desenhar as regras do seu tema feito em diazo para o &lt;strong&gt;Plone&lt;/strong&gt;, pode ser bastante útil entender um pouco melhor como o compilador do Diazo trabalhará. Entre várias coisas importantes temos a&amp;nbsp; ordem exata na qual o diazo lerá as regras. &lt;br /&gt;&lt;br /&gt;Independente de qual regra aparecer primeiro no seu arquivo xml, o diazo sempre levará em consideração a seguinte hierarquia:&lt;br /&gt;&lt;br /&gt;1º lugar: &amp;lt;before css:theme="" /&amp;gt; (mas não theme-children)&lt;br /&gt;&lt;br /&gt;2º lugar: &amp;lt;drop /&amp;gt;&lt;br /&gt;&lt;br /&gt;3º lugar: &amp;lt;replace css:theme="" /&amp;gt; (mas não theme-children)&lt;br /&gt;&lt;br /&gt;4º lugar: &amp;lt;strip /&amp;gt;. &lt;br /&gt;&lt;br /&gt;5º lugar: Regras que usam attributes.&lt;br /&gt;&lt;br /&gt;6º lugar: &amp;lt;before /&amp;gt;, &amp;lt;replace /&amp;gt; e &amp;lt;after /&amp;gt; usando "theme-children"&amp;nbsp; &lt;br /&gt;&lt;br /&gt;7º e último lugar: &amp;lt;after&amp;nbsp; css:theme="" /&amp;gt; (mas não theme-children).&lt;br /&gt;&lt;br /&gt;Esta ordem explica porque não adianta usar uma regra &amp;lt;replace&amp;gt; se em qualquer lugar do xml você aplicar uma regra &amp;lt;drop&amp;gt; ou uma regra &amp;lt;replace&amp;gt; no mesmo elemento. Assim, se uma as mudanças&amp;nbsp; insistirem em não aparecer no seu tema, vale a pena dar uma revisada na sua ordem de execução.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>thiago</dc:creator>        <dc:rights></dc:rights>                <dc:date>2011-09-26T13:55:55Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/google-analytics-e-a-busca-dentro-do-seu-plone-site">        <title>Google Analytics e a busca dentro do seu Plone Site</title>        <link>http://www.simplesconsultoria.com.br/blog/google-analytics-e-a-busca-dentro-do-seu-plone-site</link>        <description>
&lt;p&gt;Muita gente gostaria de poder conhecer melhor as &lt;strong&gt;estatísticas da busca interna do seu Plone site&lt;/strong&gt;. Imagine só saber informações como quais são os conteúdos mais buscados, a quantidade de vezes que a busca foi utilizada, os objetos mais encontrados, entre outras coisas.&lt;/p&gt;
&lt;p&gt;A boa notícia é que se você usa&amp;nbsp; o &lt;strong&gt;Google Analytics&lt;/strong&gt; para gerar as estatísticas do seu Plone site é muito fácil ter acesso a esses dados. Basta fazer um pequeno ajuste de configuração no próprio Analytics para que ele começe a analisar a busca do seu site.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Segue um passo a passo bem rápido:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Faça Login no Google Analytics;&lt;/li&gt;&lt;li&gt;Clique em '&lt;em&gt;edit&lt;/em&gt;' ao lado do perfil do site que deseja configurar;&lt;/li&gt;&lt;li&gt;Na página seguinte, clique no link '&lt;em&gt;edit&lt;/em&gt;' que fica na caixa '&lt;em&gt;Main Website Profile Information&lt;/em&gt;';&lt;/li&gt;&lt;li&gt;Na área '&lt;em&gt;Site Search&lt;/em&gt;' marque a opção '&lt;em&gt;Do Track Site Search&lt;/em&gt;';&lt;/li&gt;&lt;li&gt;No campo '&lt;em&gt;Query Parameter&lt;/em&gt;' informe o valor '&lt;em&gt;SearchableText&lt;/em&gt;';&lt;/li&gt;&lt;li&gt;Clique no botão '&lt;em&gt;Save Changes&lt;/em&gt;' que fica no final da página.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;Pronto, a partir de agora o Google Analytics vai começar a analisar a busca do seu site e você terá acesso aos dados. Esses dados estarão disponíveis dentro da das estatísticas dentro do menu '&lt;em&gt;Content&lt;/em&gt;' do seu relatório, na opção '&lt;em&gt;Site Search&lt;/em&gt;'&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>andre</dc:creator>        <dc:rights></dc:rights>                <dc:date>2011-09-01T14:24:36Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/vmods-o-lego-do-varnish-3">        <title>VMODs: O lego do Varnish 3</title>        <link>http://www.simplesconsultoria.com.br/blog/vmods-o-lego-do-varnish-3</link>        <description>
&lt;p&gt;&lt;strong&gt;VMODs&lt;/strong&gt;, ou simplesmente &lt;strong&gt;Varnish Modules&lt;/strong&gt; é, segundo da documentação de modificações, um dos grandes sucessos obtidos na versão 3: &lt;em&gt;"VMODs on the other hand, was an instant success, because they make it much easier for people to extend Varnish with new functionality".&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;E realmente, é o mesmo que tenho achado, como bem sabemos desde o &lt;strong&gt;Varnish 2.1&lt;/strong&gt; podemos usar &lt;strong&gt;C inline&lt;/strong&gt; para criar e estender funcionalidades que por padrão o Varnish não trás, e com a chegada dos módulos essa brincadeira tona-se ainda melhor, por&amp;nbsp;tudo que podemos fazer na VCL.&lt;/p&gt;
&lt;p&gt;Sabermos ainda que existem coisas que não temos como fazer na VCL, por exemplo: Procurar um número de IP em um arquivo de banco de dados. Usando código C inline até temos como resolver este problema, já que o Varnish nos provê isso, e lá você pode fazer tudo, mas não é uma forma conveniente ou mesmo legível para resolver tais problemas. Eis&amp;nbsp;o lugar onde VMODs entram em cena.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;O que é a VMOD?&lt;/h3&gt;
&lt;p&gt;Trata-se de uma biblioteca compartilhada com algumas funções C que pode ser chamado a partir do código VCL.&lt;/p&gt;
&lt;p&gt;A interface entre o VMOD o compilador VCL (&lt;strong&gt;"VCC"&lt;/strong&gt;) e o tempo de execução VCL (&lt;strong&gt;"VRT"&lt;/strong&gt;) é definido em um arquivo de nome &lt;strong&gt;&lt;a class="external-link" href="https://www.varnish-cache.org/trac/browser/lib/libvmod_std/vmod.vcc"&gt;vmod.vcc&lt;/a&gt;&lt;/strong&gt; que um script python de nome &lt;strong&gt;"&lt;a class="external-link" href="https://www.varnish-cache.org/trac/browser/lib/libvmod_std/vmod.py"&gt;vmod.py&lt;/a&gt;"&lt;/strong&gt;&amp;nbsp;que faz todo o trabalho duro&lt;/p&gt;
&lt;p&gt;Executando o vmod.py no arquivo vmod.vcc, será produzido dois arquivos, que são: "&lt;strong&gt;vcc_if.c&lt;/strong&gt;" e "&lt;strong&gt;vcc_if.h&lt;/strong&gt;", no qual devemos usar para construir o nosso arquivo de biblioteca compartilhada.&lt;/p&gt;
&lt;p&gt;o vcc_if.c até pode ser esquecido em nosso VMOD, mas o vcc_if.h&amp;nbsp;é importante, ele contém os protótipos para as funções que desejamos exportar para a VCL.&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;Nota: &lt;/strong&gt;Uma informação importante, você ainda pode dizer ao Varnish em tempo de execução para qual diretório ele deve olhar para buscar os VMODs.&amp;nbsp;&lt;/div&gt;
&lt;pre&gt;&lt;strong&gt;vmod_dir
&lt;/strong&gt;&lt;strong&gt;Default:&lt;/strong&gt;&amp;nbsp;${VARNISH:DIR}/lib/varnish/vmods&lt;/pre&gt;
&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;
&lt;h3&gt;Na prática.&lt;/h3&gt;
&lt;div&gt;Agora que já temos base do que é um VMOD e como ele funciona, vamos aos exemplos :) , estou usando alguns que encontrei na internet então vamos lá:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;1º Exemplo.&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Módulo:&lt;/strong&gt;&amp;nbsp;&lt;a href="https://github.com/varnish/libvmod-example"&gt;https://github.com/varnish/libvmod-example&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Autor:&lt;/strong&gt;&amp;nbsp;Martin Blix Grydeland&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Descrição:&amp;nbsp;&lt;/strong&gt;O módulo implementa o &lt;strong&gt;"Olá Mundo!",&amp;nbsp;&lt;/strong&gt;sendo bem pequeno e simples para entender.&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Após instalar o módulo (como instalar em &lt;strong&gt;README&lt;/strong&gt;) basta executar o seguinte trecho de código em sua VCL.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;import example;

sub vcl_deliver {
&lt;span class="Apple-tab-span"&gt;	&lt;/span&gt;# Vamos definit o  resp.http.hello para "Hello, World"
&lt;span class="Apple-tab-span"&gt;	&lt;/span&gt;set resp.http.hello = example.hello("World");
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;2º Exemplo&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Módulo:&lt;/strong&gt;&amp;nbsp;&lt;a href="https://github.com/leed25d/geoip-vmod"&gt;https://github.com/leed25d/geoip-vmod&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Autor:&lt;/strong&gt; David Newhall&lt;br /&gt;&lt;strong&gt;Descrição:&lt;/strong&gt; Provê a capacidade de retornar&amp;nbsp;a localização geográfica de um endereço IP.&lt;br /&gt;&lt;strong&gt;Nota:&lt;/strong&gt;&amp;nbsp;&lt;span class="Apple-style-span"&gt;Após instalar o módulo (como instalar em&amp;nbsp;&lt;strong&gt;README&lt;/strong&gt;) basta executar o seguinte trecho de código em sua VCL.&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span class="Apple-style-span"&gt;import geoip;

sub vcl_recv {
   # Definimos um cabeçalho de solicitação X-GeoIP
   # para o geo do solicitante (ou desconhecido).
   set req.http.X-Forwarded-For = client.ip;
   set req.http.X-GeoIP = geoip.country(req.http.X-Forwarded-For)
}
&lt;/span&gt;&lt;/pre&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;3º Exemplo&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Módulo:&lt;/strong&gt;&amp;nbsp;&lt;a href="https://github.com/varnish/libvmod-curl"&gt;https://github.com/varnish/libvmod-curl&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Autor:&lt;/strong&gt;&amp;nbsp;&lt;span class="Apple-style-span"&gt;Tollef Fog Heen&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Descrião:&lt;/strong&gt;&amp;nbsp;Este vmod é um dos que mais gosto, ele provê o curls para o Varnish, então podemos usar o varnish como um cliente HTTP e buscar cabeçalhos e corpo nos backends.&lt;br /&gt;&lt;strong&gt;Nota:&lt;/strong&gt;&amp;nbsp;Após instalar o módulo (como instalar em&amp;nbsp;&lt;strong&gt;README&lt;/strong&gt;) basta executar o seguinte trecho de código em sua VCL.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre&gt;&lt;span class="Apple-style-span"&gt;import curl;
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;sub vcl_recv {
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp; &amp;nbsp; curl.fetch("http://example.com/test");
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp; &amp;nbsp; if (curl.header("X-Foo") == "bar") {
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; …
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp; &amp;nbsp; }
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&amp;nbsp; &amp;nbsp; curl.free();
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;Estes são alguns dos exemplos que podemos seguir para criar nosso próprio VMOD, nota-se que precisamos saber C para isso, algumas idéias de módulos seria usar C + libxml para fazer parse de arquivos XMLs diretamente no Varnish e já manter em cache, ainda com analise de cabeçalho e etc.. Ou Usar o PIL para gerar imagens ou qualquer outra coisa que sua imaginação desejar, você agora tem o poder do C e do Varnish nas suas mãos.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Um pouco mais antes de terminar.&lt;/h3&gt;
&lt;div&gt;Agora que já estamos mais acostumados e empolgados em poder criar VMODs para trabalhar com o Vanrish, veja alguns exemplos do que podemos fazer com o que já existe.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Nota. Lembre-se que é necessário importar o módulo std ou qualquer outro que iremos utilizar, uma única vez e usar em toda a VCL.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Adicionando o std.collect(), coletamos vários cabeçalhos HTTP para um único cabeçalho.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;strong&gt;import std;&lt;/strong&gt;

sub vcl_recv {
&amp;nbsp; &amp;nbsp;std.collect(req.http.foo);
}

sub vcl_fetch {
&amp;nbsp; &amp;nbsp;std.collect(beresp.http.bar);
}&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Retornando uma URL em caixa alta ou uma string.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;sub vcl_deliver {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; set resp.http.foo = std.toupper(req.url);
}&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;ou&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;set beresp.http.x-scream = std.toupper("yes!");&lt;/pre&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Retorna o contrário do &lt;strong&gt;toupper&lt;/strong&gt;, ou seja, strings todas em caixa baixa.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;pre&gt;set beresp.http.x-nice = std.tolower("VerY");&lt;/pre&gt;
&lt;p&gt;Ainda temos&amp;nbsp;&lt;strong&gt;random, log, set_up_tos, syslog, fileread, duration&lt;/strong&gt; e &lt;strong&gt;integer&lt;/strong&gt;, no qual adoraria escrever sobre, mas fica a dica para quem desejar conhecer, o VMOD é realmente uma verdadeira caixa de legos, e o mais legal é que você ainda pode criar novas peças e encaixar nas já existentes. Espero que tenha sido u bom post para você entender e começar a montar a sua VMOD, e espero que post aqui sobre a experiência.&lt;/p&gt;
&lt;p&gt;Até a próxima.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Leia também:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a class="external-link" href="https://www.varnish-cache.org/docs/trunk/reference/vmod_std.html"&gt;vmod_std&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external-link" href="https://www.varnish-cache.org/docs/trunk/reference/vmod.html"&gt;vmod&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>cleber</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Varnish</dc:subject>                    <dc:subject>Tuning</dc:subject>                    <dc:subject>VMOD</dc:subject>                    <dc:subject>Cache</dc:subject>                    <dc:subject>Desenvolvimento</dc:subject>                    <dc:subject>Performance</dc:subject>                <dc:date>2011-08-30T15:16:53Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/como-adicionar-eventos-do-plone-no-google-calendar">        <title>Como adicionar Eventos do Plone no Google Calendar</title>        <link>http://www.simplesconsultoria.com.br/blog/como-adicionar-eventos-do-plone-no-google-calendar</link>        <description>
&lt;p&gt;O 'Evento' e um tipo padrão do&lt;strong&gt; Plone&lt;/strong&gt; que, entre outros recursos, possui alguns links (iCal e vCal) que permitem adicionar o evento do seu site ao calendário de aplicativos como o Mozilla Sunbird, Microsoft Outlook e similares... Este é um recurso maravilhoso, que nunca vi ninguém usar o_O . &lt;br /&gt;&lt;br /&gt;Por outro lado todos os meus heróis que não morreram de overdose usam hoje o &lt;strong&gt;Google Calendar&lt;/strong&gt; para organizar seu dia a dia. Pensando nisso imaginei uma maneira de termos um link nos eventos do Plone que adicione ele as agendas do Google Calendar.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Você vai precisar:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1 - Um script python para formatar a data, que chamaremos, Dataformat.py:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;from DateTime import DateTime
if not dt:
 dt = DateTime()

if not format:
 format = "%Y%m%dT%H%M00"

if not same_type(dt, DateTime()):
 dt = DateTime(dt)

print dt.strftime(format)
return printed&lt;/pre&gt;
&lt;p&gt;Este script é necessário para formatar as datas iniciais e finais do evento no formato usado pelo Google Calendar&lt;/p&gt;
&lt;p&gt;2 - Colocar a seguinte expressão em Zope Page Template no seu template event_view.pt&lt;/p&gt;
&lt;pre&gt;&amp;lt;a href="#" title="Add to Google Calendar" target="_blank" 
            tal:define="atDate here/start;
                        inicio python: context.Dataformata(atDate);
                        fim python: context.Dataformata(atDate)"
            tal:attributes="href string:http://www.google.com/calendar/render?
action=TEMPLATE&amp;amp;text=${context/Title}&amp;amp;dates=${inicio}/${fim}&amp;amp;location=
${context/getLocation}&amp;amp;details=Detalhes:${context/absolute_url}&amp;amp;trp=false"&amp;gt;
    Google Calendar
&amp;lt;/a&amp;gt;&lt;/pre&gt;
&lt;p&gt;Seguindo os passos acima você terá um link que incluirá o evento em questão a sua agenda do Google Calendar. Veja um exemplo no site de um de nossos clientes:&amp;nbsp;&lt;a class="external-link" href="http://www.proparts.esp.br/events/copa-sram-1a-etapa-sram-50k/view"&gt;http://www.proparts.esp.br/events/copa-sram-1a-etapa-sram-50k/view&lt;/a&gt;&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>thiago</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Google</dc:subject>                    <dc:subject>Plone</dc:subject>                    <dc:subject>ZPT</dc:subject>                <dc:date>2011-08-19T14:35:05Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/migrando-varnish-2.1-para-varnish-3.0">        <title>Migrando Varnish 2.1 para Varnish 3.0</title>        <link>http://www.simplesconsultoria.com.br/blog/migrando-varnish-2.1-para-varnish-3.0</link>        <description>
&lt;p&gt;Nas últimas semanas tenho tido a oportunidade de ficar mais próximo do Varnish, e nas últimas três semanas comecei a migrar do varnish 2.1 para Varnish 3, posso dizer desde já que teve um grande salto de melhorias e também de implementações. Mas neste post irei tratar apenas de como preparar sua configuração de vcl para não ser pego de supresa quando fazer um upgrade da versão.&lt;/p&gt;
&lt;p&gt;O exemplo de vcl a seguir foi retirado do svn do Varnish:&amp;nbsp;&lt;strong&gt;&lt;a class="external-link" href="https://www.varnish-cache.org/trac/browser/etc/zope-plone.vcl?rev=1638628650486090595bf53a127c5b38d79d41e6"&gt;https://www.varnish-cache.org/trac/browser/etc/zope-plone.vcl&lt;/a&gt; &lt;/strong&gt;e será com base neste vcl que iremos efetuar a migração.&lt;/p&gt;
&lt;h2&gt;Breve resumo das mudanças de 2.1.5 para 3.0.0&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;Suporte ao módulo &lt;strong&gt;&lt;a class="external-link" href="https://www.varnish-cache.org/docs/trunk/reference/vmod.html"&gt;VMODs&lt;/a&gt;&amp;nbsp;[3]&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Suporte a Compressão e descompressão, incluindo compressão de fragmentos ESI.&lt;/li&gt;&lt;li&gt;Suporte a carregamento preliminar de streaming, tanto em cache ou não.&lt;/li&gt;&lt;li&gt;Melhor documentação.&lt;/li&gt;&lt;li&gt;Melhor valores padrão para parâmetros.&lt;/li&gt;&lt;li&gt;varnishncsa agora com suporte de log com formatos personalizado.&lt;/li&gt;&lt;li&gt;varnishlog, varnishncsa &amp;nbsp;e varnishhist agora com suporte a filtros de registros que correspondem múltiplas expressões.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;Para uma lista mais detalhada de alterações leia o &lt;a class="external-link" href="http://varnish-cache.org/trac/browser/doc/changes.rst"&gt;documento de alterações&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2&gt;&lt;span class="Apple-style-span"&gt;Alterações na VCL.&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;log&lt;/span&gt; foi movido para o &lt;span class="Apple-style-span"&gt;vmod std&lt;/span&gt;.[4]&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/h3&gt;
&lt;pre&gt;log "Olá mundo";&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;torna-se&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;strong&gt;import std;&lt;/strong&gt;
std.log "Olá mundo";&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong&gt;Nota.&lt;/strong&gt; A importação do &lt;strong&gt;std&lt;/strong&gt; só é preciso ser feito uma única vez e usada por toda a VCL.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;purge&lt;/span&gt; agora torna-se o chamadas&amp;nbsp;&lt;span class="Apple-style-span"&gt;ban&lt;/span&gt;, ou como dito na &lt;span class="Apple-style-span"&gt;VCL&lt;/span&gt;, são funções ban.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong&gt;purge()&lt;/strong&gt; e &lt;strong&gt;purge_url()&lt;/strong&gt; são agora, respectivamente &lt;strong&gt;ban()&lt;/strong&gt; e &lt;strong&gt;ban_url()&lt;/strong&gt;, sendo assim deve-se substituir todas as ocorrências:&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;purge(“req.url = ” req.url);&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;para&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;ban(“req.url = ” + req.url);&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong&gt;&lt;br /&gt;purge&lt;/strong&gt;&amp;nbsp;continua existindo porém não leva nenhum argumento mais, e ainda pode ser usado em &lt;strong&gt;vcl_hit&lt;/strong&gt; ou &lt;strong&gt;vcl_miss&lt;/strong&gt; para fazer purge de itens do cache, onde você iria reduzir o &lt;strong&gt;ttl&lt;/strong&gt; a 0 no Varnish 2.1.&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&amp;nbsp;sub vcl_hit {
&amp;nbsp; &amp;nbsp;if (req.request == “PURGE”) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; set obj.ttl = 0s; error 200 “Purged.”;
&amp;nbsp; &amp;nbsp;}
}&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;torna-se&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;sub vcl_hit {
&amp;nbsp; &amp;nbsp;if (req.request == “PURGE”) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; purge; error 200 “Purged.”;
&amp;nbsp; &amp;nbsp;}
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;beresp.cacheable está fora.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;beresp.cacheable&lt;/strong&gt;&amp;nbsp;está fora do Varnish 3, mas pode ser substituído por &lt;strong&gt;beresp.ttl&amp;gt; 0s&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;returns agora é feito com a função return()&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;pass, pipe, lookup, deliver, fetch, hash, pipe&lt;/strong&gt; e &lt;strong&gt;restart&lt;/strong&gt; não são mais palavras-chave, mas argumentos para a função &lt;strong&gt;return()&lt;/strong&gt;, então:&lt;/p&gt;
&lt;pre&gt;sub vcl_pass {
   pass;
}&lt;/pre&gt;
&lt;p&gt;torna-se&lt;/p&gt;
&lt;pre&gt;sub vcl_pass {
   &lt;strong&gt;return(pass);&lt;/strong&gt;
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;req.hash foi substituído por hash_data()&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/h3&gt;
&lt;div&gt;Não apendamos mais o &lt;strong&gt;hash&lt;/strong&gt;&amp;nbsp;com &lt;strong&gt;+=&lt;/strong&gt;&lt;/div&gt;
&lt;pre&gt;set req.hash += req.url;&lt;/pre&gt;
&lt;div&gt;Agora torna-se&lt;/div&gt;
&lt;pre&gt;hash_data(req.url);&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;esi substituído por beresp.do_esi&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;Não habilitamos ESI com &lt;strong&gt;esi.&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;esi;&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;no &lt;strong&gt;vcl_fetch&lt;/strong&gt; tonar-se&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;set beresp.do_esi = true;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;pass em vcl_fetch foi renomeado para hit_for_pass&lt;/h3&gt;
&lt;p&gt;A diferença no comportamento do &lt;strong&gt;pass&lt;/strong&gt; em &lt;strong&gt;vcl_recv&lt;/strong&gt; e &lt;strong&gt;vcl_fetch&lt;/strong&gt;&amp;nbsp;confundem as pessoas, apenas para torna mais claro as coisas, eles são diferentes :) e agora devemos usar &lt;strong&gt;return(hit_for_pass)&lt;/strong&gt;&amp;nbsp;onde usava-se pass no &lt;strong&gt;vcl_fetch&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;NOTA.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/h3&gt;
&lt;p&gt;O &lt;strong&gt;Varnish 3&lt;/strong&gt; também teve uma mudança de comportamento, isso significa que ele irá retornar um erro quando cabeçalhos forem muito grandes ao em vez de apenas ignorá-los. E se os limites são muito baixos, retornará &lt;strong&gt;HTTP 413&lt;/strong&gt;, então deve-se &amp;nbsp;alterar &lt;strong&gt;limits&lt;/strong&gt; por &lt;strong&gt;http_req_hdr_len&lt;/strong&gt; e &lt;strong&gt;http_req_size&lt;/strong&gt;. Essas alterações devem ser feitas em tempo de execução&lt;strong&gt;,&lt;/strong&gt;&amp;nbsp;o que significa adicionar como parâmetro do executável &lt;strong&gt;varnishd&lt;/strong&gt;, &amp;nbsp; exemplo (&lt;strong&gt;-p http_req_hdr_len=4096 -p http_req_size=1024&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Para maiores informações sobre parâmetros em tempo de execução acesse a documentação&lt;strong&gt;[5]&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Migrando.&lt;/h2&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;Eis aqui nosso exemplo retirado do svn do Varnish, porém convertido para a versão 3.0, retirei quais quer comentários da VCL e efetuei a migração, acredito que depois da explicação dos parâmetros acima você seja capaz de migrar a sua configuração.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;backend default {
&lt;span class="Apple-tab-span"&gt;	&lt;/span&gt;.host = "127.0.0.1";
&lt;span class="Apple-tab-span"&gt;	&lt;/span&gt;.port = "9673";
}

acl purge {
&lt;span class="Apple-tab-span"&gt;	&lt;/span&gt;"localhost";
&lt;span class="Apple-tab-span"&gt;	&lt;/span&gt;"192.0.2.0"/24;
}

sub vcl_recv {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (req.http.host ~ "(www.)?example.com") {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; set req.http.host = "example.com";
&lt;span class="Apple-tab-span"&gt;		&lt;/span&gt;set req.url = regsub(req.url, "^", "/VirtualHostBase/http/example.com:80/example.com/VirtualHostRoot");
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } elsif (req.http.host ~ "(www.)?example.org") {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; set req.http.host = "example.org";
&lt;span class="Apple-tab-span"&gt;		&lt;/span&gt;set req.url = regsub(req.url, "^", "/VirtualHostBase/http/example.org:80/example.org/VirtualHostRoot");
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error 404 "Unknown virtual host.";
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (req.request != "GET" &amp;amp;&amp;amp; req.request != "HEAD") {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (req.request == "POST") {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return(pass);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (req.request == "PURGE") {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!client.ip ~ purge) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error 405 "Not allowed.";
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return(lookup);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (req.http.Cookie &amp;amp;&amp;amp; req.http.Cookie ~ "__ac(|_(name|password|persistent))=") {
&lt;span class="Apple-tab-span"&gt;		&lt;/span&gt;if (req.url ~ "\.(js|css)") {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; remove req.http.cookie;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return(lookup);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return(pass);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
}

sub vcl_hit {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (req.request == "PURGE") {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; purge;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error 200 "Purged";
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
}

sub vcl_miss {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (req.request == "PURGE") {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; error 404 "Not in cache";
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
}

sub vcl_fetch {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (beresp.ttl &amp;lt; 3600s) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; set beresp.ttl = 3600s;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
}&amp;nbsp;&lt;/pre&gt;
&lt;h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/h3&gt;
&lt;h3&gt;Indicação de leitura.&lt;/h3&gt;
&lt;div&gt;
&lt;ol&gt;&lt;li&gt;&lt;a class="external-link" href="https://www.varnish-cache.org/docs/trunk/reference/index.html"&gt;Varnish Reference (Inglês)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;a class="external-link" href="https://www.varnish-cache.org/docs/trunk/tutorial/index.html#using-varnish"&gt;Using Varnish (Inglês)&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;a class="external-link" href="https://www.varnish-cache.org/docs/trunk/reference/vmod.html#vmod-varnish-modules"&gt;VMOD - Varnish Modules&lt;/a&gt;&amp;nbsp;(Inglês)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;a class="external-link" href="https://www.varnish-cache.org/docs/trunk/reference/vmod_std.html#vmod-std"&gt;vmod-std (Inglês)&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external-link" href="https://www.varnish-cache.org/docs/trunk/reference/varnishd.html#run-time-parameters"&gt;Run-Time Parameters (Inglês)&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;/div&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>cleber</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Varnish</dc:subject>                    <dc:subject>Tuning</dc:subject>                    <dc:subject>VMOD</dc:subject>                    <dc:subject>Migração</dc:subject>                    <dc:subject>Cache</dc:subject>                    <dc:subject>Performance</dc:subject>                    <dc:subject>Plone</dc:subject>                <dc:date>2011-08-15T02:11:32Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/como-criar-um-tema-para-plone-usando-o-diazo">        <title>Como criar um tema para Plone usando o Diazo</title>        <link>http://www.simplesconsultoria.com.br/blog/como-criar-um-tema-para-plone-usando-o-diazo</link>        <description>
&lt;p&gt;&lt;strong&gt;Diazo&lt;/strong&gt; é uma nova forma de implementar layouts que o Plone está usando e que tem tudo para se tornar a maneira oficial para se desenvolver temas daqui para frente. Basicamente, ele permite que você aplique um tema de uma página com CSS e HTML estático e transformar em um site dinâmico com o mínimo de constrangimento.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Existem várias vantagens nesta abordagem, entre elas:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Abrir a porta para que mais e novos designers possam trabalhar com o Plone.&lt;/li&gt;&lt;li&gt;Você pode usar um wireframe HTML criado por um webdesigner que nem conhece o Plone&lt;/li&gt;&lt;li&gt;Seu tema passa pode ser facilmente reaproveitado em outros CMS e vice versa.&lt;/li&gt;&lt;li&gt;É possível redesenhar uma interface do usuário sem sequer ter acesso ao código fonte da aplicação&lt;/li&gt;&lt;li&gt;Você pode implementar temas em um tempo muito mais reduzido.&lt;/li&gt;&lt;li&gt;O tema original permanece intocado facilitando a reutilização e manutenção.&lt;/li&gt;&lt;li&gt;Há ainda um ganho de performance pois recursos estáticos como imagens, css e javascripts são fornecidos sem passar pelo Plone&lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt;Meu primeiro tema&lt;br /&gt;&lt;/h2&gt;
&lt;p&gt;&lt;br /&gt;A maneira mais rápida de usar o Diazo é instalar o produto &lt;a class="external-link" href="http://pypi.python.org/pypi/plone.app.themingplugins/1.0b1"&gt;plone.app.theming&lt;/a&gt;, com ele você ganha uma nova opção nas configurações do site e então tudo o que precisará fazer é subir um arquivo zipado contendo o seu tema.&amp;nbsp; Vamos criar um tema bem simples para um fácil e rápido entendimento inicial:&lt;br /&gt;&lt;br /&gt;Crie um diretório &lt;strong&gt;/meutema&lt;/strong&gt; e coloque nele o arquivo &lt;strong&gt;tema.html&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&amp;lt;html&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;head&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;Meu Diazo Feliz&amp;lt;/title&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;link rel="stylesheet" href="estilos.css" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/head&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h1 id="title"&amp;gt;Meu tema para Diazo&amp;lt;/h1&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id="content"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Lorem ipsum
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;Coloque também nesta pasta o arquivo &lt;strong&gt;estilos.css&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;body {
&amp;nbsp;&amp;nbsp;&amp;nbsp; background: #fff repeat-x;
&amp;nbsp;&amp;nbsp;&amp;nbsp; color: #000;
&amp;nbsp;&amp;nbsp;&amp;nbsp; font-family: Arial, Helvetica, sans-serif;
}

#content {width: 960px; margin: 0 auto;}
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;Crie então um arquivo chamado rules.xml:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;&amp;lt;rules
&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns="http://namespaces.plone.org/diazo"
&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:css="http://namespaces.plone.org/diazo/css"
&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&amp;gt;

&amp;nbsp;&amp;nbsp; &amp;lt;theme href="tema.html" /&amp;gt;

&amp;nbsp;&amp;nbsp; &amp;lt;replace css:theme="#content" css:content="#portal-column-content" /&amp;gt;
&amp;nbsp;&amp;nbsp; &amp;lt;drop css:content="#plone-document-byline" /&amp;gt;

&amp;lt;/rules&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;Por fim crie um arquivo zip desta pasta e suba pelo painel de configurações do Diazo em @@theming-controlpanel&lt;br /&gt;&lt;br /&gt;Seu mini-tema deve então estar disponível em seu site.&lt;/p&gt;
&lt;h2&gt;As regras do jogo&lt;/h2&gt;
&lt;p&gt;&lt;br /&gt;É no arquivo rule.xml que a mágica acontece. Este arquivo contêm as regras que unem o Plone e o tema, substituindo com o espaço do html estático com o conteúdo de verdade. Vamos entender nosso exemplo simples:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;lt;rules&amp;gt;&amp;nbsp; &lt;/strong&gt;Aqui são definidos três namespaces que fazem o Diazo funcionar. Graças a eles o Diazo permite o uso de seletores completos de CSS3 e XPath, incluindo coisas como o pseudo seletor nth-child.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;lt;theme&amp;gt; &lt;/strong&gt;Dá a referencia para o arquivo de html estático que será usado no tema.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;lt;drop&amp;gt;&lt;/strong&gt; Usado para apagar elementos do tema ou do conteúdo. No nosso exemplo estamos eliminando a tag plone-document-byline e tudo o que há dentro dela.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;lt;replace&amp;gt;&lt;/strong&gt; Uma das mais usadas na implementação de um tema. Isso porque, como o nome já diz, ela substitui um conteúdo estático por um conteúdo dinâmico que você indicar. No nosso exemplo o Diazo colocará todo o #portal-column-content do Plone dentro da tag #content definida em nosso tema estático.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Existem ainda outras tags que podem ser usadas como &amp;lt;before&amp;gt;, &amp;lt;after&amp;gt;, &amp;lt;strip&amp;gt;. &amp;lt;copy&amp;gt;, &amp;lt;notheme&amp;gt; e &amp;lt;merge&amp;gt;. Para&amp;nbsp; um conhecimento mais aprofundado consulte a documentação do Diazo ou aguarde futuros posts aqui no nosso blog.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Perigos do Diazo&lt;/h2&gt;
&lt;p&gt;&lt;br /&gt;É necessário destacar que o Diazo facilitará bastante o desenvolvimento de temas no futuro, mas ele também abre a possibilidade de estragarmos o Plone no processo (Como fizemos neste tutorial). O Plone possui uma história de preocupação com a experiência de uso e possui uma interface poderosa que agora pode ser destruída com poucas linhas. Entre outras coisas o uso indiscriminado do Diazo pode significar:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Perda das validações de código&lt;/li&gt;&lt;li&gt;Perda de usabilidade&lt;/li&gt;&lt;li&gt;Perda de portabilidade&lt;/li&gt;&lt;li&gt;Perda de acessibilidade&lt;/li&gt;&lt;li&gt;Perda na otimização para buscas&lt;/li&gt;&lt;li&gt;Possível incompatibilidade com alguns produtos&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;Sendo assim é necessário mais do que nunca implementar um tema preocupando-se em manter estas e muitas outras vantagens nativas do Plone. Isso significa atenção aos detalhes, auto-crítica e constante acompanhamento do código gerado pelo Plone. Pode ser uma tarefa trabalhosa, mas o resultado é compensador.&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>thiago</dc:creator>        <dc:rights></dc:rights>                <dc:date>2011-07-26T20:20:10Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/plone-4-velocidade-e-chameleon-tudo-em-comum">        <title>Plone 4, velocidade e Chameleon tudo em comum.</title>        <link>http://www.simplesconsultoria.com.br/blog/plone-4-velocidade-e-chameleon-tudo-em-comum</link>        <description>
&lt;p&gt;Num post anterior escrito pelo amigo simplificador &lt;strong&gt;&lt;a class="external-link" href="http://twitter.com/tamosauskas"&gt;@Tamosauskas&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;(&lt;a title="Plone mais rápido com Chameleon" class="internal-link" href="/blog/plone-mais-rapido-com-chameleon"&gt;Plone mais rápido com Chameleon&lt;/a&gt;&lt;span class="Apple-style-span"&gt;), foi mencionado a preocupação e empenho que a comunidade Plone tem tido quando o assunto é desempenho. Pois bem, neste post pretendo reforçar este aspecto, lembrando que essa é umas das preocupações da comunidade, tenho também como maior delas a segurança é claro.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Como dito no post do @Tamosauskas, a cada nova versão do Plone percebemos um ganho de desempenho, desde a versão 2.5 até a mais atual em desenvolvimento 4.1rc3 (Atual até a data que estou escrevendo este post), e claro, ganho de novas funcionalidades mudanças significativas para &amp;nbsp;criação de novos produtos e tipos e a mudança da skin padrão.&lt;/p&gt;
&lt;h2&gt;O que exatamente é o tal do Chameleon?&lt;/h2&gt;
&lt;div&gt;No site oficial a melhor definição é &lt;strong&gt;"Chameleon is an open-source template engine written in Python.&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;", &lt;/strong&gt;de fato, trata-se de um modelo de templates escrito em Python, ele foi escrito para gerar documentos de marcação HTML ou XML para aplicações Web.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;Ele usa a linguagem do &lt;a class="external-link" href="http://pypi.python.org/pypi/zope.pagetemplate"&gt;Page Template&lt;/a&gt;, só que sua implementação é bem mais rápida e independente, no qual trás um conjunto de novos recursos e podemos usar em qualquer aplicação escrita em Python (2.5 e superior, incluindo 3.x e &lt;a class="external-link" href="http://www.pypy.org"&gt;PyPy&lt;/a&gt;), algumas de suas características são:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;Rápido&lt;/strong&gt; - Os templates são compilados para &lt;strong&gt;byte-code&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;Extensível&lt;/strong&gt; - É fácil de estender uma linguagem ou criar sua própria.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;Testado&lt;/strong&gt; - Testes automatizados que protege contra regressões.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Para o Python 2.7 e superior não&amp;nbsp;existem dependências de bibliotecas, já nas versões 2.5 e 2.6 a &lt;strong&gt;&lt;a class="external-link" href="http://pypi.python.org/pypi/ordereddict"&gt;ordereddict&lt;/a&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;a class="external-link" href="http://pypi.python.org/pypi/unittest2"&gt;unittest2&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;são pacotes definidos como dependências, mas para se ter uma idéia de como Chameleon é independente, seu&amp;nbsp;sistema de tradução é &lt;strong&gt;plugável&lt;/strong&gt;&amp;nbsp;e baseado em &lt;a class="external-link" href="http://www.gnu.org/software/gettext/"&gt;gettext&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Não há um suporte embutido para o pacote &lt;strong&gt;&lt;a class="external-link" href="http://pypi.python.org/pypi/zope.i18n"&gt;zope.i18n&lt;/a&gt;&lt;/strong&gt;. Mas se o pacote for instalado, ele será usado por padrão. O pacote &lt;a class="external-link" href="http://pypi.python.org/pypi/translationstring"&gt;translationstring&lt;/a&gt;[3] oferece algumas das mesmas classes de utilidades auxiliares, sem a interface do Zope.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2&gt;Usando Chameleon no seu buildout.&lt;/h2&gt;
&lt;div&gt;Adicione as linhas em seu buildout:&lt;/div&gt;
&lt;pre&gt;
&lt;div&gt;eggs =
   ...
   five.pt&amp;gt;=2.1&lt;/div&gt;
zcml =
   ...
   five.pt&lt;/pre&gt;
&lt;div&gt;Estes testes foram efetuados nas versões &lt;strong&gt;4.0.7&lt;/strong&gt; e &lt;strong&gt;4.1rc3&lt;/strong&gt; do Plone, para um teste simples crie um Page template e coloque o seguinte conteúdo:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
      lang="en"
      metal:use-macro="context/main_template/macros/master"
      i18n:domain="plone"&amp;gt;
 &amp;lt;body&amp;gt;
  &amp;lt;metal:main fill-slot="main" tal:define="name string:world"&amp;gt;
   Hello ${name}!
  &amp;lt;/metal:main&amp;gt;
 &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Note que não precisei colocar &lt;strong&gt;tal:content&lt;/strong&gt; para imprimir o texto da variável &lt;strong&gt;name, &lt;/strong&gt;abaixo mais&amp;nbsp;2 exemplos:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
      lang="en"
      metal:use-macro="context/main_template/macros/master"
      i18n:domain="plone"&amp;gt;

 &amp;lt;body&amp;gt;
  &amp;lt;metal:main fill-slot="main"&amp;gt;
   &amp;lt;div tal:replace="python:'here==context:'+str(here==context)" /&amp;gt;
   &amp;lt;div tal:replace="python:'here==container:'+str(here==container)" /&amp;gt;
   &amp;lt;div tal:replace="string:root:${root/getPhysicalPath}" /&amp;gt;
   &amp;lt;div tal:replace="string:nothing:${nothing}" /&amp;gt;
   &amp;lt;div tal:define="cgi python:modules['cgi']"
        tal:replace="python: dir(cgi)" /&amp;gt;
  &amp;lt;/metal:main&amp;gt;
 &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
      lang="en"
      metal:use-macro="context/main_template/macros/master"
      i18n:domain="plone"&amp;gt;

 &amp;lt;body&amp;gt;
  &amp;lt;metal:main fill-slot="main"&amp;gt;
    &amp;lt;table border="1"&amp;gt;
      &amp;lt;tr tal:repeat="row python:['apple', 'banana', 'pineapple']"&amp;gt;
        &amp;lt;td tal:repeat="col python:['juice', 'muffin', 'pie']"&amp;gt;
           ${row/capitalize} ${col}
        &amp;lt;/td&amp;gt;
      &amp;lt;/tr&amp;gt;
    &amp;lt;/table&amp;gt;
  &amp;lt;/metal:main&amp;gt;
 &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;Para realizar outros testes e aproveitar bem o Chameleon, leia a documentação&lt;strong&gt;[1]&lt;/strong&gt; e sugiro a leitura dos códigos dos produtos Chameleon e five.pt.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;[1]&amp;nbsp;&lt;/strong&gt;&lt;a href="http://pagetemplates.org/docs/latest"&gt;http://pagetemplates.org/docs/latest&lt;/a&gt;&lt;/div&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>cleber</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Buildout</dc:subject>                    <dc:subject>Tuning</dc:subject>                    <dc:subject>Python</dc:subject>                    <dc:subject>Plone 4</dc:subject>                    <dc:subject>Desenvolvimento</dc:subject>                    <dc:subject>ZOPE</dc:subject>                    <dc:subject>Plone4</dc:subject>                    <dc:subject>Plone</dc:subject>                    <dc:subject>ZTS</dc:subject>                <dc:date>2011-08-14T02:35:18Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/buildout-para-o-que-der-e-vier-parte-2">        <title>Buildout, para o que der e vier Parte 2</title>        <link>http://www.simplesconsultoria.com.br/blog/buildout-para-o-que-der-e-vier-parte-2</link>        <description>Em um &lt;a class="external-link" href="buildout-para-oque-der-e-vier"&gt;&lt;strong&gt;post anterior&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;mostrei que podemos utilizar o buildout para instalar praticamente qualquer aplicação que desejarmos, seja ela compilada ou não.
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Como no caso do WordPress, no qual se trata apenas de um pacote compactado e que exige a alteração de seus arquivos de configuração, e também a compilação do aplicativo&amp;nbsp;spawn-fcgi, vale lembrar que caso desejado poderia até compilar o próprio PHP.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Neste post pretendo dar continuidade na instalação do ambiente, mostrando como compilamos o servidor &lt;strong&gt;&lt;a class="external-link" href="http://nginx.net"&gt;Nginx&lt;/a&gt;&lt;/strong&gt; para servir as páginas em PHP, ou em nosso caso, servir o WP, também iremos instalar o &lt;a class="external-link" href="http://supervisord.org/"&gt;Supervisord&lt;/a&gt;&amp;nbsp;(&lt;span class="Apple-style-span"&gt;&lt;strong&gt;Sistema cliente/servidor que permite monitorar e controlar número de processos em sistemas operacionais UNIX-like.&lt;/strong&gt;&lt;/span&gt;)&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;O buildout.&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;&lt;strong&gt;[buildout]&lt;/strong&gt;
parts =
&lt;strong&gt;    ...
&lt;/strong&gt;&lt;em&gt;    supervisor
    nginx-build
    nginxctl
    default-server-config
&lt;/em&gt;
&lt;strong&gt;...

&lt;/strong&gt;
&lt;strong&gt;[nginx-build]&lt;/strong&gt;
recipe = zc.recipe.cmmi
url = http://nginx.org/download/nginx-1.0.4.tar.gz
extra_options =
    --with-http_gzip_static_module
    --with-http_stub_status_module
    --with-http_dav_module
    --with-http_ssl_module
    --with-http_flv_module
    --http-client-body-temp-path=${buildout:directory}/tmp
    --http-proxy-temp-path=${buildout:directory}/tmp/proxy
    --http-fastcgi-temp-path=${buildout:directory}/tmp/fastcgi
    --with-md5-asm --with-md5=/usr/include
    --with-sha1-asm
    --with-sha1=/usr/include
    --with-http_realip_module

&lt;strong&gt;[nginxctl]&lt;/strong&gt;
recipe = gocept.nginx
nginx = nginx
configuration =
    daemon off;
    worker_processes 1;

    events {
        worker_connections  1024;
    }

    http {
        include            ${nginx:location}/conf/mime.types;
        default_type       application/octet-stream;
        sendfile           on;
        keepalive_timeout  65;

        include ${buildout:directory}/etc/nginx.conf;
    }


&lt;strong&gt;[default-server-config]&lt;/strong&gt;
recipe = collective.recipe.template
input = ${buildout:directory}/etc/nginx.conf.in
output = ${buildout:directory}/etc/nginx.conf


&lt;strong&gt;[supervisor]&lt;/strong&gt;
recipe = collective.recipe.supervisor
logfile = ${buildout:directory}/var/log/supervisord.log
logfile-backups = 10
loglevel = info
pidfile = ${buildout:directory}/var/supervisord.pid
plugins = superlance
user = admin
password = secret
port = 9001
programs =
	10 fcgi  ${buildout:directory}/parts/fcgi/bin/spawn-fcgi [ -a 127.0.0.1 -p 53217 -P ${buildout:directory}/tmp/fastcgi-php.pid -- /usr/bin/php-cgi] &lt;span class="Apple-style-span"&gt;true&lt;/span&gt;
	20 nginx ${buildout:directory}/parts/nginxctl/sbin/nginx [ -c ${buildout:directory}/parts/nginxctl/nginxctl.conf] &lt;span class="Apple-style-span"&gt;true&lt;/span&gt;&lt;/pre&gt;
&lt;div&gt;Pois bem, adicionamos mais 4 seções, e antes mesmo de continuar, vamos aos detalhes. No post anterior criamos uma pasta com o nome de &lt;strong&gt;tmp, &lt;/strong&gt;agora note que na seção&amp;nbsp;&lt;strong&gt;[nginx-build],&amp;nbsp;&lt;/strong&gt;indicamos alguns diretórios a serem usados pelo Nginx, que são: proxy e fastcgi.&lt;br /&gt;&lt;br /&gt;Então crie estes dois diretórios e vamos seguir em frente, também teremos que criar dentro do diretório &lt;strong&gt;etc &lt;/strong&gt;um arquivo com o nome &lt;strong&gt;nginx.conf&lt;/strong&gt;, este contém as configurações para rodar-mos o WP, abaixo o conteúdo deste arquivo.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre&gt;server {
    listen 80;
    server_name *.meusite.com;
    rewrite ^ http://www.meusite.com$request_uri permanent;
}

server {
        location / {
                root /home/cleber/buildout/wordpress;
                index  index.php index.html index.htm;
                fastcgi_index   index.php;

                # this sends all non-existing file or directory requests to index.php
                if (!-e $request_filename) {
                        rewrite ^(.+)$ /index.php?q=$1 last;
                }

                autoindex on;
        }

        location = /favicon.ico {
                empty_gif;
                log_not_found off;
                access_log off;
        }

        # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
        location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
        }

        try_files $uri $uri/ /index.php;

        location ~ \.php$ {
            include        /home/cleber/buildout/parts/nginx-build/conf/fastcgi_params.default;
            fastcgi_pass   127.0.0.1:53217;
            fastcgi_param  SCRIPT_FILENAME  /home/cleber/buildout/wordpress/$fastcgi_script_name;
        }
}&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;Pronto, rode o buildout, e depois você já poderá desfrutar de sua aplicação, o supervisor irá criar um um script no diretório &lt;strong&gt;bin&lt;/strong&gt; da instância, agora você pode startar as aplicações usando o comando:&lt;/div&gt;
&lt;pre&gt;./bin/supervisord&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Nota. &lt;/strong&gt;Vale lembrar que a porta 80 só pode ser aberta pelo root ou por um usuário com poder igual, neste caso estamos falando que o comando acima deverá ser rodado por um usuário com poderes de sudo ou root.&lt;/p&gt;
&lt;p&gt;Até a próxima!&lt;/p&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>cleber</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Apresentação</dc:subject>                    <dc:subject>Código Aberto</dc:subject>                    <dc:subject>Buildout</dc:subject>                    <dc:subject>Python</dc:subject>                    <dc:subject>Desenvolvimento</dc:subject>                    <dc:subject>Plone</dc:subject>                <dc:date>2011-06-28T20:14:46Z</dc:date>        <dc:type>Post</dc:type>    </item>
    <item rdf:about="http://www.simplesconsultoria.com.br/blog/buildout-para-oque-der-e-vier">        <title>Buildout, para o que der e vier</title>        <link>http://www.simplesconsultoria.com.br/blog/buildout-para-oque-der-e-vier</link>        <description>
&lt;p&gt;Começo dizendo que durante algum tempo fui assombrado pelo buildout, desde a minha entrada na Simples até alguns meses depois, eu tremia sempre que eu tinha de rodar um, a primeira coisa que vinha na cabeça era: &lt;strong&gt;"Pronto, agora o ambiente vai ser destruído :(".&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Trabalhar com alho no pescoço, pé de coelho e até mesmo trevo de 4 folhas não estava em meu escopo de trabalho, e não é muito meu tipo, pois bem, depois de algumas brigas decidi me tornar o melhor amigo do buildout, após alguns copos de café, e saindo juntos, decidimos fazer as pazes.&amp;nbsp;&lt;/p&gt;
&lt;blockquote class="webkit-indent-blockquote"&gt;
&lt;p&gt;Hoje posso garantir, que em qualquer situação onde preciso instalar alguma aplicação que vá ou não rodar com o Plone, penso no meu amigo buildout.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Duas pessoas que me tiraram esse medo e me deram coragem foi o amigo e inesquecível &lt;a class="external-link" href="dornelesday"&gt;Dorneles&lt;/a&gt;, e também o amigo &lt;a class="external-link" href="http://twitter.com/ericof"&gt;Érico&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;E agora a novidade é que não vou falar de como instalar Plone usando buildout, isso tudo para poder mostrar todo o poder do buildout, caso não saiba ainda do que estou falando acesso em&amp;nbsp;&lt;span class="Apple-style-span"&gt;&lt;a href="http://www.buildout.org/docs/tutorial.html"&gt;http://www.buildout.org/docs/tutorial.html&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span class="Apple-style-span"&gt;Buildout&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;É simples de usar e de manter se você fizer configurações simples e legíveis.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Trabalha com eggs.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Evita conflitos com os pacotes instalados no site_packages.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Evita a instalação diretamente no Python&amp;nbsp;do sistema.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Instala dependências a partir das definições dos eggs.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Podemos instalar por exemplo:&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;Bancos de dados:&lt;/strong&gt; PostgreSql, Mysql, Oracle e etc...&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Serviço de autenticação como o &lt;strong&gt;LDAP&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;Aplicações como&lt;/strong&gt;: Versões diferentes de Python, Varnish,Squid, Supervisor e etc..&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;Frameworks:&lt;/strong&gt; Django, Web2Py, Zope&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;CMS:&lt;/strong&gt; Plone, WordPress e etc..&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;Servidores web: Apache, Nginx e etc...&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;E etc...&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;Vamos manter as coisas simples, então crie um diretório chamado mybuildout, dentro deste diretório crie a seguinte estrutura de pastas:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;mybuildout&lt;/strong&gt;&lt;/div&gt;
&lt;blockquote class="webkit-indent-blockquote"&gt;
&lt;div&gt;&lt;strong&gt;|- tmp&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;|- etc&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;|- src&lt;/strong&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;span class="Apple-style-span"&gt;
&lt;div&gt;&lt;strong&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
Essa não é uma estrutura requerida pelo buildout, mas gosto de montar assim, garantindo que qualquer arquivo temporário vá ficar em &lt;/span&gt;&lt;span class="Apple-style-span"&gt;tmp&lt;/span&gt;&lt;span class="Apple-style-span"&gt; por exemplo, arquivos de configurações em etc e aplicações em desenvolvimento em &lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;src, &lt;/strong&gt;dois arquivos são requeridos, são eles:&amp;nbsp;&lt;a class="external-link" href="http://python-distribute.org/bootstrap.py"&gt;&lt;strong&gt;bootstrap.py&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;e&amp;nbsp;&lt;strong&gt;buildout.cfg.&lt;/strong&gt;&lt;/span&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;&lt;span class="Apple-style-span"&gt;Podemos não usar o buildout.cfg e montar o ambiente com outros aquivos, mas isso não vem ao caso, vamos a um exemplo do não uso do Plone, e para não dizerem que não gosto de PHP, iremos instalar o WordPress, então vamos lá.&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;NOTA. &lt;/strong&gt;A instalação a seguir foi feita no sistema operacioal Linux (Ubuntu) sendo assim, não garanto que funcione no Windows, mas sim, temos como fazer funcionar da mesma forma no Windows e outros sistemas operacionais.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;Também estou partindo do ponto que já temos php instalado no sistema, não quero ter que ficar compilando no buildut o PHP, ainda que dê claro ;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;&lt;span class="Apple-style-span"&gt;Comento o buildout logo abaixo.&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;strong&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2&gt;&lt;span class="Apple-style-span"&gt;Instalando o WordPress usando Python, ironia?&lt;/span&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;strong&gt;[buildout]&lt;/strong&gt;
parts =
    fcgi
    wp

&lt;strong&gt;[wpconf]&lt;/strong&gt;
wpversion = latest.tar.gz
mydb_name = wp 
mydb_user = wp
mydb_pass = wpnginx
mydb_charset = utf8
mydb_host = localhost

&lt;strong&gt;[downloads]&lt;/strong&gt;
wp_url = http://wordpress.org/${wpconf:wpversion} 
fcgi_url = http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz

&lt;strong&gt;[ports]&lt;/strong&gt;
fastcgi = 53217

&lt;strong&gt;[fcgi]&lt;/strong&gt;
recipe = zc.recipe.cmmi
url = ${downloads:fcgi_url}
configure-options = 
    --prefix=${buildout:directory}/parts/fcgi

&lt;strong&gt;[wp]&lt;/strong&gt;
&lt;em&gt;&lt;strong&gt;recipe = plone.recipe.command&lt;/strong&gt;&lt;/em&gt;
command =
    chmod 600 .installed.cfg
    if [ ! -f ${buildout:directory}/${wpconf:wpversion} ]; then wget ${downloads:wp_url}; fi
    tar xzf ${wpconf:wpversion} 
    cp ${buildout:directory}/wordpress/wp-config-sample.php ${buildout:directory}/wordpress/wp-config.php
    ln -dfs ${buildout:directory}/wordpress ${buildout:directory}/var/www/wordpress
    sed -i "s/define('DB_NAME', 'database_name_here')/define('DB_NAME', '${wpconf:mydb_name}')/" ${buildout:directory}/wordpress/wp-config.php
    sed -i "s/define('DB_USER', 'username_here')/define('DB_USER', '${wpconf:mydb_user}')/" ${buildout:directory}/wordpress/wp-config.php
    sed -i "s/define('DB_PASSWORD', 'password_here')/define('DB_PASSWORD', '${wpconf:mydb_pass}')/" ${buildout:directory}/wordpress/wp-config.php
    sed -i "s/define('DB_HOST', 'localhost')/define('DB_HOST', '${wpconf:mydb_host}')/" ${buildout:directory}/wordpress/wp-config.php
    sed -i "s/define('DB_CHARSET', 'utf8')/define('DB_CHARSET', '${wpconf:mydb_charset}')/" ${buildout:directory}/wordpress/wp-config.php
    chmod +x ${buildout:directory}/bin/spawn-fcgi
update-command = ${wp:command&lt;/pre&gt;
&lt;p&gt;Criei duas seções que servirá para instalar o WordPress e um script de inicialização do php-cgi, este script também vem quando instalamos o servidor lighttpd, que é uma forma de manter o php vivo enquanto podemos dar um restart ou reload no servidor lighttpd, mas isso não vem ao caso.&lt;/p&gt;
&lt;p&gt;Também criamos &amp;nbsp;3 outras seções que são:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;wpconf - &amp;gt; &lt;/strong&gt;Colocamos aqui as configurações do nosso WP, como dados da base de dados [usuário, senha etc ] e a versão que desejamos instalar do WP.&lt;br /&gt;&lt;strong&gt;downloads -&amp;gt;&lt;/strong&gt; Urls das aplicações, WP e fcgi.&lt;br /&gt;&lt;strong&gt;ports -&amp;gt;&lt;/strong&gt; Configuração da porta no qual o fcgi irá rodar&lt;/p&gt;
&lt;p&gt;Note que na seção &lt;strong&gt;[wp]&lt;/strong&gt;, usei alguns comandos para fazer a mágica acontecer, quero baixar e descompactar o tar.gz, lembrando que em casos de arquivos zip, será necessário alterar a linha. &amp;nbsp;Após descompactar copiamos o arquivo&amp;nbsp;&lt;span class="Apple-style-span"&gt;wp-config-sample.php para &lt;/span&gt;&lt;span class="Apple-style-span"&gt;wp-config.php, este será o que o Wp irá ler.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="Apple-style-span"&gt;E por fim, setamos os dados de acesso ao bando de dados neste arquivo de configuração.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Rode o bootstrap e o buildout: python bootstrap.py &amp;amp;&amp;amp;&amp;nbsp;./bin/buildout -Nvvv -t 30&lt;/p&gt;
&lt;p&gt;Ao final teremos o o Wp instalado e pronto pra usar, é claro que faltam detalhes como instalar o servidor Apache ou Nginx, ou um de sua preferência.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para subir o fcgi você pode executar:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;./parts/fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 53217 -P ./tmp/fastcgi-php.pid -- /usr/bin/php-cgi&lt;/p&gt;
&lt;p&gt;A configuração acima, usei com o servidor Nginx, também compilado com buildout, por este motivo adicionei o fcgi, abaixo sugestões de eggs que ajudam nas instalações.&lt;/p&gt;
&lt;h2&gt;Sugestões.&lt;/h2&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;&lt;a class="external-link" href="http://pypi.python.org/pypi/zc.recipe.cmmi/"&gt;&lt;strong&gt;zc.recipe.cmmi&lt;/strong&gt;:&lt;/a&gt; Usado para executar comando configure/make/make install&lt;/li&gt;&lt;li&gt;&lt;a class="external-link" href="http://pypi.python.org/pypi/plone.recipe.command"&gt;&lt;strong&gt;plone.recipe.command&lt;/strong&gt;&lt;/a&gt;: Executa comandos arbitrários para o buildout.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a class="external-link" href="http://pypi.python.org/pypi/collective.recipe.supervisor"&gt;collective.recipe.supervisor:&lt;/a&gt;&lt;/strong&gt; Receita para instalar o supervisor&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a class="external-link" href="http://pypi.python.org/pypi/z3c.recipe.usercrontab"&gt;z3c.recipe.usercrontab:&lt;/a&gt;&lt;/strong&gt; Adicionar comandos ao Crontab do Linux&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a class="external-link" href="http://pypi.python.org/pypi/collective.recipe.template"&gt;collective.recipe.template:&lt;/a&gt;&lt;/strong&gt; Receita para a criação de templates de configurações&lt;/li&gt;&lt;li&gt;&lt;a class="external-link" href="http://pypi.python.org/pypi?%3Aaction=browse"&gt;Mais :)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
</description>        <dc:publisher>No publisher</dc:publisher>        <dc:creator>cleber</dc:creator>        <dc:rights></dc:rights>                    <dc:subject>Apresentação</dc:subject>                    <dc:subject>Código Aberto</dc:subject>                    <dc:subject>Buildout</dc:subject>                    <dc:subject>Python</dc:subject>                    <dc:subject>Desenvolvimento</dc:subject>                    <dc:subject>Plone</dc:subject>                <dc:date>2011-06-28T20:02:14Z</dc:date>        <dc:type>Post</dc:type>    </item>




</rdf:RDF>

