<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-5675746956264025202</atom:id><lastBuildDate>Fri, 30 Oct 2009 15:01:47 +0000</lastBuildDate><title>frameBox</title><description>Blog voltado para desenvolvedores web. Apresenta as novas tecnologias e novos métodos de programação web atuais. Trata sobre javascript, ajax, web 2.0, frameworks, etc...</description><link>http://framebox.blogspot.com/</link><managingEditor>btbruno_@hotmail.com (Bruno Tavares)</managingEditor><generator>Blogger</generator><openSearch:totalResults>64</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Framebox" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-5538467039543862786</guid><pubDate>Fri, 30 Oct 2009 15:00:00 +0000</pubDate><atom:updated>2009-10-30T13:01:47.948-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Comet</category><title>Comet no IIS</title><description>&lt;div style="text-align: justify;"&gt;Comet é uma metodologia que requer um poder de processamento concorrente muito grande dos servidores. Até o momento foram lançado alguns servidores próprios para a abordagem, porém nada ainda voltado para Microsoft IIS, ficando difícil de programadores .NET usufruirem a tecnologia. WebSync vem para preencher essa lacuna. Ele foi desenvolvido C#, roda com o IIS e foi testado numa máquina acer de U$500,00 com 30.000 usuários concorrentes e 25.000 mensagens e rodou perfeitamente! Vejam mais detalhes no &lt;a href="http://ajaxian.com/archives/websync-comet-for-iis"&gt;post completo do ajaxian.com&lt;/a&gt;. P.S.: Sugiro assistirem o vídeo explicativo.&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-5538467039543862786?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qDGNYZ8vhuoyoXsawcqSy35SYOo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qDGNYZ8vhuoyoXsawcqSy35SYOo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qDGNYZ8vhuoyoXsawcqSy35SYOo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qDGNYZ8vhuoyoXsawcqSy35SYOo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=4PdX41qEVI8:YmHdugx9Qr0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=4PdX41qEVI8:YmHdugx9Qr0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=4PdX41qEVI8:YmHdugx9Qr0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=4PdX41qEVI8:YmHdugx9Qr0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=4PdX41qEVI8:YmHdugx9Qr0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=4PdX41qEVI8:YmHdugx9Qr0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=4PdX41qEVI8:YmHdugx9Qr0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/4PdX41qEVI8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/4PdX41qEVI8/comet-no-iis.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/10/comet-no-iis.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-6011321903735416688</guid><pubDate>Thu, 24 Sep 2009 10:54:00 +0000</pubDate><atom:updated>2009-09-24T07:58:15.768-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web News</category><category domain="http://www.blogger.com/atom/ns#">Usabilidade</category><title>10 úteis dicas de usabilidade</title><description>&lt;blockquote style="text-align: justify;"&gt;Todos concordariam que usabilidade é um aspecto importante de Web Design. Seja trabalhando em um website de portfólio, loja online ou aplicação web, fazer as páginas fáceis e agradáveis para seus visitantes usarem é fundamental. Muitos estudos foram feitos ao passar dos anos sobre vários aspectos da Web e Design de interfaces, e os resultados são valiosos para nos ajudar a melhorar o nosso trabalho. Aqui estão 10 resultados sobre usabilidade que podem ajudar a melhorar a experiência do usuário em seu site.&lt;br /&gt;
&lt;/blockquote&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;Li no &lt;a href="http://www.smashingmagazine.com/2009/09/24/10-useful-usability-findings-and-guidelines/"&gt;SmashingMagazine.com&lt;/a&gt;, ótimo post!Em resumo, os caras juntaram diversos estudos e publicaram em seu website. Alguns pontos importantes a serem observados:&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Labels são melhor posicionadas em cima dos campos em um formulário&lt;/li&gt;&lt;li&gt;O foco de visão do usuário está principalmente concentrado em rostos de pessoas, e além disso, estudo demonstra que usuários prestam mais atenção ao texto quando existe a imagem de um bebê olhando para o texto.&lt;/li&gt;&lt;li&gt;Qualidade de design é sinal de credibilidade&lt;/li&gt;&lt;li&gt;A maioria dos usuários não usam scroll&lt;/li&gt;&lt;li&gt;Azul é a melhor cor para links&lt;/li&gt;&lt;li&gt;A melhor caixa de pesquisa é aquela com 27 caracteres de largura&lt;/li&gt;&lt;li&gt;Espaçamento aumenta a compreensão do conteúdo&lt;/li&gt;&lt;li&gt;Testes de usabilidade não precisam ser muito extensos, 5 usuários são suficientes.&lt;/li&gt;&lt;li&gt;Páginas informativas sobre seus produtos ajudam a vender melhor&lt;/li&gt;&lt;li&gt;A maioria dos usuários são "cegos" a banners publicitários&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Enfim, são dicas comprovadas por estudos com usuários, que podem ajudar a melhorar a qualidade de seus websites e aplicações. Até a próxima!&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-6011321903735416688?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1YJVufRdylYc0SO7vGD8CSaq3hQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1YJVufRdylYc0SO7vGD8CSaq3hQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1YJVufRdylYc0SO7vGD8CSaq3hQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1YJVufRdylYc0SO7vGD8CSaq3hQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=ibI2-T5-n2g:ezwUx65GzNM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=ibI2-T5-n2g:ezwUx65GzNM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=ibI2-T5-n2g:ezwUx65GzNM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=ibI2-T5-n2g:ezwUx65GzNM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=ibI2-T5-n2g:ezwUx65GzNM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=ibI2-T5-n2g:ezwUx65GzNM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=ibI2-T5-n2g:ezwUx65GzNM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/ibI2-T5-n2g" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/ibI2-T5-n2g/10-uteis-dicas-de-usabilidade.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/09/10-uteis-dicas-de-usabilidade.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-4643675361231865734</guid><pubDate>Wed, 23 Sep 2009 19:46:00 +0000</pubDate><atom:updated>2009-09-23T16:47:09.222-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Javascript Profissional</category><category domain="http://www.blogger.com/atom/ns#">Ferramentas</category><title>Combinando arquivos Javascript e CSS de forma descomplicada</title><description>&lt;p&gt;Essa é a proposta do Javascript Combiner: agrupar diversos arquivos respeitando dependências.&lt;/p&gt;&lt;blockquote&gt;A maioria dos sistemas que vi requerem que você indique as dependências entre arquivos em um arquivo separado. Isso me aborreceu por muito tempo. Porque as informações de dependência deve existir fora do arquivo que as utiliza? Porque introduzir um outro arquivo cuja única tarefa é gerenciar dependências? O que eu queria era um equivalente do &lt;code&gt;#include&lt;/code&gt; para C ou &lt;code&gt;import&lt;/code&gt; do Java, algo que me permita especificar dependências no próprio arquivo fonte e depois combinar todos juntos respeitando a ordem de inclusão. Então no começo do ano passado comecei a trabalhar no Javascript Combiner.&lt;/blockquote&gt;&lt;p&gt;Exemplo de declaração de um arquivo importado&lt;/p&gt;&lt;pre class="prettyprint"&gt;/*requires yahoo.js*/&lt;/pre&gt;&lt;p&gt;Veja mais no &lt;a href="http://www.nczonline.net/blog/2009/09/22/introducing-combiner-a-javascriptcss-concatenation-tool/"&gt;post original&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-4643675361231865734?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vu-l5FHN4mqsPb2ZChrCVbUWktM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vu-l5FHN4mqsPb2ZChrCVbUWktM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vu-l5FHN4mqsPb2ZChrCVbUWktM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vu-l5FHN4mqsPb2ZChrCVbUWktM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=MNDm1Jd-bu8:cnunAcFZXt0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=MNDm1Jd-bu8:cnunAcFZXt0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=MNDm1Jd-bu8:cnunAcFZXt0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=MNDm1Jd-bu8:cnunAcFZXt0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=MNDm1Jd-bu8:cnunAcFZXt0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=MNDm1Jd-bu8:cnunAcFZXt0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=MNDm1Jd-bu8:cnunAcFZXt0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/MNDm1Jd-bu8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/MNDm1Jd-bu8/combinando-arquivos-javascript-e-css-de.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/09/combinando-arquivos-javascript-e-css-de.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-4058974051458183539</guid><pubDate>Tue, 15 Sep 2009 16:12:00 +0000</pubDate><atom:updated>2009-09-15T13:33:39.020-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ferramentas</category><category domain="http://www.blogger.com/atom/ns#">CSS</category><category domain="http://www.blogger.com/atom/ns#">Performance</category><title>SpriteMe! Geração de CSS Sprite como nunca visto</title><description>&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5381728832586324642" src="http://3.bp.blogspot.com/_skhagAROKQU/Sq-93A_JGqI/AAAAAAAAARo/nUoZsKcWIj8/s400/make-sprite-cursor.png" style="cursor: pointer; display: block; height: 158px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.stevesouders.com/blog/2009/09/14/spriteme/"&gt;Anunciado&lt;/a&gt; esta semana a criação da mais nova ferramenta para geração de CSS Sprites, o &lt;a href="http://spriteme.org/"&gt;SpriteMe&lt;/a&gt;. Os sprites são gerados de forma extremamente dinâmica enquanto você navega&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt; por uma página e seleciona as imagens que deseja compor o sprite. Além disso ele contém uma certa "inteligência" embutida que detecta tamanhos similares de imagens e agrupa para serem criados sprites otimizados. Enfim, é uma excelente ferramenta, com um &lt;a href="http://spriteme.org/demo.php"&gt;tutorial&lt;/a&gt; fantástico que vale a pena ser visto.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-4058974051458183539?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F0djim5Qc4g7HgsvNV4uuOl-vNU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F0djim5Qc4g7HgsvNV4uuOl-vNU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F0djim5Qc4g7HgsvNV4uuOl-vNU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F0djim5Qc4g7HgsvNV4uuOl-vNU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=XTFz2o9sDzA:lqlX84lijy0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=XTFz2o9sDzA:lqlX84lijy0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=XTFz2o9sDzA:lqlX84lijy0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=XTFz2o9sDzA:lqlX84lijy0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=XTFz2o9sDzA:lqlX84lijy0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=XTFz2o9sDzA:lqlX84lijy0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=XTFz2o9sDzA:lqlX84lijy0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/XTFz2o9sDzA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/XTFz2o9sDzA/spriteme-geracao-de-css-sprite-como.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_skhagAROKQU/Sq-93A_JGqI/AAAAAAAAARo/nUoZsKcWIj8/s72-c/make-sprite-cursor.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/09/spriteme-geracao-de-css-sprite-como.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-7801446307962941791</guid><pubDate>Tue, 01 Sep 2009 10:56:00 +0000</pubDate><atom:updated>2009-09-01T08:07:32.058-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Aplicações Web</category><title>Você acha que sabe desenvolver RIA?</title><description>&lt;a href="http://designingwebinterfaces.com/designing-rich-applications-at-delveui"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 289px;" src="http://1.bp.blogspot.com/_skhagAROKQU/Spz_7sks3lI/AAAAAAAAARQ/hoeioR5CeGQ/s400/design-interface.jpg" alt="" id="BLOGGER_PHOTO_ID_5376453456215989842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Publico hoje uma apresentação de slide muito interessante, apresentada por Theresa Neil no evento DelveUI de desenvolvimento de interfaces web. Na apresentação ela cita os componentes de uma interface de aplicação rica (RIA), além de listar uma série de modelos de como construir determinada visualização da forma mais correta. &lt;a href="http://designingwebinterfaces.com/designing-rich-applications-at-delveui"&gt;Link para o post oficial aqui&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-7801446307962941791?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aEOF1Q9TuqKLzcoFXj2YJ2LgtVc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aEOF1Q9TuqKLzcoFXj2YJ2LgtVc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aEOF1Q9TuqKLzcoFXj2YJ2LgtVc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aEOF1Q9TuqKLzcoFXj2YJ2LgtVc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=aAo7QlfGAcg:extXe_i7sjU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=aAo7QlfGAcg:extXe_i7sjU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=aAo7QlfGAcg:extXe_i7sjU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=aAo7QlfGAcg:extXe_i7sjU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=aAo7QlfGAcg:extXe_i7sjU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=aAo7QlfGAcg:extXe_i7sjU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=aAo7QlfGAcg:extXe_i7sjU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/aAo7QlfGAcg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/aAo7QlfGAcg/voce-acha-que-sabe-desenvolver-ria.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_skhagAROKQU/Spz_7sks3lI/AAAAAAAAARQ/hoeioR5CeGQ/s72-c/design-interface.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/09/voce-acha-que-sabe-desenvolver-ria.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-7147673982097057900</guid><pubDate>Wed, 26 Aug 2009 10:47:00 +0000</pubDate><atom:updated>2009-08-26T08:47:08.613-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Javascript Profissional</category><category domain="http://www.blogger.com/atom/ns#">Performance</category><title>Como carregar Javascript dinâmicamente</title><description>&lt;div style="text-align: justify;"&gt;O conceito de "aplicação de uma página" foi introduzido juntamente com Ajax. São aplicações consagradas como o gmail em que você entra numa página index.php (default.aspx, etc...) e nunca mais é redirecionado. Tudo é montado dinâmicamente usando Javascript e Ajax. Em sistemas assim incluir todos os scripts em uma página só torna o carregamento da aplicação pesado e demonstra-se uma prática inviável. Solução: carregar fontes javascript sob demanda. Aqui publico então alguns recursos para implementar esse conceito e dar uma turbinada no seu sistema.&lt;/div&gt;&lt;br /&gt;&lt;h4&gt;google.load&lt;/h4&gt;&lt;div style="text-align: justify;"&gt;A google possui um método para carregar APIs Ajax dinâmicamente. Único inconveniente é que é um método específico da google e não pode ser usado para carregar um script da sua aplicação. Esse método está disponível dentro de http://www.google.com/jsapi em um código compactado.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;O recurso mais interessente, e que deve estar presente em todos os métodos de carregamento dinâmico, é a opção de monitorar quando o script está carregado. Mais sobre o assunto pode ser visto na &lt;a href="http://code.google.com/apis/ajax/documentation/#AvailableAPIs"&gt;documentação oficial&lt;/a&gt;.&lt;/div&gt;&lt;pre class="prettyprint"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt; google.load("maps", "2");&lt;br /&gt; google.load("search", "1");&lt;br /&gt; &lt;br /&gt; // Call this function when the page has been loaded&lt;br /&gt; function initialize(){&lt;br /&gt;     var map = new google.maps.Map2(document.getElementById("map"));&lt;br /&gt;     map.setCenter(new google.maps.LatLng(37.4419, -122.1419), 13);&lt;br /&gt;     &lt;br /&gt;     var searchControl = new google.search.SearchControl();&lt;br /&gt;     searchControl.addSearcher(new google.search.WebSearch());&lt;br /&gt;     searchControl.addSearcher(new google.search.NewsSearch());&lt;br /&gt;     searchControl.draw(document.getElementById("searchcontrol"));&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; google.setOnLoadCallback(initialize);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;h4&gt;Javascript Simple Loader&lt;/h4&gt;&lt;div style="text-align: justify;"&gt;Encontrei esse código &lt;a href="http://snipplr.com/view.php?codeview&amp;amp;id=18608"&gt;publicado no snipplr.com&lt;/a&gt;. Sem nenhum comentário, nem observações do autor. Mas parece simples de usar. Basta informar o scr e opcionalmente uma função de callback:&lt;/div&gt;&lt;pre class="prettyprint"&gt;function loadScript(src, callback){&lt;br /&gt;    var scriptTag = document.createElement("scriptTag")&lt;br /&gt;    scriptTag.type = "text/javascriptTag";&lt;br /&gt;    if (scriptTag.readyState) {&lt;br /&gt;        //IE&lt;br /&gt;        scriptTag.onreadystatechange = function(){&lt;br /&gt;            if (scriptTag.readyState == "loaded" ||&lt;br /&gt;            scriptTag.readyState == "complete") {&lt;br /&gt;                scriptTag.onreadystatechange = null;&lt;br /&gt;                setTimeout(function(){&lt;br /&gt;                    scriptTag.parentNode.removeChild(scriptTag)&lt;br /&gt;                }, 1)&lt;br /&gt;                callback();&lt;br /&gt;            }&lt;br /&gt;        };&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;        //Others&lt;br /&gt;        scriptTag.onload = function(){&lt;br /&gt;            setTimeout(function(){&lt;br /&gt;                scriptTag.parentNode.removeChild(scriptTag)&lt;br /&gt;            }, 1)&lt;br /&gt;            callback();&lt;br /&gt;        };&lt;br /&gt;    }&lt;br /&gt;    scriptTag.src = src;&lt;br /&gt;    document.getElementsByTagName("head")[0].appendChild(scriptTag);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;h4&gt;O melhor jeito&lt;/h4&gt;&lt;div style="text-align: justify;"&gt;Em complemento &lt;a href="http://www.nczonline.net/blog/2009/07/28/the-best-way-to-load-external-javascript/"&gt;li um artigo de Nicholas Zakas&lt;/a&gt; em que ele expõe, segundo sua opinião, a melhor forma de carregar javascript. Na realidade, ele fez uma análise de outro artigo &lt;a href="http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/"&gt;Steve Souders&lt;/a&gt;, que também disponibilizo o link porque o artigo é incrível. Enfim, Nicholas explica que quando incluímos um &amp;lt;script&amp;gt; no código html, o browser ao executar a página, tem que parar e esperar o conteúdo do &amp;lt;script&amp;gt; ser carregado para depois continuar e renderizar a página. Usando carregamento de javascript com o próprio javascript, os códigos são carregados em paralelo, sem travar o browser, fazendo com a página renderize muito mais rápido. Sendo assim ele propõe o seguinte modelo: carregar somente a função de carregamento dinâmico, e usar essa função para carregar todo o resto:&lt;/div&gt;&lt;pre class="prettyprint"&gt;function loadScript(url, callback){&lt;br /&gt;&lt;br /&gt;    var script = document.createElement("script")&lt;br /&gt;    script.type = "text/javascript";&lt;br /&gt;&lt;br /&gt;    if (script.readyState){  //IE&lt;br /&gt;        script.onreadystatechange = function(){&lt;br /&gt;            if (script.readyState == "loaded" ||&lt;br /&gt;                    script.readyState == "complete"){&lt;br /&gt;                script.onreadystatechange = null;&lt;br /&gt;                callback();&lt;br /&gt;            }&lt;br /&gt;        };&lt;br /&gt;    } else {  //Others&lt;br /&gt;        script.onload = function(){&lt;br /&gt;            callback();&lt;br /&gt;        };&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    script.src = url;&lt;br /&gt;    document.getElementsByTagName("head")[0].appendChild(script);&lt;br /&gt;}&lt;/pre&gt;&lt;div&gt;Mais detalhes podem ser vistos no post oficial.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Enfim, espero ter lhe ajudado a carregar javascripts dinâmicamente. Fica aqui algumas abordagens e links para que você possa encontrar ainda mais conteúdo sobre o assunto. Até a próxima.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-7147673982097057900?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AfCERCoEic2a-icabqO_C6XICGM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AfCERCoEic2a-icabqO_C6XICGM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AfCERCoEic2a-icabqO_C6XICGM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AfCERCoEic2a-icabqO_C6XICGM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=WpLxUxy5Z_o:iwiN4SxJtDg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=WpLxUxy5Z_o:iwiN4SxJtDg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=WpLxUxy5Z_o:iwiN4SxJtDg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=WpLxUxy5Z_o:iwiN4SxJtDg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=WpLxUxy5Z_o:iwiN4SxJtDg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=WpLxUxy5Z_o:iwiN4SxJtDg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=WpLxUxy5Z_o:iwiN4SxJtDg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/WpLxUxy5Z_o" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/WpLxUxy5Z_o/como-carregar-javascript-dinamicamente.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/07/como-carregar-javascript-dinamicamente.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-8354451080969012313</guid><pubDate>Fri, 07 Aug 2009 12:00:00 +0000</pubDate><atom:updated>2009-08-07T09:30:34.936-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Javascript Profissional</category><category domain="http://www.blogger.com/atom/ns#">Performance</category><title>Tudo sobre Vazamento de Memória Javascript (Memory Leak)</title><description>&lt;p align="justify"&gt;Com o advento da programação Ajax as aplicações deixaram de ser submitadas a cada clique e passaram a permanecer na mesma página por longos períodos de tempo. Nesse tipo de aplicação pequenos problemas com gerenciamento de memória podem formar uma grande dor de cabeça para os usuários da aplicação, que manipulam um sistema lento, e para os programadores, que não sabem o que fazer para resolver o problema. Nesse ponto eu me encontrei semanas atrás, e foi aí que iniciei estudos em busca de soluções para problemas de memory leak. Acabei descubrindo muitas coisas bacanas e portanto aqui escrevo a vocês para publicar tudo que li. Bons estudos!&lt;/p&gt;&lt;h4&gt;Memory o que?!&lt;/h4&gt;&lt;p align="justify"&gt;Memory leak é um problema conhecido também por &lt;b&gt;vazamento de memória&lt;/b&gt;. Um dos artigos que li foi de &lt;a href="http://javascript.crockford.com/"&gt;Douglas Crockford&lt;/a&gt;, guru javascript, e ele resume o conceito dessa forma:&lt;blockquote&gt;Quando um sistema não gerencia corretamente suas alocações de memória é dito que ele vaza memória. Um vazamento de memória é um bug. Sintomas incluem redução de performance e falhas.&lt;/blockquote&gt;&lt;/p&gt;&lt;h4&gt;Como ocorre e como Resolver?&lt;/h4&gt;&lt;p align="justify"&gt;O pior caso é (pasmem) no Internet Explorer. Apesar de falar sobre o IE, usaremos esse browser como exemplo, problemas de memórias ocorrem em todos os browsers. No IE o sistema de garbage collector (coletor de lixo) não consegue liberar memória quando referências cíclicas ocorrem. Caso você esteja se perguntando o que é referência cíclica, permita-me exemplificar: quando associamos um evento à um elemento DOM, esse elemento guarda a referência para o evento. Caso esse evento utilize o elemento DOM, em alguma referência, uma estrutura cíclica se forma, da qual não é liberada na memória pelo IE.&lt;/p&gt;&lt;h4&gt;Referência Circular&lt;/h4&gt;&lt;a href="http://2.bp.blogspot.com/_skhagAROKQU/SnwMPCdXDvI/AAAAAAAAAQI/pua9S3cw4zw/s1600-h/circular_pattern.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5367178308416376562" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 291px; CURSOR: hand; HEIGHT: 400px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_skhagAROKQU/SnwMPCdXDvI/AAAAAAAAAQI/pua9S3cw4zw/s400/circular_pattern.gif" border="0" /&gt;&lt;/a&gt;&lt;pre class="prettyprint"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;    &amp;lt;head&amp;gt;&lt;br /&gt;        &amp;lt;script language="JScript"&amp;gt;&lt;br /&gt;&lt;br /&gt;        var myGlobalObject;&lt;br /&gt;&lt;br /&gt;        function SetupLeak()&lt;br /&gt;        {&lt;br /&gt;            // First set up the script scope to element reference&lt;br /&gt;            myGlobalObject =&lt;br /&gt;                document.getElementById("LeakedDiv");&lt;br /&gt;&lt;br /&gt;            // Next set up the element to script scope reference&lt;br /&gt;            document.getElementById("LeakedDiv").expandoProperty =&lt;br /&gt;                myGlobalObject;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        function BreakLeak()&lt;br /&gt;        {&lt;br /&gt;            document.getElementById("LeakedDiv").expandoProperty =&lt;br /&gt;                null;&lt;br /&gt;        }&lt;br /&gt;        &amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;body onload="SetupLeak()" onunload="BreakLeak()"&amp;gt;&lt;br /&gt;        &amp;lt;div id="LeakedDiv"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;O problema&lt;/b&gt;&lt;p align="justify"&gt;Um exemplo de problema de vazamento por referência circular é facilmente vísivel num pequeno teste criado por Douglas. No &lt;a href="http://javascript.crockford.com/memory/queuetest1.html" target="_blank"&gt;primeiro exemplo&lt;/a&gt; ele cria 10.000 elementos DOM (span) e os remove em seguida. Se você acompanhar o consumo de memória pelo gerenciador de tarefas do windows verá que o consumo e mantém estável.&lt;/p&gt;&lt;pre class="prettyprint"&gt;function makeSpan(n) {&lt;br /&gt;    var s = document.createElement('span');&lt;br /&gt;    document.body.appendChild(s);&lt;br /&gt;    var t = document.createTextNode(' ' + n);&lt;br /&gt;    s.appendChild(t);&lt;br /&gt;    return s;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function process(n) {&lt;br /&gt;    queue.push(makeSpan(n));&lt;br /&gt;    var s = queue.shift();&lt;br /&gt;    if (s) {&lt;br /&gt;        s.parentNode.removeChild(s);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p align="justify"&gt;No &lt;a href="http://javascript.crockford.com/memory/queuetest2.html" target="_blank"&gt;segundo exemplo&lt;/a&gt; ele faz a mesma coisa, porém para cada elemento ele associa um evento, e dentro desse evento utiliza a referência para o elemento. Agora é possível ver o consumo de memória aumentando cada vez mais.&lt;/p&gt;&lt;pre class="prettyprint"&gt;function makeSpan(n) {&lt;br /&gt;    var s = document.createElement('span');&lt;br /&gt;    document.body.appendChild(s);&lt;br /&gt;    var t = document.createTextNode(' ' + n);&lt;br /&gt;    s.appendChild(t);&lt;br /&gt;    s.onclick = function (e) {&lt;br /&gt;        s.style.backgroundColor = 'red';&lt;br /&gt;        alert(n);&lt;br /&gt;    };&lt;br /&gt;    return s;&lt;br /&gt;}&lt;/pre&gt;&lt;p align="justify"&gt;Neste momento estou utilizando Internet Explorer 7.0.5730.13 e o erro ainda ocorre. Existe já o &lt;a href="http://support.microsoft.com/kb/929874/"&gt;registro do bug&lt;/a&gt; no suporte da microsoft e eles dizem terem corrigido. Esse erro pode parecer banal para aplicações que usam submit a cada nova página do sistema, mas com o crescente uso de Ajax em aplicações e sites que nunca submitam são realidade.&lt;/p&gt;&lt;b&gt;A solução&lt;/b&gt;&lt;p align="justify"&gt;Por segurança devemos nós resolver esse problema, já que o IE7 vai demorar um pouco para ser abandonado. Segundo a própria Microsoft, closures são os responsáveis por esse vazamento. Douglas propõe uma solução útil, porém não 100% segura:&lt;/p&gt;&lt;pre class="prettyprint"&gt;function purge(d) {&lt;br /&gt;    var a = d.attributes, i, l, n;&lt;br /&gt;    if (a) {&lt;br /&gt;        l = a.length;&lt;br /&gt;        for (i = 0; i &amp;lt; l; i += 1) {&lt;br /&gt;            n = a[i].name;&lt;br /&gt;            if (typeof d[n] === 'function') {&lt;br /&gt;                d[n] = null;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    a = d.childNodes;&lt;br /&gt;    if (a) {&lt;br /&gt;        l = a.length;&lt;br /&gt;        for (i = 0; i &amp;lt; l; i += 1) {&lt;br /&gt;            purge(d.childNodes[i]);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;Refatorando o exemplo para não gerar mais vazamentos:&lt;pre class="prettyprint"&gt;function process(n) {&lt;br /&gt;    queue.push(makeSpan(n));&lt;br /&gt;    var s = queue.shift();&lt;br /&gt;    if (s) {&lt;br /&gt;        purge(s);&lt;br /&gt;        s.parentNode.removeChild(s);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;p align="justify"&gt;Não é 100% segura porque ele mesmo nos avisa que eventos associados através do método attachEvent não serão coletados. Isso porque sua referência não é guardada para acesso do programador. Como não podemos acessar, não podemos remover. A não ser que guardamos a referência, aí podemos manualmente retirar o evento com detachEvent, e tudo fica resolvido (veremos essa solução adiante).&lt;/p&gt;&lt;h4&gt;Closures&lt;/h4&gt;&lt;a href="http://1.bp.blogspot.com/_skhagAROKQU/SnwOKqnkoYI/AAAAAAAAAQQ/M629rRhPLcc/s1600-h/closure_pattern.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5367180432320536962" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 315px; CURSOR: hand; HEIGHT: 400px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_skhagAROKQU/SnwOKqnkoYI/AAAAAAAAAQQ/M629rRhPLcc/s400/closure_pattern.gif" border="0" /&gt;&lt;/a&gt;&lt;pre class="prettyprint"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;    &amp;lt;head&amp;gt;&lt;br /&gt;        &amp;lt;script language="JScript"&amp;gt;&lt;br /&gt;&lt;br /&gt;        function AttachEvents(element)&lt;br /&gt;        {&lt;br /&gt;            // This structure causes element to ref ClickEventHandler&lt;br /&gt;            element.attachEvent("onclick", ClickEventHandler);&lt;br /&gt;&lt;br /&gt;            function ClickEventHandler()&lt;br /&gt;            {&lt;br /&gt;                // This closure refs element&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        function SetupLeak()&lt;br /&gt;        {&lt;br /&gt;            // The leak happens all at once&lt;br /&gt;            AttachEvents(document.getElementById("LeakedDiv"));&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        function BreakLeak()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;        &amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;/head\&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;body onload="SetupLeak()" onunload="BreakLeak()"&amp;gt;&lt;br /&gt;        &amp;lt;div id="LeakedDiv"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;O problema&lt;/b&gt;&lt;p align="justify"&gt;Outro artigo que li era de um membro da equipe de desenvolvimento do IE, &lt;a href="http://weblogs.asp.net/justin_rogers/"&gt;Justin Rogers&lt;/a&gt;. Ele resume o problema de vazamentos com closures muito bem:&lt;blockquote&gt;Com referências circulares normais nós temos 2 objetos concretos segurando um a referência do outro, mas com closures é diferente. Além de fazer referência diretamente, elas são feitas importando informações do escopo da sua função pai. Normalmente uma variável global da função, e parâmetros utilizados quando a função é invocada existem somente pelo ciclo de vida da função em si. Com closures essas variáveis e paramêtros continuam a ter uma referência prolongada enquanto a closures está viva; e como closures podem permaner vivas além do tempo de vida de suas funções pais, o mesmo ocorre com qualquer uma dessas variáveis e paramêtros.&lt;/blockquote&gt;&lt;/p&gt;&lt;b&gt;A solução&lt;/b&gt;&lt;p align="justify"&gt;Nesse caso a solução não é tão óbvia assim. Isso porque usamos uma função anônima, não guardamos sua referência e por isso não podemos removê-la. Uma solução proposta por &lt;a href="http://siteexperts.spaces.live.com/blog/"&gt;Scott Isaacs&lt;/a&gt; em seu blog é guardar a referência da função no elemento para depois poder remover:&lt;/p&gt;&lt;pre class="prettyprint"&gt;function DoThis()&lt;br /&gt;{&lt;br /&gt; var el = document.createElement("div");&lt;br /&gt; &lt;br /&gt; el.attachEvent("onclick",DoThis);&lt;br /&gt; window.attachEvent("onunload",Cleanup);&lt;br /&gt; &lt;br /&gt; function DoThis()&lt;br /&gt; {&lt;br /&gt;  alert("clicked");&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; function Cleanup()&lt;br /&gt; {&lt;br /&gt;  el.detachEvent("onclick",DoThis);&lt;br /&gt;  window.detachEvent("onunload",Cleanup);&lt;br /&gt;  el = null;&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;h4&gt;Concluindo&lt;/h4&gt;&lt;p align="justify"&gt;Na realidade um assunto como esse deve ser praticado e estudado constantemente. Acredito não ter escrito um guia completo mas ao menos ter conseguido lhe colocar em um rumo muito melhor de desenvolvimento. Ainda irei abordar mais sobre isso aqui no framebox, mas por enquanto fiquem com essas dicas e alguns links de recursos que utilizei. Forte abraço e até o próximo post.&lt;/p&gt;&lt;h4&gt;Referências&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://javascript.crockford.com/memory/leak.html"&gt;Douglas Crockford - JScript Memory Leaks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.apple.com/documentation/scriptingautomation/Conceptual/JSCodingGuide/Advanced/Advanced.html"&gt;Apple JavaScript Best Practices - Memory and Performance Considerations&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://laurens.vd.oever.nl/weblog/items2005/closures/"&gt;Laurens van den Oever - Leak Free Javascript Closures&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://siteexperts.spaces.live.com/Blog/cns!1pNcL8JwTfkkjv4gg6LkVCpw!338.entry?sa=718311879"&gt;Scott Isaacs - Closures and IE Circular References&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb250448(VS.85).aspx"&gt;Justin Rogers - Understanding and Solving Internet Explorer Leak Patterns&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-8354451080969012313?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wp4IYNE0xftUm6Mt4E0lu5IK8W4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wp4IYNE0xftUm6Mt4E0lu5IK8W4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wp4IYNE0xftUm6Mt4E0lu5IK8W4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wp4IYNE0xftUm6Mt4E0lu5IK8W4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=ow8NvxYRhiw:ufo6f9c2X-Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=ow8NvxYRhiw:ufo6f9c2X-Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=ow8NvxYRhiw:ufo6f9c2X-Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=ow8NvxYRhiw:ufo6f9c2X-Q:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=ow8NvxYRhiw:ufo6f9c2X-Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=ow8NvxYRhiw:ufo6f9c2X-Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=ow8NvxYRhiw:ufo6f9c2X-Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/ow8NvxYRhiw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/ow8NvxYRhiw/tudo-sobre-vazamento-de-memoria.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_skhagAROKQU/SnwMPCdXDvI/AAAAAAAAAQI/pua9S3cw4zw/s72-c/circular_pattern.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/08/tudo-sobre-vazamento-de-memoria.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-8607582609244498101</guid><pubDate>Wed, 05 Aug 2009 10:40:00 +0000</pubDate><atom:updated>2009-08-05T07:50:21.673-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CSS</category><title>Rotacionando texto com CSS</title><description>&lt;div align="justify"&gt;Algumas vezes quis fazer isso mas não sabia como. Essa semana vi no blog de &lt;a href="http://twitter.com/snookca"&gt;Jonathan Snook&lt;/a&gt; uma solução usando 100% CSS que funciona em todos browsers modernos, incluindo IE =D&lt;br /&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;&amp;lt;div class="example-date"&amp;gt;&lt;br /&gt; &amp;lt;span class="day"&amp;gt;31&amp;lt;/span&amp;gt; &lt;br /&gt; &amp;lt;span class="month"&amp;gt;July&amp;lt;/span&amp;gt; &lt;br /&gt; &amp;lt;span class="year"&amp;gt;2009&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;-webkit-transform: rotate(-90deg); &lt;br /&gt;-moz-transform: rotate(-90deg);&lt;br /&gt;filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-8607582609244498101?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7RbBEyO3zwUQPpVEWHeSfdqaI4k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7RbBEyO3zwUQPpVEWHeSfdqaI4k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7RbBEyO3zwUQPpVEWHeSfdqaI4k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7RbBEyO3zwUQPpVEWHeSfdqaI4k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=4XxeJ0J0Z5U:o116lJ3UBwE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=4XxeJ0J0Z5U:o116lJ3UBwE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=4XxeJ0J0Z5U:o116lJ3UBwE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=4XxeJ0J0Z5U:o116lJ3UBwE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=4XxeJ0J0Z5U:o116lJ3UBwE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=4XxeJ0J0Z5U:o116lJ3UBwE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=4XxeJ0J0Z5U:o116lJ3UBwE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/4XxeJ0J0Z5U" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/4XxeJ0J0Z5U/rotacionando-texto-com-css.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/07/rotacionando-texto-com-css.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-3517278863851542446</guid><pubDate>Mon, 03 Aug 2009 10:34:00 +0000</pubDate><atom:updated>2009-08-03T07:37:33.649-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Javascript Profissional</category><title>Aprenda o que é Javascript Closures</title><description>&lt;a href="http://1.bp.blogspot.com/_skhagAROKQU/SnMA1k6psvI/AAAAAAAAAP4/_cmoHJEJPjg/s1600-h/JS_for_Dummies.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5364632501571138290" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 392px; CURSOR: hand; HEIGHT: 320px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_skhagAROKQU/SnMA1k6psvI/AAAAAAAAAP4/_cmoHJEJPjg/s400/JS_for_Dummies.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align="justify"&gt;Muito tempo atrás (&lt;a href="http://framebox.blogspot.com/2008/09/javascript-closures.html"&gt;o segunto post do blog&lt;/a&gt;) eu abordei um tema muito bacana de Javascript: Closures. Alguns dias atrás, encontrei uma outra abordagem do assunto, um tanto quanto informativa e de nome cômico. Morris Johns é o autor de &lt;a href="http://blog.morrisjohns.com/javascript_closures_for_dummies"&gt;Javascript Closures for Dummies&lt;/a&gt;, uma abordagem completa de como dominar esse recurso poderoso de Javascript. Ele começa testando nossos conhecimentos:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;Este artigo é destinado a programadores com alguma experiência, e que consegue ler a seguinte função Javascript :&lt;pre class="prettyprint"&gt;function sayHello(name) {&lt;br /&gt;&lt;br /&gt;  var text = 'Hello ' + name;&lt;br /&gt;&lt;br /&gt;  var sayAlert = function() { alert(text); }&lt;br /&gt;&lt;br /&gt;  sayAlert();&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;E continua com uma série de exemplos e explicações como este:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre class="prettyprint"&gt;function sayAlice() {&lt;br /&gt;&lt;br /&gt;  var sayAlert = function() { alert(alice); }&lt;br /&gt;&lt;br /&gt;  // Local variable that ends up within closure&lt;br /&gt;  var alice = 'Hello Alice';&lt;br /&gt;&lt;br /&gt;  return sayAlert;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p align="justify"&gt;Infelizmente o artigo está em inglês. Para os que não simpatizam com o idioma sugiro ainda sim checar o site porque os exemplos explicam tudo.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-3517278863851542446?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b0J1O2QjrdOmWydrnoV9YvoiE84/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b0J1O2QjrdOmWydrnoV9YvoiE84/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b0J1O2QjrdOmWydrnoV9YvoiE84/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b0J1O2QjrdOmWydrnoV9YvoiE84/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=qSQZgcjIx_A:iyZcyWL9V10:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=qSQZgcjIx_A:iyZcyWL9V10:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=qSQZgcjIx_A:iyZcyWL9V10:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=qSQZgcjIx_A:iyZcyWL9V10:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=qSQZgcjIx_A:iyZcyWL9V10:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=qSQZgcjIx_A:iyZcyWL9V10:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=qSQZgcjIx_A:iyZcyWL9V10:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/qSQZgcjIx_A" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/qSQZgcjIx_A/aprenda-o-que-e-javascript-closures.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_skhagAROKQU/SnMA1k6psvI/AAAAAAAAAP4/_cmoHJEJPjg/s72-c/JS_for_Dummies.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/05/aprenda-o-que-e-javascript-closures.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-1025517059036411390</guid><pubDate>Thu, 30 Jul 2009 15:31:00 +0000</pubDate><atom:updated>2009-07-30T12:43:44.348-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Javascript Profissional</category><title>JSONP e vazamento de memória</title><description>&lt;p align="justify"&gt;&lt;a href="http://neil.fraser.name/"&gt;Neil Fraser&lt;/a&gt; fez um ótimo post em seu blog falando sobre como a técnica de carregamento de javascript dinâmico JSONP pode causar vazamentos de memória nos browsers.&lt;/p&gt;&lt;p align="justify"&gt;JSONP é o nome da técnica onde criamos um elemento script, definimos o src e inserimos no head da página, ocasionando assim um carregamento dinâmico do seu conteúdo:&lt;/p&gt;&lt;pre class="prettyprint"&gt;//cria elemento script&lt;br /&gt;var script = document.createElement('script');&lt;br /&gt;script.src = 'http://example.com/cgi-bin/jsonp?q=What+is+the+meaning+of+life%3F';&lt;br /&gt;script.id = 'JSONP';&lt;br /&gt;script.type = 'text/javascript';&lt;br /&gt;script.charset = 'utf-8';&lt;br /&gt;&lt;br /&gt;//adiciona no head, ocasionando seu carregamento&lt;br /&gt;var head = document.getElementsByTagName('head')[0];&lt;br /&gt;head.appendChild(script);&lt;/pre&gt;&lt;p align="justify"&gt;Não entrarei em detalhes, tudo isso funciona muito bem. O problema é que depois de alguns carregamentos o header da sua página pode estar cheio de tags &amp;lt;script&amp;gt;. Uma boa solução seria remover o elemento, assim que seu conteúdo foi extraido:&lt;/p&gt;&lt;pre class="prettyprint"&gt;// Remove velhas tags scripts&lt;br /&gt;var script;&lt;br /&gt;while (script = document.getElementById('JSONP')) {&lt;br /&gt;   script.parentNode.removeChild(script);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p align="justify"&gt;O problema, segundo Neil, é que apesar do browser se livrar do elemento, o objeto dele continua ocupando espaço em memória. Neil então propõe uma solução que diz funcionar perfeitamente:&lt;/p&gt;&lt;pre class="prettyprint"&gt;// Remove velhas tags scripts&lt;br /&gt;  var script;&lt;br /&gt;  while (script = document.getElementById('JSONP')) {&lt;br /&gt;    script.parentNode.removeChild(script);&lt;br /&gt;    // Browsers não coletam isso no garbage colletor.&lt;br /&gt;    // Então remove tudo para evitar isso&lt;br /&gt;    for (var prop in script) {&lt;br /&gt;      delete script[prop];&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;p align="justify"&gt;Remover o elemento e se livrar de suas propriedades. Enfim, a dica está dada. Mais detalhes podem ser vistos no &lt;a href="http://neil.fraser.name/news/2009/07/27/"&gt;post oficial&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-1025517059036411390?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QtJ3SeYYOFhey1EvpXRxd-kiZ6A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QtJ3SeYYOFhey1EvpXRxd-kiZ6A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QtJ3SeYYOFhey1EvpXRxd-kiZ6A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QtJ3SeYYOFhey1EvpXRxd-kiZ6A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=oGT97Y9zulk:zHerEeSbKWI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=oGT97Y9zulk:zHerEeSbKWI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=oGT97Y9zulk:zHerEeSbKWI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=oGT97Y9zulk:zHerEeSbKWI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=oGT97Y9zulk:zHerEeSbKWI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=oGT97Y9zulk:zHerEeSbKWI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=oGT97Y9zulk:zHerEeSbKWI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/oGT97Y9zulk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/oGT97Y9zulk/jsonp-e-vazamento-de-memoria.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/07/jsonp-e-vazamento-de-memoria.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-8128867511236328037</guid><pubDate>Mon, 27 Jul 2009 12:35:00 +0000</pubDate><atom:updated>2009-07-27T09:44:08.630-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Aplicações Web</category><category domain="http://www.blogger.com/atom/ns#">Web News</category><title>5 Calendários de Eventos Ajax</title><description>&lt;p align="justify"&gt;Se existe um componente difícil de se construir é um calendário. Não um calendário qualquer, tabular com dias do mês. Digo um calendário cheio de recursos, com drag 'n drop, gerenciamento de eventos e etc...&lt;/p&gt;&lt;p align="justify"&gt;Justamente foi essa dificuldade que levou Theresa Neil a escrever um post entitulado &lt;a href="http://designingwebinterfaces.com/ajax-event-calendars"&gt;5 bons calendários de eventos AJAX (Five Nice Ajax Event Calendars)&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p align="justify"&gt;Semana passada eu precisei encontrar um Calendário de Eventos Ajax robusto, similar ao iCal ou Google Calendar. Depois de horas de pesquisa, percebi que isso era mais difícil do que deveria ser.&lt;br /&gt;Existe um grande número de calendários que foram prototipados em 2005-2007 mas nunca amadureceram. Muitos desses links estão quebrados ou sem uso hoje em dia. E, quando você pesquisa por Calendário Ajax, a maioria dos resultados são seletores de data - não componentes de cronograma completos.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Para ver a lista dos 5 e a análise de Theresa, visite o link original.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-8128867511236328037?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3RmSyV5vCTc5Pr8YReExwlsQkYs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3RmSyV5vCTc5Pr8YReExwlsQkYs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3RmSyV5vCTc5Pr8YReExwlsQkYs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3RmSyV5vCTc5Pr8YReExwlsQkYs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=AwYJ_LtRCiM:3NjP3pvKs6k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=AwYJ_LtRCiM:3NjP3pvKs6k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=AwYJ_LtRCiM:3NjP3pvKs6k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=AwYJ_LtRCiM:3NjP3pvKs6k:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=AwYJ_LtRCiM:3NjP3pvKs6k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=AwYJ_LtRCiM:3NjP3pvKs6k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=AwYJ_LtRCiM:3NjP3pvKs6k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/AwYJ_LtRCiM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/AwYJ_LtRCiM/5-calendarios-de-eventos-ajax.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/07/5-calendarios-de-eventos-ajax.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-2597822878830940206</guid><pubDate>Wed, 22 Jul 2009 18:54:00 +0000</pubDate><atom:updated>2009-07-22T15:58:48.267-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Performance</category><title>Boas práticas Javascript segundo Apple</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_skhagAROKQU/SmdhQj-OZ6I/AAAAAAAAAPo/3q7rtF0firk/s1600-h/developer_connection_title.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 245px; height: 30px;" src="http://2.bp.blogspot.com/_skhagAROKQU/SmdhQj-OZ6I/AAAAAAAAAPo/3q7rtF0firk/s400/developer_connection_title.gif" alt="" id="BLOGGER_PHOTO_ID_5361360818569897890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Procurando informações sobre performance, consumo de memória e afins, encontrei um "Guide code" muito interessante da Apple que gostaria de divulgar :&lt;br /&gt;&lt;br /&gt;Apple JavaScript Coding Guidelines &lt;a href="http://developer.apple.com/documentation/ScriptingAutomation/Conceptual/JSCodingGuide/Introduction/Introduction.html"&gt;(Html)&lt;/a&gt; &lt;a href="http://developer.apple.com/documentation/ScriptingAutomation/Conceptual/JSCodingGuide/JSCodingGuide.pdf"&gt;(PDF)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-2597822878830940206?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_6krAasnylCd3i6m5ZpmFzodWSk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_6krAasnylCd3i6m5ZpmFzodWSk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_6krAasnylCd3i6m5ZpmFzodWSk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_6krAasnylCd3i6m5ZpmFzodWSk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=pazGj2rwFgQ:MWn-7Su04Rg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=pazGj2rwFgQ:MWn-7Su04Rg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=pazGj2rwFgQ:MWn-7Su04Rg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=pazGj2rwFgQ:MWn-7Su04Rg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=pazGj2rwFgQ:MWn-7Su04Rg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=pazGj2rwFgQ:MWn-7Su04Rg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=pazGj2rwFgQ:MWn-7Su04Rg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/pazGj2rwFgQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/pazGj2rwFgQ/boas-praticar-javascript-segundo-apple.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_skhagAROKQU/SmdhQj-OZ6I/AAAAAAAAAPo/3q7rtF0firk/s72-c/developer_connection_title.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/07/boas-praticar-javascript-segundo-apple.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-328829485564334578</guid><pubDate>Mon, 20 Jul 2009 13:32:00 +0000</pubDate><atom:updated>2009-07-20T10:36:37.406-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web News</category><title>ExtDesenv: o blog de Ext JS</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.extdesenv.blogspot.com/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 297px; height: 144px;" src="http://1.bp.blogspot.com/_skhagAROKQU/SmRysXOd8JI/AAAAAAAAAPg/BCQCHxIjmj8/s400/extDesenv_logo.jpg" alt="" id="BLOGGER_PHOTO_ID_5360535562952241298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;É um pouco tarde para anunciar a criação de um blog que já têm alguns meses de postagens, porém me esqueci de fazê-lo aqui no framebox :) &lt;a href="http://www.extdesenv.blogspot.com/"&gt;ExtDesenv&lt;/a&gt;, meu outro blog que criei para direcionar posts sobre o framework Ext. Sendo assim o framebox continua com sua missão de anunciar as novidades do desenvolvimento web, e o ExtDesenv anunciando as novidades do desenvolvimento Ext JS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-328829485564334578?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ncIVdP2dNs9BFJKxBH2F4GKGbqs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ncIVdP2dNs9BFJKxBH2F4GKGbqs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ncIVdP2dNs9BFJKxBH2F4GKGbqs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ncIVdP2dNs9BFJKxBH2F4GKGbqs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=32GN0k92CLI:rg6J8N0Zkbw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=32GN0k92CLI:rg6J8N0Zkbw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=32GN0k92CLI:rg6J8N0Zkbw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=32GN0k92CLI:rg6J8N0Zkbw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=32GN0k92CLI:rg6J8N0Zkbw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=32GN0k92CLI:rg6J8N0Zkbw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=32GN0k92CLI:rg6J8N0Zkbw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/32GN0k92CLI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/32GN0k92CLI/extdesenv-o-blog-de-ext-js.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_skhagAROKQU/SmRysXOd8JI/AAAAAAAAAPg/BCQCHxIjmj8/s72-c/extDesenv_logo.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/07/extdesenv-o-blog-de-ext-js.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-2738113169637787070</guid><pubDate>Mon, 13 Jul 2009 11:55:00 +0000</pubDate><atom:updated>2009-07-13T09:00:22.240-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Javascript Profissional</category><title>Javascript GOTO</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_skhagAROKQU/SlshRiI-G4I/AAAAAAAAAPY/1DhED4o0-_w/s1600-h/goto.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 438px; height: 119px;" src="http://2.bp.blogspot.com/_skhagAROKQU/SlshRiI-G4I/AAAAAAAAAPY/1DhED4o0-_w/s400/goto.png" alt="" id="BLOGGER_PHOTO_ID_5357912766793259906" border="0" /&gt;&lt;/a&gt;Sim, eu sei que as coisas andam meio paradas por aqui no framebox. Muitos afazeres da vida de um desenvolver implicam nisso. Mas espero que me desculpem (:&lt;br /&gt;&lt;br /&gt;Aí vai uma novidade que li no ajaxian.com: Como fazer um GOTO no javascript&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre class="prettyprint"&gt;&amp;lt;script type="text/jsplusgoto"&amp;gt;&lt;br /&gt;var a = 0;&lt;br /&gt;[lbl] topOfLoop:&lt;br /&gt;a++;&lt;br /&gt;&lt;br /&gt;if (a &amp;lt;292 ){&lt;br /&gt;   goto topOfLoop;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;document.getElementById('relevantLink').setAttribute('href', 'http://www.xkcd.com/' + a);&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ajaxian.com/archives/goto-is-here"&gt;Post Original pode ser visto neste link.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-2738113169637787070?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/si9-BFkRf2LoaD2kIqgnJgnC6Zc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/si9-BFkRf2LoaD2kIqgnJgnC6Zc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/si9-BFkRf2LoaD2kIqgnJgnC6Zc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/si9-BFkRf2LoaD2kIqgnJgnC6Zc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=751ZXutWJbk:DL5dyry0pTw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=751ZXutWJbk:DL5dyry0pTw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=751ZXutWJbk:DL5dyry0pTw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=751ZXutWJbk:DL5dyry0pTw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=751ZXutWJbk:DL5dyry0pTw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=751ZXutWJbk:DL5dyry0pTw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=751ZXutWJbk:DL5dyry0pTw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/751ZXutWJbk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/751ZXutWJbk/javascript-goto.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_skhagAROKQU/SlshRiI-G4I/AAAAAAAAAPY/1DhED4o0-_w/s72-c/goto.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/07/javascript-goto.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-2512425575104957225</guid><pubDate>Mon, 04 May 2009 11:42:00 +0000</pubDate><atom:updated>2009-05-04T08:48:22.719-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ferramentas</category><title>FireRainbow: Code Highlighting para FireBug</title><description>&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/9603"&gt;&lt;img id="BLOGGER_PHOTO_ID_5331934200483755218" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 300px; CURSOR: hand; HEIGHT: 276px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_skhagAROKQU/Sf7V59GXNNI/AAAAAAAAAOw/MiGoz0pqQH0/s320/firerainbow.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;Navegando por fóruns encontrei este ótimo adicional para o tão útil Firebug, o &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/9603"&gt;FireRainbow&lt;/a&gt;. &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-2512425575104957225?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0xiFns1HSt664fIkGJP6LYyQNnI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0xiFns1HSt664fIkGJP6LYyQNnI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0xiFns1HSt664fIkGJP6LYyQNnI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0xiFns1HSt664fIkGJP6LYyQNnI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=E9Phit-mqC8:Y_BraCJ2P54:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=E9Phit-mqC8:Y_BraCJ2P54:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=E9Phit-mqC8:Y_BraCJ2P54:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=E9Phit-mqC8:Y_BraCJ2P54:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=E9Phit-mqC8:Y_BraCJ2P54:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=E9Phit-mqC8:Y_BraCJ2P54:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=E9Phit-mqC8:Y_BraCJ2P54:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/E9Phit-mqC8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/E9Phit-mqC8/firerainbow-code-highlighting-para.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_skhagAROKQU/Sf7V59GXNNI/AAAAAAAAAOw/MiGoz0pqQH0/s72-c/firerainbow.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/05/firerainbow-code-highlighting-para.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-7323409505136611379</guid><pubDate>Sat, 11 Apr 2009 16:14:00 +0000</pubDate><atom:updated>2009-04-11T15:00:15.447-03:00</atom:updated><title>+ 5 dicas de CSS</title><description>&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PZf0wMGOI8I/SeDCFuzGoeI/AAAAAAAAAA8/JYgK2mEg2kg/s1600-h/5DICAS.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 109px;" src="http://3.bp.blogspot.com/_PZf0wMGOI8I/SeDCFuzGoeI/AAAAAAAAAA8/JYgK2mEg2kg/s320/5DICAS.gif" alt="" id="BLOGGER_PHOTO_ID_5323468163269435874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Começo hoje uma uma série de posts sobre CSS. Nem sempre as CSS são tão fáceis de se lidar como se pensa. Muitas vezes elas podem ser problema na criação do site.&lt;br /&gt;&lt;br /&gt;Revisando minha pequena experiência usando as CSS, separei algumas dicas pra postar e tentar ajudar quem esta enfrentando dificuldades, o tema que vou focalizar nesse post é &lt;span style="font-weight: bold;"&gt;Organização&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Resete todos os valores.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Todo o Browser possui valores padrões,  um erro muito típico que ainda vejo é que alguns desenvolvedores ainda não resetam esses valores, o que torna o posicionamento dos elementos mais complexo.&lt;br /&gt;&lt;br /&gt;Eu reseto meu CSS assim:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;* {&lt;br /&gt;margin: 0;&lt;br /&gt;padding: 0;&lt;br /&gt;list-style: none;&lt;br /&gt;vertical-align: baseline;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;A função do asterísco é simples, a declaração contidas nele sera aplicada em todos os outros seletores.&lt;br /&gt;&lt;br /&gt;Lembrando que a sintaxe da regra CSS acontece da seguinte forma:&lt;br /&gt;seletor { propriedade: valor; }&lt;br /&gt;Tudo o que esta escrito entre as chaves {} é considerado a declaração.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Use uma folha mestre.&lt;/span&gt;&lt;br /&gt;&lt;pre class="xhtml"&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;@import url("global.css");&lt;br /&gt;@import url("topo.css");&lt;br /&gt;@import url("conteudo.css");&lt;br /&gt;@import url("base.css");&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Assim além de organizar melhor as folhas você tera um re-design facilitado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Para estilizar use class não id.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Apênas uma observação, não uma regra. Pessoalmente uso apênas class para estilizar, semâticamente falando, o atributo ID só pode ser usado uma vez no documento HTML, e muitas vezes preciso repetir o mesmo seletor em várias tags.&lt;br /&gt;&lt;br /&gt;Caso coloque várias ID, tenha cuidado com as âncoras e com o getElementByID, do DOM.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;- Evite classificar todas as tags.&lt;/span&gt;&lt;br /&gt;&lt;pre class="xhtml"&gt;&lt;div class="borda"&gt;&lt;pre class="xhtml"&gt;&lt;span&gt;&lt;span&gt;div class=borda&lt;br /&gt;span class=texto&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;.borda  { declaração }&lt;/pre&gt;&lt;/div&gt;.texto { declaração }&lt;br /&gt;&lt;/pre&gt; Poderia ser substituido por:&lt;br /&gt;&lt;pre class="xhtml"&gt;&lt;div&gt;&lt;span&gt;div&lt;br /&gt;span&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;div { declaração }&lt;br /&gt;&lt;br /&gt;div span { declaração }&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;- Separe seu CSS em Blocos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este pode ser o senso comum a entre nós webdesigners, mas às vezes eu olho no CSS de algumas páginas e bão consigo entender o que certo elemento faz, ou pra que serve. Dividindo o código em blocos você encontrará as classes e elementos que você precisa mudar rapidamente.&lt;br /&gt;&lt;br /&gt;Pesoalmente sigo um modelo, tentando deixar o código mais simples possível:&lt;br /&gt;&lt;p&gt;&lt;code&gt;/* Global */&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;/* Principal */&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;/* Links */&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;/* Tipografia, Listas, imagens, etc. */&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-7323409505136611379?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2gffbhZNyyUK6EjItu4mZasumEg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2gffbhZNyyUK6EjItu4mZasumEg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2gffbhZNyyUK6EjItu4mZasumEg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2gffbhZNyyUK6EjItu4mZasumEg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=AilmTeZGODI:zoBr_QCclhI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=AilmTeZGODI:zoBr_QCclhI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=AilmTeZGODI:zoBr_QCclhI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=AilmTeZGODI:zoBr_QCclhI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=AilmTeZGODI:zoBr_QCclhI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=AilmTeZGODI:zoBr_QCclhI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=AilmTeZGODI:zoBr_QCclhI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/AilmTeZGODI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/AilmTeZGODI/comeco-hoje-uma-uma-serie-de-posts.html</link><author>noreply@blogger.com (Elvis Oliveira)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_PZf0wMGOI8I/SeDCFuzGoeI/AAAAAAAAAA8/JYgK2mEg2kg/s72-c/5DICAS.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/04/comeco-hoje-uma-uma-serie-de-posts.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-6117564461216161030</guid><pubDate>Fri, 10 Apr 2009 15:38:00 +0000</pubDate><atom:updated>2009-04-10T12:52:28.988-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CMS</category><title>CMS</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PZf0wMGOI8I/Sd9ogmbjAzI/AAAAAAAAAA0/bvskeVLT68Y/s1600-h/ES.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 60px;" src="http://3.bp.blogspot.com/_PZf0wMGOI8I/Sd9ogmbjAzI/AAAAAAAAAA0/bvskeVLT68Y/s320/ES.jpg" alt="" id="BLOGGER_PHOTO_ID_5323088193856406322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Faço minhas as palavres de &lt;a href="http://twitter.com/erikasarti"&gt;Erika Sarti&lt;/a&gt;, as vezes é realmente um problema, pelo menos pra mim que uso o &lt;a href="http://drupal.org/"&gt;Drupal&lt;/a&gt;. É sempre complicado dar acesso ao meu cliente sem ele me encher de perguntas, ou sem ele futucar nas funções que não deve e desconfigurar todo CMS.&lt;br /&gt;&lt;br /&gt;Usar o Drupal pra criar o site do "zé do buteco" é como usar uma bazuca pra matar uma barata.&lt;br /&gt;&lt;br /&gt;Depos de várias tentativas com CMS menores, como &lt;a href="http://tangocms.org/"&gt;tangoCMS&lt;/a&gt; e &lt;a href="http://www.speaklight.com/"&gt;LightCMS&lt;/a&gt;, eu não via aplicação prática desses CMS em nenhum de meus clientes.&lt;br /&gt;&lt;br /&gt;Felizmente eu encontrei um CMS que resolveu meus problemas, o &lt;a href="http://www.getpixie.co.uk/"&gt;Pixie&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;"Pixie não é tão completo como outros sistemas de gerenciamento de sites. Nosso objetivo principal é torna-lo tão simples que até a sua avó poderia ser capaz de usa-lo. Porém não deixando de fornecer uma ferramenta poderosa." - Equipe Pixie&lt;br /&gt;&lt;br /&gt;Entre suas principais característica estão a facil instalação, gerenciamento simplificado e um suporte completo para criação de temas com CSS, na minha opinião o mais facil de estilizar, comparando com o Drupal, Joomla e WP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-6117564461216161030?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SQAKxefT38qOJiMzdaSa9Xl4LaY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SQAKxefT38qOJiMzdaSa9Xl4LaY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SQAKxefT38qOJiMzdaSa9Xl4LaY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SQAKxefT38qOJiMzdaSa9Xl4LaY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=zM54Enu7YkE:_sm_HK1X1eI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=zM54Enu7YkE:_sm_HK1X1eI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=zM54Enu7YkE:_sm_HK1X1eI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=zM54Enu7YkE:_sm_HK1X1eI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=zM54Enu7YkE:_sm_HK1X1eI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=zM54Enu7YkE:_sm_HK1X1eI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=zM54Enu7YkE:_sm_HK1X1eI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/zM54Enu7YkE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/zM54Enu7YkE/cms.html</link><author>noreply@blogger.com (Elvis Oliveira)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_PZf0wMGOI8I/Sd9ogmbjAzI/AAAAAAAAAA0/bvskeVLT68Y/s72-c/ES.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/04/cms.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-315706513744455458</guid><pubDate>Fri, 10 Apr 2009 06:12:00 +0000</pubDate><atom:updated>2009-04-10T03:34:22.228-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ferramentas</category><category domain="http://www.blogger.com/atom/ns#">CSS</category><title>De volta a ativa! IE6!</title><description>Depois de praticamente dois mêses no limbo, volto a postar no frameBox. Pelo menos dessa vez vou tentra manter alguma regularidade nas postagens sobre web design.&lt;br /&gt;Isso aqui ta parecendo um deserto.&lt;br /&gt;&lt;br /&gt;Por mais mirabolantes que sejam os fix dos diversos bugs do IE6, infelizmente até hoje ele ainda nos assombra, muitos desenvolvedores estão ignorando, mas para aqueles que ainda testam seus sites no IE6  (testando também sua paciência), surgiu uma nova ferramenta que promete reduzir o tempo de adaptação do CSS.&lt;br /&gt;&lt;br /&gt;O &lt;a href="http://www.onderhond.com/tools/ie6fixer/"&gt;IE6 CSS Fixer&lt;/a&gt; não é uma solução completa, por ainda estar em testes. Mas fornece a correção pros problemas mais comuns.&lt;br /&gt;&lt;br /&gt;Apênas cole o CSS e ele fará a conversão. Simples assim.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-315706513744455458?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rntuIk6H6_mP32CmCQvaCncs_Xk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rntuIk6H6_mP32CmCQvaCncs_Xk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rntuIk6H6_mP32CmCQvaCncs_Xk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rntuIk6H6_mP32CmCQvaCncs_Xk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=c33bPiI08hQ:H1BC4rUQ4a8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=c33bPiI08hQ:H1BC4rUQ4a8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=c33bPiI08hQ:H1BC4rUQ4a8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=c33bPiI08hQ:H1BC4rUQ4a8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=c33bPiI08hQ:H1BC4rUQ4a8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=c33bPiI08hQ:H1BC4rUQ4a8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=c33bPiI08hQ:H1BC4rUQ4a8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/c33bPiI08hQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/c33bPiI08hQ/de-volta-ativa-ie6.html</link><author>noreply@blogger.com (Elvis Oliveira)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/04/de-volta-ativa-ie6.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-3866350122797767256</guid><pubDate>Fri, 27 Feb 2009 10:57:00 +0000</pubDate><atom:updated>2009-02-27T08:24:48.619-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Appcelerator Titanium</category><category domain="http://www.blogger.com/atom/ns#">Adobe Air</category><title>Appcelerator Titanium: um concorrete para Adobe Air</title><description>&lt;a href="http://titaniumapp.com/"&gt;&lt;img id="BLOGGER_PHOTO_ID_5307432333263182626" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 58px; CURSOR: hand; HEIGHT: 50px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_skhagAROKQU/SafJlk2TGyI/AAAAAAAAAMQ/pDjfM0MH1v8/s320/logo.png" border="0" /&gt;&lt;/a&gt;&lt;p align="justify"&gt;Titanium é o nome da plataforma de desenvolvimento que possibilita criação de aplicações desktop com linguagens web. Se isto lhes lembra algo seria o Adobe Air. A proposta é a mesma porém o Titanium se difere em certos pontos.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Open source&lt;br /&gt;Titanium é licenciado sob Apace Public Licence (Versão 2)&lt;/li&gt;&lt;li&gt;Open web&lt;br /&gt;Utiliza HTML, CSS e Javascript para construir aplicações desktop ricas.&lt;/li&gt;&lt;li&gt;Open desktop&lt;br /&gt;Execute suas aplicações em Windows, Mac e Linux&lt;/li&gt;&lt;li&gt;Open API&lt;br /&gt;Adicione funcionalidades ricas de desktop às suas aplicações utilizando simplesmente API Javascript&lt;/li&gt;&lt;/ul&gt;&lt;h5&gt;O que é&lt;/h5&gt;&lt;blockquote&gt;&lt;p align="justify"&gt;Appcelerator Titanium é uma plataforma open source para desenvolvimento e encapsulamento de aplicações ricas desktop utilizando tecnologias Open Web como HTML, CSS e Javascript&lt;/p&gt;&lt;p align="justify"&gt;A API Javascript do Titanium é utilizada em conjunto com HTML, CSS e Javascript para proporcionar habilidades de desktop à sua aplicação.&lt;/p&gt;&lt;p align="justify"&gt;Titanium também vêm com um prompt de comando simples para criar projetos e encapsular sua aplicação em um arquivo executável&lt;/p&gt;&lt;p align="justify"&gt;Atualmente, Titanium suporta a criação de aplicações desktop para Microsoft Windows e Mac OSX. Estamos trabalhando ainda numa versão para Linux. &lt;/p&gt;&lt;/blockquote&gt;&lt;h5&gt;Como Titanium se compara ao Adobe Air?&lt;/h5&gt;&lt;blockquote&gt;&lt;p align="justify"&gt;Fundamentalmente ambos são similares. Ambos, Titanium e AIR são grátis, ambos são construídos em cima de WebKit engine open source, e ambos suportam o desenvolvimento de aplicações desktop utilizando tecnologias Web padrões.&lt;/p&gt;&lt;p align="justify"&gt;A diferença mais significante entre os dois é que Titanium é open source e Adobe Air não. Como resultado acreditamos que podemos atrair a vasta comunidade open source acerca do Titanium, o que o ajudará a crescer e amadurecer para uma solução líder em construição de aplicações desktop ricas e aplicações para dispositivos móveis&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-3866350122797767256?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0DU2ffgsEE-CmrJRYShqRV89YN0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0DU2ffgsEE-CmrJRYShqRV89YN0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0DU2ffgsEE-CmrJRYShqRV89YN0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0DU2ffgsEE-CmrJRYShqRV89YN0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=tASddYW4nHE:vk9gY22dK-E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=tASddYW4nHE:vk9gY22dK-E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=tASddYW4nHE:vk9gY22dK-E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=tASddYW4nHE:vk9gY22dK-E:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=tASddYW4nHE:vk9gY22dK-E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?i=tASddYW4nHE:vk9gY22dK-E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Framebox?a=tASddYW4nHE:vk9gY22dK-E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Framebox?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/tASddYW4nHE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/tASddYW4nHE/appcelerator-titanium-um-concorrete.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_skhagAROKQU/SafJlk2TGyI/AAAAAAAAAMQ/pDjfM0MH1v8/s72-c/logo.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/02/appcelerator-titanium-um-concorrete.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-8411255887831514408</guid><pubDate>Tue, 17 Feb 2009 19:40:00 +0000</pubDate><atom:updated>2009-02-18T08:08:38.536-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ExtJS</category><title>Livros sobre o framework Ext JS</title><description>&lt;p align="justify"&gt;Fala galera! Após 1 mês ausente estou retornando de férias com força total, abordando agora sobre uma boa novidade para todos os integrantes da comunidade de desenvolvedores Ext JS: foi lançado neste mês o livro &lt;em&gt;Ext JS in Action &lt;/em&gt;(Ext JS em Ação) de Jesus Garcia. Este livro agrega ainda mais ao framework juntamente com o outro livro sobre o assunto, &lt;em&gt;Learning Ext JS &lt;/em&gt;(Aprendendo Ext JS), lançado em dezembro de 2008.&lt;/p&gt;&lt;p&gt;Para maiores informações acesse:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Ext JS in Action: &lt;a href="http://extjs.com/forum/showthread.php?t=59574" target="_blank"&gt;Post Fórum Ext&lt;/a&gt;, &lt;a href="http://www.manning.com/garcia/" target="_blank"&gt;Página Editora&lt;/a&gt;&lt;/li&gt;&lt;img id="BLOGGER_PHOTO_ID_5303856219106865330" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 150px; CURSOR: hand; HEIGHT: 188px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_skhagAROKQU/SZsVIVeccLI/AAAAAAAAAL4/OpjBLpRL2ws/s320/Ext+JS+in+Action+Book.jpg" border="0" /&gt;&lt;li&gt;Learning Ext JS: &lt;a href="http://extjs.com/forum/showthread.php?t=54091" target="_blank"&gt;Post Fórum Ext&lt;/a&gt;, &lt;a target="_blank" href="http://www.packtpub.com/learning-ext-js/book"&gt;Página Editora&lt;/a&gt;&lt;img id="BLOGGER_PHOTO_ID_5303856379825294274" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 100px; CURSOR: hand; HEIGHT: 123px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_skhagAROKQU/SZsVRsMtC8I/AAAAAAAAAMA/TBQUVeNlUKM/s320/Learning+Ext+JS+Book.png" border="0" /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-8411255887831514408?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wr_nCw4Tbl7Virz1-N1WkGSAs1M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wr_nCw4Tbl7Virz1-N1WkGSAs1M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wr_nCw4Tbl7Virz1-N1WkGSAs1M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wr_nCw4Tbl7Virz1-N1WkGSAs1M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Framebox?a=QSA6IFen"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=Y66IiVC5"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=Y66IiVC5" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=fOW35wL8"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=GQNm90js"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=GQNm90js" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=4Dm7GD2r"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/7FyCeq_EpqU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/7FyCeq_EpqU/livros-sobre-framework-extjs.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_skhagAROKQU/SZsVIVeccLI/AAAAAAAAAL4/OpjBLpRL2ws/s72-c/Ext+JS+in+Action+Book.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/02/livros-sobre-framework-extjs.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-4739207999852030224</guid><pubDate>Wed, 11 Feb 2009 14:04:00 +0000</pubDate><atom:updated>2009-02-11T13:19:51.343-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Aplicações Web</category><category domain="http://www.blogger.com/atom/ns#">Ferramentas</category><category domain="http://www.blogger.com/atom/ns#">Frameworks</category><title>Cufón, um sIFR totalmente em javascript</title><description>O sIFR é uma solução amigável para um problema, usar fontes "diferêntes" sem auxilio de imagens usando javascript + flash (o que para alguns é um problema), se o usuário não possui o flash, ele se manterá com uma formatação já pré-definida por você em sua folha de estilo.&lt;br /&gt;&lt;br /&gt;Para saber mais sobre o sIFR leia &lt;a href="http://imasters.uol.com.br/artigo/11429/javascript/sifr_tipografia_e_html/"&gt;este artigo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;O Cufón cumpre o mesmo resultado com um diferencial, ele é &lt;span style="font-weight: bold;"&gt;sómente em javascript&lt;/span&gt;, e com algumas vantagens, como:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Não requer plug-ins – Funciona com recursos nativos do usuario.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Compatibilidade - Funciona nos principais navegadores do mercado.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fácil - Nenhuma ou quase nenhuma configuração, dependendo do uso.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rápido - Foi projetado para ser rápido na maioria dos casos.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;No site do desenvolvedor há um &lt;a href="http://wiki.github.com/sorccu/cufon/usage"&gt;guia&lt;/a&gt;, onde em 4 simples passos é possível utilizar nossas novas fontes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-4739207999852030224?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KfQmzg4ZwacCoHyO-YRMFaZNQmo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KfQmzg4ZwacCoHyO-YRMFaZNQmo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KfQmzg4ZwacCoHyO-YRMFaZNQmo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KfQmzg4ZwacCoHyO-YRMFaZNQmo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Framebox?a=SQe9Zm3P"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=jc0tuR7R"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=jc0tuR7R" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=d70mEIoW"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=AZr4KCPC"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=AZr4KCPC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=XhjttY3L"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/muc1iJRgv7k" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/muc1iJRgv7k/cufon-um-sifr-totalmente-em-javascript.html</link><author>noreply@blogger.com (Elvis Oliveira)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/02/cufon-um-sifr-totalmente-em-javascript.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-5017144713252780629</guid><pubDate>Fri, 06 Feb 2009 13:03:00 +0000</pubDate><atom:updated>2009-02-06T11:22:21.178-02:00</atom:updated><title>JS Charts</title><description>&lt;a href="http://www.jscharts.com/"&gt;JS Charts&lt;/a&gt; é uma biblioteca gratuita em javascript com o objetivo de criar excelentes gráficos.&lt;br /&gt;&lt;br /&gt;Os dados podem ser visualizados com XML, ou Arrays.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PZf0wMGOI8I/SYw3J7pwbrI/AAAAAAAAAAM/AnC5cJgb9Qo/s1600-h/free-javascript-charts.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 66px;" src="http://2.bp.blogspot.com/_PZf0wMGOI8I/SYw3J7pwbrI/AAAAAAAAAAM/AnC5cJgb9Qo/s320/free-javascript-charts.jpg" alt="" id="BLOGGER_PHOTO_ID_5299671505279413938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Os gráficos podem ser criados ou customizados com extrema facilidade em cada detalhe, há também uma &lt;a href="http://www.jscharts.com/how-to-use-reference"&gt;documentação&lt;/a&gt; completa, com &lt;a href="http://www.jscharts.com/examples"&gt;exemplos&lt;/a&gt; e um &lt;a href="http://www.jscharts.com/template"&gt;editor online&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-5017144713252780629?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XyK_O4LW-IC57Ug3YpeQx3dJo7o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XyK_O4LW-IC57Ug3YpeQx3dJo7o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XyK_O4LW-IC57Ug3YpeQx3dJo7o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XyK_O4LW-IC57Ug3YpeQx3dJo7o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Framebox?a=1Mo33vjo"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=mTThzS9s"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=mTThzS9s" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=EZyTece7"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=ffuOkLv5"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=ffuOkLv5" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=Dqevk8IB"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/qwkJTSAi46Q" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/qwkJTSAi46Q/js-charts.html</link><author>noreply@blogger.com (Elvis Oliveira)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_PZf0wMGOI8I/SYw3J7pwbrI/AAAAAAAAAAM/AnC5cJgb9Qo/s72-c/free-javascript-charts.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/02/js-charts.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-3960779605826943142</guid><pubDate>Thu, 05 Feb 2009 19:39:00 +0000</pubDate><atom:updated>2009-02-05T17:53:24.958-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">framebox</category><title>Meu primeiro post!</title><description>Depois de tanto enrolar, enfim, meu Primeiro Post!&lt;br /&gt;&lt;br /&gt;Ola! Meu nome é Elvis Oliveira, estarei a partir de hoje escrevendo aqui no Frame Box, tratando de diversos assuntos, mas especialmente falarei sobre interfaces web, tendências, Design, Layout e muito mais!&lt;br /&gt;&lt;br /&gt;Sou Web designer freelancer há pouco tempo, passei alguns dias de minha vida trabalhando em uma agência, o que me permitiu tanto contribuir com valiosas informações, quanto receber experiência profissional de quem já estava a mais de 10 anos no mercado.&lt;br /&gt;&lt;br /&gt;Pretendo sempre em meus posts manter uma conversa franca sobre as novas tendências no ramo de interfaces, mas sendo descontraído, colocando sempre minha opinião positiva, ou sugerindo melhorias.&lt;br /&gt;&lt;br /&gt;Gosto de CSS, não que eu odeie tabelas, ou flash, apenas tenho consciência de que é preciso responsabilidade ao usar esses recursos, e que se usados corretamente só vem a acrescentar bons frutos.&lt;br /&gt;&lt;br /&gt;Quanto a marcação, não tenho nada contra as pessoas que colocam os "selinhos" da W3C em seus sites, só acho isso algo sem sentido, visto que meus sites não tem esse selo, e julgo ser bem mais bonitos, usuais e acessíveis que muitos dos que tem.&lt;br /&gt;&lt;br /&gt;Bem, eu acho que para um primeiro post esta bom, até breve!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-3960779605826943142?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IR1XM0Ta4xKX74C4ZdPHdNMyXW0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IR1XM0Ta4xKX74C4ZdPHdNMyXW0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IR1XM0Ta4xKX74C4ZdPHdNMyXW0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IR1XM0Ta4xKX74C4ZdPHdNMyXW0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Framebox?a=tCkO5VA0"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=vJkF664O"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=vJkF664O" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=3XbqGZln"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=5QDzGiYf"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=5QDzGiYf" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=fvGjfKrv"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/4NsaXeMBPj4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/4NsaXeMBPj4/meu-primeiro-post.html</link><author>noreply@blogger.com (Elvis Oliveira)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/02/meu-primeiro-post.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-1749296299485040588</guid><pubDate>Wed, 14 Jan 2009 10:00:00 +0000</pubDate><atom:updated>2009-01-14T08:34:30.285-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ferramentas</category><category domain="http://www.blogger.com/atom/ns#">CSS</category><title>Implementando CSS Sprites com SmartSprites</title><description>&lt;p align="justify"&gt;Há algum tempo publiquei aqui no blog um artigo sobre CSS Sprites e como essa técnica pode melhor a performance de sua aplicação (&lt;a href="http://framebox.blogspot.com/2008/09/css-sprite-turbine-suas-aplicaes.html" target="_blank"&gt;CSS Sprite : Turbine suas aplicações&lt;/a&gt;). Deixei o assunto em &lt;em&gt;off&lt;/em&gt; por um tempo por indisponibilidade de tempo, mas agora no fim do ano pude retormar o estudo. Pensei em diversas maneiras de implementar, como por exemplo usar um editor de imagens (Photoshop, Fireworks) e montar um arquivo só para geração de CSS sprites. Seria trabalhoso, uma vez que disponho de um arsenal de 500 ícones em meu sistema. Por sorte encontrei uma ferramenta incrível que faz o serviço, o &lt;a href="http://smartsprites.osinski.name/" target="_blank"&gt;SmartSprites&lt;/a&gt; de Stanislaw Osinski. Já havia comentado no post anterior sobre Sprite Generator, porém ele na sua forma online possui limitações (500 ícones ele não suportou) e a sua forma offline é extremamente complicada de instalar.&lt;/p&gt;&lt;h5&gt;O que é SmartSprites&lt;/h5&gt;&lt;blockquote&gt;&lt;p align="justify"&gt;SmartSprites lhe permite inserir CSS Sprites facilmente e de forma segura no design de seu site. SmartSprites analisa gramaticalmente diretrizes que você insere em seu CSS original para marcar individualmente imagens que serão convertidas em sprite. Então ele constrói sprites das imagens coletadas e automáticamente insere as propriedades CSS requeridas em sua folha de estilos. Em outras palavras, sem copiar e colar tediosamente seu CSS quando adicionar, remover ou modificar imagens sprite. Apenas trabalhe com o seu CSS original normalmente e tenha o SmartSprites automaticamente transformando-as em uma versão "sprite-powered" quando necessário&lt;/p&gt;&lt;/blockquote&gt;&lt;h5&gt;Utilizando&lt;/h5&gt;&lt;p align="justify"&gt;Apesar de ler documentações não ser algo realmente agradável foi extremamente interessante entender toda a sistemática do SmartSprites. Através de comentários no meio de seu CSS é possível criar as imagens sem problemas.&lt;/p&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;/** sprite: mysprite; sprite-image: url('../img/mysprite.png'); sprite-layout: vertical */&lt;br /&gt;&lt;br /&gt;#web {&lt;br /&gt;   width: 17px; height: 17px;&lt;br /&gt;   background-repeat: no-repeat;&lt;br /&gt;   background-image: url(../img/web.gif); /** sprite-ref: mysprite; */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#logo {&lt;br /&gt;   width: 50px; height: 50px;&lt;br /&gt;   background-repeat: no-repeat;&lt;br /&gt;   background-position: top right;&lt;br /&gt;   background-image: url(../img/logo.png); /** sprite-ref: mysprite; sprite-alignment: right */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#main-box {&lt;br /&gt;   background-repeat: repeat-x;&lt;br /&gt;   background-position: 5px left;&lt;br /&gt;   background-image: url(../img/top-frame.gif); /** sprite-ref: mysprite; sprite-alignment: repeat; sprite-margin-top: 5px */&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;Existem muito mais diretrizes na documentação do site, assim como a explicação de como executar o SmartSprite. Em um teste criei uma aplicação com esta estrutura&lt;br /&gt;&lt;pre&gt;-root&lt;br /&gt;  _css&lt;br /&gt;     _icones.css&lt;br /&gt;  _images&lt;br /&gt;    _"varios icones"&lt;br /&gt;  _index.html&lt;br /&gt;&lt;/pre&gt;&lt;p align="justify"&gt;Coloquei o SmartSprite na pasta raiz e executei ele&lt;br /&gt;&lt;pre class="prettyprint"&gt;smartsprites --root-dir-path css&lt;/pre&gt;&lt;p align="justify"&gt;Ele gerou um arquivo testeSprite.png em images e um icones-sprite.css. Modificando a inclusão de icones.css para icones-sprite.css todos os ícones funcionaram perfeitamente.&lt;/p&gt;&lt;p align="justify"&gt;&lt;u&gt;De 155 ícones que totalizam 931kb tive como resultado 4 imagens sprite (sprite16, sprite32, sprite64, spriteBig) que juntas têm 69,4kb.&lt;/u&gt;&lt;/p&gt;&lt;h5&gt;Conclusão&lt;/h5&gt;&lt;p align="justify"&gt;As vantagens da utilização da técnica de CSS Sprites são indiscutíveis. A melhoria de performance é extrema e serve de solução para qualquer pequeno site até grandes aplicações.&lt;br /&gt;A problemática de implementar esta técnica está solucionada com o uso de SmartSprites, que nos possibilita com alguns comentários fazer tudo funcionar. Parabéns a equipe de desenvolvido do SmartSprites.&lt;br /&gt;Gostaria de ouvir dos desenvolvedores suas opiniões e implementações de CSS Sprites :) até mais&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-1749296299485040588?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UVBz7R0W9ZESBN9v8lOFPgQbb8k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UVBz7R0W9ZESBN9v8lOFPgQbb8k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UVBz7R0W9ZESBN9v8lOFPgQbb8k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UVBz7R0W9ZESBN9v8lOFPgQbb8k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Framebox?a=abKtSrGm"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=o49tfTXL"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=o49tfTXL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=mWKmrFba"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=VswpoA8x"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=VswpoA8x" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=Rr3jBo0V"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/_2dqgWbgkGg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/_2dqgWbgkGg/implementando-css-sprites-com.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://framebox.blogspot.com/2009/01/implementando-css-sprites-com.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5675746956264025202.post-1860657987486757411</guid><pubDate>Sun, 21 Dec 2008 23:35:00 +0000</pubDate><atom:updated>2008-12-21T22:00:51.496-02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">framebox</category><title>Framebox 2008</title><description>&lt;img id="BLOGGER_PHOTO_ID_5282391341359403010" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 269px; CURSOR: hand; HEIGHT: 96px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_skhagAROKQU/SU7S8ApTkAI/AAAAAAAAALA/_rjnZdJ_kZI/s320/logo-natal.gif" border="0" /&gt;&lt;br /&gt;&lt;p align="justify"&gt;É isso ai galera, post de encerramento do ano de 2008! Nós da equipe framebox só temos a agradecer à todos nossos leitores que desde a criação do blog vêm nos acompanhando e participando do desenvolvimento dele. O blog no início era bem pequeno, somente com o intuito de agregar um pouco mais à comunidade de desenvolvedores. Hoje continuamos pequenos, porém um pouco maiores que antes, contando com mais visitas e mais colaboradores&lt;/p&gt;&lt;p align="justify"&gt;Aproveitando a ocasião fechamos 2008 da melhor forma! Temos como convidado em nosso blog &lt;a href="http://www.elvisoliveira.com.br/" target="_blank"&gt;Elvis Oliveira&lt;/a&gt;, que estará preparando algo para em breve compartilhar conosco.&lt;/p&gt;&lt;p align="justify"&gt;As espectativas em viradas de ano sempre são grandes, e agora temos mais uma, expandir o framebox blog! Como primeira medida alterei o topo do blog e organizei melhor as categorias de posts. Próximo passo será um domínio próximo assim que possível. Também iremos abordar mais sobre novidades do mundo web como Adobe Air, Gears e Jaxer. Percebemos que estas tecnologias são pouco exploradas e muito promissoras por isso queremos colocá-las em foco em 2009. Também queremos abordar mais sobre temas como acessibilidade e padrões de desenvolvimento. Alguma sugestão? Envie-nos um &lt;a href="mailto:frameboxblog@gmail.com"&gt;email&lt;/a&gt;!&lt;br /&gt;&lt;/p&gt;&lt;p align="justify"&gt;Concluindo então, desejamos um natal maravilhoso e um ano novo cheio de sucessos! Um forte abraço e fiquem aí com uma seleção dos posts destaques de 2008!&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://framebox.blogspot.com/2008/10/desenvolvendo-aplicaes-web-com-extjs.html"&gt;Desenvolvendo Aplicações Web com ExtJS&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://framebox.blogspot.com/2008/10/comet-ajax-reverso.html"&gt;Comet : Ajax de forma Reversa&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://framebox.blogspot.com/2008/10/criando-grficos-com-ext-e-google.html"&gt;Criando gráficos com EXT e Google Visualization&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://framebox.blogspot.com/2008/11/editor-visual-extjs.html"&gt;Editor Visual ExtJS&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://framebox.blogspot.com/2008/09/css-sprite-turbine-suas-aplicaes.html"&gt;CSS Sprite : Turbine suas aplicações&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://framebox.blogspot.com/2008/11/tudo-sobre-jslint.html"&gt;Tudo sobre JSLint&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://framebox.blogspot.com/2008/09/melhor-perfomance-loops-mais-rpidos.html"&gt;Melhor perfomance : Loops mais rápidos&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://framebox.blogspot.com/2008/09/compactando-javascript.html"&gt;Compactando Javascript&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://framebox.blogspot.com/2008/10/porque-declarar-variaveis-com-var.html"&gt;Porque declarar variáveis com var?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5675746956264025202-1860657987486757411?l=framebox.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4ngegjnUBgPIvxb8-Hi3n2v5HBA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4ngegjnUBgPIvxb8-Hi3n2v5HBA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4ngegjnUBgPIvxb8-Hi3n2v5HBA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4ngegjnUBgPIvxb8-Hi3n2v5HBA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/Framebox?a=9UbJjFgd"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=0il11WGR"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=0il11WGR" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=X4Tn71om"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=CucNngJy"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?i=CucNngJy" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/Framebox?a=xGxAvROo"&gt;&lt;img src="http://feeds.feedburner.com/~f/Framebox?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Framebox/~4/SHuVblnLBbo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/Framebox/~3/SHuVblnLBbo/framebox-2008.html</link><author>btbruno_@hotmail.com (Bruno Tavares)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_skhagAROKQU/SU7S8ApTkAI/AAAAAAAAALA/_rjnZdJ_kZI/s72-c/logo-natal.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://framebox.blogspot.com/2008/12/framebox-2008.html</feedburner:origLink></item></channel></rss>
