<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Bruno Luz</title>
	<atom:link href="http://brluz.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://brluz.wordpress.com</link>
	<description></description>
	<lastBuildDate>Fri, 06 Jan 2012 19:46:36 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='brluz.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Bruno Luz</title>
		<link>http://brluz.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://brluz.wordpress.com/osd.xml" title="Bruno Luz" />
	<atom:link rel='hub' href='http://brluz.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Filtrar packages no NuGet</title>
		<link>http://brluz.wordpress.com/2012/01/06/filtrar-packages-no-nuget/</link>
		<comments>http://brluz.wordpress.com/2012/01/06/filtrar-packages-no-nuget/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 19:46:34 +0000</pubDate>
		<dc:creator>Bruno Luz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://brluz.wordpress.com/2012/01/06/filtrar-packages-no-nuget/</guid>
		<description><![CDATA[Esta é uma dica rápida. Toda vez que você quiser procurar algum componente pelo Package Manager Console, digite: get-package -listavailable -filter &#8216;palavra-chave&#8217; Serão listados todos os packages que batem com a palavra-chave informada<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=228&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Esta é uma dica rápida.</p>
<p>Toda vez que você quiser procurar algum componente pelo Package Manager Console, digite:</p>
<p><strong>get-package -listavailable -filter &#8216;palavra-chave&#8217;</strong></p>
<p>Serão listados todos os packages que batem com a palavra-chave informada <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/brluz.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/brluz.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/brluz.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/brluz.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/brluz.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/brluz.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/brluz.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/brluz.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/brluz.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/brluz.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/brluz.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/brluz.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/brluz.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/brluz.wordpress.com/228/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=228&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://brluz.wordpress.com/2012/01/06/filtrar-packages-no-nuget/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a986756268f9b2aaa4613735cb01513?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bruno</media:title>
		</media:content>
	</item>
		<item>
		<title>Entendendo Action e Func</title>
		<link>http://brluz.wordpress.com/2010/09/17/entendendo-action-e-func/</link>
		<comments>http://brluz.wordpress.com/2010/09/17/entendendo-action-e-func/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 20:27:05 +0000</pubDate>
		<dc:creator>Bruno Luz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[delegates]]></category>
		<category><![CDATA[func]]></category>

		<guid isPermaLink="false">http://brluz.wordpress.com/?p=177</guid>
		<description><![CDATA[Quem nunca viu algum código parecido que atire a primeira pedra! Simples e fácil de entender! Mas&#8230; E esses métodos OrderBy e ForEach, como que funcionam!? Delegates Pra entender isso, temos que ir lá atrás e entender o que é um delegate. Delegate significa &#8220;Delegar&#8220;, em Português. E delegar tem o sentido de transferir poder. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=177&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Quem nunca viu algum código parecido que atire a primeira pedra!</p>
<p><pre class="brush: csharp;">
Pessoa[] pessoas = PessoaDao.Carrega();
var ordenadoPorNome = pessoas.OrderBy(p =&gt; p.Nome).ToList(); // ordena
pessoasOrdenadas.ForEach((p) =&gt; Console.WriteLine(&quot;Nome: {0}&quot;, p.Nome)); // exibe os nomes ordenadamente
</pre></p>
<p>Simples e fácil de entender!</p>
<p>Mas&#8230; E esses métodos <em>OrderBy</em> e <em>ForEach</em>, como que funcionam!?</p>
<h2>Delegates</h2>
<p><a href="http://brluz.files.wordpress.com/2010/09/delegate-authority.jpg"><img class="alignnone size-full wp-image-185" title="Delegate" src="http://brluz.files.wordpress.com/2010/09/delegate-authority.jpg?w=630" alt=""   /></a></p>
<p>Pra entender isso, temos que ir lá atrás e entender o que é um <em>delegate</em>. Delegate significa &#8220;<em>Delegar</em>&#8220;, em Português. E delegar tem o sentido de transferir poder.</p>
<p>E é exatamente o que um <em>delegate</em> pode fazer em nosso código. Ele pode transferir responsabilidades entre classes ou métodos.</p>
<p>Em programação, um delegate é um <a href="http://en.wikipedia.org/wiki/Delegate_(.NET)">ponteiro para uma função</a>. Com ele é possível guardar referência de métodos armazenada em variáveis. O delegate e o método referenciado devem contem a mesma assinatura. Com <em>delegates</em> é possível fazer com que um método transite entre classes adicionando uma referência de uma determinada função a uma variável <em>delegate</em>. E assim transitar o <em>delegate</em> como uma variável normal, passando um <em>delegate</em> por parâmetro de função, por exemplo.</p>
<h2><em>Action </em>&amp; <em>Func </em>- Abstraindo</h2>
<p><em>Action</em> e <em>Func</em> são tipos específicos de <em>delegates</em>. A principal diferença é que o <em>Action</em> é um delegate que não retorna valor (<em>void</em>), enquanto um <em>Func</em> é um delegate que retorna valor.</p>
<p>Assim como <em>delegates</em> puros, <em>Action</em> e <em>Func</em> aceitam métodos já definidos tanto quanto <a href="http://msdn.microsoft.com/en-us/library/0yw3tz5k.aspx">métodos anônimos</a>.</p>
<h3><em>Action</em></h3>
<p>Criar um delegate do tipo <em>Action </em>é muito simples. Usa-se <em>Generics</em> para definir os parâmetros de entrada da função do <em>delegate</em>. E assim podemos atribuir a referência a um método:</p>
<p><pre class="brush: csharp;">
Action&lt;string, int&gt; algumMetodoQueRecebeStringEInt;
algumMetodoQueRecebeStringEInt = (s, i) =&gt;
{
    Console.WriteLine(&quot;Metódo anônimo que recebe string '{0}' e inteiro {1}&quot;, s, i);
};
</pre></p>
<p>O <em>Action</em> tem uma limitação de, no máximo, 16 parâmetros.</p>
<h3><em>Func</em></h3>
<p><em>Func</em> é o delegate que retorna valor, e o tipo do retorno é definido pelo último <em>Generic</em> na assinatura do delegate.</p>
<p>Isso quer dizer que para definir um <em>Func</em> que receba duas strings e retorne a soma das strings, ele terá que ser definido assim:</p>
<p><pre class="brush: csharp;">
Func&lt;string, string, string&gt; metodo = (a, b) =&gt; { return a + b; };
</pre></p>
<h2>Entendendo o<em> OrderBy</em> &amp; <em>ForEach</em></h2>
<p>Agora que temos o conceito de <em>delegates</em>, <em>Func</em> e <em>Action</em> mais frescos em nossa mente, agora é possível perceber como as funções <em>OrderBy</em> e <em>ForEach</em> apresentadas logo na introdução do post funcionam:</p>
<p><strong><em>ForEach</em>:</strong></p>
<p>Vamos reparar na assinatura do <em>ForEach</em>:</p>
<p><pre class="brush: csharp;">
public void ForEach(Action&lt;T&gt; action)
</pre></p>
<p>E internamente como é implementado (via .NET Reflector):</p>
<p><pre class="brush: csharp;">
public void ForEach(Action&lt;T&gt; action)
{
    if (action == null)
    {
        ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
    }
    for (int i = 0; i &lt; this._size; i++)
    {
        action(this._items[i]);
    }
}
</pre></p>
<p>É simples, o método <em>ForEach </em>é um <a href="http://en.wikipedia.org/wiki/Syntactic_sugar">Syntatic Sugar</a>! Ele é uma forma mais elegante de escrever código, mas internamente o código executado continua sendo um laço <em>for</em>.</p>
<p>Já o <em>OrderBy </em>segue na mesma linha, mas é mais complexo. O tipo de delegate que o <em>OrderBy </em>recebe é um <em>Func</em>. Então internamente o método <em>OrderBy</em> executará o delegate para cada item da lista de sua coleção, assim criando uma nova lista de valores e assim implementando a ordenação.</p>
<p>O assunto pode (e deve) ser estudado mais a fundo, minha intenção foi só dar um arranhão e clarear a mente sobre esses tipos específicos de delegates. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>[]&#8216;s e até a próxima!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/brluz.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/brluz.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/brluz.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/brluz.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/brluz.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/brluz.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/brluz.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/brluz.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/brluz.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/brluz.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/brluz.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/brluz.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/brluz.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/brluz.wordpress.com/177/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=177&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://brluz.wordpress.com/2010/09/17/entendendo-action-e-func/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a986756268f9b2aaa4613735cb01513?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bruno</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/09/delegate-authority.jpg" medium="image">
			<media:title type="html">Delegate</media:title>
		</media:content>
	</item>
		<item>
		<title>Design Patterns – Padrão Observer</title>
		<link>http://brluz.wordpress.com/2010/09/03/design-patterns-%e2%80%93-padrao-observer/</link>
		<comments>http://brluz.wordpress.com/2010/09/03/design-patterns-%e2%80%93-padrao-observer/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 21:10:18 +0000</pubDate>
		<dc:creator>Bruno Luz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Estratégia]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Padrões de Projeto]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Strategy]]></category>

		<guid isPermaLink="false">http://brluz.wordpress.com/?p=140</guid>
		<description><![CDATA[Definição: O padrão Observer define uma dependência um-para-muitos entre os objetos de modo que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente. Ou seja, dentro do padrão Observer existe um objeto principal que tem uma relação com diversos outros, e quando o objeto principal tem uma alteração em [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=140&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_142" class="wp-caption alignleft" style="width: 190px"><a href="http://brluz.files.wordpress.com/2010/09/lupa3.jpg"><img class="size-full wp-image-142" title="lupa" src="http://brluz.files.wordpress.com/2010/09/lupa3.jpg?w=630" alt=""   /></a><p class="wp-caption-text">Estou te observando!</p></div>
<p><strong><em>Definição</em></strong><em>: O padrão Observer define uma dependência um-para-muitos entre os objetos de modo que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente.</em></p>
<p>Ou seja, dentro do padrão Observer existe um objeto principal que tem uma relação com diversos outros, e quando o objeto principal tem uma alteração em seu estado todos os outros objetos relacionados são automaticamente notificados sobre a alteração no objeto principal.</p>
<p>Existem dois atores principais neste padrão:</p>
<p><span style="text-decoration:underline;">Subject</span>: O Subject é o objeto que é observado e envia notificações aos seus observadores.<br />
<span style="text-decoration:underline;">Observer</span>: O Observer é o objeto que fica observando o Subject e realiza uma ação quando é notificado que ocorreram alterações no Subject.</p>
<p><a href="http://brluz.files.wordpress.com/2010/09/observer.png"><img class="alignnone size-full wp-image-143" title="observer" src="http://brluz.files.wordpress.com/2010/09/observer.png?w=630" alt=""   /></a></p>
<h2>Utilizando <em>Observer </em>no<em> .Net Framework</em></h2>
<p>O .Net framework provê duas interfaces para aplicar o padrão Observer:</p>
<ul>
<li><em>IObservable</em> -&gt; é o Subject, o objeto que envia notificações.</li>
<li><em>IObserver</em> -&gt; é o Observer, o objeto que recebe notificações.</li>
</ul>
<p>A interface <em>IObservable</em> pede a implementação de apenas 1 método:</p>
<ul>
<li><strong>Subscribe</strong>: Que é utilizado para fazer a inscrição de um observer ao subject.</li>
</ul>
<p>Já a interface <em>IObserver </em>pede a implementação de 3 métodos:</p>
<ul>
<li><strong>OnNext</strong>: É chamado pelo subject para passar o os novos dados.</li>
<li><strong>OnError</strong>: É chamado quando o subject não consegue passar a informação, notificando que aconteceu algum erro.</li>
<li><strong>OnCompleted: </strong>É chamado quando o subject termina de enviar notificações, assim o observer tem sua assinatura cancelada.<strong> </strong></li>
</ul>
<h3>Exemplo</h3>
<p>Agora que já conhecemos as interfaces e seus métodos, vamos imaginar o seguinte cenário para codificar um exemplo:</p>
<ol>
<li>Existe uma fábrica de refrigerantes.</li>
<li>Existem as lojas, que recebem periodicamente refrigerantes da fábrica.</li>
<li>A loja informa a fabrica que quer começar a receber periodicamente as remessas de refrigerante.</li>
<li>A loja pode cancelar a assinatura que fez com a fábrica, sendo assim não receberá mais os refrigerantes.</li>
</ol>
<p>Já dá para perceber que onde podemos aplicar o Observer Pattern nesta situação, não? <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>A Fabrica será nosso subject, onde ela notificará todas as lojas que estão inscritas sobre novos refrigerantes.<br />
As lojas serão os observers, que inscrevem-se na fábrica e recebem notificações, que nesse caso são os refrigerantes.<br />
E temos o refrigerante, que é o objeto que será transitado entre a fábrica e a loja.</p>
<p>Primeiro vamos ao código mais simples, o código da estrutura Refrigerante:</p>
<p><pre class="brush: csharp;">
class Refrigerante
{
    public string Marca { get; private set; }

    public Refrigerante(string marca)
    {
        this.Marca = marca;
    }
}
</pre></p>
<p>Código da loja, que observa a fábrica de refrigerantes:</p>
<p><pre class="brush: csharp;">
class Loja : IObserver&lt;Refrigerante&gt;
{
    private IDisposable unsubscriber;
    public string Nome { get; private set; }

    public Loja(string nome)
    {
        this.Nome = nome;
    }

    public virtual void Subscribe(IObservable&lt;Refrigerante&gt; fabrica)
    {
        if (fabrica != null)
            unsubscriber = fabrica.Subscribe(this);
    }

    #region IObserver&lt;Refrigerante&gt; Members

    public void OnCompleted()
    {
        Console.WriteLine(&quot;{0} não recebe refrigerantes.&quot;, this.Nome);
        Unsubscribe();
    }

    public void OnError(Exception error)
    {
        Console.WriteLine(&quot;{0} não conseguiu receber o refrigerante corretamente.&quot;, this.Nome);
    }

    public void OnNext(Refrigerante value)
    {
        Console.WriteLine(&quot;{0} recebeu o refrigerante {1}.&quot;, this.Nome, value.Marca);
    }

    #endregion

    public virtual void Unsubscribe()
    {
        unsubscriber.Dispose();
    }
}
</pre></p>
<p>Aqui o código é relativamente simples. Foram implementados os métodos da interface <em>IObserver</em> que estão bem simples, também foram criados os método <em>Subscribe </em>e <em>Unsubscribe</em>, que faz a associação e a desassociação da loja com a fábrica.</p>
<p>Código da fábrica de refrigerantes:</p>
<p><pre class="brush: csharp;">
class FabricaDeRefrigerante : IObservable&lt;Refrigerante&gt;
{
    private List&lt;IObserver&lt;Refrigerante&gt;&gt; lojas;

    public FabricaDeRefrigerante()
    {
        lojas = new List&lt;IObserver&lt;Refrigerante&gt;&gt;();
    }

    #region IObservable&lt;Refrigerante&gt; Members

    IDisposable IObservable&lt;Refrigerante&gt;.Subscribe(IObserver&lt;Refrigerante&gt; loja)
    {
        if (!lojas.Contains(loja))
            lojas.Add(loja);
        return new Unsubscriber(lojas, loja);
    }

    #endregion

    private class Unsubscriber : IDisposable
    {
        private List&lt;IObserver&lt;Refrigerante&gt;&gt; lojas;
        private IObserver&lt;Refrigerante&gt; loja;

        public Unsubscriber(List&lt;IObserver&lt;Refrigerante&gt;&gt; lojas, IObserver&lt;Refrigerante&gt; loja)
        {
            this.lojas = lojas;
            this.loja = loja;
        }

        public void Dispose()
        {
            if (loja != null &amp;&amp; lojas.Contains(loja))
                lojas.Remove(loja);
        }
    }

    public void MandarNovoRefrigerante(Refrigerante refrigerante)
    {
        lojas.ForEach((loja) =&gt; {
            if (refrigerante != null)
                loja.OnNext(refrigerante);
            else
                loja.OnError(new RefrigeranteDesconhecidoException());
        });
    }

    public void FecharFabrica()
    {
        lojas.ForEach((loja) =&gt; loja.OnCompleted());
        lojas.Clear();
    }
}
</pre></p>
<p>O código é relativamente simples. A fábrica guarda uma lista de lojas. Ela também tem as funções de <em>MandarNovoRefrigerante</em> e <em>FecharFabrica</em>, que são auto-explicativas.</p>
<p>A peculiaridade dessa classe é a classe interna a ela: A classe <em>Unsubscriber. </em>Dentro dessa<em> </em>classe existe o código que desassocia a loja da fábrica, quando necessário. Quando alguém faz a associação da fábrica com algum objeto, uma instância de <em>Unsubscriber</em> é retornada ao chamador. Assim, para realizar a desassociação, basta chamar o método <em>Dispose</em> da instância de <em>Unsubscriber</em>.</p>
<p>Agora que já existe a <em>FabricaDeRefrigerante</em>, a <em>Loja</em> e o <em>Refrigerante</em>, vamos por em prática o código!</p>
<p><pre class="brush: csharp;">
class Program
{
    static void Main(string[] args)
    {
        FabricaDeRefrigerante fabrica = new FabricaDeRefrigerante();

        Loja mercado2 = new Loja(&quot;Mercado 1&quot;);
        Loja mercado1 = new Loja(&quot;Mercado 2&quot;);

        mercado1.Subscribe(fabrica);
        mercado2.Subscribe(fabrica);

        fabrica.MandarNovoRefrigerante(new Refrigerante(&quot;Coca-cola&quot;));

        mercado2.Unsubscribe();

        fabrica.MandarNovoRefrigerante(null);
        fabrica.MandarNovoRefrigerante(new Refrigerante(&quot;Pepsi&quot;));

        fabrica.FecharFabrica();

        Console.ReadKey();
    }
}
</pre></p>
<p>E o seu resultado:</p>
<p><img class="alignnone size-full wp-image-148" title="resultado observer" src="http://brluz.files.wordpress.com/2010/09/resultado-observer.png?w=630&#038;h=312" alt="" width="630" height="312" /></p>
<p>E pronto. Já temos o padrão Observer sendo utilizado, e ele é um dos padrões bastante conhecidos no mercado. Uma vantagem de utilizar as interfaces nativas do .Net Framework é que o <a href="http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx">Reactive Extensions</a> da faz uso extensivo do padrão Observer, e as classes que forem criadas utilizando tais interfaces serão compatíveis com Rx (falando nisso, existe um <a href="http://elemarjr.wordpress.com/2010/09/01/reactive-extensions-rxlinq-to-events/">post excelente sobre o reactive extensions</a>).</p>
<h2>Utilizando <em>Observer</em> no Java</h2>
<p>O Java também dá suporte interno ao padrão observer através da <span style="text-decoration:underline;">classe abstrata</span> <em>Observable</em> e da interface <em>Observer</em>. Existe um <a href="http://www.mariosam.com/desenvolvimento/designpatterns/design-patterns-padrao-observer">exemplo legal de implementação este padrão no Java</a>, recomento a leitura.</p>
<p>O código fica mais simples, pois não é necessário programar com <em>Generics</em> e também não há necessidade de criar uma classe que é responsável por desassociar subject e observer.</p>
<p>O problema desse padrão interno no Java é que ao utilizar a classe abstrata <em>Observable</em>, nós ferimos <strong>dois</strong> dos princípios de projeto bastante conhecidos: <a href="http://www.artima.com/lejava/articles/designprinciplesP.html">“Programe para uma interface, e não para uma implementação” e “Dê prioridade à composição em relação à herança”</a>.</p>
<p>Deste modo, ao utilizar o Java para fazer alguma implementação de Observer, nós matamos a herança do subject, pois necessariamente temos que herdar de (em vez de implementar)  <em>Observable</em>. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<h2>.Net Framework vs Java</h2>
<p>O .Net framework provê a implementação do padrão <em>Observer</em> através de interfaces, o que é muito bom. A desvantagem é que o código ganha mais de complexidade, pois temos que implementar manualmente as funções e criar uma classe para fazer a desassociação entre subject e observer. Porém temos total controle do código e temos integrações com outros componentes, como o Rx.</p>
<p>Já o Java torna essa tarefa mais simples, porém ferimos dois princípios de projetos e o nosso subject não pode herdar de nenhuma outra classe.</p>
<p>Bom, é isso, espero que tenham gostado e qualquer coisa podem falar comigo! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Referências:<br />
<a href="http://www.dofactory.com/Patterns/PatternObserver.aspx">http://www.dofactory.com/Patterns/PatternObserver.aspx<br />
</a><a href="http://msdn.microsoft.com/en-us/library/ee817669.aspx">http://msdn.microsoft.com/en-us/library/ee817669.aspx<br />
</a><a href="http://www.abhisheksur.com/2010/08/implementation-of-observer.html">http://www.abhisheksur.com/2010/08/implementation-of-observer.html<br />
</a><a href="http://www.mariosam.com/desenvolvimento/designpatterns/design-patterns-padrao-observer">http://www.mariosam.com/desenvolvimento/designpatterns/design-patterns-padrao-observer<br />
</a><a href="http://msdn.microsoft.com/en-us/library/dd990377.aspx">http://msdn.microsoft.com/en-us/library/dd990377.aspx</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/brluz.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/brluz.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/brluz.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/brluz.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/brluz.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/brluz.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/brluz.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/brluz.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/brluz.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/brluz.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/brluz.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/brluz.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/brluz.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/brluz.wordpress.com/140/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=140&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://brluz.wordpress.com/2010/09/03/design-patterns-%e2%80%93-padrao-observer/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a986756268f9b2aaa4613735cb01513?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bruno</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/09/lupa3.jpg" medium="image">
			<media:title type="html">lupa</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/09/observer.png" medium="image">
			<media:title type="html">observer</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/09/resultado-observer.png" medium="image">
			<media:title type="html">resultado observer</media:title>
		</media:content>
	</item>
		<item>
		<title>Design Patterns &#8211; Strategy Pattern</title>
		<link>http://brluz.wordpress.com/2010/08/31/design-patterns-strategy-pattern/</link>
		<comments>http://brluz.wordpress.com/2010/08/31/design-patterns-strategy-pattern/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 16:00:26 +0000</pubDate>
		<dc:creator>Bruno Luz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Estratégia]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Padrões de Projeto]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Strategy]]></category>

		<guid isPermaLink="false">http://brluz.wordpress.com/?p=110</guid>
		<description><![CDATA[Comecei a ler o livro Head First – Design Patterns para ter uma base mais sólida sobre os tão famosos padrões de padrões de projetos (Design Patterns) e pretendo fazer uma série de posts que explicam os padrões, irei publicando conforme avançar no livro. Padrões de Projetos – Conceito Na engenharia de software, um padrão [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=110&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Comecei a ler o livro <a href="http://oreilly.com/catalog/9780596007126">Head First – Design Patterns</a> para ter uma base mais sólida sobre os tão famosos padrões de padrões de projetos (Design Patterns) e pretendo fazer uma série de posts que explicam os padrões, irei publicando conforme avançar no livro.</p>
<h2>Padrões de Projetos – Conceito</h2>
<p>Na engenharia de software, um padrão de projeto (ou Design Pattern) é uma solução geral reutilizável para problemas comuns no design de software. Um padrão de projeto não é um design finalizado que pode ser transformado diretamente em código. Um padrão de projeto é uma descrição ou um modelo de como resolver um problema que pode ser utilizado em várias diferentes situações (<a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)">tradução livre da Wikipédia</a>).</p>
<p>Ou seja, os padrões de projetos são soluções comuns para problemas também comuns.</p>
<p>Os padrões de projetos são divididos em três categorias: Criacional, Estrutural e Comportamental. O livro <a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612">Design Patterns: Elements of Reusable Object-Oriented Software</a> foi o pontapé inicial onde o grupo conhecido como <a href="http://en.wikipedia.org/wiki/Design_Patterns">Gang of Four (GoF)</a> descreveu uma lista com diversos problemas comuns de design de software e soluções para esses problemas.</p>
<h2>Padrão de Projeto – Strategy (Estratégia)</h2>
<p>O padrão Strategy é um padrão comportamental e sua definição oficial é a seguinte:</p>
<p><em>“Define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis. A estratégia deixa o algoritmo variar independente dos clientes que o utilizam.”</em></p>
<p><strong>Simulação de um problema para aplicar o Strategy:</strong></p>
<p>Vamos imaginar o seguinte cenário: Temos um simulador de corrida, esse simulador tem diversos corredores e cada corredor tem um carro, mas durante a execução do sistema o corredor tem a possibilidade de alterar de carro, que pode ser entre uma Ferrari ou uma McLaren.</p>
<p>Utilizando o padrão Strategy a solução para esse problema fica parecida com este diagrama de classes:<a href="http://brluz.files.wordpress.com/2010/08/strategy-car-class-diagram.png"><img class="alignnone size-full wp-image-111" title="Strategy Class Diagram" src="http://brluz.files.wordpress.com/2010/08/strategy-car-class-diagram.png?w=630" alt=""   /></a></p>
<p>A classe <em>Corredor</em> tem uma dependência da interface <em>ICarroDeCorrid</em>a. As classes <em>Ferrari</em> e <em>McLaren</em> implementam a interface <em>ICarroDeCorrida</em>, sendo que cada uma implementa o método correr de acordo com seu comportamento.</p>
<p>A classe <em>Corredor</em> tem o método MudarCarro qual permite a alteração em tempo de execução do tipo de carro utilizado pelo corredor.</p>
<p><pre class="brush: csharp;">
public interface ICarroDeCorrida
{
    void Correr();
}
</pre></p>
<p><pre class="brush: csharp;">
public class Ferrari : ICarroDeCorrida
{
    public void Correr()
    {
        Console.WriteLine(&quot;Estou Correndo com uma Ferrari!&quot;);
    }
}
</pre></p>
<p><pre class="brush: csharp;">
public class McLaren : ICarroDeCorrida
{
    public void Correr()
    {
        Console.WriteLine(&quot;McLaren agora está correndo!&quot;);
    }
}
</pre></p>
<p><pre class="brush: csharp;">
public class Corredor
{
    private ICarroDeCorrida carroDeCorrida;

    public Corredor(ICarroDeCorrida carroDeCorrida)
    {
        this.carroDeCorrida = carroDeCorrida;
    }

    public void MudarCarro(ICarroDeCorrida carroDeCorrida)
    {
        this.carroDeCorrida = carroDeCorrida;
    }

    public void RealizarCorrida()
    {
        this.carroDeCorrida.Correr();
    }
}
</pre></p>
<p>E assim podemos escrever o código e ver seu comportamento:</p>
<p><pre class="brush: csharp;">
Corredor corredor = new Corredor(new Ferrari());
corredor.RealizarCorrida();
</pre></p>
<p><a href="http://brluz.files.wordpress.com/2010/08/strategy-execute-11.png"><img class="alignnone size-full wp-image-125" title="strategy-execute-1" src="http://brluz.files.wordpress.com/2010/08/strategy-execute-11.png?w=630" alt=""   /></a></p>
<p>O padrão Strategy permite a alteração do comportamento do objeto em tempo de execução:</p>
<p><pre class="brush: csharp;">
Corredor corredor = new Corredor(new Ferrari());
corredor.RealizarCorrida();
corredor.MudarCarro(new McLaren());
corredor.RealizarCorrida();
</pre></p>
<p><a href="http://brluz.files.wordpress.com/2010/08/strategy-execute-2.png"><img class="alignnone size-full wp-image-126" title="strategy-execute-2" src="http://brluz.files.wordpress.com/2010/08/strategy-execute-2.png?w=630" alt=""   /></a></p>
<p>Uma vantagem desse padrão é que ele evita as famosas “Tags” dentro das classes. Uma solução <a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882">não limpa (segundo Robert “Uncle Bob” Martin)</a>, porém comum, é utilizar uma propriedade chamada “TipoDeCarro” dentro da classe, e por meio de if’s/switch’s/whatever fazer a verificação do valor da propriedade e assim executar o código, deste modo aumentando bastante o tamanho do código da classe e dificultando a sua manutenção.</p>
<p>Com o padrão Strategy o código se torna orientado a objetos e não violamos dois princípios do <a href="http://en.wikipedia.org/wiki/Solid_(object-oriented_design)">SOLID</a>: o <a href="http://en.wikipedia.org/wiki/Single_responsibility_principle">Single Responsibility Principle (SRP)</a> e o <a href="http://en.wikipedia.org/wiki/Open/closed_principle">Open-Closed Principle (OCP)</a>.</p>
<p>Bom, já deu pra perceber que a Orientação a Objetos aliada aos Padrões de Projetos é uma forma de se escrever código robusto e limpo, e pretendo aprender mais e mais sobre os outros padrões já conhecidos.</p>
<p>Já li sobre o padrão Obeserver, quem sabe logo menos não sai um post aqui? <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/brluz.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/brluz.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/brluz.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/brluz.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/brluz.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/brluz.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/brluz.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/brluz.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/brluz.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/brluz.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/brluz.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/brluz.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/brluz.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/brluz.wordpress.com/110/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=110&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://brluz.wordpress.com/2010/08/31/design-patterns-strategy-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a986756268f9b2aaa4613735cb01513?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bruno</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/08/strategy-car-class-diagram.png" medium="image">
			<media:title type="html">Strategy Class Diagram</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/08/strategy-execute-11.png" medium="image">
			<media:title type="html">strategy-execute-1</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/08/strategy-execute-2.png" medium="image">
			<media:title type="html">strategy-execute-2</media:title>
		</media:content>
	</item>
		<item>
		<title>TechEd Brasil 2010 &#8211; Eu Vou!</title>
		<link>http://brluz.wordpress.com/2010/08/25/teched-brasil-2010-eu-vou/</link>
		<comments>http://brluz.wordpress.com/2010/08/25/teched-brasil-2010-eu-vou/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 15:19:58 +0000</pubDate>
		<dc:creator>Bruno Luz</dc:creator>
				<category><![CDATA[TechEd]]></category>
		<category><![CDATA[teched brasil]]></category>

		<guid isPermaLink="false">http://brluz.wordpress.com/?p=96</guid>
		<description><![CDATA[Já é possível montar a sua agenda para o TechEd! Montei minha agenda ontem e estou BEM anscioso com o conteúdo das palestras que confirmei minha presença. 13/09: 13:45 - 15:00 Título: ASP.NET MVC para desenvolvedores Web Forms Palestrante (s): Giovanni Bassi, Victor Cavalcante Sala: Cantareira 3 Público: Desenvolvedores / Profissionais de TI 15:30 - 16:45 Título: Teste de software com o Visual Studio [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=96&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Já é possível montar a sua agenda para o TechEd!</p>
<p>Montei minha agenda ontem e estou BEM anscioso com o conteúdo das palestras que confirmei minha presença.</p>
<p>13/09:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="width:95px;">13:45 - 15:00</td>
<td style="width:400px;">Título: ASP.NET MVC para desenvolvedores Web Forms<br />
Palestrante (s): Giovanni Bassi, Victor Cavalcante<br />
Sala: Cantareira 3<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
<tr>
<td style="width:95px;">15:30 - 16:45</td>
<td style="width:400px;">Título: Teste de software com o Visual Studio 2010: Parte 1 de 2<br />
Palestrante (s): Brian Keller, Rodrigo de Carvalho<br />
Sala: Cantareira 4<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
<tr>
<td style="width:95px;">17:15 - 18:30</td>
<td style="width:400px;">Título: Conhecendo Ruby e sua utilidade no mundo .NET<br />
Palestrante (s): Fábio Akita<br />
Sala: Santana 1<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
</tbody>
</table>
<p>14/09:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="width:95px;">09:00 - 10:15</td>
<td style="width:400px;">Título: Criando um cubo no Analysis Services em 50 minutos<br />
Palestrante (s): Alexandre Nardi<br />
Sala: Cantareira 7<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
<tr>
<td style="width:95px;">10:45 - 12:00</td>
<td style="width:400px;">Título: Teste de software com o Visual Studio 2010: Parte 2 de 2<br />
Palestrante (s): Brian Keller, Rodrigo de Carvalho<br />
Sala: Cantareira 4<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
<tr>
<td style="width:95px;">13:45 - 15:00</td>
<td style="width:400px;">Título: ASP.NET MVC 2: O que há de Novo?<br />
Palestrante (s): Giovanni Bassi, Victor Cavalcante<br />
Sala: Cantareira 3<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
<tr>
<td style="width:95px;">15:30 - 16:45</td>
<td style="width:400px;">Título: Implementando Serviços RESTful usando o Microsoft .NET Framework<br />
Palestrante (s): Israel Aece<br />
Sala: Cantareira 5<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
<tr>
<td style="width:95px;">17:15 - 18:30</td>
<td style="width:400px;">Título: Novidades do Windows Communication Foundation (WCF) no NET Framework 4<br />
Palestrante (s): Evilázaro Alves<br />
Sala: Jardim São Paulo<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
</tbody>
</table>
<p>15/09:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="width:95px;">09:00 - 10:15</td>
<td style="width:400px;">Título: Um mergulho no ADO.NET Entity Framework 4<br />
Palestrante (s): Renato Haddad<br />
Sala: Cantareira 5<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
<tr>
<td style="width:95px;">10:45 - 12:00</td>
<td style="width:400px;">Título: Construindo aplicações de internet com Microsoft Silverlight and Microsoft<br />
SharePoint Server 2010<br />
Palestrante (s): Carlos Dietrich, Leandro Lopes<br />
Sala: Cantareira 3<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
<tr>
<td style="width:95px;">13:45 - 15:00</td>
<td style="width:400px;">Título: Discutindo sobre: Linq to Sql, Entity Framework Versus Stored Procedures<br />
Palestrante (s): Luciano Condé<br />
Sala: Cantareira 6<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
<tr>
<td style="width:95px;">15:30 - 16:45</td>
<td style="width:400px;">Título: Paralelismo no .Net 4.0: Patterns, dicas e truques<br />
Palestrante (s): Otavio Pecego Coelho<br />
Sala: Jardim São Paulo<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
<tr>
<td style="width:95px;">17:15 - 18:30</td>
<td style="width:400px;">Título: Explorando as ferramentas de arquitetura do Visual Studio 2010<br />
Palestrante (s): Daniel Oliveira<br />
Sala: Cantareira 5<br />
Público: Desenvolvedores / Profissionais de TI</td>
</tr>
</tbody>
</table>
<p>Só de ver tanta gente fera e conhecida no mundo do desenvolvimento, vai valer a pena!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/brluz.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/brluz.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/brluz.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/brluz.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/brluz.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/brluz.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/brluz.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/brluz.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/brluz.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/brluz.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/brluz.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/brluz.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/brluz.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/brluz.wordpress.com/96/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=96&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://brluz.wordpress.com/2010/08/25/teched-brasil-2010-eu-vou/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a986756268f9b2aaa4613735cb01513?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bruno</media:title>
		</media:content>
	</item>
		<item>
		<title>TDD &#8211; Primeiras impressões</title>
		<link>http://brluz.wordpress.com/2010/08/16/tdd-primeiras-impressoes/</link>
		<comments>http://brluz.wordpress.com/2010/08/16/tdd-primeiras-impressoes/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 15:08:54 +0000</pubDate>
		<dc:creator>Bruno Luz</dc:creator>
				<category><![CDATA[Patterns]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://brluz.wordpress.com/?p=82</guid>
		<description><![CDATA[Depois de tanto ouvir falar sobre TDD nos podcasts do Tecnoretórica, nos podcasts do .Net Architects, nos posts do Vinicius Quaiato, Denis Ferrari e diversos outros, pensei: Acho que está na hora de aprender sobre TDD! O Post do Denis Ferrari sobre TDD para iniciantes foi muito bom para mim, que sempre escutei, mas vi [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=82&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Depois de tanto ouvir falar sobre TDD nos <a href="http://tecnoretorica.com.br/">podcasts do Tecnoretórica</a>, nos <a href="http://podcast.dotnetarchitects.net/">podcasts do .Net Architects</a>, nos posts do <a href="http://viniciusquaiato.com/">Vinicius Quaiato</a>, <a href="http://www.heroisdati.com/">Denis Ferrari</a> e diversos outros, pensei: Acho que está na hora de aprender sobre TDD!</p>
<p>O Post do Denis Ferrari sobre <a href="http://www.heroisdati.com/tdd-para-iniciantes-para-quem-quer-comecar-e-nao-sabe-como/">TDD para iniciantes</a> foi muito bom para mim, que sempre escutei, mas vi pouca implementação de código. Nesse post ele pega um problema e resolve 100% usando TDD.</p>
<p>Resolvi tentar fazer o meu primeiro código em TDD hoje. Eu fiz a implementação do problema do<a href="http://sites.google.com/site/tddproblems/all-problems-1/Integer-stack"> Integer Stack</a>, do <a href="http://sites.google.com/site/tddproblems/">TDD Problems</a>, e desde já pude perceber vantagens que esse tipo de padrão de desenvolvimento nos trás. Ao finalizar o código eu tive a sensação de que o código estava 100% seguro.</p>
<div id="attachment_85" class="wp-caption alignnone" style="width: 438px"><a href="http://brluz.files.wordpress.com/2010/08/tdd-cod-02.png"><img class="size-full wp-image-85" title="TDD Código" src="http://brluz.files.wordpress.com/2010/08/tdd-cod-02.png?w=630" alt="TDD"   /></a><p class="wp-caption-text">TDD</p></div>
<p>Se fosse o caso de uma empresa, imagino o quão valioso seria a utilização de TDD. Eu sempre tive a sensação de insegurança em ter que mexer em código de projetos que estavam parados por um tempo. Na implantação para produção eu fico receoso em que algo que alterei modificasse alguma parte que estava funcionando bem ou que tivesse efeitos colaterais em alguma outra funcionalidade. TDD parece resolver essa lacuna de alterar o código sem ter medo de quebrar alguma parte do sistema que já está funcionando.</p>
<p>Sou um iniciante nessa metodologia e quero praticar mais.</p>
<p><strong>TDD, você ganhou mais um adepto!</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/brluz.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/brluz.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/brluz.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/brluz.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/brluz.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/brluz.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/brluz.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/brluz.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/brluz.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/brluz.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/brluz.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/brluz.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/brluz.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/brluz.wordpress.com/82/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=82&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://brluz.wordpress.com/2010/08/16/tdd-primeiras-impressoes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a986756268f9b2aaa4613735cb01513?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bruno</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/08/tdd-cod-02.png" medium="image">
			<media:title type="html">TDD Código</media:title>
		</media:content>
	</item>
		<item>
		<title>Internacionalização</title>
		<link>http://brluz.wordpress.com/2010/07/28/internacionalizacao/</link>
		<comments>http://brluz.wordpress.com/2010/07/28/internacionalizacao/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 18:09:10 +0000</pubDate>
		<dc:creator>Bruno Luz</dc:creator>
				<category><![CDATA[Globalização]]></category>
		<category><![CDATA[Internacionalização]]></category>
		<category><![CDATA[localização]]></category>

		<guid isPermaLink="false">http://brluz.wordpress.com/?p=60</guid>
		<description><![CDATA[Estudando para tirar a certificação, me deparei com um trecho do livro que comenta a diferença entre Globalization (Globalização) e Localization (Localização). Fiz a tradução livre do trecho do livro, vale a pena saber a diferença entre esses dois conceitos que estão dentro da Internationalization (Quantos &#8220;zation&#8217;s!) &#8220;Globalização: Em alguns países, o formato de se [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=60&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Estudando para tirar a certificação, me deparei com um trecho do livro que comenta a diferença entre <strong>Globalization </strong>(Globalização) e <strong>Localization </strong>(Localização).</p>
<p>Fiz a tradução livre do trecho do livro, vale a pena saber a diferença entre esses dois conceitos que estão dentro da <em>Internationalization</em> (Quantos &#8220;zation&#8217;s!)</p>
<p><em>&#8220;</em><strong><em>Globalização:</em></strong><em> Em alguns países, o formato de se escrever o valor monetário é com um ponto (.) como um separador de milhares e uma vírgula (,) como um separador de decimais, enquanto outros países usam a convenção oposta. Uma aplicação globalizada formata o valor monetário com o separador de milhares e separador de decimais apropriados baseado na configuração cultural atual.</em></p>
<p><strong><em>Localização:</em></strong><em> O título de um formulário é exibido de acordo com o idioma baseado no local qual ele foi implantado. Uma aplicação localizada recupera e exibe um texto baseado na configuração cultural atual”</em>.</p>
<p>Ou seja, globalização é exibir corretamente o formato dos valores em sua aplicação de acordo com a cultura daquele país. Ex: Nos Estados Unidos exibiríamos o valor de <em>1,500.00</em> enquanto que no Brasil exibiríamos o valor de <em>1.500,00</em>.</p>
<p>Já localização se refere a exibir a sua aplicação de acordo com o idioma da região. No Brasil poderíamos exibir a mensagem <em>“Cliente gravado com sucesso!”</em> enquanto nos Estados Unidos a mensagem seria <em>“Client successfully saved!”</em>.</p>
<p>Ao desenvolver aplicações é muito interessante ter em mente esses dois conceitos, pois uma aplicação <em>internacionalizada</em> é melhor aceita entre diferentes culturas e mais accessível para diferentes usuários!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/brluz.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/brluz.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/brluz.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/brluz.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/brluz.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/brluz.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/brluz.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/brluz.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/brluz.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/brluz.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/brluz.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/brluz.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/brluz.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/brluz.wordpress.com/60/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=60&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://brluz.wordpress.com/2010/07/28/internacionalizacao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a986756268f9b2aaa4613735cb01513?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bruno</media:title>
		</media:content>
	</item>
		<item>
		<title>Criando um formulário não-retangular</title>
		<link>http://brluz.wordpress.com/2010/07/02/criando-um-formulario-nao-retangular/</link>
		<comments>http://brluz.wordpress.com/2010/07/02/criando-um-formulario-nao-retangular/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 10:00:04 +0000</pubDate>
		<dc:creator>Bruno Luz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Windows Forms]]></category>

		<guid isPermaLink="false">http://brluz.wordpress.com/?p=44</guid>
		<description><![CDATA[Estudando para a certificação de Windows Forms (eu sei, já existe WPF!) eu me deparei com uma situação qual eu nunca havia pensado em fazer: Criar um formulário não retangular. É possível e muito fácil: A propriedade Region de uma instância da classe Form define a forma em que ela aparece na tela. Para alterar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=44&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Estudando para a certificação de Windows Forms (eu sei, já existe WPF!) eu me deparei com uma situação qual eu nunca havia pensado em fazer: Criar um formulário não retangular.</p>
<p>É possível e muito fácil:</p>
<p>A propriedade <strong>Region</strong> de uma instância da classe <strong>Form</strong> define a forma em que ela aparece na tela. Para alterar a forma de seu formulário, é só valorizar esta propriedade com um novo valor.</p>
<p>Esta atribuição de valor deve acontecer dentro do evento <strong>Load</strong> do formulário, pois a alteração da forma acontece em <em>runtime</em>.</p>
<p>O modo mais fácil de criar um formulário não-retangular é utilizando a classe <strong>GraphicsPath</strong> (System.Drawing.Drawing2D.GraphicsPath). Basta criar uma instância de <strong>GraphicsPath</strong> e adicionar formas à ela. Depois deve-se criar uma instância da classe <strong>Region</strong> (System.Drawing) e passar ela para o valor da propriedade <strong>Region</strong> do formulário.</p>
<p>No exemplo abaixo eu criei um formulário em forma oval:</p>
<p><pre class="brush: csharp;">
private void Form1_Load(object sender, EventArgs e)
{
    GraphicsPath graphics = new GraphicsPath();
    graphics.AddEllipse(0, 0, this.Width, this.Height);
    Region region = new Region(graphics);
    this.Region = region;
}
</pre></p>
<p> E o resultado do código acima:</p>
<p><a href="http://brluz.files.wordpress.com/2010/07/formulariooval.png"><img class="alignnone size-full wp-image-46" title="Formulário Oval" src="http://brluz.files.wordpress.com/2010/07/formulariooval.png?w=630" alt=""   /></a></p>
<p>[]&#8216;s</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/brluz.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/brluz.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/brluz.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/brluz.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/brluz.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/brluz.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/brluz.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/brluz.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/brluz.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/brluz.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/brluz.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/brluz.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/brluz.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/brluz.wordpress.com/44/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=44&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://brluz.wordpress.com/2010/07/02/criando-um-formulario-nao-retangular/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a986756268f9b2aaa4613735cb01513?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bruno</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/07/formulariooval.png" medium="image">
			<media:title type="html">Formulário Oval</media:title>
		</media:content>
	</item>
		<item>
		<title>O segundo post</title>
		<link>http://brluz.wordpress.com/2010/07/01/o-segundo-post/</link>
		<comments>http://brluz.wordpress.com/2010/07/01/o-segundo-post/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 16:29:16 +0000</pubDate>
		<dc:creator>Bruno Luz</dc:creator>
				<category><![CDATA[[Off Topic]]]></category>

		<guid isPermaLink="false">http://brluz.wordpress.com/?p=19</guid>
		<description><![CDATA[Estava pensando em alguma coisa interessante para escrever no meu segundo post. O primeiro foi uma introdução ao blog e então logicamente o segundo post deveria falar sobre algum item do qual me propus a escrever (claro!). Andei pesquisando sobre Dependency Injection, já que é um termo mais avançado sobre Orientação a Objetos e é [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=19&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Estava pensando em alguma coisa interessante para escrever no meu segundo post. O primeiro foi uma introdução ao blog e então logicamente o segundo post deveria falar sobre algum item do qual me propus a escrever (claro!). Andei pesquisando sobre <a href="http://en.wikipedia.org/wiki/Dependency_injection">Dependency Injection</a>, já que é um termo mais avançado sobre Orientação a Objetos e é um assunto que pretendo conhecer mais. </p>
<p>Então navegando pela internet me deparei com o post <a href="http://www.produzindo.net/a-importancia-do-tedio-em-nossas-vidas/">“A importância do tédio em nossas vidas”</a>, no qual traduz para português um outro post: <a href="http://blogs.hbr.org/bregman/2010/06/why-i-returned-my-ipad.html">“Why I Returned my iPad”</a>. Vale a leitura! </p>
<p><a href="http://brluz.files.wordpress.com/2010/07/stevejobs-ipad.jpg"><img class="alignnone size-medium wp-image-20" title="iPad" src="http://brluz.files.wordpress.com/2010/07/stevejobs-ipad.jpg?w=300&#038;h=200" alt="" width="300" height="200" /></a> </p>
<p>Segue a tradução do texto Why I Returned my iPad: </p>
<p><em>“</em><em><strong>Porque eu devolvi meu iPad<br />
</strong>por Peter Bragman (</em><a href="http://blogs.hbr.org/bregman/2010/06/why-i-returned-my-ipad.html"><em>link</em></a><em>)</em> </p>
<p><em>Pouco mais de uma semana após comprar o meu iPad, eu o devolvi para a Apple. Mesmo tendo algumas falhas, o problema não estava exatamente no iPad. O problema estava em mim.</em> </p>
<p><em>Eu gosto de tecnologia, mas eu não sou uma pessoa que compra sempre a primeira versão, o quanto antes, de novos aparelhos e gadgets, eu espero as novas versões para que sejam corrigidas as possíveis falhas de projeto que possam ter passado despercebidas. Eu esperei pelo iPod de segunda geração, esperei pelo iPhone de segunda geração e esperei pelo Macbook Air de segunda geração.</em> </p>
<p><em>Mas o iPad é diferente. Tão elegante, tão legal, tão transformador… E, eu pensei, se ele é tão similar ao iPhone, a maioria das possíveis falhas de projeto que poderiam vir a existir já deveriam estar corrigidas.</em> </p>
<p><em>Assim, pela primeira vez na minha vida, me encontrei esperando por duas horas em uma fila na frente da loja da Apple para adquirir o meu iPad 3G, bem no meio da tarde do dia do seu lançamento.</em> </p>
<p><em>Fiz as configurações iniciais do aparelho na própria loja da Apple porque eu queria ter certeza que eu já poderia começar a usá-lo no momento em que eu o comprasse. E eu o usei bastante. O levava para qualquer lugar que eu fosse. Tão pequeno, tão leve, por que não trazê-lo junto comigo?</em> </p>
<p><em>Nele eu acessava o meu e-mail, escrevia artigos utilizando o aplicativo Pages, assistia a episódios da série Weeds no Netflix, lia notícias, verificava as condições e previsões climáticas, verificava o estado do tráfego, etc. É claro que eu mostrava orgulhosamente a minha nova aquisição a quem demonstrava um mínimo de interesse. (Isso por si só poderia gerar um novo texto. Eu mostrava o iPad 3G para qualquer um simplesmente por possuí-lo, como se fosse uma conquista. Por quê? Eu não criei o iPad, eu simplesmente comprei um!)</em> </p>
<p><em>Não demorou muito para que eu me deparasse com o lado negro desse revolucionário aparelho: ele é de fato maravilhoso.</em> </p>
<p><em>É tudo muito fácil, muito acessível, é rápido, a sua bateria dura muito. Claro que há alguns problemas, mas nada que chame muito a atenção. Na maior parte do tempo, eu conseguia fazer tudo o que eu queria e foi justamente isso que acabou se mostrando um grande problema.</em> </p>
<p><a href="http://brluz.files.wordpress.com/2010/07/ipad.jpg"><em><img class="alignnone size-full wp-image-24" title="iPad" src="http://brluz.files.wordpress.com/2010/07/ipad2_1567432c.jpg?w=630" alt=""   /></em></a> </p>
<p><em>É claro que eu quero assistir a um episódio de Weeds antes de ir dormir. Mas será que eu deveria? É realmente difícil de parar tendo visto apenas um episódio, e duas horas depois, me pego entretido, mas bem cansado. Mas será que eu estou mesmo melhor assim? Ou será que eu estaria melhor tendo sete horas de sono ao invés de apenas cinco?</em> </p>
<p><em>A grande sacada do iPad é que ele é uma espécie de computador acessível em qualquer lugar, a qualquer hora. No metrô, no hall do elevador esperando o dito-cujo chegar, no taxi indo para o aeroporto, etc. Qualquer momento se torna um momento em potencial para se usar o iPad. O iPhone consegue fazer as mesmas coisas, mas não da mesma forma. Quem que quer ver um filme naquela telinha pequena do iPhone?</em> </p>
<p><em>Então, por que o iPad se mostrou um problema? Do jeito que eu falo ele parece super produtivo. De fato é, pois a cada minuto extra eu me encontrava produzindo ou consumindo.</em> </p>
<p><em>Mas algo – mais do que apenas a quantidade de horas que eu durmo, apesar de isso também ser crítico – foi perdido no tempo. Algo valioso demais para se perder.</em> </p>
<p><em>Tédio.</em> </p>
<p><em>Ficar entediado é uma coisa muito importante, um estado de espírito que devemos buscar. Uma vez que ficamos entediados, a nossa mente começa a vagar, buscando alguma coisa excitante, alguma coisa interessante para se estabelecer. E é justamente aí que a criatividade aparece.</em> </p>
<p><em>As minhas melhores idéias vêm à mim quando eu não estou produzindo nada:</em> </p>
<ul>
<li><em>Quando eu estou correndo, mas não estou ouvindo nada no meu iPod;</em></li>
<li><em>Quando eu estou sentado, sem fazer nada, apenas esperando por alguém;</em></li>
<li><em>Quando estou deitado na minha cama esperando que o sono venha;</em></li>
</ul>
<p><em>Esses momentos “perdidos” são vitais.</em> </p>
<p><em>Existem momentos em que nós, mesmo inconscientemente, organizamos as nossas mentes, colocamos sentido nas nossas vidas e ligamos os pontos. Existem momentos ainda em que falamos com nós mesmos e outros que ouvimos. Perder esses momentos, substituí-los com tarefas e eficiência, é um erro. O pior de tudo é que nós não apenas os perdemos, nós os jogamos fora.</em> </p>
<p><em>“Mas isso não é um problema com o iPad”, falou o meu irmão Anthony – ao qual sou compelido a mencionar que está produzindo um filme chamado “Meu Irmão Idiota”. “Isso é um problema seu. Você tem apenas que não usá-lo tanto!”</em> </p>
<p><em>Sim, culpado. O problema estava comigo. Eu não consigo simplesmente não usá-lo. E, infelizmente, ele está sempre ali, disponível! E, depois de ponderar, eu resolvi devolvê-lo. Pronto, problema resolvido.</em> </p>
<p><em>Essa experiência foi bem proveitosa para me ensinar o real valor do tédio. Agora eu estou bem mais consciente, de forma a utilizar melhor esses momentos extras para deixar a minha mente fluir em idéias e pensamentos.</em> </p>
<p><em>Mais ou menos na mesma época que eu devolvi o meu iPad, percebi que a minha filha de oito anos, Isabelle, estava inacreditavelmente ocupada do momento que ela chegava da escola até a hora que ela ia para a cama. Tomar banho, leitura, treino de violão, jantar, dever de casa, ela não parava um momento até eu lhe falar para ir dormir. Uma vez na cama, ela tentava falar comigo, mas eu, preocupado com o pouco sono que ela poderia ter, apressava esse momento e a impelia a dormir logo.</em> </p>
<p><em>Agora nós temos um novo ritual, um que tem se tornado a minha parte favorita do dia. Eu a tenho colocado para dormir 15 minutos mais cedo do que eu a colocava antes. Ela deita na cama, eu deito do lado dela e nós simplesmente conversamos. Ela fala sobre as coisas que aconteceram durante o seu dia, sobre coisas que a preocupam, coisas que ela está curiosa ou apenas sobre os seus pensamentos. Eu a ouço e faço perguntas. Nós rimos, e as nossas mentes simplesmente divagam…”</em> </p>
<hr /> </p>
<p>Concordo 100% com Peter Bragman: são tantas coisas a se fazer que esses momentos importantes de “tédio” acabam sendo deixados de lado, ainda mais nos dias de hoje onde tem informação nova a cada minuto: Twitter, Orkut, Google Reader, Livros, Messenger , E-mail, TV, Video-Game, etc&#8230; </p>
<p>Pelo menos eu consigo ter meus momentos de tédio produtivo, pois, morando em São Paulo, indo e voltando pro trabalho todo dia, é possível ter esses momentos de reflexão.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/brluz.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/brluz.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/brluz.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/brluz.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/brluz.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/brluz.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/brluz.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/brluz.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/brluz.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/brluz.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/brluz.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/brluz.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/brluz.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/brluz.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=19&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://brluz.wordpress.com/2010/07/01/o-segundo-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a986756268f9b2aaa4613735cb01513?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bruno</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/07/stevejobs-ipad.jpg?w=300" medium="image">
			<media:title type="html">iPad</media:title>
		</media:content>

		<media:content url="http://brluz.files.wordpress.com/2010/07/ipad2_1567432c.jpg" medium="image">
			<media:title type="html">iPad</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello World!</title>
		<link>http://brluz.wordpress.com/2010/06/30/hello-world-2/</link>
		<comments>http://brluz.wordpress.com/2010/06/30/hello-world-2/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 19:29:35 +0000</pubDate>
		<dc:creator>Bruno Luz</dc:creator>
				<category><![CDATA[[Off Topic]]]></category>
		<category><![CDATA[hello world]]></category>

		<guid isPermaLink="false">http://brluz.wordpress.com/?p=11</guid>
		<description><![CDATA[Por algumas vezes já tentei ter um blog sobre programação. Agora com o final (suado) da faculdade eu estou tendo tempo para realizar mais projetos pessoais e tempo para estudar o que gosto (seguindo a máxima: a faculdade atrapalha meus estudos!). Pretendo postar aqui sobre novidades do que acontece no mundo da programação dentro da Microsoft e sobre conceitos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=11&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Por algumas vezes já tentei ter um blog sobre programação. Agora com o final (suado) da faculdade eu estou tendo tempo para realizar mais projetos pessoais e tempo para estudar o que gosto (seguindo a máxima: a faculdade atrapalha meus estudos!).</p>
<p>Pretendo postar aqui sobre novidades do que acontece no mundo da programação dentro da Microsoft e sobre conceitos de desenvolvimento de software.</p>
<p>Já vai aqui uma frase que um grande sábio disse:<br />
&#8220;Any fool can write code that a computer can understand.  Good programmers write code that humans can understand.&#8221;</p>
<p>[]&#8216;s</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/brluz.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/brluz.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/brluz.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/brluz.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/brluz.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/brluz.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/brluz.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/brluz.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/brluz.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/brluz.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/brluz.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/brluz.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/brluz.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/brluz.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=brluz.wordpress.com&amp;blog=14426720&amp;post=11&amp;subd=brluz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://brluz.wordpress.com/2010/06/30/hello-world-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3a986756268f9b2aaa4613735cb01513?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Bruno</media:title>
		</media:content>
	</item>
	</channel>
</rss>
