<?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.2</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  [...]]]></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,  [...]]]></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  [...]]]></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  [...]]]></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 bibliotecas escrita em C  [...]]]></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  [...]]]></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  [...]]]></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  [...]]]></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 o  [...]]]></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)  [...]]]></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>

