<?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>Zona J &#187; jquery</title>
	<atom:link href="http://www.zonaj.org/category/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zonaj.org</link>
	<description>Zona Java - Um blog português sobre java.</description>
	<lastBuildDate>Tue, 21 Sep 2010 23:49:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Javascript: 5 razões para usar e abusar</title>
		<link>http://www.zonaj.org/2008/03/04/javascript-e-assim-tao-mau/</link>
		<comments>http://www.zonaj.org/2008/03/04/javascript-e-assim-tao-mau/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 08:00:35 +0000</pubDate>
		<dc:creator>Ruben Badaró</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=81</guid>
		<description><![CDATA[Numa palavra: não. Esta conversa já me surgiu em diversas ocasiões e voltou a despontar numa thread na mailing list do PTJUG, e confesso que tenho alguma dificuldade em compreender a enorme resistência que imensos programadores apresentam em aprender e utilizar javascript. Isto é, baterem código mesmo em javascript sem usar frameworks que gerem o [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Numa palavra: não.</p>
<p>Esta conversa já me surgiu em diversas ocasiões e voltou a despontar numa thread na mailing list do PTJUG, e confesso que tenho alguma dificuldade em compreender a enorme resistência que imensos programadores apresentam em aprender e utilizar javascript. Isto é, baterem código mesmo em javascript sem usar frameworks que gerem o código todo &#8211; e.g. GWT, ou helpers de php, ruby, etc. -, mas usando obviamente bibliotecas como o prototype, jquery, etc. </p>
<p>Javascript é uma linguagem dinâmica, <em>weakly typed</em> e prototipada. Logo aqui, há diferenças para as linguagens que a maioria usa: C#, Java (<em>statically</em> e <em>strongly typed</em>) e python (<em>dynamically</em> mas <em>strongly typed</em>). O modelo de prototipagem é um pouco diferente do modelo de classes para definição de objectos, por isso percebo que possa introduzir confusão ou pelo menos dar origem a um novo processo de aprendizagem.</p>
<p>Mas não é assim tão complicado como isso&#8230; </p>
<h3>Razões para usar javascript directamente, não ter medo e assumi-lo com orgulho</h3>
<ol>
<li><strong>Desenvolvimento web = (X)HTML + CSS + Javascript + linguagem_server_side</strong></li>
<p>	Quer sejamos programadores java ou de uma outra tecnologia web, a probabilidade de termos de usar ou gerar html, css e javascript é muito elevada. Podemos inclusivamente usar geradores mas como facilitadores e não por sermos incapazes de produzir código de qualidade numa linguagem dinâmica ou, pelo menos, compreender o código que estamos a gerar. Devemos poder mudar de linguagem e continuar a dominar a parte de interface web, apenas tendo de aprender conceitos da outra linguagem/plataforma. </p>
<li><strong>jsFUD</strong></li>
<p>	Durante muito tempo, javascript foi muito pouco estudado e visto como uma linguagem de scripting básica que permitia escrever umas linhas de código. Não havia propriamente estruturação de código e muita gente entende que programar javascript é isso. É um pouco como aquelas aplicações java de alunos de primeiro ano que metem 2000 linhas de código num só ficheiro ao monte.<br />
Hoje em dia javascript não é isso, é uma linguagem madura, os problemas de interoperabilidade entre browsers são mitigados com as novas bibliotecas, estão a ser preparadas <a href="http://www.mozilla.org/projects/tamarin/">virtual machines</a> (compilação JIT incluída) que melhorarão imenso a performance de código no browser, há uma <a href="http://wiki.ecmascript.org/doku.php?id=proposals:proposals">proposta de uma nova versão</a> da linguagem (<a href="http://www.ecmascript.org/es4/spec/overview.pdf">resumo da nova especificação</a>) com possibilidades de verificação de tipos estática e outras features que fazem dela uma linguagem muito mais parecida com algo tipo java (ActionScript é a coisa mais parecida actualmente).</p>
<li><strong>Javascript não é só web</strong></li>
<p>	Nos últimos meses tenho desenvolvido aplicações com a suite de BPM Teamworks da Lombardi que utiliza javascript como linguagem de programação para as actividades dos BPMs. A utilização de javascript nestes moldes ou, melhor ainda, como linguagem para desenvolver plugins ou algo semelhante para aplicações, tirando partido das suas propriedades dinâmicas é altamente refrescante. Basta usar os jars que a Mozilla fornece com a implementação do <a href="http://www.mozilla.org/rhino/">projecto Rhino</a>.</p>
<li><strong>JSON</strong></li>
<p>	Poder estar a programar e definir as minhas estruturas de dados em formato JSON é magnífico. É menos verboso, simples e escrevo muito menos new&#8217;s.</p>
<li><strong>Abrir horizontes</strong></li>
<p>	<em>Last but not least</em>, não devemos ter receio de linguagens dinâmicas. Um programador java tem um trabalho confortável e laborioso: estamos protegidos com verificações estáticas em tempo de compilação, <em>checked exceptions</em> e outras demais coisas o que nos dá segurança e permite apanhar erros cedo; por outro lado, tudo isto nos dá mais trabalho sem muitas vezes nos garantir qualidade do software (para isso preferiria ter contratos estritos definidos entre os componentes com verificações em tempo de compilação e runtime, o que seria demais para a maioria nos sistemas).<br />
Trata-se pois, de uma questão de encontrar a chave de fendas que funcione melhor com o parafuso. Sejam linguagens dinâmicas ou não, o que interessa é a que produza melhor resultado final e isso pode nem sequer depender da linguagem mas de outros factores externos como a equipa, o tipo de requisitos, etc.</p>
</ol>
<p>Em termos de resumo, coisas como o GWT são excelentes paradigmas mas não se deve perder de vista o que se passa debaixo do capô. Experimentem desenvolver uma aplicação em javascript para testar o poder da linguagem. Repito, uma aplicação, não um bloco de script.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2008/03/04/javascript-e-assim-tao-mau/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Podcasts para programadores java</title>
		<link>http://www.zonaj.org/2008/01/31/podcasts-para-programadores-java/</link>
		<comments>http://www.zonaj.org/2008/01/31/podcasts-para-programadores-java/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 18:34:42 +0000</pubDate>
		<dc:creator>Ruben Badaró</dc:creator>
				<category><![CDATA[geral]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[podcasts]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=76</guid>
		<description><![CDATA[Eu sempre tive alguma dificuldade em encontrar podcasts decentes relacionados com a minha área. O único que realmente é conhecido é o The Java Posse e penso que muita gente já o conhecerá. Eles têm também uma lista de discussão no google groups onde falam de alguns temas interessantes. Sobre java especificamente, há poucos mais, [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Eu sempre tive alguma dificuldade em encontrar podcasts decentes relacionados com a minha área. O único que realmente é conhecido é o <a href="http://www.javaposse.com/">The Java Posse</a> e penso que muita gente já o conhecerá. Eles têm também uma <a href="http://groups.google.com/group/javaposse">lista de discussão no google groups</a> onde falam de alguns temas interessantes.</p>
<p>Sobre java especificamente, há poucos mais, que tenha encontrado. Mas no grupo do Java Posse tiveram um thread sobre podcasts e encontrei uns quantos interessantes que tenho ouvido e posso partilhar:</p>
<p><strong><a href="http://www.se-radio.net/rss">Software Engineering Radio</a></strong></p>
<p>Temas diversos com uma aproximação por vezes académica, actuais e com convidados de renome também. Frequência semanal. Altamente aconselhado. </p>
<p><strong><a href="http://feeds.feedburner.com/DrunkAndRetiredcomPodcast">Drunk and Retired</a></strong></p>
<p>Ambiente muito relaxado e com algum sentido de humor. Temas bastante actuais, fala-se sobre coisas como java, ruby, jquery, etc. Periocidade mais ou menos semanal.</p>
<p><strong><a href="http://leoville.tv/podcasts/floss.xml">FLOSS Weekly</a></strong></p>
<p>Orientado a open-source em geral, pouco ou nada falam sobre java mas no nosso mundo não podemos estar sempre a olhar só para o nosso umbigo &#8211; também temos de olhar para o dos outros.<br />
É cena para pessoal que não quer propriamente saber de IDEs e gosta mesmo é do vim ou do emacs, daquele pessoal que usa só roupa preta, barba e ouve metal <img src='http://www.zonaj.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ás vezes tem convidados interessantes (já lá teve o criador da wikipedia, do php, do python, etc.) mas consegue ser sempre interessante.</p>
<p>E poucos mais conheço, agradecem-se sugestões!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2008/01/31/podcasts-para-programadores-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BreakDance na ZonaJ</title>
		<link>http://www.zonaj.org/2007/05/06/breakdance/</link>
		<comments>http://www.zonaj.org/2007/05/06/breakdance/#comments</comments>
		<pubDate>Sun, 06 May 2007 22:54:25 +0000</pubDate>
		<dc:creator>Ricardo Antunes</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=33</guid>
		<description><![CDATA[Num blog em que o texto das várias entradas tende a ser extenso (como este), a página principal começa rapidamente a ter um comprimento considerável. Quando se pretende consultar uma entrada mais antiga só temos duas hipóteses: seguimos o link permanente para a entrada (caixa &#8216;Posts Recentes&#8217;) e depois fazemos &#8216;back&#8217; no browser; damos ao [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Num blog em que o texto das várias entradas tende a ser extenso (como este), a página principal começa rapidamente a ter um comprimento considerável.<br />
Quando se pretende consultar uma entrada mais antiga só temos duas hipóteses:      </p>
<ul>
<li>seguimos o link permanente para a entrada (caixa &#8216;Posts Recentes&#8217;) e depois fazemos &#8216;back&#8217; no browser;</li>
<li>damos ao dedo a fazer scroll na página até que a entrada fique visível.</li>
</ul>
<p>Uma forma interessante de resolver este problema seria ter uma opção de <em>toggle</em> do texto das entradas, ou seja, ter uma opção para mostrar ou esconder o texto dos posts por escolha do utilizador.</p>
<p>Estava a matutar sobre isto enquanto admirava os <a href="http://www.zonaj.org/?p=28">tons campestres</a> desta página  e pensei que não era má ideia pôr a solução em prática. </p>
<p>Um requisito importante é que o teria de fazer sem alterar efectivamente a página (só para não estar a  chatear o Administrador do blog durante o fim-de-semana <img src='http://www.zonaj.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>Outro é que o código teria de ser suficiente pequeno para poder ser postado aqui.</p>
<p>Era definitivamente um bom desafio para por à prova o <a href="http://jquery.com">jQuery</a>.</p>
<p>Precisava de quatro operações para concretizar as alterações:</p>
<ol>
<li>esconder inicialmente o texto das entradas e os links para tags e comentários mas não o titulo ou a informação dos autores;</li>
<li>acrescentar à frente do nome do autor um link para permitir mostrar ou esconder o texto;</li>
<li>associar ao evento <em>click</em> do link uma função para concretizar a opção do utilizador;</li>
<li>desenvolver a função;</li>
</ol>
<p>Usei o <a href="http://www.getfirebug.com/">Firebug</a> para analisar a estrutura do DOM da página.<br />
Cada entrada tem uma estrutura fixa: </p>
<ol>
<li>um <code>&lt;h2&gt;</code> com o link para o titulo;</li>
<li>um <code>&lt;h4&gt;</code> com a data do post e a identificação do autor;</li>
<li>um <code>&lt;div&gt;</code> com a class &#8216;entry&#8217; com o texto;</li>
<li>um <code>&lt;p&gt;</code> com a class &#8216;tagged&#8217; com links para as tags e comentários</li>
</ol>
<p>Portanto, para concretizar a primeira operação só precisava de esconder os elementos com as classes &#8216;entry&#8217; e &#8216;tagged&#8217; que em jQuery se traduz como:<br />
<code class="prettyprint">$('.entry, .tagged').hide();</code></p>
<p>Para a concretizar segunda operação acrescentei um link à frente do nome do autor, ou seja, de todos os <code>&lt;h4&gt;</code>s precedidos por <code>&lt;h2&gt;</code>s, ou em jQuery:<br />
<code class="prettyprint">$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');</code></p>
<p>Para a terceira opção e visto que associei os links criados à class <em>entryTogger</em>, basta associar uma função ao evento <em>onclick</em> de todos os elementos com esta classe ou em jQuery:<br />
<code class="prettyprint">$('.entryToggler').click(toggleEntry);</code></p>
<p>Falta só desenvolver a função <em>toggleEntry</em>.</p>
<p>Uma vez que esta função tem acesso ao elemento <em>anchor</em>  seleccionado pelo utilizador (<code>this</code>), podia usá-lo como referência para:</p>
<ol>
<li>verificar o estado da entrada a partir do texto:<br />
<code class="prettyprint">var isHidden = $(this).text().search('Mostrar')!=-1;</code></li>
<li>seleccionar os elementos correspondentes ao texto e aos links para as tags e comentários:<br />
<code class="prettyprint">var x=$(this).parent().next(); x = x.add(x.next());</code></li>
<li>mostrar ou esconder os elementos seleccionados:<br />
	<code class="prettyprint">isHidden ? x.slideDown('slow') : x.slideUp('slow');</code></li>
<li>alterar o texto do link para ficar de acordo com a operação:<br />
<code class="prettyprint">isHidden ? $(this).text('(Esconder)') : $(this).text('(Mostrar)');</code>	</li>
</ol>
<p>e estava feito!</p>
<p>Como podem testar o código? É fácil:<br />
abram a <a href="http://www.zonaj.org/">página principal</a> do blog. (pessoal do rss, tem <strong>mesmo</strong> que ser na página principal)</p>
<p>Se estiverem a usar o Firebug podem copiar o código completo para a consola e executarem-no:</p>
<pre class="prettyprint">
var toggleEntry = function(){
	var isHidden = $(this).text().search('Mostrar')!=-1;
	var x=$(this).parent().next();
	x = x.add(x.next());
	isHidden ? x.slideDown('slow') : x.slideUp('slow');
	isHidden ? $(this).text('(Esconder)') : $(this).text('(Mostrar)');
};
$('.entry, .tagged').hide();
$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');
$('.entryToggler').click(toggleEntry);
</pre>
<p>Para os outros casos, escrevi o código todo numa só linha que podem copiar para a caixa de endereço do browser (substituindo o http://www.zonaj.org):<br />
<code><br />
javascript:var toggleEntry = function(){var isHidden = $(this).text().search('Mostrar')!=-1;var x=$(this).parent().next();x = x.add(x.next());isHidden ? x.slideDown('slow') : x.slideUp('slow');isHidden ? $(this).text('(Esconder)') : $(this).text('(Mostrar)');};$('.entry, .tagged').hide();$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');$('.entryToggler').click(toggleEntry);void(0);<br />
</code><br />
Testado com FF2, IE7 e Opera9.</p>
<p>É claro que tive a vantagem de não me ter de preocupar em importar o script de jQuery porque a própria página já o faz.<br />
Caso estivesse a alterar o DOM de uma página que não use jQuery, podia fazer o mesmo tipo de alterações usando o <a href="http://www.learningjquery.com/2006/12/jquerify-bookmarklet">jQuerify</a>.</p>
<p>Nota 1:<br />
Para deixar a primeira entrada sem alterações basta alterar a linha<br />
<code class="prettyprint">$('.entry, .tagged').hide();</code><br />
para<br />
<code class="prettyprint">$('.entry, .tagged').not(':first').hide();</code><br />
e a linha<br />
<code class="prettyprint">$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');</code><br />
para<br />
<code class="prettyprint">$('h2 ~ h4').not(':first').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');</code></p>
<p>Nota 2:<br />
Para remover a irritante &#8216;caixa picotada&#8217; à volta do link quando este fica activo, acrescentar como ultima linha da função:<br />
<code class="prettyprint">$(this).blur();</code> </p>
<p>Nota 3:<br />
O código final tem cerca de 10 (!) linhas e repeti-o 3 vezes neste post.</p>
<p>Nota 4:<br />
Para ter de volta a página original basta fazer reload no browser (mesmo tendo alterado a linha de endereço).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/05/06/breakdance/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

