<?xml version="1.0" encoding="ISO-8859-1"?>
<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
<title>O Desenvolvedor</title>
<link>http://www.andafter.org/blogs/odesenvolvedor</link>
<pubDate>Sun, 8 Nov 2009 14:39:14 -0300</pubDate>
<description>O Desenvolvedor - desevolvimento web, programação, scripts e filosofia de internet!</description>
<generator>http://www.andafter.org</generator>
<language>pt-br</language>
<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><image><link>http://www.andafter.org/blogs/odesenvolvedor</link><url /><title>O Desenvolvedor</title></image>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/ODesenvolvedor" type="application/rss+xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/ODesenvolvedor" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FODesenvolvedor" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
	<title>Como pegar dimensões da janela e da barra de rolagem por javascript</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/Y6zWtXzuJhY/como-pegar-dimensoes-da-janela-e-da-barra-de-rolagem-por-javascript_1367.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-pegar-dimensoes-da-janela-e-da-barra-de-rolagem-por-javascript_1367.html#comentar</comments>
	<pubDate>Sun, 8 Nov 2009 14:39:14 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-pegar-dimensoes-da-janela-e-da-barra-de-rolagem-por-javascript_1367.html</guid>
	<description><![CDATA[Como retornar as dimensões da janela do browser por javascript]]></description>
	<content:encoded><![CDATA[<p>Isso seria efetivamente f&aacute;cil, se todos os browsers seguissem o padr&atilde;o da <strong>ECMA</strong>&hellip; mas n&atilde;o &eacute; assim que funciona, e ontem um dos meninos que trabalha aqui comigo estava tentando implementar um c&oacute;digo javascript que utiliza tanto a altura &uacute;til da tela, como a altura vis&iacute;vel da janela (<em>window</em>) e a posi&ccedil;&atilde;o das scrollbars.</p>
<p>Papo vai, papo vem, procura na API da <strong>Prototype</strong> aqui, da <strong>jQuery</strong> ali, abre o Google acol&aacute;&hellip; e me deparo com uma p&aacute;gina muito completa, que lista os <em>browsers</em> (inclusive por sistema operacional) e qual &eacute; o objeto e atributo que est&aacute; dispon&iacute;vel nele.</p>
<table cellspacing="0" cellpadding="4" border="1">
    <tbody>
        <tr>
            <th>browser</th>
            <th>platform</th>
            <th>mode</th>
            <th>window.innerWidth<br />
            window.innerHeight<br />
            window.pageXOffset<br />
            window.pageYOffset</th>
            <th>document.documentElement.clientWidth<br />
            document.documentElement.clientHeight<br />
            document.documentElement.scrollLeft<br />
            document.documentElement.scrollTop</th>
            <th>document.body.clientWidth<br />
            document.body.clientHeight<br />
            document.body.scrollLeft<br />
            document.body.scrollTop</th>
        </tr>
        <tr>
            <td>IE</td>
            <td>Win32</td>
            <td>w. DTD</td>
            <td>undef<br />
            undef<br />
            undef<br />
            undef</td>
            <td>ok<br />
            ok<br />
            ok<br />
            ok</td>
            <td>doc. width<br />
            doc. height<br />
            0<br />
            0</td>
        </tr>
        <tr>
            <td>IE</td>
            <td>Win32</td>
            <td>w/o. DTD</td>
            <td>undef<br />
            undef<br />
            undef<br />
            undef</td>
            <td>0<br />
            0<br />
            0<br />
            0</td>
            <td>ok<br />
            ok<br />
            ok<br />
            ok</td>
        </tr>
        <tr>
            <td>IE</td>
            <td>Mac</td>
            <td>all</td>
            <td>undef<br />
            undef<br />
            undef<br />
            undef</td>
            <td>undef<br />
            undef<br />
            undef<br />
            undef</td>
            <td>ok<br />
            ok<br />
            ok<br />
            ok</td>
        </tr>
        <tr>
            <td>Firefox</td>
            <td>Win32/Mac</td>
            <td>w. DTD</td>
            <td>+scroller<br />
            +scroller<br />
            ok<br />
            ok</td>
            <td>ok<br />
            ok<br />
            ok<br />
            ok</td>
            <td>ok<br />
            doc. height.<br />
            ok<br />
            ok</td>
        </tr>
        <tr>
            <td>Firefox</td>
            <td>Win32/Mac</td>
            <td>w/o. DTD</td>
            <td>+ scroller<br />
            +scroller<br />
            ok<br />
            ok</td>
            <td>doc.width<br />
            doc.height<br />
            0<br />
            0</td>
            <td>ok<br />
            ok<br />
            ok<br />
            ok</td>
        </tr>
        <tr>
            <td>Netscape</td>
            <td>Win32</td>
            <td>w. DTD</td>
            <td>+ scroller<br />
            +scroller<br />
            ok<br />
            ok</td>
            <td>ok<br />
            ok<br />
            ok<br />
            ok</td>
            <td>ok<br />
            doc. height.<br />
            ok<br />
            ok</td>
        </tr>
        <tr>
            <td>Netscape</td>
            <td>Win32</td>
            <td>w/o. DTD</td>
            <td>+ scroller<br />
            +scroller<br />
            ok<br />
            ok</td>
            <td>0<br />
            0<br />
            0<br />
            0</td>
            <td>ok<br />
            ok<br />
            ok<br />
            ok</td>
        </tr>
        <tr>
            <td>Opera</td>
            <td>Win32/Mac</td>
            <td>all</td>
            <td>+ scroller<br />
            +scroller<br />
            ok<br />
            ok</td>
            <td>ok<br />
            doc.height<br />
            ok<br />
            ok</td>
            <td>ok<br />
            ok<br />
            ok<br />
            ok</td>
        </tr>
        <tr>
            <td>Safari</td>
            <td>Mac</td>
            <td>all</td>
            <td>ok<br />
            ok<br />
            ok<br />
            ok</td>
            <td>ok<br />
            doc.height<br />
            0<br />
            0</td>
            <td>ok<br />
            doc.height<br />
            ok<br />
            ok</td>
        </tr>
    </tbody>
</table>
<p>Ou seja, n&atilde;o existe um m&eacute;todo que funcione para todos os browser&hellip; <img class="wp-smiley" alt=":(" src="http://www.chrisb.com.br/blog/wp-includes/images/smilies/icon_sad.gif" /></p>
<p>Mas, o autor criou uma implementa&ccedil;&atilde;o <em>cross-browser</em> que funciona para calcular todos esses atributos (altura e largura da janela, posi&ccedil;&atilde;o da scrollbar horizontal e vertical). Fica a dica!</p>
<pre class="brush: php;">
function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel &amp;&amp; (!n_result || (n_result &gt; n_docel)))
		n_result = n_docel;
	return n_body &amp;&amp; (!n_result || (n_result &gt; n_body)) ? n_body : n_result;
}

</pre>
<p>Segue o link da p&aacute;gina, para refer&ecirc;ncia:<a href="http://www.softcomplex.com/docs/get_window_size_and_scrollbar_position.html"> http://www.softcomplex.com/docs/get_window_size_and_scrollbar_position.html</a></p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/Y6zWtXzuJhY" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-pegar-dimensoes-da-janela-e-da-barra-de-rolagem-por-javascript_1367.html</feedburner:origLink></item>
<item>
	<title>jQuery - Criando uma classe para Modal</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/K4N8H25WbUs/jquery-criando-uma-classe-para-modal_1360.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/jquery-criando-uma-classe-para-modal_1360.html#comentar</comments>
	<pubDate> Fri, 6 Nov 2009 16:36:48 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/jquery-criando-uma-classe-para-modal_1360.html</guid>
	<description><![CDATA[Classe modal para javascript, criada para estudo. Funciona de forma parecida com lightbox e outros modais, exibe imagem externa, conteúdo interno e conteúdo carregado por ajax.]]></description>
	<content:encoded><![CDATA[<p>Estava estudando algumas coisas de jQuery em um tempo livre no trampo e comecei a desenvolver uma classe de <strong>modal para jQuery</strong>. Sei que j&aacute; existem v&aacute;rias, lightbox, facebox, e outras, mas fiz para estudar mesmo.</p>
<p>Nunca havia feito um modal do zero - sei que usei uma biblioteca, ent&atilde;o n&atilde;o foi do zero mesmo mesmo - mas achei a experi&ecirc;ncia bem satisfat&oacute;ria e menos traum&aacute;tica do que eu pensava.</p>
<p>Vou explicar primeiro o que a classe se prop&otilde;em a fazer</p>
<h2>Requisitos</h2>
<ul>
    <li>Biblioteca jQuery</li>
</ul>
<p>&nbsp;</p>
<h2>Funcionalidades</h2>
<ul>
    <li>Pode criar diversos modais (iniciando a classe mais de uma vez)</li>
    <li>Carrega imagens (jpg,jpeg,gif,png) e ajusta o modal no tamanho da imagem</li>
    <li>Carrega elementos de objetos html da p&aacute;gina no modal</li>
    <li>Carrega html externo (ajax) no modal</li>
    <li>Gera as fun&ccedil;&otilde;es para todos os links utilizando o atributo &quot;rel&quot;</li>
</ul>
<p>&nbsp;</p>
<h2>Bugs conhecidos</h2>
<ul>
    <li>N&atilde;o redimensiona a altura do modal para um tamanho menor do atual (no IE)</li>
</ul>
<p>Devem existir mais, pelo que lembro at&eacute; tinha relatado mais alguns, mas esqueci de anotar e a&iacute;... :P</p>
<p>Testei o modal em Firefox, Internet Explorer 8, Internet Explorer 7 (emulado), Internet Explorer 6 (emulado). Tenho algumas id&eacute;ias que gostaria de implementar mas nem testei ainda, segue a lista para quem quiser se arriscar:</p>
<ul>
    <li>Navega&ccedil;&atilde;o entre os contents ou imagens do modal</li>
    <li>Melhorar o sistema de resize</li>
    <li>Melhorar o layout</li>
    <li>Implementar exibi&ccedil;&atilde;o de v&iacute;deos do Youtube diretamente do link</li>
</ul>
<p>&nbsp;</p>
<h2>O c&oacute;digo</h2>
<p>O c&oacute;digo estava bem simples at&eacute; eu come&ccedil;ar a fazer alguns ajustes para o IE.. mas enfim, como &eacute; t&iacute;pico do jQuery, acredito que o c&oacute;digo est&aacute; bem &quot;leg&iacute;vel&quot;, segue a classe:</p>
<p>&nbsp;</p>
<pre class="html" name="code">
/* ### Modal Class ###
 * Author: Guilherme Serrano
 * Using jQuery
 * 
 * ### How to ###
 * var name = new Modal(name, mask)
 * 
 * # Arguments #
 * name = id &uacute;nico
 * mask (true/false) = using mask
 * 
 * All links with rel=&quot;name&quot; will open modal box
 *  
 */
function Modal(modalName,mask){
	//Vars
	maxHeight = 450;
	maxWidth = 650;
	
	thisClass = this;	

	//Initialize modal
	this.initialize = function(){
		//Create elements &amp; vars
		if($(&quot;#&quot;+modalName).size() &lt; 1){
			$(&quot;body&quot;).append(&quot;&lt;div id=&quot;&quot; + modalName + &quot;&quot;&gt;&lt;/div&gt;&quot;)
		}
		divModal = $(&quot;#&quot;+modalName);
		divModal.addClass(&quot;modal&quot;);
		var content = divModal.html();
		divModal.html(&quot;&quot;);
		divModal.prepend(&quot;&lt;div class=&quot;modal_top&quot;&gt;&lt;a href=&quot;#&quot; title=&quot;Fechar esta janela&quot; id=&quot;&quot; + modalName +&quot;_close&quot;&gt;Fechar&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;modal_content&quot;&gt;&lt;/div&gt;&quot;);
		$(&quot;#&quot;+modalName +&quot; .modal_content&quot;).html(content);
		
		//Mask
		if(mask){
			if ($(&quot;#divMask&quot;).size() &lt; 1) {
				divMask = &quot;&lt;div id=&quot;divMask&quot; style=&quot;height:&quot; + $(document).height() + &quot;px;&quot;&gt;&lt;/div&gt;&quot;;
				$(divMask).appendTo(&quot;body&quot;);
			}
		}
		
		//Close button
		$(&quot;#&quot;+modalName +&quot;_close&quot;).click(function(){
			thisClass.close();
		});
		divContent = $(&quot;#&quot;+modalName +&quot; .modal_content&quot;);
		
		//Centralize on resize window
		$(window).bind(&quot;resize&quot;, function() {
			thisClass.centralize();
		});
		
		//Open buttons
		$(&quot;a[rel=&quot;&quot;+modalName+&quot;&quot;]&quot;).click(function(){
			href = $(this).attr(&quot;href&quot;)
			if(href == null || href == &quot;&quot; || href == &quot;undefined&quot; || href == &quot;#&quot;){
				thisClass.open();
			}else{
				thisClass.open(href)
			}
			return false;
		})
	}
	
	//Open
	this.open = function(content){
		thisClass.setContent(content);
		if (mask) {
			thisClass.showElement(&quot;#divMask&quot;);
		}
		thisClass.showElement(&quot;#&quot;+modalName);
		thisClass.setMeasures();
	}
	
	//Close
	this.close = function(){
		if(mask){
			thisClass.hideElement(&quot;#divMask&quot;);
		}
		thisClass.hideElement(&quot;#&quot;+modalName);
	}

	//Load content
	this.setContent = function(content){
		if(content != undefined &amp;&amp; content != null &amp;&amp; content != &quot;&quot;){
			if(content.match(/.gif/) || content.match(/.jpg/) || content.match(/.jpeg/) || content.match(/.png/)){
				divContent.html(&quot;&lt;img src=&quot;&quot;+content+&quot;&quot; /&gt;&quot;);
			}else if(content.match(/http:///) || content.match(/https:///) || content.match(/file:///)){
				divContent.load(content, null, thisClass.setMeasures);
			}else{
				divContent.html($(content).html());
			}
		}
	}
	
	//Show
	this.showElement = function(e){
		$(e).show();
	}
	
	//Hide
	this.hideElement = function(e){
		$(e).hide();
	}
	
	//Centralize
	this.centralize = function(){
		var posTop = (($(window).height()/2) - (divModal.height()/2))
		var posLeft = (($(window).width()/2) - (divModal.width()/2))
		divModal.css({
			&quot;top&quot; : posTop + &quot;px&quot;,
			&quot;left&quot; : posLeft + &quot;px&quot;
		});
	}
	
	this.setMeasures = function(){
		thisClass.setWidth();
		thisClass.setHeight();
		thisClass.centralize();
	}
	
	
	// Set height
	this.setHeight = function(){
		h = divContent.height()
		if(h &gt; maxHeight){
			divContent.css({
				&quot;height&quot;: maxHeight+&quot;px&quot;
			})
			divModal.css({
				&quot;height&quot;: (maxHeight+50)+&quot;px&quot;
			})
		}else{
			divModal.css({
				&quot;height&quot;: &quot;auto&quot;
			})
		}
	}

	this.setWidth = function(){
		w = divContent.width()
		if(w &gt; maxWidth){
			divModal.css({
				&quot;width&quot;: (maxWidth+20)+&quot;px&quot;
			})
		}else{
			divModal.css({
				&quot;width&quot;: &quot;auto&quot;
			})
			if(divContent.width() &gt; maxWidth){
				//alert(&quot;Deixou auto, ficou maior, reduziu!&quot;)
				divModal.css({
					&quot;width&quot;: (maxWidth+20)+&quot;px&quot;
				})
			}
		}
	}
}


</pre>
<p><strong>E o CSS</strong></p>
<pre class="html" name="code">
.modal {
	position: absolute;
	z-index: 99999;
	display: none;
	background: #fff;
	border: 2px solid #777;
}
.modal_content{
	border: 1px solid #333;
	margin: 5px;
	padding: 5px;
	overflow: auto;
	_height: expression(this.height &gt; 450 ? 450: true);
	max-height: 450px;
}
.modal_content div{
	border: 2px solid blue;
	height: auto;
}
#divMask {
	background-color:#000;
	width: 100%;
	left:0px;
	margin:0px;
	padding:0px;
	position:absolute;
	top:0px;
	z-index:1000;
	opacity:0.8;
	filter:alpha(opacity=80);
	display: none;
}
</pre>
<p>&nbsp;</p>
<p>Como fiz a classe para estudos n&atilde;o utilizei nenhuma imagem e estou publicando sem formatar bonitinho o header do modal (bot&atilde;o para fechar).</p>
<p>&nbsp;</p>
<h2>Como utilizar</h2>
<p>O uso ficou bastante simples, &eacute; s&oacute; iniciar o modal e criar os links que devem abrir. Segue um exemplo da cria&ccedil;&atilde;o de um modal chamado &quot;modal&quot;:</p>
<p>&nbsp;</p>
<pre class="html" name="code">
$(document).ready(function(){
	var modal = new Modal(&quot;modal&quot;,true)
	modal.initialize();
});
</pre>
<p>O c&oacute;digo acima acessa a fun&ccedil;&atilde;o &quot;initialize&quot; da classe, o primeiro par&acirc;metro (modal) &eacute; o nome do seu modal, que pode ser qualquer um. O segundo par&acirc;metro (true) &eacute; um boolean, e define se ser&aacute; utilizado a mask para escurecer o fundo do site e destacar apenas o modal ou n&atilde;o.</p>
<p>Os links devem ter o atributo rel igual ao nome do modal que voc&ecirc; iniciou (no exemplo de cima, rel=&quot;modal&quot;) e o atributo href indica qual o conte&uacute;do ser&aacute; exibido no modal (pode ser link externo, link para imagem ou o id de algum elemnto da p&aacute;gina atual.</p>
<p>&nbsp;</p>
<pre class="html" name="code">
&lt;a href=&quot;#&quot; rel=&quot;modal&quot;&gt;Open modal&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif&quot; rel=&quot;modal&quot;&gt;Open external image&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;#content&quot; rel=&quot;modal&quot;&gt;Open div#content content&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.andafter.org/&quot; rel=&quot;modal&quot;&gt;Open external page&lt;/a&gt;&lt;br /&gt;</pre>
<p>&nbsp;</p>
<h2>Conclus&atilde;o</h2>
<p>Gostei da brincadeira, o tempo de desenvolvimento n&atilde;o fui muito longo, comecei no trabalho e terminei em casa, depois fiz alguns ajustes. A biblioteca <a href="http://www.andafter.org/blogs/odesenvolvedor/tag/jquery"><strong>jQuery</strong></a> &eacute; realmente m&aacute;gica, o c&oacute;digo estava bastante curto, pouqu&iacute;ssimas linhas e um modal funcionando.</p>
<p>O c&oacute;digo aumentou na medida que comecei a adiconar funcionalidade (identificar o tipo de conte&uacute;do, criar automaticamente as actions para os links com o atributo rel, redimensionar e reposicionar o modal quando a janela &eacute; aberta, etc...)</p>
<p>No IE ainda ficou a pend&ecirc;ncia de fazer o modal diminuir a altura.</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/K4N8H25WbUs" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/jquery-criando-uma-classe-para-modal_1360.html</feedburner:origLink></item>
<item>
	<title>Novidades do PHP 5.3</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/AosdGr6BqPQ/novidades-do-php-53_1362.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/novidades-do-php-53_1362.html#comentar</comments>
	<pubDate> Thu, 5 Nov 2009 10:48:38 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/novidades-do-php-53_1362.html</guid>
	<description><![CDATA[Slides do Felipe Ribeiro sobre as novidades da versão 5.3 do PHP.]]></description>
	<content:encoded><![CDATA[<p>A pouco tempo renovei diversos feeds da minha aba &quot;Desenvolvimento&quot;, adicionei alguns muito bons focados em interface, eliminei alguns blogs estagnados e ao pouco estou acompanhando a galerinha do PHP desde que <a href="http://www.andafter.org/blogs/odesenvolvedor/publicacoes/do-asp-ao-php-vim-para-o-lado-negro-da-forca_1176.html">deixei o ASP de lado e voltei a brincar com o PHP</a>.</p>
<p>Infelizmente estou estudando <a href="http://www.andafter.org/blogs/odesenvolvedor/tag/php"><strong>PHP</strong></a> bem menos que gostaria (em compensa&ccedil;&atilde;o meu estudo com Javascript e <a href="http://www.andafter.org/blogs/odesenvolvedor/tag/jquery"><strong>jQuery</strong></a> vai &agrave; pampa!*), mas aos poucos estou aprendendo e nada melhor do que acompanhar a galera que manja para isso!</p>
<p style="text-align: center;"><img height="255" width="397" src="http://www.andafter.org/images/album/internet/elephpant-elephant-php-logo.png" alt="PHP" longdesc="undefined" /></p>
<p>J&aacute; peguei algumas aulas com o <a href="http://www.chrisb.com.br"><strong>Chris</strong></a> que tamb&eacute;m est&aacute; fazendo testes com o framework <a href="http://www.codeigniter.com"><strong>Code Igniter</strong></a> (que comecei a utilizar por dica do <a href="http://www.twitter.com/fefurst">Furst</a>), mas <strong>sei que deveria estudar sintaxe</strong> antes de brincar com frameworks. Mas quem desenvolve sabe, a afoba&ccedil;&atilde;o &eacute; inevit&aacute;vel e ver as coisas funcionando &eacute; muito mais legal! :D</p>
<p>&nbsp;</p>
<h2>Novidades do PHP 5.3</h2>
<p>Apresenta&ccedil;&atilde;o do <a href="http://blog.feliperibeiro.com/">Felipe Ribeiro</a> no PHP - Para&iacute;ba.</p>
<p><img height="0" width="0" border="0" alt="" style="visibility: hidden; width: 0px; height: 0px;" src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyNTczMzY2NzI1MzUmcHQ9MTI1NzMzNjg2NzEwOSZwPTEwMTkxJmQ9c3NfZW1iZWQmZz*yJm89YjJmZWE5ZjMyMDc1NDhmNDhlMjFlZTIzMDUwNDdhOTcmb2Y9MA==.gif" /></p>
<div style="margin: 0pt auto; width: 425px; text-align: left;" id="__ss_2390554">
<p style="text-align: center;"><a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/felipernb/php-53-whats-new-2390554" title="PHP 5.3 - What" s="">PHP 5.3 - What&quot;s new?</a><object height="355" width="425" style="margin: 0px;">
<param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slides-091031092510-phpapp01&amp;stripped_title=php-53-whats-new-2390554" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" /><embed height="355" width="425" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slides-091031092510-phpapp01&amp;stripped_title=php-53-whats-new-2390554" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration: underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration: underline;" href="http://www.slideshare.net/felipernb">Felipe Ribeiro</a>.</div>
</div>
<p>&nbsp;</p>
<p>Apesar de n&atilde;o saber (ainda) como funcionavam (ou se existiam) algumas coisas nas vers&otilde;es anteriores, fiquei feliz com algumas coisas que li, como os slides &quot;lambdas e closures&quot;, que lembraram bastante algumas coisas do javascript.</p>
<p>&nbsp;</p>
<p>E aos que desenvolvem em PHP fica minha recomenda&ccedil;&atilde;o do <a href="http://blog.feliperibeiro.com/">blog do Felipe</a>.</p>
<p>&nbsp;</p>
<hr />
<p>* &agrave; pampa - satisfeito, &oacute;timo, bom demais.</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/AosdGr6BqPQ" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/novidades-do-php-53_1362.html</feedburner:origLink></item>
<item>
	<title>Primeira experiência com Prototype</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/zBwgSzYdij4/primeira-experiencia-com-prototype_1149.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/primeira-experiencia-com-prototype_1149.html#comentar</comments>
	<pubDate> Fri, 30 Oct 2009 11:4:58 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/primeira-experiencia-com-prototype_1149.html</guid>
	<description><![CDATA[Pela primeira vez desenvolvi utilizando a biblioteca Prototype, resolvi compartilhas as dificuldades e opiniões sobre a biblioteca. Enjoy!]]></description>
	<content:encoded><![CDATA[<h2>&nbsp;</h2>
<p>Eu conhecia a biblioteca de javascript <a href="http://www.andafter.org/blogs/odesenvolvedor/tag/prototype"><b>Prototype</b></a> apenas por documenta&ccedil;&atilde;o e leitura dos posts que o <a href="http://www.chrisb.com.br"><strong>Chris</strong></a> fez por aqui (um passo a passo bem bacana para iniciar o uso da biblioteca), mas at&eacute; esta semana nunca utilizado ela de verdade. <br />
<br />
Comecei a colocar a m&atilde;o (ui) em um projeto aqui da <a href="http://www.mmcafe.com.br">MMCaf&eacute;</a> que utiliza a biblioteca, portanto precisei aprender alguma cois, e resolvi documentar minha experi&ecirc;ncia inicial.</p>
<p>&nbsp;</p>
<h2>Primeiras impress&otilde;es sobre Prototype</h2>
<p style="text-align: center;"><a href="http://www.andafter.org/images/album/internet/prototype.png"><img height="204" width="450" alt="" src="http://www.andafter.org/images/album/internet/prototype.png" /></a></p>
<p>A biblioteca &eacute; bacana, mas aparentemente bem mais complexa que jQuery. Segundo o Chris jQuery tem muitas &quot;fun&ccedil;&otilde;es m&aacute;gicas&quot;, o que pode levar ele a ser menos perform&aacute;tico. N&atilde;o sei, n&atilde;o posso opinar, mas admito que tais fun&ccedil;&otilde;es m&aacute;gicas facilitam a vida em muitos casos! :D</p>
<p>Ah, essa complexidade pode ser apenas um medo inicial (sair da zona de conforto, n&eacute;?), ent&atilde;o n&atilde;o quero assustar ningu&eacute;m. Achei a documenta&ccedil;&atilde;o bem boa, mas senti um pouco de falta de alguns exemplos na documenta&ccedil;&atilde;o - nada que uma googleada e alguns blogs n&atilde;o resolvessem.</p>
<p>&nbsp;</p>
<h2>Seletores</h2>
<p>N&atilde;o vou explicar o funcionamento dos seletores, o post &eacute; para expor minha opini&atilde;o apenas. Para quem conhece jQuery, os seletores funcionam de forma parecida com o <a href="http://www.andafter.org/blogs/odesenvolvedor/tag/jquery"><strong>jQuery</strong></a> , ent&atilde;o achei bastante f&aacute;cil.</p>
<p>&nbsp;</p>
<h2>Elements, observe, objects</h2>
<p>Sofri! Demorei bem mais tempo do que eu esperava para fazer algumas coisas simples, como setar a&ccedil;&otilde;es <strong>onclick </strong>em elementos de determinada classe.</p>
<p>Nesta curta experi&ecirc;ncia o que me fez sofrer mesmo foi a forma como o <strong>Prototype</strong> trabalha com os eventos. Aos leitores desenvolvedores (ou apenas curiosos e entusiastas) tenho um post saindodo forno que explica e exemplifica meu problema e minha solu&ccedil;&atilde;o para setar a a&ccedil;&atilde;o em uma classe inteira de links.</p>
<p>&nbsp;</p>
<h2>Resumo da obra</h2>
<p>Ainda sou mais jQuery pois j&aacute; estou familiarizado com seus seletores,  manipula&ccedil;&atilde;o de elementos, etc. Tamb&eacute;m gosto pelo fato da documenta&ccedil;&atilde;o e os diversos blogs com plugins e exemplos de c&oacute;digos (mas isso n&atilde;o posso comparar pois n&atilde;o procurei blogs espec&iacute;ficos sobre Prototype, eles devem existir).</p>
<p style="text-align: center;"><img height="287" width="287" alt="jQuery logo" src="http://www.andafter.org/images/album/internet/jquery-logo.jpg" /></p>
<p>&nbsp;</p>
<p>A Prototype<strong> n&atilde;o &eacute; o bixo de sete cabe&ccedil;as</strong> que eu temia, achei a documenta&ccedil;&atilde;o boa, e acredito que a produtividade poder ser equivalente a do <strong>jQuery</strong> - para quem j&aacute; conhece o funcionamento da biblioteca e n&atilde;o precisa ficar consultando a documenta&ccedil;&atilde;o a cada 5 minutos, claro.</p>
<p>Continuo achando jQuery mais interessante, mas depois dessa curta experi&ecirc;ncia estou vendo a Prototype com melhores olhos. :)</p>
<p>&nbsp;</p>
<h2><strong>Recomendo a leitura</strong></h2>
<p>A&iacute; vai uma sele&ccedil;&atilde;o de posts sobre Prototype j&aacute; publicados por aqui, quase todos do Chris:</p>
<p>&nbsp;</p>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/comparacao-entre-a-jquery-e-a-prototype_805.html" title="Compara&ccedil;&atilde;o entre a jQuery e a Prototype"><strong>Compara&ccedil;&atilde;o entre a jQuery e a Prototype</strong></a></h3>
<div>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/portal-class-crie-uma-home-com-widgets-como-o-netvibes_792.html" title="Portal Class - crie uma home com widgets como o Netvibes"><strong>Portal Class - crie uma home com widgets como o Netvibes</strong></a></h3>
</div>
<div>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/usando-a-prototype-passo-6-tratando-strings_764.html" title="Usando a Prototype - passo 6 - tratando Strings"><strong>Usando a Prototype - passo 6 - tratando Strings</strong></a></h3>
</div>
<div>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/validacao-de-formularios-com-prototype_763.html" title="Valida&ccedil;&atilde;o de formul&aacute;rios com prototype"><strong>Valida&ccedil;&atilde;o de formul&aacute;rios com prototype</strong></a></h3>
</div>
<div>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/usando-a-prototype-passo-5-criando-elementos_738.html" title="Usando a prototype - passo 5 - criando elementos"><strong>Usando a prototype - passo 5 - criando elementos</strong></a></h3>
</div>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/usando-a-prototype-passo-4-upload-de-arquivo-sem-post-na-tela_665.html" title="Usando a Prototype - passo 4 - upload de arquivo sem post na tela"><strong>Usando a Prototype - passo 4 - upload de arquivo sem post na tela</strong></a></h3>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/usando-a-prototype-passo-8-seletores-css_849.html" title="Usando a prototype - passo 8 - seletores CSS"><strong>Usando a prototype - passo 8 - seletores CSS</strong></a></h3>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/usando-a-prototype-passo-3-arrays-e-a-classe-enumerable_602.html" title="Usando a Prototype - passo 3 - arrays e a classe Enumerable"><strong>Usando a Prototype - passo 3 - arrays e a classe Enumerable</strong></a></h3>
<div>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/usando-a-prototype-passo-2-submit-de-form-por-ajax_587.html" title="Usando a Prototype - passo 2 - submit de form por ajax"><strong><span id="1256907622516S" style="display: none;">&nbsp;</span>Usando a Prototype - passo 2 - submit de form por ajax</strong></a></h3>
</div>
<div>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/usando-a-prototype-passo-1-escondendo-selects-debaixo-de-uma-popup_550.html" title="Usando a Prototype - passo 1 - escondendo selects debaixo de uma popup">Usando a Prototype - passo 1 - escondendo selects debaixo de uma popup</a></h3>
</div>
<h3><a href="../../../blogs/odesenvolvedor/publicacoes/criar-classes-em-javascript-usando-a-prototype_527.html" title="Criar classes em javascript - usando a Prototype">Criar classes em javascript - usando a Prototype</a><span id="1256907622008E" style="display: none;"> <br />
</span></h3>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>E voc&ecirc;, o que prefere?<br />
Prototype, jQuery ou outra biblioteca? Quais os motivos?</h2>
<p><a href="#comentar"><strong>Compartilhe sua opini&atilde;o nos coment&aacute;rios ;)</strong></a></p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/zBwgSzYdij4" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/primeira-experiencia-com-prototype_1149.html</feedburner:origLink></item>
<item>
	<title>Usando o trigger da jQuery</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/_LyGiCjZtL0/usando-o-trigger-da-jquery_1343.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/usando-o-trigger-da-jquery_1343.html#comentar</comments>
	<pubDate> Wed, 21 Oct 2009 9:24:30 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/usando-o-trigger-da-jquery_1343.html</guid>
	<description><![CDATA[Forma simples de simular eventos usando trigger() na jQuery]]></description>
	<content:encoded><![CDATA[<p>Esse m&eacute;todo j&aacute; me salvou a vida algumas vezes - com ele &eacute; poss&iacute;vel disparar um evento de um (ou mais) elementos sem que haja a interac&atilde;o do usu&aacute;rio.</p>
<p>Por exemplo, imagine o seguinte html:</p>
<p><em>&lt;select id=&quot;meu_select&quot;&gt;<br />
&nbsp;&nbsp; &lt;option value=&quot;SP&quot;&gt;S&atilde;o Paulo&lt;/option&gt;<br />
&nbsp;&nbsp; &lt;option value=&quot;RJ&quot;&gt;Rio de Janeiro&lt;/option&gt;<br />
&nbsp;&nbsp; &lt;option value=&quot;RS&quot;&gt;Rio Grande do Sul&lt;/option&gt;<br />
&lt;/select&gt;</em></p>
<p>Com a seguinte implementa&ccedil;&atilde;o javascript (usando <strong>jQuery</strong>):</p>
<p><em>$(&quot;select#meu_select&quot;).change(function() {<br />
&nbsp;&nbsp; //faz alguma coisa aqui, como uma requisi&ccedil;&atilde;o ass&iacute;ncrona por exemplo<br />
});</em></p>
<p>Simples, n&atilde;o? Sempre que houver uma mudan&ccedil;a no select, ser&aacute; chamadop o bloco de c&oacute;digo dentro do change()<br />
Agora, e se voc&ecirc; quiser a qualquer ponto do fluxo chamar esse change(), ou simular que o usu&aacute;rio fez uma sele&ccedil;&atilde;o? Por exemplo, quando a p&aacute;gina carrega, voc&ecirc; j&aacute; quer chamar esse bloco para que algo aconte&ccedil;a.<br />
Existe um m&eacute;todo no <strong>jQuery</strong>, trigger, com o qual voc&ecirc; pode resolver isso. Simples assim:</p>
<p><em>$(&quot;select#meu_select&quot;).trigger(&quot;change&quot;);</em></p>
<p>Nesse caso, o m&eacute;todo change do elemento select#meu_select &eacute; disparado, sem precisar de outras interfer&ecirc;ncias.</p>
<p>Para mais detalhessobre o m&eacute;todo e outras formas de us&aacute;-lo, visite a <a href="http://docs.jquery.com/Events/trigger">documenta&ccedil;&atilde;o oficial.</a></p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/_LyGiCjZtL0" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/usando-o-trigger-da-jquery_1343.html</feedburner:origLink></item>
<item>
	<title>Plugin de jQuery para criar QR Code</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/hzoj7AljDS8/plugin-de-jquery-para-criar-qr-code_1109.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/plugin-de-jquery-para-criar-qr-code_1109.html#comentar</comments>
	<pubDate> Mon, 19 Oct 2009 12:10:37 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/plugin-de-jquery-para-criar-qr-code_1109.html</guid>
	<description><![CDATA[Criando um plugin do jQuery para gerar imagens QR Code.]]></description>
	<content:encoded><![CDATA[<p>Navegando e aprendendo coisas novas, enquanto estudava <a href="http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-criar-seletores-customizados-com-jquery_1322.html"><strong>seletores customiz&aacute;veis com jQuery</strong></a> encontrei posts interessantes tamb&eacute;m para a cria&ccedil;&atilde;o de <strong>QR Code</strong> com jajavasript, e a cria&ccedil;&atilde;o de um &quot;plugin&quot; (se assim se pode chamar, devida a simplicidade) do jQuery para cria&ccedil;&atilde;o do QR Code.</p>
<p>&nbsp;</p>
<h2>O que &eacute; QR Code?</h2>
<p>Se voc&ecirc; j&aacute; sabe o que &eacute; QR Code pule essa parte, &eacute; apenas uma explica&ccedil;&atilde;o simples para entender o conceito:</p>
<blockquote>
<p>O <b>QR Code</b> (ou <b>C&oacute;digo de Barras em 2D</b>), &eacute; uma <a href="http://pt.wikipedia.org/wiki/Matriz" title="Matriz">matriz</a> ou <a href="http://pt.wikipedia.org/wiki/C%C3%B3digo_de_barras" title="C&oacute;digo de barras">c&oacute;digo de barras</a> bi-dimensional, criado pela empresa Japonesa <a href="http://pt.wikipedia.org/w/index.php?title=Denso-Wave&amp;action=edit&amp;redlink=1" class="new" title="Denso-Wave (p&aacute;gina n&atilde;o existe)">Denso-Wave</a>, em 1994. O <b>QR</b> vem de <i>Quick Response</i>, pois o c&oacute;digo pode ser interpretado rapidamente, mesmo com imagens de baixa resolu&ccedil;&atilde;o, feitas por cameras digitais em formato <a href="http://pt.wikipedia.org/wiki/VGA" title="VGA" class="mw-redirect">VGA</a>, como as de celulares. O <i>QR Code</i> &eacute; muito usado no <a href="http://pt.wikipedia.org/wiki/Jap%C3%A3o" title="Jap&atilde;o">Jap&atilde;o</a>.</p>
<p><a href="http://pt.wikipedia.org/wiki/QR_Code">Wikipedia pt</a></p>
</blockquote>
<p>&nbsp;</p>
<p>O <strong>QR Code</strong> permite que voc&ecirc; fotografe com um celular um c&oacute;digo e acesse automaticamente uma URL, por exemplo. O funcionamento &eacute; id&ecirc;ntico ao do c&oacute;digo de barras, mas at&eacute; onde sei c&oacute;digo de barras &eacute; traduzido apenbas em n&uacute;meros, enquanto o QR Code permite passar urls completas :D</p>
<p>&nbsp;</p>
<p style="text-align: center;"><img height="400" width="400" src="http://www.andafter.org/images/album/design-digital/chart.png" alt="" /></p>
<p>&nbsp;</p>
<h2>Como gerar QR Code com javascript?</h2>
<p>Na verdade n&atilde;o vamos codificar uma URL em imagem QR Code, vamos utilizar geradores prontos e utilizar o javascript como ferramenta para solicitar a gera&ccedil;&atilde;o do QR Code e exibir essa imagem em nosso site ou aplicativo web.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="margin-left: 40px;">$(document).ready(function(){</p>
<p style="margin-left: 40px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Vamos criar um plugin do jquery chamado qrcode</p>
<p style="margin-left: 40px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;(function ($) {&nbsp;</p>
<p style="margin-left: 40px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$.fn.qrcode = function(url,size) {&nbsp;</p>
<p style="margin-left: 40px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return &quot;http://chart.apis.google.com/chart?cht=qr&amp;chl=&quot; + urk +&quot;&amp;chs=&quot; + size +&quot;x&quot; + size</p>
<p style="margin-left: 40px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</p>
<p style="margin-left: 40px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;})(jQuery);</p>
<p style="margin-left: 40px;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;$(&quot;body&quot;).append(&quot;&lt;img src=&quot;&quot;+$().qrcode(&quot;http://www.andafter.org&quot;, &quot;100&quot;)+&quot;&quot;&gt;&quot;);</p>
<p style="margin-left: 40px;">});</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>No exemplo acima utilizamos o google para criar o QR Code e &eacute; poss&iacute;vel escolher o tamanho da imagem (vari&aacute;vel size da fun&ccedil;&atilde;o).</p>
<p>Mais servi&ccedil;os que criam QR Codes e podem ser utilizados no plugin:</p>
<p style="margin-left: 40px;"><a href="http://go.bath.ac.uk/qr/download?DATA=http://www.andafter.org">http://go.bath.ac.uk/qr/download?DATA=http://www.andafter.org</a></p>
<p style="margin-left: 40px;"><a href="http://qrcode.kaywa.com/img.php?s=100&amp;d=http://www.andafter.org">http://qrcode.kaywa.com/img.php?s=100&amp;d=http://www.andafter.org</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&Eacute; isso, espero ter ajudado! :)</p>
<p>&nbsp;</p>
<p><span style="font-size: large;">Leia mais</span></p>
<ul>
    <li><a href="http://pt.wikipedia.org/wiki/QR_Code"><strong>QR Code - Wikip&eacute;dia</strong></a></li>
    <li><a href="http://custom-drupal.com/jquery-demo/qrcode/"><strong>Custom drupal</strong></a><font color="#008800" class="Apple-style-span"><br />
    </font></li>
</ul>
<p>&nbsp;</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/hzoj7AljDS8" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/plugin-de-jquery-para-criar-qr-code_1109.html</feedburner:origLink></item>
<item>
	<title>Fazer um loop (foreach) no Velocity, com array ou limite numérico</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/RengvqssSfg/fazer-um-loop-foreach-no-velocity-com-array-ou-limite-numerico_1335.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/fazer-um-loop-foreach-no-velocity-com-array-ou-limite-numerico_1335.html#comentar</comments>
	<pubDate> Fri, 16 Oct 2009 9:43:8 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/fazer-um-loop-foreach-no-velocity-com-array-ou-limite-numerico_1335.html</guid>
	<description><![CDATA[Tutorial básico para trabalhar com loops (foreach) com a linguagem de templates Velocity, que trabalha com objetos Java.]]></description>
	<content:encoded><![CDATA[<p>O Chris certa vez publicou aqui um <a href="http://www.andafter.org/blogs/odesenvolvedor/publicacoes/velocity-linguagem-de-templates_791.html"><strong>guia inicial de Velocity</strong></a> que ensina os conceitos b&aacute;sicos dessa linguagem para desenvolvimento de templates com objetos Java.</p>
<p>Quando li o post n&atilde;o entendi <em>patavinas</em>, hoje trabalhando com o Chris aqui na MMCaf&eacute; estou um pouco mais familiarizado com o Velocity, por isso resolvi publicar aqui algumas solu&ccedil;&otilde;es que est&atilde;o facilitando minha vida! :D</p>
<h2>Como fazer um loop no velocity com array</h2>
<p>Primeiro o b&aacute;sico, listar os itens de um array:</p>
<p style="margin-left: 40px;">#set&nbsp;($arr=&nbsp;[&quot;flush&quot;,&nbsp;&quot;straight&quot;,&nbsp;&quot;full house&quot;])<br />
#foreach($item&nbsp;in&nbsp;$arr)<br />
&nbsp; M&atilde;o no poker: $item<br />
#end</p>
<h2>Como fazer um loop no velocity com limite num&eacute;rico</h2>
<p>Agora o que achei que seria mais simples, mas demorei um pouco mais para encontrar em posts e documenta&ccedil;&otilde;es pela interwebs, como fazer um loop de N at&eacute; 3N por exemplo:</p>
<p style="margin-left: 40px;">#foreach($i in [3..9])<br />
&nbsp;&nbsp; &lt;li&gt;$i&lt;/li&gt;<br />
#end</p>
<p>&nbsp;</p>
<p>Pronto, simples assim! Espero ter ajudado quem est&aacute; come&ccedil;ando com o Velocity!</p>
<p>Em tempo, vejam essa <a href="http://www.chrisb.com.br/blog/o-pog-nosso-de-cada-dia-16/"><strong>programa&ccedil;&atilde;o m&aacute;gica (POG de primeira)</strong></a> que o Chris publicou <a href="http://www.chrisb.com.br/blog/"><strong>l&aacute; no blog dele</strong></a>.</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/RengvqssSfg" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/fazer-um-loop-foreach-no-velocity-com-array-ou-limite-numerico_1335.html</feedburner:origLink></item>
<item>
	<title>Marcar e desmarcar checkboxes de um form por javascript</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/hWNfJLf--og/marcar-e-desmarcar-checkboxes-de-um-form-por-javascript_1331.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/marcar-e-desmarcar-checkboxes-de-um-form-por-javascript_1331.html#comentar</comments>
	<pubDate>Sun, 11 Oct 2009 11:25:29 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/marcar-e-desmarcar-checkboxes-de-um-form-por-javascript_1331.html</guid>
	<description><![CDATA[Como marcar/desmarcar todos os checkboxes via javascript - sem nenhuma biblioteca]]></description>
	<content:encoded><![CDATA[<p>O Danilo fez ontem um post no blog dele sobre como implementar uma s<a href="http://e-fabrica.com/blog/2009/06/02/como-selecionar-um-checkbox-e-selecionar-o-restante/">olu&ccedil;&atilde;o com jQuery para fazer aquele famoso &quot;marcar todos&quot; onde um checkbox, ao ser clicado</a>, marca ou desmarca todos os checkboxes d eum certo grupo. Bem bacana!</p>
<p>Ai, resolvi aproveitar o gancho e mostrar como pode ser feito isso sem o uso de qualquer biblioteca javascript - ou seja, na m&atilde;o. O c&oacute;digo, claro, &eacute; mais extenso do que se tivesse sido feito com alguma biblioteca, mas acho que vale no m&iacute;nimo como refer&ecirc;ncia!</p>
<p>Segue, abaixo, a implementa&ccedil;&atilde;o com os devidos coment&aacute;rios!</p>
<pre name="code" class="html">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Manipula&ccedil;&atilde;o de checkboxes&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&nbsp;&nbsp;&nbsp; window.onload = function() {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //listener para click do checkbox que marca/desmarca todos
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; document.getElementById(&quot;checkAll&quot;).onclick = function() {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var form = document.getElementById(&quot;myForm&quot;); //formul&aacute;rio
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //percorre todos os checkboxes e seta se est&aacute; ou n&atilde;o checado, conforme o valor do check mandat&oacute;rio
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var checks = form.getElementsByTagName(&quot;input&quot;);
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(var i=0; i&lt;checks.length; i++) {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var chk = checks[i];
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(chk.name == &quot;dados[]&quot;)
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; chk.checked = this.checked;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; }
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Meu form&lt;/h1&gt;
&lt;form action=&quot;#&quot; id=&quot;myForm&quot;&gt;
&nbsp;&nbsp;&nbsp; &lt;fieldset&gt;
&nbsp;&nbsp;&nbsp; &lt;input type=&quot;checkbox&quot; name=&quot;dados[]&quot; /&gt;check 1&lt;br /&gt;
&nbsp;&nbsp;&nbsp; &lt;input type=&quot;checkbox&quot; name=&quot;dados[]&quot; /&gt;check 2&lt;br /&gt;
&nbsp;&nbsp;&nbsp; &lt;input type=&quot;checkbox&quot; name=&quot;dados[]&quot; /&gt;check 3&lt;br /&gt;
&nbsp;&nbsp;&nbsp; &lt;input type=&quot;checkbox&quot; name=&quot;dados[]&quot; /&gt;check 4&lt;br /&gt;
&nbsp;&nbsp;&nbsp; &lt;input type=&quot;checkbox&quot; name=&quot;dados[]&quot; /&gt;check 5&lt;br /&gt;
&nbsp;&nbsp;&nbsp; &lt;/fieldset&gt;
&nbsp;&nbsp;&nbsp; marcar todos: &lt;input type=&quot;checkbox&quot; id=&quot;checkAll&quot; /&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/hWNfJLf--og" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/marcar-e-desmarcar-checkboxes-de-um-form-por-javascript_1331.html</feedburner:origLink></item>
<item>
	<title>Como criar seletores customizados com jQuery</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/WrP_FCXq_eU/como-criar-seletores-customizados-com-jquery_1322.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-criar-seletores-customizados-com-jquery_1322.html#comentar</comments>
	<pubDate> Thu, 8 Oct 2009 10:18:50 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-criar-seletores-customizados-com-jquery_1322.html</guid>
	<description><![CDATA[Você sabia que é possível customizar seletores do jQuery, para por exemplo buscar todos os elementos que contenham algum HTML, ou que tenham determinado elemento (rel, title, etc). Possibilidades infinitas com jQuery! ;)]]></description>
	<content:encoded><![CDATA[<p>Dia desses estava estudando os seletores do <a href="http://www.andafter.org/blogs/odesenvolvedor/tag/jquery"><strong>jQuery</strong></a> e nas pesquisas <em>intern&eacute;rdicas </em>encontrei um post bastante interessante sobre <strong>seletores customizados do jQuery</strong>. Isso significa que eu posso criar uma regra em javascript para praticamente verificar qualquer coisa dos elementos, e utilizar isso como um selector do jQuery.</p>
<h2>Exemplo de uso</h2>
<p>Tenho um site com diversos links para a wikipedia e gostaria de aplicar uma classe nos links espec&iacute;ficos para a wikipedia. Eu posso colocar a classe para cada link criado, mas vamos supor que eu quero automatizar isso (para aplicar a aregra tamb&eacute;m em links antigos, por exemplo).</p>
<p>A id&eacute;ia &eacute; eu criar um seletor tipo:</p>
<p style="margin-left: 40px;"><span style="font-size: large;">$(&quot;a:wikipedia&quot;).addClass(&quot;wikipedia&quot;)</span></p>
<p>Este seletor n&atilde;o existe no <a href="http://www.andafter.org/blogs/odesenvolvedor/tag/jquery"><strong>jQuery</strong></a>, ent&atilde;o vamos ao objetivo do post: <span style="font-weight: bold;">criar </span><strong>um seletor customizado</strong>. Para extender (n&atilde;o sei se esta seria a palavra correta) e jQuery e criar um seletor customizado o comando &aacute;: </p>
<p style="margin-left: 40px;"><span style="font-size: large;"><span class="pln">$</span><span class="pun">.</span><span class="pln">expr</span><span class="pun">[</span><span class="str">&quot;:&quot;</span><span class="pun">].nomedoseletor </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">obj</span><span class="pun">){</span><span class="pln"><br />
&nbsp;&nbsp; //Aqui v&atilde;o as regras</span></span><br />
<span style="font-size: large;"><span class="pln">&nbsp;&nbsp; //return </span></span><span style="font-size: large;"><span class="pln">true inclui o elemento no seletor<br />
</span></span><span style="font-size: large;"><span class="pln">&nbsp;&nbsp; //return false</span></span><span style="font-size: large;"><span class="pln"><br />
</span><span class="pun">};</span></span><span class="pln"><br />
</span></p>
<p style="margin-left: 40px;">&nbsp;</p>
<p>No meu caso, a regra &eacute; simples: quero que o seletor procure links que contenham em alguma parte de sua <em>href</em> o link &quot;<strong>wikipedia.org</strong>&quot;. Para a regra resolvi utilizar <strong>express&otilde;es regulares</strong> (ER), e o nome do meu seletor &eacute; wikipedia.</p>
<p>&nbsp;</p>
<h2>Seletor customizado com jquery</h2>
<p>Eis o c&oacute;digo:</p>
<p style="margin-left: 40px;"><span style="font-size: large;"><span class="pln">$</span><span class="pun">.</span><span class="pln">expr</span><span class="pun">[</span><span class="str">&quot;:&quot;</span><span class="pun">].wikipedia </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">(</span><span class="pln">obj</span><span class="pun">){</span><span class="pln"><br />
&nbsp;&nbsp; return obj.href.match(/wikipedia.org/);</span><span class="pln"><br />
</span><span class="pun">};</span></span><span class="pln"><br />
</span></p>
<p>&nbsp;</p>
<p>E para chamar o seletor:</p>
<p style="margin-left: 40px;"><span style="font-size: large;"><strong>$(&quot;a:wikipedia&quot;).addClass(&quot;wikipedia&quot;)</strong></span></p>
<p>&nbsp;</p>
<p>O <a href="http://www.chrisb.com.br/blog/">Chris</a> j&aacute; alertou que isso n&atilde;o deve ser muito perform&aacute;tico, mas tenho que dizer: pode ser bastante &uacute;til. Neste exemplo fiz um seletor simples, mas as regras podem ser mais complexas: selecionar links internos, links para &aacute;reas espec&iacute;ficas do seu site para aplicar &iacute;cones nos links, selecionar imagens pelo tamanho, elementos com ou sem atributos espec&iacute;ficos...</p>
<p>Ainda sobre a performance, recomendo utilizar seletores espec&iacute;ficos preferencialmente dentro de ID&acute;s, poe exemplo: <strong>$(&quot;#content a:wikipedia&quot;)</strong> e n&atilde;o &quot;globalizar&quot; os apenas quando necess&aacute;rio n&atilde;o deve causar TANTOS problemas, n&eacute;?</p>
<p>N&atilde;o realizei nenhum teste de performance com os seletores customizados, testei apenas o c&oacute;dido de exemplo, funcionou certinho. Hoje a noite quando eu estiver em casa publico o exemplo* no diret&oacute;rio de exemplos do <a href="http://www.odesenvolvedor.com.br">O Desenvolvedor</a>! :)</p>
<p>&nbsp;</p>
<p>Refer&ecirc;ncia: <a href="http://jquery-howto.blogspot.com/2009/06/custom-jquery-selectors.html">jQuery howto</a> (recomendo a leitura, v&aacute;rios posts interessantes)</p>
<p>&nbsp;</p>
<p>* resolvi postar mesmo sem o exemplo devido a simplicidade do c&oacute;digo ;)</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/WrP_FCXq_eU" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-criar-seletores-customizados-com-jquery_1322.html</feedburner:origLink></item>
<item>
	<title>Melhorando o objeto Array do javascript</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/71CenJhI0e0/melhorando-o-objeto-array-do-javascript_1309.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/melhorando-o-objeto-array-do-javascript_1309.html#comentar</comments>
	<pubDate> Tue, 29 Sep 2009 22:16:22 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/melhorando-o-objeto-array-do-javascript_1309.html</guid>
	<description><![CDATA[Adicionando métodos à classe Array do javascript, que vão aumentar sua produtividade]]></description>
	<content:encoded><![CDATA[<p>O Guilherme falou num <a href="http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-descobrir-se-um-numero-e-par-ou-impar-no-javascript_1301.html">post passado</a> sobre &quot;javascript mais hard&quot; com o qual ele tem tido que trabalhar mais desde que veio fazer parte da equipe l&aacute; na MMCaf&eacute;... e se tem uma coisa que quem est&aacute; j&aacute; mais acostumado com javascript acha ruim &eacute; a classe Array. Poucos m&eacute;todos para muita coisa que se pode fazer, ainda mais quando se compara com essa classe em outras linguagens.</p>
<p>Mas, para isso, h&aacute; a propriedade (sempre digo isso: n&atilde;o confundam com a biblioteca Prototype) prototype do javascript, que possibilita a manipula&ccedil;&atilde;o de objetos do javascript em runtime, adicionando m&eacute;todos, por exemplo.</p>
<p>N&atilde;o vou me dedicar ao funcionamento dessa propriedade, pois <a href="http://www.andafter.org/blogs/odesenvolvedor/publicacoes/adicionando-propriedades-a-objetos-no-javascript-em-tempo-de-execucao_948.html">j&aacute; expliquei aqui,</a> ent&atilde;o vamos a alguns m&eacute;todos adicionados a classe Array que podem ser muito &uacute;teis:</p>
<p>Bubble Sorte</p>
<pre class="alt2" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 292px;">
Array.<span style="color: rgb(0, 102, 0);">prototype</span>.<span style="color: rgb(0, 102, 0);">sort</span>=<span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(102, 204, 102);">(</span><span style="color: rgb(102, 204, 102);">)</span>
&nbsp; <span style="color: rgb(102, 204, 102);">{</span>
&nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> tmp;
&nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 102); font-weight: bold;">for</span><span style="color: rgb(102, 204, 102);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> i=<span style="color: rgb(204, 0, 0);">0</span>;i&lt;this.<span style="color: rgb(0, 102, 0);">length</span>;i++<span style="color: rgb(102, 204, 102);">)</span>
&nbsp; &nbsp; &nbsp; <span style="color: rgb(102, 204, 102);">{</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 102); font-weight: bold;">for</span><span style="color: rgb(102, 204, 102);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> j=<span style="color: rgb(204, 0, 0);">0</span>;j&lt;this.<span style="color: rgb(0, 102, 0);">length</span>;j++<span style="color: rgb(102, 204, 102);">)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(102, 204, 102);">{</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 102); font-weight: bold;">if</span><span style="color: rgb(102, 204, 102);">(</span>this[i]&lt;this[j]<span style="color: rgb(102, 204, 102);">)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(102, 204, 102);">{</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp = this[i];
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this[i] = this[j];
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this[j] = tmp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(102, 204, 102);">}</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(102, 204, 102);">}</span>
&nbsp; &nbsp; &nbsp; <span style="color: rgb(102, 204, 102);">}</span>
&nbsp; <span style="color: rgb(102, 204, 102);">}</span>;</pre>
<p>Clear</p>
<pre class="alt2" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 100px;">
Array.<span style="color: rgb(0, 102, 0);">prototype</span>.<span style="color: rgb(0, 102, 0);">clear</span>=<span style="color: rgb(0, 51, 102); font-weight: bold;">function</span><span style="color: rgb(102, 204, 102);">(</span><span style="color: rgb(102, 204, 102);">)</span>
&nbsp; <span style="color: rgb(102, 204, 102);">{</span>
&nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(0, 102, 0);">length</span> = <span style="color: rgb(204, 0, 0);">0</span>;
&nbsp; <span style="color: rgb(102, 204, 102);">}</span>;</pre>
<p>Contains</p>
<p>&nbsp;</p>
<pre class="alt2" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 212px;">
Array.<span style="color: rgb(0, 102, 0);">prototype</span>.<span style="color: rgb(0, 102, 0);">contains</span> = <span style="color: rgb(0, 51, 102); font-weight: bold;">function</span> <span style="color: rgb(102, 204, 102);">(</span>element<span style="color: rgb(102, 204, 102);">)</span> 
&nbsp; <span style="color: rgb(102, 204, 102);">{</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 102); font-weight: bold;">for</span> <span style="color: rgb(102, 204, 102);">(</span><span style="color: rgb(0, 51, 102); font-weight: bold;">var</span> i = <span style="color: rgb(204, 0, 0);">0</span>; i &lt; <span style="color: rgb(0, 0, 102); font-weight: bold;">this</span>.<span style="color: rgb(0, 102, 0);">length</span>; i++<span style="color: rgb(102, 204, 102);">)</span> 
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: rgb(102, 204, 102);">{</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 102); font-weight: bold;">if</span> <span style="color: rgb(102, 204, 102);">(</span>this[i] == element<span style="color: rgb(102, 204, 102);">)</span> 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(102, 204, 102);">{</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 102); font-weight: bold;">return</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">true</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(102, 204, 102);">}</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(102, 204, 102);">}</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: rgb(0, 0, 102); font-weight: bold;">return</span> <span style="color: rgb(0, 51, 102); font-weight: bold;">false</span>;
&nbsp; <span style="color: rgb(102, 204, 102);">}</span>;</pre>
<p>Voc&ecirc; pode adicionar os m&eacute;todos que voc&ecirc; precisar; tenha certeza que sua produtividade aumentar&aacute;!</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/71CenJhI0e0" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/melhorando-o-objeto-array-do-javascript_1309.html</feedburner:origLink></item>
<item>
	<title>Como descobrir se um número é par ou ímpar no Javascript</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/FHlYY6VhFas/como-descobrir-se-um-numero-e-par-ou-impar-no-javascript_1301.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-descobrir-se-um-numero-e-par-ou-impar-no-javascript_1301.html#comentar</comments>
	<pubDate> Fri, 25 Sep 2009 11:25:2 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-descobrir-se-um-numero-e-par-ou-impar-no-javascript_1301.html</guid>
	<description><![CDATA[Uma linha de código (um if) para descobrir se um número é par ou ímpar no javascript.]]></description>
	<content:encoded><![CDATA[<p>Desde que comecei a trabalhar com o Chris aqui na MM Caf&eacute; estou em um contato mais hard com <em><strong>Javascript</strong></em>, linguagem que comecei a me interessar bastante gra&ccedil;as ao jQuery e a evolu&ccedil;&atilde;o dos navegadores (com a <a href="http://www.andafter.org/blogs/odesenvolvedor/publicacoes/conferindo-a-versao-do-internet-explorer_1297.html"><strong>excess&atilde;o do IE</strong></a>, obviamente).</p>
<p>Hoje precisei de uma solu&ccedil;&atilde;o para colocar background intercalados em uma lista criada por javascript (com jQuery), a famosa &quot;lista coloridinha&quot; que auxilia na visualiza&ccedil;&atilde;o dos dados. Existem seletores avan&ccedil;ados de CSS (even e odd) mas nos meus testes aqui eles n&atilde;o funcionaram no Internet Explorer (6, 7 e 8) e tamb&eacute;m os seletores (2n) ou :first que funcionam no Firefox por&eacute;m nada acontece em nenhuma das vers&otilde;es do Internet Explorer.</p>
<p><br />
<br />
Resolvi ent&atilde;o aplicar uma classe de forma intercaladas nas linhas quando o javascript criava a lista. Para fazer eu tinha alguma &ccedil;&otilde;es:<br />
&nbsp;</p>
<ol>
    <li>Ficar setando uma vari&aacute;vel para 1 e 0 e fazendo um IF dentro do loop que gera as linhas para conferir se &eacute; um ou zero</li>
    <li>Conferir se o n&uacute;mero &eacute; 1, 3, 5, 7 (POG, eu sei...)</li>
    <li>Verificar se o contador (o i do loop) &eacute; par ou &iacute;mpar</li>
</ol>
<p>&nbsp;</p>
<p>Optei pela &uacute;ltima, pois a vari&aacute;vel j&aacute; existia e eu s&oacute; precisava de um <em>if else</em> para conferir se o n&uacute;mero daquela linha era par ou &iacute;mpar.</p>
<p style="text-align: center;"><img height="338" width="450" alt="" src="http://www.andafter.org/images/album/alexkid.png" /></p>
<p style="text-align: center;"><span style="color: rgb(128, 128, 128);"><strong>Alex Kid, o rei do par ou &iacute;mpar!</strong></span></p>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: center;"><img height="354" width="250" alt="" src="http://www.andafter.org/images/album/alexkid2.png" /></p>
<p style="text-align: center;"><span style="color: rgb(128, 128, 128);"><strong>Lembra?</strong></span></p>
<p style="text-align: center;">&nbsp;</p>
<p>&nbsp;</p>
<h2>Como verificar se um n&uacute;mero &eacute; par ou &iacute;mpar no Javascript?</h2>
<p>A l&oacute;gica simples &eacute;: se o resto da divis&atilde;o por dois for 0, &eacute; par. A l&oacute;gica complicada &eacute;: se a unidade final do n&uacute;mero for 0,2,4,6 ou 8 &eacute; par.</p>
<p>&nbsp;</p>
<p style="margin-left: 40px;">if (i % 2 == 0) {</p>
<p style="margin-left: 80px;">alert(&quot;O n&uacute;mero i &eacute; par, pois o resto da divis&atilde;o por dois &eacute; igual a zero&quot;)</p>
<p style="margin-left: 40px;">}else{</p>
<p style="margin-left: 80px;">&nbsp;alert(&quot;Existe resto na divis&atilde;o por dois, portando o n&uacute;mero i &eacute; &iacute;mpar&quot;)</p>
<p style="margin-left: 40px;">}</p>
<p>&nbsp;</p>
<p>Simples, a fun&ccedil;&atilde;o &quot;n % 2&quot; retorna o valor do resto da divis&atilde;o por dois! :D</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/FHlYY6VhFas" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-descobrir-se-um-numero-e-par-ou-impar-no-javascript_1301.html</feedburner:origLink></item>
<item>
	<title>Conferindo a versão do Internet Explorer...</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/ZvTJ5-deyhU/conferindo-a-versao-do-internet-explorer_1297.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/conferindo-a-versao-do-internet-explorer_1297.html#comentar</comments>
	<pubDate> Tue, 22 Sep 2009 17:36:22 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/conferindo-a-versao-do-internet-explorer_1297.html</guid>
	<description><![CDATA[Dando um about para ver se a versão do IE era a 6 (que eu precisava testar) a confirmação veio de uma forma estranha...]]></description>
	<content:encoded><![CDATA[<p>E hoje eu precisava validar um site no<strong> Internet Explorer 6</strong> (die, die, die). Belezinha, com o navegador aberto fui conferir a vers&atilde;o, para ver se era o que eu precisava. Depois de clicar em Help -&gt; About, vejam a confirma&ccedil;&atilde;o de que era a PRAGA do IE6:</p>
<p>&nbsp;</p>
<p style="text-align: center;"><a href="http://www.andafter.org/images/album/internet/ie6.jpg" target="_blank"><img height="302" width="450" alt="" src="http://www.andafter.org/images/album/internet/ie6.jpg" /></a></p>
<p style="text-align: center;">&nbsp;</p>
<p>O erro confirmou: &eacute; o 6, n&eacute;.</p>
<p>E o erro se repetiu a cada vez que eu ia ver a vers&atilde;o dele... o IE estava sendo rodando usando o aplicativo de browsers do <a href="http://spoon.net/browsers/">Spoon</a>.</p>
<p>&nbsp;</p>
<p>Beleza, IE!</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/ZvTJ5-deyhU" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/conferindo-a-versao-do-internet-explorer_1297.html</feedburner:origLink></item>
<item>
	<title>Jogo de dados - Javascript orientado a objetos</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/2SwW6fcEQ_I/jogo-de-dados-javascript-orientado-a-objetos_1150.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/jogo-de-dados-javascript-orientado-a-objetos_1150.html#comentar</comments>
	<pubDate> Mon, 14 Sep 2009 22:24:35 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/jogo-de-dados-javascript-orientado-a-objetos_1150.html</guid>
	<description><![CDATA[Joguinho de aposta em dados, desenvolvido utilizando orientação a objetos no javascript. Pouco código e poucas funções, mas mostra como é simples a "orientação a objetos" do javascript.]]></description>
	<content:encoded><![CDATA[<p><strong>Hola!</strong></p>
<p>Talvez alguns de voc&ecirc;s que me acompanham no twitter (<a href="http://www.twitter.com/gserrano"><strong>@gserrano</strong></a>) ou acompanham o Chris (<a href="http://www.twitter.com/chrisloki"><strong>@chrisloki</strong></a>) j&aacute; saibam, mas n&atilde;o moro mais no <strong>Rio Grande do Sul </strong>(Tch&ecirc;!)&nbsp;e estou morando a uma semana em <strong>S&atilde;o Paulo</strong>, trabalhando na <a href="http://www.mmcafe.com.br">MM Caf&eacute;</a> na equipe de interface, trabalhando na equipe do Chris :D</p>
<p>E em uma tarde da semana passada estava eu sugando informa&ccedil;&otilde;es do Chris, que me mandou alguns links sobre <em><strong>Javascript Orientado a Objetos</strong></em>.</p>
<p>Lembrei de um post dele aqui no <strong>O Desenvolvedor</strong>, que vale a leitura:&nbsp;<a href="http://www.andafter.org/blogs/odesenvolvedor/publicacoes/criar-classes-em-javascript-usando-a-prototype_527.html"><strong>utilizando Prototype para criar classes em Javascript</strong></a>.</p>
<p>Li os exemplos que o Chris me passou e resolvi colocar em pr&aacute;tica, criei um mini-game de jogo de dados. Bom, chamar de &quot;mini-game&quot; &eacute; um exagero, criei apenas uma interface e tres &quot;objetos&quot;.</p>
<p>&nbsp;</p>
<h2>Joguinho de dados</h2>
<p>O funcionamento &eacute; bastante simples, n&atilde;o explicarei a teoria da orienta&ccedil;&atilde;o a objetos, apenas a pr&aacute;tica e o c&oacute;digo.</p>
<p style="text-align: center; "><a href="http://www.andafter.org/blogs/odesenvolvedor/exemplos/dados/"><img width="450" height="243" class="lightbox" alt="" src="http://posterous.com/getfile/files.posterous.com/gserrano/9zr7ejtVxveIdRWVtF6dA6EzqfkVaz80mjQKNjyzXBzu4kNT1eawIIjVDPNv/dados.jpg.scaled.1000.jpg" /></a></p>
<p style="text-align: center; "><a href="http://www.andafter.org/blogs/odesenvolvedor/exemplos/dados/">Clique para jogar</a></p>
<p>&nbsp;</p>
<p>Utilizei 3 objetos e algumas poucas fun&ccedil;&otilde;es, os objetos s&atilde;o:</p>
<ul>
    <li><strong>Dado</strong></li>
    <li><strong>Cash</strong></li>
    <li><strong>Fichas</strong></li>
</ul>
<p>&nbsp;</p>
<p>O dado tem uma &uacute;nica fun&ccedil;&atilde;o, que se chama <strong>jogar</strong>. Eis o c&oacute;digo dele:</p>
<p style="margin-left: 40px; ">&nbsp;</p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); ">function dado(){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>this.lados = 6;</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>this.valor = 1;</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>this.joga = function(){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>this.valor = getrand(this.lados);</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>return this.valor;</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>}</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); ">}</span></strong></p>
<p>Cada dado tem dois valores: n&uacute;mero de lados (o padr&atilde;o &eacute; 6) e o valor, utilizado cada vez que ele &eacute; jogado. A fun&ccedil;&atilde;o &quot;jogar&quot; gera um n&uacute;mero rand&ocirc;mico de 1 at&eacute; o n&uacute;mero de lados, neste caso de um a seis, retornando o valor jogando e alterando o valor do objeto dado.</p>
<p>Os objetos chips e cash s&atilde;o muito parecidos, apenas armazenam o valor de &quot;dinheiro&quot; ou de &quot;fichas&quot; do jogador, e possuem fun&ccedil;&otilde;es em comum (repeti elas no c&oacute;digo, talvez esta n&atilde;o seja a melhor op&ccedil;&atilde;o), vamos aos c&oacute;digos:</p>
<p>&nbsp;</p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); ">function chips(){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>this.valor = 0;</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span></span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>this.soma = function(x){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>this.valor = this.valor + x;</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>$(&quot;#chips&quot;).html(this.valor);</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>}</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>this.subtrai = function(x){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>if(this.valor&lt;x){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>$(&quot;#feedback&quot;).html(&quot;&lt;h1&gt;Warning!&lt;/h1&gt;&lt;br /&gt;Voc&ecirc; n&atilde;o tem fichas para isso, malandro!&quot;)</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>}else{</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>this.valor = this.valor - x;</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>$(&quot;#chips&quot;).html(this.valor);</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>}</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>}</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); ">}</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); ">function cash(){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>this.valor = 0;</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>this.soma = function(x){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>this.valor = this.valor + x;</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>$(&quot;#cash&quot;).html(this.valor);</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>}</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>this.subtrai = function(x){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>if(this.valor&lt;x){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>$(&quot;#feedback&quot;).html(&quot;&lt;h1&gt;Warning!&lt;/h1&gt;&lt;br /&gt;Voc&ecirc; n&atilde;o tem dinheiro para isso, malandro!&quot;)</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>}else{</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>this.valor = this.valor - x;</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>$(&quot;#cash&quot;).html(this.valor);</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>}</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>}</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); ">}</span></strong></p>
<p>&nbsp;</p>
<p>A fun&ccedil;&atilde;o &quot;<strong>subtrai</strong>&quot; verifica se o n&uacute;mero que ser&aacute; subtra&iacute;do (das fichas ou do dinheiro) n&atilde;o &eacute; maior do que o existente, evitando criar jogadores endividados! :D</p>
<p>Estas poucas linhas s&atilde;o a base de funcionamento do &quot;jogo&quot;. Com dois bot&otilde;es e algumas mensagens de feedback, podemos fazer o usu&aacute;rio jogar o dado e apostar e comprr mais fichas, eis o c&oacute;digo &quot;onload&quot; da p&aacute;gina:</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); ">$(document).ready(function(){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>//Inicializa, cria dado e cash</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>var dado1 = new dado();</span></strong><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span></span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>var u_chips = new chips();</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>u_chips.soma(100);</span></strong><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span></span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>var u_cash = new cash();</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>u_cash.soma(50);</span></strong><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span></span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>//Quando joga</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>$(&quot;#acao&quot;).click(function(){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>$(&quot;#valor&quot;).html(&quot;Voc&ecirc; jogou &quot; + dado1.joga());</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>if(dado1.valor &lt;= dado1.lados/2){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>u_chips.subtrai(4);</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>$(&quot;#feedback&quot;).html(&quot;&lt;h2&gt;Perdeu!&lt;/h2&gt;&lt;br /&gt;Voc&ecirc; pagou 4 chips para a banca.&quot;)</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>}else{</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>u_chips.soma(3);</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>$(&quot;#feedback&quot;).html(&quot;&lt;h2&gt;Ganhou!&lt;/h2&gt;&lt;br /&gt;Voc&ecirc; recebeu 3 chips da banca.&quot;)</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>}</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>});</span></strong><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span></span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>$(&quot;#buy_chips&quot;).click(function(){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>if(u_cash.valor &gt;= 25){</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>u_cash.subtrai(25);</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>u_chips.soma(50);</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>}else{</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">			</span>$(&quot;#feedback&quot;).html(&quot;&lt;h1 class=&quot;red&quot;&gt;Warning!&lt;/h1&gt;&lt;br /&gt;Voc&ecirc; n&atilde;o tem dinheiro para isso, malandro!&quot;)</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">		</span>}</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); "><span class="Apple-tab-span" style="white-space: pre; ">	</span>});</span></strong></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(128, 128, 128); ">});</span></strong></p>
<p>&nbsp;</p>
<p>Quando a p&aacute;gina &eacute; inicializada, crio um objeto para cada classe (dado, cash, chips) e adiciono as chips e cash (isso vai atualizar a interface automaticamente, devido as fun&ccedil;&otilde;es soma e subtrai).</p>
<p>Quando o usu&aacute;rio clica em jogar, atrav&eacute;s da fun&ccedil;&atilde;o <em>jogar </em>do dado criado, verifico se o n&uacute;meor &eacute; maior ou menor que a metade do valor m&aacute;ximo do dado (o n&uacute;mero de lados) e novamente com as fun&ccedil;&otilde;es soma e subtrai, retiro ou adiciono fichas pro usu&aacute;rio.</p>
<p>A fun&ccedil;&atilde;o &quot;buy&quot; subtrai do cash e adiciona nas chips.</p>
<p>&nbsp;</p>
<p><strong>Simples, pr&aacute;tico e f&aacute;cil de entender!</strong></p>
<p><a href="http://www.andafter.org/blogs/odesenvolvedor/exemplos/dados/"><span style="font-size: large; "><strong>Veja o exemplo funcionando</strong></span></a></p>
<p>&nbsp;</p>
<h2>Curiosidades</h2>
<ul>
    <li>Demorei mais para explicar o c&oacute;digo do que para desenvolver a brincadeira.</li>
    <li>O layout do joguinho foi feito em 15 minutos, com uma busca no SXC e bom uso do CSS.</li>
    <li>O Internet Explorer foi completamente ignorado durante todo o processo</li>
    <li>As expectativas de vit&oacute;rias s&atilde;o negativas: a banca ganha no longo prazo.</li>
</ul>
<p>O joguinho est&aacute; simples, n&atilde;o armazena naada em banco e pode se tornar divertido com &quot;desafios&quot; a outros jogadores, armazenar fichas e cash, integra&ccedil;&atilde;o com o twitter... eu s&oacute; queria mesmo iniciar a brincadeira, utilizem os c&oacute;digos a vontade. :)</p>
<p>Quer saber mais sobre javascript orientado a objetos, por quem entende de verdade do que t&aacute; falando? Acessa a&iacute;:</p>
<ul>
    <li><a href="http://www.leandromerces.org/blog/2007/05/09/javascript-orientado-a-objetos/"><strong>Leandro Merc&ecirc;s</strong></a></li>
    <li><a href="http://www.rodrigolazoti.com.br/?p=24"><strong>Rogrigo Lazoti</strong></a></li>
    <li><a href="http://juliogreff.net/javascript-orientado-a-objetos-parte-1/"><strong>Julio Greff</strong></a></li>
</ul>
<p>&nbsp;</p>
<p>Agradecimento ao Chris pelas explica&ccedil;&otilde;es e refer&ecirc;ncias que me passou :)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/2SwW6fcEQ_I" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/jogo-de-dados-javascript-orientado-a-objetos_1150.html</feedburner:origLink></item>
<item>
	<title>SQL - como agrupar registros por uma coluna e pegar o último pela data</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/ISMn1zopm5c/sql-como-agrupar-registros-por-uma-coluna-e-pegar-o-ultimo-pela-data_1262.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/sql-como-agrupar-registros-por-uma-coluna-e-pegar-o-ultimo-pela-data_1262.html#comentar</comments>
	<pubDate> Mon, 7 Sep 2009 18:4:5 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/sql-como-agrupar-registros-por-uma-coluna-e-pegar-o-ultimo-pela-data_1262.html</guid>
	<description><![CDATA[Query simples com SELECT e SUBSELECT para agrupar registros pelo mesmo campo e exibir a data mais recente]]></description>
	<content:encoded><![CDATA[<p>N&atilde;o sou bom com <strong>SQL</strong> - nunca fui, nunca quis me aprofundar e tenho um certo bloqueio com rela&ccedil;&atilde;o a isso.<br />
Mas, algumas vezes tenho que mexer com isso, e sempre me deparo com alguns erros bobos ou algumas coisas mais complexas.</p>
<p>No caso, incrivelmente as quest&otilde;es bobas n&atilde;o me atrapalharam, mas quebrei a cabe&ccedil;a quando tinha uma tabela com uma estrutura mais ou menos semelhante a essa (vou suprimir as colunas que n&atilde;o interessam para o problema):</p>
<ul>
    <li><em>id</em>: id prim&aacute;rio, auto-incremente</li>
    <li><em>f_id</em>: &eacute; uma rela&ccedil;&atilde;o de cada registro com registros de outra tabela. N&atilde;o &eacute; &uacute;nico</li>
    <li><em>adddate</em>: data do registro</li>
    <li><em>nome</em>: nome do registro</li>
</ul>
<p>Minha necessidade era agrupar os registros por esse f_id e retornar a data mais recente de cada grupo.<br />
&Agrave; princ&iacute;pio estava tentando fazer um SELECT e agrupar por GROUP BY, dando um ORDER BY depois, mas percebi que uma vez usado o GROUP BY nada garante qual &eacute; o registro que ele vai usar quando der um ORDER BY.<br />
Vi ent&atilde;o que a coisa seria mais s&eacute;ria, e que teria que usar SUBSELECTS... estava quebrando a cabe&ccedil;a e o <a href="http://www.eualexandre.com.br">Alexandre</a> (<a href="http://twitter.com/kurko">@kurko</a>) me ajudou ap&oacute;s um pedido de SOS pelo twitter, e a seguinte query abaixo me salvou!</p>
<blockquote>
<p><br />
<em>SELECT u.f_id, u.nome, ( SELECT adddate FROM usuario AS t WHERE t.f_id=u.f_id ORDER BY t.adddate DESC LIMIT 1) as data FROM usuario AS u GROUP BY u.f_id ORDER BY u.f_id</em></p>
</blockquote>
<p>Espero que seja de utilidade!</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/ISMn1zopm5c" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/sql-como-agrupar-registros-por-uma-coluna-e-pegar-o-ultimo-pela-data_1262.html</feedburner:origLink></item>
<item>
	<title>jQuery UI</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/zvVqKWoE4h8/jquery-ui_1108.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/jquery-ui_1108.html#comentar</comments>
	<pubDate> Fri, 28 Aug 2009 11:43:4 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/jquery-ui_1108.html</guid>
	<description><![CDATA[Uma pincelada sobre o jQuery UI, um poderoso framework para a biblioteca de javascript jQuery que facilita a vida dos desenvolvedores de interface!]]></description>
	<content:encoded><![CDATA[<p>Fazem algumas semanas que resolvi utilizar um plugin jQuery (n&atilde;o lembro qual) que utilizava a&nbsp;<strong><a href="http://jqueryui.com/docs/Theming/API">jQuery UI</a></strong>, um<strong> framework </strong>com diversas classes prontas para trabalhar com <strong><a href="http://www.andafter.org/blogs/odesenvolvedor/tag/jquery">jQUery</a></strong>, uma verdadeira m&atilde;o na roda!</p>
<p>Como utilizei apenas o plugin pronto, fiz as altera&ccedil;&otilde;es necess&aacute;rias mas n&atilde;o havia realmente trabalhando com o framework. Em um projeto recente em que estou trabalhando, fui procurar uma nova forma de fazer uma navega&ccedil;&atilde;o com <em>accordion</em> (j&aacute; havia utilizado um plugin eficiente de jQuery anteriormente) e encontrei novamente com o jQuery UI.</p>
<p>Deixei a pregui&ccedil;a de lado e fui verificar como funcionava o jQuery UI, gostei bastante! Apesar de estar apenas iniciando os estudos pareceu bem f&aacute;cil de utilizar.&nbsp;</p>
<p>&nbsp;</p>
<h2>jQuery UI CSS Framework</h2>
<p>Essa foi a &uacute;nica parte que at&eacute; o momento eu realmente utilize, um completo framework CSS que permite personaliza&ccedil;&atilde;o f&aacute;cil e vem com muitas, MUITAS classes prontas.</p>
<p>No site do jQuery UI existe um <strong><a href="http://jqueryui.com/themeroller/">gerador de tema</a></strong>, que permite configurar o seu framework de CSS de forma r&aacute;pida:</p>
<p style="text-align: center; "><a title="Theme Generator" class="lightbox" href="http://www.andafter.org/images/album/internet/jqueryui.jpg"><img width="450" height="284" alt="" src="http://www.andafter.org/images/album/internet/jqueryui.jpg" /></a></p>
<p style="text-align: center; "><a title="Theme Generator" class="lightbox" href="http://www.andafter.org/images/album/internet/jqueryui.jpg">Theme Generator (clique para ampliar)</a></p>
<p>O gerador de temas gera um <em>framework CSS</em>, que facilita no desenvolvimento com o restante dos utilit&aacute;rios.</p>
<p>Existem diversas classes prontas, para:</p>
<ul>
    <li>Bordas arredondadas</li>
    <li>Overlay (&quot;cobrir&quot; parte da p&aacute;gina para destacar determinado conte&uacute;do)</li>
    <li>Intera&ccedil;&atilde;o (hover, focus, etc.)</li>
    <li>Exibi&ccedil;&atilde;o de erro</li>
    <li>Highlight</li>
    <li>Elemento desabilitado</li>
</ul>
<p>E mais algumas, que ainda n&atilde;o explorei... :)</p>
<p>Falar de CSS me embrou de uma id&eacute;ia interessante, que instiga algumas boas pr&aacute;ticas no desenvlvimento das folhas de estilos: <a href="http://www.andafter.org/blogs/odesenvolvedor/publicacoes/css-orientado-a-objetos_1130.html"><strong>CSS orientado a objetos</strong></a></p>
<p>&nbsp;Ah, a parte de&nbsp;</p>
<h2>Intera&ccedil;&atilde;o</h2>
<p>Al&eacute;m das facilidades na parte do CSS o framework facilita muito a cria&ccedil;&atilde;o de efeitos de intera&ccedil;&atilde;o.</p>
<ul>
    <li>Draggable</li>
    <li>Droppable</li>
    <li>Resizable</li>
    <li>Selectable</li>
    <li>Sortable</li>
</ul>
<p>O melhor de tudo &eacute; a simplicidade com a qual funciona tudo, por exemplo para criar um elemento que possa ser arrastado, com apenas uma linha isto &eacute; feito:</p>
<p style="margin-left: 40px; "><span style="font-size: large; ">$(&quot;#draggable&quot;).draggable();</span></p>
<p>Para os outros comandos a facilidade &eacute; a mesma. Isso associado aos diversos estilos dos temas pode acelerar muito o desenvolvimento de interfaces amig&aacute;veis!</p>
<p>&nbsp;</p>
<h2>Widgets</h2>
<p>Mais facilidades com pouco c&oacute;digo, existem algumas ferramentas prontas como:</p>
<p>&nbsp;</p>
<ul>
    <li>Accordion</li>
    <li>Datepicker</li>
    <li>Dialog</li>
    <li>Progressbar</li>
    <li>Slider</li>
    <li>Tabs</li>
</ul>
<p>Testei o accordion, as personaliza&ccedil;&otilde;es poss&iacute;veis s&atilde;o bacanas! Nos testes que fiz do accordion o funcionamento foi bom em IE (inclusive o 6 - exceto com listas de conte&uacute;do), FF (perfeito) e Chrome (perfeito).</p>
<p>&nbsp;</p>
<h2>Anima&ccedil;&atilde;o</h2>
<p>Os comando apra anima&ccedil;&atilde;o com o jQuery s&atilde;o bastante evolu&iacute;dos e permitem fazer muita coisa, mas para efeitos padr&atilde;o de interface o framework de user interface facilita com alguns efeitos prontos e bastante customizaveis:</p>
<ul>
    <li>Effect</li>
    <li>Show</li>
    <li>Hide</li>
    <li>Toggle</li>
    <li>Color animation</li>
    <li>Add class</li>
    <li>Remove class</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Escrevi o post como uma introdu&ccedil;&atilde;o e est&iacute;mulo aos usu&aacute;rios da <strong><a href="http://www.andafter.org/blogs/odesenvolvedor/tag/jquery">biblioteca jQuery</a></strong>&nbsp;para estudar e utilizar a <strong>jQuery UI </strong>e facilitar ainda mais a vida!</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/zvVqKWoE4h8" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/jquery-ui_1108.html</feedburner:origLink></item>
<item>
	<title>Deixando uma imagem como se fosse um selo por CSS</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/rkpNOVk-2tY/deixando-uma-imagem-como-se-fosse-um-selo-por-css_1235.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/deixando-uma-imagem-como-se-fosse-um-selo-por-css_1235.html#comentar</comments>
	<pubDate>Sun, 16 Aug 2009 21:4:53 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/deixando-uma-imagem-como-se-fosse-um-selo-por-css_1235.html</guid>
	<description><![CDATA[Inserindo por CSS efeito de selo em uma imagem]]></description>
	<content:encoded><![CDATA[<p>Vou reproduzir uma t&eacute;cnica que vi outro dia sobre como deixar uma imagem parecida com um selo, com aquela borda picotada.</p>
<p>&Eacute; simples, e a pr&oacute;pria explica&ccedil;&atilde;o do que vamos fazer hj&aacute; demonstra o que vamos manipular: a borda do elemento <strong>CSS</strong>.</p>
<p>Como voc&ecirc; faria para criar uma marca&ccedil;&atilde;o html dessa forma?</p>
<p><img alt="" src="http://www.cssnewbie.com/wp-content/uploads/2008/12/stamp.jpg" /></p>
<p>Poderia ser criada uma imagem, mas e se voc&ecirc; precisar alterar a imagem e o texto v&aacute;rias vezes?</p>
<p>Com o c&oacute;digo abaixo, fica f&aacute;cil; basicamente, deve-se colocar a imagem como background de uma div, e essa div com borda tracejada. O valor ali de cima, fica dentro de um <em>&lt;p&gt;</em></p>
<blockquote>
<pre style="color: black;" email="false" urls="false" tabstop="1" class="html">
&lt;<span style="color: rgb(128, 0, 128); font-weight: bold;">div</span> <span style="font-weight: bold;">class=</span><span style="color: blue;">&quot;stamp&quot;</span>&gt;
&nbsp;&lt;<span style="color: rgb(128, 0, 128); font-weight: bold;">p</span>&gt;99<span style="color: rgb(255, 69, 0);">&amp;cent;</span>&lt;/<span style="color: rgb(128, 0, 128); font-weight: bold;">p</span>&gt;
&lt;/<span style="color: rgb(128, 0, 128); font-weight: bold;">div</span>&gt;
</pre>
<pre style="color: black;" email="false" urls="false" tabstop="1" class="html"><span style="color: maroon;">.stamp </span>{
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">width</span>: 500px;
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">height</span>: 414px;
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">background</span>: #fff <span style="color: teal;">url</span>(george.jpg) no-repeat;
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">border</span>: 12px dashed #1b1a19; }
<span style="color: maroon;">.stamp p </span>{
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">color</span>: #fff;
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">margin</span>: 10px 10px 0 0;
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">font</span>: bold 60px Georgia, <span style="color: maroon;">&quot;Times New Roman&quot;</span>, Times, serif;
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue;">text-align</span>: right; }
</pre>
</blockquote>
<p>Pronto!</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/rkpNOVk-2tY" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/deixando-uma-imagem-como-se-fosse-um-selo-por-css_1235.html</feedburner:origLink></item>
<item>
	<title>CSS Orientado a Objetos</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/7hG3u2tR5uI/css-orientado-a-objetos_1130.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/css-orientado-a-objetos_1130.html#comentar</comments>
	<pubDate> Tue, 11 Aug 2009 13:42:22 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/css-orientado-a-objetos_1130.html</guid>
	<description><![CDATA[CSS Orientado a objetos? Uma reflexão sobre métodos de pensar as folhas de estilos, com uma apresentação em slides da idéia para orientação a objetos e boas práticas na codificação :)]]></description>
	<content:encoded><![CDATA[<p>Mesmo sabendo que o <a href="http://www.chrisb.com.br/blog">Chris</a> vai falar algumas coisa relacionada ao termo &quot;orientado a objetos&quot;, achei o conceito de otimizar e &quot;orientar&quot; o CSS bem interessante.</p>
<p>Na semana passada estava conversando sobre CSS aqui no servi&ccedil;o, debatendo o que era melhor:</p>
<h2>Op&ccedil;&atilde;o 1 - Uma classe por elemento</h2>
<p>Ao meu ver, este &eacute; o modo mais simples de &quot;pensar&quot; <a href="http://www.andafter.org/blogs/odesenvolvedor/tag/css"><strong>CSS</strong></a>. Voc&ecirc; pensa na estrutura html do seu site a para cada elemento cria uma classe, quando o elemento se repete voc&ecirc; usa a mesma classe.</p>
<p>Por exemplo, voc&ecirc; tem um quadro (div) com o topo azul, bordas cinza e &aacute;rea para conte&uacute;do com background branco.</p>
<p>Seu CSS seria:</p>
<p style="margin-left: 40px; "><span style="color: rgb(51, 51, 51); ">.quadro_azul{<br />
border: 1px solid #ccc;<br />
background: #fff;<br />
padding: 6px;<br />
}</span></p>
<p style="margin-left: 40px; "><span style="color: rgb(51, 51, 51); ">.quadro_azul h6{<br />
display: block;<br />
background: blue;<br />
}</span></p>
<p>&nbsp;</p>
<p>Para criar um quadro com o header vermelho voc&ecirc; precisar duplicar o c&oacute;digo do CSS, facilita a vida para atualizar um elemento espec&iacute;fico por&eacute;m dificulta para fazer altera&ccedil;&otilde;es gerais, como mudar o layout.</p>
<p>Esse m&eacute;todo tamb&eacute;m torna o c&oacute;digo mais sujo (e o html <strong><u>levemente</u></strong> mais limpo).</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Op&ccedil;&atilde;o 2 - Classes comuns para diversos objetos</h2>
<p>Para mim ainda &eacute; um pouco complicado pensar desta forma, uma coisa que temos que ter na cabe&ccedil;a antes de pensar nisso &eacute;: um elemento do html pode ter v&aacute;rias classes. Repitam isso.</p>
<p>No mesmo exemplo anterior, voc&ecirc; teria um estilo para delimitar TODOS os quadros, por exemplo:</p>
<p style="margin-left: 40px; ">.quadro {<br />
border: 1px solid #ccc;<br />
background: #fff;<br />
padding: 6px;<br />
}<br />
&nbsp;</p>
<p>&nbsp;E para setar as outras propriedades, como a cr do cabe&ccedil;alho definiria classes para isso.</p>
<p style="margin-left: 40px; ">h6 .azul{<br />
display:block;<br />
background:blue;<br />
}</p>
<p>Ou ainda mais amplo:</p>
<p style="margin-left: 40px; ">.azul{background:blue;}</p>
<p style="margin-left: 40px; ">.block{display:block;}</p>
<p>Claro que neste caso n&atilde;o faz muito sentido, porque estamos criando classe para setar uma &uacute;nica propriedade, um &quot;desperd&iacute;cio&quot; de classe por assim dizer.</p>
<p>Mas neste caso utilizamos na div a classe &quot;quadro e no cabe&ccedil;alho (h6) as classes azul e block.</p>
<p style="margin-left: 40px; ">&lt;h6 class=&quot;azul block&quot;&gt;Header do quadro&lt;/h6&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>O que &eacute; melhor?</h2>
<p>Eu ainda n&atilde;o tenho uma opini&atilde;o formada sobre qual o melhor caminho a seguir, mas neste momento eu recomendaria o budismo: <strong>&quot;siga o caminho do meio&quot;</strong>.</p>
<p>Ter centenas de classes definindo propriedades vai s&oacute; complicar a vida do desenvovledor em poss&iacute;veis manuten&ccedil;&otilde;es. O CSS vai dicar extenso, montar o html tamb&eacute;m pois voc&ecirc; ter&aacute; que chamar diversas classes para cada objeto.</p>
<p>Ter uma classe para cada objeto tamb&eacute;m pode n&atilde;o ser ben&eacute;fico, a cada nova p&aacute;gina voc&ecirc; provavelmente vai ter que criar uma nova classe, aumentnado seu CSS sem um bom reaproveitamento de c&oacute;digo.</p>
<p>Em ambos, l&aacute; se vai a facilidade para alterar layout de um modo REALMENTE r&aacute;pido.</p>
<p>&nbsp;</p>
<p>Gra&ccedil;as ao Twitter (<a href="http://www.andafter.org/publicacoes/twitter-o-que-e-como-usar-e-porque-usar_370.html"><strong>saiba o que &eacute; o Twitter e como us&aacute;-lo</strong></a>) visitei um link que me chamou a aten&ccedil;&atilde;o, com uma poss&iacute;vel buzzword: <strong>CSS Orientado a Objetos.</strong></p>
<p>Apesar do nome <em>mimimi</em>, a id&eacute;ia &eacute; realmente interessante. A heran&ccedil;a poderia ser bem &uacute;til no CSS, mas como o nome diz a &quot;cascata&quot; existe, pensando direito d&aacute; para aproveit&aacute;-la bem.</p>
<p>Bom, veja a apresenta&ccedil;&atilde;o em slides do conceito, abaixo continuo meus pitacos sobre essas pr&aacute;ticas!</p>
<p>&nbsp;</p>
<div style="width:425px;text-align:left" id="__ss_990405">
<p style="text-align: center; "><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Object Oriented CSS" href="http://www.slideshare.net/stubbornella/object-oriented-css">Object Oriented CSS</a><object style="margin:0px" width="425" height="355">
<param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=oocss-1233786987806904-3&amp;stripped_title=object-oriented-css" />
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" /><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=oocss-1233786987806904-3&amp;stripped_title=object-oriented-css" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma, arial; height: 26px; padding-top: 2px; text-align: center; ">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/stubbornella">Nicole Sullivan</a>.</div>
</div>
<p>Uma coisa que n&atilde;o costumo fazer e tenho certeza que &eacute; muito &uacute;til &eacute; a separa&ccedil;&atilde;o no CSS da estrutura (posicionamento de colunas, menu, header, footer, ad, etc...) da visualiza&ccedil;&atilde;o (backgrounds, fontes, bordas, etc.).</p>
<p>Isso facilita a altera&ccedil;&atilde;o de layout (visual e estrutural) e somado com o reaproveitamento de classes para diversos elementos, a redu&ccedil;&atilde;o do n&uacute;mero de classes para elementos bastante similares e outras boas t&eacute;cnicas pode reduzir bastante seu CSS e facilitar o trabalho em equipe!</p>
<p>O que voc&ecirc;s acham da id&eacute;ia, do nome e da apresenta&ccedil;&atilde;o?</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/7hG3u2tR5uI" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/css-orientado-a-objetos_1130.html</feedburner:origLink></item>
<item>
	<title>Percorrendo todos os registros do $_POST</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/2JAS_gr-_Qg/percorrendo-todos-os-registros-do-post_1208.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/percorrendo-todos-os-registros-do-post_1208.html#comentar</comments>
	<pubDate>Sun, 26 Jul 2009 20:42:47 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/percorrendo-todos-os-registros-do-post_1208.html</guid>
	<description><![CDATA[Percorrendo a lista de chaves/valores do $_POST do PHP]]></description>
	<content:encoded><![CDATA[<p>Voc&ecirc; vai l&aacute;, faz um formul&aacute;rio com 3, 4 campos e manda os dados para um script <em>PHP</em>... simples, do outro lado voc&ecirc; s&oacute; precisa fazer:<em> </em></p>
<p><em>$_POST[&quot;nome_do_campo1&quot;], $_POST[&quot;nome_do_campo2&quot;], etc...</em></p>
<p>para retornar os valores dos campos.</p>
<p>Mas, e se voc&ecirc; quizer automatizar isso? Por exemplo, se voc&ecirc; tem um formul&aacute;rio muito grande, ou esse mesmo formul&aacute;rio &eacute; montado dinamicamente dependendo de uma tabela espec&iacute;fica de um banco de dados... como fazer?</p>
<p>Simples: <strong>$_POST</strong> &eacute; um array que cont&eacute;m uma s&eacute;rie de pares chave/valor com o nome do campo e seu valor, passados por <em>POST</em> no request <em>HTTP</em>. Ent&atilde;o, &eacute; s&oacute; percorrer o mesmo com o <em>foreach</em> (como se faz num array normal). Segue um exemplo abaixo, onde se printa a lista de chaves/valores:</p>
<p><code><span class="html"><span class="default">&lt;?php<br />
$query_string </span><span class="keyword">= </span><span class="string">&quot;&quot;</span><span class="keyword">;<br />
if (</span><span class="default">$_POST</span><span class="keyword">) {<br />
&nbsp; </span><span class="default">$kv </span><span class="keyword">= array();<br />
&nbsp; foreach (</span><span class="default">$_POST </span><span class="keyword">as </span><span class="default">$key </span><span class="keyword">=&gt; </span><span class="default">$value</span><span class="keyword">) {<br />
&nbsp;&nbsp;&nbsp; </span><span class="default">$kv</span><span class="keyword">[] = </span><span class="string">&quot;$key=$value&quot;</span><span class="keyword">;<br />
&nbsp; }<br />
&nbsp; </span><span class="default">$query_string </span><span class="keyword">= </span><span class="default">join</span><span class="keyword">(</span><span class="string">&quot;&amp;&quot;</span><span class="keyword">, </span><span class="default">$kv</span><span class="keyword">);<br />
}<br />
else {<br />
&nbsp; </span><span class="default">$query_string </span><span class="keyword">= </span><span class="default">$_SERVER</span><span class="keyword">[</span><span class="string">&quot;QUERY_STRING&quot;</span><span class="keyword">];<br />
}<br />
echo </span><span class="default">$query_string</span><span class="keyword">;<br />
</span><span class="default">?&gt;</span></span></code></p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/2JAS_gr-_Qg" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/percorrendo-todos-os-registros-do-post_1208.html</feedburner:origLink></item>
<item>
	<title>Como listar posts de uma categoria no Wordpress</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/xvikL0-VfY0/como-listar-posts-de-uma-categoria-no-wordpress_1187.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-listar-posts-de-uma-categoria-no-wordpress_1187.html#comentar</comments>
	<pubDate>Sun, 12 Jul 2009 11:56:20 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-listar-posts-de-uma-categoria-no-wordpress_1187.html</guid>
	<description><![CDATA[Como listar os posts de uma determinada categoria no Wordpress]]></description>
	<content:encoded><![CDATA[<p>O <strong>Wordpress</strong> possui uma fun&ccedil;&atilde;o nativa para listar os posts, que &eacute; a <strong>get_posts(<em>params</em>)</strong></p>
<p>Como par&acirc;metros, podem ser passadas algumas condi&ccedil;&otilde;es, e uma delas &eacute; o nome da categoria em quest&atilde;o. Ent&atilde;o, o c&oacute;digo seria o seguinte:</p>
<pre name="code" class="html">
get_posts(&quot;category_name=nome_da_categoria&quot;);</pre>
<p>Troque <em>nome_da_categoria</em> pelo nome da categoria em quest&atilde;o.</p>
<p>Um c&oacute;digo completo poderia ser:</p>
<pre name="code" class="html">
&lt;?php $postslist = get_posts(&quot;category_name=portfolio&quot;);

foreach ($postslist as $post) :

&nbsp;&nbsp; echo $post-&gt;post_title;

endforeach;

?&gt;</pre>
<p>&nbsp;</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/xvikL0-VfY0" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-listar-posts-de-uma-categoria-no-wordpress_1187.html</feedburner:origLink></item>
<item>
	<title>Do ASP ao PHP, vim para o lado negro da força!</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/yT8T1mIksJM/do-asp-ao-php-vim-para-o-lado-negro-da-forca_1176.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/do-asp-ao-php-vim-para-o-lado-negro-da-forca_1176.html#comentar</comments>
	<pubDate> Fri, 3 Jul 2009 10:52:31 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/do-asp-ao-php-vim-para-o-lado-negro-da-forca_1176.html</guid>
	<description><![CDATA[Decidi migrar de vez para o PHP, deixando de lado o ASP clássico e colocando os estudos em .NET em stand by. Aqui explico meus motivos...]]></description>
	<content:encoded><![CDATA[<p>Buenas povo! Faz tempo que n&atilde;o dedico meu tempo a escrever aqui no <strong><a href="http://www.odesenvolvedor.com.br">O Desenvolvedor</a></strong>, mas pretendo voltar ao ritmo anterior e com algumas mudan&ccedil;as (acompanhando as novidades na minha vida profissional).</p>
<p>Este &eacute; um post para apresentar algumas novidades que, de certa forma, guiar&atilde;o minhas publica&ccedil;&otilde;es por aqui. A primeira &eacute; que <strong>n&atilde;o vou dar continuidade aos meus estudos com .NET</strong>, e estou reduzindo meu trabalho com o <a href="http://www.andafter.org/blogs/odesenvolvedor/tag/asp"><strong>ASP</strong></a> cl&aacute;ssico. Isso n&atilde;o quer dizer que encerrarei meus posts sobre a linguagem, mas como estou me dedicando a estudar outras, poss&iacute;velmente me focarei nelas.</p>
<p style="margin-left: 40px; "><span style="color: rgb(51, 51, 51); ">Ah, preciso agradecer ao </span><strong><a href="http://leocaseiro.com.br/"><span style="color: rgb(51, 51, 51); ">Leo Caseiro</span></a></strong><span style="color: rgb(51, 51, 51); ">, que me disponibilizou um material excelente sobre .NET quando comecei a estudar!</span></p>
<p>Espero que este artigo ajude a orientar de alguma forma as pessoas que procuram pela manjada quest&atilde;o: &quot;que linguagem &eacute; melhor estudar?&quot;</p>
<p>Vamos aos motivos das minhas mudan&ccedil;as...</p>
<p>&nbsp;</p>
<h2>Porque <em>&quot;desistir&quot;</em> o ASP cl&aacute;ssico?</h2>
<p>J&aacute; fazia algum tempo que eu procurava evoluir, trocar de linguagem de programa&ccedil;&atilde;o, e por isso iniciei meus estudos em .NET.&nbsp;Vamos aos <strike>3</strike>&nbsp;4 motivos que me levaram a&nbsp;<em>&quot;pular fora&quot;:</em></p>
<p style="text-align: center; "><input type="image" src="http://www.andafter.org/images/album/internet/MicrosoftLogo.jpg" alt="Microsoft" width="450" height="360" /></p>
<p>Para aprender alguma coisa nova. E n&atilde;o estou dizendo que sei tudo do ASP, n&atilde;o mesmo. Mas mudar &eacute; bom, gosto de mudan&ccedil;as, aprender uma linguagem de programa&ccedil;&atilde;o nova &eacute; como come&ccedil;ar a estudar um novo idioma, estimula o c&eacute;rebro, tira noites de sono de uma forma positiva, anima!</p>
<p>Queria mudar porque o&nbsp;<strong><a href="http://www.andafter.org/blogs/odesenvolvedor/tag/asp">ASP</a>&nbsp;</strong>est&aacute; se tornando obsoleto (para muitos, j&aacute; &eacute;) devido a migra&ccedil;&atilde;o para o .NET, que apresenta mais possibilidades e melhor desempenho (dizem, nunca testei realmente).</p>
<p>Comunidade de desenvolvedores muito pequena. Tudo bem que existe o Google, existem f&oacute;runs e at&eacute; uma documenta&ccedil;&atilde;o razo&aacute;vel, mas nada comparado a PHP, por exemplo. Muitas vezes eu quebrava a cabe&ccedil;a para desenvolver determinada funcionalidade, sabendo que em outras linguagens uma centena de desenvolvedores j&aacute; haviam desenvolvido isso e disponibilizado o c&oacute;digo para uso, estudo e altera&ccedil;&otilde;es.</p>
<p>Dinheiro. Grana. Eu pago licen&ccedil;a para utilizar o Windows Server no meu servidor. Eu n&atilde;o consigo bons dll&acute;s gratuitos para manipula&ccedil;&atilde;o de imagem ou arquivos (pdf&acute;s, planilhas, etc...). Quase tudo &eacute; pago, seguindo o &quot;padr&atilde;o&quot; da tecnologia ASP.</p>
<p>&nbsp;</p>
<h2>Porque n&atilde;o o .NET?</h2>
<p>Alguns dos motivos que me fizeram querer mudar do&nbsp;<strong><a href="http://www.andafter.org/blogs/odesenvolvedor/tag/asp">ASP</a>&nbsp;</strong>continuam presentes na linguagem .NET, como por exemplo o <strong>custo.</strong></p>
<p style="text-align: center; "><input type="image" src="http://www.andafter.org/images/album/internet/elephpant-elephant-php-logo.png" alt="PHP" width="397" height="255" /></p>
<p>A comunidade de desenvolvedores n&atilde;o ser muito grande (ou n&atilde;o gostar de colaborar com o mundo, indo contra a poderosa e adorada &quot;<em>interwebs&quot;</em>).</p>
<p>Motivos pessoais: como eu comentei, estou de emprego novo, e por aqui o .Net n&atilde;o &eacute; utilizado (pelo menos at&eacute; onde eu sei).</p>
<p>&nbsp;</p>
<h2><strong>Porque escolhi o PHP?</strong></h2>
<p><strike>Pra ser cool.</strike></p>
<p>O primeiro motivo, obviamente, a linguagem aberta, gratuita. Vou economizar um dinheiro consider&aacute;vel por m&ecirc;s pelo simples fato de n&atilde;o precisar pagar licen&ccedil;a do Windows no servidor. <span style="color: rgb(153, 153, 153); ">Isso ser&aacute; a longo prazo, somente depois que eu migrar meu sistema todo de Intranet para o </span><a href="http://www.andafter.org/blogs/odesenvolvedor/tag/php"><span style="color: rgb(153, 153, 153); "><strong>PHP</strong></span></a><span style="color: rgb(153, 153, 153); ">, que vai levar possivelmente mais do que seis meses...</span></p>
<p style="text-align: center; "><img alt="Darth Vader" width="350" height="403" src="http://www.andafter.org/images/album/internet/MasterReplica_DarthVaderHelmet.jpg" /></p>
<p style="text-align: center; ">Para ficar do lado negro da for&ccedil;a!*</p>
<p style="text-align: center; ">&nbsp;</p>
<p>Comunidade gigantesca de desenvovledores e melhor, que adoram compartilhar conhecimentos. A documenta&ccedil;&atilde;o &eacute; maravilhosa.</p>
<p>Linguagem ainda em desenvolvimento (agora o&nbsp;<a href="http://www.andafter.org/blogs/odesenvolvedor/tag/php"><strong>PHP</strong></a>&nbsp;5, estou certo?), sem a necessidade de &quot;extens&otilde;es&quot; como os dll&acute;s que j&aacute; me perturbaram no <a href="http://www.andafter.org/blogs/odesenvolvedor/tag/asp"><strong>ASP</strong></a>.</p>
<p>J&aacute; tinha um conhecimento superficial sobre a linguagem, foi com ela me inseri no mundo do desenvolvimento criando meu primeiro blog e CMS, l&aacute; no meu tempo de guri...</p>
<p>Comecei a estudar loucamente MVC, nunca vi um framework gratuito e funcional para&nbsp;<a href="http://www.andafter.org/blogs/odesenvolvedor/tag/asp"><strong>ASP</strong></a>, j&aacute; me indicaram diversos (e aparentemente muito bons) para o&nbsp;<strong><a href="http://www.andafter.org/blogs/odesenvolvedor/tag/php">PHP</a>!</strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&Eacute; isso... a partir de agora n&atilde;o se assustem se surgir por aqui alguns posts <em>&quot;PHP for dummies&quot;</em>, e aceito sugest&otilde;es de artigos tamb&eacute;m, viu?</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>* o t&iacute;tulo deste artigo &eacute; gra&ccedil;as ao tweet do <strong><a href="http://www.twitter.com/cleiverrr">@cleiverrr</a></strong>, quando anunciei meus estudos com o PHP:<em> &quot;lol </em><a href="http://www.twitter.com/gserrano"><em><strong>@gserrano</strong></em></a><em> est&aacute; vindo pro lado negro da for&ccedil;a! =D&quot;</em></p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/yT8T1mIksJM" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/do-asp-ao-php-vim-para-o-lado-negro-da-forca_1176.html</feedburner:origLink></item>
<item>
	<title>Wordpress - listar usuários com um determinado perfil</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/tZz7T-XsGlQ/wordpress-listar-usuarios-com-um-determinado-perfil_1158.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/wordpress-listar-usuarios-com-um-determinado-perfil_1158.html#comentar</comments>
	<pubDate> Mon, 22 Jun 2009 15:47:37 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/wordpress-listar-usuarios-com-um-determinado-perfil_1158.html</guid>
	<description><![CDATA[Veja como listar, no Wordpress, todos os usuários de um certo perfil (autor, editor, etc...)]]></description>
	<content:encoded><![CDATA[<p>Tenho quase certeza que essa n&atilde;o &eacute; a melhor forma (sem usar algum plugin) para listar todos os usu&aacute;rios cadastrados no seu blog/site com o <strong>Wordpress</strong> de um determinado perfil, mas no caso em que a performance n&atilde;o &eacute; gargalo, n&atilde;o vi problemas:</p>
<ul>
    <li>fa&ccedil;a um <em>select</em> na tabela de usu&aacute;rios, retornando todos os <em>ids</em></li>
    <li>percorra a lista de <em>ids</em>, retornando cada usu&aacute;rio relativo a esse <em>id</em></li>
    <li>faz um if para checar o <em>user_level</em>. &Eacute; ele que define o perfil do usu&aacute;rio</li>
</ul>
<p>O c&oacute;digo seria:</p>
<p><code>&lt;?php <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $aUsersID = $wpdb-&gt;get_col( $wpdb-&gt;prepare(&quot;SELECT $wpdb-&gt;users.ID FROM $wpdb-&gt;users ORDER BY %s ASC&quot;, &quot;&quot;));<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;foreach ( $aUsersID as $iUserID ) :<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$user = get_userdata( $iUserID );<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if($user-&gt;user_level==2) { //2 &eacute; o user_level para contribuidor<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //faz o que for necess&aacute;rio com o objeto $user<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endforeach;<br />
?&gt;<br />
<br type="_moz" />
</code></p>
<p>&nbsp;</p>
<p>Pelo que pude ver da estrutura da base do <strong>Wordpress</strong>, que eu ainda estou conhecendo, h&aacute; uma tabela <strong>wp_users</strong> que tem os usu&aacute;rios e uma outra, <strong>wp_usermet</strong><strong>a</strong>, de <em>metadados</em>. N&atilde;o entendi porque <em>user_level</em> n&atilde;o faz parte da <strong>wp_users</strong> pois est&aacute; ligado diretamente ao usu&aacute;rio (ser&aacute; que nas primeiras vers&otilde;es n&atilde;o existia esse campo e depois criaram como um metadado?), mas certamente um <em>inner join</em> poderia resolver mais elegantemente essa quest&atilde;o.</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/tZz7T-XsGlQ" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/wordpress-listar-usuarios-com-um-determinado-perfil_1158.html</feedburner:origLink></item>
<item>
	<title>Validação de CPF por javascript</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/GvCfePkaSXI/validacao-de-cpf-por-javascript_1138.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/validacao-de-cpf-por-javascript_1138.html#comentar</comments>
	<pubDate> Tue, 16 Jun 2009 9:59:36 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/validacao-de-cpf-por-javascript_1138.html</guid>
	<description><![CDATA[Função javascript para validar CPFs]]></description>
	<content:encoded><![CDATA[<p>Depois de testar v&aacute;rias fun&ccedil;&otilde;es, encontrei uma - na verdade, encontraram e me encaminharam - que parece funcionar corretamente, pois o que mais acontecia era funcionar com uns, e com outros n&atilde;o, a&iacute; trocava a fun&ccedil;&atilde;o e parava de funcionar com alguns mas com outros come&ccedil;ava a rolar.</p>
<blockquote>
<p><em>function ValidarCPF(Objcpf){ <br />
&nbsp;&nbsp;&nbsp; var cpf = Objcpf.value; <br />
&nbsp;&nbsp;&nbsp; exp = /.|-/g <br />
&nbsp;&nbsp;&nbsp; cpf = cpf.toString().replace( exp, &quot;&quot; ); <br />
&nbsp;&nbsp;&nbsp; var digitoDigitado = eval(cpf.charAt(9)+cpf.charAt(10)); <br />
&nbsp;&nbsp;&nbsp; var soma1=0, soma2=0; <br />
&nbsp;&nbsp;&nbsp; var vlr =11; <br />
&nbsp;&nbsp;&nbsp; for(i=0;i&lt;9;i++){ <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; soma1+=eval(cpf.charAt(i)*(vlr-1)); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; soma2+=eval(cpf.charAt(i)*vlr); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; vlr--; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;  <br />
&nbsp;&nbsp;&nbsp; soma1 = (((soma1*10)%11)==10 ? 0:((soma1*10)%11)); <br />
&nbsp;&nbsp;&nbsp; soma2 = (((soma2+(2*soma1))*10)%11); <br />
&nbsp;&nbsp;&nbsp;  <br />
&nbsp;&nbsp;&nbsp; if(cpf == &quot;11111111111&quot; || cpf == &quot;22222222222&quot; || cpf == <br />
&quot;33333333333&quot; || cpf == &quot;44444444444&quot; || cpf == &quot;55555555555&quot; || cpf == <br />
&quot;66666666666&quot; || cpf == &quot;77777777777&quot; || cpf == &quot;88888888888&quot; || cpf == <br />
&quot;99999999999&quot; || cpf == &quot;00000000000&quot; ){ <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var digitoGerado = null; <br />
&nbsp;&nbsp;&nbsp; }else{ <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var digitoGerado = (soma1*10) + soma2; <br />
&nbsp;&nbsp;&nbsp; } <br />
<br />
&nbsp;&nbsp;&nbsp; if(digitoGerado != digitoDigitado){ <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; return true;<br />
} </em></p>
</blockquote><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/GvCfePkaSXI" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/validacao-de-cpf-por-javascript_1138.html</feedburner:origLink></item>
<item>
	<title>Menu por ano e mês no Wordpress</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/dkZhh9cIamI/menu-por-ano-e-mes-no-wordpress_1121.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/menu-por-ano-e-mes-no-wordpress_1121.html#comentar</comments>
	<pubDate>Sun, 7 Jun 2009 12:53:54 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/menu-por-ano-e-mes-no-wordpress_1121.html</guid>
	<description><![CDATA[Como montar um menu por ano e mês dos seus posts no Wordpress]]></description>
	<content:encoded><![CDATA[<p>Mexendo no template de um blog do Wordpress, precisei inserir aquele menu que tem os anos e os m&ecirc;ses desses anos para navegac&atilde;o.</p>
<p>O c&oacute;digo &eacute; simples:</p>
<pre name="code" class="html">
&lt;ul&gt;
&lt;?php
/**/
$years = $wpdb-&gt;get_col(&quot;SELECT DISTINCT YEAR(post_date) FROM $wpdb-&gt;posts WHERE post_status = &quot;publish&quot; AND post_type = &quot;post&quot; ORDER BY post_date DESC&quot;);
foreach($years as $year) :
?&gt;
	&lt;li&gt;&lt;a href=&quot;&lt;?php echo get_year_link($year); ?&gt; &quot;&gt;&lt;?php echo $year; ?&gt;&lt;/a&gt;

		&lt;ul&gt;
		&lt;?	$months = $wpdb-&gt;get_col(&quot;SELECT DISTINCT MONTH(post_date) FROM $wpdb-&gt;posts WHERE post_status = &quot;publish&quot; AND post_type = &quot;post&quot; AND YEAR(post_date) = &quot;&quot;.$year.&quot;&quot; ORDER BY post_date DESC&quot;);
			foreach($months as $month) :
			?&gt;
			&lt;li&gt;&lt;a href=&quot;&lt;?php echo get_month_link($year, $month); ?&gt;&quot;&gt;&lt;?php echo date( &quot;F&quot;, mktime(0, 0, 0, $month) );?&gt;&lt;/a&gt;&lt;/li&gt;
			&lt;?php endforeach;?&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
&lt;?php endforeach; ?&gt;
&lt;/ul&gt;</pre>
<p>Com isso, ser&aacute; exibido um menu mais ou menos assim</p>
<p>2009</p>
<ul>
    <li>Maio</li>
    <li>Abril</li>
    <li>Mar&ccedil;o</li>
    <li>Fevereiro</li>
    <li>Janeiro</li>
</ul>
<p>2008</p>
<ul>
    <li>Dezembro</li>
    <li>Novembro</li>
</ul>
<p>&nbsp;</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/dkZhh9cIamI" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/menu-por-ano-e-mes-no-wordpress_1121.html</feedburner:origLink></item>
<item>
	<title>Criando miniatura de imagem no PHP com a GD</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/yDsnHjGNTlo/criando-miniatura-de-imagem-no-php-com-a-gd_1043.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/criando-miniatura-de-imagem-no-php-com-a-gd_1043.html#comentar</comments>
	<pubDate> Sat, 2 May 2009 11:45:5 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/criando-miniatura-de-imagem-no-php-com-a-gd_1043.html</guid>
	<description><![CDATA[Como criar uma miniatura de imagem no PHP com a biblioteca GD]]></description>
	<content:encoded><![CDATA[<p>Nesse post eu havia falado, por cima, sobre a biblioteca GD, que possibilita a manipula&ccedil;&atilde;o de imagens no PHP.</p>
<p>Uma das funcionalidades mais necess&aacute;rias no PHP &eacute; criar uma thumbnail (miniatura) de uma imagem - e certamente &eacute; uma das primeiras coisas que algu&eacute;m que come&ccedil;a a programar em PHP e precisa fazer com imagens, tem a necessidade.</p>
<p>Segue abaixo a fun&ccedil;&atilde;o que eu uso - h&aacute; anos. N&atilde;o foi desenvovida por mim, achei ela no Google anos atr&aacute;s, e sei que ela se popularizou!</p>
<p>&nbsp;</p>
<blockquote>
<p><em>&lt;?php<br />
&nbsp;&nbsp; //imagem original<br />
&nbsp;&nbsp;&nbsp; $source_image = &quot;spork.jpg&quot;;<br />
<br />
&nbsp;&nbsp; //altura m&aacute;xima<br />
&nbsp;&nbsp;&nbsp; $thumb_height = 40;<br />
<br />
&nbsp;&nbsp;&nbsp; //prefixo da miniatura<br />
&nbsp;&nbsp;&nbsp; $thumb_prefix = &quot;thumb_&quot;;<br />
<br />
&nbsp;&nbsp; //qualidade - vai de 0 a 100<br />
&nbsp;&nbsp;&nbsp; $quality = 100;<br />
<br />
&nbsp;&nbsp; //checa se imagem existe<br />
&nbsp;&nbsp; if(!file_exists($source_image)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;Imagem n&atilde;o encontrada&quot;;<br />
&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //tipos suportados (jpg, png, gif, etc...)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $supported_types = array(1, 2, 3, 7);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //retorna informa&ccedil;&otilde;es da imagem<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list($width_orig, $height_orig, $image_type) = getimagesize($source_image);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //checa se &eacute; um tipo suportado<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!in_array($image_type, $supported_types)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;Tipo n&atilde;o suportado de imagem: &quot; . $image_type;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //nome da imagem<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $path_parts = pathinfo($source_image);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $filename = $path_parts[&quot;filename&quot;];<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //calcula as propor&ccedil;&otilde;es<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $aspect_ratio = (float) $width_orig / $height_orig;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //calcula a largura da thumb baseada na altura<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $thumb_width = round($thumb_height * $aspect_ratio);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //detecta o tipo de arquivo<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $source = imagecreatefromstring(file_get_contents($source_image));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //cria canvas<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $thumb = imagecreatetruecolor($thumb_width, $thumb_height);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imagecopyresampled($thumb, $source, 0, 0, 0, 0, $thumb_width, $thumb_height, $width_orig, $height_orig);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //destr&oacute;i, para liberar mem&oacute;ria<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imagedestroy($source);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //cria thumb baseada no tipo da imagem<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch ( $image_type )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imagegif($im, $fileName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $thumbnail = $thumb_prefix.$filename . &quot;.gif&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $thumbnail = $thumb_prefix.$filename . &quot;.jpg&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imagejpeg($thumb, $thumbnail, $quality);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 3:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imagepng($im, $fileName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $thumbnail = $thumb_prefix.$filename . &quot;.png&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 7:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imagewbmp($im, $fileName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $thumbnail = $thumb_prefix.$filename . &quot;.bmp&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
?&gt;</em></p>
</blockquote><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/yDsnHjGNTlo" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/criando-miniatura-de-imagem-no-php-com-a-gd_1043.html</feedburner:origLink></item>
<item>
	<title>Google Analytics libera API para desenvolvedores</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/S2_V07kQYSE/google-analytics-libera-api-para-desenvolvedores_1034.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/google-analytics-libera-api-para-desenvolvedores_1034.html#comentar</comments>
	<pubDate> Tue, 28 Apr 2009 12:40:19 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/google-analytics-libera-api-para-desenvolvedores_1034.html</guid>
	<description><![CDATA[O Google livrou uma API para o Analytics que permite a exportação de todos os dados disponíveis no Analytics para uso em outros aplicativos, uma mão na roda para o acompanhamento de estatísticas...]]></description>
	<content:encoded><![CDATA[<p>Ontem li no <a href="http://www.profissionaisdeweb.com/dicas/google-disponibiliza-api-do-analytics/">Profissionais Web</a>&nbsp;que o <a href="http://www.google.com.br">Google</a> disponibilizou uma API para o <strong>Google&nbsp;Analytics</strong>, isso significa que agora ser&aacute; poss&iacute;vel desenvolver aplicativos utilizando as estat&iacute;sticas vindas do Analytics.</p>
<p>Uma verdadeira m&atilde;o na roda!</p>
<p>&nbsp;</p>
<h2>O que &eacute; poss&iacute;vel fazer com a API do Analytics?</h2>
<p>Com a API significa que voc&ecirc; pode ter acesso a <strong>TODOS</strong> os dados dispon&iacute;veis no Analytics de um aplicativo terceirizado ou desenvolvido por voc&ecirc;, ou em sites de terceiros. Para o meu caso pensei em duas aplica&ccedil;&otilde;es.</p>
<p>&nbsp;</p>
<h3>1. Exibir relat&oacute;rios para os clientes em interface pr&oacute;pria</h3>
<p>&nbsp;</p>
<p>Atualmente eu trabalho com aplicativos web e com CMS pr&oacute;prio (GS Intra), por&eacute;m nunca desenvolvi um sistema de estat&iacute;sticas para ele por dois motivos principais relacionadas ao Analytics:</p>
<ul>
    <li>Gratuito</li>
    <li>N&atilde;o utiliza recursos do meu servidor</li>
    <li>Superioridade t&eacute;cnica ao que eu poderia desenvoler</li>
</ul>
<p>Com o uso da API ser&aacute; poss&iacute;vel que eu centralize em um s&oacute; aplicativo o gerenciamento do conte&uacute;do, dos clientes e estat&iacute;sticas do site de meus clientes. N&atilde;o preciso mandar o cliente para um site externo para que ele visualize as estat&iacute;sticas. Facilita para o cliente, &eacute; obviamente &eacute; melhor para o desenvolvedor, que agrega mais funcionalidade e valor ao sistema.</p>
<p>&nbsp;</p>
<h3>2. Acompanhar impacto de mudan&ccedil;as no site</h3>
<p>Eu tenho s&eacute;rios problemas para acompanhar o impacto das altera&ccedil;&otilde;es realizadas no And After. Por exemplo, adiciono um elemento de navega&ccedil;&atilde;o visando aumentar o tempo m&eacute;dio de visita dentro do site no dia 27 de abril.</p>
<p>Preciso de um log, onde eu adicione nesta data todas as altera&ccedil;&otilde;es feitas para que posteriormente eu colete informa&ccedil;&otilde;es do &quot;antes e depois&quot;. Utilizei por algum tempo o Excel para fazer isso, mas era praticamente no CTRL+C e CTRL+V para mesclar dados do Buscap&eacute;, AdSense e Analytics em uma mesma tabela, al&eacute;m das datas das modifica&ccedil;&otilde;es.</p>
<p>Agora &eacute; poss&iacute;vel eu tem um banco de dados com todas as altera&ccedil;&otilde;es realizadas em no site (como o exemplo do elemento de navega&ccedil;&atilde;o) e mesclar com os dados que ser&atilde;o importados da API, facilitando a cria&ccedil;&atilde;o do &quot;antes e depois&quot; das altera&ccedil;&otilde;es de forma autom&aacute;tica.&nbsp;</p>
<p>Quando (e se) a API do AdSense for liberada ent&atilde;o, ficar&aacute; show. Em um &uacute;nico aplicativo ser&aacute; poss&iacute;vel medir o impacto de mudan&ccedil;as nas visitas e rendimentos de um site.&nbsp;</p>
<p>&nbsp;</p>
<p>Ta a&iacute; a dica para um aplicativo que eu utilizaria. haha :)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Saiba mais sobre a API do Analytics em</h2>
<p><a href="http://analytics.blogspot.com/2009/04/attention-developers-google-analytics.html">Blog oficial do Google Analytics</a></p>
<p><a href="http://code.google.com/intl/pt-BR/apis/analytics/docs/">Google Code Analytics</a></p>
<p style="margin-left: 40px; "><a href="http://code.google.com/intl/pt-BR/apis/analytics/docs/gdata/1.0/gdataJavascript.html">Javascript</a></p>
<p style="margin-left: 40px; "><a href="http://code.google.com/intl/pt-BR/apis/analytics/docs/gdata/1.0/gdataJava.html">Java</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>O que j&aacute; existe desenvolvido?</h2>
<h3>Polaris</h3>
<p>At&eacute; o momento testei um aplicativo desktop, o <a href="http://www.desktop-reporting.com/polaris.html">Polaris</a>. Ele utiliza a plataforma (plataforma?) <strong>Adobe Air</strong>, e a vers&atilde;o free &eacute; extremamente simples de usar.</p>
<p>Apresenta diversas informa&ccedil;&otilde;es em uma pequena janela com uma interface bastante intuitiva.&nbsp;</p>
<p>Confira algumas telas do Polaris , o &nbsp;analytics desktop:</p>
<p style="text-align: center; "><img alt="Polaris - Google analytics destkop" width="470" height="280" src="http://www.andafter.org/images/album/internet/dashboard.jpg" /></p>
<p style="text-align: center; "><img alt="Polaris - Google analytics destkop" width="470" height="280" src="http://www.andafter.org/images/album/internet/content.jpg" /></p>
<p style="text-align: center; "><img alt="Polaris - Google analytics destkop" width="470" height="280" src="http://www.andafter.org/images/album/internet/visits.jpg" /></p>
<p style="text-align: center; "><img alt="Polaris - Google analytics destkop" width="470" height="280" src="http://www.andafter.org/images/album/internet/traffic.jpg" /></p>
<p style="text-align: center; ">&nbsp;</p>
<p>Recomendo!&nbsp;</p>
<p>&nbsp;</p>
<h3>Mobile<span class="Apple-style-span" style="color: rgb(85, 26, 139); text-decoration: underline;"><br />
</span></h3>
<p>N&atilde;o testei, mas no blog oficial do Analytics recomendaram uma <a href="http://www.analyticsmarket.com/mobileapps/mobile-ga/android">aplica&ccedil;&atilde;o Android do Analytics.</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Assim que eu fizer testes com a ferramenta publicarei os resultados e programa&ccedil;&otilde;es aqui no <a href="http://www.odesenvolvedor.com.br"><strong>O desenvolvedor</strong></a>, se voc&ecirc; j&aacute; desenvolveu alguma coisa ou quer compartilhas suas id&eacute;ias pode <a href="http://www.andafter.org/publicar2.asp">publicar um artigo</a> ou <a href="#comentar">comentar</a>. :)</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/S2_V07kQYSE" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/google-analytics-libera-api-para-desenvolvedores_1034.html</feedburner:origLink></item>
<item>
	<title>Biblioteca GD: trabalhe com imagens no PHP</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/P4zvoMZors8/biblioteca-gd-trabalhe-com-imagens-no-php_1025.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/biblioteca-gd-trabalhe-com-imagens-no-php_1025.html#comentar</comments>
	<pubDate> Tue, 21 Apr 2009 16:41:52 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/biblioteca-gd-trabalhe-com-imagens-no-php_1025.html</guid>
	<description><![CDATA[Apresentação e um exemplo básico de uso da GD - biblioteca PHP para manipulação de imagens]]></description>
	<content:encoded><![CDATA[<p>Com <strong>PHP</strong> &eacute; poss&iacute;vel al&eacute;m de trabalhar com a sa&iacute;da (x)html ter manipula&ccedil;&atilde;o de imagens. A biblioteca mais utilizada &eacute; a GD - <a href="http://br.php.net/gd">http://br.php.net/gd</a></p>
<p>Por padr&atilde;o ela j&aacute; vem instalada desde a vers&atilde;o 4.3 do <strong>PHP</strong>, e com ela &eacute; poss&iacute;vel desde criar imagens do 0, escrevendo textos, usando filtros de opacidade, at&eacute; criar miniaturas de outras imagens ou, ainda mesclar as mesmas, criando mosaicos e afins, com sa&iacute;das em formato jpg, png, e por a&iacute; vai. As possibilidades s&atilde;o infinitas, e ficam a disposi&ccedil;&atilde;o e necessidade de quem for implementar.</p>
<p>Abaixo segue o exemplo cl&aacute;ssico de uso mais simples da biblioteca: criar uma imagem com largura e altura definida, com um texto no miolo dela.</p>
<p><em>&lt;?php </em></p>
<p><em>function createImageWithText($width, $height, $txt) {<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; //cria uma imagem com largura x altura definida pelo usu&aacute;rio<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $im = imagecreatetruecolor($width, $height);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //aloca as cores para imagem<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $text_color = imagecolorallocate($im, 233, 14, 91);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //escreve o texto na imagem<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; imagestring($im, 1, 5, 5,&nbsp; $txt, $text_color);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //inicia buffer<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ob_start();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // cria imagem de sa&iacute;da, formato jpeg, bom 85% de qualidade<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; imagejpeg($im, NULL, 85);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //captura sa&iacute;da para string<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $contents = ob_get_contents();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //finaliza captura<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ob_end_clean();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //libera mem&oacute;ria<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; imagedestroy($im);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //escreve arquivo em disco, usando os comando b&aacute;sicos do PHP<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $fh = fopen(&quot;temp/img2.jpg&quot;, &quot;w+&quot; );<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fwrite( $fh, $contents );<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fclose( $fh );<br />
<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; } </em></p>
<p><em>&nbsp;&nbsp; createImageWithText(400, 200, &quot;meu texto&quot;); </em></p>
<p><em>?&gt;</em></p>
<p>Em breve farei outros posts a respeito!</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/P4zvoMZors8" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/biblioteca-gd-trabalhe-com-imagens-no-php_1025.html</feedburner:origLink></item>
<item>
	<title>Como usar o confirm() no javascript</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/1lYBgdSoSlc/como-usar-o-confirm-no-javascript_1020.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-usar-o-confirm-no-javascript_1020.html#comentar</comments>
	<pubDate> Thu, 16 Apr 2009 20:22:21 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-usar-o-confirm-no-javascript_1020.html</guid>
	<description><![CDATA[Como usar o comando confirm() do javascript para interagir com o usuário]]></description>
	<content:encoded><![CDATA[<p>Muitas vezes &eacute; necess&aacute;rio interagir com o visitante que est&aacute; no seu site, e a forma mais trivial &eacute; usar o comando <em>confirm()</em> do <strong>javascript</strong> para isso.</p>
<p>Com ele voc&ecirc; pode parar o fluxo que est&aacute; acontecendo exibindo uma caixa de di&aacute;logo - na qual a mensagem exibida &eacute; passada como par&acirc;metro para esse comando - na qual o usu&aacute;rio tem a op&ccedil;&atilde;o de escolher entre Sim e N&atilde;o (ou Ok e Cancelar, dependendo do browser). Quando o usu&aacute;rio faz a sele&ccedil;&atilde;o, o comando retorna true ou false, o que possibilita que o fluxo seja alterado.</p>
<p>Um exemplo de uso:</p>
<p><em>if(confirm(&quot;Deseja realmente fazer isso?&quot;)) {<br />
&nbsp; //faz algo, como chamar uma fun&ccedil;&atilde;o que apaga dados<br />
} else {<br />
&nbsp; alert(&quot;Ok, voc&ecirc; n&atilde;o quer mesmo fazer isso...&quot;);<br />
}</em></p>
<p>Simples e pr&aacute;tico!</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/1lYBgdSoSlc" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-usar-o-confirm-no-javascript_1020.html</feedburner:origLink></item>
<item>
	<title>Como contar arquivos em uma pasta usando ASP (FSO)</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/486W_4lV5rY/como-contar-arquivos-em-uma-pasta-usando-asp-fso-_845.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-contar-arquivos-em-uma-pasta-usando-asp-fso-_845.html#comentar</comments>
	<pubDate> Tue, 7 Apr 2009 13:3:7 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-contar-arquivos-em-uma-pasta-usando-asp-fso-_845.html</guid>
	<description><![CDATA[Como contar os arquivos em uma pasta utilizando FSO e o comando .count. nada de usar POG e usar loop nos arquivos do diretório... ]]></description>
	<content:encoded><![CDATA[<p>Na intranet de um cliente existe um m&oacute;dulo para distribui&ccedil;&atilde;o de arquivos para os clientes dele, para isso eu utilizo o <strong>File System Object (FSO)</strong>, que navega pelas pastas especificadas do sistema (onde meu cliente sobe diversos arquivos por FTP), identifica os arquivos e distribui cada arquivo para o respectivo usu&aacute;rio final (o cliente do meu cliente).</p>
<p>Com poucos arquivos a distribui&ccedil;&atilde;o acontece tranquilamente, os arquivos s&atilde;o movidos para a pasta de cada usu&aacute;rio, cada usu&aacute;rio recebe uma notifica&ccedil;&atilde;o por e-mail com o link para a &aacute;rea de login do sistema com acesso aos arquivos. Por&eacute;m todo o servidor tem um limite para execu&ccedil;&atilde;o de scripts e muitas vezes simplesmente aumentar esse limite de tempo de execu&ccedil;&atilde;o n&atilde;o &eacute; recomend&aacute;vel, pois se alguma coisa der errado (como um loop infinito) vai ficar sobrecarregndo o servidor.</p>
<p style="text-align: center; "><span class="Apple-style-span" style="font-family: Verdana; font-size: 11px; line-height: 14px; "><a href="http://www.andafter.org/blogs/eucompraria/publicacoes/faca-de-sua-parede-um-desktop-com-pastas-e-tudo_536.html"><img width="450" height="450" alt="New Folder" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " src="http://i291.photobucket.com/albums/ll285/bibia1010/073_Neuer_Ordner_02.jpg" /></a></span><a href="http://www.andafter.org/blogs/eucompraria/publicacoes/faca-de-sua-parede-um-desktop-com-pastas-e-tudo_536.html"><br type="_moz" />
</a></p>
<p style="text-align: center; "><a href="http://www.andafter.org/blogs/eucompraria/publicacoes/faca-de-sua-parede-um-desktop-com-pastas-e-tudo_536.html">Isso sim &eacute; organizar os documentos em pastas</a></p>
<p>&nbsp;</p>
<p>Come&ccedil;aram a acontecer problemas quando existiam muitos arquivos para mover, pois al&eacute;m da listagem de todos os arquivos o sistema segue uma l&oacute;gica para identificar de qual usu&aacute;rio &eacute; cada arquivo para que a distribu&ccedil;&atilde;o seja feita de forma correta.</p>
<p>A solu&ccedil;&atilde;o para n&atilde;o retornar o erro de limite de tempo excedido e n&atilde;o aumentar loucamente este limite (o usu&aacute;rio certamente vai achar que deu erro quando uma p&aacute;gina demorar demais para carregar) foi limitar o n&uacute;mero de arquivos movimentados por vez, isso permite dar um feedback entre a &quot;pagina&ccedil;&atilde;o&quot; evitando que o usu&aacute;rio pense que o aplicativo travou ou deu erro e clique repetidamente em bot&otilde;es da interface. Eles gostam disso.</p>
<p>Segue uma parte da solu&ccedil;&atilde;o que adotei.</p>
<p>&nbsp;</p>
<h2>Como contar quantos arquivos tem em uma pasta utilizando o FSO?</h2>
<p>Quando procurei informa&ccedil;&otilde;es de como contar quantos arquivos existiam em uma pasta a maioria envolvia um loop por todos os arquivos, e isso me lembrou <a href="http://www.andafter.org/blogs/odesenvolvedor/publicacoes/nao-programe-isso_967.html"><strong>minha experi&ecirc;ncia com POG: N&atilde;o programe isso!</strong></a></p>
<p>Twittei para ver se algu&eacute;m conhecia uma solu&ccedil;&atilde;o melhor do que um loop, <a href="http://twitter.com/chrisloki">@chrisloki</a>,&nbsp;<a href="http://twitter.com/cleiverrr">@cleiverrr</a> e <a href="http://twitter.com/alinedecampos">@alinedecampos</a> responderam com id&eacute;ias/sugest&otilde;es, n&atilde;o achei nenhuma documenta&ccedil;&atilde;o completa do FSO (ok, s&oacute; dei uma googleada b&aacute;sica) mas resolvi testar algumas coisas como UBound (para pegar o &iacute;ndica mais alto de uma array) e depois um count.</p>
<p>O UBound n&atilde;o funciona, o array de arquivos n&atilde;o pode ser tratado como um normal, mas existe o comando COUNT no FSO, segue abaixo o script para contar quantos arquivos existem em uma pasta:</p>
<p>&nbsp;</p>
<p style="margin-left: 40px; "><span style="color: rgb(153, 153, 153); "><span style="font-size: large; ">dirtowalk = &quot;../web_users/gssolutions/arquivos/&quot;</span></span></p>
<p style="margin-left: 40px; "><span style="color: rgb(153, 153, 153); "><span style="font-size: large; ">Set fs = CreateObject(&quot;Scripting.FileSystemObject&quot;)</span></span></p>
<p style="margin-left: 40px; "><span style="color: rgb(153, 153, 153); "><span style="font-size: large; ">Set f = fs.GetFolder(server.mappath(dirtowalk))</span></span></p>
<p style="margin-left: 40px; "><span style="color: rgb(153, 153, 153); "><span style="font-size: large; ">Set fc = f.Files<br type="_moz" />
</span></span></p>
<p style="margin-left: 40px; "><strong><span style="color: rgb(153, 153, 153); "><span style="font-size: large; ">total = fc.count</span></span></strong></p>
<p style="margin-left: 40px; "><span style="color: rgb(153, 153, 153); "><span style="font-size: large; ">response.write &quot;Total de arquivos na pasta &quot; &amp; dirtowalk &amp; &quot;: &quot; &amp; total</span></span></p>
<p>&nbsp;</p>
<p>&Eacute; isso a&iacute;, um simples .count no &quot;array&quot; de arquivos retorna o n&uacute;mero de arquivos dentro da pasta. Caso existam subpastas, voc&ecirc; teria que criar um loop para ir navegando e somando os arquivos dentro de cada subpasta...</p>
<p>Mais funcional e elegante do que um <strong>&quot;<span style="color: rgb(192, 192, 192); ">For Each arquivo In fc</span>&quot;!</strong></p>
<p>Obrigado a todos os que ajudaram e responderam meus pedidos de socorro no twitter, espero ter ajdado tamb&eacute;m! :)</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/486W_4lV5rY" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-contar-arquivos-em-uma-pasta-usando-asp-fso-_845.html</feedburner:origLink></item>
<item>
	<title>Usando o comando eval()</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/qoAryxdhduY/usando-o-comando-eval-_1001.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/usando-o-comando-eval-_1001.html#comentar</comments>
	<pubDate> Mon, 6 Apr 2009 22:10:22 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/usando-o-comando-eval-_1001.html</guid>
	<description><![CDATA[Exemplo de uso do domando eval() do javascript]]></description>
	<content:encoded><![CDATA[<p><strong>Javascript</strong> n&atilde;o &eacute; uma linguagem tipada. Disso j&aacute; sabemos. Ent&atilde;o, muitas vezes, as coisas n&atilde;o funcionam exatamente como esperamos.</p>
<p>Um caso que acontece muito pode ser simulado nesse exemplo que segue: um formul&aacute;rio com dois campos e uma rotina que executa a soma dos valores dos dois campos:</p>
<p><em>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;<br />
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;<br />
&lt;title&gt;Exemplo de soma&lt;/title&gt;<br />
&lt;script type=&quot;application/javascript&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; window.onload = function() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; document.getElementById(&quot;calcular&quot;).onclick = function() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var val1 = document.getElementById(&quot;campo1&quot;).value;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var val2 = document.getElementById(&quot;campo2&quot;).value;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; alert(val1 + val2);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;h1&gt;Soma - exemplo&lt;/h1&gt;<br />
&lt;form action=&quot;#&quot; method=&quot;post&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;label for=&quot;campo1&quot;&gt;campo 1:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;campo1&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;label for=&quot;campo1&quot;&gt;campo 2:&lt;/label&gt;&lt;input type=&quot;text&quot; id=&quot;campo2&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input type=&quot;button&quot; id=&quot;calcular&quot; value=&quot;calcular&quot; /&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</em></p>
<p>Fa&ccedil;a um teste preenchendo os inputs com valores num&eacute;ricos, e clique no bot&atilde;o de calcular. Se voc&ecirc; preencher com, por exemplo, 5 e 3, ao clicar no bot&atilde;o ter&aacute; um alert() com o valor 53.<br />
O que aconteceu? O interpretador do javascript entende que s&atilde;o strings (textos), e a soma que ele faz &eacute;, na verdade, uma concatena&ccedil;&atilde;o das strings.</p>
<p>Como resolver isso?</p>
<p>Existe um comando nativo do javascript, eval(param), que recebe um par&acirc;metro e o interpreta. Mude a linha que faz a soma para</p>
<p><em>alert(eval(val1) + eval(val2));</em></p>
<p>E voc&ecirc; ver&aacute; que a soma, que antes era uma concatena&ccedil;&atilde;o, vai ser feita da forma esperada: somando realmente os valores.</p>
<p>Mas, fica o alerta: usar o comando eval() deve sempre ser muito bem analisado se vale a pena. Uma vez que ele interpreta qualquer comando que est&aacute; em uma string, voc&ecirc; acaba abrindo o seu c&oacute;digo para ser executado por terceiros.</p>
<p>Num pr&oacute;ximo post mostro como fazer essa soma de uma forma mais elegante!</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/qoAryxdhduY" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/usando-o-comando-eval-_1001.html</feedburner:origLink></item>
<item>
	<title>Como imprimir aspas no Javascript</title>
	<link>http://feedproxy.google.com/~r/ODesenvolvedor/~3/ihZD6yJxY7E/como-imprimir-aspas-no-javascript_946.html</link>
	<comments>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-imprimir-aspas-no-javascript_946.html#comentar</comments>
	<pubDate> Thu, 2 Apr 2009 12:17:10 -0300</pubDate>
	<dc:creator>And After</dc:creator>
	<dc:subject>design</dc:subject>
	<dc:subject>tecnologia</dc:subject>
	<guid isPermaLink="false">http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-imprimir-aspas-no-javascript_946.html</guid>
	<description><![CDATA[Quando você quer exibir aspas simples com JS é só usar aspas dupla no código, e vice e versa. Mas e quando precisa "printar" aspas simples e duplas em um mesmo script?]]></description>
	<content:encoded><![CDATA[<p>Esta semana eu liberei novamente a <strong><a href="http://vitrine.andafter.org">Vitrine F&aacute;cil Buscap&eacute;</a></strong>, que permite a cria&ccedil;&atilde;o e gerenciamento de Vitrines personalizadas para o programa de afiliado Buscap&eacute;. Quando estava liberando a aplica&ccedil;&atilde;o em beta tive problemas para implementar um sistema de rastreamento de clicks.</p>
<p>Muito bem, voltando ao assunto vou explicar o contexto do meu problema, eu tinha um link que era impresso em Javascript, e precisava adicionar o atributo <strong>onClick</strong> nele, que ficaria no resultado final assim:</p>
<p style="margin-left: 40px; "><span style="font-size: large; ">onClick=&quot;funcao(&acute;var1&acute;,&acute;var2&acute;)&quot;</span></p>
<p>Mas no Javascript, se eu fosse usar um document.write ou qualquer outro m&eacute;todo de alguma biblioteca (<strong><a href="http://www.andafter.org/blogs/odesenvolvedor/tag/jquery">jQuery</a></strong>, no meu caso) quando eu utilizasse a aspa simples automaticamente estaria fechando a string (n&atilde;o sei se string &eacute; o correto para o que eu quero definir, sorry) do Javascript, ou seja, estaria &quot;cortando&quot; a minha linha que seria exibida no c&oacute;digo pela metade.</p>
<p>Uma pesquisa r&aacute;pida em f&oacute;runs e encontrei a solu&ccedil;&atilde;o: voc&ecirc; precisa utilizar uma barra invertida (lembrouexpress&otilde;es regulares, utiliza a barra para transformar o pr&oacute;ximo caracter em &quot;normal&quot;), ent&atilde;o ficaria assim no Javascript:</p>
<p style="margin-left: 40px; "><span style="font-size: large; ">document.write(&quot;<span style="color: rgb(153, 153, 153); ">onClick=<span style="color: rgb(255, 0, 0); "><span style="font-size: x-large; "><u>&quot;</u></span></span>funcao(&acute;var1&acute;,&acute;var2&acute;)<span style="color: rgb(255, 0, 0); "><span style="font-size: x-large; "><u>&quot;</u></span></span></span> &quot;)</span></p>
<p>Antes das duas aspas VERMELHAS voc&ecirc; deve inserir uma barra invertida, n&atilde;o consegui exibir ela aqui pois o sistema de publica&ccedil;&atilde;o &quot;engole&quot; as barras (depois irei verificar).</p>
<p>Utilizei o document.write apenas como exemplo da possibilidade de uso, no meu caso utilizei as barras invertidas em um <strong>$(&quot;#link123&quot;).html(&quot;<span style="color: rgb(153, 153, 153); ">onClick....</span>&quot;)&nbsp;</strong>sem problema nenhum.</p>
<p>&nbsp;</p>
<p>Uma dica simples que para quem trabalha com Javascript n&atilde;o deve ser novidade, mas lembro de ter tido problemas com isso em um passado distante, como tive o mesmo problema agora resolvi fazer o post para ajudar quem pode precisar (e evitar ter que googlear novamente este mesmo problema).</p>
<p>&nbsp;</p>
<p>D&uacute;vidas, dicas e cr&iacute;ticas nos <a href="#comentar">coment&aacute;rios</a>&nbsp;:)</p>
<p>&nbsp;</p><img src="http://feeds.feedburner.com/~r/ODesenvolvedor/~4/ihZD6yJxY7E" height="1" width="1"/>]]></content:encoded>
<feedburner:origLink>http://www.andafter.org/blogs/odesenvolvedor/publicacoes/como-imprimir-aspas-no-javascript_946.html</feedburner:origLink></item>
</channel>
</rss>
