<?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"
	>

<channel>
	<title>MouseOver Studio &#187; livrarias</title>
	<atom:link href="http://www.mouseoverstudio.com/blog/category/livrarias/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.mouseoverstudio.com/blog</link>
	<description></description>
	<pubDate>Wed, 25 Aug 2010 02:03:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Comunicação web criptografada e segura com Bouncy Castle e RSA</title>
		<link>http://www.mouseoverstudio.com/blog/2008/04/12/comunicacao-web-criptografada-e-segura-com-bouncy-castle-e-rsa/</link>
		<comments>http://www.mouseoverstudio.com/blog/2008/04/12/comunicacao-web-criptografada-e-segura-com-bouncy-castle-e-rsa/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 19:32:40 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Api]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[criptografia]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[livrarias]]></category>

		<category><![CDATA[programação]]></category>

		<category><![CDATA[seguridade]]></category>

		<category><![CDATA[bouncy  castle]]></category>

		<category><![CDATA[cryptography]]></category>

		<category><![CDATA[encryption]]></category>

		<category><![CDATA[jsbn]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[rsa]]></category>

		<category><![CDATA[security]]></category>

		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=73</guid>
		<description><![CDATA[Na empresa onde atualmente trabalho vou começar a trabalhar num projeto onde a seguridade é muito importante, pelo que fui instruído para aprender sobre Bouncy Castle. Nunca tinha ouvido falar aquelas palavras juntas, então vou começar do zero. 
O que é Bouncy Castle?
Depois de acessar a página do Bouncy Castle, a definição no Wikipedia e [...]]]></description>
			<content:encoded><![CDATA[<p>Na empresa onde atualmente trabalho vou começar a trabalhar num projeto onde a seguridade é muito importante, pelo que fui instruído para aprender sobre Bouncy Castle. Nunca tinha ouvido falar aquelas palavras juntas, então vou começar do zero. </p>
<p><strong>O que é Bouncy Castle?</strong></p>
<p>Depois de acessar a <a href="http://www.bouncycastle.org/">página do Bouncy Castle</a>, a <a href="http://en.wikipedia.org/wiki/Bouncy_castle_(cryptography)">definição no Wikipedia</a> e a <a href="http://mindprod.com/jgloss/bouncycastle.html">definição no Java Glossary</a> me atrevo a dizer que Bounce Castle é uma API de criptografia para Java e também um provedor das especificações <a href="http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html">JCE e JCA</a> da Sun.</p>
<p>Algo curioso sobre Bouncy Castle é que por ser um projeto australiano ele não precisa cumprir as leis de Estados Unidos que proíbem a exportação de algoritmos fortes de criptografia. Mais informação <a href="http://en.wikipedia.org/wiki/Export_of_cryptography">aqui</a>.</p>
<p><strong>O que é RSA?</strong></p>
<p>De acordo com a Wikipedia, <a href="http://pt.wikipedia.org/wiki/RSA">RSA</a> é</p>
<blockquote><p>um algoritmo de encriptação de dados, (&#8230;) até à data (2008), a mais bem sucedida implementação de sistemas de chaves assimétricas, e fundamenta-se em Teorias Clássicas dos Números. É considerado dos mais seguros, já que mandou por terra todas as tentativas de quebrá-lo. Foi também o primeiro algoritmo a possibilitar encriptação e assinatura digital, e uma das grandes inovações em criptografia de chave pública.</p></blockquote>
<p>RSA é um algoritmo que cria duas chaves, uma delas sendo pública e a outra privada. Toda mensagem que for cifrada utilizando a chave pública somente vai poder ser decifrada utilizando a chave privada.</p>
<p><strong>Trabalhando com RSA</strong></p>
<p>Vamos por as mãos na massa e brincar um pouco. Construiremos uma aplicação web simples que utilizando RSA crie uma chave privada e mande uma pública ao cliente. A aplicação servidor depois ira decifrar mensagens que foram cifradas com a chave publica. Para cifrar a chave pública na aplicação cliente utilizaremos a biblioetaca <a href=http://www-cs-students.stanford.edu/~tjw/jsbn/">jsbn</a>, dos estudandes de Stanford, implementada em JavaScript. </p>
<p>Começarei criando uma aplicação web dinâmica no Eclipse que rodara sobre o Tomcat e adicionarei ao meu pacote uma classe serviço que fará as operações relacionadas com Bouncy Castle e RSA e uma servlet que delegara as chamadas HTTP para o serviço correspondente. </p>
<p>Vou começar a implementar o serviço de RSA que utilizara Bouncy Castle como implementação, pelo que terei que incluir a livraria correspondente no meu classpath. As livrarias podem ser descarregadas de <a href="http://bouncycastle.org/latest_releases.html">aqui</a>. Nesse caso somente precisaremos da livraria Provider e OpenPGP/BCPG.</p>
<p>O primeiro passo ao trabalhar com Bouncy Castle é adicionar o provedor Bouncy Castle à lista de provedores. Colocarei o seguinte código no construtor da minha classe serviço:</p>
<pre class="prettyprint">Security.addProvider(new BouncyCastleProvider());</pre>
<p>Agora vou criar um gerador de chaves pares para o algoritmo RSA utilizando como provedor o Bouncy Castle (BC) e depois inicializar ele especificando que o tamanho das chaves vai ser 1024 e que o provedor de números aleatórios vai ser SecureRandom, do pacote java.security. Essas operações irão estar num método chamado generateKeys que terminara devolvendo um par de chaves. O método fica assim:</p>
<pre class="prettyprint">public KeyPair generateKeys() throws Exception {
	KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA",
			"BC");
	keyGenerator.initialize(1024, new SecureRandom());
	return keyGenerator.generateKeyPair();
}</pre>
<p>O segundo método da classe serviço recebera uma mensagem cifrada junto com a chave privada correspondente à chave pública utilizada para cifrar a mensagem e retornara a mensagem decifrada. </p>
<p>O primeiro passo é pegar uma instância da classe Cipher. A classe Cipher é encarregada de cifrar e de decifrar arrays de bytes. Para pegar uma instância da classe Cipher chamamos o método estático getInstance da mesma. Ela recebe dois parâmetros: a transformação a ser utilizada e o provedor.  Já sabemos que o provedor é Bouncy Castle, mas o que é a transformação? </p>
<p>A transformação é o método que foi utilizado para cifrar nossa mensagem. No nosso caso a transformação é RSA/NONE/PKCS1Padding, que define que utilizamos RSA como algoritmo de criptografia, que não utilizamos nenhuma técnica especial para cifragem em bloco e que utilizamos PKCS #1 como técnica de enchimento. Escolhi essa transformação porque é compatível com a livraria JavaScript utilizada.</p>
<p>Talvez agora surgiram mais dúvidas. Técnica para cifragem em bloco? Técnica de enchimento?</p>
<p>Quando ciframos um texto utilizando RSA, partimos ele em vários blocos e cada bloco vai sendo cifrado de alguma maneira. Como os blocos se relacionam e o tamanho deles, entre outras coisas, são características que definem as diferentes técnicas de cifragem em bloco. Para aprender mais podem acessar a <a href="http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation">definição no site da Wikipedia</a>. </p>
<p>Agora imaginemos que nossos blocos devem ser de 10 bytes mas ao particionar nossa mensagem o último bloco ficou de 4 bytes. Nesse caso temos que fazer alguma operação para completar esses 6 bytes restantes. Essa operação e chamada de padding e existem varias técnicas. Mas detalhes podem ser obtidos novamente na <a href="http://en.wikipedia.org/wiki/Padding_%28cryptography%29">definição no site da Wikipedia</a>.</p>
<p>Uma vez com nossa instância da classe Cipher nosso seguinte passo é inicializar ele indicando que vamos a realizar um processo de descriptografia utilizando tal chave privada. Finalmente realizamos o processo chamando o método doFinal do cipher passando como parámetro os bytes da mensagem criptograda. O método doFinal ira retornar os bytes da mensagem decifrada, os quais utilizaremos para criar uma string e devolver ela como retorno do método, o qual fica assim:</p>
<pre class="prettyprint">public String decrypt(PrivateKey key, byte[] message) throws Exception {
	Cipher decrypt = Cipher.getInstance("RSA/NONE/PKCS1Padding", "BC");
	decrypt.init(Cipher.DECRYPT_MODE, key);
	return new String(decrypt.doFinal(message));
}</pre>
<p>Começarei agora a desenvolver a classe que atuara como servlet. A classe servlet ira ter duas funções. A primeira função e mandar o serviço criar um par de chaves, guardar a chave privada na sessão e mandar os dados necessários da chave pública para o cliente (modulus e exponente). A segunda função é receber um texto em formato hexadecimal, passar ele para uma seqüencia de bytes e chamar o método do serviço encarregado de decifrar a cadeia de bytes. Finalmente devolvera a mensagem decifrada para o usuário. </p>
<p>Como o código da servlet é Java de todos os dias, não tem muito para explicar. Segue o código dos dois métodos encarregados de realizar as operações:</p>
<pre class="prettyprint">private void decrypt(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
	KeyPair keys = (KeyPair) request.getSession().getAttribute("keyPair");
	PrivateKey privateKey = keys.getPrivate();
	RSAService service = new RSAService();
	byte[] bytes = Hexadecimal.parseSeq(request.getParameter("Decrypt"));
	String decrypted = service.decrypt(privateKey, bytes);
	response.getWriter().write(decrypted);
}

private void getPublicKey(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
	RSAService service = new RSAService();
	KeyPair keys = service.generateKeys();
	request.getSession().setAttribute("keyPair", keys);
	RSAPublicKey publicKey = (RSAPublicKey) keys.getPublic();
	String modulus = publicKey.getModulus().toString(16);
	String exponent = publicKey.getPublicExponent().toString(16);
	PrintWriter writer = response.getWriter();
	writer.append("{'modulus':'");
	writer.append(modulus);
	writer.append("','exponent':'");
	writer.append(exponent);
	writer.append("'}");
	writer.flush();
}</pre>
<p>O código cliente é bem simples. Quando a página carregar, a página ira solicitar ao servidor o modulus e o exponente da chave pública. Quando o usuário acionar um botão escolhido, ira ser chamada a função sendMessage. A função sendMessage ira instanciar um objeto do tipo RSAKey que sera o encarregado de cifrar o texto escrito no devido textbox. Apos instanciar um objecto do tipo RSAKey, a função sendMessage especificara o modulus e o exponente da chave pública e logo cifrara a mensagem. Finalmente a função enviara ela pro servidor e mostrara uma alerta com a resposta. Nosso código em JavaScript fica assim:</p>
<pre class="prettyprint">$(document).ready(function() {
	$.getJSON("do?GetPublicKey", function(key) {
		$("#exponent").val(key.exponent);
		$("#modulus").val(key.modulus);
	})
});

function sendMessage() {
	var rsa = new RSAKey();
	rsa.setPublic($("#modulus").val(), $("#exponent").val());
	var message = rsa.encrypt($("#text").val());
	$("#encrypted").html(message);
	$.get("do?Decrypt=" + message, function(data) {
		window.alert(data);
	})
}</pre>
<p>O código da aplicação, incluíndo o jQuery, a classe Hexadecimal pegada da Internet, a biblioteca jsbn e o web.xml pode ser descarregado de <a href="http://www.mouseoverstudio.com/blog/tutoriales/mos_rsa.tar.gz">aqui</a>. Não esquecer que devem ser <a href="http://www.bouncycastle.org/latest_releases.html">descarregadas</a> ainda as bibliotecas do Bouncy Castle referentes a versão da JVM.</p>
<p>Se tiver dito alguma bobagem, por favor me perdoem e me corrijam nos comentários ou por email.</p>
<p>Ate a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2008/04/12/comunicacao-web-criptografada-e-segura-com-bouncy-castle-e-rsa/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Recompilação dos últimos links interessantes</title>
		<link>http://www.mouseoverstudio.com/blog/2008/01/19/recompilacao-dos-ultimos-links-interessantes/</link>
		<comments>http://www.mouseoverstudio.com/blog/2008/01/19/recompilacao-dos-ultimos-links-interessantes/#comments</comments>
		<pubDate>Sat, 19 Jan 2008 14:24:15 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Tutoriales]]></category>

		<category><![CDATA[comunidade]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[iphone]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[jboss]]></category>

		<category><![CDATA[livrarias]]></category>

		<category><![CDATA[programação]]></category>

		<category><![CDATA[qualidade]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=52</guid>
		<description><![CDATA[Nesses ultimos dias, a IBM publicou alguns artigos interessantes como os chamados Generar aplicações web Ajax J2EE com jpa2web, Criar aplicações ricas com JavaFX Script, a segunda parte da serie Aplicações Ajax sólidas: Construindo back ends ou Comezando com Grails: Construindo tua primeira aplicação Grails.
Também nesses últimos dias chegamos a conhecer alguns projetos interessantes como [...]]]></description>
			<content:encoded><![CDATA[<p>Nesses ultimos dias, a IBM publicou alguns artigos interessantes como os chamados <a href="http://www.ibm.com/developerworks/web/library/wa-aj-jpa2web/index.html?ca=drs-">Generar aplicações web Ajax J2EE com jpa2web</a>, <a href="http://www.ibm.com/developerworks/web/library/j-javafx/index.html?ca=drs-">Criar aplicações ricas com JavaFX Script</a>, a <a href="http://www.ibm.com/developerworks/web/library/wa-aj-backend/index.html?ca=drs-">segunda parte da serie Aplicações Ajax sólidas: Construindo back ends</a> ou <a href="http://www.ibm.com/developerworks/web/library/j-grails01158/index.html?ca=drs-">Comezando com Grails: Construindo tua primeira aplicação Grails</a>.</p>
<p>Também nesses últimos dias chegamos a conhecer alguns projetos interessantes como o <a href="http://josql.sourceforge.net/">JoSQL</a> que nos permite executar código SQL para selecionar coleções de objetos, similar ao LINQ da plataforma .NET e o <a href="http://www.trentrichardson.com/jsonsql/">JsonSQL</a> que funciona similar mas para objetos em JavaScript, notação Json. Outros trabalhos interessante são os feitos na livraria <a href="http://vikjavev.no/highslide/">Highslide JS</a> que nos ajuda a simular o efeito do conhecido lightbox nas nossas aplicações, o <a href="http://www.crap4j.org/">Crap4j</a> que se encarrega de qualificar nosso código Java em função a diferentes métricas, o <a href="http://www.creamtec.com/products/ajaxswing/">AjaxSwing</a>, que magicamente converte nossos projetos em Swing para aplicações web Ajax, o <a href="http://code.google.com/p/cajuscript/">CajuScript</a>, uma simples e poderosa implementação de script para usar com Java feito no território nacional, o <a href="http://www.mibbit.com/">Mibbit</a>, um chat que trabalha com o protocolo IRC e desenvolvido com Ajax e finalmente o <a href="http://jiggyapp.com/">Jiggy</a>, que nos permite criar aplicações para o iPhone de maneira muito simples e fácil. </p>
<p>Algumas leituras interessantes sobre Java e Design Patterns foram selecionadas também. Uma de elas é a conversação que se deu no forum GUJ chamada <a href="http://www.guj.com.br/posts/list/13316.java">Então você gostaria de saber sobre AOP?</a> que trata sobre a programação orientada a aspectos ou as que encontramos no site <a href="http://www.corej2eepatterns.com/Patterns2ndEd/index.htm">Core J2EE Patterns</a>, com muita informação sobre os diferentes design patterns da especificação J2EE. Outro site interessante é <a href="http://www.domaindrivendesign.org/">Domain Driven Design</a>, com muita informação sobre o tema que leva o mesmo nome.</p>
<p>Alguns tutoriais e artigos técnicos interessantes que chamaram nossa atenção foram aqueles chamados <a href="http://drnicwilliams.com/2008/01/04/autotesting-javascript-in-rails/">Autotestando JavaScript em Rails</a>, de Dr. Nic, que explica como testar nossos scripts em JavaScript desde um script em Rails, <a href="http://blog.morrisjohns.com/javascript_closures_for_dummies">Clousures do JavaScript para Dummies</a>, de Morris Johns, que ensina de maneira muito clara como funcionam os poderosos clousures em JavaScript, um excelente <a href="http://www.eustaquiorangel.com/downloads/tutorialruby.pdf">tutorial sobre Ruby</a> escrito por Eustaquio Rangel no seu periodo de aprendizagem da linguagem e <a href="http://www.jboss.org/?module=bb&#038;op=viewtopic&#038;t=75697">Ultimo tutorial JAAS para comunicação com a base de dados</a> que partiu de uma duvida no forum do JBoss sobre como implementar a especificação de seguridade e autenticação JAAS utilizando a base de dados num servidor de aplicação JBoss.</p>
<p>Também relacionado com JBoss, seguridade e autenticação são os wiki <a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=SecureJBoss">SecureJBoss</a> que é uma fonte de conhecimento compartilhada sobre como configurar o JBoss para máxima seguridade e a definicação na Wikipedia de <a href="http://en.wikipedia.org/wiki/Single_sign_on">Single sign-on (SSO)</a> que consiste em criar um único sistema de autenticação para diferentes aplicações.</p>
<p>O software livre não ficou atrás e assim chegamos a conhecer o <a href="http://www.winlibre.com/en/">WinLibre</a>, um portal com muito software livre para o sistema operativo Windows. Os que deixaram Windows atrás ficaram contentes ao ver o post chamado <a href="http://www.vagabondodigitale.com/2008/01/10-sites-offering-free-linux-courses-online.html">10 sites oferecendo cursos de Linux online de graça</a>, do blog italiano Vagabondo Digitale, que recompilo alguns sites como o da IBM ou da Novell com excelentes cursos. Para os que gostam de especialmente Ubuntu, foi interessante conhecer a revista <a href="http://fullcirclemagazine.org/">Full Circle Magazine</a> que trata sobre tudo o relacionado com o sistema operativo Ubuntu e também o programa <a href="http://ubuntu-tweak.com/downloads">Ubuntu Tweak</a>, que oferece muitas opções para alterar o mesmo. Muita gente pode estar querendo instalar o Java 6 no Ubuntu para treinar para alguma prova e o processo fica muito fácil depois de ler o artigo do Mundo Hev chamado <a href="http://mundohev.com/2007/12/28/instalando-java-16-no-ubuntu/">Instalando Java 6 (1.6) no Ubuntu</a>. Uma vez o Java corretamente instalado, a <a href="http://www.javaranch.com/roundup.jsp">pagina sobre as certificações Java</a> no portal JavaRanch pode nos ajudar bastante.</p>
<p>Voltando aos browsers, foi muito legal ver a <a href="http://www.amaltas.org/svgapp/">aplicação de demonstração de SVG</a> criada por Amaltas, o <a href="http://docs.jquery.com/Release:jQuery_1.2.2">release 1.2.2 do jQuery</a>, a <a href="http://extjs.com/blog/2007/07/10/css-selectors-speed-myths/">comparação dos diferentes CSS Selectors</a> em torno a velocidade realizada pelo pessoal do Ext JS e também a enorme quantidade (perto de 1000) de exemplos sobre Ajax, JavaScript e Dhtml que encontramos no site <a href="http://www.ajaxrain.com/">AjaxRain</a>.</p>
<p>Finalmente, outros dois links interessantes foram o do <a href="http://www.redmonk.com/cote/2007/12/12/eclipse-rap-overview-and-demo-screencast/">Overview sobre Eclipse RAP e o Screencast de demostração</a> criado por Michael Coté e o artigo escrito por Daniel Tenner chamado <a href="http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/">Como reconhecer um bom programador</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2008/01/19/recompilacao-dos-ultimos-links-interessantes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;Construindo uma livraria JavaScript&#8221;, pelo criador do jQuery</title>
		<link>http://www.mouseoverstudio.com/blog/2007/08/25/construindo-uma-livraria-javascript-pelo-criador-do-jquery/</link>
		<comments>http://www.mouseoverstudio.com/blog/2007/08/25/construindo-uma-livraria-javascript-pelo-criador-do-jquery/#comments</comments>
		<pubDate>Sat, 25 Aug 2007 15:21:47 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Api]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[livrarias]]></category>

		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=20</guid>
		<description><![CDATA[Na ultima sexta feira, Jonh Resig, criador da popular livraria jQuery, foi convidado por Jon Willey, da Google, para dar sua primeira Google Tech Talk. O nome da apresentação foi &#8220;Construindo uma livraria JavaScript&#8221;.  A apresentação e dividida em sete partes:

Escrevendo uma API sólida
Implementação
Aplicações complexas
Bugs dos browsers
Documentação
Testes
Manutenção




Jonh disponibilizou também os slides da apresentação: 




]]></description>
			<content:encoded><![CDATA[<p>Na ultima sexta feira, <a href="http://ejohn.org/about/">Jonh Resig</a>, criador da popular livraria <a href="http://jquery.com/">jQuery</a>, foi convidado por <a href="http://www.jonwiley.com/">Jon Willey</a>, da <a href="http://www.google.com">Google</a>, para dar sua primeira Google Tech Talk. O nome da apresentação foi &#8220;Construindo uma livraria JavaScript&#8221;.  A apresentação e dividida em sete partes:</p>
<ul>
<li>Escrevendo uma API sólida</li>
<li>Implementação</li>
<li>Aplicações complexas</li>
<li>Bugs dos browsers</li>
<li>Documentação</li>
<li>Testes</li>
<li>Manutenção</li>
</ul>
<p><center><br />
<embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-474821803269194441&#038;hl=en" flashvars=""></embed></center><br />
<br />
Jonh disponibilizou também os slides da apresentação: </p>
<p><center><br />
<object type="application/x-shockwave-flash" data="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=93987&#038;doc=building-a-javascript-library2560" width="425" height="348"><param name="movie" value="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=93987&#038;doc=building-a-javascript-library2560" /></object><br />
</center><br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2007/08/25/construindo-uma-livraria-javascript-pelo-criador-do-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Implementando a especificação Web Forms 2.0</title>
		<link>http://www.mouseoverstudio.com/blog/2007/08/19/implementando-a-especificacao-web-forms-20/</link>
		<comments>http://www.mouseoverstudio.com/blog/2007/08/19/implementando-a-especificacao-web-forms-20/#comments</comments>
		<pubDate>Sun, 19 Aug 2007 16:51:50 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[W3C]]></category>

		<category><![CDATA[livrarias]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=18</guid>
		<description><![CDATA[Weston Ruter publicou recentemente o  Web Forms 2.0 que basicamente é
uma implementação da especificação do Web Forms 2.0 realizada pela WHATWG. Essa especificação é um working draft maduro é tem sido adotado pela W3C para servir como ponto de inicio para a próxima versão do HTML. Essa implementação vai seguir a evolução da especificação [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ruter.net/soft/">Weston Ruter</a> publicou recentemente o  <a href="http://code.google.com/p/webforms2/">Web Forms 2.0</a> que basicamente é</p>
<blockquote><p>uma implementação da especificação do Web Forms 2.0 realizada pela WHATWG. Essa especificação é um working draft maduro é tem sido adotado pela W3C para servir como ponto de inicio para a próxima versão do HTML. Essa implementação vai seguir a evolução da especificação do HTML 5 a partir do processo da W3C.</p></blockquote>
<p>Dei uma olhada nos <a href="http://webforms2.googlecode.com/svn/trunk/testsuite/index.html">testes</a> é não vejo a hora do HTML 5 chegar, definitivamente vai fazer o processo de criação de aplicações web um processo bem mais simples.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2007/08/19/implementando-a-especificacao-web-forms-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Desenhando em formulários com InputDraw</title>
		<link>http://www.mouseoverstudio.com/blog/2007/08/01/desenhando-em-formularios-com-inputdraw/</link>
		<comments>http://www.mouseoverstudio.com/blog/2007/08/01/desenhando-em-formularios-com-inputdraw/#comments</comments>
		<pubDate>Thu, 02 Aug 2007 01:19:13 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Widgets]]></category>

		<category><![CDATA[livrarias]]></category>

		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=14</guid>
		<description><![CDATA[A galera de Mai&#8217;nada.NET, depois de criar o  &#60;InputDraw /&#62;, comunicou o seguinte: 
Com a chegada dos novos aparelhos moveis, as interfaces caligráficas estão crescendo mais do que nunca. A pesar disso, nos não vemos muitos sites como forums ou blogs pegando proveito disso. Nosso objetivo foi criar um widget caligráfico para ser usado [...]]]></description>
			<content:encoded><![CDATA[<p>A galera de <a href="http://www.mainada.net">Mai&#8217;nada.NET</a>, depois de criar o  <a href="http://www.mainada.net/inputdraw">&lt;InputDraw /&gt;</a>, comunicou o seguinte: </p>
<blockquote><p>Com a chegada dos novos aparelhos moveis, as interfaces caligráficas estão crescendo mais do que nunca. A pesar disso, nos não vemos muitos sites como forums ou blogs pegando proveito disso. Nosso objetivo foi criar um widget caligráfico para ser usado nos formulários de maneira simples e transparante, algo como &lt;input type=&quot;draw&quot; /&gt;</p></blockquote>
<p>Fiquei curioso e decidi experimentar. </p>
<p>Primeiro descarreguei a <a href="http://www.mainada.net/inputdraw/download_free/5">versão 1.2</a>, que além dos três arquivos necessários (dois .js e um .swf chamado <a href="http://blog.deconcept.com/swfobject/">SWFObject</a>, que serve para trabalhar com JavaScript e Flash), contem uma página de exemplo, outra com a documentação e uma ultima com as características da versão selecionada, assim como uma imagem que é utilizada na mostra.</p>
<p>Seguidamente, conforme indicado, fiz a inclusão dos dois arquivos js:</p>
<pre class="prettyprint">
<script src="swfobject.js" type="text/javascript"></script>
<script src="inputdraw.js" type="text/javascript"></script>
</pre>
<p>e por ultimo, inclui no meu corpo um elemento div que serviria como o editor, um elemento oculto que guardaria o resultado do meu desenho e uma instrução em JavaScript que se encarregaria de criar o widget depois do meu documento ter carregado perfeitamente: </p>
<pre class="prettyprint">
<div id="editor"></div>
<input type="hidden" id="svg" />
<script>
	new InputDraw(
		"inputdraw.free-non-commercial.1.2.swf", 
		"editor", 
         	{
			id:"svg", 
			width:"350", 
			height:"429", 
			animation:60, 
			background_image:"snowman.jpg"
		}
	);
</script>
</pre>
<p>Tentei visualizar o resultado do editor em forma de código da mesma maneira que pode ser visualizada na pagina do projeto, mas não consegui. Vou tentar me comunicar com os responsáveis para descobrir se fiz algo errado ou existe algum bug. Uma vez tendo controle com o resultado, posso salvar ele e depois visualizar o produto utilizando um visualizador que a mesma livraria traz. </p>
<p>De qualquer maneira, o editor pode ser testado aqui mesmo: </p>
<p><iframe src="./testes/1/InputDraw.html" width="360px" height="450px" align="center"></iframe></p>
<p>Espero que gostem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2007/08/01/desenhando-em-formularios-com-inputdraw/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Programação funcional com JavaScript e Functional</title>
		<link>http://www.mouseoverstudio.com/blog/2007/07/24/programacao-funcional-com-javascript-e-functional/</link>
		<comments>http://www.mouseoverstudio.com/blog/2007/07/24/programacao-funcional-com-javascript-e-functional/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 01:18:35 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[livrarias]]></category>

		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=9</guid>
		<description><![CDATA[Hoje conheci a livraria Functional e me encanto. 
Functional é uma livraria para programação funcional em JavaScript. Ela define funções padrão de ordem maior como map, reduce (vulgo foldl) e select (vulgo filter). Define também funções como curry, rcurry e partial para a aplicação de funções parciais [&#8230;]. Todas as funções aceitam strings do tipo [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje conheci a livraria <a href="http://osteele.com/sources/javascript/functional/">Functional</a> e me encanto. </p>
<blockquote><p>Functional é uma livraria para <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_funcional">programação funcional</a> em JavaScript. Ela define funções padrão de ordem maior como map, reduce (vulgo foldl) e select (vulgo filter). Define também funções como curry, rcurry e partial para a aplicação de <a href="http://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_parcial">funções parciais</a> [&#8230;]. Todas as funções aceitam strings do tipo &#8216;x -> x+1&#8242;, &#8216;x+1&#8242; ou &#8216;+1&#8242; como sinônimo para a função function(x) {return x + 1}</p></blockquote>
<p>Imaginemos que temos um array de números inteiros e queremos incrementar cada valor em uma unidade. Normalmente faríamos:</p>
<pre class="prettyprint">map(function(x){return x+1}, [1,2,3])</pre>
<p>mas com Functional podemos fazer:</p>
<pre class="prettyprint">map('x+1', [1,2,3])</pre>
<p>Se quiséssemos multiplicar um valor por aquele mesmo ate ser maior que 100, empezando com 2, com Functional poderiamos usar a função until:</p>
<pre class="prettyprint">until('>100', 'x*x')(2)</pre>
<p>que vai fazer o seguinte: (((2 * 2) * 4) * 16) -> 256</p>
<p>No caso que desejemos fazer uma seleção de valores num vetor, teríamos como opção a função select. Nesse caso pegaremos os números maiores que 2: </p>
<pre class="prettyprint">select('x>2', [1,2,3,4])</pre>
<p>Esse foi somente um simples exemplo do poderio do Functional. Os exemplos mostrados foram os mais simples, mas dependendo do programador, se podem criar expressões bem complexas e efetivas. Na página do Functional se podem testar algumas expressões e assim descobrir como ira se comportar o script nos casos indicados. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2007/07/24/programacao-funcional-com-javascript-e-functional/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Unindo o IE e a W3C com o Uniform Event Model</title>
		<link>http://www.mouseoverstudio.com/blog/2007/07/24/unindo-o-ie-e-a-w3c-com-o-uniform-event-model/</link>
		<comments>http://www.mouseoverstudio.com/blog/2007/07/24/unindo-o-ie-e-a-w3c-com-o-uniform-event-model/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 00:24:13 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[W3C]]></category>

		<category><![CDATA[ie]]></category>

		<category><![CDATA[livrarias]]></category>

		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=8</guid>
		<description><![CDATA[Uniform Event Model é um script feito em JavaScript que permite ao IE responder aos diferentes eventos conforme recomendado pela W3C. Em poucas palavras:
Incluir esse script no teu arquivo HTML basicamente quer dizer que o Internet Explorer vai ser comportar da mesma maneira que o Firefox, Opera e qualquer outro browser que corresponda às recomendações [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://uem.dokkedahl.dk/index.php">Uniform Event Model</a> é um script feito em JavaScript que permite ao IE responder aos diferentes <a href="http://www.w3.org/TR/DOM-Level-3-Events/events.html">eventos conforme recomendado pela W3C</a>. Em poucas palavras:</p>
<blockquote><p>Incluir esse script no teu arquivo HTML basicamente quer dizer que o Internet Explorer vai ser comportar da mesma maneira que o Firefox, Opera e qualquer outro browser que corresponda às recomendações da W3C sobre como tratar eventos.</p></blockquote>
<p>O script se encontra atualmente na versão 1.2 e podem aprender mais sobre ele com a <a href="http://uem.dokkedahl.dk/doc.php">documentação</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2007/07/24/unindo-o-ie-e-a-w3c-com-o-uniform-event-model/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
