<?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>Blog de desenvolvimento da Milfont Consulting, Client e Server-side &#187; JavaScript</title>
	<atom:link href="http://www.milfont.org/tech/category/web-development/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.milfont.org/tech</link>
	<description>Blog da Comunidade Milfont Consulting, uma empresa especializada em desenvolvimento Web, principalmente Javascript, node.js e muito Javascript.</description>
	<lastBuildDate>Thu, 26 Jan 2012 11:30:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Imersão ExtJS 4</title>
		<link>http://www.milfont.org/tech/2012/01/10/imersao-extjs-4/</link>
		<comments>http://www.milfont.org/tech/2012/01/10/imersao-extjs-4/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 11:46:50 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[cursos]]></category>
		<category><![CDATA[Ext]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[sencha]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[egenial]]></category>
		<category><![CDATA[ExtJS]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1552</guid>
		<description><![CDATA[Olá, é com grande satisfação que gostaríamos de compartilhar com você nosso novo curso curso online, o Imersão ExtJS 4 que será ministrado pelo Christiano Milfont que irá tratar sobre as melhores práticas para desenvolver WebApps com riqueza de usabilidade usando ExtJS 4. O Framework Javascript de propósito geral ExtJS possui Widgets [componentes] que fascinam e [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2012/01/10/imersao-extjs-4/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Olá, é com grande satisfação que gostaríamos de compartilhar com você nosso novo curso curso online, o <a title="Imersão ExtJS 4" href="http://www.egenial.pro/pt/extjs">Imersão ExtJS 4</a> que será ministrado pelo <a href="http://www.milfont.org/tech/about/">Christiano Milfont</a> que irá tratar sobre as melhores práticas para desenvolver WebApps com riqueza de usabilidade usando <a href="http://www.sencha.com/products/extjs/">ExtJS 4</a>.</p>
<p>O Framework Javascript de propósito geral ExtJS possui Widgets [componentes] que fascinam e agilizam o desenvolvimento principalmente de aplicações comerciais que são migradas do Desktop.</p>
<p>Existem <a href="http://www.loiane.com/2011/12/capitulo-gratuito-do-meu-livro-extjs-4-first-look/">bons livros já publicados</a>, como o da brasileira <a href="http://www.loiane.com/">Loiane Groner</a>, que também está publicando um curso gratuito no <a href="http://www.loiane.com/2011/11/curso-de-extjs-4-gratuito/">formato de Screencasts</a> cobrindo o básico do ExtJS e aprofundando com muitos exemplos. O próprio Framework contém uma <a href="http://docs.sencha.com/ext-js/4-0/">excelente documentação</a>, uma gama <a href="http://www.sencha.com/products/extjs/examples/">enorme de exemplos</a>, abrangendo inúmeras situações.</p>
<p><a href="http://www.amazon.com/gp/product/1849516669/ref=as_li_ss_il?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1849516669"><img src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL110_&amp;ASIN=1849516669&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=milftech-20&amp;ServiceVersion=20070822" alt="" border="0" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=milftech-20&amp;l=as2&amp;o=1&amp;a=1849516669" alt="" width="1" height="1" border="0" /></p>
<h2 dir="ltr">Bootstrapping</h2>
<p>Uma grande dificuldade para desenvolver WebApps, principalmente para desenvolvedores especializados no Backend, é a aridez de desenhar a interface com CSS e trabalhar o comportamento da visão com Javascript.</p>
<p>Enquanto os sistemas operacionais fornecem um conjunto de componentes de Interface por meio de API e Look&#8217;n'Feel padronizado para você simplesmente construir a aplicação, na Web o trabalho é bastante artesanal, inclusive com a necessidade de trabalhar com ferramentas especializadas de design como GIMP ou Photoshop.</p>
<p>Não é à toa que o <a href="http://twitter.github.com/bootstrap/">Toolkit Bootstrap</a> disponibilizado pelo Twitter faz tanto sucesso, inclusive com o mesmo nome da técnica de construir um modelo de layout com componentes padronizados para facilitar a construção de aplicações web.</p>
<p>O ExtJS já fornece embutido no seu Framework todo um conjunto de templates e elementos gráficos para utilizar com seus componentes, além da abertura para customização caso seja necessário. Além disso existem diversos templates distribuídos por terceiros.</p>
<h2 dir="ltr">Diferencial do Curso</h2>
<p>Como já mencionado, existe uma infinidade de materiais disponíveis na Web onde você pode aprender por conta própria.</p>
<p>O diferencial do nosso curso não é simplesmente aprender sobre os Widgets e montar telas ricas, é a experiência de <a href="http://www.milfont.org/tech/2009/06/29/introducao-ao-ext/">quem desenvolve</a> com o Framework desde que ele era uma extensão do <a href="http://developer.yahoo.com/yui/">YUI</a> [Framework do Yahoo].</p>
<p>Iremos demonstrar as melhores práticas de como construir aplicações verdadeiramente ricas que são proibitivas de serem construídas num processo artesanal por meio de JS e CSS por dar muito trabalho.</p>
<p>Vamos tratar sobre assuntos espinhosos, como extender componentes, modificar o comportamento natural de elementos do próprio HTML, como navegação por meio de eventos que não existem e ainda vamos dar uma palhinha de como construir uma aplicação que se adapte a dispositivos móveis usando o SenchaTouch com o mínimo de esforço dentro do possível.</p>
<p>Matricule-se já e <a href="http://www.egenial.pro/pt/extjs">garanta sua vaga</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2012/01/10/imersao-extjs-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Engine de template em Javascript com estratégia de HTML Sprites</title>
		<link>http://www.milfont.org/tech/2011/09/19/engine-de-template-em-javascript-com-estrategia-de-html-sprites/</link>
		<comments>http://www.milfont.org/tech/2011/09/19/engine-de-template-em-javascript-com-estrategia-de-html-sprites/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 01:01:59 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1455</guid>
		<description><![CDATA[Apresentei no QCON São Paulo 2011 um Lightning Talk: &#8220;Engine de template em Javascript com HTML Sprites&#8221;. A estratégia consiste em montar um template com suas Partials no mesmo arquivo html para facilitar o trabalho de renderização usando DIVs como &#8220;sprites&#8221;, assim como fazemos com CSS. Para a estratégia eu construí uma Engine de Templates [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2011/09/19/engine-de-template-em-javascript-com-estrategia-de-html-sprites/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Apresentei no <a href="http://www.milfont.org/tech/2011/09/16/qcon-sao-paulo-2011/">QCON São Paulo 2011</a> um <a href="http://qconsp.com/schedule/sabado">Lightning Talk</a>: &#8220;Engine de template em Javascript com HTML Sprites&#8221;. A estratégia consiste em montar um template com suas Partials no mesmo arquivo html para facilitar o trabalho de renderização usando DIVs como &#8220;sprites&#8221;, assim como fazemos com CSS.</p>
<p>Para a estratégia eu construí uma <a href="http://en.wikipedia.org/wiki/Template_engine_(web)">Engine de Templates</a> minimalista quase Logic-less baseada na <a href="http://en.wikipedia.org/wiki/Expression_Language">EL do JSP</a>. Quase Logic-less porque a única lógica permitida são sentenças como IF Ternário, comparações e o conceito de Helpers (como no Rails), que não passam de funções javascript simples que retornam alguma formatação para a VIEW.</p>
<p>No meu curso <a href="http://www.milfont.org/javascriptfundamental.html">Javascript Fundamental</a>, <a href="https://gist.github.com/1224299">um dos exercícios</a> é construir essa engine que chamei de <a href="https://github.com/milfont/eljs">ELJS</a>.</p>
<p>A grande diferença entre o <a href="https://github.com/milfont/eljs">ELJS</a> e o <a href="http://mustache.github.com/">Mustache</a> (Engine Logic-less famosa) são os Helpers e o conceito de compilação separado da própria renderização. A grande vantagem da compilação é fazer um parser das marcações e deixar o template preparado para interpolação sem precisar tratar sentenças a cada chamada de &#8220;render&#8221;.</p>
<p>Assim como o Mustache, o tratamento dos Partials é feito fora da Engine, no meu caso eu tratei no plugin para jQuery (TODO: terminar plugins para outras bibliotecas/frameworks).</p>
<p>Atualizei o <a href="https://github.com/milfont/eljs/blob/master/src/jquery.el.js">plugin para jQuery</a> apresentado no evento com a última versão que usamos nos nossos projetos e tornamos <a href="https://github.com/milfont/eljs">Open Source</a>. Criei uma <a href="http://milfont.org/eljs/example/exemplo.html">página de exemplo como funciona a estratégia</a>, mas os <a href="https://github.com/milfont/eljs/tree/master/specs">testes</a> facilitam a compreensão, principalmente o <a href="https://github.com/milfont/eljs/blob/master/specs/sprite.jquery.spec.js">teste do plugin</a>.</p>
<p>Dá uma olhada nos slides novamente para entender a evolução dessa estratégia.<br />
<iframe src="http://www.slideshare.net/slideshow/embed_code/9243650" width="400" height="337" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/09/19/engine-de-template-em-javascript-com-estrategia-de-html-sprites/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CoffeeScript</title>
		<link>http://www.milfont.org/tech/2011/07/25/coffeescript/</link>
		<comments>http://www.milfont.org/tech/2011/07/25/coffeescript/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 18:57:55 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Linguagens]]></category>
		<category><![CDATA[coffeescript]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1407</guid>
		<description><![CDATA[Resolvi falar sobre CoffeeScript porque algumas pessoas com poder de influência em diversas comunidades estão evangelizando essa aberração. História Vou começar pelo começo, aproximadamente entre os anos de 99 e 2009 a comunidade Javascript passou se degladiando sobre o futuro da linguagem, uma parte defendia algo próximo ao ActionScript [exemplo fácil só para um termo [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2011/07/25/coffeescript/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Resolvi falar sobre <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> porque algumas pessoas com poder de influência em diversas comunidades estão evangelizando essa aberração.</p>
<h2>História</h2>
<p>Vou começar pelo começo, aproximadamente entre os anos de 99 e 2009 a comunidade Javascript passou se degladiando sobre o futuro da linguagem, uma parte defendia algo próximo ao ActionScript [exemplo fácil só para um termo de comparação], com classes e outras características que não existem na linguagem que é <a href="http://en.wikipedia.org/wiki/Prototype-based_programming">prototype-based</a>. Venceu a turma conservadora, que defendia js se manter como estava.</p>
<p>Para terem uma idéia da confusão, hoje existe a especificação <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMA 262</a> versão 3 e versão 5, justamente porque a 4 ficou no meio dessa briga e <a href="http://www.ecma-international.org/publications/standards/Ecma-262-arch.htm">nunca chegou a existir</a>.</p>
<h2>Desculpas</h2>
<p>De 2006 pra cá algumas linguagens antigas como ruby e python influenciaram todas as comunidades de desenvolvedores com argumentos &#8211; dos quais concordo em parte &#8211; como expressividade, facilidade na leitura por humanos com menos ruído sintático em vez de apenas performance ou outra característica técnica que poderia muito bem ser trabalhada em um nível inferior (Como por exemplo, para cada linha que voce evita de escrever em Python, existem centenas em C que fazem o trabalho).</p>
<p>Primeiro argumento do uso de Coffeescript é justamente sobre ruído sintático do Javascript, mas inventaram uma SINTAXE NOVA que não é igual a Ruby e nem Python, mas há métodos e características de ambas para justificar seu uso. Ora bolas, porque não terem implementado um subset direto do Ruby?</p>
<p>Incluíram o <a href="http://my.safaribooksonline.com/book/programming/javascript/9781449399115/code-reuse-patterns/klass">Pattern Klass</a> como funcionalidade dessa linguagem sendo que Frameworks antigos como <a href="http://www.prototypejs.org/">Prototype</a> já implementavam isso.</p>
<p>Em Javascript você consegue <a href="http://en.wikipedia.org/wiki/Closure_(computer_science)">Closure</a>, <a href="http://en.wikipedia.org/wiki/Currying">Currying</a> e outras construções funcionais porque function é um cidadão de primeira classe na linguagem, consegue ter <a href="http://en.wikipedia.org/wiki/Mixin">Mixin</a> até mais fácil do que em Ruby porque além de dinâmico é de tipos fracos.</p>
<p>A justificativa de se usar Coffeescript por causa de sintaxe é a mesma de muitos que usam Groovy porque a &#8220;curva&#8221; de Java seria menor. Falácia grave. O problema de um desenvolvedor não aprender uma sintaxe porque é assim ou assado já demonstra em muito que ele não quer aprender as características da linguagem e vai continuar &#8220;programando em Java&#8221; usando Groovy.</p>
<p>Isso é muito comum, já passei por muito programador PHP programando em Ruby como PHP ou programador Java programando em javascript como Java.</p>
<p>Alguns entusiastas de Ruby defendem o uso porque lembraria a sintaxe que se sentem familiar e por ironia citam List Comprehensions, funcionalidade que existe no Python e não no Ruby. Como voce contorna isso no Ruby? Vamos parar com a covardia e sair da zona de conforto?</p>
<h2>Problemas</h2>
<p>Eu tenho um problema com linguagens intermediárias com Enhanced, mas vá lá, podemos viver com isso.</p>
<p>javascript tem muitos problemas, mas não é apenas sintaxe, precisamos normalizar todas as versões e especificações e atacar as fraquezas conhecidas, não sair criando pseudo-linguagem.</p>
<p><a href="http://en.wikipedia.org/wiki/List_comprehension">List Comprehensions</a> que já citamos, <a href="https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.7#Array_comprehensions">tem na versão 1.7</a> que o SpiderMonkey implementa (usado pelo Firefox) , mas o V8 (usado no Chrome, Safari e no node.js) não implementa, Rhino implementa e assim vai, uma confusão só. Os navegadores basicamente implementam a versão 1.5 que é equivalente a ECMA 262 &#8211; versão 3 que chamamos de ES3 (ECMA Standard 3), o V8 implementa a ES5 e mantém compatibilidade com 1.5. SpiderMonkey implementa a 1.5, mas não tem compatibilidade entre ES5 e 1.5, se quiser usar funcionalidades definidas na ES5 tem que usar versão 1.8. Confuso? É assim mesmo.</p>
<p>Se Javascript não se encaixa no seu projeto, não a use, é porque não serve mesmo, agora tentar mudar as características (como assincronismo, só para aproveitar o momento e bater em ferramentas como <a href="https://github.com/creationix/step">Step</a>) para se encaixar é querer usar a furadeira para pregar um prego.</p>
<p>Se você é obrigado, já que não existe outra alternativa na camada de apresentação em Webapps (RIP ActionScript <img src='http://www.milfont.org/tech/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  ), use os frameworks modernos que já implementam o Crossbrowser aceitável (nunca vai ser decente) e se beneficiam de sua idiossincrasia. Coffeescript só está em evidência por causa do node.js, já que há várias bibliotecas e até Frameworks implementados com isso, se a discussão aqui for navegador, nem invente.</p>
<p>Eu por exemplo sinto mais falta de incluírem o &#8220;<a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/noSuchMethod">method_missing</a>&#8221; na especificação do que interpolação de strings.</p>
<p>Ainda pra completar há uma rivalidade entre os defensores de Frameworks como entre o jQuery e Mootools que não sei de onde surgiu, mas nós humanos somos assim mesmo, brigamos por religião e por Framework.</p>
<p>Javascript é de tipos fracos, dinâmicos, sem classes, orientada a protótipos e assíncrono&#8230; aprenda a linguagem. Já basta de uma linguagem a mais para cada chilique de desenvolvedor por causa de um &#8220;{&#8221; ou &#8220;;&#8221;. Como alguém, que não lembro quem foi, escreveu no twitter dias desses: &#8220;Antigamente todo mundo queria seu próprio Framework, hoje todo mundo quer sua própria linguagem&#8221;.</p>
<p>Aproveite e vá me assistir no <a href="http://qconsp.com/palestra/christiano-milfont/combinando-programacao-funcional-e-o-o-em-javascript-de-forma-pratica">QCONSP 2011</a> que vou demonstrar algumas coisas bacanas de se fazer com Javascript e como a sintaxe não atrapalha <img src='http://www.milfont.org/tech/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/07/25/coffeescript/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Orientação a Objetos em Javascript</title>
		<link>http://www.milfont.org/tech/2011/06/26/orientacao-a-objetos-em-javascript/</link>
		<comments>http://www.milfont.org/tech/2011/06/26/orientacao-a-objetos-em-javascript/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 12:35:29 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1364</guid>
		<description><![CDATA[Post indexador sobre o que escrevi sobre OO em Javascript nesse blog apenas para guardar como referência rápida de consulta, estou revisando todos os posts para verificar o que falta escrever. Name Binding Herança no javascript Overloading e overriding no Javascript]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2011/06/26/orientacao-a-objetos-em-javascript/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Post indexador sobre o que escrevi sobre OO em <a href="http://www.milfont.org/tech/javascript/">Javascript</a> nesse blog apenas para guardar como referência rápida de consulta, estou revisando todos os posts para verificar o que falta escrever.</p>
<p><a href="http://www.milfont.org/tech/2007/10/01/early-vs-late-binding/">Name Binding</a></p>
<p><a href="http://www.milfont.org/tech/2008/01/05/heranca-no-javascript/">Herança no javascript</a></p>
<p><a href="http://www.milfont.org/tech/2007/10/01/overloading-e-overriding-no-javascript/">Overloading e overriding</a> no Javascript</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/06/26/orientacao-a-objetos-em-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Curso Javascript Fundamental</title>
		<link>http://www.milfont.org/tech/2011/06/17/curso-javascript-fundamental/</link>
		<comments>http://www.milfont.org/tech/2011/06/17/curso-javascript-fundamental/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 20:14:58 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[cursos]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1322</guid>
		<description><![CDATA[Primeiro curso da Milfont Consulting aberto ao público. Estamos traduzindo nossos cursos &#8220;In Company&#8221; para um formato que se beneficie do nosso modelo para empresas, mas que seja genérico o suficiente para abordar as principais necessidades que vivenciamos nos últimos 5 ou 6 anos no desenvolvimento de software como consultores. Nossos cursos seguiam o roteiro: [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2011/06/17/curso-javascript-fundamental/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p><a href="http://www.milfont.org/javascriptfundamental.html">Primeiro curso</a> da <a href="http://www.milfont.org/">Milfont Consulting</a> aberto ao público. Estamos traduzindo nossos cursos &#8220;In Company&#8221; para um formato que se beneficie do nosso modelo para empresas, mas que seja genérico o suficiente para abordar as principais necessidades que vivenciamos nos últimos 5 ou 6 anos no desenvolvimento de software como consultores.</p>
<p>Nossos cursos seguiam o roteiro:</p>
<ol>
<li>Visita ao Cliente para avaliação de suas necessidades em determinada tecnologia &#8211; como Javascript;</li>
<li>Preparação da documentação e códigos para os conceitos coletados com base naquelas necessidades;</li>
<li>Treinamento com ênfase em &#8220;Hands on&#8221; demonstrando os conceitos dentro de uma realidade conhecida e exigida.</li>
</ol>
<p>Esse formato é muito bom e conseguíamos atender nossos clientes com mais profundidade, geralmente esses treinamentos são dentro de um projeto maior de consultoria. O problema é o desgaste de um processo totalmente artesanal por mais que montássemos pacotes com certo grau de estabilidade de conteúdo e reaproveitássemos muitos cursos &#8211; como o de Hibernate, que praticamente não havia mudanças.</p>
<p>Agora estamos pegando esse modelo baseado em &#8220;mão na massa&#8221; com base no &#8220;Know How&#8221; adquirido após anos de treinamentos e não mais em necessidades de clientes. Só para se ter uma idéia, esse curso de Javascript eu ministro desde 2006/2007 quando criamos a <a href="http://www.triadworks.com.br/">TriadWorks</a>, empresa que fui sócio-fundador e agora parceira/irmã da Milfont Consulting.</p>
<h2>Sobre o Curso</h2>
<p>Nesse curso <a href="http://www.milfont.org/javascriptfundamental.html">Javascript Fundamental</a> eu vou abordar os principais conceitos de programação funcional e orientação a objetos ao estilo Javascript, ou seja, todas as idiossincrasias que você encontrará nas principais ferramentas construídas nessa linguagem. Quero preparar o aluno a ler e entender os fontes de Frameworks famosos como Extjs, bibliotecas dominantes como jQuery e construir suas próprias ferramentas/bibliotecas, seja para o client ou server-side.</p>
<p>Demonstrarei alguns problemas e Cases que desenvolvemos nesses últimos anos e explicarei os fundamentos da linguagem e dos paradigmas por meio desse código.</p>
<p><a href="http://www.amazon.com/gp/product/047022780X?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=047022780X"><img class="alignleft" title="Professional JavaScript for Web Developers" src="http://ecx.images-amazon.com/images/I/51oJS7pbW1L._SL160_.jpg" alt="" width="127" height="160" /></a></p>
<p>O <a href="http://www.milfont.org/tech/2010/10/25/recomendacao-de-livros-sobre-javascript/">livro</a> que adoto como base para esse curso é o fabuloso <a href="http://www.amazon.com/gp/product/047022780X?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=047022780X">Professional Javascript for Web Developers</a> do <a href="http://www.nczonline.net/">Nicholas Zakas</a> (não incluso no material do curso).</p>
<p>Existem vários bons livros, inclusive já os indiquei em posts passados, veja indicações: <a href="http://www.milfont.org/tech/2010/10/25/recomendacao-de-livros-sobre-javascript/">recente</a> e <a href="http://www.milfont.org/tech/2008/10/13/os-melhores-livros-de-javascript/">antiga</a>.</p>
<p>Existem alguns bons materias gratuitos que recomendo, como: <a href="http://dailyjs.com/2010/12/02/framework-review/">Como criar um Framework javascript</a>, <a href="http://eloquentjavascript.net/">Eloquent Javascript</a>, <a href="http://bonsaiden.github.com/JavaScript-Garden/">JavaScript Garden</a>, <a href="http://www.rebeccamurphey.com/jqfundamentals/">jQuery Fundamentals</a> (que apesar de ser sobre jQuery, cobre muito sobre javascript em si), <a href="http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/">Essential Javascript &amp; jQuery Design Patterns for Beginners</a> e o <a href="https://developer.mozilla.org/en/JavaScript/Guide">Guia</a> e a documentação de <a href="https://developer.mozilla.org/en/JavaScript/Reference">Referência</a> da Mozilla.</p>
<p>Somente com esse material gratuito e com esses livros você aprende Javascript e se torna um bom programador nessa linguagem, o que estamos vendendo é nosso Know How em situações que passamos e como esse material nos ajudou a solucionar e encontrarmos as melhores formas de construir um código limpo, claro e eficiente nessa linguagem. Estamos oferecendo um salto na abstração entre a teoria e a prática, aonde implementar e como usar aqueles conceitos, como por exemplo Closure e Currying, dentro do seu cotidiano.</p>
<p>O formato do curso é curto (16h), focado (direto em cases e necessidades) e baseado em mão na massa. Máximo de 6 alunos por turma para um melhor aproveitamento e acompanhamento individual.</p>
<p><a href="http://www.milfont.org/javascriptfundamental.html">Inscreva-se</a> na primeira turma enquanto há vagas. A quantidade mínima de pessoas para uma turma ser montada é <strong>UMA</strong>, que no caso para essa turma nasceu garantida, já tínhamos pessoal na fila.</p>
<h2>Sede</h2>
<p>Av. Desembargador Moreira 2020, sala 209. Edifício Trade Center, Bairro Aldeota, Fortaleza, CE, 60.170-002 Brazil - <a href="http://maps.google.com.br/maps/place?cid=12223296978609564719&amp;q=milfont+consulting&amp;hl=pt-BR&amp;ie=UTF8&amp;t=h&amp;z=14">mapa.</a></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="267" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="host=picasaweb.google.com&amp;hl=pt_BR&amp;feat=flashalbum&amp;RGB=0x000000&amp;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fcmilfont%2Falbumid%2F5619252809663245633%3Falt%3Drss%26kind%3Dphoto%26hl%3Dpt_BR" /><param name="src" value="https://picasaweb.google.com/s/c/bin/slideshow.swf" /><embed type="application/x-shockwave-flash" width="400" height="267" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" flashvars="host=picasaweb.google.com&amp;hl=pt_BR&amp;feat=flashalbum&amp;RGB=0x000000&amp;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fcmilfont%2Falbumid%2F5619252809663245633%3Falt%3Drss%26kind%3Dphoto%26hl%3Dpt_BR"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/06/17/curso-javascript-fundamental/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CearaJS &#8211; First commit&#8230; Lightning Talks!</title>
		<link>http://www.milfont.org/tech/2011/06/13/cearajs-first-commit-lightning-talks/</link>
		<comments>http://www.milfont.org/tech/2011/06/13/cearajs-first-commit-lightning-talks/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 11:23:53 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[braziljs]]></category>
		<category><![CDATA[cearajs]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1308</guid>
		<description><![CDATA[Criamos uma comunidade local com o propósito principal de unir todas as outras comunidades para discutirmos javascript, já que é uma linguagem presente para todos que desenvolvem na WEB, mesmo que seu Framework tente esconder de você. Realizamos o primeiro encontro com chamada para Lightning Talks e pretendemos manter esse formato, dá mais agilidade e [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2011/06/13/cearajs-first-commit-lightning-talks/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Criamos <a href="http://groups.google.com/group/cearajs">uma comunidade local</a> com o propósito principal de unir todas as outras comunidades para discutirmos javascript, já que é uma linguagem presente para todos que desenvolvem na WEB, mesmo que seu Framework tente esconder de você.</p>
<p>Realizamos o <a href="http://agendatech.com.br/eventos/tecnologia/2011/cearajs-first-commit-lightning-talks">primeiro encontro</a> com <a href="http://call4paperz.com/events/33">chamada para Lightning Talks</a> e pretendemos manter esse formato, dá mais agilidade e podemos ter mais pessoas apresentando o que estão fazendo.</p>
<p>Tivemos o Coffee Break da <a href="http://www.triadworks.com.br/">TriadWorks</a> e brindes da <a href="http://www.opera.com/">Opera</a> distribuídos para as pessoas que interagiam e faziam perguntas pertinentes. Os brindes da Opera eram bolinhas de Soccer com o logo.</p>
<p>Abaixo alguns materiais, vou atualizar com o restante conforme os palestrantes subam:</p>
<p><strong><a href="http://call4paperz.com/events/first-commit-lightning-talks/proposals/127">Testo meu jQuery sem navegador!</a></strong></p>
<div id="__ss_8288214" style="width: 425px;">
<p><strong><a title="I TDD my jQuery code without Browser" href="http://www.slideshare.net/cmilfont/i-tdd-my-jquery-code-without-browser">I TDD my jQuery code without Browser</a></strong></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/cmilfont">Milfont Consulting</a></div>
</div>
<p><strong><a href="http://call4paperz.com/events/first-commit-lightning-talks/proposals/126">Aplicações 100% JavaScript com CouchApp e SammyJS</a></strong></p>
<div id="__ss_8281354" style="width: 425px;">
<div style="width: 425px;">
<p><strong><a title="Criando aplicações JavaScript com CouchApp + Sammy.js" href="http://www.slideshare.net/henriquegogo/criando-aplicaes-javascript-com-couchapp-sammyjs">Criando aplicações JavaScript com CouchApp + Sammy.js</a></strong></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/henriquegogo">Henrique Gogó</a></div>
</div>
<p><strong><a href="http://call4paperz.com/events/first-commit-lightning-talks/proposals/133">Modelagem Orientada a Documentos com JavaScript</a></strong><br />
<a href="https://github.com/leonardoeloy/cjs-db">https://github.com/leonardoeloy/cjs-db</a>
</div>
<p><strong><a href="http://call4paperz.com/events/first-commit-lightning-talks/proposals/129">Não gosto de Spaghetti. E você?</a></strong><br />
<a href="https://github.com/hvitorino/CearaJs-Pub-Sub">https://github.com/hvitorino/CearaJs-Pub-Sub</a></p>
<h2>Fotos</h2>
<p>Quem tiver mais fotos, manda pra gente.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fcmilfont%2Fsets%2F72157626948119216%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fcmilfont%2Fsets%2F72157626948119216%2F&amp;set_id=72157626948119216&amp;jump_to=" /><param name="allowFullScreen" value="true" /><param name="src" value="http://www.flickr.com/apps/slideshow/show.swf?v=104087" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://www.flickr.com/apps/slideshow/show.swf?v=104087" allowfullscreen="true" flashvars="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fcmilfont%2Fsets%2F72157626948119216%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fcmilfont%2Fsets%2F72157626948119216%2F&amp;set_id=72157626948119216&amp;jump_to="></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/06/13/cearajs-first-commit-lightning-talks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eval is Evil 3</title>
		<link>http://www.milfont.org/tech/2011/06/12/eval-is-evil-3/</link>
		<comments>http://www.milfont.org/tech/2011/06/12/eval-is-evil-3/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 00:36:30 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1302</guid>
		<description><![CDATA[Continuando nossa saga de evitar Eval e conhecer melhor o Javascript, vou brincar com a seguinte situação: parsear um template html escrito com Expression Language da spec JSP. Imagina o seguinte trecho abaixo: &#60;c:if test="${sessionScope.cart.numberOfItems &#62; 0}"&#62;   ... &#60;/c:if&#62; É fácil montarmos um mapa com todas as expressões encontradas entre ${ e } e depois [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2011/06/12/eval-is-evil-3/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Continuando nossa saga de <a href="http://www.milfont.org/tech/2011/04/04/eval-is-evil-again/">evitar Eval</a> e conhecer melhor o Javascript, vou brincar com a seguinte situação: parsear um template html escrito com <a href="http://download.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html">Expression Language da spec JSP</a>.</p>
<p>Imagina o seguinte trecho abaixo:</p>
<pre>&lt;c:if test="${sessionScope.cart.numberOfItems &gt; 0}"&gt;
  ...
&lt;/c:if&gt;</pre>
<p>É fácil montarmos um mapa com todas as expressões encontradas entre <strong>${</strong> e <strong>}</strong> e depois chamar <strong>eval</strong> para processar, mas como quero evitar essa chamada, o que podemos fazer?</p>
<p>Encontramos na <a href="https://developer.mozilla.org/en/JavaScript/Reference">documentação de referência da Mozilla</a> a resposta, especificamente no objeto nativo <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function">Function</a>, onde podemos criar uma new Function passando seu corpo como uma string que será executada ao fazer a chamada dessa function. Montei abaixo um exemplo como funciona:</p>
<p><script src="https://gist.github.com/1022154.js?file=eval_is_evil_3.js"></script><br />
Caso não veja no seu Feedreader, <a href="https://gist.github.com/1022154">link do github</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/06/12/eval-is-evil-3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Compatibilidade dos navegadores com especificação javascript ECMA 262</title>
		<link>http://www.milfont.org/tech/2011/04/29/compatibilidade-dos-navegadores-com-especificacao-javascript-ecma-262/</link>
		<comments>http://www.milfont.org/tech/2011/04/29/compatibilidade-dos-navegadores-com-especificacao-javascript-ecma-262/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 14:01:23 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ECMAScript]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1243</guid>
		<description><![CDATA[Fiz um teste nesse momento em 4 navegadores que utilizo no dia-a-dia usando o projeto Sputnik do GoogleLabs para saber a aderencia à especificação ECMA 262. Fiz um teste sem compromisso e sem rigor acadêmico, apenas por curiosidade. Esse teste é interessante para sabermos que possíveis problemas irão acontecer por diferença de implementação do Javascript [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2011/04/29/compatibilidade-dos-navegadores-com-especificacao-javascript-ecma-262/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Fiz um teste nesse momento em 4 navegadores que utilizo no dia-a-dia usando o projeto <a href="http://sputnik.googlelabs.com">Sputnik</a> do GoogleLabs para saber a aderencia à especificação <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMA 262</a>. Fiz um teste sem compromisso e sem rigor acadêmico, apenas por curiosidade.</p>
<p>Esse teste é interessante para sabermos que possíveis problemas irão acontecer por diferença de implementação do Javascript por cada engine.</p>
<h2>Firefox</h2>
<table id="stats" style="height: 56px;" width="169">
<tbody>
<tr>
<td>Total:</td>
<td id="total">5246</td>
</tr>
<tr>
<td>Succeeded:</td>
<td id="succeeded">4982</td>
</tr>
<tr>
<td>Failed:</td>
<td id="failed">264</td>
</tr>
</tbody>
</table>
<p>Versão 3.6.16</p>
<h2>Opera</h2>
<table id="stats" style="height: 56px;" width="169">
<tbody>
<tr>
<td>Total:</td>
<td id="total">5246</td>
</tr>
<tr>
<td>Succeeded:</td>
<td id="succeeded">5172</td>
</tr>
<tr>
<td>Failed:</td>
<td id="failed">74</td>
</tr>
</tbody>
</table>
<p>Versão 11.01 &#8211; Build 1190</p>
<h2>Chrome</h2>
<table id="stats" style="height: 56px;" width="169">
<tbody>
<tr>
<td>Total:</td>
<td id="total">5246</td>
</tr>
<tr>
<td>Succeeded:</td>
<td id="succeeded">5110</td>
</tr>
<tr>
<td>Failed:</td>
<td id="failed">136</td>
</tr>
</tbody>
</table>
<p>Versão 11.0.696.57</p>
<h2>Safari</h2>
<table id="stats" style="height: 56px;" width="169">
<tbody>
<tr>
<td>Total:</td>
<td id="total">5246</td>
</tr>
<tr>
<td>Succeeded:</td>
<td id="succeeded">5083</td>
</tr>
<tr>
<td>Failed:</td>
<td id="failed">163</td>
</tr>
</tbody>
</table>
<p>Versão 5.0.5 (6533.21.1)</p>
<h2>Voltei&#8230;</h2>
<p>O interessante é observar que o Opera é o mais aderente, o Firefox o mais lento [travou], o Chrome o mais rápido. Para não ser injusto com o Firefox, eu ainda matei o processo, abre uma instância novinha e mesmo assim ele travou na execução, abriu aquela janelinha marota pedindo para encerrar o script.</p>
<div class="wp-caption alignnone" style="width: 410px"><a href="http://www.milfont.org/tech/wp-content/upload/chrome.png"><img title="teste" src="http://www.milfont.org/tech/wp-content/upload/chrome.png" alt="" width="400" height="200" /></a><p class="wp-caption-text">Sequencia no sentido horário: Opera, Firefox, Safari e Chrome.</p></div>
<p>A velocidade e economia do Chrome é realmente impressionante, observe os processos:</p>
<div class="wp-caption alignnone" style="width: 410px"><a href="http://www.milfont.org/tech/wp-content/upload/processos.png"><img title="processos" src="http://www.milfont.org/tech/wp-content/upload/processos.png" alt="" width="400" height="200" /></a><p class="wp-caption-text">Sequencia no sentido horário: Opera, Firefox, Safari e Chrome.</p></div>
<p>Dados da minha máquina:</p>
<p><a href="http://www.milfont.org/tech/wp-content/upload/mac.png"><img title="mac" src="http://www.milfont.org/tech/wp-content/upload/mac.png" alt="" width="331" height="337" /></a></p>
<h2>[update]</h2>
<p>Como eu sei que alguém vai me acusar de parcial, etc e tal, eu resolvi abrir uma VM aqui com XP e IE8 para não dizerem que não falei de flores &#8230; olha só:</p>
<p><a href="http://www.milfont.org/tech/wp-content/upload/win-ie.png"><img class="alignnone" title="WinXp com IE8" src="http://www.milfont.org/tech/wp-content/upload/win-ie.png" alt="" width="400" height="300" /></a></p>
<p>Ok, é má vontade&#8230; Sério?</p>
<p><a href="http://www.milfont.org/tech/wp-content/upload/ietravou.png"><img class="alignnone" title="IE8 Travou" src="http://www.milfont.org/tech/wp-content/upload/ietravou.png" alt="" width="400" height="300" /></a></p>
<p>Uns 10 minutos depois e sem voltar [continua travado], já basta esses dados para mostrar que o IE8 é uma bo$ta em relação a aderência [imagina o 6]:</p>
<p><a href="http://www.milfont.org/tech/wp-content/upload/valeapena.png"><img class="alignnone" title="Isso vale a pena?" src="http://www.milfont.org/tech/wp-content/upload/valeapena.png" alt="" width="400" height="65" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/04/29/compatibilidade-dos-navegadores-com-especificacao-javascript-ecma-262/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Palestra TDD com Javascript na FA7</title>
		<link>http://www.milfont.org/tech/2011/04/10/palestra-tdd-com-javascript-na-fa7/</link>
		<comments>http://www.milfont.org/tech/2011/04/10/palestra-tdd-com-javascript-na-fa7/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 22:33:23 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Metodologia]]></category>
		<category><![CDATA[Métodos Ágeis]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[Test Driven]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[test first]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1223</guid>
		<description><![CDATA[Amanhã, 11/04/2011, palestrarei no evento &#8220;8.ª Jornada CETI &#8211; Cursos de Extensão em Tecnologia da Informação&#8221; na FA7, sede do BrazilJS. Titulo: Test Driven Development com Javascript Resumo Original:  Entenderemos que só TDD é o caminho e a luz da escrita de um bom software, será demonstrado como até em plataformas difíceis se pode praticar [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2011/04/10/palestra-tdd-com-javascript-na-fa7/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Amanhã, 11/04/2011, palestrarei no evento &#8220;<a href="http://www.fa7.edu.br/jornadaceti/2011/">8.ª Jornada CETI &#8211; Cursos de Extensão em Tecnologia da Informação</a>&#8221; na <a href="http://www.fa7.edu.br/">FA7</a>, sede do <a href="http://braziljs.com.br/2011/#!/home">BrazilJS</a>.</p>
<p><strong>Titulo</strong>: Test Driven Development com Javascript<br />
<strong>Resumo Original</strong>:  Entenderemos que só TDD é o caminho e a luz da escrita de um  bom software, será demonstrado como até em plataformas difíceis se pode  praticar essa metodologia, admitir que testes em TDD é apenas um  benefício e não a causa, além de códigos e mais códigos.</p>
<p>Ah, será duas vezes:</p>
<h4>Manhã</h4>
<p><strong>Data:</strong> 11/04/2010, segunda-feira<br />
<strong>Horário:</strong> 07h30<br />
<strong>Local:</strong> Auditório do Curso de Direito</p>
<h4>Noite</h4>
<p><strong>Data:</strong> 11/04/2010, segunda-feira<br />
<strong>Horário:</strong> 19h<br />
<strong>Local:</strong> Auditório do Curso de Direito</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/04/10/palestra-tdd-com-javascript-na-fa7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problema de Entity Body incluso em HTTP DELETE Request</title>
		<link>http://www.milfont.org/tech/2011/04/04/problema-de-entity-body-incluso-em-http-delete-request/</link>
		<comments>http://www.milfont.org/tech/2011/04/04/problema-de-entity-body-incluso-em-http-delete-request/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 14:34:26 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Ext]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[XMLHttpRequest]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[HTTP]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1218</guid>
		<description><![CDATA[Problema que detectei em algumas applicações que estamos desenvolvendo com Extjs+Jquery: Na máquina de entrega o request do tipo DELETE funcionava tranquilamente, na máquina de produção hospedada no Rackspace quebrava. Como a máquina de entrega estava dentro da nossa rede, suspeitei logo da conexão, firewall e essas coisas. O @rponte me deu a dica desse [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2011/04/04/problema-de-entity-body-incluso-em-http-delete-request/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Problema que detectei em algumas applicações que estamos desenvolvendo com Extjs+Jquery: Na máquina de entrega o request do tipo DELETE funcionava tranquilamente, na máquina de produção hospedada no <a href="http://www.rackspace.com/index.php">Rackspace</a> quebrava. Como a máquina de entrega estava dentro da nossa rede, suspeitei logo da conexão, firewall e essas coisas.</p>
<p>O <a href="http://twitter.com/#!/rponte">@rponte</a> me deu a <a href="http://stackoverflow.com/questions/299628/is-an-entity-body-allowed-for-an-http-delete-request">dica desse post</a> que ele encontrou com o mesmo tipo de problema. Nunca tinha percebido que a <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html">spec HTTP nem proibe e nem recomenda</a> corpo em DELETE. Não faz muito sentido enviar corpo realmente em DELETE, mas até aí tudo bem.</p>
<p>Para completar, o Extjs já previa esse problema e o <a href="http://dev.sencha.com/deploy/dev/docs/?class=Ext.data.JsonWriter">JsonWriter</a> possui uma propriedade chamada &#8220;encodeDelete&#8221; para você explicitamente definir que não quer corpo em DELETE, por default já vem assim.</p>
<p>No console do firebug eu utilizava o <a href="http://api.jquery.com/jQuery.ajax/">$.ajax</a> e o <a href="http://dev.sencha.com/deploy/dev/docs/?class=Ext.Ajax">Ext.Ajax</a> diretamente com a mesma url para enviar DELETE e funcionava, mas na aplicação não funcionava. Conversando com o pessoal da rede eles me disseram que trocaram o firewall recentemente e observando o log a chamada sequer passava por lá, ou seja, provavelmente ele já rejeita qualquer conexão DELETE com body.</p>
<p>Fui analizar o código do Extjs e ele enviava um body, a diferença é que era vazio, mas ia. Fiz um hack para destruir qualquer parametro quando a conexão fosse para o DELETE e consertou, como pode ver no código abaixo:</p>
<p><script src="https://gist.github.com/885190.js"> </script><br />
<a href="https://gist.github.com/raw/885190/c742a8aa8c1b7d1afce4a8a17ea888f22b9171fb/hack.httpproxy.extjs.3x.js">Link caso não consiga ver no seu reader.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/04/04/problema-de-entity-body-incluso-em-http-delete-request/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

