<?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>CrisDev - Cristian Medeiros</title>
	<atom:link href="http://crisdev.eti.br/feed" rel="self" type="application/rss+xml" />
	<link>http://crisdev.eti.br</link>
	<description>Desenvolvimento Web</description>
	<lastBuildDate>Tue, 09 Mar 2010 12:18:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Visão Ágil – Community Journal 01</title>
		<link>http://crisdev.eti.br/visao-agil-%e2%80%93-community-journal-01.html</link>
		<comments>http://crisdev.eti.br/visao-agil-%e2%80%93-community-journal-01.html#comments</comments>
		<pubDate>Tue, 09 Mar 2010 12:11:09 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[desenvolvimento agil]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=67</guid>
		<description><![CDATA[O pessoal do Visão Ágil saiu com uma nova publicação, bem interessante como sempre, no lugar da antiga Revista Visão Ágil, segue o release da edição:
Visando ter um canal mais simples, direto e mais ágil (com entregas constantes), criamos um novo formato de disponibilização de notícias e conhecimentos para nossa comunidade de agilistas. Portanto, gostaria [...]]]></description>
			<content:encoded><![CDATA[<p>O pessoal do Visão Ágil saiu com uma nova publicação, bem interessante como sempre, no lugar da antiga Revista Visão Ágil, segue o release da edição:</p>
<blockquote><p>Visando ter um canal mais simples, direto e mais ágil (com entregas constantes), criamos um novo formato de disponibilização de notícias e conhecimentos para nossa comunidade de agilistas. Portanto, gostaria de apresentar a todos: o Visão Ágil Community Journal, que nessa primeira edição oferece aos nossos leitores as seguintes matérias:</p>
<ul>
<li>Agile Brazil 2010</li>
<li>Experiência Sicoob Brasil</li>
<li>Testes Unitários</li>
<li>Por que usar “story points”?</li>
<li>Coaching para Auto-Organizacão</li>
<li>Essência Ágil</li>
<li>Notícias</li>
</ul>
</blockquote>
<p>O download da edição pode ser realizado diretamente no site deles: http://visaoagil.wordpress.com/2010/03/08/visao-agil-community-journal-01/</p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/visao-agil-%e2%80%93-community-journal-01.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cast entre objetos PHP</title>
		<link>http://crisdev.eti.br/cast-entre-objetos-php.html</link>
		<comments>http://crisdev.eti.br/cast-entre-objetos-php.html#comments</comments>
		<pubDate>Fri, 05 Mar 2010 12:51:29 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[OO]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=58</guid>
		<description><![CDATA[Uma das grandes limitações do PHP5, na minha opnião, é não realizar o cast entre objetos. O PHP permite apenas cast entre tipos primitivos, ou no máximo um object standard, que na maior parte das vezes resolve o que você precisa, mas em um arquitetura mais elaborada isso não é aceito. Para programadores de outras [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das grandes limitações do PHP5, na minha opnião, é não realizar o cast entre objetos. O PHP permite apenas cast entre tipos primitivos, ou no máximo um object standard, que na maior parte das vezes resolve o que você precisa, mas em um arquitetura mais elaborada isso não é aceito. Para programadores de outras linguagens OO isso é um verdadeiro martirio ou uma limitação imperdoável.</p>
<p>Porém podemos contornar essa falha utilizando um &#8220;caster&#8221; que nada mais faz do que retornar uma instancia do objeto necessario, caso nosso objeto não seja do tipo especificado:</p>
<pre LANGUAGE="PHP">private function caster($object, $requiredType)
{
    if(get_class($object) != $requiredType)
    {
        return new $requiredType;
    }
}</pre>
<p>Com isso é possível que uma classe pai caiba dentro de uma classe filha, com um stdObjetc isso também seria possível, porém em uma arquitetura mais elaborada, isso não seria aceito.</p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/cast-entre-objetos-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDO e MySQL com UTF-8</title>
		<link>http://crisdev.eti.br/pdo-e-mysql-com-utf-8.html</link>
		<comments>http://crisdev.eti.br/pdo-e-mysql-com-utf-8.html#comments</comments>
		<pubDate>Thu, 13 Nov 2008 11:49:31 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[pdo]]></category>
		<category><![CDATA[unicode]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=47</guid>
		<description><![CDATA[Se voc&#234; esta usando PDO, esta tendo dificuldades com UTF-8 no seu MySQL, mesmo com tudo setado para UTF-8, voc&#234; pode tentar isso:
$pdo = new PDO(
&#160;&#160;&#160; &#8216;mysql:host=localhost;dbname=nomedobanco&#8217;,
&#160;&#160;&#160; &#34;user&#34;,
&#160;&#160;&#160; &#34;pass&#34;,
&#160;&#160;&#160; array(PDO::MYSQL_ATTR_INIT_COMMAND =&#62; &#34;SET NAMES utf8&#34;));
&#160;
O &#250;ltimo parametro do construtor do PDO &#233; um array com as op&#231;&#245;es espec&#237;ficas do driver, no caso, do driver od MySQL. [...]]]></description>
			<content:encoded><![CDATA[<p>Se voc&ecirc; esta usando PDO, esta tendo dificuldades com UTF-8 no seu MySQL, mesmo com tudo setado para UTF-8, voc&ecirc; pode tentar isso:</p>
<p>$pdo = new PDO(<br />
&nbsp;&nbsp;&nbsp; &#8216;mysql:host=localhost;dbname=nomedobanco&#8217;,<br />
&nbsp;&nbsp;&nbsp; &quot;user&quot;,<br />
&nbsp;&nbsp;&nbsp; &quot;pass&quot;,<br />
&nbsp;&nbsp;&nbsp; array(PDO::MYSQL_ATTR_INIT_COMMAND =&gt; &quot;SET NAMES utf8&quot;));</p>
<p>&nbsp;</p>
<p>O &uacute;ltimo parametro do construtor do PDO &eacute; um array com as op&ccedil;&otilde;es espec&iacute;ficas do driver, no caso, do driver od MySQL. Este parametro &eacute; alimentado no velho estilo &quot;array&quot; chave=&gt;valor. </p>
<p>Observem que o parametro (PDO::MYSQL_ATTR_INIT_COMMAND) n&atilde;o se trata de uma configura&ccedil;&atilde;o de charset, mas sim de um comando que &eacute; executado todas as vezes que voc&ecirc; conecta no banco. Neste caso, todas as vezes que ele se conecta no banco, ele executa a query &quot;SET NAMES utf8&quot; (acho que &eacute; espec&iacute;fica do MySQL) que diz para o MySQL utilizar UTF-8 como charset para nossa conex&atilde;o.</p>
<p>Para saber mais:</p>
<ul>
<li><a href="http://crisdev.eti.br/pdo-e-bean-no-php.html">PDO e BEAN no PHP</a></li>
<li><a target="_blank" href="http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html" onclick="urchinTracker('/outgoing/dev.mysql.com/doc/refman/5.0/en/charset-connection.html?referer=');">MySQL &ldquo;Connection Character Sets and Collation&rdquo; documentation</a></li>
<li><a target="_blank" href="http://www.php.net/manual/en/pdo.construct.php" onclick="urchinTracker('/outgoing/www.php.net/manual/en/pdo.construct.php?referer=');">PDO constructor documentation</a></li>
<li><a target="_blank" href="http://www.php.net/manual/en/ref.pdo-mysql.php" onclick="urchinTracker('/outgoing/www.php.net/manual/en/ref.pdo-mysql.php?referer=');">PDO MySQL driver documentation</a></li>
</ul>
<p>
Fonte:<br />
<a target="_blank" href="http://www.laszlo.nu/post/34159352/how-to-use-utf-8-with-mysql-and-php-data-objects-pdo" onclick="urchinTracker('/outgoing/www.laszlo.nu/post/34159352/how-to-use-utf-8-with-mysql-and-php-data-objects-pdo?referer=');">http://www.laszlo.nu/post/34159352/how-to-use-utf-8-with-mysql-and-php-data-objects-pdo</a></p>
<p>Tags BlogBlogs: <a href="http://blogblogs.com.br/tag/php" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/php?referer=');">php</a>, <a href="http://blogblogs.com.br/tag/pdo" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/pdo?referer=');">pdo</a>, <a href="http://blogblogs.com.br/tag/mysql" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/mysql?referer=');">mysql</a>, <a href="http://blogblogs.com.br/tag/utf8" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/utf8?referer=');">utf8</a>, <a href="http://blogblogs.com.br/tag/unicode" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/unicode?referer=');">unicode</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/pdo-e-mysql-com-utf-8.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP &#8211; Criando e tratando exceptions</title>
		<link>http://crisdev.eti.br/php-criando-e-tratando-exceptions.html</link>
		<comments>http://crisdev.eti.br/php-criando-e-tratando-exceptions.html#comments</comments>
		<pubDate>Fri, 07 Nov 2008 17:36:24 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[OO]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=42</guid>
		<description><![CDATA[&#160;
N&#227;o &#233; novidade, mas vale o registro. O PHP 5, possui uma funcionalidade bem interessante, similar a outras linguagens orientadas a objeto, Exce&#231;&#227;o. Quando algo altera o fluxo de execu&#231;&#227;o do sistema ele dispara uma Exce&#231;&#227;o. Uma exce&#231;&#227;o pode ser disparada ou capturada, depende do que voc&#234; pretende. Voc&#234; pode customizar um s&#233;rie de tratamentos [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>N&atilde;o &eacute; novidade, mas vale o registro. O PHP 5, possui uma funcionalidade bem interessante, similar a outras linguagens orientadas a objeto, Exce&ccedil;&atilde;o. Quando algo altera o fluxo de execu&ccedil;&atilde;o do sistema ele dispara uma Exce&ccedil;&atilde;o. Uma exce&ccedil;&atilde;o pode ser disparada ou capturada, depende do que voc&ecirc; pretende. Voc&ecirc; pode customizar um s&eacute;rie de tratamentos de erros que ir&atilde;o facilitar o desenvolvimento do seu sistema, com essa custimiza&ccedil;&atilde;o voc&ecirc; pode saber exatamente o que est&aacute; sendo tratado e se algo fugir desse controle &eacute; algo anormal e fica mais facil a rastreabilidade.</p>
<p>Dentro de uma exce&ccedil;&atilde;o, voc&ecirc; pode disparar um log, ou um alert, ou registrar algo no banco, &eacute; um fluxo de erro sob controle.</p>
<p>Eu costumo tratar as exce&ccedil;&otilde;es para tudo, campo em branco, tipo de dado inv&aacute;lido, e-mail inv&aacute;lido, ou se alguma f&oacute;rmula n&atilde;o foi validada. Para isso uso um conjunto de classes que constituem as mensagens e os testes para que as exce&ccedil;&otilde;es sejam disparadas:</p>
<p>Uma classe Main para controlar as requisi&ccedil;&otilde;es de Exception:</p>
<h2>MainException.php:</h2>
<p>&lt;?PHP <br />
&nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp; * Declara&ccedil;&atilde;o da classe para tratamento de erros <br />
&nbsp;&nbsp;&nbsp; * A classe deve ser extendida da classe Exception do PHP<br />
&nbsp;&nbsp;&nbsp; * Ela ir&aacute; realizar a sobrescrita da classe Exception do PHP <br />
&nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; class MainException extends Exception { <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Fa&ccedil;o a declara&ccedil;&atilde;o das vari&aacute;vis que vou utilizar no corpo da classe <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private&nbsp;&nbsp;&nbsp; $cod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private&nbsp;&nbsp;&nbsp; $msg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &quot;&quot;; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private&nbsp;&nbsp;&nbsp; $erromsg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &quot;&quot;; </p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; * Aqui fa&ccedil;o a declara&ccedil;&atilde;o do m&eacute;todo construtor de classe <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; * Esse m&eacute;todo recebe os seguintes parametros: <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; * @param $cod &#8211; C&oacute;digo de erro <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; * @param $msg &#8211; Uma mensagem de erro personalizada <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; * @param $erromsg &#8211; Uma mensagem de erro padr&atilde;o<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; */ </p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public function __construct( $cod = 0 , $msg = &quot;&quot; , $erromsg = &quot;&quot; ) { <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Sobreescrevo as propiedades da classe passando os parametros <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $this-&gt;cod = $cod; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $this-&gt;msg = &quot;Ocorreu um erro n&atilde;o identificado&quot;; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $this-&gt;erromsg = $erromsg; <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Aqui eu chamo o construtor da classe pai&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; parent::__construct( $this-&gt;msg , $this-&gt;cod );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /** <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; * Este m&eacute;todo ir&aacute; salvar nossos erros em um log <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; */ <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public function _Log() { </p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Define o arquivo que ser&aacute; criado ou gravado caso exista, o nome do arquivo ir&aacute; ser o nome da classe<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $log = __CLASS__ . &quot;_log_&quot; . date(&quot;dmY&quot;) . &quot;txt&quot;; <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Se n&atilde;o existe arquivo, cria <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if( !file_exists($log)){ <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $msg = &quot;/************************************************** &quot; . <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot; * Arquivo de log &quot; . <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot; * &quot; . <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot; * ClassName: &quot; . __CLASS__ . &quot; &quot; . <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot; * Data Cria&ccedil;&atilde;o: &quot; . date(&quot;d/m/Y H:i&quot;) . &quot; &quot; . <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot; *************************************************/ &quot; . <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &quot;; <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }else <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $msg = &quot;&quot;; <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Abre o arquivo <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if($fp = fopen( $txt , &quot;a+&quot;)) { <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Arquivo <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $msg .=&nbsp;&nbsp;&nbsp; __CLASS__ . &quot; hora: &quot;.date(&quot;H:i&quot;) . &quot; &quot; . <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;Erro [ {$this-&gt;cod} ]: linha ( {$this-&gt;line} ) &quot; . <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;{$this-&gt;msg} &quot; . <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;{$this-&gt;erromsg} &quot; . <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &quot;; <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Grava <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fwrite($fp, $msg); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fclose($fp); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; } <br />
?&gt;</p>
<p>A classe abaixo estende MainException e a customiza para Exce&ccedil;&otilde;es de texto:</p>
<h2>textException.php:</h2>
<p>&lt;?PHP <br />
/** <br />
&nbsp;* Esta classe &eacute; respons&aacute;vel por disparar exce&ccedil;&otilde;es relacionadas a texto <br />
&nbsp;*/ <br />
&nbsp;class textException extends MainException { <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function __construct(&nbsp; ) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Sobrescrita do construtor de MainException, com os valores que queremos <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parent::__construct( 1, &quot;Tipo de caracter inv&aacute;lido&quot;, PHPSELF); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;_Log(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;} <br />
?&gt;</p>
<p>A classe abaixo faz a verifica&ccedil;&atilde;o do texto e dispara a exce&ccedil;&atilde;o:</p>
<h2>verificaTexto.php:</h2>
<p>&lt;?PHP <br />
&nbsp;<br />
class verificaTexto <br />
{ <br />
&nbsp;&nbsp;&nbsp; public function __construct($texto) <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(!is_int($texto)) <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; echo $texto; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new textException(); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;<br />
} <br />
&nbsp;<br />
?&gt;</p>
<p>A classe abaixo faz o teste para n&uacute;meros e caso falhe, dispara MainException, ou seja sem customizar o tipo de exce&ccedil;&atilde;o que ser&aacute; disparada, ent&atilde;o ir&aacute; enviar a mensagem padr&atilde;o:</p>
<h2>verificaValor.php:</h2>
<p>&lt;?PHP <br />
&nbsp;<br />
class verificaValor <br />
{ <br />
&nbsp;&nbsp;&nbsp; public function __construct($val) <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if($val == 1) <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; echo $val; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new MainException(); <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;<br />
} <br />
&nbsp;<br />
?&gt;</p>
<p>Apenas para teste:</p>
<p>&lt;?PHP <br />
&nbsp;<br />
include (&quot;autoload.php&quot;); <br />
&nbsp;<br />
try <br />
{ <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; //$b = new verificaTexto(1); <br />
&nbsp;&nbsp;&nbsp; $b1 = new verificaValor(1123); <br />
&nbsp;<br />
} <br />
Catch(textException $te) <br />
{ <br />
&nbsp;&nbsp;&nbsp; echo $te-&gt;getMessage(); <br />
} <br />
catch(Exception $e) <br />
{ <br />
&nbsp;&nbsp;&nbsp; echo $e-&gt;getMessage(); <br />
} <br />
&nbsp;<br />
&nbsp;<br />
?&gt;</p>
<p>E o autoload se algu&eacute;m quiser:</p>
<p>&lt;?PHP <br />
&nbsp;<br />
function __autoload($class_name) { <br />
&nbsp;&nbsp;&nbsp; require_once $class_name . &#8216;.php&#8217;; <br />
} <br />
&nbsp;<br />
?&gt;</p>
<p>Como podem ver, a classe MainException &eacute; que faz todo o trabalho, nela temos o m&eacute;todo principal que realiza o disparo das exceptions, em textException, sobrespcrevemos a classe MainException e fazemos ela se comportar como queremos para disparar apenas uma mensagem de erro para textos.</p>
<p>Ainda existe a possibilidade de disparar uma Exception gen&eacute;rica, caso nosso tratamento n&atilde;o seja para textos. Se observarem com calma ver&atilde;o que se trata apenas de sobrescritas de m&eacute;todos algo que seria perfeitamente poss&iacute;vel sem Exception, por&eacute;m desta forma temos mais controle (fora a elegancia do c&oacute;digo).</p>
<p>Bom &eacute; isso, qualquer d&uacute;vida comentem.</p>
<p>Para saber mais:</p>
<ul>
<li>Exceptions no manual: <a href="http://www.php.net/manual/en/language.exceptions.php" target="_blank" onclick="urchinTracker('/outgoing/www.php.net/manual/en/language.exceptions.php?referer=');">http://www.php.net/manual/en/language.exceptions.php</a></li>
<li>Classe MainException original de Jos&eacute; Roberto Gomes da Silva: <a href="http://www.plugmasters.com.br/sys/materias/914/1/Exception-com-php" target="_blank" onclick="urchinTracker('/outgoing/www.plugmasters.com.br/sys/materias/914/1/Exception-com-php?referer=');">http://www.plugmasters.com.br/sys/materias/914/1/Exception-com-php</a></li>
</ul>
<p>Tags BlogBlogs: <a href="http://blogblogs.com.br/tag/php" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/php?referer=');">php</a>, <a href="http://blogblogs.com.br/tag/exception" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/exception?referer=');">exception</a>, <a href="http://blogblogs.com.br/tag/oo" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/oo?referer=');">oo</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/php-criando-e-tratando-exceptions.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Encontro Ágil 2008</title>
		<link>http://crisdev.eti.br/encontro-agil-2008.html</link>
		<comments>http://crisdev.eti.br/encontro-agil-2008.html#comments</comments>
		<pubDate>Thu, 18 Sep 2008 19:07:15 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[desenvolvimento agil]]></category>
		<category><![CDATA[Metodologias]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=35</guid>
		<description><![CDATA[11 de Outubro de 2008


IME-USP &#8211; Rua do Mat&#227;o, 1010 &#8211; Cidade Universit&#225;ria
S&#227;o Paulo

O Encontro &#193;gil &#233; um evento gratuito que reunir&#225;, por um dia inteiro, alguns dos principais nomes  				brasileiros do desenvolvimento &#225;gil de software.
Dia 11 de Outubro est&#225; reservado para discuss&#245;es, trocas de experi&#234;ncias e palestras 				 de especialistas em Programa&#231;&#227;o eXtrema, [...]]]></description>
			<content:encoded><![CDATA[<p>11 de Outubro de 2008</p>
<p></p>
<div id="data">
<p>IME-USP &#8211; Rua do Mat&atilde;o, 1010 &#8211; Cidade Universit&aacute;ria<br />
S&atilde;o Paulo</p>
</div>
<p>O <strong>Encontro &Aacute;gil</strong> &eacute; um evento <strong>gratuito</strong> que reunir&aacute;, por um dia inteiro, alguns dos principais nomes  				brasileiros do desenvolvimento &aacute;gil de software.</p>
<p>Dia 11 de Outubro est&aacute; reservado para discuss&otilde;es, trocas de experi&ecirc;ncias e palestras 				 de especialistas em Programa&ccedil;&atilde;o eXtrema, Scrum e nas metodologias mais produtivas do mercado.</p>
<p>Conhe&ccedil;a os profissionais que j&aacute; usam m&eacute;todos &aacute;geis. Junte-se ao grupo que est&aacute;  				revolucinando a maneira de produzir software. Participe das discuss&otilde;es mais atuais do 				 mercado, tire suas d&uacute;vidas e descubra como as t&eacute;cnicas &aacute;geis podem ajud&aacute;-lo a aumentar a  				produtividade da sua equipe e a qualidade do seu software.</p>
<p>Tudo isso, no <strong>Encontro &Aacute;gil 2008</strong>. N&atilde;o perca!</p>
<p>&nbsp;</p>
<p>mais informa&ccedil;&otilde;es: <a href="http://www.encontroagil.com.br/principal/home.jsf" target="_blank" onclick="urchinTracker('/outgoing/www.encontroagil.com.br/principal/home.jsf?referer=');">http://www.encontroagil.com.br/principal/home.jsf</a></p>
<p>Tags BlogBlogs: <a href="http://blogblogs.com.br/tag/%3Cspan%3Emetodologias" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/_3Cspan_3Emetodologias?referer=');"><span>metodologias</a>, <a href="http://blogblogs.com.br/tag/%3C%2Fspan%3E%3Cspan%3E+desenvolvimento+agil%3C%2Fspan%3E" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/_3C_2Fspan_3E_3Cspan_3E+desenvolvimento+agil_3C_2Fspan_3E?referer=');"></span><span> desenvolvimento agil</span></a>, <a href="http://blogblogs.com.br/tag/scrum" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/scrum?referer=');">scrum</a></p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/encontro-agil-2008.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Conference 2008</title>
		<link>http://crisdev.eti.br/php-conference-2008.html</link>
		<comments>http://crisdev.eti.br/php-conference-2008.html#comments</comments>
		<pubDate>Fri, 22 Aug 2008 13:33:55 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[geral]]></category>
		<category><![CDATA[conaphp]]></category>
		<category><![CDATA[php conference]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=32</guid>
		<description><![CDATA[O PHP Conference deste ano ir&#225; se chamar CONAPHP (Congresso Nacional de PHP) e ser&#225; abrigado pelo CONISLI.
Diferente do ano passado, o evento ser&#225; realizado em S&#227;o Paulo (ainda bem, porque Osasco &#233; longe demais) na faculdade FIAP que fica na Av. Lins de Vasconcelos, 1264, bairro Aclima&#231;&#227;o, nos dias 18 e 19 de outubro. [...]]]></description>
			<content:encoded><![CDATA[<p>O PHP Conference deste ano ir&aacute; se chamar CONAPHP (Congresso Nacional de PHP) e ser&aacute; abrigado pelo CONISLI.</p>
<p>Diferente do ano passado, o evento ser&aacute; realizado em S&atilde;o Paulo (ainda bem, porque Osasco &eacute; longe demais) na faculdade FIAP que fica na Av. Lins de Vasconcelos, 1264, bairro Aclima&ccedil;&atilde;o, nos dias 18 e 19 de outubro. Os valores v&atilde;o (iam) de R$ 30,00 &agrave; R$ 100,00 se voc&ecirc; deixar para o &uacute;ltimo dia.</p>
<p>Mais uma vez, como no ano passado, a programa&ccedil;&atilde;o das palestras ainda n&atilde;o foi divulgada (pelo menos n&atilde;o at&eacute; a data deste post), e quem esteve esperando para ver se valia a pena ir ao evento pelo conte&uacute;do, n&atilde;o poder&aacute; mais aproveitar o pre&ccedil;o de abertura, ou seja, os organizadores apostam que todos d&ecirc;em um tiro no escuro para se inscrever em um evento que n&atilde;o se sabe a program&ccedil;&atilde;o&#8230; well wathever&#8230;</p>
<p>As palestras internacionais j&aacute; est&atilde;o definidas, teremos Andrei Zmievski, que falar&aacute; sobre o Unicode do PHP6 (exatamente a mesma coisa que o Lucas Smith veio falar ano passado) e o meu bom amigo <a href="http://www.cesarodas.com/" target="_blank" onclick="urchinTracker('/outgoing/www.cesarodas.com/?referer=');">Cesar Rodas</a> que ir&aacute; falar sobre <a href="http://code.google.com/soc/2008/wordpress/appinfo.html?csaid=A6F49B7AFCE27E6E" target="_blank" onclick="urchinTracker('/outgoing/code.google.com/soc/2008/wordpress/appinfo.html?csaid=A6F49B7AFCE27E6E&amp;referer=');">seu projeto&nbsp; no GSoC2008 para o worpress</a>.</p>
<p>N&atilde;o alimento grande expectativa para esse evento&#8230; mas vamos aguardar, talvez a organiza&ccedil;&atilde;o venha com alguma surpresa<br />
&nbsp;</p>
<p>Tags BlogBlogs: <a href="http://blogblogs.com.br/tag/php" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/php?referer=');">php</a>, <a href="http://blogblogs.com.br/tag/conaphp" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/conaphp?referer=');">conaphp</a>, <a href="http://blogblogs.com.br/tag/php+conference" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/php+conference?referer=');">php conference</a>, <a href="http://blogblogs.com.br/tag/conisli" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/conisli?referer=');">conisli</a></p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/php-conference-2008.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Era uma vez&#8230;</title>
		<link>http://crisdev.eti.br/era-uma-vez.html</link>
		<comments>http://crisdev.eti.br/era-uma-vez.html#comments</comments>
		<pubDate>Fri, 08 Aug 2008 12:26:06 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=29</guid>
		<description><![CDATA[&#160;
Hoje, chega ao fim a vers&#227;o 4 do PHP, foram 4 longos anos desde o lan&#231;amento da vers&#227;o 5 e agora encerrada oficialmente.
Para aqueles que veem isso com um certo temor, n&#227;o se preocupem, o PHP5 n&#227;o &#233; um bicho de 7 cabe&#231;as e as melhorias implementadas nele n&#227;o ser&#227;o dificil de serem absorvidas pelos [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Hoje, chega ao fim a vers&atilde;o 4 do PHP, foram 4 longos anos desde o lan&ccedil;amento da vers&atilde;o 5 e agora encerrada oficialmente.</p>
<p>Para aqueles que veem isso com um certo temor, n&atilde;o se preocupem, o PHP5 n&atilde;o &eacute; um bicho de 7 cabe&ccedil;as e as melhorias implementadas nele n&atilde;o ser&atilde;o dificil de serem absorvidas pelos novatos&#8230; a diferen&ccedil;a estar&aacute; apenas na orienta&ccedil;&atilde;o a objetos.</p>
<p>&nbsp;</p>
<p>Tags BlogBlogs: <a href="http://blogblogs.com.br/tag/php" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/php?referer=');">php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/era-uma-vez.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On duplicate key update</title>
		<link>http://crisdev.eti.br/on-duplicate-key-update.html</link>
		<comments>http://crisdev.eti.br/on-duplicate-key-update.html#comments</comments>
		<pubDate>Wed, 30 Jul 2008 12:43:13 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[constraints]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=24</guid>
		<description><![CDATA[T&#225; ai um recurso que achei magnifico no MySQL 5, talvez n&#227;o seja mais novidade para nigu&#233;m, mas para mim foi bem interessante descobrir que n&#227;o preciso mais fazer um update na minha abstra&#231;&#227;o de dados, posso fazer tudo com insert e caso uma das chaves j&#225; esteja cadastrada o MySQL dispara um update.
O procedimento [...]]]></description>
			<content:encoded><![CDATA[<p>T&aacute; ai um recurso que achei magnifico no MySQL 5, talvez n&atilde;o seja mais novidade para nigu&eacute;m, mas para mim foi bem interessante descobrir que n&atilde;o preciso mais fazer um update na minha abstra&ccedil;&atilde;o de dados, posso fazer tudo com insert e caso uma das chaves j&aacute; esteja cadastrada o MySQL dispara um update.</p>
<p>O procedimento &eacute; muito simples, basta que voc&ecirc; tenha uma primary key ou um index &uacute;nico e voc&ecirc; poder&aacute; utilizar esta t&eacute;cnica.</p>
<p>Exemplo:</p>
<pre class="programlisting">
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
</pre>
<p>O comando acima ir&aacute; atualizar a coluna c com o valor de c+1 quando a primary ou o index for duplicado.</p>
<p>Voc&ecirc; pode indicar outros campos para serem atualizados tamb&eacute;m.</p>
<p>Exemplo:</p>
<pre class="programlisting">
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1, b=now();
</pre>
<p>&Eacute; uma t&eacute;cnica simples, mas que pode ganhar muito tempo de projeto dependendo da sua aplica&ccedil;&atilde;o.</p>
<p>Para saber mais:<br />
&nbsp;</p>
<ul>
<li><a href="http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html" target="_blank" onclick="urchinTracker('/outgoing/dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html?referer=');">http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html</a></li>
</ul>
<pre class="programlisting">
</pre>
<p>Tags BlogBlogs: <a href="http://blogblogs.com.br/tag/mysq" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/mysq?referer=');">mysq</a>, <a href="http://blogblogs.com.br/tag/banco+de+dados" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/banco+de+dados?referer=');">banco de dados</a>, <a href="http://blogblogs.com.br/tag/duplicate+key" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/duplicate+key?referer=');">duplicate key</a></p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/on-duplicate-key-update.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SCRUM &#8211; Primeiros passos</title>
		<link>http://crisdev.eti.br/scrum-primeiros-passos.html</link>
		<comments>http://crisdev.eti.br/scrum-primeiros-passos.html#comments</comments>
		<pubDate>Wed, 23 Jul 2008 13:18:14 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[desenvolvimento agil]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=23</guid>
		<description><![CDATA[Mudei de emprego recentemente, e tive a oportunidade de ter contato com o SCRUM, que curiosamente segue a fio a teoria que eu vinha acompanhando.
Em resumo, o cliente ou o gerente (que &#233; chamado de PO &#8211; Project Owner) quer fazer algo, ent&#227;o ele separa isso em partes, algo como: criar base de dados, modelar [...]]]></description>
			<content:encoded><![CDATA[<p>Mudei de emprego recentemente, e tive a oportunidade de ter contato com o SCRUM, que curiosamente segue a fio a teoria que eu vinha acompanhando.</p>
<p>Em resumo, o cliente ou o gerente (que &eacute; chamado de PO &#8211; Project Owner) quer fazer algo, ent&atilde;o ele separa isso em partes, algo como: criar base de dados, modelar classes, criar interface, desenvolver, etc (essas partes s&atilde;o chamadas hist&oacute;rias), ent&atilde;o em uma reuni&atilde;o com a equipe o PO diz o que precisa ser feito.</p>
<p>A equipe analisa cada hist&oacute;ria e o coordenador ou l&iacute;der de projeto (chamado de Scrum Master) solicita que cada membro da equipe diga o qu&atilde;o dificil isso &eacute; de fazer, cada equipe adota uma escala, no meu caso a escala foi a seguinte 0,1/2,2 e 3 para facil, 5 e 8 para dificuldade m&eacute;dia e acima disso dificil. Quando todos apontam a dificuldade que acham ser a da hist&oacute;ria, temos uma discuss&atilde;o entre os extremos, por exemplo, algu&eacute;m sozinho colocou 1/2 e outra pessoa sozinha colocou 3, temos dois pontos de vista extremos e precisamo entender o que levou a essa vis&atilde;o, ap&oacute;s uma r&aacute;pida argumenta&ccedil;&atilde;o das partes, todos os membro apontam a dificuldade novamente, e esse processo se repete at&eacute; chegarmos em valores coerentes.</p>
<p>Se analisarem, dessa forma, voc&ecirc; consegue segmentar as equipes para trabalharem com n&iacute;veis de dificuldades diferentes, tendo assim equipes que solucionam dificuldades de at&eacute; 3 pontos para tarefas f&aacute;ceis, equipes que trabalham com dificuldades acima de 5 pontos e assim por diante.</p>
<p>Ap&oacute;s a distribui&ccedil;&atilde;o de dificuldades entre as hist&oacute;rias, selecionamos as hist&oacute;rias que ser&atilde;o executadas at&eacute; a pr&oacute;xima reuni&atilde;o (isso &eacute; chamado de sprint), as reuni&otilde;es podem ter intervalos diferentes dependendo da equipe, no meu caso temos sprints de 15 dias, ent&atilde;o escolhes as hist&oacute;rias que iremos trabalhar pelos pr&oacute;ximos 15 dias. Podemos saber quantos pontos uma equipe &eacute; capaz de trabalhar por sprint, assim conseguimos medir a produtividade em rela&ccedil;&atilde;o a dificuldade da equipe.</p>
<p>Finalizada a etapa de separa&ccedil;&atilde;o das hist&oacute;rias por dificuldade, reunimos a equipe sem o PO e dividimos as hist&oacute;rias em tarefas. E realizamos um processo semelhante, por&eacute;m indicando quanto tempo leva para realizar cada tarefa e n&atilde;o a dificuldade, assim, cada historia pode ter n tarefas, no entanto, podemos identificar se houve alguma falha no planejamento, caso hist&oacute;rias com dificuldades semelhantes tenham tempos de execu&ccedil;&atilde;o muito diferentes.</p>
<p>&Eacute; um resumo do que vi at&eacute; agora, quando tiver mais experi&ecirc;ncia com isso eu passo mais detalhes.</p>
<p>Para saber mais:</p>
<ul>
<li><a href="http://crisdev.eti.br/metodologias-ageis-de-desenvolvimento.html">Metodologias &aacute;geis de desenvolvimento</a></li>
<li><a href="http://    * http://gcirne.wordpress.com/tag/scrum/" target="_blank" onclick="urchinTracker('/outgoing/http_//gcirne.wordpress.com/tag/scrum/?referer=');">http://gcirne.wordpress.com/tag/scrum/</a></li>
</ul>
<p>&nbsp;<p>Tags BlogBlogs: <a href="http://blogblogs.com.br/tag/scrum" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/scrum?referer=');">scrum</a>, <a href="http://blogblogs.com.br/tag/desenvolvimento+%26aacute%3Bgil" rel="external" target="_Blank" onclick="urchinTracker('/outgoing/blogblogs.com.br/tag/desenvolvimento+_26aacute_3Bgil?referer=');">desenvolvimento &aacute;gil</a></p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/scrum-primeiros-passos.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google developer day 2008</title>
		<link>http://crisdev.eti.br/google-developer-day-2008.html</link>
		<comments>http://crisdev.eti.br/google-developer-day-2008.html#comments</comments>
		<pubDate>Mon, 30 Jun 2008 18:24:05 +0000</pubDate>
		<dc:creator>cristianmedeiros</dc:creator>
				<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://crisdev.eti.br/?p=22</guid>
		<description><![CDATA[&#160;
Para aqueles que conseguiram participar do evento, sintam-se brindados! Diferente do ano passado,&#160; o GDD2008 foi bem mais organizado, mais distribuido em assuntos menores. Desta forma voc&#234; poderia ver uma paletra de uma hora sobre android e na segunda hora ver algo sobre google maps.
Ao todo tivemos aproximadamente 800 desenvolvedores (segundo a organiza&#231;&#227;o do evento) [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Para aqueles que conseguiram participar do evento, sintam-se brindados! Diferente do ano passado,&nbsp; o GDD2008 foi bem mais organizado, mais distribuido em assuntos menores. Desta forma voc&ecirc; poderia ver uma paletra de uma hora sobre android e na segunda hora ver algo sobre google maps.</p>
<p>Ao todo tivemos aproximadamente 800 desenvolvedores (segundo a organiza&ccedil;&atilde;o do evento) e apesar de o WTC n&atilde;o ser nenhum lugar gigantesco conseguiu abrigar todo mundo, t&aacute; certo que os desenvolvedores podiam maneirar no tamanho das mochilas (acho que carregam a casa la dentro) porque atrapalha a circula&ccedil;&atilde;o&#8230; mas tudo bem, com um pouco de civilidade saimos todos vivos.</p>
<p>Eu fui procurando informa&ccedil;&otilde;es sobre a plataforma Android, a apresenta&ccedil;&atilde;o atendeu &agrave;s minhas expectativas&#8230; e achei bem simples a id&eacute;ia de ter um emulador do android para fazer o deploy. Para mim, desenvolver para a plataforma Android &eacute; basicamente construir um aplicativo java, &agrave;queles que j&aacute; est&atilde;o acostumados com java n&atilde;o ter&atilde;o dificuldades em se adaptar.</p>
<p>Depois vi uma sobre open social, mas n&atilde;o me empolgou muito, pois a plataforma ainda n&atilde;o esta dispon&iacute;vel para o Brasil, o que &eacute; uma pena, uma vez que a maior parte dos usu&aacute;rios do orkut se encontram no Brasil.</p>
<p>A camiseta desse ano tamb&eacute;m &eacute; bacana&#8230; menos nerd que a do ano passado&#8230; eo lanchinho da hora do almo&ccedil;o ficou menor&#8230; mas tudo bem, estava tudo &oacute;timo.</p>
]]></content:encoded>
			<wfw:commentRss>http://crisdev.eti.br/google-developer-day-2008.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
