<?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>Juliano Ribeiro</title>
	<atom:link href="http://julianoribeiro.com.br/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://julianoribeiro.com.br/blog</link>
	<description>Development and Design</description>
	<lastBuildDate>Tue, 31 Aug 2010 11:18:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Criando listas com PHP/MySQL</title>
		<link>http://julianoribeiro.com.br/blog/criando-listas-com-phpmysql/</link>
		<comments>http://julianoribeiro.com.br/blog/criando-listas-com-phpmysql/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 01:51:45 +0000</pubDate>
		<dc:creator>Juliano Ribeiro</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Pessoal]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Função]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://julianoribeiro.com.br/blog/?p=362</guid>
		<description><![CDATA[Hoje resolvi variar um pouco. Como estou ajudando um amigo no seu TCC, escrevi para ele uma função bem legal, pelo menos eu achei, depois me falem o que acharam. Eu vou colocar ela aqui em duas etapas. Nessa primeira, vamos criar uma lista, somente passando uma tabela do banco. A assinatura da função vai [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje resolvi variar um pouco. Como estou ajudando um amigo no seu TCC, escrevi para ele uma função bem legal, pelo menos eu achei, depois me falem o que acharam. Eu vou colocar ela aqui em duas etapas. Nessa primeira, vamos criar uma lista, somente passando uma tabela do banco. A assinatura da função vai ficar mais ou menos assim:</p>
<pre class="brush: php;">
&lt;?php
	include_once('conexao.php');
	include('funcoes.php');

	CriarLista('Estado');
?&gt;
</pre>
<p>A conexão é bem simples, faça como quiser.<br />
Já a função, baseia-se na instrução SQL: <strong>SHOW FULL COLUMNS FROM TB_CLIENTE</strong>. Essa instrução retorna uma lista com os campos: <em>Field, Type, Collation, Null, Key, Default, Extra Privileges e Comment</em>. Para nós, nesse momento só interessam Field e Comment. Explico. Pegaremos os campos que retornam nessa SQL e com eles, comporemos a nova SQL com os campos que a primeira retornou, ficou claro?<br />
Nos comments da tabela em questão, eu coloquei a descrição dos campos, tipo o campo <strong>EST_CODIGO</strong> tem o comentário <strong>&#8220;Código&#8221;</strong>.<br />
<span id="more-362"></span><br />
Para usar, eu fiz o trechinho de código abaixo:</p>
<pre class="brush: php;">
		$sql = 'SHOW FULL COLUMNS FROM ' . $tabela; // Crio a string
		$res = mysql_query($sql); // Envia a string para o banco e guarda o retorno
		$sql = 'select '; // Crio a nova SQL
		$estrutura = array(); // Inicializo o array
		$pos = 1; // Inicializa 1ª posição

		echo &quot;&lt;table border='1'&gt;
				&lt;tr&gt;&quot;; // Monta o início da tabela

		while ($lin = mysql_fetch_assoc($res)) {
			echo &quot;&lt;td&gt;&quot;.$lin['Comment'].&quot;&lt;/td&gt;&quot;;
			$estrutura[$pos++] = $lin;
			$sql .= $lin['Field'] . ', ';
		}
		echo &quot;&lt;/tr&gt;&quot;;
		$sql = substr($sql, 0, strlen($sql) - 2);
		$sql .= &quot; from &quot;. $tabela ;
</pre>
<p>Com esse código ai conseguimos compor uma nova SQL, algo como <em>Select EST_CODIGO, EST_NOME from ESTADO</em>. Assim, poderemos fazer a nova consulta como deve ser. Além disso, todo o resultado daquele <em><strong>resource</strong></em> fica armazenado em um array chamado <strong>estrutura</strong>, para consulta posterior.<br />
Com esses dados em mãos, vamos simplesmente fazer a nova consulta no banco e trazer os dados para dentro da tabela. Veja como fica esse trecho:</p>
<pre class="brush: php;">
		$res = mysql_query($sql);
		while ($lin = mysql_fetch_assoc($res)) {
			echo &quot;&lt;tr&gt;&quot;;
			foreach ($estrutura as $campo) {
				echo &quot;&lt;td&gt;&quot;.$lin[$campo['Field']].&quot;&lt;/td&gt;&quot;;
			}
			echo &quot;&lt;/tr&gt;&quot;;
		}
		echo &quot;&lt;/table&gt;&quot;;
</pre>
<p>e assim funciona, e no próximo post eu coloco o arquivo para download e também como paginar o resultado dessa função.</p>
<p>Até mais</p>
]]></content:encoded>
			<wfw:commentRss>http://julianoribeiro.com.br/blog/criando-listas-com-phpmysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Números&#8230;</title>
		<link>http://julianoribeiro.com.br/blog/numeros/</link>
		<comments>http://julianoribeiro.com.br/blog/numeros/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 18:10:27 +0000</pubDate>
		<dc:creator>Juliano Ribeiro</dc:creator>
				<category><![CDATA[Pessoal]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[Número]]></category>
		<category><![CDATA[Tirinha]]></category>

		<guid isPermaLink="false">http://julianoribeiro.com.br/blog/?p=358</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://julianoribeiro.com.br/blog/wp-content/uploads/2010/08/gilbert001.jpg"><img src="http://julianoribeiro.com.br/blog/wp-content/uploads/2010/08/gilbert001.jpg" alt="" title="gilbert001" width="570" height="177" class="aligncenter size-full wp-image-359" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://julianoribeiro.com.br/blog/numeros/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Orientação à Objetos em Delphi (Parte 1 e 1/2)</title>
		<link>http://julianoribeiro.com.br/blog/orientacao-a-objetos-em-delphi-parte-1-e-12/</link>
		<comments>http://julianoribeiro.com.br/blog/orientacao-a-objetos-em-delphi-parte-1-e-12/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 17:16:15 +0000</pubDate>
		<dc:creator>Juliano Ribeiro</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[Encapsulamento]]></category>
		<category><![CDATA[OO]]></category>

		<guid isPermaLink="false">http://julianoribeiro.com.br/blog/?p=337</guid>
		<description><![CDATA[Apesar do povo no twitter querer me massacrar quando digo que o Delphi é uma linguagem (muito boa por sinal), há muito que ele não trata mais de Pascal com uma IDE bonitinha. Mas como eu respondi lá, isso é uma questão comercial, que pouco me importa, afinal, não ganho ou perco um centavo com [...]]]></description>
			<content:encoded><![CDATA[<p>Apesar do povo no twitter querer me massacrar quando digo que o Delphi é uma linguagem (muito boa por sinal), há muito que ele não trata mais de Pascal com uma IDE bonitinha. Mas como eu respondi lá, isso é uma questão comercial, que pouco me importa, afinal, não ganho ou perco um centavo com isso. Quanto a linguagem ser boa, não há dúvidas, com ela eu construi minha casa, estou pagando o carro, os meus treinamentos, a educação do meu filho&#8230;</p>
<p>Piadas à parte, vamos ao ponto, no último post que eu tratei sobre o assunto (Orientação à Objetos) a coisa ficou meio descontextualizada, principalmente por se tratar de uma palestra que fiz aqui na Produtec. Assim, vou tentar simplificar um pouco mais o conceito, sem necessariamente entrar na conversa com o banco.<br />
Primeiro vamos imaginar um problema. Alguém lhe fez a solicitação: </p>
<blockquote><p>Criar uma classe Lampada, que tenha como ser ligada, desligada e possa me responder seu atual estado (ON/OFF). Essa pessoa lhe solicitou também um formulário que interagisse com essa classe, acessando os seus métodos.</p></blockquote>
<p>Então vejamos, temos uma classe mais ou menos como a desenhada abaixo:</p>
<p><a href="http://julianoribeiro.com.br/blog/wp-content/uploads/2010/08/classe_lampada.jpg"><img src="http://julianoribeiro.com.br/blog/wp-content/uploads/2010/08/classe_lampada.jpg" alt="" title="classe_lampada" width="211" height="117" class="aligncenter size-full wp-image-340" /></a><br />
Como vemos, teremos então a classe <strong>Lampada</strong>, que possuirá um atributo privado chamado <strong>acesa</strong> do tipo <strong>boleano</strong> e três métodos públicos bastante simples; ligarLampada() muda o atributo acesa para true, desligarLampada() seta o atributo para false e isLampadaLigada() que retorna o estado do atributo. Até aqui bem simples.<br />
Para a implementação eu vou herdar de TControl, por enquanto isso será suficiente, afinal não quero ter que implementar as coisas mais básicas na mão, como a criação do componente e tal. Isso fica mais ou menos assim:</p>
<pre class="brush: delphi;">
unit uLampada;

interface

uses Controls;

type
  TLampada = class(TControl)
  private
      Facesa: Boolean;
      procedure Setacesa(const Value: Boolean);
      property acesa: Boolean read Facesa write Setacesa;
  public
      procedure LigarLampada;
      procedure DesligarLampada;
      function isLampadaLigada: Boolean;
  end;

implementation

{ TLampada }

procedure TLampada.DesligarLampada;
begin
   acesa := False;
end;

function TLampada.isLampadaLigada: Boolean;
begin
   Result := acesa;
end;

procedure TLampada.LigarLampada;
begin
   acesa := True;
end;

procedure TLampada.Setacesa(const Value: Boolean);
begin
   Facesa := Value;
end;

end.
</pre>
<p>Percebam aqui algumas particularidades do Delphi. Pra começar, os métodos tem um <em>&#8220;tipo&#8221;</em>. Métodos que necessitam retornar valores são declarados como <strong>function</strong> e os que não precisam retornar valor, portanto são somente procedimentos, são assim chamados <strong>procedure</strong>. Ambos podem receber parâmetros, mas no nosso exemplo não tivemos necessidade. A única diferença é mesmo o retorno.</p>
<p>Para declarar a propriedade <strong>acesa</strong>, eu simplesmente digitei <strong>property acesa:boolean;</strong> e pressionei o atalho <strong>Ctrl+Shift+C</strong>. Isso nos leva a outro ponto legal de destacar que é o encapsulamento. Veja como ficou o código:</p>
<pre class="brush: delphi;">
  private
      Facesa: Boolean;
      procedure Setacesa(const Value: Boolean);
      property acesa: Boolean read Facesa write Setacesa;
</pre>
<p>Assim, na prática, o valor será gravado em Facesa (o &#8220;F&#8221; é padrão do Delphi, não pergunte). Como se percebe ele completou a linha com as cláusulas read e write, determinado assim o Getter e o Setter da propriedade acesa. Portanto quando uma chamada um outro objeto acessar a propriedade acesa, a classe irá ler o valor da variável Facesa e na hora de atribuir o valor, o procedimento <strong>Setacesa(<em>const </em>Value: Boolean);</strong>.</p>
<blockquote><p>A cláusula <strong>const </strong>antes do parâmetro indica que o mesmo não pode ser alterado no corpo do procedimento. Ele pode ser atribuído normalmente na chamada.</p></blockquote>
<p>Com o procedimento SetAcesa podemos colocar quaisquer tratamentos que se fizerem necessários. Mas isso é assunto para outro post.</p>
<p>Para a aplicação rodar como pedido, devemos criar um formulário que interaja com um objeto da classe criada. Vou não criar muita firula aqui, serão apenas 3 botões, Ligar, Desligar e Status.</p>
<p><a href="http://julianoribeiro.com.br/blog/wp-content/uploads/2010/08/frmInterruptor.jpg"><img src="http://julianoribeiro.com.br/blog/wp-content/uploads/2010/08/frmInterruptor.jpg" alt="" title="frmInterruptor" width="282" height="78" class="aligncenter size-full wp-image-355" /></a></p>
<p>Aqui fica mais clara ainda a simplicidade desse sistema. Basta criar uma instância da classe TLampada e fazer com que os botões acessem os seus métodos. Veja como ficou simples.</p>
<pre class="brush: delphi;">unit uInterruptor;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, uLampada;

type
  TfrmInterruptor = class(TForm)
    btnLigar: TButton;
    btnDesligar: TButton;
    btnStatus: TButton;
    procedure btnStatusClick(Sender: TObject);
    procedure btnDesligarClick(Sender: TObject);
    procedure btnLigarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    MinhaLampada: TLampada;
  public
  end;

var
  frmInterruptor: TfrmInterruptor;

implementation

{$R *.dfm}

procedure TfrmInterruptor.btnDesligarClick(Sender: TObject);
begin
   MinhaLampada.DesligarLampada;
end;

procedure TfrmInterruptor.btnLigarClick(Sender: TObject);
begin
   MinhaLampada.LigarLampada;
end;

procedure TfrmInterruptor.btnStatusClick(Sender: TObject);
var
   cMsg: String;
begin
   cMsg := 'A lâmpada ';

   if not MinhaLampada.isLampadaLigada then
      cMsg := cMsg + 'não ';

   cMsg := cMsg + 'está ligada.';
   ShowMessage(cMsg);
end;

procedure TfrmInterruptor.FormCreate(Sender: TObject);
begin
   MinhaLampada := TLampada.Create(Self);
end;

end.
</pre>
<p>A única dica é criar a MinhaLampada na criação do formulário. Não preciso me preocupar com dispor dela, pois ela foi criada &#8220;afiliada&#8221; ao form, portanto quando um for para o vinagre o outro vai junto.</p>
<p>Bom pessoal, agora que desaceleramos e começamos de maneira mais básica acho que consegui isolar um pouco mais os conceitos. Acredito que todos entendem que temos uma classe TLampada, com atributos privados, com métodos públicos que nos permitem controlar a lâmpada. Esclarecemos também que o que se manipula posteriormente é a instancia, o objeto MinhaLampada, não a classe. E podemos ter quantas instancias da Lampada criadas dentro da nossa aplicação.</p>
<p>No próximo post sobre o assunto vamos criar um serviço que controle a &#8220;energia&#8221; do exemplo. Até lá.</p>
]]></content:encoded>
			<wfw:commentRss>http://julianoribeiro.com.br/blog/orientacao-a-objetos-em-delphi-parte-1-e-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Executando scripts via Delphi</title>
		<link>http://julianoribeiro.com.br/blog/executando-scripts-via-delphi/</link>
		<comments>http://julianoribeiro.com.br/blog/executando-scripts-via-delphi/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 14:24:09 +0000</pubDate>
		<dc:creator>Juliano Ribeiro</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[ErrorCode]]></category>
		<category><![CDATA[Interbase]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[TMemo]]></category>
		<category><![CDATA[TSQLConnection]]></category>

		<guid isPermaLink="false">http://julianoribeiro.com.br/blog/?p=325</guid>
		<description><![CDATA[Já me ocorreu necessidade de rodar alguns scripts simples, para dar manutenção em clientes. A procedure abaixo coleta o conteúdo de um TMemo e envia para banco executar. Qualquer ErrorCode maior que zero indica que houve uma mensagem de retorno negativa. Infelizmente não tenho essa tabela de códigos disponível. procedure TForm1.ExecutaScript; var ErrorCode: Integer; begin [...]]]></description>
			<content:encoded><![CDATA[<p>Já me ocorreu necessidade de rodar alguns <strong>scripts </strong>simples, para dar manutenção em clientes. A <strong>procedure </strong>abaixo coleta o conteúdo de um <strong>TMemo </strong>e envia para banco executar. Qualquer <strong>ErrorCode </strong>maior que zero indica que houve uma mensagem de retorno negativa. Infelizmente não tenho essa tabela de códigos disponível.</p>
<pre class="brush: delphi;">
procedure TForm1.ExecutaScript;
var
  ErrorCode: Integer;
begin
   try
      ErrorCode := Conexao.ExecuteDirect(MemoSQL.Text);
      // Conexao é um TSQLConnection já conectado ao banco.

      if ErrorCode = 0 then
          ShowMessage('Script rodado com sucesso');

      {Se retornar diferente de &quot;0&quot; é porque algo de errado aconteceu}
      if ErrorCode &lt;&gt; 0 then
         raise Exception.Create( 'Error: code = ' + IntToStr( ErrorCode ) )

   except
      on E: Exception do
         ShowMessage( E.Message );
   end
end;
</pre>
<p>Só testei em <strong>Oracle</strong>, mas não vejo motivos para não rodar em <strong>Interbase</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://julianoribeiro.com.br/blog/executando-scripts-via-delphi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Porque não programamos em casa?</title>
		<link>http://julianoribeiro.com.br/blog/porque-nao-programamos-em-casa/</link>
		<comments>http://julianoribeiro.com.br/blog/porque-nao-programamos-em-casa/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 13:37:33 +0000</pubDate>
		<dc:creator>Juliano Ribeiro</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Cotidiano]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://julianoribeiro.com.br/blog/?p=321</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://julianoribeiro.com.br/blog/wp-content/uploads/2010/08/tirinha1369.gif"><img class="aligncenter size-full wp-image-320" title="tirinha1369" src="http://julianoribeiro.com.br/blog/wp-content/uploads/2010/08/tirinha1369.gif" alt="" width="509" height="162" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://julianoribeiro.com.br/blog/porque-nao-programamos-em-casa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tratando mensagem MaskEdit</title>
		<link>http://julianoribeiro.com.br/blog/tratando-mensagem-maskedit/</link>
		<comments>http://julianoribeiro.com.br/blog/tratando-mensagem-maskedit/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 19:06:24 +0000</pubDate>
		<dc:creator>Juliano Ribeiro</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Máscara]]></category>
		<category><![CDATA[TMaskEdit]]></category>

		<guid isPermaLink="false">http://julianoribeiro.com.br/blog/?p=311</guid>
		<description><![CDATA[Aconteceu de eu precisar tratar uma mensagem no TMaskEdit e minha memória idosa não se lembrar de como fazê-lo. Para que isso não ocorra mais e caso alguém tenha a mesma dúvida, deixo aqui registrada a solução. Hoje, o componente em questão, estava com a máscara &#8216;!00:00:00;1;_&#8217; o que obriga o que as posições marcadas [...]]]></description>
			<content:encoded><![CDATA[<p>Aconteceu de eu precisar tratar uma mensagem no <strong>TMaskEdit </strong>e minha memória idosa não se lembrar de como fazê-lo. Para que isso não ocorra mais e caso alguém tenha a mesma dúvida, deixo aqui registrada a solução.</p>
<p>Hoje, o componente em questão, estava com a máscara<strong> &#8216;!00:00:00;1;_&#8217; </strong>o que obriga o que as posições marcadas pelo 0 sejam preenchidas. Por mais bobo que seja, basta trocar o 0 por 9 e fazer o tratamento no evento que mais lhe convier, no meu caso no <strong>OnExit </strong>do mesmo, como se segue:<br />
<span id="more-311"></span></p>
<pre class="brush: delphi;">
procedure TFrmCadFichaOper.edTempoExit(Sender: TObject);
var
tTemp: TDateTime;
begin
try
tTemp := StrToTime(edTempo.Text);
except
MsgAtencao('Formato de tempo inválido, preencha corretamente.');

if (edTempo.CanFocus) then
edTempo.SetFocus;
end;
end; </pre>
<p>No final a máscara ficou assim: <strong>&#8216;!99:99:99;1;_&#8217;</strong>.</p>
<p>Para quem riu da minha velha memória, isso eu vi em 1997 na <strong>revista Clube Delphi</strong> e vou transcrever o artigo todo aqui:</p>
<p>A propriedade EditMask é uma variável do tipo string que define a máscara que limita os dados que podem ser digitados num componente do tipo EditMask ou em um campo de um registro de um Banco de Dados. A máscara limita os caracteres considerados válidos a serem digitados pelo usuário.</p>
<p>Uma máscara consiste de três campos separados por ponto-e-vírgula. O primeiro campo é a máscara propriamente dita, o segundo campo consiste num caracter que define se os caracteres ou máscara devem ser salvos como parte dos dados. O terceiro define o caracter usado para representar os espaços em branco na máscara.</p>
<ul>
<li>! &#8211; Se um ! aparecer na máscara, caracteres em branco não são armazenados como dados.</li>
<li>&gt; &#8211; Se um &gt; aparecer na máscara, todos os caracteres seguintes estarão em letras maiúsculas, até que seja encontrado um caractere igual a &lt;.</li>
<li>&lt; &#8211; Se um &lt; aparecer na máscara, todos os caracteres seguintes estarão em letras maiúsculas, até que seja encontrado um caractere igual a &gt;.</li>
<li>&lt;&gt; &#8211; Este sinal significa que as letras maiúsculas e minúsculas serão armazenadas como digitadas pelo usuário.</li>
<li>\ &#8211; Os caracteres que seguem este sinal serão tratados como literais.</li>
<li>L &#8211; Apenas caracteres alfabéticos (a-z e A-Z) sejam aceitos nessa posição.</li>
<li>l &#8211; Apenas caracteres alfabéticos (a-z e A-Z) sejam aceitos nessa posição, mas aceita que sejam omitidos.</li>
<li>A &#8211; Apenas caracteres alfanuméricos (0-9, a-z e A-Z) sejam aceitos nessa posição.</li>
<li>a &#8211; Apenas caracteres alfanuméricos (0-9, a-z e A-Z) sejam aceitos nessa posição, mas aceita que sejam omitidos.</li>
<li>C &#8211; Este caractere faz com que quaisquer caracteres sejam aceitos nesta posição.</li>
<li>c &#8211; Este caractere faz com que quaisquer caracteres sejam aceitos nesta posição, mas aceita que sejam omitidos.</li>
<li>0 &#8211; Apenas caracteres numéricos (0-9) sejam aceitos nessa posição.</li>
<li>9 &#8211; Apenas caracteres numéricos (0-9) sejam aceitos nessa posição, mas aceita que sejam omitidos.</li>
<li># &#8211; Apenas caracteres numéricos (0-9) e sinais de mais (+) ou menos(-) sejam aceitos nessa posição, mas aceita que sejam omitidos.</li>
<li>: &#8211; Este caractere (dois pontos) é usado para separar horas, minutos e segundos em dados horários. Se outro caractere separador de horas, minutos e segundos é definido nos atributos internacionais do Painel de Controle do sistema, este caractere será usado ao invés dos dois pontos.</li>
<li>/ &#8211; É usado para separar meses, dias e anos em dados de datas. Se outro caractere separador de meses, dias e anos é definido nos atributos internacionais do Painel de Controle do sistema, este caractere será usado ao invés do caractere /.</li>
<li>; &#8211; O ponto-e-vírgula é usado para separar máscaras.</li>
<li>_ &#8211; O caractere _ insere espaços em branco na caixa de edição.</li>
</ul>
<p>Embora essa dica pareça muito boba, ajuda muito lembrar dessas coisas no momento de apuro.</p>
]]></content:encoded>
			<wfw:commentRss>http://julianoribeiro.com.br/blog/tratando-mensagem-maskedit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delphi orientado à objetos &#8211; parte 1</title>
		<link>http://julianoribeiro.com.br/blog/delphi-orientado-a-objetos-parte-01/</link>
		<comments>http://julianoribeiro.com.br/blog/delphi-orientado-a-objetos-parte-01/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 13:47:20 +0000</pubDate>
		<dc:creator>Juliano Ribeiro</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Artigo]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://julianoribeiro.com.br/blog/?p=293</guid>
		<description><![CDATA[Já tem um bom tempo que programo com Delphi. E sempre ouvi críticas pesadíssimas sobre o quanto a linguagem é ruim. Eu sempre acreditei que existiram sempre programadores ruins e que os programas saiam ruins, o que gerou essa impressão negativa, bem como os vários problemas que a Borland (fabricante do Delphi, agora CodeGear) impôs [...]]]></description>
			<content:encoded><![CDATA[<p>Já tem um bom tempo que programo com Delphi. E sempre ouvi críticas pesadíssimas sobre o quanto a linguagem é ruim. Eu sempre acreditei que existiram sempre programadores ruins e que os programas saiam ruins, o que gerou essa impressão negativa, bem como os vários problemas que a <strong>Borland </strong>(fabricante do Delphi, agora <strong>CodeGear</strong>) impôs nas mudanças de versão. Assim, resolvi desmistificar essa coisa de que é impossível programar orientado à objetos usando o Delphi.</p>
<p>Segue o material do nosso último treinamento, sobre como usar o Delphi, orientado à objetos.<br />
Embora pareça que estamos trabalhando com OO desde sempre, afinal instanciamos objetos baseados em classes, isso não é inteiramente verdade.<br />
Como me disse um professor certa vez: <em>&#8220;Seu sistema é orientado à objetos? Ótimo. Me mostre a sua classe NotaFiscalSaída.&#8221;</em></p>
<p>Assim achei por bem usar um exemplo bem simples, estados e cidades para mostrar o poder que o Delphi tem e de quebra demonstrar que o que está errada é a maneira como programamos e não a linguagem que usamos, seja ela qual for.<br />
<span id="more-293"></span><br />
Primeiramente, começamos com alguns paralelos. No Delphi, para criarmos uma classe, precisamos cria-la como um componente, para mais tarde, criar instancias dele. Usando o <strong>Delphi 2006</strong>, eu vou em <em><strong>File > New > Package</strong></em>. Então no Project Manager eu clico sobre o pacote com o botão direito e escolho <em><strong>Add New > Other&#8230;</strong></em></p>
<p>A janela que se abrirá me dá várias opções, a que vamos usar está em<em> <strong>Delphi Projects > Delphi Files > Component</strong></em>. No Wizard seguinte escolhemos de qual componente o nosso irá herdar suas características (não vou explicar herança aqui). Nesse momento escolheremos <strong>TComponent</strong>, para pegar somente o mínimo necessário. Na próxima tela, escolha o nome do componente em C<strong>lass Name</strong>, para nós será TCidade (o &#8220;T&#8221; é padrão do Delphi, use sem questionar). Escolha a Pallete Page que deseja ou digite uma nova, lembre que esse campo é Case Sensitive, portanto atenção ao digitar. Preencha os demais campos se precisar.</p>
<p>A classe cidade:</p>
<pre class="brush: delphi;">
unit cidade;

interface

uses
  SysUtils, Classes, Estado;

type
  TCidade = class(TComponent)
  private
    Fcid_nome: string;
    Fcid_codigo: integer;
    Festado: TEstado;
    procedure Setcid_codigo(const Value: integer);
    procedure Setcid_nome(const Value: string);
    procedure Setestado(const Value: TEstado);
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    property cid_codigo: integer read Fcid_codigo write Setcid_codigo;
    property cid_nome: string read Fcid_nome write Setcid_nome;
    property estado: TEstado read Festado write Setestado;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Objetos Produtec', [TCidade]);
end;

{ TCidade }

procedure TCidade.Setcid_codigo(const Value: integer);
begin
  Fcid_codigo := Value;
end;

procedure TCidade.Setcid_nome(const Value: string);
begin
  Fcid_nome := Value;
end;

procedure TCidade.Setestado(const Value: TEstado);
begin
  Festado := Value;
end;

end.</pre>
<p>Vamos falar um pouco da classe cidade. Nela eu coloquei os principais atributos de uma cidade, somente para exemplo. Percebam que os mesmos foram criados baseado na seguinte estrutura: </p>
<pre class="brush: delphi;">
private
    Fcid_nome: string;
published
    property cid_nome: string read Fcid_nome write Setcid_nome;
</pre>
<p>(&#8230;)</p>
<pre class="brush: delphi;">
procedure TCidade.Setcid_nome(const Value: string);
begin
  Fcid_nome := Value;
end;
</pre>
<p>Traduzindo, teremos uma propriedade com o nome cid_nome, do tipo string (notem que sem tamanho definido) que lê o valor para uma variável Fcid_nome e grava através de uma procedure chamada como Setcid_nome. Ótimo, mas o que ganhamos com isso? Para que esconder o real valor de uma variável ao invés de simplesmente torná-la pública? E para que criar um procedimento para atribuir o valor, se a mudança da visibilidade já resolveria? Parece tudo uma grande perda de tempo, mas é um foco na segurança e no reuso.<br />
Imaginem que em determinado momento, nós precisaremos delimitar o tamanho da cidade para o máximo de caracteres que existem no banco de dados, que para o nosso exemplo é de 60 caracteres. Alterando o procedimento SetCid_Nome todo, eu disse TODO, o sistema passa a respeitar a nova regra, sem precisar avisar a nenhuma outra parte do sistema que isso aconteceu. Vejam como ficaria: </p>
<pre class="brush: delphi;">
procedure TCidade.Setcid_nome(const Value: string);
begin
   if Length(Value) &lt; 60 then
      Fcid_nome := Value;
end;
</pre>
<p>Viram que simples? Poderíamos melhorar ainda, criando uma mensagem de erro (exceção) que poderia ser tratada pela tela que realizou a chamada ou simplesmente exibida diretamente em tela. Algo mais ou menos assim: </p>
<pre class="brush: delphi;">
procedure TCidade.Setcid_nome(const Value: string);
begin
   if Length(Value) &lt; 60 then
      Fcid_nome := Value
   else
      raise Exception.Create('O nome da cidade não pode conter mais do que 60 caracteres.');
end;
</pre>
<p>Várias validações ou procedimentos poderiam ser feitos no momento em que a propriedade é atribuída, como preencher uma outra propriedade, carregar outros componentes em tela, enfim, o limite fica por conta da necessidade do programador.<br />
Se eu não disse antes, o nome desse método chama-se <a href="http://pt.wikipedia.org/wiki/Encapsulamento">encapsulamento</a>, pois os atributos ficam protegidos (encapsulados) em métodos que lêem e escrevem nas variáveis.<br />
Isso é meio caminho para um estereótipo usado em UML chamado JavaBean, que os meninos que mexem com Java devem conhecer bem.</p>
]]></content:encoded>
			<wfw:commentRss>http://julianoribeiro.com.br/blog/delphi-orientado-a-objetos-parte-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Foco na solução?</title>
		<link>http://julianoribeiro.com.br/blog/foco-na-solucao/</link>
		<comments>http://julianoribeiro.com.br/blog/foco-na-solucao/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 13:28:10 +0000</pubDate>
		<dc:creator>Juliano Ribeiro</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Pessoal]]></category>
		<category><![CDATA[Artigo]]></category>

		<guid isPermaLink="false">http://julianoribeiro.com.br/blog/?p=289</guid>
		<description><![CDATA[Um paciente vai num consultório psicológico e diz pro doutor: - Toda vez que estou na cama, acho que tem alguém embaixo. Aí eu vou embaixo da cama e acho que tem alguém em cima. Pra baixo, pra  cima, pra baixo, pra cima. Estou ficando maluco! - Deixe-me tratar de você durante dois anos. -diz [...]]]></description>
			<content:encoded><![CDATA[<p>Um paciente vai num consultório psicológico e diz pro doutor:<br />
- Toda vez que estou na cama, acho que tem alguém embaixo.<br />
Aí eu vou embaixo da cama e acho que tem alguém em cima. Pra baixo, pra  cima, pra baixo, pra cima.<br />
Estou ficando maluco!<br />
- Deixe-me tratar de você durante dois anos. -diz o psicólogo.<br />
- Venha três vezes por semana, e eu curo este problema.<br />
- E quanto o senhor cobra? &#8211; pergunta o paciente.<br />
- R$ 120,00 por sessão &#8211; responde o psicólogo.<br />
- Bem, eu vou pensar &#8211; conclui o sujeito. Passados seis meses, eles se encontram na rua.<br />
- Por que você não me procurou mais? &#8211; pergunta o psicólogo.<br />
- A 120 paus a consulta, três vezes por semana, dois anos, ia ficar caro  demais, ai um sujeito num bar me curou por 10 reais.<br />
- Ah é? Como? &#8211; pergunta o psicólogo.<br />
O sujeito responde:<br />
- Por R$ 10,00 ele cortou os pés da cama&#8230;<br />
Muitas vezes o problema é sério, mas a solução pode ser muito simples!</p>
<p>HÁ GRANDE DIFERENÇA ENTRE FOCO NO PROBLEMA E FOCO NA SOLUÇÃO!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://julianoribeiro.com.br/blog/foco-na-solucao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ITConf</title>
		<link>http://julianoribeiro.com.br/blog/itconf/</link>
		<comments>http://julianoribeiro.com.br/blog/itconf/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 10:29:22 +0000</pubDate>
		<dc:creator>Juliano Ribeiro</dc:creator>
				<category><![CDATA[Pessoal]]></category>

		<guid isPermaLink="false">http://julianoribeiro.com.br/blog/?p=282</guid>
		<description><![CDATA[Olá moçada, sei que ando meio abandonando esse espaço, mas como as responsabilidades só estão que aumentam a atualização aqui fica cada vez menor. O meu amigo, Professor Burnes, montou um evento super legal, o IT Conf. Vai ser um ciclo de palestras aqui em Maringá com algumas cabecinhas bem interessantes, como Ricardo Piologo (Mundo [...]]]></description>
			<content:encoded><![CDATA[<p>Olá moçada, sei que ando meio abandonando esse espaço, mas como as responsabilidades só estão que aumentam a atualização aqui fica cada vez menor.</p>
<p>O meu amigo, <a title="Site do Professor Burnes" href="http://www.professorburnes.com/" target="_blank">Professor Burnes</a>, montou um evento super legal, o <a title="Site do Evento" href="http://itconf.com.br/" target="_blank">IT Conf</a>. Vai ser um ciclo de palestras aqui em Maringá com algumas cabecinhas bem interessantes, como Ricardo Piologo (Mundo Canibal) e Rodrigo Fernandes (Jacaré Banguela).</p>
<div id="attachment_281" class="wp-caption aligncenter" style="width: 543px"><img class="size-large wp-image-281   " title="itconf" src="http://julianoribeiro.com.br/blog/wp-content/uploads/2009/10/itconf-731x1024.jpg" alt="IT Conf" width="533" height="747" /><p class="wp-caption-text">IT Conf</p></div>
<p>As inscrições estão abertas no site do evento. Vou tentar conseguir uns convites extras e sortear pra galera aqui.</p>
<p>Acompanhem por aqui ou pelo twitter. Em breve vou divulgar como vai ser o sorteio.</p>
<p>PS: o evento tem o patrocínio da <a title="W3Host Hospedagem com conteúdo" href="http://www.w3host.com.br" target="_blank">W3Hos</a>t e da<a title="W3Tutor Desenvolvimento Criativo" href="http://www.w3tutor.com.br" target="_blank"> W3Tutor</a></p>
]]></content:encoded>
			<wfw:commentRss>http://julianoribeiro.com.br/blog/itconf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Heróis de Verdade</title>
		<link>http://julianoribeiro.com.br/blog/herois-de-verdade/</link>
		<comments>http://julianoribeiro.com.br/blog/herois-de-verdade/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 18:25:31 +0000</pubDate>
		<dc:creator>Juliano Ribeiro</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Pessoal]]></category>

		<guid isPermaLink="false">http://julianoribeiro.com.br/blog/?p=277</guid>
		<description><![CDATA[A revista ISTO É publicou esta entrevista de Camilo Vannuchi. O entrevistado é Roberto Shinyashiki, médico psiquiatra, com Pós-Graduação em administração de empresas pela USP, consultor organizacional e conferencista de renome nacional e internacional. Em &#8217;Heróis de Verdade&#8217;, o escritor combate a supervalorização das aparências, diz que falta ao Brasil competência, e não auto-estima. ISTO É - Quem são os heróis [...]]]></description>
			<content:encoded><![CDATA[<p>A revista <strong>ISTO É</strong> publicou esta entrevista de <em>Camilo Vannuchi</em>. O entrevistado é <strong>Roberto Shinyashiki</strong>, médico psiquiatra, com Pós-Graduação em administração de empresas pela USP, consultor organizacional e conferencista de renome nacional e internacional.</p>
<p>Em &#8217;Heróis de Verdade&#8217;, o escritor combate a supervalorização das aparências, diz que falta ao Brasil <strong>competência,</strong> e não auto-estima.</p>
<p><span id="more-277"></span></p>
<p>ISTO É - Quem são os heróis de verdade?</p>
<p>Roberto Shinyashiki &#8212; Nossa sociedade ensina que, para ser uma pessoa de sucesso, você precisa ser diretor de uma multinacional, ter carro importado, viajar de primeira classe.<br />
O mundo define que poucas pessoas deram certo.<br />
Isso é uma loucura. Para cada diretor de empresa, há milhares de funcionários que não chegaram a ser gerentes.<br />
E essas pessoas são tratadas como uma multidão de fracassados.<br />
Quando olha para a própria vida, a maioria se convence de que não valeu à pena, porque não conseguiu ter o carro, nem a casa maravilhosa.<br />
Para mim, é importante que o filho da moça que trabalha na minha casa, possa se orgulhar da mãe.<br />
O mundo precisa de pessoas mais simples e transparentes.<br />
Heróis de verdade são aqueles que trabalham para realizar seus projetos de vida, e não para impressionar os outros.<br />
São pessoas que sabem pedir desculpas e admitiram que erraram.</p>
<p>ISTO É -O Sr. citaria exemplos?</p>
<p>Shinyashiki &#8211; Quando eu nasci, minha mãe era empregada doméstica e meu pai, órfão aos sete anos, empregado em uma farmácia.<br />
Morávamos em um bairro miserável em São Vicente (SP) chamado Vila Margarida. Eles são meus heróis.<br />
Conseguiram criar seus quatro filhos, que hoje estão bem.<br />
Acho lindo quando o Cafu põe uma camisa em que está escrito &#8217;100% Jardim Irene&#8217;.<br />
É pena que a maior parte das pessoas esconda suas raízes.<br />
O resultado é um mundo vítima da depressão, doença que acomete hoje 10% da população americana.<br />
Em países como o Japão, a Suécia e a Noruega, há mais suicídio do que homicídio.<br />
Por que tanta gente se mata?<br />
Parte da culpa está na depressão das aparências, que acomete a mulher, que embora não ame mais o marido, mantém o casamento, ou o homem que passa décadas em um emprego, que não o faz se sentir realizado, mas o faz se sentir seguro.</p>
<p>ISTO É &#8211; Qual o resultado disso?</p>
<p>Shinyashiki &#8212; Paranóia e depressão cada vez mais precoce.<br />
O pai quer preparar o filho para o futuro e mete o menino em aulas de inglês, informática e mandarim. Aos nove ou dez anos a depressão aparece.<br />
A única coisa que prepara uma criança para o futuro, é ela poder ser criança.<br />
Com a desculpa de prepará-los para o futuro, os malucos dos pais estão roubando a infância dos filhos.. Essas crianças serão adultos inseguros e terão discursos hipócritas.<br />
Aliás, a hipocrisia já predomina no mundo corporativo.</p>
<p>ISTO É - Por quê?</p>
<p>Shinyashiki &#8211; O mundo corporativo virou um mundo de faz-de-conta, a começar pelo processo de recrutamento.<br />
É contratado o sujeito com mais marketing pessoal.<br />
As corporações valorizam mais a auto-estima do que a competência.<br />
Sou presidente da Editora Gente e entrevistei uma moça que respondia todas as minhas perguntas com uma ou duas palavras.<br />
Disse que ela não parecia demonstrar interesse.<br />
Ela me respondeu estar muito interessada, mas como falava pouco, pediu que eu pesasse o desempenho dela, e não a conversa. Até porque ela era candidata a um emprego na contabilidade, e não de relações públicas.<br />
Contratei-a na hora.<br />
Num processo clássico de seleção, ela não passaria da primeira etapa.</p>
<p>ISTO É - Há um script estabelecido?</p>
<p>Shinyashiki &#8211; Sim. Quer ver uma pergunta estúpida feita por um presidente de multinacional no programa &#8216;O Aprendiz&#8217;?<br />
- Qual é seu defeito?<br />
Todos respondem que o defeito é não pensar na vida pessoal:<br />
- Eu mergulho de cabeça na empresa. Preciso aprender a relaxar.<br />
É exatamente o que o Chefe quer escutar.<br />
Por que você acha que nunca alguém respondeu ser desorganizado ou esquecido?<br />
É contratado quem é bom em conversar, em fingir.<br />
Da mesma forma, na maioria das vezes, são promovidos aqueles que fazem o jogo do poder.<br />
O vice-presidente de uma as maiores empresas do planeta me disse:<br />
&#8216;Sabe, Roberto, ninguém chega à vice-presidência sem mentir&#8217;.<br />
Isso significa que quem fala a verdade não chega a diretor!</p>
<p>ISTO É - Temos um modelo de gestão que premia pessoas mal preparadas?</p>
<p>Shinyashiki - Ele cria pessoas arrogantes, que não têm a humildade de se preparar, que não têm capacidade de ler um livro até o fim e não se preocupam com o conhecimento.<br />
Muitas equipes precisam de motivação, mas o maior problema no Brasil é competência.<br />
Cuidado com os burros motivados.<br />
Há muita gente motivada fazendo besteira.<br />
Não adianta você assumir uma função, para a qual não está preparado.<br />
Fui cirurgião e me orgulho de nunca um paciente ter morrido na minha mão.<br />
Mas tenho a humildade de reconhecer que isso nunca aconteceu graças a meus chefes, que foram sábios em não me dar um caso, para o qual eu não estava preparado.<br />
Hoje, o garoto sai da faculdade achando que sabe fazer uma neurocirurgia.<br />
O Brasil se tornou incompetente e não acordou para isso.</p>
<p>ISTO É - Está sobrando auto-estima?</p>
<p>Shinyashiki &#8211; Falta às pessoas a verdadeira auto-estima.<br />
Se eu preciso que os outros digam que sou o melhor, minha auto-estima está baixa.<br />
Antes, o ter conseguia substituir o ser.<br />
O cara mal-educado dava uma gorjeta alta para conquistar o respeito do garçom.<br />
Hoje, como as pessoas não conseguem nem <span style="text-decoration: underline;">ser</span>, nem <span style="text-decoration: underline;">ter</span>, o objetivo de vida se tornou <span style="text-decoration: underline;">parecer</span>.<br />
As pessoas parecem que sabem, parece que fazem, parece que acreditam.<br />
E poucos são humildes para confessar que não sabem.<br />
Há muitas mulheres solitárias no Brasil, que preferem dizer que é melhor assim.<br />
Embora a auto-estima esteja baixa, fazem pose de que está tudo bem.</p>
<p>ISTO É - Por que nos deixamos levar por essa necessidade de sermos perfeitos em tudo e de valorizar a aparência?</p>
<p>Shinyashiki - Isso vem do vazio que sentimos.<br />
A gente continua valorizando os heróis.<br />
Quem vai salvar o Brasil? O Lula.<br />
Quem vai salvar o time? O técnico.<br />
Quem vai salvar meu casamento? O terapeuta.<br />
O problema é que eles não vão salvar nada!<br />
Tive um professor de filosofia que dizia:<br />
&#8216;Quando você quiser entender a essência do ser<br />
humano, imagine a rainha Elizabeth com uma crise de diarréia durante um jantar no Palácio de Buckingham&#8217;. Pode parecer incrível, mas a rainha Elizabeth também tem diarréia.<br />
Ela certamente já teve dor de dente, já chorou de tristeza, já fez coisas que não deram certo.<br />
A gente tem de parar de procurar super-heróis, porque se o super-herói não segura a onda, todo mundo o considera um fracassado.</p>
<p>ISTO É - O conceito muda quando a expectativa não se comprova?</p>
<p>Shinyashiki &#8211; Exatamente. A gente não é super-herói nem superfracassado.<br />
A gente acerta, erra, tem dias de alegria e dias de tristeza.<br />
Não há nada de errado nisso.<br />
Hoje, as pessoas estão questionando o Lula, em parte porque acreditavam que ele fosse mudar suas vidas e se decepcionaram.<br />
A crise será positiva se elas entenderem que a responsabilidade pela própria vida é delas.</p>
<p>ISTO É - Muitas pessoas acham que é fácil para o Roberto Shinyashiki dizer essas coisas, já que ele é bem-sucedido. O senhor tem defeitos?</p>
<p>Shinyashiki -Tenho minhas angústias e inseguranças. Mas aceitá-las faz minha vida fluir facilmente.<br />
Há várias coisas que eu queria e não consegui.<br />
Jogar na Seleção Brasileira, tocar nos Beatles (risos). Meu filho mais velho nasceu com uma doença cerebral e hoje tem 25 anos.<br />
Com uma criança especial, eu aprendi que, ou eu a amo do jeito que ela é, ou vou massacrá-la o resto da vida para ser o filho que eu gostaria que fosse.<br />
Quando olho para trás, vejo que 60% das coisas que fiz deram certo.<br />
O resto foram apostas e erros.<br />
Dia desses apostei na edição de um livro, que não deu certo.<br />
Um amigão me perguntou:<br />
&#8216;Quem decidiu publicar esse livro?&#8217;<br />
Eu respondi que tinha sido eu. O erro foi meu. Não preciso mentir.</p>
<p>ISTO É - Como as pessoas podem se livrar dessa tirania da aparência?</p>
<p>Shinyashiki &#8211; O primeiro passo é pensar nas coisas que fazem as pessoas cederem a essa tirania e tentar evitá-las.<br />
São três fraquezas:<br />
A primeira é precisar de aplauso, a segunda é precisar se sentir amada e a terceira é buscar segurança.<br />
Os Beatles foram recusados por gravadoras e nem por isso desistiram.<br />
Hoje, o erro das escolas de música é definir o estilo do aluno.<br />
Elas ensinam a tocar como o Steve Vai, o B. B. King ou o Keith Richards.<br />
Os MBAs têm o mesmo problema: ensinam os alunos a serem covers do Bill Gates.<br />
O que as escolas deveriam fazer é ajudar o aluno a desenvolver suas próprias potencialidades.</p>
<p>ISTO É - Muitas pessoas têm buscado sonhos que não são seus?</p>
<p>Shinyashiki &#8211; A sociedade quer definir o que é certo. São quatroloucuras da sociedade&#8230;<br />
A primeira é instituir que todos têm de ter sucesso, como se eles não tivessem significados individuais.<br />
A segunda loucura é:<br />
Você tem de estar feliz todos os dias.<br />
A terceira é:<br />
Você tem que comprar tudo o que puder. O resultado é esse consumismo absurdo.<br />
Por fim, a quarta loucura:<br />
Você tem de fazer as coisas do jeito certo.<br />
Jeito certo não existe.<br />
Não há um caminho único para se fazer as coisas.<br />
As metas são interessantes para o sucesso, mas não para a felicidade.<br />
Felicidade não é uma meta, mas um estado de espírito.<br />
Tem gente que diz que não será feliz, enquanto não casar, enquanto outros se dizem infelizes justamente por causa do casamento.<br />
Você pode ser feliz tomando sorvete, ficando em casa com a família ou com amigos verdadeiros, levando os filhos para brincar ou indo à praia ou ao cinema..<br />
Quando era recém-formado em São Paulo, trabalhei em um hospital de pacientes terminais.<br />
Todos os dias morriam nove ou dez pacientes.<br />
Eu sempre procurei conversar com eles na hora da morte.<br />
A maior parte pega o médico pela camisa e diz:<br />
&#8216;Doutor, não me deixe morrer. Eu me sacrifiquei à vida inteira, agora eu quero aproveitá-la e ser feliz&#8217;.<br />
Eu sentia uma dor enorme por não poder fazer nada. Ali eu aprendi que a felicidade é feita de coisas pequenas.<br />
Ninguém na hora da morte diz se arrepender por não ter aplicado o dinheiro em imóveis ou ações, mas sim de ter esperado muito tempo ou perdido várias oportunidades para aproveitar a vida.</p>
<p>Original em: <a href="http://pecados7mortais.blogspot.com/2009/06/herois-de-verdade-cuidado-com-os-burros.html" target="_blank">http://pecados7mortais.blogspot.com/2009/06/herois-de-verdade-cuidado-com-os-burros.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://julianoribeiro.com.br/blog/herois-de-verdade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
