<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ensandecer de um computólogo &#187; Programação</title>
	<atom:link href="http://danielmartins.eti.br/blog/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://danielmartins.eti.br/blog</link>
	<description>return 1;</description>
	<lastBuildDate>Thu, 15 Dec 2011 05:05:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Bossa Conference &#8217;10 &#8211; em Manaus</title>
		<link>http://danielmartins.eti.br/blog/2010/03/02/bossa-conference-10-em-manaus/</link>
		<comments>http://danielmartins.eti.br/blog/2010/03/02/bossa-conference-10-em-manaus/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 14:47:36 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[amazonas]]></category>
		<category><![CDATA[Computação]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[indt]]></category>
		<category><![CDATA[manaus]]></category>
		<category><![CDATA[n810 maemo]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[qml]]></category>
		<category><![CDATA[qt]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=573</guid>
		<description><![CDATA[Faz algum tempo que estou querendo escrever vários posts técnicos e da minha viagem a sampa que fiz em janeiro, mas realmente o tempo está escasso. Mas não podia deixar passar em branco a divulgação do Bossa Conference que é um evento que sempre tive vontade de participar e que era realizado em Porto de [...]]]></description>
			<content:encoded><![CDATA[<p>Faz algum tempo que estou querendo escrever vários posts técnicos e da minha viagem a sampa que fiz em janeiro, mas realmente o tempo está escasso. Mas não podia deixar passar em branco a divulgação do Bossa Conference que é um evento que sempre tive vontade de participar e que era realizado em Porto de Galinhas. Esse ano o Bossa Conference &#8217;10 será realizado em Manaus &#8211; Amazonas. Uma chance dos nerds nortistas poderem participar até onde sabemos deste excelente evento.</p>
<p><a href="http://danielmartins.eti.br/blog/wp-content/uploads/2010/03/divulgacao-bossa.png"><img class="aligncenter size-medium wp-image-574" title="divulgacao-bossa" src="http://danielmartins.eti.br/blog/wp-content/uploads/2010/03/divulgacao-bossa-212x300.png" alt="" width="212" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2010/03/02/bossa-conference-10-em-manaus/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flisol &#8211; Manaus &#8211; Amazonas</title>
		<link>http://danielmartins.eti.br/blog/2009/04/27/flisol-manaus-amazonas/</link>
		<comments>http://danielmartins.eti.br/blog/2009/04/27/flisol-manaus-amazonas/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 13:46:49 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[amazonas]]></category>
		<category><![CDATA[Computação]]></category>
		<category><![CDATA[Comunidade]]></category>
		<category><![CDATA[Comunidades]]></category>
		<category><![CDATA[efl]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[manaus]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[flisol-am python efl]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=390</guid>
		<description><![CDATA[O flisol em manaus foi um sucesso na minha opnião, graças ao comprometimento dos &#8220;pigs&#8221; da comunidade de software livre em manaus, pessoas como Antônio Junior, Davyd Smelk, Marcelo Mendes entre outros e a estes pigs deixo aqui postado meus parabéns. houve uma quantidade razoável de participantes, todas as palestras estavam cheias e as oficinas [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-391" title="flisol-manaus-logo" src="http://danielmartins.eti.br/blog/wp-content/uploads/2009/04/flisol-manaus-logo-300x162.png" alt="flisol-manaus-logo" width="300" height="162" />O flisol em manaus foi um sucesso na minha opnião, graças ao comprometimento dos &#8220;<a href="http://en.wikipedia.org/wiki/The_Chicken_and_the_Pig" target="_blank">pigs</a>&#8221; da comunidade de software livre em manaus, pessoas como <a href="http://brankinhu.eti.br/" target="_blank">Antônio Junior</a>, Davyd Smelk, <a href="http://marcelomendes.eti.br/" target="_blank">Marcelo Mendes</a> entre outros e a estes pigs deixo aqui postado meus parabéns. houve uma quantidade razoável de participantes, todas as palestras estavam cheias e as oficinas foram também bastante frequentadas.</p>
<p>Tirei algumas fotos do evento apartir do meu E71, a câmera não é boa mas como estava de dia até que as fotos ficaram boas. Segue abaixo algumas fotos.</p>
<p><a class="tt-flickr tt-flickr-Medium" title="Oficina de D-Bus" href="http://www.flickr.com/photos/danielelias/3474502331/"><img class="alignnone" src="http://farm4.static.flickr.com/3345/3474502331_dfeed09f02.jpg" alt="Oficina de D-Bus" width="500" height="375" /></a></p>
<p>A foto acima é da oficina de D-Bus.</p>
<p><a class="tt-flickr tt-flickr-Medium" title="25/04/2009" href="http://www.flickr.com/photos/danielelias/3474487847/"><img class="alignnone" src="http://farm4.static.flickr.com/3345/3474487847_54118ac03d.jpg" alt="25/04/2009" width="500" height="375" /></a></p>
<p>Coordenação do Flisol indo almoçar.</p>
<p><a href="http://www.flickr.com/photos/danielelias/tags/flisolam/" target="_blank">Mais fotos no meu flickr</a>.</p>
<p>Também não pude deixar de contribuir e fiz uma palestra sobre Python com EFL e ajudei em algumas oficinas. Como prometi na minha palestra que iria postar a minha apresentação no blog, cá estou eu postando.</p>
<p><a href="http://danielmartins.eti.br/Python_Efl_Flisol.pdf">Slides Python e EFl</a></p>
<p>Segue abaixo os códigos que fiz de exemplo, mas faltou tempo para comentar linha a linha. Para quem quiser estudar segue código.</p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python2.5</span><br />
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span><br />
<span style="color: #808080; font-style: italic;"># Copyleft </span><br />
<span style="color: #808080; font-style: italic;">#</span><br />
<span style="color: #808080; font-style: italic;"># @author: Daniel Martins</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">import</span> ecore<br />
<span style="color: #ff7700;font-weight:bold;">from</span> ecore.<span style="color: black;">evas</span> <span style="color: #ff7700;font-weight:bold;">import</span> SoftwareX11<br />
<span style="color: #ff7700;font-weight:bold;">import</span> evas<br />
<span style="color: #ff7700;font-weight:bold;">import</span> edje<br />
<br />
X_DIRECTION<span style="color: #66cc66;">,</span> Y_DIRECTION <span style="color: #66cc66;">=</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><br />
<br />
<br />
w<span style="color: #66cc66;">,</span> h <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">800</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">480</span><br />
ee <span style="color: #66cc66;">=</span> ecore.<span style="color: black;">evas</span>.<span style="color: black;">SoftwareX11</span><span style="color: black;">&#40;</span>w<span style="color: #66cc66;">=</span>w<span style="color: #66cc66;">,</span> h<span style="color: #66cc66;">=</span>h<span style="color: black;">&#41;</span><br />
canvas <span style="color: #66cc66;">=</span> ee.<span style="color: black;">evas</span><br />
<br />
states <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
anime <span style="color: #66cc66;">=</span> <span style="color: #008000;">False</span><br />
anime_max <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
<br />
<br />
bg <span style="color: #66cc66;">=</span> canvas.<span style="color: black;">Rectangle</span><span style="color: black;">&#40;</span>color<span style="color: #66cc66;">=</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">255</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">255</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">255</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> size<span style="color: #66cc66;">=</span>ee.<span style="color: black;">size</span><span style="color: black;">&#41;</span><br />
bg.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> change_object<span style="color: black;">&#40;</span>o<span style="color: #66cc66;">,</span> e<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">global</span> w<span style="color: #66cc66;">,</span> h<span style="color: #66cc66;">,</span> states<span style="color: #66cc66;">,</span> anime_max<br />
&nbsp; &nbsp; im_w<span style="color: #66cc66;">,</span> im_h <span style="color: #66cc66;">=</span> o.<span style="color: black;">image_size</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> states <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">0</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; o.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>w-im_w<span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">1</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span> y<span style="color: black;">&#41;</span> <span style="color: #66cc66;">=</span> o.<span style="color: black;">pos_get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; o.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span> h-im_h<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">2</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span> y<span style="color: black;">&#41;</span> <span style="color: #66cc66;">=</span> o.<span style="color: black;">pos_get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; o.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> y<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">3</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span> y<span style="color: black;">&#41;</span> <span style="color: #66cc66;">=</span> o.<span style="color: black;">pos_get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; o.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; states <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span><br />
&nbsp; &nbsp; states +<span style="color: #66cc66;">=</span> <span style="color: #ff4500;">1</span><br />
&nbsp; &nbsp; <br />
<br />
<br />
ball_object <span style="color: #66cc66;">=</span> canvas.<span style="color: black;">Image</span><span style="color: black;">&#40;</span><span style="color: #008000;">file</span><span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Generic_football.png&quot;</span><span style="color: #66cc66;">,</span> geometry<span style="color: #66cc66;">=</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">66</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">65</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
im_w<span style="color: #66cc66;">,</span> im_h <span style="color: #66cc66;">=</span> ball_object.<span style="color: black;">image_size</span><br />
ball_object.<span style="color: black;">fill_set</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> im_w<span style="color: #66cc66;">,</span> im_h<span style="color: black;">&#41;</span><br />
ball_object.<span style="color: black;">on_mouse_up_add</span><span style="color: black;">&#40;</span>change_object<span style="color: black;">&#41;</span><br />
ball_object.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<br />
<span style="color: #808080; font-style: italic;"># Load and setup UI</span><br />
ee.<span style="color: black;">title</span> <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;Exemplo de Python EFL&quot;</span><br />
<br />
<br />
ee.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
ecore.<span style="color: black;">main_loop_begin</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>Exemplo animado:</p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python2.5</span><br />
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span><br />
<span style="color: #808080; font-style: italic;"># Copyleft </span><br />
<span style="color: #808080; font-style: italic;">#</span><br />
<span style="color: #808080; font-style: italic;"># @author: Daniel Martins</span><br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">import</span> ecore<br />
<span style="color: #ff7700;font-weight:bold;">from</span> ecore.<span style="color: black;">evas</span> <span style="color: #ff7700;font-weight:bold;">import</span> SoftwareX11<br />
<span style="color: #ff7700;font-weight:bold;">import</span> evas<br />
<span style="color: #ff7700;font-weight:bold;">import</span> edje<br />
<br />
X_DIRECTION<span style="color: #66cc66;">,</span> X_DIRECTION_NEGATIVE<span style="color: #66cc66;">,</span> Y_DIRECTION<span style="color: #66cc66;">,</span> Y_DIRECTION_NEGATIVE <span style="color: #66cc66;">=</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span><br />
<br />
<br />
w<span style="color: #66cc66;">,</span> h <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">800</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">480</span><br />
ee <span style="color: #66cc66;">=</span> ecore.<span style="color: black;">evas</span>.<span style="color: black;">SoftwareX11</span><span style="color: black;">&#40;</span>w<span style="color: #66cc66;">=</span>w<span style="color: #66cc66;">,</span> h<span style="color: #66cc66;">=</span>h<span style="color: black;">&#41;</span><br />
canvas <span style="color: #66cc66;">=</span> ee.<span style="color: black;">evas</span><br />
<br />
states <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
anime <span style="color: #66cc66;">=</span> <span style="color: #008000;">False</span><br />
anime_max <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
<br />
<br />
bg <span style="color: #66cc66;">=</span> canvas.<span style="color: black;">Rectangle</span><span style="color: black;">&#40;</span>color<span style="color: #66cc66;">=</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">255</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">255</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">255</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> size<span style="color: #66cc66;">=</span>ee.<span style="color: black;">size</span><span style="color: black;">&#41;</span><br />
bg.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> anime_ball<span style="color: black;">&#40;</span>img_obj<span style="color: #66cc66;">,</span> direction<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">global</span> anime_max<br />
&nbsp; &nbsp; <span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y<span style="color: black;">&#41;</span> <span style="color: #66cc66;">=</span> img_obj.<span style="color: black;">pos_get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> direction <span style="color: #66cc66;">==</span> X_DIRECTION:<br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>x+<span style="color: #ff4500;">5</span><span style="color: #66cc66;">,</span>y<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> x <span style="color: #66cc66;">&gt;</span> anime_max:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> direction <span style="color: #66cc66;">==</span> X_DIRECTION_NEGATIVE:<br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>x-<span style="color: #ff4500;">5</span><span style="color: #66cc66;">,</span>y<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> x <span style="color: #66cc66;">&lt;</span> anime_max:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> direction <span style="color: #66cc66;">==</span> Y_DIRECTION:<br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y+<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> y <span style="color: #66cc66;">&gt;</span> anime_max:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> direction <span style="color: #66cc66;">==</span> Y_DIRECTION_NEGATIVE:<br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>x<span style="color: #66cc66;">,</span>y-<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> y <span style="color: #66cc66;">&lt;</span> anime_max:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span><br />
&nbsp; &nbsp; &nbsp;<br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> change_object<span style="color: black;">&#40;</span>o<span style="color: #66cc66;">,</span> e<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">global</span> w<span style="color: #66cc66;">,</span> h<span style="color: #66cc66;">,</span> states<span style="color: #66cc66;">,</span> anime_max<br />
&nbsp; &nbsp; im_w<span style="color: #66cc66;">,</span> im_h <span style="color: #66cc66;">=</span> o.<span style="color: black;">image_size</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> states <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">0</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; anime_max <span style="color: #66cc66;">=</span> w-im_w<br />
&nbsp; &nbsp; &nbsp; &nbsp; ecore.<span style="color: black;">animator_add</span><span style="color: black;">&#40;</span>anime_ball<span style="color: #66cc66;">,</span> o<span style="color: #66cc66;">,</span> X_DIRECTION<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">1</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; anime_max <span style="color: #66cc66;">=</span> h-im_h<br />
&nbsp; &nbsp; &nbsp; &nbsp; ecore.<span style="color: black;">animator_add</span><span style="color: black;">&#40;</span>anime_ball<span style="color: #66cc66;">,</span> o<span style="color: #66cc66;">,</span> Y_DIRECTION<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">2</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; anime_max <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ecore.<span style="color: black;">animator_add</span><span style="color: black;">&#40;</span>anime_ball<span style="color: #66cc66;">,</span> o<span style="color: #66cc66;">,</span> X_DIRECTION_NEGATIVE<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">3</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; anime_max <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ecore.<span style="color: black;">animator_add</span><span style="color: black;">&#40;</span>anime_ball<span style="color: #66cc66;">,</span> o<span style="color: #66cc66;">,</span> Y_DIRECTION_NEGATIVE<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; states <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span><br />
&nbsp; &nbsp; states +<span style="color: #66cc66;">=</span> <span style="color: #ff4500;">1</span><br />
<br />
<br />
ball_object <span style="color: #66cc66;">=</span> canvas.<span style="color: black;">Image</span><span style="color: black;">&#40;</span><span style="color: #008000;">file</span><span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;Generic_football.png&quot;</span><span style="color: #66cc66;">,</span> geometry<span style="color: #66cc66;">=</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">66</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">65</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
im_w<span style="color: #66cc66;">,</span> im_h <span style="color: #66cc66;">=</span> ball_object.<span style="color: black;">image_size</span><br />
ball_object.<span style="color: black;">fill_set</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span><span style="color: #ff4500;">0</span><span style="color: #66cc66;">,</span> im_w<span style="color: #66cc66;">,</span> im_h<span style="color: black;">&#41;</span><br />
ball_object.<span style="color: black;">on_mouse_up_add</span><span style="color: black;">&#40;</span>change_object<span style="color: black;">&#41;</span><br />
ball_object.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<br />
<span style="color: #808080; font-style: italic;"># Load and setup UI</span><br />
ee.<span style="color: black;">title</span> <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;Exemplo de Python EFL Animado&quot;</span><br />
<br />
ee.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
ecore.<span style="color: black;">main_loop_begin</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p><a href="http://danielmartins.eti.br/python_efl_flisol_src.tar.gz" target="_blank">Link para baixar tudo, inclusive a imagem.</a> Só não esqueça que para executar é preciso ter instalado as EFL e os python bindings.Para a instalação tenho um post sobre. <a href="http://danielmartins.eti.br/blog/2008/08/23/estudando-python-efl-parte-1/" target="_blank">Confira</a>.</p>
<p>Espero que tenham gostado do evento tanto quanto eu gostei. Qualquer dúvida, crítica e/ou sugestão pode colocar nos comentários.</p>
<p>Até a próxima.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2009/04/27/flisol-manaus-amazonas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Instalando o lazarus no ubuntu 8.10</title>
		<link>http://danielmartins.eti.br/blog/2008/12/30/instalando-o-lazarus-no-ubuntu-810/</link>
		<comments>http://danielmartins.eti.br/blog/2008/12/30/instalando-o-lazarus-no-ubuntu-810/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 22:29:27 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[lazarus]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[larazus fpc ubuntu intrepid]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=348</guid>
		<description><![CDATA[Instalando o lazarus no ubuntu 8.10 O lazarus é um IDE RAD Delphi-like cross platform&#8230;mas traduzindo para português não-técnico, é um ambiente  de desenvolvimento, provendo ferramentas para desenvolvimento de aplicações de forma rápida, com características de uso semelhantes ao do Delphi, da Code Gear, onde o mesmo código feito no Windows pode ser compilado e [...]]]></description>
			<content:encoded><![CDATA[<p>Instalando o lazarus no ubuntu 8.10</p>
<p>O lazarus é um IDE RAD Delphi-like cross platform&#8230;mas traduzindo para português não-técnico, é um ambiente  de desenvolvimento, provendo ferramentas para desenvolvimento de aplicações de forma rápida, com características de uso semelhantes ao do Delphi, da Code Gear, onde o mesmo código feito no Windows pode ser compilado e executado no Linux e no Mac.</p>
<p>Ainda não entendeu? Dê uma volta no Google J</p>
<p>Você pode achá-lo no site http://www.lazarus.freepascal.org/</p>
<p>Por baixo do lázarus tem o FPC &#8211; free pascal compiler. É ele que faz a compilação do código que você monta pelo lazarus. Para que tudo funcione corretamente, é necessário baixar ambos separadamente.</p>
<p>Abaixo os passos para a instalação no Ubuntu 8.10 (Intrepid) e 9.04 (Jaunty):</p>
<p># de praxe</p>
<blockquote><p>$ sudo apt-get update</p></blockquote>
<p># instalando o free pascal compiler</p>
<blockquote><p>$ sudo apt-get install fpc</p></blockquote>
<p># agora, o IDE</p>
<blockquote><p>$ sudo apt-get install lazarus</p></blockquote>
<p>Após tudo instalado, automagicamente é instalado o atalho no menu desenvolvimento, mas são necessários alguns ajustes no lázarus</p>
<p>Execute o lázarus.</p>
<p>Menu Environment -&gt; environment options : guia files</p>
<p>Compiler path: /usr/lib/fpc/2.2.0/ppc386</p>
<p>FPC source directory: /usr/share/fpcsrc/2.2.0/</p>
<p>obs: os sources do FPC são necessários para compilação</p>
<p>Agora é só alegria. Tenham um bom divertimento.</p>
<p>Escrito por <strong>Lúcio Ferreira</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2008/12/30/instalando-o-lazarus-no-ubuntu-810/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Estudando python EFL &#8211; edição especial :-P</title>
		<link>http://danielmartins.eti.br/blog/2008/12/16/estudando-python-efl-edicao-especial-p/</link>
		<comments>http://danielmartins.eti.br/blog/2008/12/16/estudando-python-efl-edicao-especial-p/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 05:06:38 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[efl]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[python efl enlightenment]]></category>
		<category><![CDATA[python efl treinamento]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=333</guid>
		<description><![CDATA[Bom, irei participar de um treinamento de python EFL onde o instrutor será o Gustavo Barbiery, tentarei fazer um resumo do curso até mesmo para que me sirva de referência futura e postarei aqui no blog, tenho conhecidos que trabalham e estudam também EFL e python e que ficaram tristes por não poderem participar do [...]]]></description>
			<content:encoded><![CDATA[<p>Bom, irei participar de um treinamento de python EFL onde o instrutor será o <a href="http://blog.gustavobarbieri.com.br/" target="_blank">Gustavo Barbiery</a>, tentarei fazer um resumo do curso até mesmo para que me sirva de referência futura e postarei aqui no blog, tenho conhecidos que trabalham e estudam também EFL e python e que ficaram tristes por não poderem participar do treinamento, infelizmente não é possível que todos participem. Mas como sou um cara legal e sempre gostei de compartilhar conhecimento <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  , além de fazer o resumo do curso que conterá muito código de exemplo. Irei também reportar a evolução do curso pelo <a href="http://twitter.com/daniel_martins" target="_blank">meu Twitter</a> em tempo real. Para isso instalei um widget no sidebar do wordpress, o qual vocês podem acompanhar ao seu lado direito da tela.</p>
<p>Para quem tem twitter, pode me seguir e fazer perguntas sobre a tecnologia em tempo real, para quem não tiver, pode deixar comentário no blog pois ficarei o tempo todo on line. Não atenderei todas as perguntas, irei filtrar as mais interessantes, portanto caprichem nas perguntas (se houver) que na primeira oportunidade que surgir perguntarei ao Gustavo e postarei no resumo do blog a resposta, sei que muitas das minhas dúvidas são as dúvidas de outros que começaram a trabalhar com EFL a pouco tempo, portanto muita coisa será respondida no resumo que farei do curso e não de forma imediata.</p>
<p>Qualquer coisa, seja sugestão ou crítica comenta ai. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Update</strong>: Posts só sairão, no final de semana. Tá cruel, muita coisa pra fazer/estudar. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2008/12/16/estudando-python-efl-edicao-especial-p/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Estudando python EFL &#8211; parte 2</title>
		<link>http://danielmartins.eti.br/blog/2008/12/13/estudando-python-efl-parte-2/</link>
		<comments>http://danielmartins.eti.br/blog/2008/12/13/estudando-python-efl-parte-2/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 19:37:03 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[canola2]]></category>
		<category><![CDATA[Comunidades]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[efl]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=303</guid>
		<description><![CDATA[Continuando a série de post sobre a tecnologia EFL , a qual estou estudando e trabalhando. Este post visa ser uma visão geral do que é e como funciona esta tecnologia e está respectivamente divido em duas seções: O que é ? e Como Funciona ?. O que é ? EFL é um conjunto de [...]]]></description>
			<content:encoded><![CDATA[<p>Continuando a série de <a title="Categoria EFL" href="http://danielmartins.eti.br/blog/category/efl/" target="_blank">post sobre a tecnologia EFL</a> , a qual estou estudando e trabalhando.</p>
<p>Este post visa ser uma visão geral do que é e como funciona esta tecnologia e está respectivamente divido em duas seções: O que é ? e Como Funciona ?.</p>
<p><strong>O que é ?</strong></p>
<p>EFL é um conjunto de bibliotecas escrita em C para facilitar o desenvolvimento de um gerenciador de janelas baseado no X, o famoso <a title="Enlightenement" href="http://www.enlightenment.org/" target="_blank">Enlightenment</a>, o qual possui muitos recursos <strong>eye candy</strong> sem precisar de gerenciadores de janela com suporte a aceleração através de OpenGL, ex: <a href="http://pt.wikipedia.org/wiki/Compiz" target="_blank">compiz</a>. E sempre fez um ótimo trabalho sem esse tipo de recurso.</p>
<p>Segui alguns vídeos coletados no youtube do Enlightenment em ação.</p>
<p><object width="425" height="344" data="http://www.youtube.com/v/2yDB60wqgN4&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/2yDB60wqgN4&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
<p><object width="425" height="344" data="http://www.youtube.com/v/nmlmMM42C30&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/nmlmMM42C30&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
<p>E existem <a href="http://www.youtube.com/results?search_query=Enlightenment+e17&amp;search_type=&amp;aq=f" target="_blank">outros mais</a>. É possível implementar funcionalidades muito parecidas com as do iphone, por exemplo:</p>
<p><object width="425" height="344" data="http://www.youtube.com/v/3UsPer9c5bg&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/3UsPer9c5bg&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
<p>E olha um teclado virtual feito com EFL baseado no teclado do iPhone, feito pelo <a href="http://blog.gustavobarbieri.com.br/2007/07/24/iphone-like-virtual-keyboard-for-n800/" target="_blank">Gustavo Barbiery</a>, um dos geeks que trabalha com EFL aqui no Brasil e que por sinal próxima semana estará em Manaus para dar um treinamento de EFL na <a href="http://fpf.br" target="_blank">FPF</a>¸após eu ter tido muitas conversas com o <a href="http://www.gavinho.eti.br/wiki/index.php?title=P%C3%A1gina_principal" target="_blank">chefinho</a>. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><object width="425" height="344" data="http://www.youtube.com/v/TrWpUBTDDr0&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="src" value="http://www.youtube.com/v/TrWpUBTDDr0&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
<p>E como o EFL faz muito com pouco processamento, foi portado para outras arquiteturas como ARM, onde roda em dispositivos como o Internet <a href="http://danielmartins.eti.br/blog/2008/10/17/ubuntu-theme-para-o-canola2/" target="_blank">Tablet N810 da Nokia</a> e existem algumas aplicações rodando com EFL, mas a aplicação de referência de uso do EFL no <a href="http://www.maemo.org" target="_blank">Maemo</a> é o <a href="http://openbossa.indt.org.br/canola/" target="_blank">Canola</a>, que é um player para o maemo. Alguns vídeos do canola em ação:</p>
<p><object width="425" height="344" data="http://www.youtube.com/v/bH5zTtHIy2c&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/bH5zTtHIy2c&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
<p><object width="425" height="344" data="http://www.youtube.com/v/FEn_NNkaJ7A&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/FEn_NNkaJ7A&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
<p>E roda também em celulares, e já está sendo feito uma plataforma completa para dispositivos móveis, o Illumine, e um dos geeks é um dos criadores do EFL, o Rasterman (Carsten Haitzler)<span> e olhem só sua gang que já roda illumine:</span></p>
<div class="wp-caption alignnone" style="width: 494px"><img title="Rasterman Gangs" src="http://www.rasterman.com/files/the-gang-03.jpg" alt="Rasterman Gangs" width="484" height="480" /><p class="wp-caption-text">Rasterman Gang&#39;s</p></div>
<p>E tudo isso e muito mais foi desenvolvido primariamente com EFL, Ficou afim de entender melhor e começar a desenvolver ? Bom&#8230;. posso guiá-lo pelo caminho que percorri no estudo. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Como funciona ?</strong></p>
<p>Já que na <a title="Estudando python EFL  - parte 1" href="http://danielmartins.eti.br/blog/2008/08/23/estudando-python-efl-parte-1/" target="_blank">primeira parte</a> instalamos as técnologias básicas(ecore, evas, edje), vamos dá uma olhada em seu funcionamento.</p>
<p>Bem, vamos começar pelo começo. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Arquitetura completa do EFL.</p>
<p><img class="alignnone" title="Arquitetura EFL." src="http://www.enlightenment.org/p/about/efl/d/efl.png" alt="" width="512" height="306" /></p>
<p>Concentre-se na parte azul da arquitetura, o core EFL.</p>
<p><strong>Evas</strong> é o canvas onde tudo é renderizado e também gera sinais para aplicação.</p>
<p><strong>Ecore</strong> é o responsável por capturar todos os eventos de uma janela originados do <a href="http://pt.wikipedia.org/wiki/X11" target="_blank">X11</a> e direcionar esses eventos para os devidos callbacks, possui também um mecanismo de MainLoop e uma série de ferramentas que auxiliam o trabalho com EFL e tarefas comuns de programação.</p>
<p>Alguns componentes do Ecore:</p>
<ul>
<li>Ecore_Con &#8211; Comunicação em rede</li>
<li>Ecore_IPC &#8211; Comunicação entre processos</li>
<li>Ecore_Config &#8211; Sistema de configuração</li>
<li>e outros.</li>
</ul>
<p><strong>Edje </strong>é um meio de separar o código da aplicação do código da interface, basicamente é o responsável por te prover o mecanismo de manipulação de objetos da interface, ou seja, manipular o canvas(evas) de forma descritiva e orientada a estados. Apartir do momento que você faz essa separação ou dividi a aplicação em camadas, você imediatamente ganha vantagens, como por exemplo no Enlightenment e no canola a interface é feita com Edje e por isso possui um mecanismo de Temas(Themes) avançado e flexível de temas, ou seja, você pode mudar toda a interface sem mexer no código da aplicação.</p>
<p>Fazendo uma analogia a arquitetura de desenvolvimento web, seria mais ou menos assim, olhe a figura do MVC abaixo</p>
<p><img class="size-full wp-image-320 alignleft" title="modelviewcontrollerdiagram" src="http://danielmartins.eti.br/blog/wp-content/uploads/2008/12/modelviewcontrollerdiagram.png" alt="modelviewcontrollerdiagram" width="321" height="151" />Sabemos que no desenvolvimento web, o <strong>Model </strong>é responsável pela lógica de negócio da aplicação, o <strong>Controller</strong> é responsável por capturar as requisições que vem da <strong>View</strong> e processa-lás junto a <strong>Model</strong> e então devolver a resposta a <strong>View</strong>, a <strong>View</strong> é a camada de apresentação que no contexto web é o html/css/javascript.</p>
<p>Olhando essa arquitetura MVC podemos fazer a seguinte analogia, que o <strong>View</strong> é o <strong>Edje</strong>, o <strong>Controller</strong> é o <strong>Ecore</strong>. E o <strong>Evas </strong> é o browser onde tudo é renderizado. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Consegui explicar alguma coisa ? Se não,  deixe um comentário.</p>
<p>Falei alguma besteira ? Se sim, deixe um comentário corrigindo e colocarei os devidos créditos.</p>
<p>Próximos posts (Aguardem):</p>
<p>Estudando python EFL &#8211; parte 3 (Ecore-Evas)</p>
<p>Estudando python EFL &#8211; parte 4 (Edje)</p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2008/12/13/estudando-python-efl-parte-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lançamento do grupo Web2.0 Manaus com Harald Kirschner</title>
		<link>http://danielmartins.eti.br/blog/2008/09/15/lancamento-do-grupo-web20-manaus-com-harald-kirschner/</link>
		<comments>http://danielmartins.eti.br/blog/2008/09/15/lancamento-do-grupo-web20-manaus-com-harald-kirschner/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 15:21:38 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[amazonas]]></category>
		<category><![CDATA[Computação]]></category>
		<category><![CDATA[Comunidade]]></category>
		<category><![CDATA[Comunidades]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[manaus]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[javascript mootools web2.0 manaus amazonas]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=208</guid>
		<description><![CDATA[Na sexta (12/09/08) foi o lançamento do grupo Web2.0 Manaus com o apoio do INdT e contou com um desenvolvedor do core do mootools falando sobre web2.0 e mostrando casos de uso do mootools. O Evento ocorreu no auditório da UniLasalle de manaus e contou com auditório cheio, eu inclusive que cheguei 15 minutos atrasado [...]]]></description>
			<content:encoded><![CDATA[<p>Na sexta (12/09/08) foi o lançamento do grupo <a title="Web2.0 Manaus" href="http://groups.google.com.br/group/web20_manaus" target="_blank">Web2.0 Manaus</a> com o apoio do <a title="INdT" href="http://www.indt.org.br/institutional/index.php" target="_blank">INdT</a> e contou com um desenvolvedor do core do <a href="http://mootools.net/" target="_blank">mootools</a> falando sobre web2.0 e mostrando casos de uso do mootools.</p>
<p>O Evento ocorreu no auditório da <a href="http://www.lasalle.edu.br/unilasalle-am/" target="_blank">UniLasalle de manaus</a> e contou com auditório cheio, eu inclusive que cheguei 15 minutos atrasado tive que sentar no chão <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Bom, o evento foi composto por 2 palestras:</p>
<ul>
<li><span>Palestra 1:</span>
<ul>
<li><span> WEB 2.0  Oportunidades, e novas tendências.</span><span> <strong>Álvaro Mota Gonçalves</strong>, INdT</span><span> </span></li>
<li><span>Open-WEB</span><span>.  Harald Kirschner, WEB 2.0 developer and co-developer Mootools project</span></li>
</ul>
</li>
</ul>
<ul>
<li><span> </span><span>Palestra 2</span><span> </span>
<ul>
<li><span>WEB 2.0 v Overview de Tecnologias WEB   2.0. </span><span><a title="Harald Kirschner Journal and Project Repository" href="http://digitarald.de/" target="_blank"><strong>Harald  Kirschner</strong></a>, front-end web  developer specialist, core developer of  MooTools project </span></li>
</ul>
</li>
</ul>
<p>O Álvaro Mota Gonçalves começou falando da estratégia da Nokia que mudou, e agora tem um foco mais aberto para o provimento de serviços web e levar a mesma experiência encontrada no uso de serviços web no pc com browser só que através do celular de forma móvel(<strong>mobile</strong>), o que é uma tendência hoje em dia de <strong>fato</strong>. Uma tecnologia que corresponde a este incentivo da Nokia para com a melhor experiencia de serviços web no celular é o <a title="WebRunTime" href="http://www.forum.nokia.com/main/resources/technologies/browsing/widgets.html" target="_blank"><strong>WebRunTime</strong>(<strong>WRT</strong>)</a>. No quesito <strong>provimento de serviços</strong> a gente pode ver a investida da Nokia com o lançamento do <a title="Ovi Services por Nokia" href="http://www.ovi.com/services/" target="_self">Ovi.</a></p>
<p>Foi dito também que o mercado de trabalho estão a procura por profissionais de desenvolvimento web2.0, não lembro qual foi o site que o Álvaro mostrou onde ele fez uma pesquisa e retornou mais de 2000 empregos em aberto para se trabalhar com web2.0, ou seja, <strong>oportunidade</strong>.</p>
<p>A palestra mais esperada(pelo menos por mim), era a do Harald a qual pode ser encontrada <a href="http://digitarald.de/box/harald-web-20.zip" target="_blank">aqui</a> , achei que  ele iria se aprofundar mais na explicação de web2.0 falando sobre microformats, WRT e outros conceitos e tecnologias que ainda não parei para estudar, mais o foco da palestra dele era falar de web2.0 para pessoas que não sabiam ou sabiam pouco o que é web2.0.</p>
<p>O Harald falou um pouco desse &#8220;compra-compra&#8221; que vemos hoje em dia de grandes empresas comprando as menores que oferecem algum serviço interessante, e ele até comentou &#8220;<strong>Quer ficar milhionário ? É só fazer um serviço inovador e publicar na web..</strong>&#8221; e logo depois complementou &#8220;<strong>só não é tão fácil fazer um..</strong>&#8221; <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Um fato que me chamou atenção foi a compra do <a title="GrandCentral" href="http://www.grandcentral.com/home" target="_blank"><strong>GrandCentral</strong></a> pelo google, o qual eu nem fazia idéia que existia, trata-se de um serviço de gerenciamento de ligações, tem muitas funcionalidades interessantes, vale a pena dá uma olhada, é uma pena que o serviço ainda não está disponí­vel para o Brasil, mas vocé pode solicitar uma notificação quando o serviço estiver disponí­vel.</p>
<p>Além disso ele mostrou uma tabela de serviços comparativos, de 1.0 para 2.0</p>
<p>Como por exemplo:</p>
<table style="height: 116px;" border="0" width="313">
<tbody>
<tr>
<td style="text-align: center;"><strong>1.0</strong></td>
<td style="text-align: center;"><strong>2.0</strong></td>
</tr>
<tr>
<td style="text-align: center;">DoubleClick</td>
<td>
<p style="text-align: center;">Google AdSense</p>
</td>
</tr>
<tr>
<td style="text-align: center;">Ofoto</td>
<td>
<p style="text-align: center;">Flickr</p>
</td>
</tr>
<tr>
<td style="text-align: center;">Mp3.com</td>
<td>
<p style="text-align: center;">last.fm</p>
</td>
</tr>
<tr>
<td style="text-align: center;">Britannica On line</td>
<td>
<p style="text-align: center;">Wikipedia</p>
</td>
</tr>
<tr>
<td style="text-align: center;">Personal Websites</td>
<td>
<p style="text-align: center;">Blogging</p>
</td>
</tr>
</tbody>
</table>
<p>E outros como pode ser visto na <a href="http://digitarald.de/box/harald-web-20.zip" target="_blank">apresentação dele</a>.</p>
<p>Falou que os princípios da Web2.0 são:</p>
<p><strong> Open Source &#8211; Liberação das informações</strong><br />
<strong> Communication &#8211; Usuários</strong><br />
<strong> Design &#8211; Nova arquitetura de interfaces com o usuário</strong></p>
<p>Pra mim ficou meio misturado a afirmação de que o relacionamento do OpenSource com a web2.0 seja a liberação de informações no sentido de <strong>Content Syndication</strong>, <strong>Web Feed</strong>(RDF, Atom e etc), <strong>WebServices</strong> e <strong>APIs</strong> na minha opnião isso tem haver com OpenData e não com OpenSource, de fato há muita semelhança no modelo colaborativo de projetos OpenSource de código aberto para com serviços OpenData de compartilhamento de informações e não dúvido que a web2.0 com a semântica de <strong>OpenData</strong> tenha se baseado no modelo colaborativo do OpenSource. Eu acredito que um termo melhor seria <strong>OpenData</strong>.</p>
<p>Mostrou 1 exemplo de como ganhar dinheiro com a web2.0, usando o <a title="Amazon Web Services" href="http://www.amazon.com/AWS-home-page-Money/b?ie=UTF8&amp;node=3435361" target="_blank"><strong>Amazon Web Service</strong></a>, o qual a cada livro vendido que você indicou em seu site/blog você ganha dinheiro.(O qual estarei botando em breve no meu blog <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> ).</p>
<p>Dando continuidade no quesito <strong>oportunidades,</strong> segundo Harald o que você precisa saber para arrumar um bom emprego no mercado de web2.0:</p>
<ul>
<li><strong>Content Syndication</strong></li>
<li><strong>Web feeds</strong></li>
<li><strong>RDF</strong></li>
<li><strong>Atom</strong></li>
<li><strong>Web services and APIs</strong></li>
<li><strong>Communication with XML or JSON</strong></li>
<li><strong>REST</strong></li>
<li><strong>SOAP(WSDL)</strong></li>
</ul>
<p>Algumas passagens me chamaram atenção como a do <strong>Tim O&#8217;Reilly</strong> sobre web2.0, resumindo significa que a inteligência coletiva é a base da web2.0, concordo em gênero e grau, você não ?</p>
<p>Houve também slides sobre <a title="Folksonomia" href="http://pt.wikipedia.org/wiki/Folksonomia" target="_blank">Folksonomia</a>[1], Comunicação, melhoramento de Design de interfaces com os novos conceitos RIA(Rich Internet Application) e RUE(Rich User Experience). Essa questão de trazer a experiência de uso de softwares desktop para web entre outras coisas.</p>
<p>Não deixou de falar dos padrões e a acessibilidade o que geralmente é ignorada em detrimento a funcionalidades &#8220;<strong>eye-candy</strong>&#8221; o que julgo muito importante e que nunca deve ser esquecida, ou seja, sua palestra também incluiu Web standards, W3C, leitores de tela, SEO e o funcionamento de softwares web, como estrutura(xhtml), apresentação(css) e etc.</p>
<p>Casos de uso do uso de JavaScript .</p>
<ul>
<li><strong>Melhorias na interação com os forms;</strong></li>
<li><strong>Melhorias na colaboração entre os usuários;</strong></li>
<li><strong>Filtros e manipulação de dados</strong></li>
<li><strong>Autocomplete </strong>(Como o google suggests)</li>
</ul>
<p>Entrando mais na parte técnica, falou sobre o desenvolvimento, que com essa onda de informações e novos conceitos, por onde se basear , citou padrões utilizados e criados pelo yahoo, o <a href="http://developer.yahoo.com/ypatterns/" target="_blank">YPatterns</a> e das alternativas como o <a href="http://ajaxpatterns.org/" target="_blank">Ajax Pattern</a>.</p>
<p>Não deixou de falar também para as pessoas com perfil empreendedor, falou sobre modelo de negócios:</p>
<ul>
<li><strong>Vender <a href="http://pt.wikipedia.org/wiki/API" target="_blank">API</a></strong></li>
<li><strong>Vender serviços</strong></li>
<li><strong>Vender informações</strong></li>
</ul>
<p>Estratégias de expansão para quem já possui serviços:</p>
<ul>
<li><strong>Criar API</strong></li>
<li><strong>Distribuir como OpenSource (Citou também meios de o fazer, através do <a href="http://code.google.com/" target="_blank">google code</a>)</strong></li>
</ul>
<p>Vendeu um pouco de jabá falando sobre o  MooTools e falou um pouco sobre o porque de frameworks.</p>
<p>Nessa hora tomei a liberdade de lhe fazer uma pergunta tendo em vista que o que ele mostrou de exemplo nada foram diferente dos exemplos encontrados utilizando <a href="http://www.jquery.com" target="_blank">JQuery</a> , <a href="http://developer.yahoo.com/yui" target="_blank">YUI</a> e <a href="http://extjs.com/" target="_blank">Ext-js</a> os quais são os que eu uso nos meus projetos.</p>
<p><strong>P:</strong> Perguntei quais eram as principais diferenças entre MooTools e Jquery/YUI  ?<br />
<strong>R: </strong>Ele disse que Mootools é melhor para projetos grandes. Disse também JQuery tem mais classes prontas e que o YUI tem uma estrutura menor do que a MooTools. Na opnião dele YUI é para projetos que precisem de namespaces.</p>
<p>O Evento foi de importância para região, quase não se ver eventos desse tipo por aqui em Manaus. Com certeza desenvolvedores web(como eu) sentem falta.</p>
<p>À coordenação, meus parabéns.</p>
<p>[1] Recomendo a leitura deste post sobre Folksonomia pelo <a href="http://revolucao.etc.br/archives/folksonomia-e-a-maneira-com-que-nos-colocamos-ordem-nas-coisas/" target="_blank">Revolução Etc</a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2008/09/15/lancamento-do-grupo-web20-manaus-com-harald-kirschner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YUI + widget DataTable + Ordenação Customizada</title>
		<link>http://danielmartins.eti.br/blog/2007/07/03/yui-widget-datatable-ordenacao-customizada/</link>
		<comments>http://danielmartins.eti.br/blog/2007/07/03/yui-widget-datatable-ordenacao-customizada/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 21:27:57 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://daniel.jb0.org/2007/07/03/yui-widget-datatable-ordenacao-customizada/</guid>
		<description><![CDATA[Eu tenho utilizado exaustivamente a biblioteca de componentes YUI (Yahoo User Interface) para re-redesenhar a interface dos sistemas web que desenvolvo no meu atual local de trabalho. Acredito que há muitas opniões sobre esta nova abordagem de web2.0, desenvolvedores nacionais renomados ja se expressaram sobre esta questão, a web2.0 é boa para diversas situações, mas [...]]]></description>
			<content:encoded><![CDATA[<p>Eu tenho utilizado exaustivamente a biblioteca de componentes <a HREF="http://developer.yahoo.com/yui" TARGET="_blank" TITLE="YUI !">YUI (Yahoo User Interface) </a>para re-redesenhar a interface dos sistemas web que desenvolvo no meu atual local de trabalho.</p>
<p>Acredito que há muitas opniões sobre esta nova abordagem de web2.0, desenvolvedores nacionais renomados ja se expressaram sobre esta questão, a web2.0 é boa para diversas situações, mas não tudo. Um exemplo é o Yahoo Mail Beta, é legal e bonito mas é lento demais, sem falar que no firefox qualquer ação o processamento vai para 100% e isso é caos!. É tudo uma questão de bom senso, usar web2.0 para dá um turbinada na aplicação com validações e chamadas assíncronas, melhorar a usabilidade ou ainda aplicar um comportamento para um determinado componente na tela é uma boa opção. Mas usar web2.0 para emular sistemas que rodam no desktop é complicado, por que são muitos eventos, muitos widgets, muitas regras de css(posicionamento, imagens e etc) e acaba que a aplicação fica extremamente lenta e de difícil manutenção, com certeza não é o que queremos.</p>
<p><span id="more-154"></span></p>
<p>Para quem não conhece, a YUI é uma biblioteca de componentes reutilizaveis feitos em javascript, dhtml e css para facilitar a construção de <a HREF="http://en.wikipedia.org/wiki/Rich_Internet_application" TARGET="_blank">RIA (Rich Internet Applications) </a> , a YUI é produzida primariamente pelos yahoo hackers e também pela comunidade.  É utilizada extensivamente no portal do Yahoo.com[.br] para os softwares web do Yahoo!, com isso podemos entender que é um projeto amplamente suportado. A YUI! é software livre, cuja a licença é uma variação da licença BSD e pode ser encontrada <a TARGET="_blank" HREF="http://developer.yahoo.com/yui/license.txt">aqui.</a></p>
<p>Como eu ainda não postei nada sobre a YUI, neste artigo estarei descrevendo sua utilização básica com um exemplo utilizando o <a TARGET="_blank" HREF="http://www.google.com.br/search?hl=pt-BR&amp;q=define%3Awidget&amp;btnG=Pesquisa+Google&amp;meta=">widget</a> DataTable, para o exemplo ficar ainda mais interessante irei também descrever como customizar a ordenação crescente e decrescente. As informações de exemplo que vamos utilizar são informações referentes a veículos, vamos customizar a ordenação por Placa, a YUI já possui funções de ordenação padrões e que trabalham com alguns tipos definidos.</p>
<p>No inicío de cada bloco de código estarei usando a sigla [COD_[1-9]{2}] para identificar o bloco de código quando o estiver referenciando em outros trechos do artigo, para facilitar a localização.</p>
<p>Pré-requisitos:</p>
<ol>
<li> Conhecimentos básicos em JavaScript.</li>
<li> Você precisa <a HREF="http://developer.yahoo.com/yui/download/" TARGET="_blank">baixar a YUI</a> e carregar os componentes na sua página html ou carregá-las apartir do próprio site do yahoo, para saber mais sobre este serviço entre no <a HREF="http://developer.yahoo.com/yui/articles/hosting/" TARGET="_blank">site.</a>. No desenrolar deste artigo usarei o serviço de hosting da YUI provido pelo Yahoo.</li>
</ol>
<p>Primeiramente é preciso incluir os scripts e os estilos no header do html:</p>
<ul>
<li>Estilos: <strong> [COD_01]</strong><br />
<coolcode lang="html"></p>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/reset/reset-min.css">
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/fonts/fonts-min.css">
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/datatable/assets/datatable.css">
</coolcode>
</li>
<li>Mais estilo(Sobrecarrega algumas regras css, para fins de personalização): <strong>[COD_02]</strong><br />
<coolcode lang="html"></p>
<style type="text/css">
#exemplo {margin:1em;}
#exemplo table {border-collapse:collapse;}
#exemplo th, #exemplo td {border:1px solid #000;padding:.25em;}
#exemplo th {background-color:#696969;color:#fff;} 
#exemplo .yui-dt-odd {background-color:#eee;}
#exemplo em {font-style:italic;}
#exemplo strong {font-weight:bold;}
#exemplo .big {font-size:136%;}
#exemplo .small {font-size:77%}
</style>
<p></coolcode>
</li>
<li>YUI Scripts: <strong>[COD_03]</strong><br />
<coolcode lang="html"><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/yahoo/yahoo-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/dom/dom-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/event/event-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/dragdrop/dragdrop-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/datasource/datasource-beta-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/datatable/datatable-beta-min.js"></script><br />
</coolcode>
</li>
<li>JavaScript para criação do DataTable:<strong>[COD_04]</strong><br />
<coolcode lang="javascript"><br />
	function init()<br />
	{<br />
		/**<br />
		 * Configura namespace para não haver conflitos referentes a nomes<br />
		 * e para facilitar a organização de objetos e etc.<br />
		 */</p>
<p>		 YAHOO.namespace(&#8220;exemplo&#8221;);</p>
<p>		 /**<br />
		  * Dados que serão usados no DataTable<br />
		  */<br />
		  YAHOO.exemplo.dados = {<br />
		  	veiculos: [<br />
		  		{placa:"JTX-0506", vistoria:new Date(2004, 2, 21), km:110000},<br />
		  		{placa:"JYZ-0469", vistoria:new Date(2001, 8, 10), km:65000},<br />
		  		{placa:"JTA-4591", vistoria:new Date(2000, 9, 5), km:45036},<br />
		  		{placa:"XYZ-4587", vistoria:new Date(2000, 5, 8), km:456978}<br />
		  	]<br />
		  };</p>
<p>		/**<br />
 		* Informações do cabeçalho para o widget.ColumnSet possa retornar<br />
 		* um objeto adapter(adaptador) para a renderização do DataTable.<br />
 		*/<br />
    	var Cabecalhos = [<br />
	    	{key:"placa", title:"Placa", sortable:true},<br />
    		{key:"vistoria", type:"date", sortable:true, resizeable:true},<br />
    		{key:"km", type:"number", sortable:true, resizeable:true}<br />
		];</p>
<p>		/**<br />
	 	* Objeto &#8220;configurador&#8221; do cabecalho<br />
	 	*/<br />
		var ConfiguraColunas = new YAHOO.widget.ColumnSet(Cabecalhos);</p>
<p>		/**<br />
	 	* Objeto DataSource é responsável por pegar, tratar e adaptar<br />
	 	* as informações para que o objeto DataTable possa renderizá-las<br />
	 	*/<br />
		var CapturaInformacoes = new YAHOO.util.DataSource(YAHOO.exemplo.dados.veiculos);<br />
			CapturaInformacoes.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;<br />
			CapturaInformacoes.responseSchema = {<br />
				fields: ["placa","vistoria","km"]<br />
		};</p>
<p>		/**<br />
	 	* Enfim cria o table<br />
                * O primeiro parametros é onde(div) será renderizado o seu DataTable<br />
	 	*/<br />
		var DataTable = new YAHOO.widget.DataTable(&#8220;exemplo&#8221;,<br />
		ConfiguraColunas, CapturaInformacoes, {caption:&#8221;Exemplo básico de DataTable&#8221;});<br />
	}</p>
<p>	/**<br />
	 * Quando a arvore DOM estiver carregada executa a função!<br />
	 * o YAHOO.util.Event é um utilitário do YUI para trabalhar com eventos<br />
	 */<br />
	YAHOO.util.Event.onDOMReady(init);<br />
</coolcode>
</li>
<li>Você pode fechar o header do html e então no corpo(body) colocar aonde o DataTable será renderizado, no caso: (Sem isso o DataTable não irá ser renderizado)<br />
<coolcode lang="html"></p>
<div id="exemplo"></div>
<p></coolcode>
</li>
</ul>
<p>Resultado:</p>
<p><iframe align="center" src="http://danielmartins.eti.br/blog/exemplos/datatable.html"></iframe></p>
<p>Como podemos constatar no resultado acima as duas ordenações que realmente funcionam são as colunas por data e por quilometragem, pois o YUI reconhece os tipos informados nas linhas 28 e 29 do JavaScript , os tipos reconhecidos pela YUI são <strong>&#8220;string&#8221;, &#8220;number&#8221;, &#8220;date&#8221;, &#8220;currency&#8221;, &#8220;email&#8221; e &#8220;link&#8221;</strong>. Você pode clickar no cabeçalho da coluna <strong>&#8220;Placa&#8221;</strong> e você verá que a lógica de ordenação aplicada é a do tipo string, ou seja, pelas letras iniciais, mas precisamos que essa coluna seja ordenada pelo numero final da placa, pois sabemos que o pagamento do ipva de um veículo vence no mês do último número da placa, por exemplo final de placa 1 vence em Janeiro, 2 em Fevereiro e assim sucessivamente e as placas com final 0 vence em outubro.</p>
<p>Precisamos customizar a ordenação, vamos criar primeiramente as funções para ordenação crescente e decrescente, a YUI possui duas funções utilitárias para ajudar-nos nesta tarefa, são a <strong>YAHOO.util.Sort.compareAsc</strong> e a <strong>YAHOO.util.Sort.compareDesc<br />
</strong>, a primeira para comparação crescente e a segunda para comparação decrescente, vejamos sua utilização já aplicando ao problema que nós temos de ordenar os dados pelo final da placa, a seguir: <strong>[COD_05]</strong></p>
<p><coolcode lang="javascript"><br />
/**<br />
 * Ordenação Crescente<br />
 *<br />
 */<br />
var ordByPlacaAsc = function(a,b){<br />
        // Pega o final da primeira placa<br />
	var finalPlaca1 = a.placa.charAt(a.placa.length &#8211; 1);<br />
         // Pega o final da segunda placa<br />
	var finalPlaca2 = b.placa.charAt(b.placa.length &#8211; 1);</p>
<p>	var compFnc = YAHOO.util.Sort.compareAsc<br />
	// transforma em inteiro multiplicando por 1 e joga para<br />
	// a função utilitária de comparação<br />
	var resultado = compFnc(finalPlaca1*1,finalPlaca2*1);<br />
	return resultado;<br />
}</p>
<p>/**<br />
 * Ordenação Decrescente<br />
 *<br />
 */<br />
var ordByPlacaDesc = function(a,b){<br />
       // Pega o final da primeira placa<br />
       var finalPlaca1 = a.placa.charAt(a.placa.length &#8211; 1);<br />
	// Pega o final da segunda placa<br />
	var finalPlaca2 = b.placa.charAt(b.placa.length &#8211; 1);</p>
<p>	var compFnc = YAHOO.util.Sort.compareDesc</p>
<p>	// transforma em inteiro multiplicando por 1 e joga para<br />
	// a função utilitária de comparação<br />
	var resultado = compFnc(finalPlaca1*1,finalPlaca2*1);<br />
	return resultado;<br />
}<br />
</coolcode></p>
<p>Como podemos ver, basicamente temos o mesmo procedimento só que com funções utilitárias diferentes, você pode fazer a comparação nas linhas <strong>11 e 28</strong>, as funções utilitárias fazem a comparação e para a <strong>YAHOO.util.sort.compareAsc</strong> retornam <strong>-1</strong> se o primeiro argumento for < (menor que) o segundo argumento, 0 se o primeiro argumento é igual( == ) ao segundo argumento e 1 se o primeiro argumento é >(maior que) o segundo argumento e o inverso para a <strong>YAHOO.util.sort.compareDesc</strong>, ou seja, <strong>-1</strong> se o primeiro argumento for > (maior que) o segundo argumento, 0 se o primeiro argumento é igual( == ) ao segundo argumento e 1 se o primeiro argumento é < (menor que) o segundo argumento e assim a YUI vai ordenando os dados no <strong>DataTable</strong>, mas você está sentindo falta de algo ?! sim!, aonde parametrizamos para que o YUI utilize estas funções customizadas de ordenação ?!</p>
<p><strong>R:</strong> No bloco de código <strong>[COD_04]</strong> na linha <strong>27</strong> é possível passar um argumento chamado <strong>sortOptions</strong> contendo as informações referentes a customização da ordenação, veja um exemplo de como fica a <strong>linha 27</strong> inserindo as funções de ordenação:</p>
<p><coolcode lang="javascript"><br />
{key:&#8221;placa&#8221;, title:&#8221;Placa&#8221;, sortable:true, sortOptions:{ascFunction:ordByPlacaAsc,descFunction:ordByPlacaDesc}},<br />
</coolcode></p>
<p>Como resultado podemos ver a ordenação sendo feita pelo último número da Placa do veículo:</p>
<p>Resultado:</p>
<p><iframe align="center" src="http://danielmartins.eti.br/blog/exemplos/datatable1.html"></iframe></p>
<p>Já me estendi demais, espero que eu tenha conseguido exemplificar o uso básico do widget DataTable da YUI e de como customizar a ordenação, qualquer sugestão, correção ou crítica construtiva é bem vinda. Ajude-me a melhorar a qualidade dos artigos que escrevo.</p>
<p>Links essenciais que me serviram de consulta e para quem deseja exemplos mais ricos:<br />
<a href="http://developer.yahoo.com/yui">http://developer.yahoo.com/yui</a><br />
<a href="http://developer.yahoo.com/yui/examples/datatable/">http://developer.yahoo.com/yui/examples/datatable/</a><br />
<a href="http://developer.yahoo.com/yui/datatable/">http://developer.yahoo.com/yui/datatable/</a><br />
<a href="http://developer.yahoo.com/yui/docs/module_datatable.html">http://developer.yahoo.com/yui/docs/module_datatable.html</a><br />
<a href="http://www.quirksmode.org/js/strings.html">http://www.quirksmode.org/js/strings.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2007/07/03/yui-widget-datatable-ordenacao-customizada/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SPL (Standard PHP Library)  &#8211;  DirectoryIterator</title>
		<link>http://danielmartins.eti.br/blog/2007/05/14/spl-standard-php-library-directoryiterator-2/</link>
		<comments>http://danielmartins.eti.br/blog/2007/05/14/spl-standard-php-library-directoryiterator-2/#comments</comments>
		<pubDate>Tue, 15 May 2007 02:58:14 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[php tags php5 spl]]></category>

		<guid isPermaLink="false">http://daniel.jb0.org/2007/05/14/spl-standard-php-library-directoryiterator-2/</guid>
		<description><![CDATA[Você conhece a SPL(Standard PHP Library) ? É uma biblioteca de componentes inteiramente escritos em PHP5 dentro do paradigma de Orientação a Objetos para lidar com problemas cotidianos na vida dos programadores que trabalham com PHP. O ambiente onde este artigo foi desenvolvido/testado: PHP 5.2.1 SAPI CLI (Command Line Interface) Ubuntu Feisty Fawn O que [...]]]></description>
			<content:encoded><![CDATA[<p>Você conhece a <a href="http://php.net/spl">SPL(Standard PHP Library)</a> ? É uma biblioteca de componentes inteiramente escritos em PHP5 dentro do paradigma de <a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objeto">Orientação a Objetos</a> para lidar com problemas cotidianos na vida dos programadores que trabalham com PHP.</p>
<p>O ambiente onde este artigo foi desenvolvido/testado:</p>
<ul>
<li>PHP 5.2.1 SAPI CLI (Command Line Interface)</li>
<li>Ubuntu Feisty Fawn</li>
</ul>
<p>O que você precisa saber para aprender melhor o conteúdo ?</p>
<ul>
<li><a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objeto">Orientação a objetos</a></li>
<li><a href="http://www.php.net/manual/pt_BR/language.exceptions.php">Exceptions</a></li>
<li><a href="http://pt.wikipedia.org/wiki/Uml">UML (Opcional)</a></li>
</ul>
<p><span id="more-141"></span><br />
Um dos problemas que encontramos sempre é a questão de trabalharmos com iteração de diretórios, por exemplo um script para backup, localizar algum determinado tipo de arquivo dentro de um diretório com muitos sub-diretórios,  efetuar mudança de nomes de forma recursiva dentre outros. Precisávamos de um solução elegante e legível para efetuarmos manutenção seja corretiva e ou implementativa, isso se torna mais importante quando você trabalha em equipe ou quando você deixa um código para que outro programador seja responsável pela manutenção. Outro ponto forte para a criação e utilização desta biblioteca é a questão de termos um ponto central de soluções(amplamente suportados) para problemas cotidianos assim agilizando o processo de desenvolvimento de software, ou seja, ao invés de termos que criar sempre uma solução para um problema que já tem solução(não seria re-inventar a roda ?!) ou fazer reutilização de software através de CTRL + C e CTRL V ( como era feito e que ainda é muito utilizado ).</p>
<p>Minha contribuição para que possamos melhorar o desenvolvimento de software onde tem como tecnologia de programação PHP5/6 é iniciar uma série de artigos explanando a utilização da SPL, tendo como início uma classe chamada DirectoryIterator.</p>
<p>Para entendermos melhor o DirectoryIterator precisamos dá uma olhadinha neste diagrama de colaboração, através da figura 1 abaixo:</p>
<p align="center"><img src="http://danielmartins.eti.br/blog/wp-content/uploads/2007/05/classdirectoryiterator-coll-graph.png" alt="" align="middle" /><small><small><span style="font-style: italic;">Figura 1.</span></small></small></p>
<p><small><small></small></small></p>
<p><small><small></small></small>Como podemos interpretar esse diagrama de colaboração(Figura 1) o DirectoryIterator é uma classe que implementa a interface Iterator e extende a classe SplFileInfo.<br />
O design da interface Iterator é segundo seu diagrama de colaboração o seguinte:</p>
<p align="center"><img src="http://danielmartins.eti.br/blog/wp-content/uploads/2007/05/interfaceiterator-coll-graph.png" alt="" /> <small><small><span style="font-style: italic;">Figura 2</span></small></small></p>
<p>Basicamente a interface Iterator diz que a classe <span style="font-style: italic;">DirectoryIterator</span> deve obrigatoriamente implementar os métodos <span style="font-style: italic;">current(), key(), next(), rewind(), valid()</span>. Portanto isto quer dizer que um objeto DirectoryIterator pode ser atravessado/iterado/percorrido e que deve ter os controles básico para uma boa iteração de fila como ir para frente( <span style="font-style: italic;">next() </span>), voltar( <span style="font-style: italic;">rewind() </span>), atual ( <span style="font-style: italic;">current() </span>) e controle condicional ( <span style="font-style: italic;">valid()</span> ).</p>
<p>Como ele extende a classe SplFileInfo, isso quer dizer que podemos acessar os métodos públicos desta classe, métodos como isFile(), isDir() , isExecutable()  dentre outros.</p>
<p>Com esse raciocínio básico podemos ir para o código, afinal &#8220;Talks is cheap, show me the code&#8221;.</p>
<p><coolcode lang="php"><br />
$dirName = &#8220;/tmp&#8221;;<br />
$dirObj = new DirectoryIterator($dirName);</p>
<p>$i = 0;<br />
for(; $dirObj->valid() ; $dirObj->next() )<br />
{<br />
     if( !$dirObj->isDot() )<br />
    {<br />
          print &#8220;$i -> {$dirObj->getPathname()} &#8220;.&#8221; ->; {$dirObj->getType()}\n&#8221;;<br />
          $i++;<br />
     }<br />
}<br />
</coolcode><br />
O código acima mostra os arquivos e diretórios de um determinado diretório informado no construtor do objeto<span style="font-style: italic;"> DirectoryIterator</span>.</p>
<p>Basicamente na linha 2 é informado o diretório para ser visualizado e percorrido, na linha 3 é instanciado um objeto <span style="font-style: italic;">DirectoryIterator</span> e o percorremos através de um <span style="font-weight: bold;">for</span> conforme visto na linha 5 e nos condicionais deste <span style="font-weight: bold;">for</span> podemos ver que estamos utilizando os métodos implementados na classe <span style="font-style: italic;">DirectoryIterator</span> conforme a interface <span style="font-style: italic;">Iterator</span> manda e isso nos dá os condicionais básicos e iteradores para percorrer/iterar este objeto.</p>
<p>Gostou ?! vamos dá um upgrade neste exemplo&#8230; vamos criar 2 funções recursivas, uma para guardar o enderecamento dos diretórios, sub-diretórios e seus arquivos em um <span style="font-weight: bold;">Array</span> e outra função para imprimir isso de forma recursiva:</p>
<p><coolcode lang="php"><br />
/**<br />
* Função para guardar os diretórios/sub-diretórios e seus arquivos<br />
* respectivamente em um vetor(Array) de forma recursiva<br />
*<br />
* @params string $dirName<br />
* @return array $arr<br />
*/<br />
function throughDir($dirName)<br />
{<br />
    $dirObj = new DirectoryIterator($dirName);<br />
    for(; $dirObj->valid() ; $dirObj->next() )<br />
   {<br />
        if( $dirObj->isDir() and !$dirObj->isDot() )<br />
       {<br />
            $arr[$dirObj->getPathname()] = throughDir($dirObj->getPathname());<br />
       }<br />
    }<br />
    return $arr;<br />
}</p>
<p>/**<br />
* Função para imprimir os diretórios/sub-diretórios e seus arquivos<br />
* respectivamente de um vetor(Array) de forma recursiva<br />
*<br />
* @params Array $dirName<br />
* @return void<br />
*/<br />
function printDir($arrDirs)<br />
{<br />
     if(is_array($arrDirs))<br />
     {<br />
          foreach($arrDirs as $dir => $subDir)<br />
         {<br />
              echo $dir.&#8221;\n&#8221;;<br />
              printDir($subDir);<br />
         }<br />
      }else{<br />
              echo $arrDirs.&#8221;\n&#8221;;<br />
      }<br />
}</p>
<p>$arrDirs = throughDir(&#8220;/home/daniel/Desktop/&#8221;);<br />
printDir($arrDirs);<br />
</coolcode><br />
Gostaram ?!  é muito legal, tudo muito bom e claro perfeito senão tivessemos problemas para serem tratados.</p>
<p>Um dos problemas que podem ocorrer durante a execução de seu script é a falta de permissão para ler e ou abrir diretórios e arquivos, e se isso acontecer irá comprometer a execução de seu programa, ou seja, será finalizado.</p>
<p>No exemplo do código acima você vai conseguir percorrer os diretórios e sub-diretórios que você possuir permissão de leitura mas ao tentar percorrer um sub-diretório onde você não possui permissão para ler, o seu script finalizará a execução.</p>
<p>Um exemplo é você alterar o script anterior para percorrer um diretório que você não tenha permissão, você pode trocar a string &#8220;/home/daniel/Desktop&#8221; por &#8220;/tmp&#8221;, geralmente em &#8220;/tmp&#8221; sempre tem algo que o proprietário é o root e assim não permitindo que você possa ler o conteúdo. No meu caso olha no que deu:</p>
<blockquote><p>daniel@blackforce:~/Desktop$ php teste2.php</p>
<p>Fatal error: Uncaught exception &#8216;RuntimeException&#8217; with message &#8216;DirectoryIterator::__construct(/tmp/gconfd-root): failed to open dir: Permission denied&#8217; in /home/daniel/Desktop/teste2.php:13<br />
Stack trace:<br />
#0 /home/daniel/Desktop/teste2.php(13): DirectoryIterator-&gt;__construct(&#8216;/tmp/gconfd-roo&#8230;&#8217;)<br />
#1 /home/daniel/Desktop/teste2.php(18): throughDir(&#8216;/tmp/gconfd-roo&#8230;&#8217;)<br />
#2 /home/daniel/Desktop/teste2.php(48): throughDir(&#8216;/tmp&#8217;)<br />
#3 {main}<br />
thrown in /home/daniel/Desktop/teste2.php on line 13</p></blockquote>
<p>Na maioria das vezes é possível fazer com que seu programa saiba com que tipo de erro está lidando e assim fazê-lo executar outros procedimentos para tentar ignorar o problema que o está impedindo de terminar com sucesso a execução.</p>
<p>Para tanto é necessário que você saiba como trabalhar com Exceptions, um exemplo de como capturar exceções no exemplo do código anterior é acrescentando um bloco de <span style="font-style: italic;">try / catch</span> na funcção <span style="font-weight: bold;">throughDir()</span> para capturar o erro como no exemplo abaixo:<br />
/**<br />
* Função para guardar os diretórios/sub-diretórios e seus arquivos<br />
* respectivamente em um vetor(Array) de forma recursiva<br />
*<br />
* @params string $dirName<br />
* @return array $arr<br />
*/<br />
function throughDir($dirName)<br />
{<br />
try{<br />
$dirObj = new DirectoryIterator($dirName);<br />
for(; $dirObj-&gt;valid() ; $dirObj-&gt;next() )<br />
{<br />
if( $dirObj-&gt;isDir() and !$dirObj-&gt;isDot() )<br />
{<br />
$arr[$dirObj-&gt;getPathname()] = throughDir($dirObj-&gt;getPathname());<br />
}<br />
}<br />
}catch(RuntimeException $erro){<br />
print $erro;<br />
}<br />
return $arr;<br />
}</p>
<p>Apenas com este tratamento de imprimir o erro olha o resultado da execução:</p>
<blockquote><p>daniel@blackforce:~/Desktop$ php teste2.php<br />
exception &#8216;RuntimeException&#8217; with message &#8216;DirectoryIterator::__construct(/tmp/gconfd-root): failed to open dir: Permission denied&#8217; in /home/daniel/Desktop/teste2.php:13<br />
Stack trace:<br />
#0 /home/daniel/Desktop/teste2.php(13): DirectoryIterator-&gt;__construct(&#8216;/tmp/gconfd-roo&#8230;&#8217;)<br />
#1 /home/daniel/Desktop/teste2.php(18): throughDir(&#8216;/tmp/gconfd-roo&#8230;&#8217;)<br />
#2 /home/daniel/Desktop/teste2.php(48): throughDir(&#8216;/tmp&#8217;)<br />
#3 {main}exception &#8216;RuntimeException&#8217; with message &#8216;DirectoryIterator::__construct(/tmp/orbit-root): failed to open dir: Permission denied&#8217; in /home/daniel/Desktop/teste2.php:13<br />
Stack trace:<br />
#0 /home/daniel/Desktop/teste2.php(13): DirectoryIterator-&gt;__construct(&#8216;/tmp/orbit-root&#8217;)<br />
#1 /home/daniel/Desktop/teste2.php(18): throughDir(&#8216;/tmp/orbit-root&#8217;)<br />
#2 /home/daniel/Desktop/teste2.php(48): throughDir(&#8216;/tmp&#8217;)<br />
#3 {main}/tmp/.tmp<br />
/tmp/.tmp/tcx<br />
/tmp/hsperfdata_daniel<br />
/tmp/.ICE-unix<br />
/tmp/.X11-unix<br />
/tmp/.esd-1000<br />
/tmp/kde-daniel<br />
/tmp/gconfd-root<br />
/tmp/orbit-daniel<br />
/tmp/hsperfdata_root<br />
/tmp/ksocket-daniel<br />
/tmp/orbit-root<br />
/tmp/ssh-KcBsL23144<br />
/tmp/gconfd-daniel<br />
/tmp/gconfd-daniel/lock<br />
/tmp/virtual-daniel.XCv1fR<br />
/tmp/epiphany-daniel-OTEfiF<br />
/tmp/keyring-vrbWn3<br />
/tmp/.exchange-daniel<br />
/tmp/svbd9.tmp<br />
/tmp/plugtmp<br />
daniel@blackforce:~/Desktop$</p></blockquote>
<p>Como podemos ver, o erro foi impresso mas não gerou nenhum Fatal Error na execução do programa, o script continuou a execução até o fim e se por acaso tivesse ocorrido outro erro por falta de permissão, novamente ele iria imprimir o erro e seguir em diante, tudo isso porque o Fatal Error é gerado porque você não está tratando devidamente as ocilações de comportamento de seu programa de uma forma adequada.</p>
<p>A única exceção que vimos foi a <span style="font-weight: bold;">RuntimeException</span>, mas este post já está muito grande e não quero me estender mais para não ficar muito cansativo de ler, além do que este assunto sobre Exceptions geradas pela <a href="http://php.net/spl">SPL</a> merece um artigo somente tratando de explanar sua lógica, forma de captura e tratamento.</p>
<p>Com certeza isso é só o início da uma apresentação sobre a <a href="http://php.net/spl">SPL</a>. Espero que com essa introdução à classe DirectoryIterator tenha ajudado de alguma forma a tirar dúvidas sobre esta classe.</p>
<p>Qualquer <span style="font-weight: bold;">contribuição/sugestão/correção/reclamação</span> será bem vinda.</p>
<p>Comente! ajude a melhorar a qualidade do artigo.. compartilhe conhecimento.</p>
<p>Fontes:</p>
<ul>
<li><a href="http://www.php.net/~helly/php/ext/spl/">http://www.php.net/~helly/php/ext/spl/</a></li>
<li><a href="http://www.php.net/manual/en/ref.spl.php">http://www.php.net/manual/en/ref.spl.php</a></li>
</ul>
<p>Updates:<br />
Atualizado endereços das imagens para a nova url</p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2007/05/14/spl-standard-php-library-directoryiterator-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mais uma vitória do PHP!</title>
		<link>http://danielmartins.eti.br/blog/2007/02/10/mais-uma-vitoria-do-php/</link>
		<comments>http://danielmartins.eti.br/blog/2007/02/10/mais-uma-vitoria-do-php/#comments</comments>
		<pubDate>Sat, 10 Feb 2007 18:19:49 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Bancos de dados]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://daniel.jb0.org/?p=53</guid>
		<description><![CDATA[Notícia não está quente mas está morna! rs&#8230; É hora de criar seu espaço também nos mainframes da IBM! A Equipe da IBM que desenvolve z/OS acabou de portar o PHP. A versão portada é a 5.1.2 e foi portada para utilização nos 2 ambientes suportados pelo PHP, o CLI (Command Line Interface) e para [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.php.net" rel="attachment wp-att-54" title="PHP Power !"><img src="http://daniel.jb0.org/wp-content/uploads/2007/02/php.gif" alt="PHP Power !" /></a></p>
<p>Notícia não está quente mas está morna! rs&#8230;</p>
<p>É hora de criar seu espaço também nos mainframes da IBM!</p>
<p>A Equipe da IBM que desenvolve z/OS acabou de portar o PHP. A versão portada é a 5.1.2  e foi portada para utilização nos 2 ambientes suportados pelo PHP, o CLI (Command Line Interface) e para o ambiente web através de CGI e claro já vem incluída a extensão PDO_ODBC para comunicação com o DB2, mas isso é claro ! <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Fonte: <a href="http://info.abril.com.br/blog/sandra/20070208_listar.shtml">http://info.abril.com.br/blog/sandra/20070208_listar.shtml</a></p>
<p>Fonte: <a href="http://www.alphaworks.ibm.com/tech/php4zos">http://www.alphaworks.ibm.com/tech/php4zos</a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2007/02/10/mais-uma-vitoria-do-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax + IE(Ca)che</title>
		<link>http://danielmartins.eti.br/blog/2006/09/13/ajax-iecache/</link>
		<comments>http://danielmartins.eti.br/blog/2006/09/13/ajax-iecache/#comments</comments>
		<pubDate>Wed, 13 Sep 2006 20:14:42 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://daniel.jb0.org/?p=38</guid>
		<description><![CDATA[Ao escrever chamadas em Ajax, me deparei com um problema, ao fazer uma requisição de dados do servidor, o IE guarda os dados localmente e isso é extremamente irritante porque estou lidando com dados temporários, portanto na próxima requisição será preciso obter dados atualizados, mas pelo IE(ca) será utilizado os dados da última requisição. Procurando [...]]]></description>
			<content:encoded><![CDATA[<p>Ao escrever chamadas em Ajax, me deparei com um problema, ao fazer uma requisição de dados do servidor, o IE guarda os dados localmente e isso é extremamente irritante porque estou lidando com dados temporários, portanto na próxima requisição será preciso obter dados atualizados, mas pelo IE(ca) será utilizado os dados da última requisição.<br />
Procurando no google achei um <a href="http://weblogs.asp.net/pleloup/archive/2006/06/08/451583.aspx">link</a>  que explica como enganar o IE para sempre trazer novamente as informações ao invés de usar os dados que estão em cache.</p>
<p>No script Ajax, você irá fazer uma requisição e será preciso passar uma url para então obter os dados, na variável que contém url você acrescentará</p>
<blockquote><p>+&#8217;&#038;dummy=&#8217; + new Date().getTime()</p></blockquote>
<p>, esta dica só serve para o tipo de requisição GET(eu não testei se funciona com POST):</p>
<p>Exemplo:</p>
<blockquote><p>var url = &#8216;automovel.php?placa=JXX-0101&#8242;</p></blockquote>
<p>Acrescente:</p>
<blockquote><p>var url = &#8216;automovel.php?veiculo=JXX-0101&#8242;+&#8217;&#038;dummy=&#8217; + new Date().getTime()</p></blockquote>
<p>Link: <a href="http://weblogs.asp.net/pleloup/archive/2006/06/08/451583.aspx">http://weblogs.asp.net/pleloup/archive/2006/06/08/451583.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2006/09/13/ajax-iecache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

