<?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/tag/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>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>QCON São Paulo 2011</title>
		<link>http://www.milfont.org/tech/2011/09/16/qcon-sao-paulo-2011/</link>
		<comments>http://www.milfont.org/tech/2011/09/16/qcon-sao-paulo-2011/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 12:15:29 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[javace]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[qconsp]]></category>
		<category><![CDATA[qconsp2011]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1436</guid>
		<description><![CDATA[Diferente do ano passado, eu não consegui assistir muitas palestras e ignorei todos os keynotes após o carinha do Twitter. O Evento Começamos o sábado com a abertura do Paulo Silveira, Leonardo Galvão e Floyd Marinescu [os 3 não precisam de apresentação]. Logo em seguida veio a palestra morna do Jim Webber que tentou ser &#8220;engraçaralho&#8221;, mas &#8230; sou [...]]]></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/16/qcon-sao-paulo-2011/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Diferente do <a href="http://www.milfont.org/tech/2010/09/16/qconsp-2010-eu-fui/">ano passado</a>, eu não consegui assistir muitas palestras e ignorei todos os keynotes após o carinha do Twitter.</p>
<h2>O Evento</h2>
<p>Começamos o sábado com a abertura do <a href="https://twitter.com/#!/paulo_caelum">Paulo Silveira</a>, <a href="http://www.infoq.com/br/author/Leonardo-Galv%C3%A3o">Leonardo Galvão</a> e <a href="http://www.floydmarinescu.com/">Floyd Marinescu</a> [os 3 não precisam de apresentação].</p>
<p>Logo em seguida veio a palestra morna do <a href="http://qconsp.com/palestra/jim-webber/aprendizados-de-grandes-sistemas-http-centric">Jim Webber</a> que tentou ser &#8220;engraçaralho&#8221;, mas &#8230; sou cearense, entendo um pouco de humor. Nada de novo e sinceramente, falar de Rest, WebServices, SOA, etc é que nem falar de Agile hoje em dia, precisa muita criatividade para não ficar enfadonho.</p>
<p>O <a href="http://qconsp.com/palestra/sergio-lopes/por-uma-web-mais-rapida-tecnicas-de-otimizacao-de-sites">Sérgio Lopes</a> apresentou um Keynote que eu já sabia tudo decorado, assunto batidão e&#8230; surpreendeu. Sério, apesar do assunto ser algo que eu já dominava e até já escrevi algumas coisas <a href="http://www.milfont.org/tech/2007/10/10/otimizando-wordpress-com-yslow/">no blog há muito tempo</a>, ele conseguiu pegar um enfoque &#8211; que foi analisar os sites de todos os inscritos &#8211; e dissecar em estatísticas na apresentação. Ou seja, não foi apenas uma listinha de boas práticas e TODOs para se fazer no seu site ou WebApp, ele encaixou as estatísticas e provou para todos &#8220;`a quente&#8221; o mal que isso provoca e quais prejuízos podem ocorrer, além disso <a href="http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/">publicou no blog da Caelum um dos posts mais completos que já li</a>. Melhor do evento.</p>
<p>Aí entrou o cara do Twitter&#8230; saí com menos de 5 minutos. Não deu, o cara estava totalmente nem aí e tamanha apatia me deixou sem vontade alguma de assistir aquilo. Depois desse cara eu resolvi não assistir mais nenhum Keynote por puro preconceito mesmo, hoje em dia os Kyenotes em todos os eventos é a parte mais chata, experiência do AgileBrazil também. Provavelmente perdi palestras fantásticas, inclusive ouvi falarem muito bem do cara da NASA.</p>
<p>Minha sugestão é acabar com esse lance de Keynote nos eventos, isso é muito século 20.</p>
<p>Na parte da tarde do sábado e domingo eu assisti algumas palestras escolhidas a dedo, mas esse lance de trilhas me deixa doido, nunca consigo ficar parado.</p>
<p>No sábado eu fiquei pulando de palestra em palestra e assistindo um pedaço de cada. Vi um pouco do <a href="http://qconsp.com/palestrante/vinicius-quaiato">Vinicius Quaiato</a>, outro pedaço do  <a href="http://qconsp.com/palestrante/guilherme-silveira">Guilherme Silveira</a> e um pedaço dos guys <a href="http://qconsp.com/palestrante/alberto-souza">Alberto Souza</a> e <a href="http://qconsp.com/palestrante/lucas-cavalcanti">Lucas Cavalcanti</a>, enfim, maluquice. Assisti na íntegra a palestra <a href="http://qconsp.com/palestra/mauricio-linhares/ios-e-sincronizacao-de-dados">iOS e sincronização de dados</a> do <a href="http://qconsp.com/palestrante/mauricio-linhares">Mauricio Linhares</a>. Tentei assistir ao mesmo tempo as palestra do <a href="http://qconsp.com/palestrante/rodrigo-kumpera">Rodrigo Kumpera</a>, <a href="http://qconsp.com/palestrante/raphael-lacerda">Raphael Lacerda</a> e do <a href="http://qconsp.com/palestrante/renato-willi">Renato Willi</a>, aí pirei e desci para conversar com a galera. Tudo que assisti estava muito bom o que me deixa sempre apreensivo de perder alguma coisa, acabo perdendo tudo.</p>
<p>Depois assisti todos os Lightning Talks do <strong><a href="http://qconsp.com/palestrante/ricardo-valeriano">Host: Ricardo Valeriano</a>.</strong></p>
<p>Como essa estratégia de tentar assistir parte das palestras tinha sido loucura no sábado, no domingo eu me concentrei e assiti do <a href="http://qconsp.com/palestrante/vinicius-baggio">Vinícius Baggio</a>, <a href="http://qconsp.com/palestrante/emerson-macedo">Emerson Macedo</a> e quase totalmente a do <a href="http://qconsp.com/palestrante/cristiano-sanchez">Cristiano Sanchez</a> e <a href="http://qconsp.com/palestrante/wladimir-domingues">Wladimir Domingues</a>. Todas fantásticas e sempre com alguma coisa que te deixa com aquela curiosidade de googlar depois de assistir. Um pequeno destaque para o Vinícius Baggio que tocou num assunto muito importante na comunidade ruby, essa história de que não faz uma boa prática ou não se preocupa com qualidade do código porque isso é coisa de Java ou whatever.</p>
<p>Primeiro período da tarde eu passei terminando meus slides e apresentando minha palestra <img src='http://www.milfont.org/tech/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Minhas Palestras</h2>
<p>No <a href="http://qconsp.com/schedule/sabado">sábado</a> eu apresentei um Lightning Talk: &#8220;Engine de template em Javascript com HTML Sprites&#8221;.</p>
<div id="__ss_9243650" style="width: 425px;"><strong><a title="Engine de template em Javascript com HTML Sprites" href="http://www.slideshare.net/cmilfont/engine-de-template-em-javascript-com-html-sprites" target="_blank">Engine de template em Javascript com HTML Sprites</a></strong><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>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/cmilfont" target="_blank">Milfont Consulting</a></div>
</div>
<p>No domingo eu apresentei a palestra: &#8220;Combinando OO e Funcional em javascript de forma prática&#8221;.</p>
<div id="__ss_9245234" style="width: 425px;"><strong><a title="Combinando OO e Funcional em javascript de forma prática" href="http://www.slideshare.net/cmilfont/combinando-oo-e-funcional-em-javascript-de-forma-prtica" target="_blank">Combinando OO e Funcional em javascript de forma prática</a></strong><br />
<iframe src="http://www.slideshare.net/slideshow/embed_code/9245234" width="400" height="337" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe><br/><br/></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/cmilfont" target="_blank">Milfont Consulting</a></div>
</div>
<p><a title="Untitled by Maurício Linhares, on Flickr" href="http://www.flickr.com/photos/mauriciolinhares/6144917649/"><img src="http://farm7.static.flickr.com/6207/6144917649_51ab8ce8ac.jpg" alt="" width="500" height="333" /></a><br />
Foto engorda a gente, né?</p>
<h2>Networking</h2>
<p>É muito importante para a comunidade cearense participar de grandes conferências fora do nosso estado, acabar com essa barreira geográfica e colher a sabedoria dessa galerinha lá na origem. Esse ano conseguimos levar em torno de 40 pessoas pela <a href="http://www.javace.org/caravanas-javace/caravana-javace-qcon-2011-so-paulo/">#caravanajavace</a> e foi fantástico.</p>
<p><a title="Untitled by Maurício Linhares, on Flickr" href="http://www.flickr.com/photos/mauriciolinhares/6145674412/"><img src="http://farm7.static.flickr.com/6089/6145674412_d8bd5bc29b.jpg" alt="" width="500" height="333" /></a></p>
<p>Não vou citar o nome de nenhum amigo que reencontrei ou conheci &#8220;ao vivo&#8221; porque não vai caber todo mundo, mas a experiência é sempre indescritível.</p>
<h2>Visita a Empresas</h2>
<p>Eu me programei para visitar algumas empresas e conhecer o ambiente de vários amigos e pessoas que admiro, mas infelizmente a correria de SP não nos deixa otimizar o tempo, só consegui dar uma passada na sexta de manhã pela Caelum e um pulo na manhã da segunda na Concrete Solutions &#8211; SP. Abaixo um vídeo que o Luca Bastos gravou na Concrete.<br />
<div class="iframe-wrapper">
  <iframe src="http://player.vimeo.com/video/28998439?title=0&amp;byline=0&amp;portrait=0" frameborder="0" style="height:224px;width:398px;">Please upgrade your browser</iframe>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/09/16/qcon-sao-paulo-2011/feed/</wfw:commentRss>
		<slash:comments>7</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>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>
		<item>
		<title>Eval is Evil Again</title>
		<link>http://www.milfont.org/tech/2011/04/04/eval-is-evil-again/</link>
		<comments>http://www.milfont.org/tech/2011/04/04/eval-is-evil-again/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 13:36:18 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1213</guid>
		<description><![CDATA[Já escrevi sobre &#8220;Eval is Evil&#8221; há um tempo, mas é sempre bom lembrar. Meu problema com Eval no js é mais de hábito, basta um eval maroto no meio do código para daqui a pouco você travar o Fofox com tanta chamada. Uma forma simples de evitar Eval é usar o JSON.parse nativo ou [...]]]></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/eval-is-evil-again/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Já escrevi sobre &#8220;<a href="http://www.milfont.org/tech/2007/10/02/eval-is-evil/">Eval is Evil</a>&#8221; há um tempo, mas é sempre bom lembrar. Meu problema com Eval no js é mais de hábito, basta um eval maroto no meio do código para daqui a pouco você travar o Fofox com tanta chamada.</p>
<p>Uma forma simples de evitar Eval é usar o JSON.parse nativo ou com lib, mas em algumas situações isso não é possível. Basta lembrar da <a href="http://www.milfont.org/tech/2007/11/04/o-que-e-json/">spec de js</a> que define:</p>
<p><cite>“An ECMAScript object is an unordered collection of properties each with zero or more attributes…” </cite></p>
<p>Essa coleção funciona como um Array, portanto basta pegar a propriedade pelo index nessa coleção e executar a operação necessária como no exemplo abaixo:</p>
<p><script src="https://gist.github.com/901629.js?file=eval_is_evil.js"></script><br />
<a href="https://gist.github.com/raw/901629/f2598650f6993d1d4f09f92d893a4c4ed9b7aefe/eval_is_evil.js">Link caso não consiga ver no seu reader.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/04/04/eval-is-evil-again/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

