<?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>Mike &#38; Etc &#187; Programação</title>
	<atom:link href="http://www.mike.etc.br/categoria/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mike.etc.br</link>
	<description>Entre funções e variáveis, alguns procedimentos básicos de alguém que leva a vida entre as linhas de código.</description>
	<lastBuildDate>Thu, 06 Oct 2011 12:24:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Contando o n&#250;mero de linhas de um &lt;mx:List&gt;</title>
		<link>http://www.mike.etc.br/programacao/contando-o-numero-de-linhas-de-um-mxlist/</link>
		<comments>http://www.mike.etc.br/programacao/contando-o-numero-de-linhas-de-um-mxlist/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 00:20:11 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.mike.etc.br/programacao/contando-o-numero-de-linhas-de-um-mxlist/</guid>
		<description><![CDATA[Uma forma simples de contar a quantidade de linhas em um mx:List é utilizando a propriedade length do dataProvider da lista. Simples: itemList.dataProvider.lenght Onde itemList é o ID da sua mx:List. Isso é muito util quando você precisa que um determinado campo ou botão não permaneça desabilidado quando o usuário selecionar o último item da [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mike.etc.br/wp-content/uploads/2011/04/Flex3mxList.png"><img style="display: inline; margin-left: 0px; margin-right: 0px; border: 0px;" title="Flex3mxList" src="http://www.mike.etc.br/wp-content/uploads/2011/04/Flex3mxList_thumb.png" border="0" alt="Flex3mxList" width="154" height="126" align="left" /></a> Uma forma simples de contar a quantidade de linhas em um mx:List é utilizando a propriedade length do dataProvider da lista. Simples:</p>
<pre class="brush:as3">itemList.dataProvider.lenght</pre>
<p>Onde itemList é o ID da sua mx:List. Isso é muito util quando você precisa que um determinado campo ou botão não permaneça desabilidado quando o usuário selecionar o último item da sua lista. Supondo que o controle que precisamos desabilitar seja um mx:Button, basta colocar o seguinte na sua propriedade enabled</p>
<p>&nbsp;</p>
<pre class="brush:as3">{(itemList.selectedIndex &lt; (itemList.dataProvider.length-1))}</pre>
<p>Isso se torna possível graças a facilidade provida pelo excelente sistema de DataBindind proporcionado pelo Flex. A lógica é simples: Retornará TRUE caso o indice do item selecionado na lista seja menor que a quantidade de itens menos um. Lembrando que o calculo do length – 1 é obrigatório, já que o indice de itens começa em zero, e a contagem de itens começará sempre com 1 (lógico). Simples, fácil e rápido!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike.etc.br/programacao/contando-o-numero-de-linhas-de-um-mxlist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPThumb &#8211; Your GD installation does not support JPG image types</title>
		<link>http://www.mike.etc.br/programacao/phpthumb-your-gd-installation-does-not-support-jpg-image-types/</link>
		<comments>http://www.mike.etc.br/programacao/phpthumb-your-gd-installation-does-not-support-jpg-image-types/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 16:22:42 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.mike.etc.br/?p=264</guid>
		<description><![CDATA[Uma solução rápida para quem utiliza a PHPThumb em seus projetos e de uns tempos pra cá vem se deparando com mensagens semelhantes a esta: Fatal error: Uncaught exception 'Exception' with message 'Your GD installation does not support JPG image types' in '(...)\phpthumb\ThumbBase.inc.php:165 Stack trace: #0 (...)\phpthumb\GdThumb.inc.php(1081): ThumbBase-&#62;triggerError('Your GD install...') #1 (...)\phpthumb\GdThumb.inc.php(101): GdThumb-&#62;verifyFormatCompatiblity() #2 (...)\phpthumb\ThumbLib.inc.php(127): [...]]]></description>
			<content:encoded><![CDATA[<p>Uma solução rápida para quem utiliza a <a href="http://phpthumb.gxdlabs.com/">PHPThumb</a> em seus projetos e de uns tempos pra cá vem se deparando com mensagens semelhantes a esta:</p>
<pre>
<pre class="brush:plain">Fatal error: Uncaught exception 'Exception' with message
'Your GD installation does not support JPG image types'
in '(...)\phpthumb\ThumbBase.inc.php:165 Stack trace:
#0 (...)\phpthumb\GdThumb.inc.php(1081): ThumbBase-&gt;triggerError('Your GD install...')
#1 (...)\phpthumb\GdThumb.inc.php(101): GdThumb-&gt;verifyFormatCompatiblity()
#2 (...)\phpthumb\ThumbLib.inc.php(127): GdThumb-&gt;__construct('D:/xampp/htdocs...', Array)
#3 (...)\phpthumb\ThumbBase.inc.php on line 165</pre>
</pre>
<p>A solução é mais simples do que você pode imaginar. Se você tem certeza que sua biblioteca GD está instalada corretamente, tente o seguinte:</p>
<p>No arquivo <strong>GdThumb.lib.php</strong>, procure por volta da<strong> linha 1060 </strong>pelo método <strong>verifyFormatCompatiblity()</strong>. Substitua as linhas:</p>
<pre class="brush:php">case 'JPG':
case 'PNG':
$isCompatible = $gdInfo[$this-&gt;format . ' Support'];
break;</pre>
<p>Pelo código abaixo:</p>
<pre class="brush:php">case 'JPG':
$isCompatible = (isset($gdInfo['JPG Support'])) ? $gdInfo['JPG Support'] : $gdInfo['JPEG Support'];
break;
case 'PNG':
$isCompatible = $gdInfo['PNG Support'];
break;</pre>
<p>O método completo deverá ficar assim:</p>
<pre class="brush:php">	protected function verifyFormatCompatiblity ()
	{
		$isCompatible 	= true;
		$gdInfo			= gd_info();

		switch ($this-&gt;format)
		{

			case 'GIF':
				$isCompatible = $gdInfo['GIF Create Support'];
				break;
      case 'JPG':
        $isCompatible = (isset($gdInfo['JPG Support'])) ? $gdInfo['JPG Support'] : $gdInfo['JPEG Support'];
        break;
      case 'PNG':
        $isCompatible = $gdInfo['PNG Support'];
        break;
      default:
				$isCompatible = false;
		}

		if (!$isCompatible)
		{
			$this-&gt;triggerError('Your GD installation does not support ' . $this-&gt;format . ' image types');
		}
	}</pre>
<p>Salve o arquivo e teste.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike.etc.br/programacao/phpthumb-your-gd-installation-does-not-support-jpg-image-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse e o problema do AltGR</title>
		<link>http://www.mike.etc.br/programacao/eclipse-e-o-problema-do-altgr/</link>
		<comments>http://www.mike.etc.br/programacao/eclipse-e-o-problema-do-altgr/#comments</comments>
		<pubDate>Wed, 26 May 2010 13:58:56 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutoriais]]></category>

		<guid isPermaLink="false">http://www.mike.etc.br/?p=201</guid>
		<description><![CDATA[Alguns laptops fabricados recentemente tem um layout de teclado um pouco diferente dos desktop, onde o sinal de interrogação é feito pressionando-se a tecla AltGR + W. Quem tem um teclado com este layout corre um grande risco de ter problemas para programar, principalmente em PHP, dentro de alguns IDE&#8217;s baseados no Eclipse (Aptana, Flex, [...]]]></description>
			<content:encoded><![CDATA[<p>Alguns laptops fabricados recentemente tem um layout de teclado um pouco diferente dos desktop, onde o sinal de interrogação é feito pressionando-se a tecla AltGR + W. Quem tem um teclado com este layout corre um grande risco de ter problemas para programar, principalmente em PHP, dentro de alguns IDE&#8217;s baseados no Eclipse (Aptana, Flex, Zend, etc).</p>
<p>O problema acontece que, ao pressional o atalho AltGR+W, nada aparece. Isso porque o Eclipse tem, por padrão, um atalho associal ao comando CTRL + ALT + W. Se você testar no bloco de notas a combinação CTRL + ALT + W, verá que o resultado é o mesmo que AltGR + W. Quando pressionamos essa sequencia de teclas dentro do Eclipse, ele simplesmente irá entender que estamos tentando acionar o atalho, e ignora a impressão do caractere gráfico na tela.</p>
<p>Para resolver esse problema, abra o Eclipse (ou o IDE baseado nele), vá no menu &#8220;Window&#8221;, &#8220;Preferences&#8221;. No grupo &#8220;General&#8221;, pocure pela seção &#8220;Keys&#8221;. Altere o atalho associado a opção &#8220;Show Properties&#8221; para qualquer outro, ou simplesmente apague ele. Aplique as modificações e pronto! Problema resolvido.</p>
<p style="text-align: center;"><a href="http://www.mike.etc.br/wp-content/uploads/2010/05/Eclipse-Prob-AltGR.jpg"><img class="aligncenter size-large wp-image-202" title="Eclipse-Prob-AltGR" src="http://www.mike.etc.br/wp-content/uploads/2010/05/Eclipse-Prob-AltGR-640x461.jpg" alt="Eclipse-Prob-AltGR" width="580" height="417" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike.etc.br/programacao/eclipse-e-o-problema-do-altgr/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ASP.NET FORMS Authentication</title>
		<link>http://www.mike.etc.br/programacao/aspnet-forms-authentication/</link>
		<comments>http://www.mike.etc.br/programacao/aspnet-forms-authentication/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 12:12:37 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutoriais]]></category>

		<guid isPermaLink="false">http://www.diariodeumprogramador.com.br/2009/01/23/aspnet-forms-authentication/</guid>
		<description><![CDATA[Fonte: http://www.bufaloinfo.com.br/artigos/artigo1510.asp O ASP.NET, conforme mencionamos em artigos anteriores, realiza por conta própria muitas tarefas que antes tinhamos que programar manualmente. Uma destas tarefas é o controle de login. No ASP tradicional são necessários os seguintes passos para realizar o controle de login : 1) Escolher o nome de uma variável de sessão e os [...]]]></description>
			<content:encoded><![CDATA[<p>Fonte: <a title="http://www.bufaloinfo.com.br/artigos/artigo1510.asp" href="http://www.bufaloinfo.com.br/artigos/artigo1510.asp">http://www.bufaloinfo.com.br/artigos/artigo1510.asp</a></p>
<p>O ASP.NET, conforme mencionamos em artigos anteriores, realiza por conta própria muitas tarefas que antes tinhamos que programar manualmente.</p>
<p>Uma destas tarefas é o controle de login. No ASP tradicional são necessários os seguintes passos para realizar o controle de login :</p>
<p><span id="more-57"></span><br />
<!--adsense--><br />
1) Escolher o nome de uma variável de sessão e os valores que ela conterá (1 se o usuário estiver logado, por exemplo)<br />
2) Criar uma página para validar o login do usuário<br />
3) Se o login for válido, atribuir um para a variável de sessão escolhida<br />
4) Em todas as páginas, testar o valor da variável de sessão. Se o valor for diferente de 1 redirecionar o usuário para a página de login<br />
5) Ao redirecionar para a página de login deve transmitir a url da página que o usuário tentou acessar<br />
6) Após o login a página de login deverá verificar se recebeu alguma url por parâmetro e, se sim, se desviar para ela, permitindo assim que o usuário chame diretamente uma página, logue-se e acesse esta página</p>
<p>Por exemplo, se o usuário chamar o endereço : http://site/paginatexto.asp desvia-se o usuário para o endereço http://site/login.asp?url=/paginatexto.asp</p>
<p>Desta forma o usuário verá a tela de login onde poderá ser validado. Após a validação a página de login poderá utilizar o parâmetro que recebeu para desviar o usuário de volta exatamente para a página que ele havia originalmente chamado.</p>
<p>No ASP.NET a estrutura de funcionamento continua a mesma, afinal, a web não foi mudada. O que mudou é que não precisamos nós mesmos implementar todos os passos, pois o ASP.NET realiza esses passos para nós.</p>
<p>Para que o ASP.NET possa realizar o processo de autenticação para nós é primeiramente devemos informar a ele que desejamos realizar esse processo de autenticação. Essa informação é dada ao ASP.NET através de um arquivo chamado web.config. Esse arquivo é escrito em formato XML e pode ser inserido em qualquer diretório da aplicação. Ele contém configurações a nível de site que serão válidas a partir do diretório em que ele se encontra e em todos os sub-diretórios. Por isso é comum que um web.config seja sempre inserido na raiz do site.</p>
<p>Através do web.config vamos fornecer as seguintes informações :</p>
<p>- Que tipo de autenticação iremos realizar, no caso, baseada em formulário. É possível também utilizar outros tipos de autenticação, tal como a autenticação integrada com o sistema operacional, normalmente utilizada em ambientes de intranet.</p>
<p>- Qual formulário iremos utilizar para realizar a autenticação</p>
<p>- Quais usuários poderão acessar as páginas. No caso utilizaremos um simbolo para indicarmos que apenas usuários autenticados poderão acessar as páginas.</p>
<p>- O nome da variável que será utilizada para identificar o usuário logado. Aqui valem duas observações : o ASP.NET não utiliza variáveis de sessão para isso, mas sim cookies; o nome indicado não é realmente o nome, mas um sufixo para o nome.</p>
<p>Com o que mencionei até agora você já deve ter percebido o que irá ocorrer : O ASP.NET controlará o processo de autenticação automaticamente. A partir do momento que configuramos o web.config para realizar a autenticação via formulário o ASP.NET passa a verificar em todos os acessos a página se o usuário está logado ou não, verificando se o cookie de autenticação existe. Se não existir ele desviará a execução para o formulário de login que houvermos informado no web.config, transmitindo via GET a página que o usuário tentou acessar. Isso nos economiza grande trabalho de desenvolvimento.</p>
<p>Você deve ter observado que, já que está sendo utilizado um cookie ao invés de uma variável de sessão este cookie poderia ficar gravado na máquina do usuário entre uma visita e outra. A questão é : Realmente pode, se você quiser. Existem cookies temporários e cookies permanentes, os temporários são destruidos quando o browser é fechado, os permanentes são gravados em disco. O ASP.NET permite que você determine se deseja que o cookie de autenticação seja permanente ou temporário.</p>
<p>Isso é util para que você possa fornecer ao usuário a opção de lembrar suas informações de login, assim quando o usuário retorna ao site o cookie de login já encontra-se lá e consequentemente ele pode acessar as páginas sem redigitar suas informações de login. Muito cômodo e, sendo apresentado como uma opção para o usuário, ele assume os riscos.</p>
<p>No VB.NET ao criarmos um projeto o web.config já é criado para nós, precisaremos apenas alterar algumas das tags que ele possui, veja :</p>
<p><authentication mode="Forms">  </authentication></p>
<forms name="SecureWeb" loginurl="login.aspx">
</forms>
<p><authorization><br />
<deny users="?"><br />
</deny></authorization></p>
<p>Com o elemento authentication estamos determinando o tipo de autenticação que iremos utilizar (forms) e a url do formulário de autenticação e o nome do cookie de autenticação.</p>
<p>Já como o elemento authorization determinamos quais usuários podem acessar a aplicação. A ? utilizada no elemento Deny indica que deve ser negado acesso a usuário não identificados, ou seja, não logados.</p>
<p>O próximo passo é a montagem da tela de login. A tela de login precisará ter, além das caixas de usuário e senha, uma checkbox perguntando ao usuário se deseja gravar sua identificação em um cookie permanente para facilitar seu retorno ao site. Claro que implementar essa checkbox é opcional, mas é muito simples de fazer e é um conforto útil para o usuário.</p>
<p>Veja como fica a programação do botão Ok da tela de login ficaria assim :</p>
<p>Private Sub cmdLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLogin.Click<br />
If txtLogin.Text = &#8220;DENNES&#8221; AndAlso txtSenha.Text = &#8220;SENHA&#8221; Then<br />
FormsAuthentication.RedirectFromLoginPage(txtLogin.Text, chkLembrar.Checked)<br />
End If<br />
End Sub</p>
<p>Claro que nesse ponto seria feita uma busca em um banco de dados para validar o login do usuário, mas isto é apenas um exemplo da autenticação. O importante aqui é observar o funcionamento do método RedirectFromLogin page do objeto FormsAuthentication. Esse método gera o cookie identificando que o usuário encontra-se logado e redireciona o usuário para a página que ele solicitou.</p>
<p>Observe o 2o parâmetro, que determina se o cookie será permanente ou temporário. Neste exemplo estamos configurando este 2o parâmetro com o checked da checkbox inserida na tela de login. Desta forma o usuário pode optar por manter seu login registrado em cookie ou não. Se não tivessemos criado a checkbox na tela deveriamos utilizar false como default.</p>
<p>Para testar podemos criar uma ou mais páginas dentro desta aplicação e tentar chama-las diretamente. Você verá que será automaticamente desviado para a tela de login e só conseguirá fazer o acesso às demais páginas após se logar.</p>
<p>Caso você deseje que algumas páginas sejam acessíveis mesmo que o usuário não esteja logado pode criar um sub-diretório e criar um web.config separado para este sub-diretório, sem criar a exigência de autenticação.</p>
<p>Com isso, os 6 passos necessários para a montagem de uma autentiação em ASP foram reduzidos pelo ASP.NET a apenas 2 passos : A configuração do web.config e a montagem de uma tela de login.</p>
<p>Dennes Torres<br />
MCSD,MCSE,MCDBA</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike.etc.br/programacao/aspnet-forms-authentication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ponto-netando e cê-sharpeando&#8230;</title>
		<link>http://www.mike.etc.br/programacao/ponto-netando-e-ce-sharpeando/</link>
		<comments>http://www.mike.etc.br/programacao/ponto-netando-e-ce-sharpeando/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 13:43:02 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[.Net Framework]]></category>
		<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.diariodeumprogramador.com.br/?p=56</guid>
		<description><![CDATA[Desde que foi lançado o primeiro beta do .net framework, eu venho beiradeando essas ribanceiras e observando de longe toda a movimentação desse conceito de programação lançado pela Microsoft. A idéia é boa, mas como eu nunca fui muito fã de ASP e sempre defendi o PHP com unhas e dentes, não dei muita bola [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="margin: 5px; float: right;" src="http://www.dmxzone.com/downloads/images/_net_logo_2.jpg" alt="" width="150" height="100" />Desde que foi lançado o primeiro beta do .net framework, eu venho beiradeando essas ribanceiras e observando de longe toda a movimentação desse conceito de programação lançado pela Microsoft. A idéia é boa, mas como eu nunca fui muito fã de ASP e sempre defendi o PHP com unhas e dentes, não dei muita bola para o que estava acontecendo.</p>
<p>Há umas semanas atrás, fui visitar um cliente ao qual presto consultoria, e ele me mostrou um sistema que ele havia adquirido. Era um sistema de controle escolar para desktops, onde ele poderia lançar notas de alunos, registrar todo o movimento financeiro, entre muitas outras funções. Até aí nada de mais. O que me interessou foi quando ele me mostrou que tudo aquilo ainda poderia ser disponibilizado via internet. Resolvi investigar o sistema, e descobri que ele foi programado usando essa tecnologia .net. Muito interessante!</p>
<p>Pesquisei mais afundo, e então vi que a idéia da Microsoft de &#8220;<em>frameworkar</em>&#8221; o desenvolvimento desktop e web parece funcionar muito bem! O uso do .Net tira uma grande carga do ombro do programador, e torna a progamação tanto desktop, quanto web muito mais versátil!</p>
<p><img class="alignleft" style="margin: 5px; float: left;" src="http://www.linux.ime.usp.br/~cef/mac499-05/monografias/andre/figuras/csharp.jpg" alt="" width="160" height="187" />Eu analisei os prós e contras, e para alguns projetos que pretendo tocar, acredito que a solução .Net vai me ajudar bastante, já que um deles é justamente um projeto de integração entre software desktop e interface web. Eu estava pensando em utilizar Delphi para o Desktop e <a href="http://www.php.net/">PHP</a> com o <a href="http://www.codeignitier.com/">framework Code Igniter</a> para a a interface Web. Até agora, nada decidido ainda. Estou buscando agora saber mais sobre o .net, e estudando o C#. Já até consegui fazer <a href="http://www.asp.net/learn/mvc/tutorial-01-cs.aspx" target="_blank">uma lista de tarefas em C# </a>seguindo um <a href="http://www.asp.net/learn/mvc/">tutotial</a> no site <a href="http://www.asp.net/">Asp.net</a>.</p>
<p>Para me aprofundar mais, vou lançar daqui algumas semanas um projeto que já há tempos eu tenho idealizado. Será uma boa oportunidade de colocar em prática os conhecimentos adquiridos com o C# e o .net!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike.etc.br/programacao/ponto-netando-e-ce-sharpeando/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simplificando&#8230;</title>
		<link>http://www.mike.etc.br/programacao/simplificando/</link>
		<comments>http://www.mike.etc.br/programacao/simplificando/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 15:09:56 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.diariodeumprogramador.com.br/?p=48</guid>
		<description><![CDATA[Programo em PHP há 6 anos. Me lembro que, quando estudava os primeiros comandos e aprendia a sintaxe do if, lí em algum lugar uma maneira de preencher os valores de um formulário, desde que esses valores existissem. Seria algo mais ou menos assim: &#60;form id=&#8221;form1&#8243; name=&#8221;form1&#8243; method=&#8221;post&#8221; action=&#8221;cadastrar.php&#8221;&#62; &#60;label for=&#8221;nome&#8221;&#62;Nome:&#60;/label&#62;&#60;br /&#62; &#60;input id=&#8221;nome&#8221; name=&#8221;nome&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Programo em PHP há 6 anos. Me lembro que, quando estudava os primeiros comandos e aprendia a sintaxe do if, lí em algum lugar uma maneira de preencher os valores de um formulário, desde que esses valores existissem. Seria algo mais ou menos assim:</p>
<p>&lt;form id=&#8221;form1&#8243; name=&#8221;form1&#8243; method=&#8221;post&#8221; action=&#8221;cadastrar.php&#8221;&gt;</p>
<p>&lt;label for=&#8221;nome&#8221;&gt;Nome:&lt;/label&gt;&lt;br /&gt;</p>
<p>&lt;input id=&#8221;nome&#8221; name=&#8221;nome&#8221; type=&#8221;text&#8221; value=&#8221;&lt;?php if(isset($nome)){ print($nome); } ?&gt;&#8221; /&gt;</p>
<p>&lt;label for=&#8221;nome&#8221;&gt;Idade:&lt;/label&gt;&lt;br /&gt;</p>
<p>&lt;input id=&#8221;idade&#8221; name=&#8221;idade&#8221; type=&#8221;text&#8221; value=&#8221;&lt;?php if(isset($nome)){ print($idade); } ?&gt;&#8221; /&gt;</p>
<p>&lt;/form&gt;</p>
<p>Perceberam a lógica do formulário acima? Caso exista a variável $nome, ele irá predefinir o valor do input com a variável $nome. Isso pode ser muito útil para se fazer formulários que devem editar dados já existentes.</p>
<p>É duro quando as vezes descobrimos soluções simples, que facilitam bastante  a nossa vida, e então pensamos &#8220;uau! como eu não pensei nisso antes??&#8221;.</p>
<p>No PHP existe um operador que, por muito é esquecido pela maioria dos programadores. Trata-se to @.</p>
<p>O que ele faz de tão importante? Simples: Ele apenas diz pro interpretador do PHP &#8220;calar a boca&#8221;, ou em termos mais polidos, ele indica ao interpretador que, mesmo que o comando que precede a ele retorne um erro (não importa qual o grau do erro), ele não deverá ser exibido ao usuário. Já vi muito esse operador aplicado em conjunto com funções de acesso a banco de dados</p>
<p>$conn=@mysql_connect($hostname, $username, $pass);</p>
<p>Com isso, se a função mysql_connect() retornar algum erro, esse não será exibido, graças ao @ que precede o comando.</p>
<p>Desde o inicio, eu sempre conheci esse operador, mas nunca me emprenhei a procurar uma maneira mais útil de empregá-lo nos meus projetos. Esta semana, enquanto estudava <a href="http://jqueryfordesigners.com/using-ajax-to-validate-forms/" target="_blank">um método de utilizar Ajax para validar meus formulários</a>, vi uma maneira bastante criativa de utilizar o @ para verificar a existência de uma variável.</p>
<p>Se eu utilizasse, em vez da maneira tradicional, a seguinte forma:</p>
<p>&lt;input id=&#8221;idade&#8221; name=&#8221;idade&#8221; type=&#8221;text&#8221; value=&#8221;&lt;?= $idade;  ?&gt;&#8221; /&gt;</p>
<p>Isso me daria, sem sombra de dúvidas, um código muito mais limpo e facil de compreender. Mas traria um problema: Caso a variável $idade não tenha sido definida, ele iria preencher o valor do campo com um erro de &#8220;variable is not set&#8221;. Qual seria a solução? Usar o metodo de validação de variável como fiz acima? Ou talvez criar um código que setasse a variável $idade com um valor em branco no inicio do formulário?</p>
<p>Não. Existe uma forma muuuuito mais simples: Utilize o operador @!</p>
<p>&lt;input id=&#8221;idade&#8221; name=&#8221;idade&#8221; type=&#8221;text&#8221; value=&#8221;&lt;?= @$idade;  ?&gt;&#8221; /&gt;</p>
<p>Caso a variável $idade estiver setada, o seu valor será impresso. Caso contrário, o operador @ irá se encarregar de ocultar a mensagem de erro gerada, nada será impresso, e seu código ficará muito mais limpo! <img src='http://www.mike.etc.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Fácil ou não?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike.etc.br/programacao/simplificando/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ignição: Codificar!</title>
		<link>http://www.mike.etc.br/programacao/ignicao-codificar/</link>
		<comments>http://www.mike.etc.br/programacao/ignicao-codificar/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 21:11:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Code Igniter]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.diariodeumprogramador.com.br/?p=30</guid>
		<description><![CDATA[Há algum tempo eu estou me deliciando com as facilidades oferecidas pelos frameworks. Comecei a estudar PHP desde 2004, mas comecei a me aprofundar mais apenas em 2005 com o lançamento do carro-chefe dos meus projetos para web. Desde então eu venho estudando vários métodos, e há pouco mais de um ano conheci as facilidades [...]]]></description>
			<content:encoded><![CDATA[<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://codeigniter.com/user_guide/images/ci_logo_flame.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 151px; height: 163px;" src="http://codeigniter.com/user_guide/images/ci_logo_flame.jpg" alt="" border="0" /></a><br />Há algum tempo eu estou me deliciando com as facilidades oferecidas pelos frameworks. Comecei a estudar PHP desde 2004, mas comecei a me aprofundar mais apenas em 2005 com o lançamento do carro-chefe dos meus projetos para web. Desde então eu venho estudando vários métodos, e há pouco mais de um ano conheci as facilidades que o framework oferece. Já passei pelo CakePHP, Zend Framework, e finalmente parei no Code Igniter.</p>
<p>O Code Igniter é uma verdadeira mão na roda para aqueles que não gostam de perder tempo &#8220;reinventando a roda&#8221;. Trata-se de um framework que trabalha com conceitos Model-View-C ontroller (MVC).</p>
<p><a href="http://pt.wikipedia.org/wiki/MVC"><b>Model-view-controller</b> (<b>MVC</b>)</a> é um padrão de arquitetura de software. Isso significa que ele separa o processamento dos dados da aplicação/website do layout. Desta forma, alterações feitas no layout não afetam a manipulação dos dados, e estes poderão ser reorganizados sem alterar o layout.</p>
<p>Em resumo, para se ter uma simples página que mostre os registros guardados numa tabela mySQL, vc precisaria de três arquivos, que trabalhando em conjunto, resultariam na saída para o usuário.</p>
<p>Talvez possa parecer um tanto assustador no inicio, como foi para mim, mas logo esse conceito de programação MVC é digerido e tudo se torna muito claro.</p>
<p>O <a href="http://www.codeigniter.com/">CodeIgniter</a> é um framework que vale a pena ser estudado. Diferente de outros frameworks, ele é capaz de facilitar a vida do programador, sem forçá-lo a aprender e seguir novas regras de programação (caso muito comum em muitos frameworks existentes).</p>
<p>Para ajudar:</p>
<p><a href="http://www.codeigniter.com.br/manual/">Manual do CodeIgniter (em Português)</a><br /><a href="http://www.codeigniter.com.br/">Página do CodeIgniter em Português</a><br /><a href="http://www.codeigniter.com/">Página oficial do CodeIgniter (em Inglês)</a><br /><a href="http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br">Assinar a lista de discussão do CodeIgniter (Português)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mike.etc.br/programacao/ignicao-codificar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

