<?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>Alexandre Marinho &#187; framework</title>
	<atom:link href="http://alexandre.cuboestudioweb.com/tag/framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://alexandre.cuboestudioweb.com</link>
	<description>Tecnologia, Programação, Gadgets, etc...</description>
	<lastBuildDate>Fri, 18 Jun 2010 12:49:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Um pouco de metaprogramação</title>
		<link>http://alexandre.cuboestudioweb.com/2009/10/um-pouco-de-metaprogramacao/</link>
		<comments>http://alexandre.cuboestudioweb.com/2009/10/um-pouco-de-metaprogramacao/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 13:39:32 +0000</pubDate>
		<dc:creator>alexandre</dc:creator>
				<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[metaprogramacao]]></category>
		<category><![CDATA[software livre]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://alexandre.cuboestudioweb.com/?p=99</guid>
		<description><![CDATA[Quem assina a lista django-brasil recebeu essa mensagem do Luciano Ramalho sobre metaprogramação. Achei muito interressante e demonstra perfeitamente o quão poderosa é a linguagem Python. Estou reproduzindo o texto sem alterações: Em geral não é tedioso programar com o &#8230; <a href="http://alexandre.cuboestudioweb.com/2009/10/um-pouco-de-metaprogramacao/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Quem assina a lista <a href="http://groups.google.com.br/group/django-brasil" target="_blank">django-brasil</a> recebeu essa mensagem do <a href="http://blog.ramgarlic.com/" target="_blank">Luciano Ramalho</a> sobre metaprogramação. Achei muito interressante e demonstra perfeitamente o quão poderosa é a linguagem Python.</p>
<p>Estou reproduzindo o texto sem alterações:</p>
<p>Em geral não é tedioso programar com o Django, mas às vezes é, veja só quanta repetição:</p>
<p># <a href="http://pastebin.com/f2fc7b238" target="_blank">http://pastebin.com/f2fc7b238</a></p>
<pre>class DescriptorInline(admin.TabularInline):
   model = Descriptor

class RecruitmentCountryInline(admin.TabularInline):
   model = RecruitmentCountry

class OutcomeInline(admin.StackedInline):

   model = Outcome

class TrialInterventionCodeInline(admin.TabularInline):

   model = TrialInterventionCode

class SecondaryNumberInline(admin.TabularInline):

   model = TrialNumber

class TrialContactInline(admin.TabularInline):

   model = TrialContact

class TrialInstitutionInline(admin.TabularInline):

   model = TrialInstitution

class ClinicalTrialAdmin(admin.ModelAdmin):

   inlines = [SecondaryNumberInline, RecruitmentCountryInline,

              OutcomeInline, TrialContactInline, TrialInstitutionInline,

              DescriptorInline, TrialInterventionCodeInline]</pre>
<p>No código acima, cada nome de modelo aparece três vezes&#8230; (uma vez ao<br />
declarar a classe XXXInline, no atributo model do inline, e mais uma<br />
vez no atributo inlines).</p>
<p>Além disso, quase todas as declarações de inlines são idênticas&#8230; E o<br />
princípio DRY, como fica?</p>
<p>Felizmente Django é Python. Então aquilo pode ser reescrito de uma<br />
maneira mais legal assim:</p>
<p># <a href="http://pastebin.com/f5af2bd28" target="_blank">http://pastebin.com/f5af2bd28</a></p>
<pre>tabular_inline_models = [Descriptor, RecruitmentCountry, TrialInterventionCode,

                        TrialNumber, TrialContact, TrialInstitution]

tabular_inlines = []

for model in tabular_inline_models:

   cls_name = model.__name__+'Inline'

   cls = type(cls_name, (admin.TabularInline,), {'model':model})

   tabular_inlines.append(cls)

class OutcomeInline(admin.StackedInline):

   model = Outcome

class ClinicalTrialAdmin(admin.ModelAdmin):

   inlines = tabular_inlines + [OutcomeInline]</pre>
<p>O truque aqui foi usar a função type(), que pode ser usada para criar<br />
classes dinamicamente. Para isso a gente passa três argumentos para a<br />
função type():</p>
<p>- uma string que será o __name__ da classe<br />
- uma tupla de super-classes (importante: a vírgula dentro do<br />
parêntesis indica que é uma tupla de um elemento)<br />
- um dicionário com os atributos da classe (métodos e variáveis)</p>
<p>Não tente fazer isso em Java <img src='http://alexandre.cuboestudioweb.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p>[ ]s<br />
Luciano</p>
]]></content:encoded>
			<wfw:commentRss>http://alexandre.cuboestudioweb.com/2009/10/um-pouco-de-metaprogramacao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Templates em PHP, só se for com PHPTAL</title>
		<link>http://alexandre.cuboestudioweb.com/2009/07/templates-em-php-so-se-for-com-phptal/</link>
		<comments>http://alexandre.cuboestudioweb.com/2009/07/templates-em-php-so-se-for-com-phptal/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 18:05:21 +0000</pubDate>
		<dc:creator>alexandre</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[zope]]></category>

		<guid isPermaLink="false">http://alexandre.cuboestudioweb.com/?p=91</guid>
		<description><![CDATA[Para os desenvolvedores PHP segue uma dica de uma ferramenta de templates muito legal! O PHPTAL é um motor de geração de templates para PHP5 que implementa a sintaxe ZPT (Zope Page Templates) ex.: &#60;div class="item" tal:repeat="item itemsArray"&#62; &#60;span tal:condition="item/hasDate" &#8230; <a href="http://alexandre.cuboestudioweb.com/2009/07/templates-em-php-so-se-for-com-phptal/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Para os desenvolvedores PHP segue uma dica de uma ferramenta de templates muito legal!</p>
<p>O <a href="http://phptal.org/" target="_blank">PHPTAL</a> é um motor de geração de templates para PHP5 que implementa a sintaxe ZPT (Zope Page Templates) ex.:</p>
<pre><code><span>&lt;div<span> class</span><span>=</span><span>"item"</span><span> tal:repeat</span><span>=</span><span>"item itemsArray"</span>&gt;</span>
    <span>&lt;span<span> tal:condition</span><span>=</span><span>"item/hasDate"</span><span> tal:replace</span><span>=</span><span>"item/getDate"</span>/&gt;</span>
    <span>&lt;a<span> href</span><span>=</span><span>"${item/getUrl}"</span><span> tal:content</span><span>=</span><span>"item/getTitle"</span>/&gt;</span>
  <span>&lt;p<span> tal:content</span><span>=</span><span>"value/getContent"</span>/&gt;</span>
<span>&lt;/div&gt;
</span></code></pre>
<p>Enquanto a maioria dos desenvolvedores continua a usar tags ASP/JSP/PHP como principal linguagem para seus templates, a comunidade Zope teve a ótima idéia chamada TAL. A idéia era mover a ações para dentro de atributos XHML ao invés de usar outras tags e elementos.</p>
<p>Essa é grande vantagem da sintaxe do ZPT, sua simplicidade, não existem novas tags para aprender, e sim novos atributos que podem ser adicionados a qualquer tag XHTML e que atribuem comportamentos específicos. Esses novos atributos possibilitam ações como: condição, definição, repetição, inclusão de attributos, substituição de conteúdo, entre outros.</p>
<p>No exemplo disponível no site do projeto podemos ver o equivalente ao código acima:</p>
<pre><code><span><span>&lt;?php</span> <span>foreach </span><span>(</span><var>$values</var> <span>as</span> <var>$value</var><span>):</span> <span>?&gt;</span></span>
<span>&lt;div<span> class</span><span>=</span><span>"item"</span>&gt;</span>
  <span>&lt;div<span> class</span><span>=</span><span>"title"</span>&gt;</span>
    <span><span>&lt;?php</span> <span>if </span><span>(</span><var>$value</var><span>-&gt;</span><span>hasDate</span><span>()):</span> <span>?&gt;</span></span><span><span>&lt;?=</span><var>$value</var><span>-&gt;</span><span>getDate</span><span>()</span><span>?&gt;</span></span><span><span>&lt;?php</span> <span>endif</span><span>;</span> <span>?&gt;</span></span>
    <span>&lt;a<span> href</span><span>=</span><span>"<span><span>&lt;?=</span> <var>$value</var><span>-&gt;</span><span>getUrl</span><span>()</span> <span>?&gt;</span></span>"</span>&gt;</span><span><span>&lt;?=</span>
		<span>htmlentities</span><span>(</span><var>$value</var><span>-&gt;</span><span>getTitle</span><span>())</span>
	<span>?&gt;</span></span><span>&lt;/a&gt;</span>
  <span>&lt;/div&gt;</span>
  <span>&lt;div<span> class</span><span>=</span><span>"content"</span>&gt;</span>
    <span><span>&lt;?=</span> <span>htmlentities</span><span>(</span><var>$value</var><span>-&gt;</span><span>getContent</span><span>())</span> <span>?&gt;</span></span>
  <span>&lt;/div&gt;</span>
<span>&lt;/div&gt;</span>
<span><span>&lt;?php</span> <span>endforeach</span><span>;</span> <span>?&gt;</span></span></code></pre>
<p>Nota-se a economia de código fonte que o PHPTAL oferece.</p>
<p>Outra grande vantagem so PHPTAL é que, o tamplates são compilados para código fonte PHP5. Funcionando semelhante a idéia de bytecode em python, onde o código fonte em PHPTAL é compilado para PHP na primeira vez em que for executado, sendo o mesmo somente gerado novamente se o código fonte for alterado.</p>
<p>Abaixo a lista funcionalidades do PHPTAL</p>
<ul>
<li>separação da lógica e apresentação,</li>
<li>avisa se você esquecer de fechar uma tag ou se tem erros no template</li>
<li>templates limpos e legíveis,</li>
<li>fácil integração com editores HTML WYSIWYG,</li>
<li>abstração de dados usando um sistema similar a XPath,</li>
<li>interessante sistema de macros HTML,</li>
<li>sistema de internacionalização integrado (usando gettext),</li>
<li>habilidade de substituir expressões XPath por expressões PHP,</li>
<li>quase nenhuma perda de velocidade (templates são compilados, grandes expressões podem ser substituídas por código PHP,</li>
<li>compatível com aceleradores PHP,</li>
<li>mais de quatro anos de suporte da comunidade ZPT,</li>
<li>código extensível.</li>
</ul>
<p>Bom, segue ai a dica para quem quiser um motor de templates interessante e fácil de aprender.<br />
Mais detalhes no site do projeto: http://phptal.org</p>
<p>Até a próxima.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexandre.cuboestudioweb.com/2009/07/templates-em-php-so-se-for-com-phptal/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Desenvolvimento Ultra-Rápido com web2py</title>
		<link>http://alexandre.cuboestudioweb.com/2009/02/desenvolvimento-ultra-rapido-com-web2py/</link>
		<comments>http://alexandre.cuboestudioweb.com/2009/02/desenvolvimento-ultra-rapido-com-web2py/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 19:34:31 +0000</pubDate>
		<dc:creator>alexandre</dc:creator>
				<category><![CDATA[sistemas]]></category>
		<category><![CDATA[web2py]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[vídeo]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://alexandre.cuboestudioweb.com/?p=42</guid>
		<description><![CDATA[Cada dia que passa eu me impressiono mais com esta poderosa linguagem que é o python. Agora me deparo com este vídeo do framework web2py. É tão simples que da raiva e você pensa &#8220;onde é que isso estava naquele &#8230; <a href="http://alexandre.cuboestudioweb.com/2009/02/desenvolvimento-ultra-rapido-com-web2py/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Cada dia que passa eu me impressiono mais com esta poderosa linguagem que é o python. Agora me deparo com este vídeo do framework web2py. É tão simples que da raiva e você pensa &#8220;onde é que isso estava naquele meu último projeto&#8221;. Não acredita? Assista ao vídeo e chore.</p>
<p>Obs.: Vídeo em inglês.<br />
<object width="600" height="380" data="http://vimeo.com/moogaloop.swf?clip_id=875433&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=875433&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://alexandre.cuboestudioweb.com/2009/02/desenvolvimento-ultra-rapido-com-web2py/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
