<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4411317604583328279</id><updated>2012-02-02T07:33:06.423-08:00</updated><category term='flash'/><category term='kickstarter'/><category term='postgres'/><category term='tools'/><category term='opcode'/><category term='sheldon'/><category term='web'/><category term='encoding'/><category term='books'/><category term='as3'/><category term='light'/><category term='relacional'/><category term='ranking'/><category term='jogos'/><category term='array'/><category term='redtube'/><category term='Piet Hein'/><category term='The big bang theory'/><category term='compilador'/><category term='dereference'/><category term='jogo'/><category term='video'/><category term='app'/><category term='email'/><category term='banco'/><category term='distância'/><category term='indireção'/><category term='ponto'/><category term='xhtml'/><category term='actionscript'/><category term='latin1'/><category term='a estrada para a sabedoria'/><category term='brasil'/><category term='humor'/><category term='tabela'/><category term='gerencia'/><category term='facebook'/><category term='xml'/><category term='desempenho'/><category term='select'/><category term='dicas'/><category term='exibir'/><category term='64-bit'/><category term='mysql'/><category term='java'/><category term='google maps'/><category term='DOCTYPE'/><category term='controle versão'/><category term='codeigniter'/><category term='hiphop'/><category term='utf-8'/><category term='terminator'/><category term='computação'/><category term='conversão'/><category term='game'/><category term='links'/><category term='flex'/><category term='mensagem'/><category term='the road to wisdom'/><category term='phpinfo'/><category term='falta de humor'/><category term='software'/><category term='html'/><category term='árvore'/><category term='cidades'/><category term='darkness'/><category term='power'/><category term='design'/><category term='livros'/><category term='ubuntu'/><category term='postgre'/><category term='open-source'/><category term='svn'/><category term='subversion'/><category term='google'/><category term='ruby'/><category term='url'/><category term='proxy'/><category term='linker'/><category term='javascript'/><category term='dados'/><category term='cache'/><category term='pool tree'/><category term='php codeigniter javascript'/><category term='golpe'/><category term='perl'/><category term='aleatório'/><category term='google instant'/><category term='benchmark'/><category term='música'/><category term='triangulo'/><category term='programação'/><category term='busca'/><category term='desenvolvimento'/><category term='string'/><category term='download'/><category term='tipos'/><category term='python'/><category term='32-bit'/><category term='helper'/><category term='vídeo'/><category term='internet'/><category term='padrões'/><category term='Scott Rosenberg'/><category term='filezilla'/><category term='wave'/><category term='calculo'/><category term='escapar'/><category term='flixel'/><category term='37 signals'/><category term='linux'/><category term='debug'/><category term='projetos'/><category term='ebooks'/><category term='iso-8859-1'/><category term='10.04'/><category term='php'/><category term='ajax'/><category term='random'/><category term='matematica'/><category term='pública'/><category term='5.3'/><category term='games'/><category term='simpledom'/><category term='celular'/><category term='domínios'/><category term='instant'/><category term='post'/><category term='atalhos'/><category term='utilidade'/><category term='requisição'/><category term='netbeans'/><category term='pascal'/><category term='jquery'/><category term='poligono'/><category term='clone'/><category term='it crowd'/><category term='terminal'/><category term='saída'/><category term='sql'/><category term='comparação'/><category term='5.4'/><category term='upload'/><category term='dreaming in code'/><category term='standards'/><category term='apresentação'/><category term='opinião'/><category term='apc'/><category term='hierarquia'/><category term='ftp'/><category term='gmail'/><category term='linguagem c'/><category term='enviar'/><title type='text'>Hiper Código</title><subtitle type='html'>Blog sobre programação usando php, codeigniter, javascript e outras tecnologias. De vez em quando devem aparecer outros temas não focados em tecnologia.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-6522006228801509777</id><published>2012-01-21T15:48:00.000-08:00</published><updated>2012-01-21T15:51:44.689-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opcode'/><category scheme='http://www.blogger.com/atom/ns#' term='apc'/><category scheme='http://www.blogger.com/atom/ns#' term='cache'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Cache de OpCodes para PHP</title><content type='html'>Sabe como diminuir o uso de memória e o tempo de resposta de suas aplicações PHP sem precisar modificar seu código? Não? E ainda tem mais! Você não precisa gastar nada para conseguir isso!&lt;br /&gt;&lt;br /&gt;Parece bom demais para ser verdade não é mesmo? Mas existe uma ferramenta chamada &lt;a href="http://www.php.net/manual/en/book.apc.php"&gt;APC&lt;/a&gt; (Alternative PHP Cache) que faz exatamente isso. O APC é uma extensão &lt;a href="http://pecl.php.net/index.php"&gt;PECL&lt;/a&gt;&amp;nbsp;que armazena e otimiza os opcodes PHP.&lt;br /&gt;&lt;br /&gt;Os &lt;a href="http://php.net/manual/en/internals2.opcodes.list.php"&gt;opcodes&lt;/a&gt;&amp;nbsp;são as instruções que a máquina virtual PHP efetivamente lê. Todo código PHP que você escreve é transformado nestes opcodes e depois executado. O problema é que esse processo é feito para &lt;b&gt;toda requisição recebida&lt;/b&gt;. Este processo é bem rápido, mas dependendo da quantidade de requisições recebidas em um determinado período (pense em algo como 500 requisições por segundo) e da capacidade de seu servidor, seus usuários vão ter de esperar cada vez mais para receber o conteúdo enviado pelo servidor.&lt;br /&gt;&lt;br /&gt;Usando-se a ferramenta APC estes opcodes são gerados uma vez e armazenados na primeira requisição, nas próximas requisições o passo de ler o código PHP e gerar os opcodes já está feito, assim economizamos tempo e memória que seria usada na criação dos opcodes.&lt;br /&gt;&lt;br /&gt;Se você tem o PECL instalado, a instalação do APC é bem simples. No linux execute:&lt;br /&gt;&lt;b&gt;#sudo pecl install apc&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Eu tive um problema durante a compilação do APC e para resolver tive que também instalar o seguinte pacote:&lt;br /&gt;&lt;b&gt;#sudo apt-get install&amp;nbsp;libpcre3-dev&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Após fazer isso você pode copiar o script&amp;nbsp;&lt;b&gt;/usr/share/php/apc.php&lt;/b&gt; para uma pasta do apache. Quando você acessar este script através de seu navegador você poderá ver várias informações sobre o estado do APC no seu sistema. No menu "&lt;b&gt;System Cache Entries&lt;/b&gt;" você pode ver quais scripts estão com seus opcodes armazenados.&lt;br /&gt;&lt;br /&gt;Uma informação importante mostrada no &lt;b&gt;apc.php&lt;/b&gt; é o&amp;nbsp;&lt;b&gt;Cache full count. &lt;/b&gt;Este número te diz quantas vezes o cache ficou totalmente cheio e o APC teve que excluir opcodes de scripts que estavam armazenados mas não foram acessados dentro do número de segundos estipulado por &lt;b&gt;apc.ttl&lt;/b&gt;. Exemplo:&lt;br /&gt;A página A.php está sendo acessada e o APC vai criar o cache dos opcodes para ela. Como a memória dedicada para o cache já está toda utilizada, o APC vai excluir o cache de D.php que não foi acessado nos últimos 5 segundos, estes 5 segundos estão definidos na varável de configuração &lt;b&gt;apc.ttl&lt;/b&gt;. Você deve configurar o APC para que o &lt;b&gt;Cache Full count&lt;/b&gt; não seja um número muito alto, pois este processo de limpar o cache frequentemente pode ter impacto na performance de seu sistema. Ou você aumenta a memória dedicada ao APC ou usa a configuração &lt;b&gt;apc.filters&lt;/b&gt; para diminuir o número de scripts armazenados.&lt;br /&gt;&lt;br /&gt;Espero que com esta dica vocês possam impressionar seus usuários com a velocidade de suas aplicações!&lt;br /&gt;&lt;br /&gt;Ah sim! O APC não é a única ferramenta para cache de opcodes PHP:&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/List_of_PHP_accelerators"&gt;http://en.wikipedia.org/wiki/List_of_PHP_accelerators&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-6522006228801509777?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/6522006228801509777/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2012/01/cache-de-opcodes-para-php.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/6522006228801509777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/6522006228801509777'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2012/01/cache-de-opcodes-para-php.html' title='Cache de OpCodes para PHP'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-5075800828940955112</id><published>2012-01-13T19:21:00.000-08:00</published><updated>2012-01-14T18:22:07.851-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='array'/><category scheme='http://www.blogger.com/atom/ns#' term='indireção'/><category scheme='http://www.blogger.com/atom/ns#' term='5.4'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='dereference'/><title type='text'>Novas características PHP 5.4 - Indireção de Arrays</title><content type='html'>Devo dizer que não me esforcei muito para me inteirar sobre as mudanças feitas na versão 5.3 da linguagem PHP. Não tive muitos problemas migrando código escrito para versões anteriores da linguagem. Os mais comuns foram warnings do tipo E_DEPRECATED causados por expressões deste tipo (dica para consertar o código: removam o "&amp;amp;"):&lt;br /&gt;$obj =&amp;amp; new Class();&lt;br /&gt;&lt;br /&gt;O uso de funções como&amp;nbsp;&lt;a href="http://www.php.net/manual/en/function.eregi.php"&gt;eregi&lt;/a&gt;, &lt;a href="http://www.php.net/manual/en/function.split.php"&gt;split&lt;/a&gt;&amp;nbsp;também passou a gerar warnings E_DEPRECATED.&lt;br /&gt;&lt;br /&gt;Outra confissão é que eu nunca escrevi código que usa &lt;a href="http://www.php.net/manual/en/language.namespaces.faq.php"&gt;namespaces&lt;/a&gt;. E olha que a versão 5.3 foi lançada em junho de 2009!&lt;br /&gt;&lt;br /&gt;Mas estou aqui para falar da vindoura versão 5.4 que possui algumas mudanças bem interessantes como a indireção de arrays. Mas o que é esta tal de indireção? Bom em inglês eles usam a palavra "&lt;a href="http://dictionary.reference.com/browse/dereference"&gt;dereference&lt;/a&gt;". Em computação é quando usamos uma referência ou endereço (pense nos ponteiros da linguagem C) para acessar e manipular um determinado valor. Em PHP quando usamos a referência $this para acessar algum membro da classe estamos fazendo uma indireção, ou seja, usando um endereço representado por $this para acessar o valor que realmente queremos seja uma varável &lt;a href="http://php.net/manual/en/language.types.intro.php"&gt;escalar&lt;/a&gt;, uma instância de outra classe ou até mesmo um método.&lt;br /&gt;&lt;br /&gt;Mas porque eu falei disso tudo? Até a versão 5.3 sempre que tínhamos uma função retornando um array nós só poderíamos acessar os valores do array usando uma varável para armazená-los, exemplo:&lt;br /&gt;&lt;br /&gt;$meu_array = $objeto-&amp;gt;retorna_array();&lt;br /&gt;echo $meu_array[0];&lt;br /&gt;&lt;br /&gt;Mas na versão 5.4 este código pode ficar menor:&lt;br /&gt;echo $objeto-&amp;gt;retorna_array()[0];&lt;br /&gt;&lt;br /&gt;Agora nós podemos acessar o array diretamente na chamada do método que o criou. Acredito que o código ainda é fácil de ser entendido, pelo menos se o leitor já tiver um pouco de experiência.&lt;br /&gt;&lt;br /&gt;Que venha o PHP 5.4!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-5075800828940955112?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/5075800828940955112/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2012/01/novas-caracteristicas-php-54-indirecao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5075800828940955112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5075800828940955112'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2012/01/novas-caracteristicas-php-54-indirecao.html' title='Novas características PHP 5.4 - Indireção de Arrays'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-4638273822734459442</id><published>2011-12-31T11:04:00.000-08:00</published><updated>2011-12-31T11:09:40.963-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='standards'/><category scheme='http://www.blogger.com/atom/ns#' term='padrões'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='DOCTYPE'/><title type='text'>Documento XHTML 1.0 mínimo</title><content type='html'>Seus sites seguem os padrões web? Um jeito rápido de você saber é usando o serviço de validação do W3C (World Wide Web Consortium), o&amp;nbsp;&lt;a href="http://validator.w3.org/"&gt;Markup Validation Service&lt;/a&gt;. Nele podemos validar documentos HTML e XHTML. Mas porque ter o trabalho a mais de manter os meus sites dentro dos padrões web? Bom, além de torná-lo um cidadão modelo na internet, sites que seguem os padrões web são melhores vistos por engines de busca como a google o que melhora a posição e visibilidade de seus sites. O uso de padrões também melhora a acessibilidade dos sites para pessoas com deficiências, isso é especialmente importante para sites governamentais. Outra vantagem é que com os padrões é mais fácil evitar problemas de incompatibilidades entre diferentes browsers, hoje um site tem que ser exibido corretamente em no mínimo três browsers diferentes: Firefox, Chrome e Internet Explorer. Sem contar os browsers de dispositivos móveis que são um boa parte dos acessos hoje em dia.&lt;br /&gt;&lt;br /&gt;Eu geralmente uso XHTML 1.0 nos meus sites, e toda página servida deve uma estrutura mínima para estar dentro dos padrões. Aqui vai o exemplo:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1544893.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Este documento usa o DOCTTYPE XHTML 1.0 Strict, que é bem rígido com a estrutura do documento. O DOCTYPE define os DTD (Document Type Definitions) usados para validar a sintaxe e gramática da marcação XHTML. Existem várias regras para escrever um documento xhtml válido como todas as tags tem que ser escritas com letras minúsculas, todas as tags de abertura devem ter a tag de fechamento correspondente, os atributos das tags também devem ser escritos com letras minúsculas etc.&lt;br /&gt;&lt;br /&gt;O DOCTYPE Strict é mais indicado para páginas onde a marcação html e a apresentação são totalmente separadas através do uso de CSS. Um DOCTYPE mais flexível é o Transitional, que permite o uso de elementos em desuso, ou quando o documento mistura marcação e regras de apresentação. Neste caso o exemplo seria:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1544934.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Muitas das informações neste post foram obtidas no excelente livro "&lt;a href="http://www.livrocss.com.br/"&gt;Construindo sites com CSS e (X)HTML&lt;/a&gt;" de Maurício Samy Silva.&lt;br /&gt;&lt;br /&gt;Quer você use XHTML ou HTML eu acho muito importante seguirmos os padrões web, desta forma sempre estaremos tornando a web um lugar melhor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-4638273822734459442?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/4638273822734459442/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/12/documento-xhtml-10-minimo.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4638273822734459442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4638273822734459442'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/12/documento-xhtml-10-minimo.html' title='Documento XHTML 1.0 mínimo'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-5024573497554979490</id><published>2011-12-18T09:44:00.000-08:00</published><updated>2011-12-18T09:44:01.058-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='escapar'/><category scheme='http://www.blogger.com/atom/ns#' term='saída'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Como escrever javascript com PHP?</title><content type='html'>Quem já tem alguma experiência com desenvolvimento web já deve ter passado pela experiência de escrever código javascript usando código PHP. A técnica é bem interessante e poderosa, pois você está gerando código javascript dinamicamente usando PHP que também é uma linguagem dinâmica, Batman e Robin ficariam orgulhosos.&lt;br /&gt;&lt;br /&gt;Aqui vai um exemplo: Você tem um site bastante visitado e que usa bastante ajax para evitar recarregar toda a página para cada ação do usuário. Mas e que tal você economizar até nas chamadas ajax? Supondo aquela situação básica onde o usuário do site escolhe uma opção em um select e algum lugar da página é recarregado automaticamente de acordo com a opção escolhida. Supondo ainda que as informações envolvidas não mudem com muita frequência, vamos fazer com todas as informações já estejam na página permitindo o código javascript carregar as informações na página sem uma requisição ajax.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1493839.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;O código simplesmente preenche o input "sentimento_cor" de acordo com a cor escolhida no select. Como vocês podem ver estou preenchendo o array javascript "sentimentos_cores" com os valores vindos do array PHP "sentimento_cores". Desta forma a função "mostra_sentimentos" vai somente pegar o valor do input diretamente do array javascript sem a necessidade de uma requisição ajax.&lt;br /&gt;&lt;br /&gt;Até aí tudo bem. No entanto se você testar este código vai perceber que um erro javascript vai aparecer logo de cara na seguinte linha:&lt;br /&gt;&lt;span class="objectBox objectBox-errorMessage hasBreakSwitch " role="presentation"&gt;&lt;b&gt;sentimentos_cores.push("depressão, luto e "escuridão"");&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Como a palavra escuridão está entres aspas duplas estas se misturaram com as aspas duplas do código javascript formando um comando inválido. O problema aqui foi que nós não escapamos a saída javascript. E como já comentei em um &lt;a href="http://hipercodigo.blogspot.com/2011/10/escapar-saida-htm-em-php.html"&gt;artigo&lt;/a&gt; anterior não escapar a saída pode trazer sérios problemas para sua aplicação web.&lt;br /&gt;&lt;br /&gt;E como escapamos a saída javascript? Muito simples, a linguagem PHP já possui uma função que faz isso, embora o nome da função não seja óbvio, a função &lt;a href="http://php.net/manual/en/function.json-encode.php"&gt;json_encode&lt;/a&gt;. Assim o trecho onde a PHP gera o código javascript ficaria assim:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1493942.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Agora vá e observe a saída gerada pela linguagem PHP:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1493945.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;As aspas foram escapadas e os acentos foram convertidos para uma representação unicode. Na verdade nós poderíamos ter simplificado o código usando a função json_encode diretamente no array PHP o teria gerado a seguinte string:&lt;br /&gt;&lt;br /&gt;["al\u00edvio e paz","amor e paix\u00e3o","depress\u00e3o, luto e \"escurid\u00e3o\""];&lt;br /&gt;&lt;br /&gt;Esta string é &lt;b&gt;código javascript, &lt;/b&gt;e pode ser usado diretamente no código javascript da página:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1494000.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Espero que este post seja útil para quem estiver usando PHP para gerar javascript, até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-5024573497554979490?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/5024573497554979490/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/12/como-escrever-javascript-com-php.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5024573497554979490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5024573497554979490'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/12/como-escrever-javascript-com-php.html' title='Como escrever javascript com PHP?'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-875495793182687174</id><published>2011-11-28T18:27:00.000-08:00</published><updated>2011-11-28T18:27:21.016-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pool tree'/><category scheme='http://www.blogger.com/atom/ns#' term='relacional'/><category scheme='http://www.blogger.com/atom/ns#' term='exibir'/><category scheme='http://www.blogger.com/atom/ns#' term='dados'/><category scheme='http://www.blogger.com/atom/ns#' term='banco'/><category scheme='http://www.blogger.com/atom/ns#' term='árvore'/><category scheme='http://www.blogger.com/atom/ns#' term='hierarquia'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='select'/><title type='text'>Sobre como montar árvores armazenadas em bancos de dados relacionais</title><content type='html'>&lt;b&gt;Sumário: Neste post vou falar sobre como montar a árvore de relacionamentos de uma estrutura&amp;nbsp;hierárquica&amp;nbsp;armazenada em uma tabela de um banco de dados relacional, e em seguida aplicar isso na exibição de um select(html) onde os relacionamentos entre pais e filhos são demonstrados. Download de código de exemplo no final do post.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Em um projeto que ajudo a desenvolver no trabalho, um CMS, temos uma tabela no banco de dados chamada Páginas. Esta tabela armazena informações sobre as página de um site, estas páginas indicam cada local de conteúdo de um site, como Home, Busca, Notícias, etc. Acontece que as páginas são inter-relacionadas, ou seja, a página Home pode ser pai da página Notícias e a página Notícias pode ser pai da página Destaques. A estrutura simplificada da tabela Página é a seguinte:&lt;br /&gt;&lt;table border="1" summary="Estrutura da tabela de Páginas"&gt;&lt;caption&gt;Tabela Páginas&lt;/caption&gt;     &lt;tbody&gt;&lt;tr&gt;             &lt;th&gt;id&lt;/th&gt;             &lt;th&gt;nome&lt;/th&gt;             &lt;th&gt;id_pagina_pai&lt;/th&gt;         &lt;/tr&gt;&lt;tr&gt;             &lt;td&gt;&lt;br /&gt;1&lt;/td&gt;             &lt;td&gt;&lt;br /&gt;Home&lt;/td&gt;             &lt;td&gt;&lt;br /&gt;null&lt;/td&gt;         &lt;/tr&gt;&lt;tr&gt;             &lt;td&gt;&lt;br /&gt;2&lt;/td&gt;             &lt;td&gt;&lt;br /&gt;Notícias&lt;/td&gt;             &lt;td&gt;&lt;br /&gt;1&lt;/td&gt;         &lt;/tr&gt;&lt;tr&gt;             &lt;td&gt;&lt;br /&gt;3&lt;/td&gt;             &lt;td&gt;&lt;br /&gt;Destaques&lt;/td&gt;             &lt;td&gt;&lt;br /&gt;2&lt;/td&gt;         &lt;/tr&gt;&lt;tr&gt;             &lt;td&gt;&lt;br /&gt;4&lt;/td&gt;             &lt;td&gt;&lt;br /&gt;Busca&lt;/td&gt;             &lt;td&gt;&lt;br /&gt;1&lt;/td&gt;         &lt;/tr&gt;&lt;tr&gt;             &lt;td&gt;&lt;br /&gt;5&lt;/td&gt;             &lt;td&gt;&lt;br /&gt;Menu&lt;/td&gt;             &lt;td&gt;&lt;br /&gt;null&lt;/td&gt;         &lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;Como vocês podem ver a coluna id_pagina_pai é uma referência a coluna id da mesma tabela, por exemplo, olhando no registros da tabela podemos ver que a página Destaques é filha de Notícias.&lt;br /&gt;&lt;br /&gt;Este tipo de estrutura &lt;b&gt;hierárquica&lt;/b&gt; é muito comum em muitos softwares e sistemas e no dia-a-dia como relações familiares, grupos e sub-grupos, sistemas de arquivos com suas pastas e sub-pastas e muitos outros. Acontece que bancos de dados relacionais não são as melhores ferramentas para armazenar e manipular estes tipos de informações. Por exemplo, como faríamos para exibir a estrutura da tabela de Páginas mostrada acima em um select html da seguinte forma?:&lt;br /&gt;&lt;br /&gt;&lt;select&gt;     &lt;option&gt;Home&lt;/option&gt;     &lt;option&gt;&amp;nbsp;&amp;nbsp;Busca&lt;/option&gt;     &lt;option&gt;&amp;nbsp;&amp;nbsp;Notícias&lt;/option&gt;     &lt;option&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Destaques&lt;/option&gt;     &lt;option&gt;Menu&lt;/option&gt; &lt;/select&gt;&lt;br /&gt;&lt;br /&gt;No código exemplo que pode ser obtido abaixo eu demonstro a forma que eu encontrei para fazer isso. Provavelmente não é a melhor forma, mas resolveu meu caso muito bem. Só lembrando que em bancos de dados como Oracle e Postgre existem recursos como queries recursivas que ajudam na hora de manipular dados hierárquicos. No exemplo estou usando o banco de dados Mysql.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;A Função que faz a Mágica&lt;/span&gt;&lt;br /&gt;O principal trecho do código é função create_pool_tree, reproduzida abaixo:&lt;br /&gt;&lt;script src="https://gist.github.com/1402880.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Esta função basicamente cria toda a árvore que está armazenada na tabela paginas usando referências dentro de um array. Um pouco difícil de entender? Vamos por partes:&lt;br /&gt;&lt;br /&gt;O primeiro foreach do código basicamente pega todas as páginas e as coloca em um array com uma estrutura pré-preparada. A imagem abaixo vai ilustrar o processo tomando como exemplo os dados da tabela Páginas acima:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-yVo6gHQ1xBU/TtQ5QkdBfyI/AAAAAAAAACI/-iMYHp7AzPU/s1600/pool_tree.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-yVo6gHQ1xBU/TtQ5QkdBfyI/AAAAAAAAACI/-iMYHp7AzPU/s320/pool_tree.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Array $pool&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Cada quadrado destes é um elemento do array $pool. Os nomes &lt;b&gt;Home1&lt;/b&gt;, &lt;b&gt;Noticias2&lt;/b&gt;, &lt;b&gt;Destaques3&lt;/b&gt;, &lt;b&gt;Busca4&lt;/b&gt; e &lt;b&gt;Menu5&lt;/b&gt; são os&amp;nbsp;índices. O&amp;nbsp;índice&amp;nbsp;&lt;b&gt;pagina &lt;/b&gt;dentro de cada item é o objeto pagina. E &lt;b&gt;filhas&lt;/b&gt; é um array vazio por enquanto.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;O próximo foreach vai criar referências onde cada item de $pool vai ser referenciado por uma referência no array filhas de seu pai que também está em $pool. Complicado? A figura abaixo deve ajudar:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-bebYSxTKKFY/TtQ7xy-nhEI/AAAAAAAAACQ/Jj5VKmS0g2M/s1600/pool_tree_references.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://4.bp.blogspot.com/-bebYSxTKKFY/TtQ7xy-nhEI/AAAAAAAAACQ/Jj5VKmS0g2M/s320/pool_tree_references.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Array $pool com as refrências.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Vejam que todos os elementos estão no array e como as referências nos permitem saber a estrutura da árvore. Observem como Home e Menu não são referenciados por ninguém, o que significa que são os nós raízes da árvore.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;O link para download do código exemplo está logo abaixo. São apenas dois arquivos, um de código php e outro com o banco de dados exemplo. Acho que o código não deve ser muito difícil de se adaptar para as necessidades de cada um. Qualquer dúvida, sugestão ou crítica sou todo ouvidos.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://hipercodigo.googlecode.com/files/pooltree.zip"&gt;Link para download de código exemplo&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-875495793182687174?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/875495793182687174/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/11/sobre-como-montar-arvores-armazenadas.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/875495793182687174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/875495793182687174'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/11/sobre-como-montar-arvores-armazenadas.html' title='Sobre como montar árvores armazenadas em bancos de dados relacionais'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-yVo6gHQ1xBU/TtQ5QkdBfyI/AAAAAAAAACI/-iMYHp7AzPU/s72-c/pool_tree.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-293919614317412502</id><published>2011-11-14T19:41:00.000-08:00</published><updated>2011-11-14T19:43:49.226-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flixel'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='power'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Mais um pequeno Jogo que desenvolvi - DarkMatters</title><content type='html'>&lt;a href="http://www.kongregate.com/games/ricardo_sdl/darkmatters"&gt;Link&amp;nbsp;para o jogo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ScreenShot:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-aEN12DiJZLo/TsHe6xXDLXI/AAAAAAAAACA/6BnSDkjEnVk/s1600/screen_shot_gameplay.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-aEN12DiJZLo/TsHe6xXDLXI/AAAAAAAAACA/6BnSDkjEnVk/s1600/screen_shot_gameplay.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Um pequeno jogo desenvolvido usando &lt;a href="http://flixel.org/"&gt;Flixel&lt;/a&gt;&amp;nbsp;e a biblioteca &lt;a href="https://github.com/photonstorm/Flixel-Power-Tools"&gt;Flixel Power Tools&lt;/a&gt;, usada pelo método de colisão usando a transparência dos sprites. Devo dizer que demorei muito mais tempo do que eu imaginava para finalizar este game, e é um jogo bem simples, mesmo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-293919614317412502?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/293919614317412502/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/11/mais-um-pequeno-jogo-que-desenvolvi.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/293919614317412502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/293919614317412502'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/11/mais-um-pequeno-jogo-que-desenvolvi.html' title='Mais um pequeno Jogo que desenvolvi - DarkMatters'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-aEN12DiJZLo/TsHe6xXDLXI/AAAAAAAAACA/6BnSDkjEnVk/s72-c/screen_shot_gameplay.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-2948312611378336210</id><published>2011-10-29T12:09:00.000-07:00</published><updated>2011-10-29T12:10:45.273-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='escapar'/><category scheme='http://www.blogger.com/atom/ns#' term='saída'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='programação'/><title type='text'>Escapar saída htm em PHP</title><content type='html'>Você está escapando a saída de todo o conteúdo inseguro nos seus scripts PHP? E por conteúdo inseguro eu digo tudo o que não for interno da aplicação como qualquer informação enviada pelos usuários, dados de outros servidores, webservices, banco de dados etc.&lt;br /&gt;&lt;br /&gt;Uma boa notícia é que se você usa algum dos modernos frameworks php (&lt;a href="http://codeigniter.com/"&gt;Code Igniter&lt;/a&gt;, &lt;a href="http://www.symfony-project.org/"&gt;Symfony&lt;/a&gt;, &lt;a href="http://cakephp.org/"&gt;Cake PHP&lt;/a&gt;) corretamente ele provavelmente já está cuidando disso para você, mas é bom você checar só por precaução. O problema é que muitos de nós desenvolvedores PHP temos sites ou sistemas que já tem um bom tempo de estrada e não usam nenhum framework.&lt;br /&gt;&lt;br /&gt;Agora, você deve estar se perguntando, o que é este negócio de escapar a saída (&lt;b&gt;output escape&lt;/b&gt;)?! Bem, como você deve saber desde os primórdios da internet a principal função de um browser web é exibir documentos html. E um documento html nada mais é do que um arquivo de texto, formado por tags html e texto puro. Aqui vai um exemplo de um típico trecho de um documento html:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1324855.js"&gt; &lt;/script&gt;&lt;br /&gt;Como você pode ver neste trecho de html temos um pouco texto comum, mas também temos as nossas famosas tags. As tags nada mais são do que comandos para o browser. Insira um imagem aqui, uma parágrafo aqui e crie uma div neste ponto...&lt;br /&gt;&lt;br /&gt;Como o browser identifica estas tags? Através de caracteres especiais como &lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt; e&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt; &amp;gt;&lt;/span&gt;&lt;/b&gt;. Existem alguns outros caracteres importantes como &lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;'&lt;/span&gt;&lt;/b&gt;, &lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;"&lt;/span&gt;&lt;/b&gt; e &lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&amp;amp;&lt;/span&gt;&lt;/b&gt;. E o que isso tem a ver com escape de saída? Bom imagine que em um blog um dos usuários insira um comentário com um conteúdo como este:&lt;br /&gt;&lt;script src="https://gist.github.com/1324874.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;O que você acha que vai acontecer? Bom o browser de qualquer visitante que exibir este comentário vai executar o que quer que esteja no script perdeu_mane.js. Podem ser ações desde de redirecionar o usuário, exibir anúncios, quebrar o layout do site, roubar senhas e cookies, e até mesmo fazer com que usuários logados com previlégios de administrador executem ações no site. Isso meu amigo, é o famoso ataque XSS(&lt;a href="http://pt.wikipedia.org/wiki/Cross-site_scripting"&gt;Cross-site Scripting&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Escapar a saída nada mais é do que exibir aqueles caracteres especiais de uma forma representativa fazendo com que o browser não execute nenhuma ação disparada por tags. Neste caso &lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt; e &lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt; são escritos como &lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&amp;amp;lt;&lt;/span&gt;&lt;/b&gt; e &lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&amp;amp;gt;&lt;/span&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Uau! E como eu faço isso? Bom, escapar exibição de html em PHP não é particularmente difícil.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Exibir texto simples em uma página web:&lt;/span&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1324904.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Exibir text simples dentro de uma tag html:&lt;/span&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1324909.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Se você sempre usa aspas-duplas &lt;b&gt;"&lt;/b&gt; nas suas tags, como por exemplo &amp;lt;input type="text" name="nome aqui" /&amp;gt; você pode usar ENT_COMPAT ao invés de ENT_QUOTES. ENT_COMPAT diz para a função transformar apenas as aspas-duplas, ENT_QUOTES vai transformar tanto aspas-duplas quanto aspas-simples.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Importante! Quando escapar a saída?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Você deve estar pensando que ao invés de ficar sempre chamando a função htmlspecialchars na hora de exibir o conteúdo você pode chamá-la apenas uma vez na hora de salvar o conteúdo? Talvez não seja uma boa ideia, hoje em dia é muito provável que você não vai exibir seu conteúdo apenas em páginas html, você também tem rss, json, csv, arquivos texto, emails e outras opções. Para cada uma destas opções de exibir conteúdo o processo de escape é diferente. Se você quiser salvar processamento você pode armazenar uma versão inalterada do conteúdo junto com versões já escapadas de acordo com sua necessidade.&lt;br /&gt;&lt;br /&gt;Por enquanto é isso pessoal, espero que o artigo seja útil a vocês.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-2948312611378336210?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/2948312611378336210/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/10/escapar-saida-htm-em-php.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2948312611378336210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2948312611378336210'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/10/escapar-saida-htm-em-php.html' title='Escapar saída htm em PHP'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-8372245709255107107</id><published>2011-09-17T20:43:00.000-07:00</published><updated>2011-09-17T20:43:29.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='64-bit'/><category scheme='http://www.blogger.com/atom/ns#' term='dicas'/><category scheme='http://www.blogger.com/atom/ns#' term='32-bit'/><title type='text'>Rodar aplicativos 32-bit no Linux 64-bit</title><content type='html'>Computador novo, nova instalação do Ubuntu, desta vez a versão 11.04. E desta vez a versão 64-bit do sistema operacional, afinal, agora eu tenho 8 GB de memória ram e sistemas 32-bit não podem reconhecer mais do que 4 GB.&lt;br /&gt;&lt;br /&gt;Quando estava testando alguns programas que costumava rodar no sistema antigo, como o flashplayerdebugger, o sistema estava me retornando uma mensagem dizendo que não tinha encontrado o arquivo ou diretório, apesar do caminho estar correto. Depois que algumas buscas sem resultado algum tive a ideia de que o problema poderia ser o fato de agora o programa estar em um sistema operacional 64-bit. Procurei para se achava uma versão 64-bit do flashplayerdebugger sem sucesso. Então procurei como rodar programas 32-bit em um sistema 64-bit.&lt;br /&gt;&lt;br /&gt;Finalmente encontrei este &lt;a href="http://stefaanlippens.net/32bit_executable_on_64bit_machine"&gt;post&lt;/a&gt;. Instalei a biblioteca indicada ia32-libs e pude rodar o programa. Aparentemente existem diversos problemas para rodar aplicativos 32-bit em ambientes 64-bit, pelo menos no linux. Este outro &lt;a href="http://maketecheasier.com/run-32-bit-apps-in-64-bit-linux/2009/08/10"&gt;post&lt;/a&gt; pode ajudar a resolver os problemas de compatibilidade das bibliotecas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-8372245709255107107?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/8372245709255107107/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/09/rodar-aplicativos-32-bit-no-linux-64.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8372245709255107107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8372245709255107107'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/09/rodar-aplicativos-32-bit-no-linux-64.html' title='Rodar aplicativos 32-bit no Linux 64-bit'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-5424992275566215604</id><published>2011-09-10T09:50:00.000-07:00</published><updated>2011-09-10T09:50:55.265-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jogos'/><category scheme='http://www.blogger.com/atom/ns#' term='darkness'/><category scheme='http://www.blogger.com/atom/ns#' term='brasil'/><category scheme='http://www.blogger.com/atom/ns#' term='light'/><category scheme='http://www.blogger.com/atom/ns#' term='kickstarter'/><title type='text'>Jogo brasileiro no KickStarter</title><content type='html'>Olá pessoal! Só um post rápido para ajudar a divulgar o game &lt;a href="http://www.thelightofthedarkness.com/blog/"&gt;The Light of The Darkness&lt;/a&gt;. Este game está sendo desenvolvido por uma equipe brasileira e atualmente eles estão buscando financiamento no site &lt;a href="http://www.kickstarter.com/"&gt;kickstarter&lt;/a&gt;. Este site permite que qualquer pessoa possa investir no projeto (eles chamam isso de crowd funding). Você entra no site, escolhe uma quantia que você quer investir no projeto e recebe algum mimo como retorno de acordo com a quantia que você investiu. No caso do The Light of Darkness você pode receber desde wallpapers do jogo, um cópia do jogo no dia do lançamento e até ter o logo de sua empresa como patrocinadora do projeto junto com um vídeo de divulgação.&lt;br /&gt;&lt;br /&gt;Quanto ao &lt;a href="http://www.thelightofthedarkness.com/"&gt;jogo&lt;/a&gt;, ele parece uma excelente mistura de ação, aventura e exploração com gráficos 2D de alta qualidade. Espero que eles consigam juntar a quantia de que precisam, é legal ver estas iniciativas de densenvolvimento de jogos no Brasil.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-5424992275566215604?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/5424992275566215604/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/09/jogo-brasileiro-no-kickstarter.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5424992275566215604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5424992275566215604'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/09/jogo-brasileiro-no-kickstarter.html' title='Jogo brasileiro no KickStarter'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-8123831264805125946</id><published>2011-08-22T13:40:00.000-07:00</published><updated>2011-08-22T13:40:37.971-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='terminator'/><category scheme='http://www.blogger.com/atom/ns#' term='dicas'/><category scheme='http://www.blogger.com/atom/ns#' term='terminal'/><title type='text'>Terminator</title><content type='html'>Não. Este post não é para falar sobre o filme "Exterminador do Futuro". Vim aqui para falar da excelente ferramenta chamada &lt;a href="https://launchpad.net/terminator"&gt;Terminator&lt;/a&gt;. É uma ferramenta que permite abrir mais de um terminal em uma mesma janela. Uma mão na roda de pessoas que usam bastante a linha de comando como administradores de sistema e programadores da velha guarda.&lt;br /&gt;Para instalar dá uma olhada neste &lt;a href="http://www.tenshu.net/p/terminator.html"&gt;artigo&lt;/a&gt;&amp;nbsp;e procure pela sua distro.&lt;br /&gt;Aqui vão algumas dicas para os comandos mais comuns:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 13px;"&gt;ctr+shift+o - Abre uma janela horizontal.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-size: 13px;"&gt;ctr+shift+e - Abre uma janela vertical.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-size: 13px;"&gt;ctr+shift+w - Fecha a janela atual.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-size: 13px;"&gt;ctr+shift+x - Minimiza/maximiza a janela atual.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-size: 13px;"&gt;ctr+shift+setas - Muda o tamanho da janela atual.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-size: 13px;"&gt;alt+setas - Para mudar de uma janela para outra.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Você também pode se sentir um verdadeiro hacker de filmes com vários terminais abertos ao mesmo tempo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-8123831264805125946?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/8123831264805125946/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/08/terminator.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8123831264805125946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8123831264805125946'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/08/terminator.html' title='Terminator'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-8348535137707561412</id><published>2011-08-03T19:43:00.000-07:00</published><updated>2011-08-03T19:43:01.011-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='opinião'/><title type='text'>As grandes Lojas Varejistas mataram o ano do Linux</title><content type='html'>Computadores de desempenho decente realmente estão baratos hoje em dia. Trinta anos atrás eram coisa de ficção científica, ocupando prédios inteiros e eram cheios de luzes piscantes. Quinze anos atrás já cabiam em uma mesa mas custavam o mesmo que um carro talvez um fusca. Hoje em dia com um pouco mais de um salário mínimo você compra um computador "de escritório" para acessar a internet, ver vídeos, jogar jogos Flash e eventualmente trabalhar em uma planilha do eletrônica ou documento de texto.&lt;br /&gt;&lt;br /&gt;Vez ou outra vejo propagandas destas grandes lojas varejistas como Casas Bahia, Ricardo Eletro, etc anunciando computadores "de escritório" mais ou menos pelo preço citado acima. O que me chama atenção é a ênfase de algumas lojas em dizer que o computador é com "&lt;b&gt;com Windows"&lt;/b&gt;. Principalmente a Ricardo Eletro que ainda adiciona "&lt;b&gt;atenção é com Windows!&lt;/b&gt;".&amp;nbsp;Já testemunhei muitas histórias de pessoas que compraram estes computadores mais baratos, percebem que eles vêm com uma versão desconhecida e&amp;nbsp;&lt;a href="http://meiobit.com/19708/teched-2008-linux-marcando-presenca/"&gt;sinistra&lt;/a&gt; do Linux (como se o Linux já não fosse sinistro o suficiente para pessoas que só conhecem o Windows) e optam por instalarem o Windows.&lt;br /&gt;&lt;br /&gt;É irônico que o Linux tenha se tornado&amp;nbsp;uma desvantagem competitiva na hora de vender computadores, já que ter ele instalado por padrão deveria pelo menos ajudar a diminuir o preço total da máquina.&lt;br /&gt;&lt;br /&gt;Acredito que alguns fatores ajudaram para que esta situação acontecesse. Para começar, as próprias pessoas que compram estes computadores. A maioria delas não deve dar a mínima para qual SO está instalado no computador, elas querem apenas comprar (em muitas parcelas!), ligar o computador e usarem o que já estão acostumadas a usar. Quando vêem aquela interface estranha, ícones diferentes, nomes que elas nunca viram e não acham os programas que estão acostumas a usar, ficam perdidas resolvem instalar o&lt;br /&gt;bom Windows velho de guerra que conhecem do trabalho, da escola, caso do amigo etc. Até aí tudo bem, não sou contra este pragmatismo. O problema é quando usam cópias piratas para isso, afinal no nosso país pagar por software é um conceito tão estranho quanto comer carne de cachorro. Isso não só desvaloriza o Windows como o Linux também. Na verdade é um problema cultural pois já vi pessoas que poderiam muito bem dispor de R$400,00 por uma cópia do Windows mas preferem a versão "jeitinho brasileiro".&lt;br /&gt;&lt;br /&gt;Outro fator que joga contra o Linux são estas empresas e fabricantes que instalam estas versões, "customizadas" pelo próprio capeta, nos computadores vendidos. Mesmo que a pessoa resolva dar uma chance ao Linux vai ficar perdida usando uma distribuição Linux que não tem todo o suporte e comunidade da Ubuntu por exemplo.&lt;br /&gt;&lt;br /&gt;Finalmente temos as próprias lojas varejistas. Como já disse, com o Linux instalado em um computador por padrão o preço total da máquina diminuiria. Mas estas lojas não se esforçam nem um pouco em explicar que sem um Windows OEM instalado o preço já chamativo diminuiria um pouco mais.&lt;br /&gt;&lt;br /&gt;No final tudo se resume a negócios e praticidade. A Microsoft ganha o dela vendendo suas cópias de Windows OEM, as lojas vendem seus computadores "com Windows" e o usuário pode usar o que ele sempre usou e legalizado!&lt;br /&gt;&lt;br /&gt;Pelo menos nos servidores o Linux já tem o seu lugar garantido e no mundo mobile &lt;a href="http://www.android.com/"&gt;ele&lt;/a&gt; tem muita briga pela frente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-8348535137707561412?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/8348535137707561412/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/08/as-grandes-lojas-varejistas-mataram-o.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8348535137707561412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8348535137707561412'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/08/as-grandes-lojas-varejistas-mataram-o.html' title='As grandes Lojas Varejistas mataram o ano do Linux'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-3889601071689907335</id><published>2011-07-25T19:54:00.000-07:00</published><updated>2011-07-25T19:54:09.189-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Template para design de games</title><content type='html'>Neste &lt;a href="http://www.lunargiantstudios.com/blog/game-design-document-template"&gt;post&lt;/a&gt; do &lt;a href="http://www.lunargiantstudios.com/blog/"&gt;blog&lt;/a&gt; da lunargiantstudios o autor disponibilizou um template do documento de game design de um jogo. Este documento é basicamente o planejamento de como o jogo vai ser. Para os interessados em game design e desenvolvimento de jogos vale a pena conferir.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-3889601071689907335?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/3889601071689907335/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/07/template-para-design-de-games.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3889601071689907335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3889601071689907335'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/07/template-para-design-de-games.html' title='Template para design de games'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-8881843762018814551</id><published>2011-07-19T21:08:00.000-07:00</published><updated>2011-07-23T16:58:21.307-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flixel'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='linker'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>New game on the block</title><content type='html'>Olá pessoal! Já faz algum tempo que estou trabalhando em um pequeno jogo flash que acabei de publicar no site &lt;a href="http://www.kongregate.com/"&gt;kongregate&lt;/a&gt;. O jogo se chama &lt;a href="http://www.kongregate.com/games/ricardo_sdl/linker"&gt;&lt;b&gt;Linker&lt;/b&gt;&lt;/a&gt; e é bem simples na verdade. Aqui vai um screenshot do jogo:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.kongregate.com/games/ricardo_sdl/linker"&gt;&lt;img border="0" height="216" src="http://4.bp.blogspot.com/-k4cLzkBoo1I/TiZSTrn92dI/AAAAAAAAAB8/mBp08e1tYlA/s400/screen-shot-linker.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;Seu objetivo é coletar todas as moedas de prata evitando os inimigos, um único toque e lá se vai uma vida. Seu único poder é quando você coleta a "moeda estrela", que lhe dá o poder de se conectar com os inimigos formando um elo entre vocês. Depois o disso o jogador pode colocar os inimigos presos no elo para dormir por algum tempo.&lt;br /&gt;&lt;br /&gt;Este é primeiro jogo que realmente publico, e (espero!) que venham outros. Joguem &lt;a href="http://www.kongregate.com/games/ricardo_sdl/linker"&gt;lá&lt;/a&gt; e me dêem suas opiniões.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-8881843762018814551?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/8881843762018814551/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/07/new-game-on-block.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8881843762018814551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8881843762018814551'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/07/new-game-on-block.html' title='New game on the block'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-k4cLzkBoo1I/TiZSTrn92dI/AAAAAAAAAB8/mBp08e1tYlA/s72-c/screen-shot-linker.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-170846020752510134</id><published>2011-07-04T20:16:00.000-07:00</published><updated>2011-07-04T20:16:17.494-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='requisição'/><category scheme='http://www.blogger.com/atom/ns#' term='post'/><category scheme='http://www.blogger.com/atom/ns#' term='dicas'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Enviar requisição post com curl e PHP</title><content type='html'>Dica rápida para fazer a linguagem PHP enviar uma requisição to tipo post (no mesmo estilo que um formulário html com method="post") para uma url qualquer.&lt;br /&gt;&lt;br /&gt;Aqui está o código que envia a requisição post:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1064196.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;E aqui está o código que recebe a requisição post, processa os valores enviados e retorna o resultado como um trecho de html:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1064199.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Inspiração original para o código e post no &lt;a href="http://php.dzone.com/news/execute-http-post-using-php-cu"&gt;php dev zone&lt;/a&gt;.&lt;br /&gt;Bem, é isso aí. Qualquer coisa use sua liberdade de expressão nos comentários.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-170846020752510134?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/170846020752510134/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/07/enviar-requisicao-post-com-curl-e-php.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/170846020752510134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/170846020752510134'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/07/enviar-requisicao-post-com-curl-e-php.html' title='Enviar requisição post com curl e PHP'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-7649464680668750109</id><published>2011-06-19T14:14:00.000-07:00</published><updated>2011-06-19T14:14:41.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mensagem'/><category scheme='http://www.blogger.com/atom/ns#' term='golpe'/><category scheme='http://www.blogger.com/atom/ns#' term='utilidade'/><category scheme='http://www.blogger.com/atom/ns#' term='pública'/><category scheme='http://www.blogger.com/atom/ns#' term='celular'/><title type='text'>Serviço de Utilidade Pública</title><content type='html'>Olhem só que interessante! Acabei de receber duas mensagens SMS com o seguinte conteúdo:&lt;br /&gt;&lt;b&gt;(+732) Sua linha movel foi premiada a uma "CASA" no valor de 79MIL pelo apresentador (CELSO PORTIOLLI) p/ + inf: ligue 0218591606447 Senha.99999&lt;/b&gt;&lt;br /&gt;A mensagem veio do número &lt;b&gt;55-8597064785&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Ó quanta felicidade!&lt;br /&gt;&lt;br /&gt;Mas falando sério, isto claramente é um &lt;b&gt;golpe&lt;/b&gt;. Provavelmente aplicado por presidiários com tempo e celulares de sobra. Já há algum tempo este golpe vem sendo praticado. Basta buscar por partes desta mensagem SMS na internet para achar vários links com pessoas relatando terem recebido as mensagens e com dúvidas sobre sua veracidade. Só muda o valor do prêmio ou nome do apresentador e emissora. Neste &lt;a href="http://www.itamarajunoticias.com.br/index.php?option=com_content&amp;amp;view=article&amp;amp;id=721:itamarajuense-cai-no-golpe-do-torpedo-premiado&amp;amp;catid=151:contra-patrimonio"&gt;artigo&lt;/a&gt; temos um relato sobre uma vítima do golpe.&lt;br /&gt;&lt;br /&gt;Geralmente estas mensagens vêm recheadas com erros de português e pedem para que a vítima ligue para um número de celular. Ligando eles pedem para que a vítima transifira dinheiro para uma conta bancária, façam recargas para&amp;nbsp; outros celulares ou "doações" para hospitais que cuidam de criancinhas órfãs com câncer. Promoções ou concursos legítimos não apresentam estes gastos para o ganhador, e se você nunca efetivamente se inscreveu em algum concurso ou promoção provavelmente só tem chances de cair em um golpe e não de ganhar qualquer prêmio.&lt;br /&gt;&lt;br /&gt;Fica a dica pessoal.&lt;br /&gt;&lt;br /&gt;PS: Interessante como eles colocaram casa entre aspas na mensagem que recebi. Denotando a ironia de "&lt;b&gt;ganhar uma casa&lt;/b&gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-7649464680668750109?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/7649464680668750109/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/06/servico-de-utilidade-publica.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/7649464680668750109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/7649464680668750109'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/06/servico-de-utilidade-publica.html' title='Serviço de Utilidade Pública'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-5489503388940328555</id><published>2011-05-28T12:58:00.000-07:00</published><updated>2011-05-28T12:58:58.314-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ftp'/><category scheme='http://www.blogger.com/atom/ns#' term='phpinfo'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Info.php</title><content type='html'>Qual desenvolvedor PHP que de vez em sempre não precisa rodar o famoso comando phpinfo() em um servidor para ver quais extensões e recursos estão instalados?&lt;br /&gt;&lt;br /&gt;E como não é chato ter que criar um arquivo info.php, lembrar corretamente do nome da função, é phpinfo() ou php_info() graças a padronização dos nomes de funções no PHP? Ter que conectar no servidor via ftp ou rsync, enviar o arquivo etc.&lt;br /&gt;&lt;br /&gt;Não seria bem melhor ter um script pronto em um lugar estratégico e fácil de lembrar, rodá-lo e depois só acessar o endereço do site no browser e consultar a saída do phpinfo()?&lt;br /&gt;&lt;br /&gt;Pensando nisso eu criei um pequeno script PHP que faz exatamente isso. Como o nome de generate_info.php basta abri-lo preencher o nome de usuário, password e endereço do servidor (só ftp por enquanto), dar permissão de execução para o script e rodá-lo assim "&lt;b&gt;./generate_info.php&lt;/b&gt;". Prontinho! Basta acessar seu servidor na pasta indicada no endereço do servidor colocando o nome "info.php" no fim da url para ver a saída gerada.&lt;br /&gt;&lt;br /&gt;Ah! Mais uma coisa! Não é muito seguro deixar este tipo de arquivo no seu servidor já que ele pode revelar muitas informações para pessoas mal intencionadas. Se você rodar o comando usando o parâmetro "-d" o arquivo info.php será excluído, ex: "&lt;b&gt;./generate_info.php -d&lt;/b&gt;".&lt;br /&gt;&lt;br /&gt;Para a galera do Windows estes comandos devem funcionar:&lt;br /&gt;&lt;b&gt;php.exe -f "generate_info.php"&lt;/b&gt; (criar o arquivo)&lt;br /&gt;&lt;b&gt;php.exe -f "generate_info.php" -- -d&lt;/b&gt; (excluir o arquivo)&lt;br /&gt;&lt;br /&gt;Use este comando se você tiver o svn instalado para obter o script:&lt;br /&gt;svn checkout http://hipercodigo.googlecode.com/svn/trunk/generate_info&lt;br /&gt;&lt;br /&gt;Ou você pode acessar o arquivo diretamente neste endereço:&lt;br /&gt;http://hipercodigo.googlecode.com/svn/trunk/generate_info/generate_info.php&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-5489503388940328555?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/5489503388940328555/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/05/infophp.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5489503388940328555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5489503388940328555'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/05/infophp.html' title='Info.php'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-2542194867168919883</id><published>2011-05-15T18:11:00.000-07:00</published><updated>2011-05-15T18:11:27.873-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dados'/><category scheme='http://www.blogger.com/atom/ns#' term='postgre'/><category scheme='http://www.blogger.com/atom/ns#' term='banco'/><category scheme='http://www.blogger.com/atom/ns#' term='dicas'/><category scheme='http://www.blogger.com/atom/ns#' term='postgres'/><title type='text'>Número de conexões no banco de dados Postgre</title><content type='html'>No lugar onde trabalho não possuo acesso a estatísticas e recusos administrativos do servidor de banco de dados postgre.&amp;nbsp;Talvez fruto de um ciúme doentio da equipe de banco de dados com seus preciosos servidores.&amp;nbsp;De qualquer forma precisei ver como estava o número de conexões com o servidor,&amp;nbsp;e felizmente o postgre permite que estes número sejam acessados através de simples comandos sql.&lt;br /&gt;&lt;br /&gt;Lembre-se de que as configurações para coleta de estatísticas devem estar habilitadas. Estas opções adicionam alguma penalidade na execução de queries. Por padrão as opções que permitem usarmos o comando sql apresentado aqui ficam habilitadas. Caso este não seja seu caso dê uma olhada no arquivo postgresql.conf. Mais detalhes no &lt;a href="http://www.postgresql.org/docs/8.4/static/runtime-config-statistics.html"&gt;manual&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Finalmente aqui vai o comando:&lt;br /&gt;&lt;b&gt;select datname, count(*) from pg_stat_activity group by datname;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Com este comando podemos ver o número de conexões ativas no momento de execução agrupando-as pelo nome do banco de dados.&lt;br /&gt;A saída será semelhante a isso:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;datname &amp;nbsp;| count&lt;br /&gt;-----------+-------&lt;br /&gt;&amp;nbsp;testdb &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; 5&lt;br /&gt;&amp;nbsp;template1 | &amp;nbsp; &amp;nbsp; 1&lt;br /&gt;(2 rows)&lt;br /&gt;&lt;br /&gt;A tabela pg_stat_activity também tem outras colunas com outras informações interessantes:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;datid&lt;/b&gt; - oid do banco de dados&lt;br /&gt;&lt;b&gt;datname&lt;/b&gt; - nome do banco de dados&lt;br /&gt;&lt;b&gt;procpid&lt;/b&gt; - id do processo&lt;br /&gt;&lt;b&gt;usesysid&lt;/b&gt; - OID do usuário&lt;br /&gt;&lt;b&gt;usename&lt;/b&gt;&amp;nbsp;- nome do usuário&lt;br /&gt;&lt;b&gt;current_query&lt;/b&gt;&amp;nbsp;- query sendo executada atualmente&lt;br /&gt;&lt;b&gt;waiting&lt;/b&gt;&amp;nbsp;- status de espera da query&lt;br /&gt;&lt;b&gt;xact_start&lt;/b&gt;&amp;nbsp;- horário em que a transação atual começou a executar&lt;br /&gt;&lt;b&gt;query_start&lt;/b&gt;&amp;nbsp;- horário em que a query começou a executar&lt;br /&gt;&lt;b&gt;backend_start&lt;/b&gt;&amp;nbsp;- horário em que o processo foi iniciado&lt;br /&gt;&lt;b&gt;client_addr&lt;/b&gt;&amp;nbsp;- Endereço do cliente&lt;br /&gt;&lt;b&gt;client_port&lt;/b&gt;&amp;nbsp;- Porta do cliente&lt;br /&gt;&lt;br /&gt;As colunas que mostram informações sobre a query só podem ser vistas pelo super usuário ou se o usuário que estiver vendo as informações for o mesmo do processo que está sendo listado.&lt;br /&gt;Está aí pessoal uma dica rápida, espero que seja útil à vocês.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-2542194867168919883?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/2542194867168919883/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/05/numero-de-conexoes-no-banco-de-dados.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2542194867168919883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2542194867168919883'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/05/numero-de-conexoes-no-banco-de-dados.html' title='Número de conexões no banco de dados Postgre'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-8098672938211322117</id><published>2011-04-19T19:20:00.000-07:00</published><updated>2011-04-19T19:20:47.918-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparação'/><category scheme='http://www.blogger.com/atom/ns#' term='tabela'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP - Trollando os programadores desde 1995</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-X20T0fvAGB0/Ta5CK-BOJuI/AAAAAAAAAB4/lGoXCOQ5rBM/s1600/7unV7.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="281" src="http://3.bp.blogspot.com/-X20T0fvAGB0/Ta5CK-BOJuI/AAAAAAAAAB4/lGoXCOQ5rBM/s400/7unV7.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ora não foi por isso que eles inventaram o operador "==="?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-8098672938211322117?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/8098672938211322117/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/04/php-trollando-os-programadores-desde.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8098672938211322117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8098672938211322117'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/04/php-trollando-os-programadores-desde.html' title='PHP - Trollando os programadores desde 1995'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-X20T0fvAGB0/Ta5CK-BOJuI/AAAAAAAAAB4/lGoXCOQ5rBM/s72-c/7unV7.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-9192410489210274052</id><published>2011-03-17T08:34:00.000-07:00</published><updated>2011-07-13T13:25:19.605-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='utf-8'/><category scheme='http://www.blogger.com/atom/ns#' term='encoding'/><category scheme='http://www.blogger.com/atom/ns#' term='postgre'/><category scheme='http://www.blogger.com/atom/ns#' term='latin1'/><category scheme='http://www.blogger.com/atom/ns#' term='iso-8859-1'/><category scheme='http://www.blogger.com/atom/ns#' term='postgres'/><title type='text'>Criar banco de dados Postgre com encoding Latin1 em um sistema UTF-8</title><content type='html'>Estes dias eu estava passando por uma pequena dor de cabeça. Meu sistema operacional que uso para desenvolvimento (Ubuntu 10.10) está configurado com o encoding utf-8 e o locale para pt_BR. Acontece que eu estava tentando usar o pgAdmin III para criar um banco de dados com encoding Latin1 (o nosso famoso &lt;b&gt;ISO-8859-1&lt;/b&gt;). Eu abria o pgAdmin, mandava criar um novo banco de dados, dava um nome para ele, na opção codificação escolhia LATIN1, dava ok, e pimba! Recebia a seguinte mensagem:&lt;br /&gt;&lt;b&gt;Um erro ocorreu:&lt;br /&gt;&lt;br /&gt;ERRO:&amp;nbsp; codificação LATIN1 não corresponde a configuração regional pt_BR.utf8&lt;br /&gt;DETALHE:&amp;nbsp; A definição de LC_TYPE escolhida requer codificação UTF8.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Eu recitava uma meia-dúzia de nomes feitos mas não sabia o que fazer. Eis que a luz veio da singela &lt;a href="http://stackoverflow.com/questions/4929180/configuring-locales-on-linux-for-postgresql/4930772#4930772"&gt;resposta&lt;/a&gt; deste cara no StackOverflow. Fui para o terminal, loguei como o usuário postgres, e executei o comando da seguinte forma:&lt;br /&gt;&lt;b&gt;createdb -T template0 NOME_BANCO -E LATIN1 --locale=pt_BR&lt;/b&gt;&lt;br /&gt;E pimba novamente! (Desta vez um pimba bom). Funcionou mesmo, tenho um banco chamado NOME_BANCO com encoding LATIN1 em meio a outros bancos com encoding UTF-8.&lt;br /&gt;&lt;br /&gt;StackOverflow salva o dia novamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-9192410489210274052?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/9192410489210274052/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/03/criar-banco-de-dados-postgre-com.html#comment-form' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/9192410489210274052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/9192410489210274052'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/03/criar-banco-de-dados-postgre-com.html' title='Criar banco de dados Postgre com encoding Latin1 em um sistema UTF-8'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-2219379864882860112</id><published>2011-03-10T08:17:00.000-08:00</published><updated>2011-07-19T21:12:21.640-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jogos'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='música'/><title type='text'>Conheça toda a glória das músicas de Jogos!</title><content type='html'>&lt;div align="center"&gt;&lt;a href="http://www.sembeo.com/"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://www.sembeo.com/gtfo-awesomeness/"&gt;Acessem aqui!&lt;/a&gt; &lt;/div&gt;&lt;div style="text-align: center;"&gt;Quem fez isso merece todo o respeito e admiração do mundo.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-2219379864882860112?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/2219379864882860112/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/03/conheca-toda-gloria-das-musicas-de.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2219379864882860112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2219379864882860112'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/03/conheca-toda-gloria-das-musicas-de.html' title='Conheça toda a glória das músicas de Jogos!'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-4497049854068083032</id><published>2011-02-21T20:03:00.000-08:00</published><updated>2011-02-22T04:40:21.174-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filezilla'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Acabando com as entradas de sites repetidas do Filezilla</title><content type='html'>No local onde trabalho para pagar as contas, eu e toda a equipe que trabalha comigo usamos regularmente o programa Filezilla para transferências de arquivos por ftp, para atualizar os servidores web rodando nosso código PHP por exemplo. Pessoalmente acho o FTP lento e ele possui poucos recursos comparado com alternativas bem melhores como &lt;a href="http://en.wikipedia.org/wiki/Rsync"&gt;rsync&lt;/a&gt;. Uma brincadeira com o acrônimo F.T.P é que ele significa "Foi-se o Tempo Peixe".&amp;nbsp;Por motivos alheios a mim ainda usamos FTP.&lt;br /&gt;&lt;br /&gt;O Filezilla é um excelente programa para fazer transferências FTP. Mas temos um pequeno problema com ele. Quando importamos um arquivo xml com os dados de um servidor FTP gerado pelo Filezilla acabamos com entradas duplicadas na tela "Gerenciador de Sites". Isso é bem frequente no nosso caso pois temos mais ou menos 40 sites. E para completar a bagunça os dados de servidores podem estar diferentes com servidores com senhas ou usuários alterados.&lt;br /&gt;&lt;br /&gt;Pensando numa forma de unificar as listas de servidores FTP geradas pela exportação do Filezilla eu cheguei a um pequeno &lt;a href="http://hipercodigo.googlecode.com/files/filezillaunify.zip"&gt;programa&lt;/a&gt; para fazer isso. É escrito em PHP e funciona na linha de comando. O uso é bem simples, após dar permissão de execução para o arquivo "unify.php" basta executar o seguinte comando:&lt;br /&gt;./unify.php "diretório"&lt;br /&gt;Você deve ter o PHP instalado obviamente. No windows você pode usar algo como php unify.php "diretório".&lt;br /&gt;&lt;br /&gt;Onde está escrito "diretório" você deve colocar o caminho de uma pasta onde todos os arquivos xml gerados pelo Filezilla estão. Depois de processar e mostrar alguma saída o programa vai gerar um arquivo chamado output.xml dentro da pasta output. Pronto! Este arquivo output.xml pode ser importado novamente no programa e deve conter somente entradas únicas. No programa eu considero entradas únicas os servidores que estão registrados com nome de usuário, endereço de servidor e senha diferentes.&lt;br /&gt;&lt;br /&gt;Caso você tenha entradas repetidas no Filezilla, basta você exportar usando a opção "Arquivo-&amp;gt;Exportar...-&amp;gt; Escolha Exportar entradas do gerenciador de websites". O Filezilla irá gerar um arquivo xml. Rode o programa de acordo com o comando mostrado acima, e o arquivo gerado, output.xml, irá conter somente entradas únicas.&lt;br /&gt;&lt;br /&gt;É claro que antes de importar o output.xml você deve limpar os sites já registrados no Filezilla, ou você terá entradas duplicadas novamente. No Filezilla&amp;nbsp;(eu uso a versão 3.2.7.2)&amp;nbsp;aparentemente não tem uma opção para excluir todas &amp;nbsp;as entradas de uma vez só. No linux, você pode apagar manualmente as entradas do arquivo sitemanager.xml localizado em ~/.filezilla/sitemanager.xml. Você pode apagar todas as tags "Server" ou deixar somente uma, assim você só terá que apagar uma quando importar o arquivo output.xml.&lt;br /&gt;&lt;br /&gt;O &lt;a href="http://hipercodigo.googlecode.com/files/filezillaunify.zip"&gt;programa&lt;/a&gt; atualmente considera que todos os sites registrados estão dentro da mesma pasta no Gerenciador de Sites. Provavelmente ele gera um xml diferente para várias pastas. E caso seus arquivos gerados pelo Filezilla sejam muito grandes o programa pode alcançar o limite de memória de execução do script, neste caso você pode aumentar o limite usando "&lt;span class="Apple-style-span" style="color: #222222; font-family: 'Bitstream Vera Sans Mono', Monaco, 'Lucida Console', monospace; font-size: 12px; line-height: 18px; white-space: pre-wrap;"&gt;ini_set('memory_limit', '128M');&lt;/span&gt;" dentro do próprio script logo na primeira linha php.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-4497049854068083032?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/4497049854068083032/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/02/acabando-com-as-entradas-de-sites.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4497049854068083032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4497049854068083032'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/02/acabando-com-as-entradas-de-sites.html' title='Acabando com as entradas de sites repetidas do Filezilla'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-895115252830306223</id><published>2011-01-30T11:18:00.000-08:00</published><updated>2011-01-30T11:21:40.143-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='codeigniter'/><title type='text'>CodeIgniter 2.0 Liberado!</title><content type='html'>Hoje fiquei sabendo do lançamento do CodeIgniter (CI para os íntimos) versão 2.0. Já fazia mais de um ano que eles estavam trabalhando nesta versão. O anúncio oficial do lançamento e informações sobre as mudanças podem ser vistos em todos os detalhes no &lt;a href="http://codeigniter.com/news/codeigniter_2.0.0_released/"&gt;site&lt;/a&gt; oficial.&lt;br /&gt;&lt;br /&gt;Algumas mudanças notáveis foram o abandono da versão 4 do PHP (que já estava na hora, será que alguém ainda usa PHP 4?). Agora o framework tem suporte nativo a &lt;a href="http://en.wikipedia.org/wiki/Query_string"&gt;query strings&lt;/a&gt;, uma falta considerável nas versões passadas na minha opinião. Outra coisa legal foi a adição de suporte para execução de scripts via linha de comando facilitando a criação de cron jobs, se bem que isso já era possível antes com o uso de &lt;a href="https://github.com/philsturgeon/codeigniter-cli"&gt;bibliotecas&lt;/a&gt;. Além disso temos as tradicionais correções de bugs e melhorias no código.&lt;br /&gt;&lt;br /&gt;O CodeIgniter é um framework PHP muito simples de se usar e instalar. Funciona praticamente em qualquer host compartilhado que você encontrar. Além disso te ajudar com todo aquele trabalho feijão com arroz que sempre tem que ser feito em coisas como upload de arquivos, validação de formulários, envio de emails, sql injection, prevenção de ataques XSS etc. Tem uma comunidade muito ativa e uma excelente documentação através de seu &lt;a href="http://codeigniter.com/user_guide/"&gt;guia do usuário&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-895115252830306223?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/895115252830306223/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/01/codeigniter-20-liberado.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/895115252830306223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/895115252830306223'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/01/codeigniter-20-liberado.html' title='CodeIgniter 2.0 Liberado!'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-2069516560826632446</id><published>2011-01-16T17:12:00.000-08:00</published><updated>2011-01-16T17:12:45.358-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='desenvolvimento'/><category scheme='http://www.blogger.com/atom/ns#' term='app'/><category scheme='http://www.blogger.com/atom/ns#' term='sheldon'/><category scheme='http://www.blogger.com/atom/ns#' term='gerencia'/><category scheme='http://www.blogger.com/atom/ns#' term='The big bang theory'/><category scheme='http://www.blogger.com/atom/ns#' term='projetos'/><title type='text'>Sheldon Cooper é um péssimo gerente de projetos</title><content type='html'>Estes dias eu assisti ao&amp;nbsp;12º&amp;nbsp;episódio da 4º temporada de "&lt;a href="http://pt.wikipedia.org/wiki/The_Big_Bang_Theory"&gt;The Big Bang Theory&lt;/a&gt;" onde o personagem Leonard tem a ideia de criar uma app para fazer o reconhecimento de equações através de fotos tiradas pelo telefone. Ele conta a ideia para os outros personagens e os chama para participarem do projeto.&lt;br /&gt;&lt;br /&gt;Este episódio é muito interessante pois ele demonstra através do comportamento do Dr Sheldon o que acontece em muitas equipes engajadas em desenvolver softwares ou outras atividades.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Exagero de detalhes em partes do projeto que não são essenciais para o início da empreitada&lt;/b&gt;. Logo no começo Sheldon traça uma lista indicando os cargos e&amp;nbsp;responsabilidades&amp;nbsp;de cada integrante do projeto. Não que isso seja uma coisa errada, mas ele realmente exagera ao, por exemplo, escolher o líder do comitê de Amigo Secreto (no caso ele mesmo). Isso é muito comum em projetos de desenvolvimento de aplicativos, o que geralmente leva ao fracasso. Um exemplo comum é quando uma equipe resolve detalhar vários casos de uso diferentes para uma aplicação. O que temos que levar em conta é que geralmente um aplicativo deve fazer pelo menos uma coisa bem feita. Tente detalhar esta parte primeiramente e depois mais para frente pense sobre o processo de login do usuário ou como vai ser a disposição do menu.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Não foca em partes do projeto que contribuem para o objetivo principal&lt;/b&gt;. Tem muito a ver com o primeiro ponto mas aqui estamos falando mais de execução do que planejamento. Logo no início do projeto Leonard resolve discutir sobre a interface do programa, o que eu acho que toda equipe de desenvolvimento de software deveria fazer. A primeira e talvez&amp;nbsp;unica&amp;nbsp;coisa que o usuário enxerga de um programa é a sua interface. Para o usuário a interface é o programa. Acertar em uma interface limpa, não ambígua e eficiente já é meio caminho andado em direção ao sucesso quando estamos desenvolvendo aplicativos. Quando Leonard comenta que quer começar a discutir a interface do usuário Sheldon prontamente diz algo como "Estamos ferrados.". Isso sem contar a parte onde no meio do desenvolvimento ele resolve introduzir uma discussão sobre nomes para o aplicativo. Lembrem-se, primeiro façam o aplicativo fazer algo útil depois se preocupem com o resto.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Equipe engessada&lt;/b&gt;. Em determinando momento Sheldon resolve que Raj será responsável pelo suporte telefônico (o que é um pouco racista) e Howard será seu assistente pessoal. Usar dois caras inteligentes como eles (Howard inclusive é um engenheiro) para dar suporte por telefone e comprar comida para o time?! Eu acho que a série realmente exagerou neste ponto, mas o que eu gostaria de comentar é sobre esta postura de definir papéis inflexíveis para os membros de uma equipe. "Você só trabalha com o banco de dados!" "Eu vou somente programar!" "Você cria a interface e nada mais." É claro que temos que ter pessoas que dão a última palavra ou teríamos discussões intermináveis. Mas para um projeto dar certo uma equipe precisa ser extremamente comunicativa e estar aberta a opiniões uns dos outros. Precisamos ter uma visão do projeto como um todo ou chegamos naquele ponto onde cada membro tem sua opinião divergente sobre o real objetivo do que estão fazendo.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Sheldon não sabe trabalhar em equipe&lt;/b&gt;. Eu odiaria trabalhar em uma equipe com alguém como o Sheldon. Ele não sabe expressar suas opiniões para outros membros, ele não consegue ser construtivo ao criticar outra pessoa. Sempre existirão conflitos dentro das equipes responsáveis pelos projetos, mas sempre que você for criticar o trabalho de outra pessoa tenha argumentos lógicos e evite usar de oratória vazia ou sua posição ou status.&lt;/li&gt;&lt;/ul&gt;Bom pessoal estes são os comentários que eu tenho a fazer sobre o episódio, ele ficou muito bom e recomendo que assistam a série pois ela é muito divertida. E vocês? O que tem a dizer?&lt;br /&gt;&lt;br /&gt;tl;dr&lt;br /&gt;Inicialmente foque nos aspectos que tornam uma aplicação realmente útil. Não crie "ilhas" dentro de sua equipe onde as pessoas não se comunicam. Seja lógico e consistente ou criticar o trabalho de outra pessoa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-2069516560826632446?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/2069516560826632446/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/01/sheldon-cooper-e-um-pessimo-gerente-de.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2069516560826632446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2069516560826632446'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/01/sheldon-cooper-e-um-pessimo-gerente-de.html' title='Sheldon Cooper é um péssimo gerente de projetos'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-3583130757856095522</id><published>2011-01-07T11:39:00.000-08:00</published><updated>2011-01-07T11:40:22.891-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dicas'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Dica Útil</title><content type='html'>Todo programador vez ou outra dá uma olhada no manual de referência de funções da linguagem sendo usada. No PHP esta necessidade é ainda maior já que é sempre muito difícil lembrar se o nome daquela função tem um underline ou qual a ordem correta dos parâmetros. Os desenvolvedores da linguagem PHP não devem gostar de padrões de codificação.&lt;br /&gt;&lt;br /&gt;Aqui vai uma dica para tornar mais rápido o acesso a referência das funções. Eu uso um sistema Linux mas com algumas modificações ela pode ser adaptada para Windows também.&lt;br /&gt;&lt;br /&gt;Crie o arquivo "php.net" no seguinte diretório (ou qualquer diretório disponível no seu PATH):&lt;br /&gt;/usr/local/bin&lt;br /&gt;&lt;br /&gt;Digite o seguinte no arquivo:&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;google-chrome --new-window "http://www.php.net/$1"&lt;br /&gt;&lt;br /&gt;Eu usei o chrome mas você pode usar outros browsers levando em consideração os parâmetros de cada browser.&lt;br /&gt;&lt;br /&gt;Dê permissão de execução com o seguinte comando:&lt;br /&gt;sudo chmod +x /usr/local/bin/php.net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pronto!&lt;br /&gt;Agora você pode digitar na linha de comando ou usando o atalho Alt+F2 no gnome:&lt;br /&gt;php.net str_replace&lt;br /&gt;e uma nova janela do chrome vai abrir na página com o manual da função str_replace.&lt;br /&gt;&lt;br /&gt;É isso aí! Espero que isso possa ajudar a todos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-3583130757856095522?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/3583130757856095522/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/01/todo-programador-vez-ou-outra-da-uma.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3583130757856095522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3583130757856095522'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/01/todo-programador-vez-ou-outra-da-uma.html' title='Dica Útil'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-8248492429860079132</id><published>2011-01-04T09:42:00.000-08:00</published><updated>2011-01-04T09:42:01.538-08:00</updated><title type='text'>Sistema de recomendação de palavras em PHP</title><content type='html'>Você tem ideia de como implementar aqueles algoritmos de recomendação de palavras?&amp;nbsp;Como por exemplo no google onde se você digita "paola olivera" ele ter retorna&amp;nbsp;a página de resultados com a famosa frase "Você quis dizer: paola oliveira".&amp;nbsp;Eu não sei como implementar um e este cara &lt;a href="http://codeviewer.org/view/code:1595"&gt;aqui&lt;/a&gt; provavelmente também não sabe.&amp;nbsp;Mas ele conseguiu o objetivo de uma forma muito criativa utilizando PHP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-8248492429860079132?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/8248492429860079132/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2011/01/sistema-de-recomendacao-de-palavras-em.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8248492429860079132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8248492429860079132'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2011/01/sistema-de-recomendacao-de-palavras-em.html' title='Sistema de recomendação de palavras em PHP'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-1177803013926136794</id><published>2010-11-30T02:54:00.000-08:00</published><updated>2010-11-30T02:54:14.191-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postgre'/><category scheme='http://www.blogger.com/atom/ns#' term='postgres'/><title type='text'>Tamanho em disco de um banco de dados Postgre</title><content type='html'>Como saber quanto espaço em disco seu banco de dados Postgre está usando?&lt;br /&gt;Simples, fácil e rápido:&lt;br /&gt;SELECT pg_database_size('nome_banco');&lt;br /&gt;Este comando exibe o tamanho em bytes.&lt;br /&gt;&lt;br /&gt;Que tal exibir de uma forma mais amigável?&lt;br /&gt;SELECT pg_size_pretty(pg_database_size('nome_banco'));&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-1177803013926136794?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/1177803013926136794/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/11/tamanho-em-disco-de-um-banco-de-dados.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1177803013926136794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1177803013926136794'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/11/tamanho-em-disco-de-um-banco-de-dados.html' title='Tamanho em disco de um banco de dados Postgre'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-1598065819562842792</id><published>2010-11-26T06:54:00.000-08:00</published><updated>2010-12-07T06:37:33.147-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><title type='text'>Eu odeio proxies!</title><content type='html'>Onde trabalho atualmente a rede tem um proxy maldito que bloqueia certos sites. Vez ou outra entro em um endereço e percebo que as imagens não foram carregadas, os gênios que configuraram os endereços bloqueados colocaram sites como&amp;nbsp;&lt;a href="http://aws.amazon.com/s3/"&gt;http://aws.amazon.com/s3/&lt;/a&gt;&amp;nbsp;que muitos outros sites usam para hospedar arquivos e imagens.&lt;br /&gt;&lt;br /&gt;Tive uma ideia juntei algumas bibliotecas php como &lt;a href="http://simplehtmldom.sourceforge.net/"&gt;SimpleHtml&lt;/a&gt; e &lt;a href="http://phpmailer.worxware.com/"&gt;PHPMailer&lt;/a&gt;&amp;nbsp;e criei uma espécie de "enganador de proxy". Você coloca uma url, seu e-mail e escolhe se quer fazer o download somente das imagens ou das páginas do site. O script php vai tentar obter os arquivos e enviar um e-mail para você. Simples assim. O código é uma droga, as vezes não funciona mas na maioria das vezes parece funcionar. Você pode obtê-lo &lt;a href="http://hipercodigo.googlecode.com/files/downloader.zip"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;*Não se esqueça de configurar seu e-mail e password no arquivo downloader.php. Eu usei gmail!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-1598065819562842792?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/1598065819562842792/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/11/eu-odeio-proxies.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1598065819562842792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1598065819562842792'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/11/eu-odeio-proxies.html' title='Eu odeio proxies!'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-3578081629842922762</id><published>2010-09-22T20:25:00.000-07:00</published><updated>2010-09-22T20:25:28.928-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Mude suas idéias sobre o Javascript</title><content type='html'>É do time dos programadores que odeiam Javascript e amaldiçoam o dia em que a linguagem surgiu? Bom no vídeo abaixo Doug Crockford fala das partes boas da linguagem. Ele admite que muita coisa na linguagem é medonha e nos faz duvidar da qualidade da mesma como o operador "+" que serve para somar e concatenar e os erros silenciosos que podem surgir no código entre outras&amp;nbsp;inconveniências. Mas ele comenta que muita coisa chata é devido ao modelo DOM adotado pelos browsers (maior fonte de incompatibilidades). Além do mais a vida de um programador Javascript hoje em dia é bem melhor do que alguns anos atrás, hoje temos bibliotecas como JQuery, ferramentas como FireBug e browsers um pouco mais compatíveis.&lt;br /&gt;&lt;br /&gt;Vendo o cara falar da linguagem com uma certa paixão me fez olhar para ela com outros olhos. Ah! E de quebra a apresentação tem umas partes bem engraçadas.&lt;br /&gt;&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/hQVTIJBZook?fs=1&amp;amp;hl=pt_BR"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/hQVTIJBZook?fs=1&amp;amp;hl=pt_BR" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-3578081629842922762?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/3578081629842922762/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/09/mude-suas-ideias-sobre-o-javascript.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3578081629842922762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3578081629842922762'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/09/mude-suas-ideias-sobre-o-javascript.html' title='Mude suas idéias sobre o Javascript'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-1663814234445590652</id><published>2010-09-15T21:55:00.000-07:00</published><updated>2010-09-16T04:31:56.153-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simpledom'/><category scheme='http://www.blogger.com/atom/ns#' term='google instant'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='instant'/><category scheme='http://www.blogger.com/atom/ns#' term='redtube'/><title type='text'>O Prazer de programar</title><content type='html'>Depois de ver o yahoo fazer um instant search 5 anos atrás (e não ter conseguido emplacar), o google fazer um recentemente e todos os outros que vieram depois (youtube, google maps, twitter, será que existe um instant search para o Osama Bin Laden?) resolvi fazer um ... hã, bem... menos cristão digamos.&lt;br /&gt;&lt;br /&gt;É o RedTube Instant Search. Para quem não conhece o RedTube, se tiver mais de 18 anos é só procurar no google e se não tiver vai acabar procurando mesmo assim né? O processo de funcionamento é bem simples, ele pega o termo de busca digitado envia para o mecanismo de busca do site, lê o html gerado pelo site e retorna o primeiro vídeo do resultado. Para ler o html gerado usei a excelente biblioteca &lt;a href="http://simplehtmldom.sourceforge.net/"&gt;SimpleDOM&lt;/a&gt; que é escrita em PHP mesmo.&lt;br /&gt;&lt;br /&gt;O código está bem cru, não checa por eventuais erros, quando por exemplo não se acha nenhum vídeo a partir do termo desejado. Devo dizer que foi um pouco difícil se concentrar no projeto, depois de testá-lo estava com a mão doendo, de tanto programar é claro. Link para donwload do código logo abaixo:&lt;br /&gt;&lt;br /&gt;Update: Um gentil samaritano cedeu um pouco de espaço para experimentação do programa, não preciso dizer que a página é NSFW. Teste a vontade &lt;a href="http://gdr.geekhood.net/redtube_instant/"&gt;aqui&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://hipercodigo.googlecode.com/files/redtube_instant.zip"&gt;Download&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-1663814234445590652?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/1663814234445590652/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/09/o-prazer-de-programar.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1663814234445590652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1663814234445590652'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/09/o-prazer-de-programar.html' title='O Prazer de programar'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-6611156838649166154</id><published>2010-09-12T13:43:00.000-07:00</published><updated>2010-09-12T13:43:41.874-07:00</updated><title type='text'>Árvores para que te quero?!</title><content type='html'>Atualmente estou lendo o livro "Data Structures And Algorithms" (que pode ser obtido de graça e legalmente &lt;a href="http://dotnetslackers.com/projects/Data-Structures-And-Algorithms/"&gt;aqui&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Meu treinamento formal nestes assuntos foi muito insuficiente e como estas disciplinas são a base de todo o software eu achei que seria muito bom aprender sobre isso.&lt;br /&gt;&lt;br /&gt;Estruturas de dados em forma de árvores não são muito frequentes no desenvolvimento de software web usando bancos de dados relacionais. A não ser naqueles casos onde por exemplo você tem categorias que possuem subcategorias e estas subcategorias podem possuir suas próprias subcategorias, ou no caso de menus e submenus de vários níveis. Uma das causas disso é a própria arquitetura dos bancos de dados relacionais, que não foi pensada para tratar estes casos. Como escrever uma consulta sql que retorne uma categoria e também todas suas subcategorias não importando a quantidade e nem o aninhamento das subcategorias?&lt;br /&gt;&lt;br /&gt;É claro que as pessoas criaram soluções que permitem armazendar e recuperar informações estruturadas como árvores em bancos relacionais, já vi que existem soluções no Oracle e Postgre que permitem tranquilamente escrever a consulta sql citada acima.&lt;br /&gt;&lt;br /&gt;No intuito de treinar e aprender mais sobre Árvores Binárias (com ajuda do livro "Data Structures And Algorithms") eu escrevi um pouco de código (PHP) que talvez possa ajudar outras pessoas também interessadas em aprender sobre este tipo de estrutura de dados. O código é bem simples e apenas permite a inserção e recupreação dos nós de uma árvore. Também imprime esta árvore na saída padrão.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hipercodigo.googlecode.com/files/BinarySearchTree.php.zip"&gt;Download Código&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-6611156838649166154?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/6611156838649166154/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/09/arvores-para-que-te-quero.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/6611156838649166154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/6611156838649166154'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/09/arvores-para-que-te-quero.html' title='Árvores para que te quero?!'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-4362002758362849153</id><published>2010-08-04T20:02:00.000-07:00</published><updated>2010-08-04T20:02:00.837-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='wave'/><title type='text'>Google Wave foi-se embora</title><content type='html'>Através de um &lt;a href="http://googleblog.blogspot.com/2010/08/update-on-google-wave.html"&gt;post&lt;/a&gt; no seu blog a Google anuncia que não irá mais desenvolver o Google Wave como produto. Eles alegam que a coisa não pegou, e como sabemos a chave para se ganhar alguma coisa com um serviço gratuito é a audiência.&lt;br /&gt;&lt;br /&gt;Eu não experimentei e pelo jeito não vou experimentar. Até mesmo a Google erra, mas não podemos deixar de admitir que os caras estão sempre inovando e pensando um pouco a frente da maioria das pessoas. Quem sabe algum dia no futuro algo parecido com o Wave "surja" e se torna um novo hit?&lt;br /&gt;&lt;br /&gt;Bom, pelo menos no post que citei acima eles disseram que algumas partes do código do Wave e seus protocolos (que são partes impressionantes) estão disponíveis na forma de código open source. Talvez outros programadores possam aproveitá-las e criarem a próxima onda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-4362002758362849153?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/4362002758362849153/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/08/google-wave-foi-se-embora.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4362002758362849153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4362002758362849153'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/08/google-wave-foi-se-embora.html' title='Google Wave foi-se embora'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-1346148397985049892</id><published>2010-07-22T19:46:00.000-07:00</published><updated>2010-07-22T19:46:00.481-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jogo'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><category scheme='http://www.blogger.com/atom/ns#' term='it crowd'/><title type='text'>IT Crowd - The Game</title><content type='html'>Que tal ajudar as Indústrias Reinholm com seu novo sistema de suporte remoto?&lt;br /&gt;&lt;br /&gt;Já assistiram a algum episódio do seriado britânico "&lt;a href="http://pt.wikipedia.org/wiki/The_IT_Crowd"&gt;The IT Crowd&lt;/a&gt;"? Bom acontece que agora eles também possuem um jogo disponível no site deles. &lt;a href="http://www.channel4.com/programmes/the-it-crowd/articles/the-it-crowd-game"&gt;The IT Crowd Game&lt;/a&gt;&amp;nbsp;parece um daqueles jogos estilo "Tower Defense" mas neste jogo você deve proteger os computadores de seus clientes contra vírus e spams.&lt;br /&gt;&lt;br /&gt;Ah! E recomendo a série, os episódios são muito bons e já estão na quarta temporada e com a quinta já engatilhada!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-1346148397985049892?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/1346148397985049892/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/07/it-crowd-game.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1346148397985049892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1346148397985049892'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/07/it-crowd-game.html' title='IT Crowd - The Game'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-7087788805814669912</id><published>2010-07-19T19:30:00.000-07:00</published><updated>2010-07-19T19:30:48.919-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='linguagem c'/><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='aleatório'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Randomicidade randômica</title><content type='html'>Cedo ou tarde todo mundo que começa a programar se depara com as funções que geram número aleatórios ou randômicos. Bom na verdade estas funções não são realmente aleatórias, elas são pseudo geradores de números aleatórios. Geralmente estas funções usam fórmulas matemáticas ou tabelas pré-calculadas de números. Existem também formas verdadeiramente aleatórias de se gerar números, usando-se por exemplo ruído atmosférico gerado por tempestades ou fenômenos da física quântica. Neste &lt;a href="http://www.random.org/randomness/"&gt;link&lt;/a&gt;&amp;nbsp;você pode achar um artigo bem completo falando sobre as duas formas de gerar números aleatórios.&lt;br /&gt;&lt;br /&gt;Voltando as nossas queridas linguagens de programação cabe uma pergunta aqui, o quão randômica é a função de gerar número aleatórios de cada linguagem?&lt;br /&gt;Abaixo faço uma pequena análise visual das funções mais comuns de cada linguagem para geração de números aleatórios. Disponibilizo também o código fonte usado para gerar cada imagem.&lt;br /&gt;Devo dizer que é uma análise sem muito rigor e que isso não deve ser visto como crítica a uma linguagem ou outra. Como é comum que recursos do sistema operacional sejam utilizados na hora de gerar os números é útil informar que todos os testes foram feitos usando-se o Ubuntu 8.10 versão de 32 bits.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Linguagem C&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_5MzLx3b4iDs/TEOzZ_O9CuI/AAAAAAAAAA4/1zHT0kFmdj4/s1600/c-front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_5MzLx3b4iDs/TEOzZ_O9CuI/AAAAAAAAAA4/1zHT0kFmdj4/s320/c-front.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/482325.js?file=gistfile1.c"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Eu usei o seguinte comanado para compilar este código:&lt;br /&gt;&lt;br /&gt;cc -o c-rand $(pkg-config --cflags --libs cairo) c-rand.c&lt;br /&gt;E como você pode ver é necessário ter a biblioteca cairo instalada. No linux não deve ser muito difícil de instalá-la, no Ubuntu um 'sudo apt-get install libcairo2-dev' deve bastar.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Java&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_5MzLx3b4iDs/TET_bpviZMI/AAAAAAAAABA/b0CgVTXIhq0/s1600/java-front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_5MzLx3b4iDs/TET_bpviZMI/AAAAAAAAABA/b0CgVTXIhq0/s320/java-front.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/482327.js?file=gistfile1.java"&gt;&lt;/script&gt;&lt;br /&gt;A versão da máquina virtual usada foi "1.6.0_14". Para fazer funcionar é só usar os tradicionais javac e java.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Perl&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_5MzLx3b4iDs/TEUAYMlmI2I/AAAAAAAAABI/Gf5mncFLb8A/s1600/perl-front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_5MzLx3b4iDs/TEUAYMlmI2I/AAAAAAAAABI/Gf5mncFLb8A/s320/perl-front.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/482333.js?file=gistfile1.pl"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;A versão do Perl utilizada foi 5.10.0. Um comando ./nomescript.pl deve ser o bastante para executar o código. Lembre-se de dar permissão de execução ao script.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PHP&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_5MzLx3b4iDs/TEUCejZV-BI/AAAAAAAAABQ/dHHMOE7p89U/s1600/php-front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_5MzLx3b4iDs/TEUCejZV-BI/AAAAAAAAABQ/dHHMOE7p89U/s320/php-front.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/482345.js?file=gistfile1.php"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;A versão do PHP usado para executar foi 5.2.6. Um comando php nome_arquivo.php deve ser o suficiente para rodar.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Python&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_5MzLx3b4iDs/TEUDoI1pXUI/AAAAAAAAABY/GHxokjVAjb4/s1600/python-front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_5MzLx3b4iDs/TEUDoI1pXUI/AAAAAAAAABY/GHxokjVAjb4/s320/python-front.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/482353.js?file=gistfile1.py"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;O python utilizado foi o 2.5.2. Novamente um comando do tipo python nome_arquivo.py deve rodar o código sem problemas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ruby&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_5MzLx3b4iDs/TEUEk-mwqJI/AAAAAAAAABg/ozMUb_3ZEn0/s1600/ruby-front.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_5MzLx3b4iDs/TEUEk-mwqJI/AAAAAAAAABg/ozMUb_3ZEn0/s320/ruby-front.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/482359.js?file=gistfile1.rb"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;O Ruby utilizado foi o 1.8.7. Um comando ruby nome_arquivo.rb deve fazer a mágica. Note que usei a biblioteca RMagick, provavelmente você precisará instalar esta gem para rodar o código.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Concluindo&lt;/b&gt;&lt;br /&gt;Quanto mais uniforme a figura gerada menos aleatório foi o processo de geração dos números. Uma imagem que se destaca (de forma ruim) é a imagem gerada pela linguagem Ruby. Estas imagens são bem pequenas (elas foram ampliadas), tem uma resolução de 20x20. Ou seja, a função que gera os número foi chamada somente 400 vezes (20 * 20). Você pode alterar o código que desejar aumentado a resolução da imagem gerada (basta aumentar o valor da varável &lt;b&gt;TAM&lt;/b&gt;) para ter um panorama melhor.&lt;br /&gt;Para finalizar uma pergunta: Qual das linguagens você acha que é a mais randômica?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-7087788805814669912?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/7087788805814669912/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/07/randomicidade-randomica.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/7087788805814669912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/7087788805814669912'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/07/randomicidade-randomica.html' title='Randomicidade randômica'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5MzLx3b4iDs/TEOzZ_O9CuI/AAAAAAAAAA4/1zHT0kFmdj4/s72-c/c-front.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-5149032989362113904</id><published>2010-07-14T15:51:00.000-07:00</published><updated>2010-07-14T15:51:43.851-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='falta de humor'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Aquela para perder a amizade</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Em homenagem a &lt;a href="http://globoesporte.globo.com/futebol/copa-do-mundo/noticia/2010/07/sucesso-de-paul-atrai-visitantes-de-longe-para-pequena-oberhausen.html"&gt;Paul&lt;/a&gt; o polvo "vidente".&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Sabe porque o polvo vai para a academia?&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Para ficar moluscoloso.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Atenção! O Ministérido da Saúde adverte: Contar este tipo de piada para amigos, familiares ou parceiros pode acarretar em sérios danos a sua relação.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-5149032989362113904?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/5149032989362113904/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/07/aquela-para-perder-amizade.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5149032989362113904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5149032989362113904'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/07/aquela-para-perder-amizade.html' title='Aquela para perder a amizade'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-33255292018693470</id><published>2010-06-16T18:59:00.000-07:00</published><updated>2010-06-16T19:00:55.858-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='desenvolvimento'/><category scheme='http://www.blogger.com/atom/ns#' term='ebooks'/><category scheme='http://www.blogger.com/atom/ns#' term='livros'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Acesso grátis a livros sobre Desenvolvimento de Games</title><content type='html'>Só uma dica rápida. O pessoal do site &lt;a href="http://boingboing.net/"&gt;boingboing.net&lt;/a&gt; está fazendo uma competição de criação de games e através de uma parceria com o site &lt;a href="http://www.safaribooksonline.com/Corporate/Index/index.php"&gt;Safari Books&lt;/a&gt; eles estão disponibilizando livros sobre o tema.&lt;br /&gt;&lt;br /&gt;Mais detalhes é acessar &lt;a href="http://www.boingboing.net/2010/06/08/free-access-to-safar.html"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Os livros ficam disponíveis através do site da Safari Books, mas é bem fácil de usar a interface do site. Pelo que vi os livros ficam disponíveis por 30 dias, após isso você provavelmente deverá ter que pagar uma taxa. O site funciona no esquema de assinatura.&lt;br /&gt;&lt;br /&gt;Estou lendo o livro &lt;a href="http://www.amazon.com/Fundamentals-Game-Design-Ernest-Adams/dp/0321643372/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1276739830&amp;amp;sr=8-1"&gt;Fundamental of Game Design&lt;/a&gt;. Espero conseguir terminar antes que o prazo final de 30 dias acabe. Boa leitura a todos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-33255292018693470?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/33255292018693470/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/06/acesso-gratis-livros-sobre.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/33255292018693470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/33255292018693470'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/06/acesso-gratis-livros-sobre.html' title='Acesso grátis a livros sobre Desenvolvimento de Games'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-5409841524683992652</id><published>2010-06-13T19:07:00.000-07:00</published><updated>2010-06-13T19:08:54.549-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='5.3'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='10.04'/><category scheme='http://www.blogger.com/atom/ns#' term='codeigniter'/><title type='text'>Ubuntu 10.04 - Lucid Lynx</title><content type='html'>Já faz algumas semanas que instalei a mais nova versão do Ubuntu, a 10.04, no pc do meu trabalho. E devo dizer que achei ele muito bom, a inicialização está bem rápida e gostei muito do novo visual.&lt;br /&gt;&lt;br /&gt;Ainda estou me adaptando a mudança dos botões minimizar, maximizar e fechar das janelas dos aplicativos que agora ficam na esquerda (no trabalho ficam do lado esquerdo e em casa do lado direito), talvez tenha como configurar isso mas com eu gostei muito do sistema e penso em migrar meu pc pessoal para a versão 10.04 então vou deixar assim para ir me acostumando.&lt;br /&gt;&lt;br /&gt;Depois do sistema instalado comecei a jornada de instalação dos meu softwares favoritos sem os quais eu não vivo sem. E como não poderia deixar de ser o PHP está entre eles. E me surpreendi após instalar o LAMP e perceber que a versão padrão do PHP nos repositórios oficiais é a 5.3.&lt;br /&gt;&lt;br /&gt;Já a algum tempo eu queria poder ter a força de vontade de instalar esta versão no meu pc pessoal para experimentar as novas funcionalidades (closures no php deve ser demais!). Mas eu não sabia se meus projetos rodariam no php 5.3, se o CodeIgniter rodaria e não achei uma maneira fácil de instalar mais de uma versão do php na mesma máquina rodando lado a lado (talvez foi falta de ter procurado mais).&lt;br /&gt;&lt;br /&gt;Com a versão 5.3 já instalada no pc do meu trabalho, onde eu também utilizo o CodeIgniter, eu pensei, "Vamos ver no que isso vai dar!". E não é que o CodeIgniter rodou bonitinho no php 5.3?! Fiquei aliviado com isso. Depois olhando nos fórums encontrei um &lt;a href="http://codeigniter.com/forums/viewthread/123604/P15/"&gt;post&lt;/a&gt; dizendo que eles tinham adaptado o código para ser compatível com a versão mais nova do PHP. A única coisa que deu errado foi uma chamada a função "eregi" que agora está marcada com deprecated, mas isso estava em um código desenvolvido internamente.&lt;br /&gt;&lt;br /&gt;Aqui vão alguns links para o pessoal que necessita rodar o php 5.2 no Ubuntu 10.04:&lt;br /&gt;&lt;a href="http://randyfay.com/node/63"&gt;http://randyfay.com/node/63&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.hostweb.com.br/ubuntu-10-04-lucid-lynx-com-php-5-2-10-karmic-koala/hostweb"&gt;http://blog.hostweb.com.br/ubuntu-10-04-lucid-lynx-com-php-5-2-10-karmic-koala/hostweb&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.nickveenhof.be/blog/reverting-or-downgrading-php-53-52-ubuntu-lucid-lynx-1004"&gt;http://www.nickveenhof.be/blog/reverting-or-downgrading-php-53-52-ubuntu-lucid-lynx-1004&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Eu não testei nenhuma solução porque vou continuar com o php 5.3, afinal, algum dia ele deve se tornar o padrão nos hosts espalhados pelo mundo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-5409841524683992652?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/5409841524683992652/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/06/ubuntu-1004-lucid-lynx.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5409841524683992652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5409841524683992652'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/06/ubuntu-1004-lucid-lynx.html' title='Ubuntu 10.04 - Lucid Lynx'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-7239219797238234718</id><published>2010-04-28T18:22:00.000-07:00</published><updated>2011-11-28T09:59:04.683-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='controle versão'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='dicas'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Obtendo os arquivos editados em um período usando o Subversion</title><content type='html'>Onde trabalho usamos o Subversion. Não sou muito fã dele, talvez mais por não saber usá-lo muito bem.&lt;br /&gt;Frequentemente me pego trabalhando em um conjunto de arquivos na minha máquina local testando e desenvolvendo alguma coisa e depois eu preciso enviar estas alterações para o servidor on-line (eu sei que é bem amador esta forma de trabalhar, mas onde trabalho não somos incentivados a mudar isso). Ao invés de mandar todos os arquivos ou ficar tentando lembrar o que foi mudado eu uso o seguinte comando para me dizer quais arquivos foram alterados no projeto dentro de um determinado período:&lt;br /&gt;&lt;br /&gt;svn diff -r {'2010-04-28 22:00:00'}:{'2010-04-28 22:05:47'} | grep "Index:" &amp;gt; ~/diff&lt;br /&gt;&lt;br /&gt;Um arquivo chamado "diff"&amp;nbsp; vai ser gerado no diretório home (se você estiver usando linux) com uma listagem de todos os arquivos alterados (que passaram pelo commit) no repositório entre 28/04/2010 ás 22:00:00 até 28/04/2010 as 22:05:47. O arquivo vai ficar assim:&lt;br /&gt;Index: arquivo1&lt;br /&gt;Index: arquivo2.php&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Você também pode usar números de versão se quiser, por exemplo:&lt;br /&gt;svn diff -r 13:17 | grep "Index:" &amp;gt; ~/diff&lt;br /&gt;&lt;br /&gt;Neste caso todos os arquivos alterados entre a versão 13 e a versão 17 serão listados. Não se esqueça de remover as chaves ({}) do comando.&lt;br /&gt;&lt;br /&gt;É isso aí, só uma pequena dica, espero que possa ajudar alguém.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-7239219797238234718?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/7239219797238234718/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/04/obtendo-os-arquivos-editados-em-um.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/7239219797238234718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/7239219797238234718'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/04/obtendo-os-arquivos-editados-em-um.html' title='Obtendo os arquivos editados em um período usando o Subversion'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-1494639527168456801</id><published>2010-04-21T19:56:00.000-07:00</published><updated>2010-04-21T19:56:46.539-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Piet Hein'/><category scheme='http://www.blogger.com/atom/ns#' term='Scott Rosenberg'/><category scheme='http://www.blogger.com/atom/ns#' term='dreaming in code'/><category scheme='http://www.blogger.com/atom/ns#' term='a estrada para a sabedoria'/><category scheme='http://www.blogger.com/atom/ns#' term='the road to wisdom'/><title type='text'>Um poema de Piet Hein...</title><content type='html'>Só para compartilhar um pequeno poema que vi hoje enquanto lia o livro Dreaming in Code&amp;nbsp; de Scott Rosenberg:&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Road To Wisdom&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The road to wisdom? Well, it's plain&lt;br /&gt;And simple to express:&lt;br /&gt;Err&lt;br /&gt;and err&lt;br /&gt;and err again,&lt;br /&gt;but less&lt;br /&gt;and less&lt;br /&gt;and less.&lt;br /&gt;&lt;b&gt;Piet Hein&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Uma tradução minha não-oficial e propensa a erros:&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;A Estrada para a Sabedoria&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;A estrada para a sabedoria? Bem, é fácil&lt;br /&gt;E simples de expressar:&lt;br /&gt;Errar&lt;br /&gt;e errar&lt;br /&gt;e errar de novo,&lt;br /&gt;mas menos&lt;br /&gt;e menos&lt;br /&gt;e menos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;É isso aí. Recomendo muito o livro "Dreaming in Code".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-1494639527168456801?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/1494639527168456801/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/04/um-poema-de-piet-hein.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1494639527168456801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1494639527168456801'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/04/um-poema-de-piet-hein.html' title='Um poema de Piet Hein...'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-3338609227755894276</id><published>2010-03-28T10:14:00.000-07:00</published><updated>2010-03-28T10:14:11.135-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='url'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='codeigniter'/><title type='text'>Enviar endereços de e-mail na url com o CodeIgniter</title><content type='html'>No meu último projeto eu estava trabalhando em uma função de confirmação de e-mail. Funciona assim, o usuário se registra no site e depois clica em um link enviado para o e-mail que ele registrou. É relativamente simples de se fazer, o problema é que eu queria passar o e-mail deste usuário na url do link que foi enviado para ele, mas na configuração padrão do CodeIgniter isto não é possível.&lt;br /&gt;No arquivo de configuração do CodeIgniter (system/application/config/config.php) existe uma configuração chamada 'permitted_uri_chars'. O padrão dela deve ser mais ou menos assim:&lt;br /&gt;&lt;br /&gt;$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';&lt;br /&gt;&lt;br /&gt;Basicamente este parâmetro diz do CodeIgniter quais caracteres são válidos nas urls interpretadas por ele. Para ser possível enviar e-mails na url o @ deve figurar nesta configuração. Você só tem que tomar cuidado para deixar o traço(-) na última posição (não me perguntem porque). Assim enviar e-mails na url pode ser possível com a seguinte configuração:&lt;br /&gt;&lt;br /&gt;$config['permitted_uri_chars'] = 'a-z 0-9~%.:_@\-';&lt;br /&gt;&lt;br /&gt;É isso aí, espero que isso possa ajudá-los.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-3338609227755894276?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/3338609227755894276/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/03/enviar-enderecos-de-e-mail-na-url-com-o.html#comment-form' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3338609227755894276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3338609227755894276'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/03/enviar-enderecos-de-e-mail-na-url-com-o.html' title='Enviar endereços de e-mail na url com o CodeIgniter'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-5890672270615031868</id><published>2010-02-16T20:29:00.000-08:00</published><updated>2010-02-16T20:29:46.036-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='37 signals'/><category scheme='http://www.blogger.com/atom/ns#' term='vídeo'/><category scheme='http://www.blogger.com/atom/ns#' term='apresentação'/><title type='text'>Jason Fried (37signals) falando um pouco sobre desenvolvimento de software</title><content type='html'>Apresentação muito muito boa de Jason Fried onde ele fala sobre como eles tocam o negócio de desenvolvimento de software na 37signals.&lt;br /&gt;A visão dele mostra como eles são autorais ao criar os produtos deles. Ele fala sobre dizer não mais frequentemente que sim (principalmente para as requisições de usuários), software inchados de funcionalidades, como eles não possuem plano de negócios, etc. E tem muitas outras dicas bem legais. Recomendo assistir o vídeo.&lt;br /&gt;&lt;a href="http://gregosuri.com/jason-fried-on-momentum-why-roadmaps-specific-0"&gt;Apresentação Jason Fried&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-5890672270615031868?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/5890672270615031868/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/02/jason-fried-37signals-falando-um-pouco.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5890672270615031868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5890672270615031868'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/02/jason-fried-37signals-falando-um-pouco.html' title='Jason Fried (37signals) falando um pouco sobre desenvolvimento de software'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-4184961657058967799</id><published>2010-02-06T10:44:00.000-08:00</published><updated>2010-07-19T19:36:45.345-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='gmail'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='enviar'/><category scheme='http://www.blogger.com/atom/ns#' term='codeigniter'/><title type='text'>Tradução - Enviando e-mail via Gmail usando CodeIgniter</title><content type='html'>Olá galera. Estou trabalhando em novo projeto e nele preciso enviar e-mails. Acontece que por enquanto o código só está na minha máquina de desenvolvimento e eu não tenho um servidor e-mails. Procurando por uma solução achei este &lt;a href="http://joelg.co.uk/sending-email-with-gmail-using-the-codeigniter-php-framework/"&gt;artigo&lt;/a&gt; do &lt;a href="http://joelg.co.uk/"&gt;Joel Gascoigne&lt;/a&gt;. Nele o Joel ensina como usar a biblioteca de e-mails do CodeIgniter para enviar e-mails usando uma conta gmail, o que é excelente para quando você quer testar funcões de envio de email localmente. Com autorização do autor original aí vai a tradução do artigo dele.&lt;br /&gt;&lt;br /&gt;Eu acabei de implementar esta funcionalidade para o &lt;a href="http://myonepage.com/"&gt;OnePage&lt;/a&gt; e gostaria de compartilhar no caso das pessoas acharem útil.&lt;br /&gt;&lt;b&gt;Porque enviar e-mail usando o Gmail ao invés de usar uma configuração de um servidor SMTP?&lt;/b&gt;&lt;br /&gt;Existem algumas vantagens que vejo fazendo desta forma:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A possibilidade de desenvolver localmente e testar o envio de e-mails sem ter o trabalho de configurar um servidor local de e-mail.&lt;/li&gt;&lt;li&gt;A possibilidade de usar os emails Google Apps para enviar e-mails a partir de e-mails que estão sobre seu próprio domínio.&lt;/li&gt;&lt;li&gt;A possibilidade de ter referências dos e-mails que você envia usando este método na sua pasta "Enviadas" na sua conta Gmail.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Vamos lá!&lt;/b&gt;&lt;br /&gt;Agora que decidimos que este é o caminho que tomaremos, vamos começar! Na verdade é bem simples, especialmente com o fantástico &lt;a href="http://codeigniter.com/"&gt;framework CodeIgniter&lt;/a&gt; sua classe &lt;a href="http://codeigniter.com/user_guide/libraries/email.html"&gt;Email&lt;/a&gt;. Isto deve funcionar bem somente com o PHP regular ou com outros frameworks se você usar os mesmos conceitos demonstrados aqui. E também devo dar créditos para o usuário &lt;a href="http://codeigniter.com/forums/member/69649/"&gt;wrs&lt;/a&gt; dos &lt;a href="http://codeigniter.com/forums/"&gt;Fórums CodeIgniter&lt;/a&gt;, uma vez que minha solução foi baseada no &lt;a href="http://codeigniter.com/forums/viewthread/84689/P0/"&gt;post&lt;/a&gt; dele.&lt;br /&gt;&lt;b&gt;Um novo arquivo de configuração - email.php&lt;/b&gt;&lt;br /&gt;Coloqueo o código seguinte dentro de um novo arquivo de configuração chamado "email.php" e coloque este arquivo dentro do diretório application/config. Arquivos de configuração nomeados com o mesmo nome de uma biblioteca são incluidos automaticamente, é isso que estamos fazendo aqui.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/482396.js?file=gistfile1.php"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Tenha certeza de alterar 'seu email gmail aqui' e 'sua senha gmail' apropriadamente.&lt;br /&gt;&lt;b&gt;Enviando email, agora através do Gmail&lt;/b&gt;&lt;br /&gt;&lt;b&gt; &lt;/b&gt;Agora qualquer e-mail enviado usando a classe Email do CodeIgniter vai na verdade ser enviado da conta Gmail escolhida:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/482397.js?file=gistfile1.php"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Uma inconveniência deste método&lt;/b&gt;&lt;br /&gt;Existe uma inconveniência deste método, que é que você não pode especificar o email "from" para outro email que não seja seu endereço Gmail ou um endereço de e-mail associado com sua conta Gmail. Todo e-mail vai ser enviado da conta de e-mail que você configurou como padrão na sua conta Gmail.&lt;br /&gt;&lt;b&gt;Possível Erro - "Unable to find the socket transport 'ssl' - did you forget to enable it when you configured PHP?"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Se você recebeu este erro, como eu recebi, então você precisa habilitar o SSL na configuração do PHP. Abra o php.ini e encontre uma linha como a seguir:&lt;br /&gt;;extension=php_openssl.dll&lt;br /&gt;Simplesmente remova o ";" e reinicie o Apache e você deve estar pronto. O ";" denota que a linha é um comentário, e removendo isso é habilitado a extensão SSL para o Apache. Crédito - &lt;a href="http://www.boringguys.com/2007/07/20/unable-to-find-the-socket-transport-ssl-did-you-forget-to-enable-it-when-you-configured-php/"&gt;http://www.boringguys.com/2007/07/20/unable-to-find-the-socket-transport-ssl-did-you-forget-to-enable-it-when-you-configured-php/&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Isso é tudo!&lt;/b&gt;&lt;br /&gt;Eu espero que isso seja útil para algumas pessoas :) Eu uso isso principalmente para densenvolvimento local - é muito bom ser possível testar tudo.&lt;br /&gt;Se você acha meus posts úteis , você deve checar meu site &lt;a href="http://myonepage.com/joel"&gt;OnePage&lt;/a&gt; e &lt;a href="http://twitter.com/joelg87"&gt;me seguir no twitter&lt;/a&gt;.&lt;br /&gt;Fim tradução.&lt;br /&gt;&lt;br /&gt;É isso aí pessoal, eu testei usando minha conta gmail e funcionou direitinho, qualquer dúvida ou problema comentem aí. Até a próxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-4184961657058967799?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/4184961657058967799/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/02/traducao-enviando-e-mail-via-gmail.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4184961657058967799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4184961657058967799'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/02/traducao-enviando-e-mail-via-gmail.html' title='Tradução - Enviando e-mail via Gmail usando CodeIgniter'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-84557766763136663</id><published>2010-02-02T20:46:00.000-08:00</published><updated>2010-02-02T20:46:34.342-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='hiphop'/><title type='text'>Apresentação do Hip-Hop</title><content type='html'>Acabei de assistir a apresentação "oficial" do pessoal do Facebook sobre o Hip-Hop, o "transformador de código" como eles disseram. Basicamente o pessoal disse o que já estava neste &lt;a href="http://developers.facebook.com/news.php?blog=1&amp;amp;story=358"&gt;link&lt;/a&gt;&amp;nbsp;Agora tem este outro &lt;a href="http://developers.facebook.com/hiphop-php/"&gt;link&lt;/a&gt; para uma página do projeto dentro do site deles. Mas mesmo assim ainda não consegui acessar nada no GitHub.&lt;br /&gt;&lt;br /&gt;O Hip-Hop de acordo com a apresentação funciona muito bem o código "mundano", ou seja aquele código mais simples que não usa os recursos "mágicos" do PHP. Coisas estáticas como classes e varáveis se beneficiam muito das otimizações do Hip-Hop. Mas os recursos dinâmicos não&amp;nbsp;obtém&amp;nbsp;o mesmo retorno. Um exemplo interessante que eles mostraram foi a função "function_exists", já que no PHP uma função pode estar declarada antes ou depois da checagem com function_exists. Mas muita coisa dinâmica eles conseguem suportar como extract, chamadas de funções dinâmicas, redeclaração de funções e classes, etc.&lt;br /&gt;&lt;br /&gt;Como o apresentador disse, quem vive no mundo de hosts compartilhados (meu &lt;a href="http://www.pcveiculos.com/index.php/veiculos/ultimos_veiculos"&gt;caso&lt;/a&gt;) não deve tirar muito proveito do Hip-Hop por agora. E pelo que entendi, somente no mundo *nix o Hip-Hop está disponível.&lt;br /&gt;&lt;br /&gt;O fluxo de desenvolvimento é basicamente o mesmo existente, você cria um arquivo .php coloca seu código nele testa em um servidor e quando estiver pronto você roda no Hip-Hop e coloca em produção. Eles queriam aproveitar esta característica de rápido desenvolvimento do PHP aliado com o desempenho do C++.&lt;br /&gt;&lt;br /&gt;Eles basicamente tiveram que reescrever todas as extensões da linguagem PHP, uma coisa engraçada foi quando um cara perguntou como eles contornaram a questão de que muitas extensões PHP não eram thread-safe e o apresentador respondeu que eles tiveram que "resolver" estes problemas.&lt;br /&gt;&lt;br /&gt;Por enquanto é só, quando eu conseguir por as mãos no Hip-Hop quero postar alguma coisa aqui. Valeu!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-84557766763136663?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/84557766763136663/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/02/apresentacao-do-hip-hop.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/84557766763136663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/84557766763136663'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/02/apresentacao-do-hip-hop.html' title='Apresentação do Hip-Hop'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-2839266494080099139</id><published>2010-02-02T09:43:00.000-08:00</published><updated>2010-02-02T11:23:35.452-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='hiphop'/><category scheme='http://www.blogger.com/atom/ns#' term='compilador'/><title type='text'>Saiu! HipHop o compilador PHP feito pelo Facebook</title><content type='html'>Aí vai o &lt;a href="http://developers.facebook.com/news.php?blog=1&amp;amp;story=358"&gt;link&lt;/a&gt; para o post sobre o projeto, feito por um dos envolvidos. Na verdade não é um compilador, ele transforma seu código PHP em C++ e compila usando o g++, ou seja, é um tradutor PHP-&amp;gt;C++.&lt;br /&gt;Agora é tentar testar o cara! Até mais.&lt;br /&gt;&lt;br /&gt;Update: O repositório do projeto no GitHub está fora do ar, ou melhor, o GitHub está fora do ar.&lt;br /&gt;&lt;br /&gt;Update II: Na página indicada pelo link acima eles vão fazer uma apresentação ao vivo falando do HipHop. No horário brasileiro deve ser as 01:30. Depois desta apresentação o código deve ser liberado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-2839266494080099139?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/2839266494080099139/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/02/saiu-hiphop-o-compilador-php-feito-pelo.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2839266494080099139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2839266494080099139'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/02/saiu-hiphop-o-compilador-php-feito-pelo.html' title='Saiu! HipHop o compilador PHP feito pelo Facebook'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-2108475134830229054</id><published>2010-02-02T09:15:00.000-08:00</published><updated>2010-02-02T09:15:19.659-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='compilador'/><title type='text'>Facebook pode estar preparando um compilador para a linguagem PHP</title><content type='html'>Estão dizendo por aí na web que o Facebook deve lançar um novo projeto open-source &lt;a href="http://tecnologia.ig.com.br/noticia/2010/02/01/facebook+reescreve+php+do+zero+e+pode+estar+desenvolvendo+um+compilador+para+a+linguagem+9382543.html"&gt;hoje&lt;/a&gt;. E que esse projeto provavelmente é um compilador PHP. Ou seja, você poderia pegar seu código fonte escrito em PHP e transformá-lo em código nativo da máquina. Em teoria isso poderia aumentar muito a velocidade de execução dos códigos da linguagem.&lt;br /&gt;Uma boa parte da base de código do Facebook é escrita em PHP, e com os milhões e milhões de usuários que a rede social tem, um pequeno ganho na velocidade de execução pode significar muita coisa. Vou ficar de olho na &lt;a href="http://developers.facebook.com/opensource.php"&gt;página&lt;/a&gt; de projetos open-source deles a partir de hoje, talvez sai alguma coisa lá.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-2108475134830229054?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/2108475134830229054/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/02/facebook-pode-estar-preparando-um.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2108475134830229054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2108475134830229054'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/02/facebook-pode-estar-preparando-um.html' title='Facebook pode estar preparando um compilador para a linguagem PHP'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-6311539928767456892</id><published>2010-01-23T09:31:00.000-08:00</published><updated>2010-01-23T09:31:35.756-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='array'/><category scheme='http://www.blogger.com/atom/ns#' term='conversão'/><category scheme='http://www.blogger.com/atom/ns#' term='string'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='tipos'/><title type='text'>O PHP e suas surpresas</title><content type='html'>Graças a um erro em uma função criada por mim, meu &lt;a href="http://www.pcveiculos.com/"&gt;site&lt;/a&gt; estava com um bug constrangedor, pelo menos agora já está corrigido.&lt;br /&gt;&lt;br /&gt;O problema da função que criei era que ela deveria retornar um array, mas, devido a um lapso momentâneo meu, ela estava retornando uma string. Acontece que o PHP considera uma string como um array de caracteres, mas até aí isso parece uma consideração bem lógica. Se você tem a varável $nome por exemplo, você pode acessar o primeiro caractere assim:&lt;br /&gt;&lt;br /&gt;$nome = "Maria";&lt;br /&gt;echo $nome[0]; // escreve M&lt;br /&gt;&lt;br /&gt;Mas quando eu recebia o retorna da minha função eu não estava usando números inteiros como índice para acessar os valores do array (como usei o 0 no exemplo anterior). Eu usei strings como indices. Nestas horas que a tipagem fraca do PHP conjuntamente com uma inferência de tipos bem flexível mostra uma das desvantagens da plataforma (pelo menos para os mais desavisados como eu estava neste caso). O que você esperaria como saída no código abaixo:&lt;br /&gt;&lt;br /&gt;$nome = "Maria";&lt;br /&gt;echo $nome['valor']; //????&lt;br /&gt;&lt;br /&gt;Bom, de acordo com a documentação do PHP, valores não inteiros usados como índice para strings são convertidos para inteiros. E o que o PHP faz quando tem que converter uma string como 'valor' (que não tem nada de número inteiro) para inteiro? Bem ele converte para 0 (zero). Silenciosamente ele converte um índice do tipo string para 0 do tipo inteiro. Assim o código assima exibe a mesma saída do código anterior a ele.&lt;br /&gt;&lt;br /&gt;Isso não é um ataque ao PHP, o erro foi meu. Isso só serve para mostrar que você deve tomar bastante cuidado com estas conversões de tipo implícitas que o PHP faz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-6311539928767456892?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/6311539928767456892/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/01/o-php-e-suas-surpresas.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/6311539928767456892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/6311539928767456892'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/01/o-php-e-suas-surpresas.html' title='O PHP e suas surpresas'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-5574374643162166690</id><published>2010-01-18T08:45:00.000-08:00</published><updated>2010-01-18T09:14:47.586-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='ebooks'/><category scheme='http://www.blogger.com/atom/ns#' term='computação'/><category scheme='http://www.blogger.com/atom/ns#' term='livros'/><category scheme='http://www.blogger.com/atom/ns#' term='links'/><category scheme='http://www.blogger.com/atom/ns#' term='programação'/><title type='text'>Sem ideias então links!</title><content type='html'>Já faz um tempinho que não posto nada aqui, eu queria poder falar que isso é excesso de trabalho com meu &lt;a href="http://www.pcveiculos.com/index.php/veiculos/cadastro_veiculo"&gt;site&lt;/a&gt; ou falta de tempo. Geralmente o primeiro leva ao segundo, mas este não é meu caso. Como não estou com uma boa ideia sobre o que escrever resolvi compartilhar alguns links que tenho de livros gratuitos ou livres sobre informática e computação. Será que sou somente eu que junta links e mais links de livros mas acaba não lendo quase nenhum? Se eu lesse 10% de todo o material que achei, exisitiria uma foto minha na Wikipedia no termo programação e eu seria considerado mais legal que o allien do &lt;a href="http://www.reddit.com/r/programming/"&gt;reddit&lt;/a&gt;.&lt;br /&gt;Tomara que vocês sejam menos preguiçosos do que eu, aí vai a lista.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.acrobatplanet.com/"&gt;Acrobat Planet&lt;/a&gt; - De tudo um pouco.&lt;/li&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books"&gt;Stack Overflow&lt;/a&gt; - Várias sugestões postadas em uma questão do site.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.e-booksdirectory.com/programming.php"&gt;E-books directory&lt;/a&gt; - Muita coisa entre outras programação, algoritmos, estruturas de dados e até livros de matemática e engenharia.&lt;/li&gt;&lt;li&gt;&lt;a href="http://meiobit.com/meio-bit/miscelaneas/livros-gratuitos"&gt;Meiobit&lt;/a&gt; - Um post no meiobit, os comentários tem muitos links também.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.free-itebooks.com/"&gt;Free IT Books&lt;/a&gt; - Tem até material sobre robótica.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ark4n.wordpress.com/python/"&gt;Python para Desenvolvedores&lt;/a&gt; - Para quem já sabe programar e quer aprender python em português.&lt;/li&gt;&lt;li&gt;&lt;a href="http://freecomputerbooks.com/"&gt;Free Computer Books&lt;/a&gt; - Este aqui pode esgotar seu hd.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.reddit.com/r/csbooks/"&gt;Reddit&lt;/a&gt; - Canal dentro do reddit, sempre estão adicionando alguma coisa.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.billthelizard.com/2008/12/even-more-free-programming-books.html"&gt;Bill the Lizard&lt;/a&gt; - Post deste blog com vários livros. O blog é bom também.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.coderholic.com/25-free-computer-science-books/"&gt;Coderholic&lt;/a&gt; - Outro post de blog e nos comentários tem material extra.&lt;/li&gt;&lt;/ol&gt;Por enquanto é isso, eu nem postei tudo (eu sei, eu tenho vicío de guardar links), mas já deve ajudar alguém procurando aprender alguma coisa nova.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-5574374643162166690?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/5574374643162166690/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2010/01/sem-ideias-entao-links.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5574374643162166690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5574374643162166690'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2010/01/sem-ideias-entao-links.html' title='Sem ideias então links!'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-2625017232366341953</id><published>2009-11-21T18:32:00.000-08:00</published><updated>2009-11-21T19:50:10.835-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='upload'/><title type='text'>AjaxUpload para uploads sem complicação</title><content type='html'>Olá galera! Recentemente acabei um pequeno projeto em que estive trabalhando e que vocês podem conferir aqui (&lt;a href="http://pcveiculos.com/"&gt;pcveiculos.com&lt;/a&gt;). Devo falar mais sobre ele depois, mas este post é para falar de um plugin bem legal que usei junto com o &lt;a href="http://jquery.com/"&gt;&lt;span style="font-weight: bold;"&gt;jquery&lt;/span&gt;&lt;/a&gt; (se você não usa, não sabe o que está perdendo) no projeto , é o &lt;a href="http://valums.com/ajax-upload/"&gt;&lt;span style="font-weight: bold;"&gt;AjaxUpload&lt;/span&gt;&lt;/a&gt;. &lt;span style="font-size:85%;"&gt;Obs: No site do &lt;span style="font-weight: bold;"&gt;AjaxUpload&lt;/span&gt; fala que ele pode ser usado com outras bibliotecas como a Prototype, Mootools etc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O &lt;span style="font-weight: bold;"&gt;AjaxUpload&lt;/span&gt; basicamente permite que o usuário clique em um botão (por exemplo) em uma página web e escolha um arquivo que ele deseja enviar para o servidor web. Depois de o usuário escolher o arquivo, o plugin pode automaticamente enviar o arquivo escolhido para o servidor. Isso mesmo, sem refresh da página inteira, sem precisar criar um formulário e um "input" tipo "file", tudo bem prático e simples. E o usuário ainda pode enviar mais de um arquivo ao mesmo tempo.&lt;br /&gt;&lt;br /&gt;Bom aqui vai um link para um exemplo pronto (usando PHP), adaptado do próprio código exemplo do AjaxUpload, a maior diferença é que eu adicionei alguns comentários no código que tentam explicar algumas opções básicas .&lt;a href="http://hipercodigo.googlecode.com/files/ajax-upload.zip"&gt;Exemplo AjaxUpload&lt;/a&gt;. Como vocês podem ver no exemplo eu também usei a biblioteca &lt;span style="font-weight: bold;"&gt;jquery&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Quando for testar o exemplo não se esqueça de setar as permissões da pasta uploads para aceitar ler e escrever arquivos. Qualquer dúvida ou problema encontrado comentem aí!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-2625017232366341953?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/2625017232366341953/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/11/ajaxupload-para-uploads-sem-complicacao.html#comment-form' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2625017232366341953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2625017232366341953'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/11/ajaxupload-para-uploads-sem-complicacao.html' title='AjaxUpload para uploads sem complicação'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-7617649623512255289</id><published>2009-10-20T09:23:00.000-07:00</published><updated>2009-10-20T10:16:02.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='tabela'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='cidades'/><category scheme='http://www.blogger.com/atom/ns#' term='brasil'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Um banco de dados de cidades e estados</title><content type='html'>Olá pessoal!&lt;br /&gt;Estou trabalhando em um pequeno projeto e nele necessito ter acesso ao nome de todas as cidades do Brasil, assim como o estado de cada uma. Depois de algumas buscas na internet eu efetivamente achei alguns bancos de dados prontos contendo tabelas com os nomes das cidades e também o estado de cada uma.&lt;br /&gt;Acontece que estas bases de dados que achei possuem alguns problemas. Uma que achei tinha mais de 9000 registros de cidades, sendo que o Brasil possui oficialmente um pouco mais de 5500 cidades. E também em todas as bases que achei o formato dos dados não estava do jeito que eu queria, todos os nomes dos municípios estavam com todos os caracteres em maiúsculo e também não tinham os acentos devidos.&lt;br /&gt;Pesquisando um pouco mais achei no site do IBGE uma relação com todos os municípios e seus respectivos estados do ano de 2007 (para meu caso está atualizado o bastante), os arquivos estão neste &lt;a href="ftp://ftp.ibge.gov.br/Contagem_da_Populacao_2007/UF2007.zip"&gt;endereço&lt;/a&gt;. O problema é que todos estes dados estão divididos em arquivos no formato xls, sendo um arquivo para cada estado. Usando a excelente biblioteca &lt;a href="http://code.google.com/p/php-excel-reader/"&gt;excel_reader&lt;/a&gt; eu fiz um pequeno script para pegar todos os dados dos arquivos xls (somente a sigla do estado e o nome de cada cidade) e transportá-los para uma tabela do banco de dados MySQL.&lt;br /&gt;Junto com os scripts tem um arquivo chamado constants.php com os seguintes parâmetros de configuração:&lt;br /&gt;&lt;br /&gt;DATABASE_HOST =&gt; Endereço do servidor mysql.&lt;br /&gt;DATABASE_USER =&gt; Usuário para acessar o servidor mysql.&lt;br /&gt;DATABASE_PASS =&gt; Senha do usuário mysql.&lt;br /&gt;DATABASE_NAME =&gt; Nome do banco de dados onde a tabela de cidades será criada.&lt;br /&gt;CITIES_TABLE_NAME =&gt; Nome da tabela com os dados das cidades que será criada.&lt;br /&gt;ID_NAME_COLUMN_NAME =&gt; Nome da coluna chave primária da tabela de cidades.&lt;br /&gt;ESTATE_NAME_COLUMN_NAME =&gt; Nome da coluna com o estado de cada cidade.&lt;br /&gt;CITY_NAME_COLUMN_NAME =&gt; Nome da coluna com o nome de cada cidade.&lt;br /&gt;&lt;br /&gt;Depois de configurar estas opções de acordo com seu gosto é só rodar o arquivo main.php. Os scripts podem ser baixados &lt;a href="http://hipercodigo.googlecode.com/files/estados_cidades.zip"&gt;aqui&lt;/a&gt;. Junto deles vai uma pasta chamada data que contém todos os arquivos xls do IBGE.&lt;br /&gt;Aqui vai um &lt;a href="http://hipercodigo.googlecode.com/files/example_database.sql.zip"&gt;link&lt;/a&gt; para uma exportação da tabela de cidades que criei usando os scripts caso você queira importar os dados diretamente. A tabela possui 5518 registros.&lt;br /&gt;Novamente gostaria de falar da qualidade da bilbioteca &lt;span style="font-weight: bold;"&gt;excel_reader&lt;/span&gt; para ler os arquivos xls. Foi uma das duas que consegui fazer rodar mas a única que não teve problemas com uso de memória e tempo de execução.&lt;br /&gt;Valeu e até a próxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-7617649623512255289?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/7617649623512255289/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/10/um-banco-de-dados-de-cidades-e-estados.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/7617649623512255289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/7617649623512255289'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/10/um-banco-de-dados-de-cidades-e-estados.html' title='Um banco de dados de cidades e estados'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-8381763510504175057</id><published>2009-09-26T16:17:00.000-07:00</published><updated>2009-09-26T17:45:26.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debug'/><category scheme='http://www.blogger.com/atom/ns#' term='dicas'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Tradução - 5 importantes dicas para debugar código PHP</title><content type='html'>Fala aí galera! Mais uma tradução (talvez eu devesse mudar de profissão), é um artigo bem legal com dicas para dominar a habilidade de debugar seus maravilhosos scripts php que insistem em não fazer o que você quer. Vi isso no blog &lt;a href="http://www.phpcollection.com/"&gt;phpcollection&lt;/a&gt; e o artigo original pode ser acessado &lt;a href="http://www.phpcollection.com/5-php-debug-tips-important-for-debugging.html"&gt;aqui&lt;/a&gt;. Então vamos lá!&lt;br /&gt;&lt;br /&gt;Debugar código em php é um pesadelo para todos os programadores php e estes são os momentos onde eles sentem falta da funcionalidade de trace das funções do java. Contudo algumas técnicas simples de debug podem ajudar você a codificar mais rápido e salvar o valiosíssimo tempo de desenvolvimento.&lt;br /&gt;&lt;br /&gt;Todas estas técnicas são baseadas na minha experiência e adoraria conhecer quais outras técnicas de debug programadores php usam para encontrar erros em seu código! Por favor comente abaixo e compartilhe com a comunidade sua arma secreta para debugar código php.&lt;br /&gt;&lt;br /&gt;Então, minhas 5 dicas para debug são (em nenhuma ordem em particular):&lt;br /&gt;&lt;br /&gt;1) - Debug de código php simultâneo: Use um editor com um debugger php simultâneo (como phped, PhpDesigner, Eclipse, etc ), editores como editpad, notepad não suportam debug simultâneo então neles você precisa rodar o script php no browser para encontrar erros. Estes outros editores rodam os script php via linha de comando a cada vez que o script é salvo e apresentam os erros encontrados.&lt;br /&gt;&lt;br /&gt;Pequenos erros humanos como esquecer de um ponto e vírgula, não terminar a linha corretamente, errar as chaves etc podem ser facilmente encontrados usando um debugger php simultâneo.&lt;br /&gt;&lt;br /&gt;2) - Use xdebug - A extensão xdebug permite você achar a pilha de execução ou a pilha de chamada de funções em mensagens de erro, a alocação de memória e previne execuções de recursão infinita acontecerem.&lt;br /&gt;&lt;br /&gt;Também fornece informações de profiling do código PHP e tem a capacidade de debugar scripts interativamente com um cliente de debug.&lt;br /&gt;&lt;br /&gt;Xdeug pode ser encotrado em xdebug.org (Editores como phpdesigner e phpdebug já contêm o Xdebug embutido).&lt;br /&gt;&lt;br /&gt;3) - Ative as mensagens de erro do php - O arquivo php.ini possui muitas opções de configuração. Entres estas opções exitem algumas opções que controlam a forma como mensagens de erro são exibidas para o usuário. Tenha certeza de que as duas seguintes opções estejam configuradas como a seguir:&lt;br /&gt;&lt;br /&gt;&lt;pre style="overflow: auto; width: 694px; margin-top: 0px; margin-bottom: 0px; font-family: 'Andale Mono','Lucida Console',Monaco,Liberation,fixed,monospace; font-size: 11px; background-color: rgb(247, 247, 247) ! important; color: rgb(0, 0, 0);"&gt;display_errors = On&lt;br /&gt;error_reporting = E_ALL &amp;amp; ~E_NOTICE&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4) - Use comandos como print e echo de antemão em pontos críticos para debug - Esta dica é de certa forma um método caseiro que uso para debugar php que eu considero extremamente útil para analisar grandes bases de código php.&lt;br /&gt;&lt;br /&gt;Enquanto estou programando eu crio algumas seções virtuais de código e nestas seções eu coloco comandos echo para assegurar que o interpretador está passando por aquela seção corretamente e escrevendo a informação requerida corretamente.&lt;br /&gt;&lt;br /&gt;Mas como não posso deixar estas seções sempre executando, eu coloco um comando &lt;span style="font-weight: bold;"&gt;if debug_check&lt;/span&gt; para verificar se o código está sendo executado em modo de debug ou modo de produção.&lt;br /&gt;Exemplo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$debug_check = 1;&lt;br /&gt;&lt;br /&gt;foreach ($array as $data) {&lt;br /&gt;&lt;br /&gt;  if ($debug_check == 1)&lt;br /&gt;&lt;br /&gt;      print ($data);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Aqui a varável $debug_check é definida no topo do script. Assim que for mudada para 1 , o código passa a mostrar todos comandos echo e print, somente quando eu estiver debugando o código.&lt;br /&gt;&lt;br /&gt;Quando estou em modo de produção eu simplesmente mudo o valor de $debug_check para 0 que agora vai esconder todos os comandos echo e print. Isto leva um pouco mais de tempo no inicío mas é muito útil a longo prazo.&lt;br /&gt;&lt;br /&gt;5) - Use frameworks - Frameworks são umas das maiores mudanças na programação moderna, frameworks php como CodeIgniter e CakePHP provêem muitas funcionalidades para se construir casos de teste, testes unitários e debug.&lt;br /&gt;&lt;br /&gt;Também, como a maior parte do código roda dentro de bibliotecas as mensagens de erro são bem feitas e providenciam detalhes internos.&lt;br /&gt;&lt;br /&gt;Dois dos meus frameworks favoritos são : &lt;a href="http://cakephp.org/"&gt;cakephp&lt;/a&gt; e &lt;a href="http://codeigniter.com/"&gt;codeingiter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Espero que você tenha apreciado estas 5 técnicas de debug para php. Eu pesso para todos compartilharem aqui seus conselhos para debugar código php. Eu vou compilar todos eles em um post com os devidos créditos e publicar! Isso pode ser bem útil para todos os programadores php ao redor do mundo. (Isso foi no post original mas se as dicas forem legais eu posso colocar a tradução aqui novamente)&lt;br /&gt;&lt;br /&gt;É isso aí! Valeu pessoal!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-8381763510504175057?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/8381763510504175057/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/09/traducao-5-importantes-dicas-para.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8381763510504175057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8381763510504175057'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/09/traducao-5-importantes-dicas-para.html' title='Tradução - 5 importantes dicas para debugar código PHP'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-2753666352448590260</id><published>2009-09-23T20:49:00.000-07:00</published><updated>2009-09-23T21:10:44.003-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='domínios'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Domínios</title><content type='html'>Estou criando um site(na verdade estou apenas na fase de ideias, mas pretendo falar sobre o desenvolvimento dele aqui no blog em breve). Hoje fiquei um tempo pensando em domínios, e percebi que todos os bons nomes para domínios já foram escolhidos (pelo menos na área que estou pensando).&lt;br /&gt;Escolher um domínio até parece um tipo de arte arcana obscura pelo que li em alguns artigos na web (&lt;a href="http://www.criarmeusite.com/2009/08/como-escolher-um-bom-dominio-na-hora-de-criar-um-site/"&gt;aqui&lt;/a&gt;, &lt;a href="http://www.malima.com.br/article_read.asp?id=539"&gt;aqui&lt;/a&gt; e &lt;a href="http://www.ecommerce.tv.br/como-escolher-um-bom-dominio-para-seu-site/"&gt;aqui&lt;/a&gt;), este último até tem um download de um pdf de 70 páginas sobre como escolher um domínio. Talvez eu devesse criar um domínio estilo web 2.0 como flickr, twitter, blogger, reddit, digg (perceberam que o segredo é terminar em "r" ou ter duas letras repetidas no nome?). Bem, vou pensar mais um pouco e se alguém quiser deixar uma sugestão de como criar um bom domínio eu fico agradecido. Valeu!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-2753666352448590260?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/2753666352448590260/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/09/dominios.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2753666352448590260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2753666352448590260'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/09/dominios.html' title='Domínios'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-1338344226689846863</id><published>2009-08-29T13:04:00.000-07:00</published><updated>2011-10-10T13:43:16.737-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='distância'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='calculo'/><category scheme='http://www.blogger.com/atom/ns#' term='google maps'/><title type='text'>Calcular distância entre as cidades do Brasil</title><content type='html'>Olá pessoal! Achei um post interessante onde o autor (Marcos Roberto Silva) colocou um código perl que usa o google maps para dizer qual a distância entre duas cidades. A quem interessar o artigo está &lt;a href="http://www.dicas-l.com.br/dicas-l/20090826.php"&gt;aqui&lt;/a&gt;.&lt;br /&gt;Eu vi o código e ele é bem simples, assim fiz uma versão usando php (o php tem muitas coisas parecidas com o perl, afinal ele tem suas origens ligadas ao perl).&lt;br /&gt;Este é o código php que faz toda a mágica:&lt;br /&gt;&lt;b&gt;Update: Olhe no fim do post&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;strike&gt;$origem = "Oiapoque-AP";&lt;br /&gt;$origem_codificada = urlencode($origem);&lt;br /&gt;$destino = "Chui-RS";&lt;br /&gt;$destino_codificado = urlencode($destino);&lt;br /&gt;&lt;br /&gt;if (! empty($origem) &amp;amp;&amp;amp; ! empty($destino)) {&lt;br /&gt;$url = "http://maps.google.com.br/maps?saddr={$origem_codificada}&amp;amp;daddr={$destino_codificado}&amp;amp;hl=en&amp;amp;z=1";&lt;br /&gt;$conteudo = file_get_contents($url);&lt;br /&gt;$dados = split(',distance:"', $conteudo);&lt;br /&gt;$distancia = split(' km",', $dados[1]);&lt;br /&gt;$distancia[0] = str_ireplace(',', '', $distancia[0]);&lt;br /&gt;&lt;br /&gt;$mensagem = "Distancia de $origem a $destino = $distancia[0] km\n";&lt;br /&gt;} else {&lt;br /&gt;$mensagem = "Preencha os dois campos como Goiânia-GO e Brasília-DF";&lt;br /&gt;}&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O código praticamente não tem diferença do original. Você pode adaptá-lo facilmente para exibi-lo em uma página web.&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;Conforme os comentários este código já está obsoleto, tanto pelo fato de a Google ter mudado a resposta da página quanto pelo fato do código provocar &lt;b&gt;warnings&lt;/b&gt; do tipo &lt;b&gt;Deprecated&lt;/b&gt; nas versões mais recentes do PHP. No código abaixo uma versão que alterei rapidamente. Aparentemente ela funciona, mas depende muito da resposta enviada pelos servidores da Google.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1276438.js"&gt; &lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-1338344226689846863?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/1338344226689846863/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/08/calcular-distancia-entre-as-cidades-do.html#comment-form' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1338344226689846863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1338344226689846863'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/08/calcular-distancia-entre-as-cidades-do.html' title='Calcular distância entre as cidades do Brasil'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-8437530236418546825</id><published>2009-08-14T19:50:00.000-07:00</published><updated>2011-03-17T06:00:03.909-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='atalhos'/><title type='text'>Atalhos extremamente úteis para o NetBeans (Tradução)</title><content type='html'>Em um blog que fala muito de PHP o que o netbeans estará fazendo aqui? Nebeans não é para Java?! Bom, venho usando a versão dele para php a algum tempo e tenho que dizer que ele é um excelente editor para esta linguagem.&lt;br /&gt;Um dia destes trombei com um post bem interessante falando de alguns atalhos no netbeans que estão me ajudando a ser muito mais produtivo neste ambiente. Para aqueles que acham que o netbeans é pesado, lento, foi feito em java e etc, sugiro olharem a &lt;a href="http://www.netbeans.org/downloads/index.html"&gt;versão&lt;/a&gt; específica para php que é bem leve e tem somente os recursos básicos (se bem que você tem a opção de instalar diversos plugins para adiconar outras finalidades) para php.&lt;br /&gt;O artigo original você encontra neste &lt;a href="http://www.phpmag.ru/2009/01/23/extremely-usefull-netbeans-shortcuts/"&gt;link&lt;/a&gt;. Obrigado &lt;span class="postmeta_author"&gt;Victor Farazdagi (o cara é Russo).&lt;/span&gt;&lt;br /&gt;Aí vai a tradução:&lt;br /&gt;Já tem um bom tempo que confio somente no NetBeans para o desenvolvimento em Java e PHP. Até agora, ele está além das minhas maiores expectativas - estou totalmente satisfeito com esta excelente IDE. Hoje, eu estava procurando por um atalho que me premitisse duplica uma linha, e (felizmente!) encontrei este grande post &lt;a href="http://netbeanside61.blogspot.com/2008/04/top-10-netbeans-ide-keyboard-shortcuts.html"&gt;Top 10 NetBeans IDE Keyboard shortcuts&lt;/a&gt;. Não somente encontrei o atalho de duplicar a linha, eu também descobri diversas outras pérolas que devido a não estarem disponíveis nas minhas IDE's anteriores, eu nunca tinha considerado procurar por elas.&lt;br /&gt;Então, decidi compilar minha própria lista de atalhos que me salvam um bom tempo durante as sessões de desenvolvimento.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Shift + esc&lt;/span&gt; Alterna a área de trabalho entre Maximizar/Minimizar.&lt;br /&gt;Como o autor do post original, eu gosto muito de ter o máximo possível de área de trabalho para o código. E quando ocasionalmente eu preciso ver um dos painéis suplementares (como Arquivos, projetos, Navegador etc), eu confio mais nos atalhos, alternando maximizando/minimizando eles. Então, se eu preciso ver alguns dos painéis acoplados eu digito alguns dos seguintes atalhos:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + 1&lt;/span&gt; - Janela de Projeto&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + 2&lt;/span&gt; - Janela de Arquivos&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + 3&lt;/span&gt; - Janela de Favoritos&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + 4&lt;/span&gt; - Janela de Saída&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + 5&lt;/span&gt; - Janela de Serviços&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + 2&lt;/span&gt; - Janela de Tarefas&lt;br /&gt;&lt;br /&gt;e quando termino, &lt;span style="font-weight: bold;"&gt;Ctrl + 0&lt;/span&gt; para voltar para o editor. Tente você mesmo, tenho certeza de que, você ficará maravilhado com a quantidade de tempo que isso salva para você, enquanto faz a área de código menos confusa.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Alt + Enter &lt;/span&gt;Ver sugestões de correção&lt;br /&gt;NetBeans faz a sua vida ficar bem mais fácil, seu analisador de código Java realmente faz um bom trabalho. Muitos dos erros são filtrados mesmo antes da compilação - você deve ver a lâmpada no lado esquerdo do seu código, você pode ver as sugestões de correção clicando nisto ou (economia de tempo novamente) apertando Alt + Enter. Eu pessoalmente gosto muito deste, como eu prefiro ver porque a IDE está reclamando sem retirar minhas mãos do teclado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + F12 &lt;/span&gt;Navegar para o membro&lt;br /&gt;Se sua classe é muito grande, então a visualização de membros no paindel Navegador (&lt;span style="font-weight: bold;"&gt;Ctrl + 7&lt;/span&gt; lembra-se?) pode não ser a melhor opção. Apenas aperte &lt;span style="font-weight: bold;"&gt;Ctrl + F12&lt;/span&gt; e você poderá navegar mais fácilmente, porque esta opção possui filtros que eliminam os membros que não se encaixam no que você está digitando.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Alt + Insert&lt;/span&gt; Gerar código&lt;br /&gt;Este é um dos meus favoritos - geradores de código para setters/getters/construtores são muito sexy para serem enganados. Este atalhos faz eles serem ainda mais úteis.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + Shif + Seta para baixo&lt;/span&gt; Duplicar as linnhas.&lt;br /&gt;Duplicar linhas nunca foi tão fácil :) . Se você quer que a duplicação seja inserida antes da linha corrente, use Seta para cima ao invés de Seta para Baixo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + W&lt;/span&gt; Fechar janela corrente&lt;br /&gt;Firefox honra este atalho, assim como o Konqueror. Então, até configurei meu console para usar este atalho por padrão. Em pouco tempo você vai se acostumar a apertar esta combinação ao invés de &lt;span style="font-weight: bold;"&gt;Ctrl + F4&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + PgUp e Ctrl + PgDown &lt;/span&gt;Navegar entre as janelas&lt;br /&gt;De novo, me acostumei com este com o Firefox. Fica rápido percorrer entre os documentos abertos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + P &lt;/span&gt;Mostra os argumentos dos métodos&lt;br /&gt;Dentro dos parenteses do método use esta combinação para ver quais parâmetros estão presentes. Muito útil quando estiver revendo código.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + ;&lt;/span&gt; Adiciona um ponto e vírgula no final da linha sem mover o cursor.&lt;br /&gt;Se você estiver trabalhando em um código e o netbeans sublinhar a linha com vermelho (devido ao ainda inexistente ponto e vírgula no final da linha) apertar &lt;span style="font-weight: bold;"&gt;Ctrl + ; &lt;/span&gt;(Ctrl + ponto e vírgula) é o bastante para fechar o comando, enquanto você ainda está posicionado na mesma posição na linha. Vi primeiro no &lt;a href="http://netbeans.dzone.com/news/two-netbeans-keyboard-shortcut"&gt;dzone.com&lt;/a&gt; , e adoro usar este atalho.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + K &lt;/span&gt;e  &lt;span style="font-weight: bold;"&gt;Ctrl + L &lt;/span&gt;Auto completa com a próxima/anterior palavra compatível&lt;br /&gt;Eu uso esta combinação mais frequentemento do que &lt;span style="font-weight: bold;"&gt;Ctrl + Espaço&lt;/span&gt; para auto-completar. Listar todos os itens com  &lt;span style="font-weight: bold;"&gt;Ctrl + Espaço &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;pode ser lento, mas apertando Ctrl + K é isntântaneo. Muito frequentemente o nome da varável que você está digitando já foi digitado em outro local no mesmo arquivo corrente, completar com Ctrl + K ou Ctrl + L é provavelmente o mais óbvio a ser feito.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + E&lt;/span&gt; Excluia linha atual&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ctrl + Del&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;Ctrl + Backspace&lt;/span&gt; Exclui a próxima/anterior palavra.&lt;br /&gt;&lt;br /&gt;Eu geralmente uso &lt;span style="font-weight: bold;"&gt;Ctrl + BackSpace&lt;/span&gt;, mas em algumas ocasiões &lt;span style="font-weight: bold;"&gt;Ctrl + Del&lt;/span&gt; se provou útil.&lt;br /&gt;Isto é mais do que o bastante para colocá-lo no caminho. Em algum tempo, eu planejo escrever uma lista mais extensa de atalhos exóticos que você raramento usa, porque dificilmente você os conhecia.&lt;br /&gt;Que atalhos lhe dão mais tempo?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-8437530236418546825?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/8437530236418546825/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/08/atalhos-extremamente-uteis-para-o.html#comment-form' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8437530236418546825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/8437530236418546825'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/08/atalhos-extremamente-uteis-para-o.html' title='Atalhos extremamente úteis para o NetBeans (Tradução)'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-4357733444161291623</id><published>2009-07-25T22:17:00.000-07:00</published><updated>2009-07-25T22:34:14.440-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='triangulo'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='matematica'/><title type='text'>Triângulo de pascal em ActionScript 3</title><content type='html'>Olá pessoal! Estava tirando a poeira dos meus conhecimentos de as3 e implementei um código que reproduz o triângulo de pascal (&lt;a href="http://pt.wikipedia.org/wiki/Tri%C3%A2ngulo_de_Pascal"&gt;Link&lt;/a&gt;).&lt;br /&gt;Acho que ele não está muito difícil de entender. A classe PascalsTriangle recebe recebe um número de linhas que vão ser calculadas e retorna um array de arrays. Cada um destes arrays retornados é uma linha do triângulo. A classe Main chama os métodos na classe PascalsTriangle e exibe os valores no stage no formato de um triangulo. Se quiser alterar o tamanho do triângulo basta alterar a constante NUMBER_OF_ROWS na classe Main.as.&lt;br /&gt;Eu compilei o arquivo usando o &lt;span style="font-weight: bold;"&gt;flex&lt;/span&gt; mas deve funcionar no flash também, embora você deva retirar a seguinte linha do arquivo Main.as:&lt;br /&gt;[SWF(width="465", height="465", backgroundColor="0x000000", frameRate="30")]&lt;br /&gt;O links para donwload:&lt;a href="http://rsl.site90.net/PascalsTriangle.zip"&gt;Triângulo de Pascal&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-4357733444161291623?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/4357733444161291623/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/07/triangulo-de-pascal-em-actionscript-3.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4357733444161291623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4357733444161291623'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/07/triangulo-de-pascal-em-actionscript-3.html' title='Triângulo de pascal em ActionScript 3'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-5589883608872217377</id><published>2009-07-05T11:11:00.000-07:00</published><updated>2009-07-05T12:37:09.517-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='desempenho'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='clone'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmark'/><title type='text'>Clonando objetos em PHP</title><content type='html'>Estes dias eu estava escrevendo um código que parecia mais ou menos assim (está simplificado aqui):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$instancia_robo = new Robo();&lt;br /&gt;$robos = array();&lt;br /&gt;for($i = 0; $i &lt; 5; $i++) {&lt;br /&gt; $robo = $instancia_robo;&lt;br /&gt; $robo-&gt;id = $i;&lt;br /&gt; $robos[] = $robo;&lt;br /&gt;}&lt;br /&gt;var_dump($robos);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Eu achava que não tinha necessidade de ficar instanciando a variável $robo dentro do loop para poder ter diferentes instancias dela (e isso teria funcionado no &lt;span style="font-weight:bold;"&gt;php&lt;/span&gt; versão 4, alguém ainda usa esta versão?). No &lt;span style="font-weight:bold;"&gt;php 5&lt;/span&gt; agora todos os objetos são passados por referência (coisa feia eu não saber disso, eu sei). Mas esta versão do &lt;span style="font-weight:bold;"&gt;php&lt;/span&gt; providencia uma palavra chave chamada clone. Exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;echo 'Usando clone';&lt;br /&gt;$instancia_robo = new Robo();&lt;br /&gt;$robos = array();&lt;br /&gt;for($i = 0; $i &lt; 5; $i++) {&lt;br /&gt; $robo = clone $instancia_robo;&lt;br /&gt; $robo-&gt;id = $i;&lt;br /&gt; $robos[] = $robo;&lt;br /&gt;}&lt;br /&gt;var_dump($robos);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Compare os dois códigos rodando para você ver a diferença. Os objetos dentro do array no código usando clone ficam com a sequência correta. Uma forma de arrumar o primeiro código sem usar o clone seria instanciando a variável $robo dentro do loop ao invés dela receber a variável $instancia_robo. Os próximos códigos tentam fazer um comparativo do tempo que cada comando leva (um usando clone e outro instanciando a variável dentro do loop).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Clone&lt;/span&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ini_set("memory_limit","512M");&lt;br /&gt;&lt;br /&gt;class Robo {&lt;br /&gt;&lt;br /&gt; public $id;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;define('MAX_NUMEROS', 1000000);&lt;br /&gt;&lt;br /&gt;echo 'Usando clone', '&lt;br /&gt;';&lt;br /&gt;$instancia_robo = new Robo();&lt;br /&gt;$robos = array();&lt;br /&gt;$start= microtime(TRUE);&lt;br /&gt;for($i = 0; $i &lt; MAX_NUMEROS; $i++) {&lt;br /&gt; $robo = clone $instancia_robo;&lt;br /&gt; $robo-&gt;id = $i;&lt;br /&gt; $robos[] = $robo;&lt;br /&gt;}&lt;br /&gt;$finish = microtime(TRUE);&lt;br /&gt;echo 'Tempo decorrido ', $finish - $start;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Instância&lt;/span&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ini_set("memory_limit","512M");&lt;br /&gt;&lt;br /&gt;class Robo {&lt;br /&gt;&lt;br /&gt; public $id;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;define('MAX_NUMEROS', 1000000);&lt;br /&gt;&lt;br /&gt;echo 'Instanciando', '&lt;br /&gt;';&lt;br /&gt;$robos = array();&lt;br /&gt;$start = microtime(TRUE);&lt;br /&gt;for($i = 0; $i &lt; MAX_NUMEROS; $i++) {&lt;br /&gt; $robo = new Robo;&lt;br /&gt; $robo-&gt;id = $i;&lt;br /&gt; $robos[] = $robo;&lt;br /&gt;}&lt;br /&gt;$finish = microtime(TRUE);&lt;br /&gt;echo 'Tempo decorrido ', $finish - $start, '&lt;br /&gt;';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Rodando no meu computador (Dual core 1.73 GHZ, 2 GB RAM) as diferenças de tempo de execução dos dois códigos foram pequenas.&lt;br /&gt;Comparando:&lt;br /&gt;Clone&lt;br /&gt;1 - 3,01864814758&lt;br /&gt;2 - 3,74507808685&lt;br /&gt;3 - 2,97225308418&lt;br /&gt;Média: 3,24532644&lt;br /&gt;Instância&lt;br /&gt;1 - 3,50589299202&lt;br /&gt;2 - 4,54684591293&lt;br /&gt;3 - 3,42544102669&lt;br /&gt;Média: 3,826059977&lt;br /&gt;É claro que o teste não tem muito rigor. Provavelmente os resultados dependem mais da complexidade da classe do objeto. Se tivéssemos usado uma classe com métodos mágicos como __construct provavelmente as diferenças seriam maiores a favor do comando clone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-5589883608872217377?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/5589883608872217377/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/07/clonando-objetos-em-php.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5589883608872217377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/5589883608872217377'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/07/clonando-objetos-em-php.html' title='Clonando objetos em PHP'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-3059432682640642853</id><published>2009-06-02T17:36:00.000-07:00</published><updated>2009-07-05T11:11:27.578-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='helper'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='codeigniter'/><title type='text'>Criando helpers que carregam bibliotecas do codeigniter</title><content type='html'>Olá pessoal! Só passando aqui para dar uma dica bem legal do &lt;span style="font-weight:bold;"&gt;codeigniter&lt;/span&gt;.&lt;br /&gt;No ci você pode criar arquivos com funções &lt;span style="font-weight:bold;"&gt;php&lt;/span&gt; que você chama de helpers, estas funções podem ser usadas no controller, views e models (de acordo com o padrão MVC as views não seriam um bom lugar para se chamar um &lt;span style="font-weight:bold;"&gt;helper&lt;/span&gt; já que lá não é lugar de lógica de aplicação).&lt;br /&gt;O problema é que originalmente estes helpers não possuem uma forma fácil e transparente para acessar as funções do ci (como funções das classes bd, session, config etc.). Mas através do método get_instance() esta tarefa fica bem simples.&lt;br /&gt;Para se criar um helper não tem segredo: dentro da pasta application de sua aplicação ci tem uma pasta chamada helpers. Dentro dela você pode criar um arquivo chamado login_helper.php por exemplo. Dentro dele podemos colocar o seguinte conteúdo dentro das tags php:&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;function logout_usuario() {&lt;br /&gt;    $ci = &amp; get_instance();&lt;br /&gt;    $ci-&gt;load-&gt;library('session');&lt;br /&gt;    $ci-&gt;session-&gt;unset_userdata('usuario_logado');&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Através do comando get_instance eu consigo acessar uma instância do objeto global do ci. Com este objeto tenho acesso as classes, bibliotecas e outros helpers existentes, podendo assim usá-los nos meus próprios helpers. Se quiséssemos usar a biblioteca de encriptação por exemplo bastaria fazer o seguinte:&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;    $ci = &amp; get_instance();&lt;br /&gt;    $ci-&gt;load-&gt;library('encrypt');&lt;br /&gt;    $ci-&gt;encrypt-&gt;encode('valor secreto', 'chave do valor secreto');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Usamos o operador &amp; junto ao comando get_instance() para pegar uma referência direta ao objeto global do ci, assim evitando uma cópia do objeto em memória.&lt;br /&gt;Para você acessar seu helper basta fazer isso no controlador por exemplo:&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;    $this-&gt;load-&gt;helper('login');&lt;br /&gt;    logout_usuario();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note que ao carregar o helper ignoramos o "_helper.php" do nome do arquivo.&lt;br /&gt;&lt;br /&gt;A dica está dada, até a próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-3059432682640642853?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/3059432682640642853/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/06/criando-helper-que-carregam-bibliotecas.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3059432682640642853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3059432682640642853'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/06/criando-helper-que-carregam-bibliotecas.html' title='Criando helpers que carregam bibliotecas do codeigniter'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-3557592968814658682</id><published>2009-04-02T04:04:00.000-07:00</published><updated>2009-04-02T04:17:25.737-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='busca'/><category scheme='http://www.blogger.com/atom/ns#' term='ranking'/><title type='text'>Google agora tem ajuda de humanos!</title><content type='html'>Estava eu a fazer mais uma das muitas pesquisas diárias que faço no google, estava logado na minha conta google, quando percebi as novidades:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_5MzLx3b4iDs/SdScWhp2RMI/AAAAAAAAAAM/px6Rwr-8qx0/s1600-h/google_human.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 194px;" src="http://3.bp.blogspot.com/_5MzLx3b4iDs/SdScWhp2RMI/AAAAAAAAAAM/px6Rwr-8qx0/s320/google_human.PNG" alt="" id="BLOGGER_PHOTO_ID_5320048970636346562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Agora o google está exibindo botões que permitem você "Promover" ou "Remover" os links que ele retorna na busca. Eu não sei bem se isso é uma novidade (em relação ao google), mas para mim é.&lt;br /&gt;Agora com pessoas com cérebros muito mais avançados no reconhecimento de padrões abstratos do que os computadores de hoje em dia ajudando em seu algoritmo de busca estas devem se tornar ainda mais relevantes. Por exemplo, quando você buscar por python você quer saber da linguagem de programação, do grupo de humor inglês ou da cobra?&lt;br /&gt;E é claro que a empresa vai aproveitar para colher informações dos links que você promove ou remove para poder ter um perfil seu ainda mais completo e assim lhe mostrar anúncios ainda mais personalisados, e ganhar bilhões de dólares.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-3557592968814658682?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/3557592968814658682/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/04/google-agora-tem-ajuda-de-humanos.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3557592968814658682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3557592968814658682'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/04/google-agora-tem-ajuda-de-humanos.html' title='Google agora tem ajuda de humanos!'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_5MzLx3b4iDs/SdScWhp2RMI/AAAAAAAAAAM/px6Rwr-8qx0/s72-c/google_human.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-2738480713251475842</id><published>2009-03-22T19:38:00.000-07:00</published><updated>2009-03-22T19:43:41.319-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Jogo em flash</title><content type='html'>Olá pessoal! Vou colocar para download o código de um jogo que desenvolvi usando &lt;span style="font-weight:bold;"&gt;Flash&lt;/span&gt;. Eu usei &lt;span style="font-weight:bold;"&gt;actionscript 3&lt;/span&gt; para criar o código. O jogo é bem besta, mas talvez ajude alguém que está querendo começar a desenvolver seus próprios jogos.&lt;br /&gt;&lt;a href="http://rapidshare.com/files/204602594/Grenade_Zombie.zip.html"&gt;Baixe aqui!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-2738480713251475842?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/2738480713251475842/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/03/jogo-em-flash.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2738480713251475842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/2738480713251475842'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/03/jogo-em-flash.html' title='Jogo em flash'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-1574675245552548557</id><published>2009-02-27T16:37:00.000-08:00</published><updated>2009-02-27T17:29:14.984-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='poligono'/><category scheme='http://www.blogger.com/atom/ns#' term='ponto'/><category scheme='http://www.blogger.com/atom/ns#' term='google maps'/><title type='text'>Verificar se um ponto está dentro de um polígono no Google Maps</title><content type='html'>Dica rápida para quem está usando Google Maps e javascript (se bem que é quase impossível usar o google maps sem javascript).&lt;br&gt;&lt;br /&gt;Estes códigos permitem verificar se determinado ponto está ou não dentro de um objeto GPolygon(polígono).&lt;br&gt;&lt;br /&gt;Primeiro código:&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;pre name="code" class="jscript"&gt;&lt;br /&gt;// // === A method for testing if a point is inside a polygon&lt;br /&gt;// === Returns true if poly contains point&lt;br /&gt;// === Algorithm shamelessly stolen from http://alienryderflex.com/polygon/&lt;br /&gt;GPolygon.prototype.Contains = function(point) {&lt;br /&gt;    var j=0;&lt;br /&gt;    var oddNodes = false;&lt;br /&gt;    var x = point.lng();&lt;br /&gt;    var y = point.lat();&lt;br /&gt;    for (var i=0; i &lt; this.getVertexCount(); i++) {&lt;br /&gt;        j++;&lt;br /&gt;        if (j == this.getVertexCount()) {j = 0;}&lt;br /&gt;        if (((this.getVertex(i).lat() &lt; y) &amp;&amp; (this.getVertex(j).lat() &gt;= y))&lt;br /&gt;        || ((this.getVertex(j).lat() &lt; y) &amp;&amp; (this.getVertex(i).lat() &gt;= y))) {&lt;br /&gt;            if ( this.getVertex(i).lng() + (y - this.getVertex(i).lat())&lt;br /&gt;            /  (this.getVertex(j).lat()-this.getVertex(i).lat())&lt;br /&gt;            *  (this.getVertex(j).lng() - this.getVertex(i).lng())&lt;x ) {&lt;br /&gt;                oddNodes = !oddNodes&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    return oddNodes;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ele adiciona a funcao Contains(point) no objeto GPolygon. Eu a retirei do seguinte endereço:http://econym.org.uk/gmap/inside.htm.&lt;br&gt;&lt;br /&gt;Aliás nesta página tem um excelente tutorial sobre o Google Maps. Para usá-la você faria o seguinte:&lt;br&gt;&lt;br /&gt;var polygon = new GPolygon(points);&lt;br&gt;&lt;br /&gt;polygon.Contains(algumPonto);&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;O outro código é este:&lt;br&gt;&lt;br /&gt;&lt;pre name="code" class="jscript"&gt;&lt;br /&gt;// Create polygon method for collision detection&lt;br /&gt;GPolygon.prototype.containsLatLng = function(latLng) {&lt;br /&gt;    // Do simple calculation so we don't do more CPU-intensive calcs for obvious misses&lt;br /&gt;    var bounds = this.getBounds();&lt;br /&gt;  &lt;br /&gt;    if(!bounds.containsLatLng(latLng)) {&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    var numPoints = this.getVertexCount();&lt;br /&gt;    var inPoly = false;&lt;br /&gt;    var i;&lt;br /&gt;    var j = numPoints-1;&lt;br /&gt;  &lt;br /&gt;    for(var i=0; i &lt; numPoints; i++) {&lt;br /&gt;        var vertex1 = this.getVertex(i);&lt;br /&gt;        var vertex2 = this.getVertex(j);&lt;br /&gt;      &lt;br /&gt;        if (vertex1.lng() &lt; latLng.lng() &amp;&amp; vertex2.lng() &gt;= latLng.lng() || vertex2.lng() &lt; latLng.lng() &amp;&amp; vertex1.lng() &gt;= latLng.lng())  {&lt;br /&gt;            if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) &lt; latLng.lat()) {&lt;br /&gt;                inPoly = !inPoly;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;      &lt;br /&gt;        j = i;&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    return inPoly;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Ele basicamente faz a mesma coisa, adiciona a função containsLatLng() no objeto GPolygon. Esta eu peguei em: http://dawsdesign.com/drupal/google_maps_point_in_polygon.&lt;br&gt;&lt;br /&gt;O uso é o mesmo também:&lt;br&gt;&lt;br /&gt;var polygon = new GPolygon(points);&lt;br&gt;&lt;br /&gt;polygon.containsLatLng(algumPonto);&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Ambas as funções retornam true ou false.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;A primeira não estava identificando corretamente alguns pontos em um polígono com quatro lados de tamanhos irregulares, equanto a segunda&lt;br&gt;&lt;br /&gt;funcionou neste caso. A primeira função funcionou corretamente em um polígono com a forma de um círculo.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Espero que elas ajudem vocês como me ajudaram.&lt;br&gt;&lt;br /&gt;PS.:Me desculpem pelo código, é melhor vocês olharem nos links, ainda não sei o que fazer para publicar código decentemente.&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-1574675245552548557?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/1574675245552548557/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/02/verificar-se-um-ponto-esta-dentro-de-um.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1574675245552548557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/1574675245552548557'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/02/verificar-se-um-ponto-esta-dentro-de-um.html' title='Verificar se um ponto está dentro de um polígono no Google Maps'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-4121712880300219250</id><published>2009-02-18T04:20:00.000-08:00</published><updated>2009-02-18T04:40:08.647-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='array'/><title type='text'>Como limpar um array em Javascript?</title><content type='html'>Vocês sabiam que podem limpar os valores de um array em &lt;span style="font-weight: bold;"&gt;javascript&lt;/span&gt; usando "array.length = 0" ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-4121712880300219250?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/4121712880300219250/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/02/como-limpar-um-array-em-javascript.html#comment-form' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4121712880300219250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/4121712880300219250'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/02/como-limpar-um-array-em-javascript.html' title='Como limpar um array em Javascript?'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-3099162310617425639</id><published>2009-02-09T15:33:00.000-08:00</published><updated>2009-02-18T04:40:54.738-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='codeigniter'/><title type='text'>Tradução -Começando com o CodeIgniter parte 2</title><content type='html'>Saudações a todos!&lt;br /&gt;* Como o blog está somente começando eu ainda não tenho muito o que escrever. Atualmente estou começando a brincar com o CodeIgniter e achei um tutorial introdutório bem legal sobre ele. Ele foi escrito pelo Mike e está publicado no site dele o &lt;a href="http://capsizedesigns.com/blog/2008/05/getting-started-with-codeigniter-part-2/"&gt;Capsize Designs&lt;/a&gt;. Ele foi bem gentil e permitiu que eu o traduzisse para o português.&lt;br /&gt;&lt;br /&gt;Bem vindos novamente. No último texto nós configuramos e rodamos uma instalação do CodeIgniter e nos familiarizamos com a estrutura e instalação. Agora, nós iremos olhar de perto como o CodeIgniter lida com o MVC, e o que MVC realmente significa.&lt;br /&gt;&lt;br /&gt;O MVC é o princípio do CodeIgniter e da maioria dos framewroks de aplicações web (Symfony, Zend, CakePHP e até mesmo o infame Ruby on Rails). É também uma boa forma de se estruturar qualquer tipo de aplicação, e você se sentirá uma pessoa melhor por ter aprendido isso. E também é bom na cama. Continuando...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Curso rápido em PHP Orientado a Objetos &lt;/span&gt;&lt;br /&gt;CodIgniter não vai fazer sentido a menos que você se familiarize com os conceitos básicos da programação orientada a objetos. O estilo típico de muitos programadores PHP envolve codificar de uma maneira linear (faça isso e depois faça isso ou isso). Isto serve para projetos pequenos (Digo para projetos bem pequenos), mas conforme uma aplicação cresce, ela fica confusa, feia e muito má.&lt;br /&gt;&lt;br /&gt;Contrastando com isso, nós temos a programação orientada a objetos. CI( e MVC em geral, nós veremos isso depois), usa uma versão simplificada da POO. No nível básico, nós temos &lt;a href="http://pt.wikipedia.org/wiki/Classe_%28programa%C3%A7%C3%A3o%29"&gt;classes&lt;/a&gt;, &lt;a href="http://pt.wikipedia.org/wiki/Objeto"&gt;objetos&lt;/a&gt;, e &lt;a href="http://pt.wikipedia.org/wiki/M%C3%A9todo_%28programa%C3%A7%C3%A3o%29"&gt;funções&lt;/a&gt; e métodos. Classes são o modelo geral ou estrutura de alguma coisa. Um bom exemplo de uma classe é um cão. Um cão possui quatro patas, é peludo, pode latir, etc. Um cão é uma classe.&lt;br /&gt;&lt;br /&gt;Por seguinte nós temos objetos. Objetos são instâncias especificas de classes. Por exemplo, se "cão" é uma classe, então meu Cão Pastor Australiano chamado "Tuck" seria um objeto. É um membro especifico da classe.&lt;br /&gt;&lt;br /&gt;Finalmente, nós temos métodos e funções. Estas são as coisas que um membro da classe pode fazer. Por exemplo, a classe cão tem uma função latir(), uma função pular(), e uma função estaDormindo(), etc. No mundo da programação, você tem que criar um novo objeto (ou instância de uma classe), geralmente (dependendo da linguagem) usando algo similar a var sparky = new Cao();, e então você pode chamar métodos no nosso cão. Em PHP, chamar funções em um objeto usa a sintaxe de flecha, então para fazer Sparky pular nós usaríamos sparky-&gt;jump();.&lt;br /&gt;&lt;br /&gt;Esta é uma versão BEM simplificada e a definição da &lt;a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos"&gt;Wikipedia de Programação Orientada a Objetos&lt;/a&gt; pode ajudá-lo se você ainda estiver confuso. Contudo, é muito importante ter um entendimento básico sobre isso, porque CI depende disso, como nós veremos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Modelos, Visualizações, Controladores, Nossa! &lt;/span&gt;&lt;br /&gt;CodeIgniter é baseado na testada e verdadeira filosofia MVC. Basicamente, o ponto básico do MVC é que você separa o que o usuário vê(as visualizações) da lógica da aplicação (geralmente os modelos). A lógica da aplicação e a apresentação são conectados pelos controladores.&lt;br /&gt;&lt;br /&gt;Agora, não entre em pânico! Isto é bem mais simples do que parece. E quando você tiver começado, eu te prometo que você não vai querer voltar atrás. Esta separação faz tudo mais simples, fácil de entender, e alguns podem dizer que fica mais bonito (embora eu não gostaria de ser tão nerd assim, então não vou ser). Aqui está o básico do papel de cada um destes três componentes.&lt;br /&gt;&lt;br /&gt;NOTA: Você vai ver muitas menções sobre convenções de nomes. Convenções de nomes não são absolutamente necessárias no CI (como o são no CakePHP) mas elas são recomendadas pelo fato de que se você sempre segue as mesmas orientações, você não terá que despender tempo tentando lembrar como aquela coisa era chamada. Eu tento seguir as &lt;a href="http://expressionengine.com/docs/development/guidelines/general.html"&gt;convenções de nomes do EllisLabs&lt;/a&gt;, eles desenvolveram o CodeIgniter, embora você possa desenvolver suas próprias e usá-las.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;Modelos &lt;/span&gt;&lt;br /&gt;Modelos fazem qualquer coisa entre conectar-se com um banco de dados e realizarem o CRUD (Create (Criar), Read (Ler), Update (Atualizar), Delete (Excluir)). Eu gosto de ter um modelo para cada tabela do meu banco de dados, geralmente chamado "nomedatabela_model.php". Modelos (e Controladores) contem um construtor, frequentemente com o mesmo nome da página exceto que maiúsculo (se a página é chamada blog_model.php, seu construtor será chamado de Blog_model).&lt;br /&gt;&lt;br /&gt;Relembrando nossa explanação de programação orientada a objetos, um modelo seria uma "classe". Cada modelo tem suas próprias funções (lembra disso?) que podem ser chamadas depois de você criar uma instância especifica do modelo. Acalme-se. Aqui está um exemplo.&lt;br /&gt;Vamos dizer que você possui um site de E-Commerce, então você provavelmente possui um banco de dados com tabelas como produtos, usuários, compras, etc. Assim, para construir o modelo para a tabela de produtos, você criaria um arquivo chamado produtos_model.php, e o estruturaria assim:&lt;br /&gt;&lt;br /&gt;class Produtos_model extends Model {&lt;br /&gt;   function Produtos_model() {&lt;br /&gt;       parent::Model();&lt;br /&gt;   }&lt;br /&gt;   function algumacoisa1()&lt;br /&gt;   {&lt;br /&gt;       .....faz alguma coisa....&lt;br /&gt;   }&lt;br /&gt;   function algumacoisa2()&lt;br /&gt;   {&lt;br /&gt;       .....faz alguma coisa....&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Então basicamente, você tem um modelo com o mesmo nome da página php, e a primeira função é o construtor, que tem o mesmo nome do modelo. O construtor diz ao CI que o pai da classe é classe genérica de modelo(Model). Depois disso, você coloca algumas funções que relacionam o banco de dados e os produtos. Você pode ter uma função getPreco() ou excluiProduto(). Estas funções criam um mini-biblioteca de coisas que seu controlador pode fazer, mas o controlador em si não tem que se preocupar em como elas são feitas. Nós entusiastas da programação gostamos de chamar isso de "abstração". Ohhhhhhh...&lt;br /&gt;&lt;br /&gt;Vale lembra que o CI não OBRIGA você a usar modelos. Você pode colocar toda a interação com o banco de dados no controlador se você quiser. Faça um favor a você mesmo e use os modelos. Conforme sua aplicação cresce, você ficará feliz de ter uma camada extra de separação para mantê-lo são.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;Controladores &lt;/span&gt;&lt;br /&gt;Controladores são pontes entre a lógica de aplicação e a visualização. No exemplo prévio do E-Commerce, o modelo Produtos_model tinha funções que faziam as operações CRUD para nós, e nosso controlador chamará estas operações para fazer o que tiver para fazer, e retornará o que tiver para ser mostrado na visualização. Na minha opinião, controladores são a beleza de frameworks MVC como o CI. Você tem a parte de banco de dados no modelo, a parte visual nas visualizações, e o meio disso nos controladores. Ele é o atravessador. Isso não faz vocês ficarem entusiasmados? Somente eu? Não minta.&lt;br /&gt;&lt;br /&gt;A anatomia de um controlador é muito parecida com um modelo. O nome de seu controlador será todo minúsculo, e deve explicar o que ele está manipulando. Por exemplo, nós provavelmente faríamos um controlador produtos.php comunicar nosso produtos_model.php com as visualizações. Bem chame ele de produtos.php, e ele vai ficar mais ou menos assim:&lt;br /&gt;&lt;br /&gt;class Produtos extends Controller {&lt;br /&gt;   function Produtos() {&lt;br /&gt;       parent::Controller();&lt;br /&gt;   }&lt;br /&gt;   function index() {&lt;br /&gt;       echo 'Olá mundo!'&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;NOTA: As funções nos controladores são muito legais no CI. Ao invés de ter uma página php separada para cada página no site, você pode ter um controlador para cada seção, e páginas dentro de cada seção possuem sua própria função no controlador. Isto significa que por padrão, quando você navega para um controlador (como www.seusite.com/index.php/produtos), a função index do controlador produtos será chamada. Contudo, se você quer uma página para mostrar todos os sapatos ou outra coisa, você criaria uma função "sapatos()", e então navegaria para www.seusite.com/index.php/produtos/sapatos para executar a função. Isto é incrível.&lt;br /&gt;&lt;br /&gt;Mas este era um controlador bem simples. Frequentemente, um controlador irá criar uma instância de um modelo, chamar algumas funções do modelo, e então passar os resultados para a visualização para mostrá-las no browser. Ficará mais ou menos assim:&lt;br /&gt;&lt;br /&gt;class Produtos extends Controller {&lt;br /&gt;   function list() {&lt;br /&gt;       $this-&gt;load-&gt;model('Productos_model');&lt;br /&gt;       $data['preco'] =     $this-&gt;Produtos_model-&gt;getProdutoPreco(algum_parametro);&lt;br /&gt;       $this-&gt;load-&gt;view('produtos_view', $data);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Acostume-se BEM com a sintaxe dos comandos load ($this-&gt;load-&gt;algo). Seu controlador usa este comando para criar uma nova instância do modelo ou para passar dados para a view para serem mostrador no browser. Neste caso, nós estamos dizendo o CI que nós iremos conversar com o Produtos_model usando o comando load. Então, nós chamamos a função getProdutoPreco() do Produtos_model e passamos os resultados em um array associativo chamado $data. Nós vamos chamar nosso resultado 'preco', então nós colocamos isso como $data['preco'].&lt;br /&gt;&lt;br /&gt;O array $data é muito importante porque é que usamos para passar informações para nossa visualização.&lt;br /&gt;E falando de visualizações...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:130%;" &gt;Visualizações &lt;/span&gt;&lt;br /&gt;Visualizações mostram tudo o que o usuário vê. Existem infinitas maneiras de organizar visualizações. Algumas aplicações podem ser pequenas o bastante para ter somente uma visualização, e esta representar diferentes páginas baseada em diferentes informações que os controladores passam para ela. Você pode também ter uma visualização diferente para cada página. Você escolhe, e isto depende do quão complexas suas páginas serão.&lt;br /&gt;Visualizações obviamente vão dentro da pasta de visualizações, e eu usualmente as nomeio como algumacoisa_view.php. Se sua visualização vai mostrar uma lista de produtos, porque o nome não pode ser produtos_view.php. Note que os modelos são nomeados como algumacoisa_model.php e visualizações como algumacoisa_view.php enquanto controladores são somente algumacoisa.php. Isto é porque o nome do controlador é o que aparece na url, e você quer deixá-la bonita. Sim, eu sei, você pode mudar o que aparece na URL para qualquer coisa que você queira no arquivo routes.php, mas como nós estamos no básico, não vou tentar confundi-lo com isso.&lt;br /&gt;&lt;br /&gt;Basicamente, uma visualização é muito parecida com uma página html que vocês estão acostumados, possui um DocType, tags, head e body, etc. De fato, é bem comum ter uma visualização cabeçalho e uma visualização rodapé para carregar antes de depois do conteúdo da visualização que você estiver usando.&lt;br /&gt;&lt;br /&gt;A parte legal: A visualização mostra informação passada a ela pelo controlador. Qualquer coisa dentro do array $data (no nosso exemplo do controlador, 'preco') será passado a visualização e nós podemos referenciar isso usando o nome do objeto como variável. Isto não é tão confuso quanto parece! Digamos que passamos $data['preco'] para a visualização. Na visualização, nós podemos referenciar isso usando $preco. Se tivéssemos passsado $data['descricao'], nós poderíamos referenciar isso como $descricao. Isto é a beleza disso tudo. Nós podemos até mesmo passar outros arrays para $data. Digamos que o array $data contenha um array chamado 'produtoinfo'. Na visualização, nós poderíamos fazer algo como $produtoinfo['preco'] ou $produtoinfo['entrega'] ou qualquer outra coisa. Oportunidades ilimitadas! EBAAAA! Você pode não estar excitado como eu estou, mas você ficará depois que entender tudo.&lt;br /&gt;&lt;br /&gt;Para demonstrar, aqui está uma visualização bem simples que mostra o preço que passamos:&lt;br /&gt;&lt;br /&gt;&lt;algum html=""&gt;&lt;br /&gt;"O preço é: =$preco *&lt;br /&gt;&lt;/algum&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Legal e simples. Note a sintaxe alternativa PHP. Ao invés de usar um comando echo para mandar o preco, nós usamos...&lt;br /&gt;&lt;br /&gt;=algumca_coisa_para_mostrar *&lt;br /&gt;&lt;br /&gt;... e o "=" fez isso para você. Somente um atalho. Embora, embora como cheekygeek observou nos comentários abaixo (link para o original no inicio do texto), isto requer que as tags curtas (short tags) estejam habilitadas no php.ini. Se isto não funcionar para você, isto deve ser o motivo. Contudo, em system/application/config.php no final do arquivo, você pode mudar $config['rewrite_short_tags'] = TRUE; e o CodeIgniter vai re-escrever todas elas em tempo de execução, então elas ainda vão funcionar no seu servidor.&lt;br /&gt;&lt;br /&gt;Bem é o bastante por agora. Espero que você tenha aprendido algo, e volte para ver a parte três! Feliz codificação!&lt;br /&gt;&lt;br /&gt;* Eu não sei porque mas o Blogger não está aceitando as tags php. Vou tentar colocar estes códigos nos comentários.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-3099162310617425639?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/3099162310617425639/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/02/traducao-comecando-com-o-codeigniter_09.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3099162310617425639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/3099162310617425639'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/02/traducao-comecando-com-o-codeigniter_09.html' title='Tradução -Começando com o CodeIgniter parte 2'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-370781266798157727</id><published>2009-02-03T17:45:00.000-08:00</published><updated>2009-02-18T04:40:36.439-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='codeigniter'/><title type='text'>Tradução -Começando com o CodeIgniter parte 1</title><content type='html'>Saudações a todos!&lt;br /&gt;* Como o blog está somente começando eu ainda não tenho muito o que escrever. Atualmente estou começando a brincar com o CodeIgniter e achei um tutorial introdutório bem legal sobre ele. Ele foi escrito pelo Mike e está publicado no site dele o &lt;a href="http://capsizedesigns.com/blog/2008/05/getting-started-with-codeigniter-part-1/"&gt;Capsize Designs&lt;/a&gt;. Ele foi bem gentil e permitiu que eu o traduzisse para o português.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; CodeIgniter&lt;/span&gt; é um "Framework de aplicação web open source que permite você escrever programas PHP que arrebentam." O próprio site diz isso. O CodeIgniter é extravagante. Contudo, sua documentação é muito bom depois que você inicia, mas começar é um pouco difícil. É por isso que estou aqui. Espero que depois deste tutorial, você encontre seu caminho para entender o CodeIgniter e tenha um bom entendimento da arquitetura &lt;span style="font-weight: bold;"&gt;MVC&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Na parte um nós iremos aprender sobre a instalação e configuração do CI, e também conhecer um pouco sobre a estrutura de diretórios (que sempre parece assustar as pessoas). Então vamos começar.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; Um pouco de fundamentos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Para aqueles que não estão familiarizados com &lt;span style="font-weight: bold;"&gt;frameworks PHP&lt;/span&gt; ou o conceito MVC (&lt;span style="font-weight: bold;"&gt;Modelo&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Visualização&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Controle&lt;/span&gt;) em geral, aqui está uma introdução. MVC é um método testado e genuíno de organizar código fonte e arquivos do programa. Basicamente o MVC separa o código de interface do código da lógica do programa.&lt;br /&gt;O CodeIgniter implementa a arquitetura MVC muito bem, e coloca tudo em toneladas de classes PHP e &lt;span style="font-weight: bold;"&gt;helpers&lt;/span&gt; (arquivos com funções úteis para a aplicação) para ser mais produtivo e rápido. Você tem uma classe de manipulação de imagens na qual você tem acesso a funções para redimensionar, cortar e colocar uma marca d' agua facilmente. Você tem uma classe de captcha que torna bem fácil gerar captchas para formulários web. Você tem até mesmo uma classe de codificação ZIP que torna simples criar pacotes zip dinamicamente no seu site. Eu não ficaria surpreso se o CI 2.0 viesse completo com um uma classe pia_cozinha.php! Ponto final. Isso foi divertido.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; Dando uma olhada&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Agora vamos uma olhada no CodIgniter para ver com o que estamos lidando. &lt;a href="http://codeigniter.com/downloads/"&gt;Faça o download da versão mais nova do site do CI&lt;/a&gt; e descompacte o arquivo em algum lugar do seu servidor. Abra o diretório no seu gerenciador de arquivos e dê uma olhada.&lt;br /&gt;Você deve ver quatro coisas: A pasta "&lt;span style="font-weight: bold;"&gt;system&lt;/span&gt;" (que contém praticamente TUDO, incluindo o código fonte do CI e as pastas para você colocar seu código), uma pasta &lt;span style="font-weight: bold;"&gt;user_guide&lt;/span&gt; (guia de usuário que você pode excluir porque tem tudo no site do CI), um arquivo &lt;span style="font-weight: bold;"&gt;license.txt&lt;/span&gt;, e um arquivo &lt;span style="font-weight: bold;"&gt;index.php&lt;/span&gt; (o qual roteia cada requisição para qualquer lugar que ela precise ir).&lt;br /&gt;&lt;br /&gt;Abra a pasta &lt;span style="font-weight: bold;"&gt;system&lt;/span&gt;. Você vê a pasta "&lt;span style="font-weight: bold;"&gt;application&lt;/span&gt;"? Este é seu lar. Não toque em nenhuma das outras pastas a menos que você esteja querendo saber como as coisas funcionam. Ou melhor, nem mesmo faça isso. Dá medo. Somente abra a pasta &lt;span style="font-weight: bold;"&gt;application&lt;/span&gt;. Você vai ver algumas pastas aí dentro. No começo, as únicas pastas com as quais você vai se preocupar são, &lt;span style="font-weight: bold;"&gt;config&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;models&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;views&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;controllers&lt;/span&gt;. Quando você melhorar no desenvolvimento com o CI, talvez você queira desenvolver suas próprias bibliotecas ou helpers que vão ficar nas suas pastas apropriadas, mas espere um pouco! Paciência é a chave! CHAVE!!!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; Configuração e instalação&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;A primeira pasta que iremos olhar é a &lt;span style="font-weight: bold;"&gt;config&lt;/span&gt;. Especificamente, nós vamos mexer com o &lt;span style="font-weight: bold;"&gt;config.php&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;autoload.php&lt;/span&gt;, e &lt;span style="font-weight: bold;"&gt;database.php&lt;/span&gt;. Abra o &lt;span style="font-weight: bold;"&gt;config.php&lt;/span&gt; e dê uma olhada. Este é o principal lugar para brincar com as opções que o CI oferece. Antes de tudo, mude o valor de &lt;span style="font-weight: bold;"&gt;$config['base_url']&lt;/span&gt; para o local que sua instalação do CI está. Se você está rodando no &lt;span style="font-weight: bold;"&gt;localhost&lt;/span&gt; e colocou em uma pasta chamada "ci", por exemplo, você colocará "&lt;span style="font-weight: bold;"&gt;http://localhost/ci/&lt;/span&gt;". Se está em um servidor online, vai ficar mais ou menos assim "&lt;span style="font-weight: bold;"&gt;http://www.seustie.com/seu_diretorio_ci&lt;/span&gt;". Seja lá o que você colocar, TENHA CERTEZA de incluir a barra(/) depois do nome do diretório, e tenha TENHA CERTEZA de incluir o "http://".&lt;br /&gt;&lt;br /&gt;Continuando, nós veremos que &lt;span style="font-weight: bold;"&gt;$config['index_page']&lt;/span&gt; está setado para "&lt;span style="font-weight: bold;"&gt;index.php&lt;/span&gt;". Está ok por agora, porque por padrão o CodeIgniter roteia tudo através da página &lt;span style="font-weight: bold;"&gt;index.php&lt;/span&gt; na rota do documento. Isto significa que suas urls ficarão parecidas com "www.seusite.com/index.php/alguma_pagina". Se você quiser tirar o &lt;span style="font-weight: bold;"&gt;index.php&lt;/span&gt; do endereço (Eu sempre tiro! Fica feio!), você pode mudar a configuração &lt;span style="font-weight: bold;"&gt;$config['index_page']&lt;/span&gt; para uma string vazia (somente duas aspas sem nada entre elas para aqueles que nunca programaram antes) ao invés de "&lt;span style="font-weight: bold;"&gt;index.php&lt;/span&gt;" e &lt;a href="http://www.codeigniter.com.br/tutoriais/24/removendo-o-indexphp-url"&gt;faça um arquivo .htaccess&lt;/a&gt; para remover isso da url como o wiki do CI ensina.&lt;br /&gt;&lt;br /&gt;Vá para &lt;span style="font-weight: bold;"&gt;$config['log_threshold'] = 0&lt;/span&gt;, e mude para 1. Isso permite que mensagens de erro (como mensagens do PHP ) vão para o log. Qualquer coisa menor do que 1 e você não verá nenhum log, qualquer coisa maior do que 1 e seus arquivos de log vão aumentar sem piedade. Então, fique com 1. É uma boa prática.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; ATUALIZAÇÃO&lt;/span&gt;: Aparentemente alguns servidores teem problemas setando &lt;span style="font-weight: bold;"&gt;log_threshold&lt;/span&gt; para 1, então se você só ver páginas em branco depois da instalação, mude para 0 e veja se funciona. Se alguém puder explicar isso, por favor me avise.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; ATUALIZAÇÃO 2&lt;/span&gt;: Graças a cheekygeek (nos comentários do artigo original, link no início do texto), nós temos a resposta&lt;br /&gt;"Uma solução para o problema do log_threshold é permitir a escrita na pasta system/logs. Contudo, deixar pastas na web com permissão de escrita(777) nunca é uma boa ideia... A solução mais segura em um sistema compatível com linux é dar a permissão de grupo dos arquivos de log para o usuário do servidor web. Se você estiver usando o Apache, você verá isso definido no arquivo httpd.conf."&lt;br /&gt;&lt;br /&gt;Obrigado pela informação, cheekygeek!&lt;br /&gt;&lt;br /&gt;De volta ao principal, vá em frente e mude a chave encriptação (&lt;span style="font-weight: bold;"&gt;$config['encryption_key']&lt;/span&gt;) para uma sequência randômica de 32 caracteres alfa-numéricos. Muitas aplicações que usam autenticação ou trabalham com senhas usam a chave de encriptação colocando ela no final da senha (chamam isso de sal) e então criam um hash disso para segurança. Isso faz o armazenamento de senhas um pouco mais seguro.&lt;br /&gt;&lt;br /&gt;Agora vamos sair do &lt;span style="font-weight: bold;"&gt;config.php&lt;/span&gt; e iremos para o &lt;span style="font-weight: bold;"&gt;database.php&lt;/span&gt;, também na pasta &lt;span style="font-weight: bold;"&gt;config&lt;/span&gt;. Se sua aplicação não vai usar um banco de dados, você não precisa mexer neste arquivo. A maioria dos usuários irão somente mudar as primeiras quatro opções das opções de banco de dados (&lt;span style="font-weight: bold;"&gt;hostname,&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;username&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;password&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;database&lt;/span&gt;). Se você não estiver usando &lt;span style="font-weight: bold;"&gt;MySQL&lt;/span&gt;, você terá que mudar a opção &lt;span style="font-weight: bold;"&gt;dbdriver&lt;/span&gt;, e se você estiver prefixando todas suas tabelas com algo, você terá que mudar o &lt;span style="font-weight: bold;"&gt;dbprefix&lt;/span&gt;. Todo o resto deve estar correto.&lt;br /&gt;&lt;br /&gt;Finalmente, nós vamos abrir o &lt;span style="font-weight: bold;"&gt;autoload.php&lt;/span&gt;. Este arquivo basicamente diz para o CI quais dos helpers e bibliotecas você gostaria de carregar automaticamente. Helpers e bibliotecas podem ser carregados em um controlador pelo próprio controlador, mas se tiver algum que você irá usar a maioria dos controladores, você pode simplesmente auto carregá-lo. Se você está usando um banco de dados, você deveria auto-carregar "&lt;span style="font-weight: bold;"&gt;database&lt;/span&gt;" na seção de bibliotecas. Eu geralmente auto-carrego "&lt;span style="font-weight: bold;"&gt;url&lt;/span&gt;" na seção de helper. Visite o &lt;a href="http://www.codeigniter.com.br/manual/index.html"&gt;guia de usuário do CodeIgniter&lt;/a&gt; para ver o que isto tudo faz. Você provavelmente vai precisar despender algum tempo familiarizando-se com tudo isso para tirar total proveito do CI. NOTA: No topo da página do Guia do usuário, tem um pequeno botão chamado "Conteúdo" que revela um menu de navegação deslizante. Estou falando disso porque fiquei duas semanas martelando minha cabeça até eu achar este menu.&lt;br /&gt;&lt;br /&gt;Agora abra seu browser, navegue para onde você instalou o CI com o &lt;span style="font-weight: bold;"&gt;index.php&lt;/span&gt; no final (algo como &lt;span style="font-weight: bold;"&gt;http://localhost/ci/index.php&lt;/span&gt;). NOTA: Se você usou o arquivo .htaccess para retirar o &lt;span style="font-weight: bold;"&gt;index.php&lt;/span&gt; da &lt;span style="font-weight: bold;"&gt;url&lt;/span&gt;, você obviamente não precisará colocá-lo no endereço. Você está vendo a página de bem vindo? Se está, você está dominando o CI! Como é bom esta sensação! SIMMMM! Se não está, coloque um comentário aqui ou mande uma mensagem para os ótimos &lt;a href="http://www.codeigniter.com.br/forum"&gt;fóruns do CodeIgniter&lt;/a&gt; e não deve ser muito difícil para descobrir o que está errado.&lt;br /&gt;&lt;br /&gt;Por padrão, o CI carrega o controlador "&lt;span style="font-weight: bold;"&gt;welcome.php&lt;/span&gt;". Para mudar para sua própria página, abra o "&lt;span style="font-weight: bold;"&gt;routes.php&lt;/span&gt;" na pasta de configuração e mude o controlador padrão. Nós vamos falar mais sobre controladores (e modelos e visualizações também!) na próxima parte, fique ligado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-370781266798157727?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/370781266798157727/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/02/traducao-comecando-com-o-codeigniter.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/370781266798157727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/370781266798157727'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/02/traducao-comecando-com-o-codeigniter.html' title='Tradução -Começando com o CodeIgniter parte 1'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4411317604583328279.post-514906547159922485</id><published>2009-01-31T19:02:00.000-08:00</published><updated>2009-01-31T19:07:14.969-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php codeigniter javascript'/><title type='text'>Here we go!</title><content type='html'>Olá pessoal! Este aqui é mais um blog começando e espero que não termine tão rápido.&lt;br /&gt;Vou falar sobre desenvolvimento de software para web e suas tecnologias adjacentes principalmente PHP c/ CodeIgniter, JS e os outros vizinhos. Bem por enquanto é só.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4411317604583328279-514906547159922485?l=hipercodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hipercodigo.blogspot.com/feeds/514906547159922485/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://hipercodigo.blogspot.com/2009/01/here-we-go.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/514906547159922485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4411317604583328279/posts/default/514906547159922485'/><link rel='alternate' type='text/html' href='http://hipercodigo.blogspot.com/2009/01/here-we-go.html' title='Here we go!'/><author><name>Ricardo_sdl</name><uri>http://www.blogger.com/profile/02673288481541957998</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
