<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description>Desenvolvedor de software</description><title>Felipe Diesel</title><generator>Tumblr (3.0; @felipediesel)</generator><link>http://blog.felipediesel.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/FelipeDiesel" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="felipediesel" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/" /><item><title>Rails 3: Usando OpenStruct em formulários de busca</title><description>&lt;p&gt;Fazer formulários que não tenha um Model diretamente associado sempre foi um problema no Rails. Isso se deve ao &amp;#8220;Convention over configuration&amp;#8221; e não vejo grandes problemas nisso, pois 90% dos formulários são para criação/edição de dados no Banco de Dados e, por conseqüência, utilizam um Model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mas e os outros 10%?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vi &lt;a href="http://blog.plataformatec.com.br/2010/04/quick-tip-search-forms/"&gt;um artigo&lt;/a&gt; no blog da Plataforma sobre como resolver esse problema, porém o código parou de funcionar com o Rails 3. Para descobrir o por que disso, fui investigar no código do Rails (a esse mundo OpenSource) e descobri que quando você inclui por exemplo um &lt;code&gt;&lt;a href="http://github.com/rails/rails/blob/v3.0.0/actionpack/lib/action_view/helpers/form_helper.rb#L616"&gt;text_field&lt;/a&gt;&lt;/code&gt; é retornado um novo objeto da classe &lt;code&gt;&lt;a href="http://github.com/rails/rails/blob/v3.0.0/actionpack/lib/action_view/helpers/active_model_helper.rb"&gt;InstanceTag&lt;/a&gt;&lt;code&gt; e executa o método &lt;code&gt;&lt;a href="http://github.com/rails/rails/blob/v3.0.0/actionpack/lib/action_view/helpers/form_helper.rb#L899"&gt;to_input_field_tag&lt;/a&gt;&lt;/code&gt;.&lt;/code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Neste método &lt;code&gt;to_input_field_tag&lt;/code&gt;, que está o problema. &lt;a href="http://github.com/rails/rails/commit/f95ba5c262bfd713f0a2fc656f8e645d3eea60f2"&gt;Passou-se a testar se&lt;/a&gt; na classe que está sendo chamado o form existe o método do text_field que queremos e nesse caso não existe, gerando um erro.&lt;/p&gt;

&lt;p&gt;Para contornar isso é nessesário fazer um Monkey Patch na classe OpenStruct modificando o método respond_to?:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class OpenStruct
  def respond_to?(symbol, include_private = false)
    ! ActiveRecord::Base.instance_methods.include? symbol.to_s
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Assim, ele responderá a qualquer coisa menos ao aos métodos de instância que o ActiveRecord, evitando que nos passemos totalmente por um model, o que causaria outros problemas.&lt;/p&gt;

&lt;p&gt;Além disso modifiquei o nome do helper, já que não utilizava isso apenas para buscas, e primeiro é verificado se uma variável de instância com o nome do objeto existe (@contacts por exemplo) e caso não exista é buscado da variável params:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require 'ostruct'
module OpenFormHelper
  def open_form_for(object_name, options={}, &amp;amp;block)
    options[:html] = {:method =&amp;gt; :get}.update(options[:html] || {})
    options[:as] = object_name
    object = OpenStruct.new(instance_variable_get("@#{object_name}") || params[object_name])
    form_for(object, options, &amp;amp;block)
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Fiz a modificação da variável pois em algumas buscas queria que algumas opções viessem marcadas por padrão, ou seja teria que adicioná-las a uma variável e escrever no params não é recomendável.&lt;/p&gt;

&lt;p&gt;Quanto a utilização, veja lá o &lt;a href="http://blog.plataformatec.com.br/2010/04/quick-tip-search-forms/"&gt;artigo do Vinícius lá no blog da plataforma que tem exemplos de utilização&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lendo o código do Rails&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma dica final que eu gostaria de deixar é que quando problemas como esse ocorrem é a melhor hora para investigar o código do Rails e tentar descobrir o que está acontecendo, ficando muito mais fácil entendermos como o Framework funciona.&lt;/p&gt;</description><link>http://blog.felipediesel.com/post/1143058987</link><guid>http://blog.felipediesel.com/post/1143058987</guid><pubDate>Sat, 18 Sep 2010 10:07:54 -0300</pubDate></item><item><title>Migrando para o tumblr</title><description>&lt;p&gt;Migrações e migrações. Sim, saí do &lt;a href="http://wordpress.org"&gt;Wordpress&lt;/a&gt; e fui pro  &lt;a href="http://tumblr.com"&gt;tumblr&lt;/a&gt;. Eu sempre tive o WP instalado num servidor próprio, mas já estava ficando cansado de fazer backup, atualizações. Porém o principal motivo da mudança é que postar no tumblr é mais informal, mais solto. Algumas vezes comecei a escrever um texto, mas acabava não publicando por precisar de muito tempo.&lt;/p&gt;

&lt;p&gt;Pois bem, mas como sou desenvolvedor e acredito que a maioria de quem lê esta &lt;em&gt;bagaça&lt;/em&gt; (como diria o CQC) o interessante é como foi feita a migração.&lt;/p&gt;

&lt;p&gt;Eu vi essa semana o &lt;a href="http://gist.github.com/347171"&gt;script disponibilizado&lt;/a&gt; pelo &lt;a href="http://caironoleto.com/"&gt;Cairo Noleto&lt;/a&gt;, porém ele importou apenas os textos e eu queria importar o máximo possível de informação. Encontrei então &lt;a href="http://gist.github.com/194339"&gt;outro script de importação&lt;/a&gt; que fazia algo mais próximo do que eu esperava e o melhorei corrigindo os erros que iam ocorrendo.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://gist.github.com/353055"&gt;Veja o script de importação do wordpress para o tumblr.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O script importa os posts, categorias e tags. E para os comentários é usado o &lt;a href="http://disqus.com"&gt;Disqus&lt;/a&gt;, pois fica muito mais fácil integrar.&lt;/p&gt;

&lt;p&gt;Algo que não gostei muito foi do fato de o script original usar o &lt;a href="http://github.com/hpricot/hpricot/"&gt;hpricot&lt;/a&gt;, que apesar de ser uma excelente gem, é pra fazer parse de HTML e não de XML provocando um erro no qual o link era interpretado como uma tag HTML, e o lin pro artigo não era encontrado, por isso tive que renomeá-lo para &lt;link_&gt;.&lt;/link_&gt;&lt;/p&gt;

&lt;p&gt;Além dessa migração troquei o domínio de felipediesel.net para felipediesel.com e tive que fazer um monte de redirecionamentos.&lt;/p&gt;</description><link>http://blog.felipediesel.com/post/491094247</link><guid>http://blog.felipediesel.com/post/491094247</guid><pubDate>Fri, 02 Apr 2010 09:14:00 -0300</pubDate><category>tumblr</category><category>script</category><category>ruby</category></item><item><title>CSS específico para cada página com RubyOnRails</title><description>&lt;p&gt;Muitas vezes queremos adicionar um CSS específico para uma página. Você poderia fazer isso &lt;a href="http://shaunchapmanblog.com/post/446260774/rails-tip-automatically-link-a-controllers-stylesheet"&gt;adicionando uma folha de estilo específica daquela página&lt;/a&gt; (em inglês) ou criando um id específico para cada página.&lt;/p&gt;

&lt;p&gt;Com Rails eu faço da seguinte forma:&lt;/p&gt;

&lt;script src="http://gist.github.com/345503.js?file=page_with_controller_and_action.html.erb"&gt;&lt;/script&gt;&lt;p&gt;E no CSS:&lt;/p&gt;

&lt;script src="http://gist.github.com/345503.js?file=page_with_controller_and_action.css"&gt;&lt;/script&gt;&lt;p&gt;O &amp;#8220;page_&amp;#8221; na frente serve justamente para não misturar o id do body com o id da table ou div na hora de listar os registros.&lt;/p&gt;

&lt;p&gt;Prefiro utilizar este modo, pois não é necessário fazer um novo download apenas para alguns estilos para a página específica e todo o CSS já fica cacheado a cada requisição, logo se torna mais eficiente. Porém se uma página for muito diferente das outras e tiver muito CSS o método citado pelo &lt;a href="ttp://shaunchapmanblog.com"&gt;Shaun&lt;/a&gt; pode ser mais útil.&lt;/p&gt;</description><link>http://blog.felipediesel.com/post/483095461</link><guid>http://blog.felipediesel.com/post/483095461</guid><pubDate>Fri, 26 Mar 2010 20:03:00 -0300</pubDate><category>rubyonrails</category><category>css</category></item><item><title>Livro jQuery - A Biblioteca do Programador Javascript</title><description>&lt;p&gt;&lt;em&gt;A primeira impressão que tive do novo livro do Maujor foi que era muito básico. Mas mesmo assim continuei lendo e comecei a repensar minha opinião. &lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img align="left" title="jQuery por Maujor" src="http://felipediesel.com/images/livro_jquery.jpg" alt="jQuery por Maujor" height="294" width="201"/&gt;&lt;/p&gt;

&lt;p&gt;A &lt;a href="http://novatec.com.br/"&gt;Editora Novatec&lt;/a&gt; me mandou um exemplar do livro &lt;a href="http://www.livrojquery.com.br/"&gt;jQuery - A Biblioteca do Pramador da Javascript&lt;/a&gt;, escrito pelo &lt;a href="http://www.maujor.com/"&gt;Maurício Samy Silva&lt;/a&gt;, o já conhecido Maujor; e fiquei de fazer uma resenha do livro aqui no blog. O Maujor não precisa de apresentação, foi com o site dele que dei os primeiros passos nos padrões web e agora vem com o lançamento do primeiro livro sobre jQuery no Brasil.&lt;/p&gt;

&lt;p&gt;O livro é muito didático, muito bem escrito e fácil de acompanhar. Explica desde conceitos básicos, do pra que serve a função &lt;strong&gt;$()&lt;/strong&gt; e como funcionam as expressões até efeitos avançados e plugins.&lt;/p&gt;

&lt;p&gt;Apenas senti falta de um capítulo sobre AJAX. Sei que isso não faz parte do escopo do livro, é até mencionado nos primeiros capítulos essa falta, mas acredito que vai ficar faltando algo quando alguém tiver o primeiro contato com jQuery através do livro.&lt;/p&gt;

&lt;p&gt;Comecei a ler o livro de ponta a ponta mas, já que trabalho com a jQuery diariamente há mais de 2 anos,  uma sensação de Dejavu me acompanhava enquanto seguia no livro e resolvi mudar minha abordagem, utilizando o livro mais como um guia de referência. O que melhorou muito meu aproveitamento. Hoje o livro está na minha mesa de trabalho e aposentei as APIs!&lt;/p&gt;

&lt;p&gt;Portanto recomendo o livro tanto para quem apenas ouviu falar &lt;em&gt;dessa tal de&lt;/em&gt; jQuery, quanto para quem já é expert no assunto. &lt;a href="http://www.livrojquery.com.br/"&gt;Vá lá no site conferir&lt;/a&gt;.&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/livro-jquery-a-biblioteca-do-programador-javascript/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483095166</link><guid>http://blog.felipediesel.com/post/483095166</guid><pubDate>Tue, 03 Feb 2009 21:44:00 -0400</pubDate><category>javascript</category><category>jQuery</category><category>livro</category></item><item><title>Dica: Listando as rotas no console</title><description>&lt;p&gt;O &lt;a href="http://www.nomedojogo.com/"&gt;Carlos Brando&lt;/a&gt; publicou hoje &lt;a href="http://www.nomedojogo.com/2008/09/21/dica-testando-rotas-no-console/"&gt;um artigo sobre como testar rotas no console&lt;/a&gt;. Achei legal e decidi compartilhar um código que uso freqüentemente, mas que serve para listar todas as rotas nomeadas existentes. Faça o seguinte no terminal:&lt;/p&gt;

&lt;pre&gt;
&lt;code class="ruby"&gt;
$ ./script/console
&amp;gt;&amp;gt; app.methods.grep /_path$/
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;Este comando, pega todos os métodos da aplicação e filtra utilizando uma expressão regular.&lt;/p&gt;

&lt;p&gt;Para melhorar a visualização, você pode adicionar o &amp;#8220;y&amp;#8221; na frente, para que ele converta o array de retorno em yaml:&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
&amp;gt;&amp;gt; y app.methods.grep /_path$/
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;E para ficar ainda melhor, adicione o &amp;#8220;sort&amp;#8221;, para ficar em ordem alfabética:&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
&amp;gt;&amp;gt; y app.methods.sort.grep /_path$/
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;O problema é que existem muitas rotas, numa aplicação bem pequena que tenho aqui chega a 500. Para contornar isso você pode utilizar o poder das expressões regulares. O código abaixo, lista apenas as que começam com &amp;#8216;s&amp;#8217;:&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
&amp;gt;&amp;gt; y app.methods.sort.grep /^s.*_path$/
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;Se você não conhece Expressões Regulares, dê uma lida na Web, tem muito material. Caso prefira livros, dê uma conferida no &lt;a href="http://www.piazinho.com.br/"&gt;&amp;#8220;livro do piazinho&amp;#8221;&lt;/a&gt;, do &lt;a href="http://aurelio.net/"&gt;Aurélio&lt;/a&gt;.&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/dica-listando-as-rotas-no-console/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483095118</link><guid>http://blog.felipediesel.com/post/483095118</guid><pubDate>Sun, 21 Sep 2008 15:15:00 -0300</pubDate><category>desenvolvimento</category><category>rubyonrails</category></item><item><title>E o curso de Rails já acabou...</title><description>&lt;p&gt;Conforme falei &lt;a href="http://felipediesel.net/blog/ruby-on-rails-aqui-vou-eu/"&gt;no artigo anterior&lt;/a&gt;, fiz o curso de &lt;a href="http://www.egenial.com.br/cursorails/"&gt;Ruby On Rails da e-Genial&lt;/a&gt;, que infelizmente se encerrou na quinta, dia 23. Foram 21 aulas, com direito a lista de discussão, material de estudo de primeira e um instrutor, o &lt;a href="http://www.monteiro.eti.br/"&gt;Júlio Monteiro&lt;/a&gt; muito bom. De quebra ainda conheci muita gente legal e que com certeza manterei contato.&lt;/p&gt;

&lt;p&gt;Foi muito interessante a proposta do pessoal da e-Genial de fazer um desafio: montar um software de gestão escolar, com cadastro de alunos, instrutores, cursos, turmas, aulas e ainda lista de chamada! Os melhores ganhariam livros.&lt;/p&gt;

&lt;p&gt;A maioria do pessoal do curso não fez, ou não conseguiu terminar, mas eu recomendo muito que se lhe for proposto algo assim, deixe um fim de semana de lado e se dedique a isso. Não tanto pelo livro, que é um incentivo legal, mas pelo aprendizado que algo assim proporciona. Eu fiz e aprendi muita coisa nesse sistema, pois as dúvidas só aparecem quando você mete a mão na massa.&lt;/p&gt;

&lt;p&gt;&lt;a style="float:right" href="http://www.amazon.com/gp/product/0321445619?ie=UTF8&amp;amp;tag=felipedieseln-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321445619"&gt;&lt;img title="The Rails Way - Obie Fernandez" src="http://felipediesel.net/images/51qmxwhhvjl_sl160_.jpg" alt=""/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E o ganhador? Bom, não que eu queira me gabar nem nada, mas &lt;strong&gt;eu ganhei!&lt;/strong&gt; :D O prêmio foi um livro muito bom, o &lt;a href="http://www.amazon.com/gp/product/0321445619?ie=UTF8&amp;amp;tag=felipedieseln-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321445619"&gt;Rails Way&lt;/a&gt;, do &lt;a href="http://obiefernandez.com/"&gt;Obie Fernandez&lt;/a&gt;. Estou agora a espera do livro, que está vindo pelo correio, já que o curso foi online, para mergulhar de cabeça em mais material sobre Rails. Se você quiser ver meu projeto, é só &lt;a href="https://github.com/felipediesel/gestao_escolar/tree"&gt;acessar no github&lt;/a&gt; ou fazer o &lt;a href="http://github.com/felipediesel/gestao_escolar/tarball/master"&gt;download do tarball&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Gostaria ainda de elogiar o &lt;a href="http://www.treinatom.com.br/"&gt;TreinaTom&lt;/a&gt;, que eu insisto em chamar de Teletom (vai ver o Carlos Eduardo é amigo do Sílvio Santos). O ambiente é muito legal, com a interação entre professor e aluno acontecendo na hora. Pior coisa de curso online são aqueles em que só há apostilas e fórum e este não foi assim, teve vídeo, screensharing e muito bate-papo.&lt;/p&gt;

&lt;p&gt;O &lt;a href="http://www.monteiro.eti.br/"&gt;Júlio&lt;/a&gt; também foi sensacional, muito prestativo e paciente com nossas dúvidas beirando o ridículo. Ontem ele disse que nossa turma foi a melhor que ele já trabalhou até hoje e que éramos muito interessados. Mas eu sei que ele diz isso pra todas turmas. :)&lt;/p&gt;

&lt;p&gt;Bom, se você chegou até aqui, é por que já deve estar interessado no curso. E pra não dizer que foi tudo elogios, faltou falar um pouco mais sobre Testes, que é algo muito importante e que não consegui entender o fluxo de trabalho, mas tenho certeza que vai estar melhor nos próximos cursos. Esse problema vou resolver com um &lt;a href="http://peepcode.com/products/test-first-development"&gt;screencast do Peepcode&lt;/a&gt;.&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/e-o-curso-de-rails-ja-acabou/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094980</link><guid>http://blog.felipediesel.com/post/483094980</guid><pubDate>Sat, 26 Jul 2008 00:54:41 -0300</pubDate><category>Curso</category><category>e-Genial</category><category>Ruby</category><category>Ruby On Rails</category></item><item><title>Ruby On Rails, aqui vou eu</title><description>&lt;p&gt;&lt;img style="float:right; margin-left:8px" src="http://felipediesel.com/images/rails.png" alt="Ruby On Rails"/&gt;Tenho andado com os meu queixo dolorido nos últimos dias. Há um mês estou fazendo o curso de &lt;a href="http://www.rubyonrails.pro.br/"&gt;Ruby On Rails&lt;/a&gt; da &lt;a href="http://egenial.com.br/"&gt;e-Genial&lt;/a&gt; e estou embasbacado com o framework. Tenho estudado Rails por conta já faz um ano, mas nunca saindo do básico (com o Django fiz a mesma coisa). Claro que isso parece ser chover no molhado, mas o Rails é realmente impressionante.&lt;/p&gt;

&lt;p&gt;Pelo que vi até agora o grande diferencial dele é o Active Record. Eu trabalho o &lt;a href="http://codeigniter.com"&gt;CodeIgniter&lt;/a&gt; recentemente, mas ele não tem &lt;a href="http://pt.wikipedia.org/wiki/ORM"&gt;ORM&lt;/a&gt; e isso faz uma falta enorme, já que no Rails os Models tem a função de &lt;em&gt;configurar&lt;/em&gt; a tabela do banco de dados e deixando todo o resto pro Active Record, enquanto no CI, é um repositório de funções relacionados ao BD; fazendo o desenvolvimento ser muito mais rápido no Rails.&lt;/p&gt;

&lt;p&gt;Outra qualidade que percebi nesse meu &amp;#8220;namoro&amp;#8221; com Rails, foi a Comunidade, que é muito ativa, trazendo novidades e material quase que diariamente. Tanto a &lt;a href="http://rubyonrails.com/"&gt;comunidade internacional&lt;/a&gt; (dá pra chamar assim?), quanto a &lt;a href="http://www.rubyonrails.pro.br/"&gt;brasileira&lt;/a&gt; são legais. Isso contou muito na hora que optei pelo Ruby/Rails (em detrimento do Python/Django).&lt;/p&gt;

&lt;p&gt;&lt;img style="float:left; margin-right:8px" src="http://felipediesel.com/images/ruby.png" alt="Ruby"/&gt;Outra grande vantagem do Rails, é o Ruby. Isso mesmo, a linguagem utilizada no framework é muito boa. É legível, padronizada e muito poderosa. Eu trabalho com PHP fazem 4 anos e não quero cuspir no prato que comi (e ainda como), mas PHP é muito desorganizada.&lt;/p&gt;

&lt;p&gt;Me chamou a atenção no Ruby o modo literal com que as coisas são programadas (&lt;em&gt;3.times { print &amp;#8220;Hi!&amp;#8221; }&lt;/em&gt;, quer algo mais claro que isso?) e o fato de ser totalmente orientada a objeto. Isso mesmo até as operações básicas, com a soma, são objetos! :D&lt;/p&gt;

&lt;p&gt;Claro que essas opiniões aqui escritas são percepções minhas, e estão longe de ser verdades absolutas, já que como disse Nelson Rodrigues, &amp;#8220;toda unanimidade é burra&amp;#8221;. &lt;a href="http://corporacaoweb.com/atacando-no-ruby.html"&gt;Mas eu não estou sozinho.&lt;/a&gt;&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/ruby-on-rails-aqui-vou-eu/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094923</link><guid>http://blog.felipediesel.com/post/483094923</guid><pubDate>Sun, 13 Jul 2008 23:02:00 -0300</pubDate><category>Ruby</category><category>Ruby On Rails</category></item><item><title>Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!</title><description>&lt;p&gt;&lt;img style="float: right;" title="Wikipedia" src="http://felipediesel.com/images/wikipedia-logo.png" alt="Wikipedia"/&gt;…e também a pen drives, card drives, camisetas geeks, livros e mais! O BR-Linux e o Efetividade lançaram uma campanha para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e participe - quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!&lt;/p&gt;</description><link>http://blog.felipediesel.com/post/483094822</link><guid>http://blog.felipediesel.com/post/483094822</guid><pubDate>Sat, 12 Jul 2008 14:00:00 -0300</pubDate></item><item><title>SSH mais simples ainda</title><description>&lt;p&gt;Eu estava brigando a com o &lt;em&gt;rsync&lt;/em&gt; para enviar um arquivo para um servidor em que a posta ssh não era a 22 (padrão) e descobri algo muito mais interessante, que com certeza é útil para muita gente.&lt;/p&gt;

&lt;p&gt;Você pode criar aliases para suas conexões ssh. O rsync roda utilizando o ssh, então também funciona. Com isso, você pode logar via ssh da seguinte forma: &lt;em&gt;ssh servidor&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Para que isso funcione, altere (ou crie se necessário) o arquivo ~/.ssh/config da seguinte forma:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
Host servidor
  hostname enredeco.do.host.com
  user nome.do.usuario
  port 22
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;A porta só especifique se não for o padrão.&lt;/p&gt;

&lt;p&gt;Fácil não?&lt;/p&gt;

&lt;p&gt;E não esqueça de dar uma olhada &lt;a href="http://felipediesel.net/blog/logando-num-servidor-ssh-sem-senha/"&gt;no meu artigo sobre como logar sem senha&lt;/a&gt;, para facilitar ainda mais sua vida! :D&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/ssh-mais-simples-ainda/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094776</link><guid>http://blog.felipediesel.com/post/483094776</guid><pubDate>Mon, 02 Jun 2008 14:58:00 -0300</pubDate><category>internet</category><category>linux</category><category>shell</category><category>ssh</category></item><item><title>Utilizando layouts no CodeIgniter</title><description>&lt;p&gt;Na grande maioria dos sites e sistemas web é apenas modificado o miolo da aplicação, enquanto que o cabeçalho, rodapé, menu, etc. permanecem iguais. E utilizando o modelo MVC, normalmente para cada action do controller temos uma view correspondente, sendo que geralmente um controller: &lt;em&gt;Main&lt;/em&gt; com uma action: &lt;em&gt;index&lt;/em&gt;, terá a view main/index.php.&lt;/p&gt;

&lt;p&gt;No Code Igniter teríamos que fazer tudo manualmente, já que não há como definir um layout que será carregado em cada view, nem esse carregamento automático.&lt;/p&gt;

&lt;p&gt;Pelo menos não havia&amp;#8230; :D&lt;/p&gt;

&lt;p&gt;Criei um pequeno hook que faz esse serviço. Crie seu controller como abaixo:&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;
class Main extends Controller {

  function Main()
  {
    parent::Controller();
  }

  function index()
  {
    $this-&amp;gt;data-&amp;gt;foo = $this-&amp;gt;db-&amp;gt;get('main_table');
  }

  function show()
  {
    $this-&amp;gt;data-&amp;gt;foo = $this-&amp;gt;db-&amp;gt;get('another_table');
    // Você pode definir manualmente a view e o layout da seguinte forma:
    $this-&amp;gt;view = 'main/index';
    $this-&amp;gt;layout = 'popup';
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;E ao acessar as duas actions a view &lt;em&gt;main/index.php&lt;/em&gt; será chamada com os valores definidos na variável &lt;em&gt;$this-&amp;gt;data&lt;/em&gt;. Também será carregado o layout &lt;em&gt;application/views/layouts/default.php&lt;/em&gt; na função index e &lt;em&gt;application/views/layouts/popup.php&lt;/em&gt; na função show.&lt;/p&gt;

&lt;h4&gt;Download&lt;/h4&gt;

&lt;p&gt;Faça o &lt;a href="http://felipediesel.net/dl/ci_layout.tar.gz"&gt;download da hook&lt;/a&gt; ou &lt;a href="http://felipediesel.net/dl/ci_layout_app.tar.gz"&gt;de uma aplicação de exemplo (CI 1.6.2)&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;Instalação&lt;/h4&gt;

&lt;p&gt;Para utilizar este hook, copie o arquivo Layout.php dentro da pasta &lt;em&gt;application/hooks/&lt;/em&gt;,  defina a opção &lt;em&gt;$config[&amp;#8216;hooks&amp;#8217;]&lt;/em&gt; com &lt;em&gt;true&lt;/em&gt; no config e adicione o seguinte no arquivo application/config/hook.php:&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;
$hook['post_controller'][] = array(
  'class'    =&amp;gt; 'Layout',
  'function' =&amp;gt; 'view',
  'filename' =&amp;gt; 'Layout.php',
  'filepath' =&amp;gt; 'hooks',
  'params'   =&amp;gt; array()
);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Espero que goste tanto de utilizar isto quanto eu. Me salva algumas linhas de código.&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/utilizando-layouts-no-codeigniter/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094720</link><guid>http://blog.felipediesel.com/post/483094720</guid><pubDate>Wed, 21 May 2008 09:56:00 -0300</pubDate><category>CodeIgniter</category><category>desenvolvimento</category><category>php</category></item><item><title>Cortando e redimensionando imagens com o CodeIgniter</title><description>&lt;p&gt;Eu sei que não tenho aparecido muito por aqui, mas &lt;a href="http://www.sigasw.com.br/blog/um-novo-siga-para-2008/"&gt;o desenvolvimento da nova versão&lt;/a&gt; do &lt;a href="http://sigasw.com.br"&gt;SiGA&lt;/a&gt; está tomando todo tempo imaginável e tive que priorizar aquilo, pois o prazo já está estourando. Mas não é sobre isso que quero escrever.&lt;/p&gt;

&lt;p&gt;Recentemente precisei de imagens quadradas num projeto e esse mesmo procedimento se repetiria várias vezes, então criei esta extensão da Biblioteca Image_lib que já vem com o &lt;a href="http://codeigniter.com"&gt;CodeIgniter&lt;/a&gt;. Na verdade o código serve não só para imagens quadradas, já que o tamanho tem que ser definido literalmente.&lt;/p&gt;

&lt;p&gt;Cole o código abaixo na pasta application/library com o nome MY_Image_lib.php:&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;
class MY_Image_lib extends CI_Image_lib {
/**
 * Crop and resize a image
 *
 * @return bool
 */
    function crop_and_resize() {
        $width = $this-&amp;gt;width;
        $height = $this-&amp;gt;height; 
        $size = getimagesize($this-&amp;gt;source_folder . $this-&amp;gt;source_image);
        
        if ($size[0] &amp;gt; $size[1]) {
            $this-&amp;gt;width =  $width / $height * $size[1]; 
            $this-&amp;gt;height = $size[1];           
        } else {
            $this-&amp;gt;width = $size[0];
            $this-&amp;gt;height =  $height / $width * $size[0];            
        }
        $this-&amp;gt;x_axis = ($size[0] - $this-&amp;gt;width) / 2;
        $this-&amp;gt;y_axis = ($size[1] - $this-&amp;gt;height) / 2;
        
        if ( ! $this-&amp;gt;crop() ) {
            return false;
        }
        
        $this-&amp;gt;width = $width;
        $this-&amp;gt;height = $height;
                
        if ( ! $this-&amp;gt;resize()) {
            return false;
        }
        return true;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Pra usar é muito fácil:&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;
$config = array(
'source_image' =&amp;gt; '/path/para/a/imagem.jpg',
'maintain_ratio' =&amp;gt; false,
'width' =&amp;gt; 48,
'height' =&amp;gt; 48);

$this-&amp;gt;load-&amp;gt;library('image_lib', $config);
$this-&amp;gt;image_lib-&amp;gt;crop_and_resize();
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;E temos uma imagem como a mostrada abaixo:&lt;/p&gt;

&lt;p style="text-align:center"&gt;&lt;img class="size-full " title="Imagem de exemplo" src="http://felipediesel.com/images/exemplo_crop_and_resize.jpg" alt="" width="48" height="48"/&gt;&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/cortando-e-redimensionando-imagens-com-o-codeigniter/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094675</link><guid>http://blog.felipediesel.com/post/483094675</guid><pubDate>Thu, 10 Apr 2008 13:42:00 -0300</pubDate><category>CodeIgniter</category><category>desenvolvimento</category><category>php</category><category>web</category></item><item><title>Escritório de Verdade</title><description>&lt;p&gt;&lt;img src="http://felipediesel.com/images/grooveshark_logo.jpg" alt="Grooveshark" align="right"/&gt;Tenho acompanhado o blog &lt;a href="http://www.officesnapshots.com"&gt;Office Snapshots&lt;/a&gt; e o recomendo sem pestanejar, mas algo que eu achava estranho era que todos os escritórios sempre eram arrumados de mais, sem extensões e cabos de rede pelo chão e tudo muito padronizado.&lt;/p&gt;

&lt;p&gt;Pelo que vi não fui só eu que estranhei isso, pois &lt;a href="http://www.officesnapshots.com/2008/02/05/grooveshark-offices/"&gt;foram publicadas fotos do escritório&lt;/a&gt; da &lt;a href="http://www.grooveshark.com/"&gt;Grrovershark&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Não que eu ache melhor os escritórios serem bagunçados, mas o custo de se montar um escritório todo personalizado é muito alto. Porém acho que vale a pena conferir todos, por que sempre podemos pegar uma ou outra idéia para melhorar o ambiente onde trabalhamos.&lt;/p&gt;</description><link>http://blog.felipediesel.com/post/483094585</link><guid>http://blog.felipediesel.com/post/483094585</guid><pubDate>Thu, 07 Feb 2008 12:22:00 -0400</pubDate></item><item><title>Tema novo</title><description>&lt;p&gt;Finalmente, depois de um ano e pouco e várias tentivas de temas fiz um que acabei e gostei. O tema ainda está bem cru, pois já são 2 horas e comecei ontem as 17h (total de 9 horas). Isso que ainda dei um tempo no meio. :D&lt;/p&gt;

&lt;p&gt;Deixei o tema mais limpo, com layout líquido e removi todos os restos de AdSense. Deve estar com vários furos, se achar algum, por favor me avise. O que achou?&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/tema-novo/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094522</link><guid>http://blog.felipediesel.com/post/483094522</guid><pubDate>Tue, 05 Feb 2008 01:12:16 -0400</pubDate></item><item><title>CodeIgniter em PHP5 ou PHP4?</title><description>&lt;p&gt;Recentemente tem havido bastante discussão sobre o por que de o &lt;a href="http://codeigniter.com"&gt;CodeIgniter&lt;/a&gt; não partir apenas para o PHP5, mas não entendo isso, já que um dos grandes motivos que me levou a ter interesse por esse framework foi por ele suportar o PHP4. Entendo e concordo que o PHP5 é muito superior, poder trabalhar apenas com OO é muito melhor, mas existem dois grandes problemas que travam a adoção ao PHP5.&lt;/p&gt;

&lt;p&gt;Quem nunca teve que fazer um site pra hospedar num servidor com PHP4 e MySQL 3.23? (E olha que uma das maiores empresas de hospedagem do Brasil tem uma configuração parecida com essa! Qual é a sua?) Por mais que os desenvolvedores do PHP façam campanha de adoção do PHP5, que o PHPmyAdmin prometa que as próximas versões apenas serão pra PHP5, isso NÃO vai mudar. As hospedagens ainda são PHP4 e adoção ao PHP5 é lenta (cerca de 1% ao mês).&lt;/p&gt;

&lt;p&gt;Outro fator é que infelizmente a maioria dos desenvolvedores são medíocres. Não estão nem um pouco preocupados com MVC, OO, padrões web e tudo mais. E isso acaba influenciando as hospedagens, que tem medo de quebrar os códigos de seus clientes. Não que eu me considere um grande programador, mas isso é o que todos tinham que ter como base (ou pelo menos vontade de aprender).&lt;/p&gt;

&lt;p&gt;Voltando ao CodeIgniter, o &lt;a href="http://www.derekallard.com/"&gt;Derek Allard&lt;/a&gt;, um dos desenvolvedores do CodeIgniter, já disse que o PHP4 será suportado por &lt;a href="http://www.derekallard.com/blog/post/codeigniter-will-not-be-dropping-support-for-php-4-anytime-soon/"&gt;bastante tempo ainda&lt;/a&gt;, justamente por isso. Não adianta querermos impor algo, quando não temos meios para forçar.&lt;/p&gt;

&lt;p&gt;Não quero de maneira nenhuma defender os hosts que não fazem upgrades, muito menos a &amp;#8220;sobrinhada&amp;#8221;, mas acho que as vezes esquecemos que vivemos em mundo que não é perfeito, que por mais que queiramos que as coisas sejam ótimas, elas apenas podem ser tão boas quanto possível.&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/codeigniter-em-php5-ou-php4/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094485</link><guid>http://blog.felipediesel.com/post/483094485</guid><pubDate>Mon, 04 Feb 2008 16:36:00 -0400</pubDate></item><item><title>Named params no Code Igniter</title><description>&lt;p&gt;Named params são parâmetros enviados numa url, mas sem ordem definida. Na prática são o velho&amp;#160;?var=valor&amp;amp;var2=valor2, mas de um modo mais limpo.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.seusite.com/controller/m%C3%A9todo/nome:Felipe/cidade:Teut%C3%B4nia/"&gt;www.seusite.com/controller/método/nome:Felipe/cidade:Teutônia/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu venho utilizando &lt;a href="http://codeigniter.com/"&gt;CodeIgniter&lt;/a&gt; há algum tempo e ele não permite passar variáveis como o PHP normalmente faz e acabei criando algo assim para utilizar. E quando li o artigo do &lt;a href="http://www.tuliofaria.net"&gt;Tulio Faria&lt;/a&gt; &lt;a href="http://www.tuliofaria.net/cakephp-12-named-params/"&gt;falando sobre named params&lt;/a&gt;, mas no &lt;a href="http://www.cakephp.org/"&gt;CakePHP&lt;/a&gt;, a primeira coisa que pensei é que deveria disponibilizar minha função aqui no blog.&lt;/p&gt;

&lt;p&gt;Na verdade é uma estensão da biblioteca URI:&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;
class MY_URI extends CI_URI {
  function named_param($var) {
    $arr = $this-&amp;gt;segment_array();
    foreach ($arr as $value) {
      if ($var == substr($value, 0, strpos($value, ':'))) {
        return substr($value, strpos($value, ':')+1);
      }
    }
    return null;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Para chamar essa função faça da seguinte maneira:&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;
$this-&amp;gt;uri-&amp;gt;named_param('nome'); // Na url de exemplo acima retornaria Felipe
$this-&amp;gt;uri-&amp;gt;named_param('cidade'); // Na url de exemplo acima retornaria Teutônia
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Conversando o &lt;a href="http://www.guilhermemedeiros.com.br"&gt;Guilherme Medeiros&lt;/a&gt;, chegamos a uma solução diferente da de cima. Nesta versão não se chama uma função que retornará o valor, mas sim os valores já estão na variável named, ficando a classe assim:&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;
class MY_URI extends CI_URI {
  var $named;

  function MY_URI() {
    parent::CI_URI();

    $uri = $this-&amp;gt;segment_array();
    foreach($uri as $val) {
      if (strpos($val, ':')) {
        $this-&amp;gt;named-&amp;gt;{substr($val, 0, strpos($val, ':'))} = substr($val, strpos($val, ':')+1);
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sendo usado assim:&lt;/p&gt;

&lt;pre&gt;&lt;code class="php"&gt;
$this-&amp;gt;uri-&amp;gt;named-&amp;gt;nome; // Na url de exemplo acima retornaria Felipe
$this-&amp;gt;uri-&amp;gt;named-&amp;gt;cidade; // Na url de exemplo acima retornaria Teutônia
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Vale lembrar que o valor deve ser testado com o isset(), pois pode não existir.&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/named-params-no-code-igniter/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094433</link><guid>http://blog.felipediesel.com/post/483094433</guid><pubDate>Tue, 15 Jan 2008 09:12:00 -0400</pubDate></item><item><title>Editor WYSIWYG muito leve</title><description>&lt;p&gt;Hoje me deparei com algo que já venho procurando faz um bom tempo. Um editor WYSIWYG que fosse leve.&lt;/p&gt;

&lt;p&gt;A maioria dos editores tem mais de 100KB, chegando alguns a mais de 200KB. O &lt;a href="http://nicedit.com"&gt;NicEdit&lt;/a&gt; por outro lado tem menos 35&amp;#160;KB e, se comprimido menos de 10KB. Obviamente ele é simples, mas quem precisa do word quando quer colocar negrito em uma ou outra palavra? Lembre-se conteúdo é o rei!&lt;/p&gt;

&lt;p&gt;No site tem vários exemplos de como se utiliza ele, além de bastante informação.&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/editor-wysiwyg-muito-leve/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094345</link><guid>http://blog.felipediesel.com/post/483094345</guid><pubDate>Wed, 19 Dec 2007 07:50:00 -0400</pubDate></item><item><title>Pegando o conteúdo de um iframe</title><description>&lt;p&gt;Hoje tive um daqueles problemas que você pensa, pensa, pensa, e não consegue resolver.&lt;/p&gt;

&lt;p&gt;Meu problema era enviar um arquivo via AJAX. Como isso não é possível, temos que usar uma velha técnica na qual cria-se um iframe e se dá o submit do form para este. Tudo certo. Mas temos que pegar o valor do iframevia javascript para saber se correu tudo bem e o que aconteu.&lt;/p&gt;

&lt;p&gt;Fiz alguns testes e nao estava conseguindo pegar o valor do iframe. O motivo? Levei 3 horas para descobrir. Não se consegue pegar o valor se o iframe não estiver no mesmo domínio que a página atual.&lt;/p&gt;

&lt;p&gt;Ou seja, nos testes eu estava usando tudo menos o domínio atual. Que serviço.&lt;/p&gt;

&lt;p&gt;Para pegar o valor, existem 2&amp;#160;métodos:&lt;/p&gt;

&lt;p&gt;1) Mais fácil com a jQuery:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$('iframe').contents().find('body').html()
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;2) Um pouco maior, mas apenas javascript:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var io = document.getElementsByTagName('iframe')[0];
if(io.contentWindow) {
  return io.contentWindow.document.body.innerHTML;
} else if(io.contentDocument){
  return io.contentDocument.document.body.innerHTML;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Mas não esqueçam. &lt;strong&gt;Tem que ser do mesmo domínio.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Obrigado ao &lt;a href="http://www.cefrin.com/blog/"&gt;Israel Cefrin&lt;/a&gt; por me dar a dica que tinha que funcionar e me fazer descobrir isso.&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/pegando-o-conteudo-de-um-iframe/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094289</link><guid>http://blog.felipediesel.com/post/483094289</guid><pubDate>Mon, 10 Dec 2007 10:55:00 -0400</pubDate></item><item><title>O Framework CodeIgniter</title><description>&lt;p&gt;O que um framework tem que fazer? Sério, copiar o &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Tudo bem que seja um om espelho, mas não pode ser feito com fé cega, acreditando que o que o rails faz é o que há de melhor pra se fazer. Não que RoR seja ruim, muito pelo contrário, mas existem vários frameworks imitando-o sem pensar um pouco.&lt;/p&gt;

&lt;p&gt;Eu programo em PHP para viver, poderia mudar já que sou &lt;a href="http://sigasw.com.br/pagina/sobre/"&gt;eu quem define isso&lt;/a&gt;, mas ainda só estou testando outras linguagens para a web. Recentemente resolvi que iria usar um framework para desenvolver, pleos motivos que todo mundo sabe: utilização de MVC, programação mais rápida, etc.&lt;/p&gt;

&lt;p&gt;Cheguei a testar o &lt;a href="http://www.cakephp.org/"&gt;CakePHP&lt;/a&gt;, mas não gostei dele pois ele te faz trabalhar como ele quer, não como o programador quer. Bati cabeça com mais alguns e resolvi que montaria meu próprio framework.  Programa, programa, programa&amp;#8230; Ainda falta muito pela frente&amp;#8230;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://felipediesel.com/images/ci_logo_flame.jpg" alt="Logo do CodeIgniter" align="right"/&gt;Até que parei e conheci o &lt;a href="http://codeigniter.com/"&gt;CodeIgniter&lt;/a&gt;. Achei muito bom, é um framework legal e que me dava a liberdade que eu não tinha com o Cake.&lt;/p&gt;

&lt;p&gt;Este framework, apesar de ter sido baseado no Rails, não o segue cegamente e dá um liberdade muito grande pra trabalhar do jeito que o programador quiser. Claro que ele tem uma padronização, mas a liberdade vem em você usar as ferramentas que são fornecidas muito facilmente.&lt;/p&gt;

&lt;p&gt;Se você quer saber mais sobre o CodeIgniter, sugiro que &lt;a href="http://www.haughin.com/screencasts/"&gt;veja os screencasts&lt;/a&gt; do &lt;a href="http://www.haughin.com/"&gt;Elliot Haughin&lt;/a&gt;, que foi o que me fez ver o que o CodeIgniter podia fazer; leia o blog do &lt;a href="http://www.derekallard.com/"&gt;Derek Allard&lt;/a&gt;, que é um dos desenvolvedores do Framework; e &lt;a href="http://codeigniter.com/user_guide/"&gt;LEIA O MANUAL&lt;/a&gt;. Em português, a comunidade ainda está se formando, mas já existe o site &lt;a href="http://codeigniter.com.br/"&gt;codeigniter.com.br&lt;/a&gt;, lá se encontra o manual traduzido, um fórum (que atualmente está fora do ar) e a lista de discussão.&lt;/p&gt;

&lt;p&gt;Aguardem alguns artigos aqui sobre esse tema.&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/o-framework-codeigniter/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094191</link><guid>http://blog.felipediesel.com/post/483094191</guid><pubDate>Sat, 01 Dec 2007 08:21:00 -0400</pubDate><category>CodeIgniter</category><category>framework</category><category>php</category><category>web</category></item><item><title>Utilizando ferramentas e não muletas</title><description>&lt;p&gt;Você já se viu sem martelo quando precisava pregar algo? E teve que usar uma chave de fenda ao contrário pra fazer isso? Funciona, mas é mais demorado e não é tão simples quanto usar o martelo.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://felipediesel.com/images/muleta.jpg" alt="Muleta" align="right"/&gt;Digo isso, pois freqüentemente nas listas que participo acontecem discussões inflamadas sobre usar ou não usar algo, como IDEs, frameworks, etc. Claro que por um lado isso é bom, pois toda unanimidade é burra, porém essa discussão sempre acaba no &amp;#8220;usa o teu e te ferra que eu uso o meu e fico na boa&amp;#8221;. E a outra pessoa responde a mesma coisa.&lt;/p&gt;

&lt;p&gt;O problema é que hoje temos que ser agis e ao mesmo tempo fazer um serviço de qualidade. E isso as vezes parece não ser levado em contra por aqueles que querem usar as ferramentas mais simples. E aí se encaixa a história do martelo lá de cima.&lt;/p&gt;

&lt;p&gt;Você pode programar um site grande usando o &lt;a href="http://pt.wikipedia.org/wiki/Vi"&gt;Vi&lt;/a&gt;, mas renderá mais usando uma IDE que te auxilie.&lt;/p&gt;

&lt;p&gt;Mas aí entra o grande detalhe: Você tem que saber se virar sem a IDE, pois um belo dia o site pode estar fora do ar e você não poder usar sua magnífica IDE para resolver o problema. E nessa hora você tem que se virar com o que tem. Nem que seja com notepad.&lt;/p&gt;

&lt;p&gt;Outro exemplo é javascript, existem várias bibliotecas &lt;a href="http://developer.yahoo.com/yui/"&gt;que&lt;/a&gt; &lt;a href="http://jquery.com/"&gt;facilitam&lt;/a&gt; &lt;a href="http://script.aculo.us/"&gt;a vida&lt;/a&gt;, mas na hora que algo tem que ser feito sem ela, você tem que saber usar javascript &amp;#8220;nativo&amp;#8221;.&lt;/p&gt;

&lt;p&gt;O importante é que as ferramentas nos ajudem a fazer o serviço bem feito e rápido. E não que sirvam como muletas, e que sem elas não consigamos sair do lugar.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Crédito da Foto: &lt;a href="http://www.flickr.com/photos/daquellamanera/146333723/"&gt;Daquela manera&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/utilizando-ferramentas-e-nao-muletas/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094123</link><guid>http://blog.felipediesel.com/post/483094123</guid><pubDate>Sat, 24 Nov 2007 00:15:00 -0400</pubDate><category>desenvolvimento ágil</category><category>framework</category><category>ide</category><category>javascript</category><category>vi</category></item><item><title>No Globo Repórter desta noite</title><description>&lt;p&gt;Ontem a noite passou uma edição do Globo Repórter que falava sobre Finanças Pessoais. Mostraram casos de pessoas que construíram uma casa arrumando unha (1 milhão de unhas diga-se de passagem), de crianças que poupam suas moedas e conseguem comprar bens relativamente caros, mostraram 2 amigas, uma que é gastadora e outra que controla melhor seu dinheiro.&lt;/p&gt;

&lt;p&gt;Mas apesar de tudo isso, em nenhum momento falaram sobre como controlar melhor gastos ou qual a melhor forma de ensinar as crianças a controlar seu dinheiro. E desse mal o Globo Repórter já vem sofrendo faz um bom tempo.&lt;/p&gt;

&lt;p&gt;Matérias sem profundidade nenhuma, apenas uma hora de &amp;#8220;matação&amp;#8221; tem se tornado comum na Rede Globo. Veja o Fantástico, que consegue passar 3 horas filosofando sobre o nada.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://felipediesel.com/images/canguru.jpg" alt="Briga" align="right"/&gt;Na outra mão corre a Rede Record, que tanto no Repórter Record (concorrente do Globo Repórter), quanto no Domingo Espetacular (concorrente do Fantástico) tem mostrado matérias aprofundadas e com mais conteúdo. Claro que sempre tem aquela mania de ficar anunciando o programa todo uma reportagem que só aparecerá no fim, mas nada é perfeito.&lt;/p&gt;

&lt;p&gt;Tem sido interessante essa busca do Bispo Edir Macedo em se tornar líder de audiência. Inclusive eles prentedem ser os líderes de audiência até 2012. Parece pouca coisa, mas aqui no Brasil a TV sempre foi Globo, desde que a Globo foi criada em 1965. Isso mesmo, 42 anos de liderança.&lt;/p&gt;

&lt;p&gt;Nenhum dos dois é santo, mas espero que essa briga ajude a ter menos decepções como a que tive ontem, quando ao terminar o programa, virei pra minha mulher e perguntei: &amp;#8220;Tá, e aí? O programa passou e não ajudou em nada!&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Crédito da Foto:  &lt;a href="http://flickr.com/photos/ozjulian/163274570"&gt;Julian Robinson&lt;/a&gt;.&lt;a href="http://flickr.com/photos/ozjulian/163274570"&gt;
&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;script type="text/javascript"&gt;var disqus_url = 'http://felipediesel.net/blog/no-globo-reporter-desta-noite/';&lt;/script&gt;</description><link>http://blog.felipediesel.com/post/483094048</link><guid>http://blog.felipediesel.com/post/483094048</guid><pubDate>Sat, 10 Nov 2007 08:19:00 -0400</pubDate><category>dinheiro</category><category>globo</category><category>Mídia</category><category>record</category><category>tv</category></item></channel></rss>

