Felipe Diesel

Desenvolvedor de software

Foto de Felipe Diesel

Migrando para o tumblr

April 2, 2010 -

Migrações e migrações. Sim, saí do Wordpress e fui pro tumblr. 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.

Pois bem, mas como sou desenvolvedor e acredito que a maioria de quem lê esta bagaça (como diria o CQC) o interessante é como foi feita a migração.

Eu vi essa semana o script disponibilizado pelo Cairo Noleto, porém ele importou apenas os textos e eu queria importar o máximo possível de informação. Encontrei então outro script de importação que fazia algo mais próximo do que eu esperava e o melhorei corrigindo os erros que iam ocorrendo.

Veja o script de importação do wordpress para o tumblr.

O script importa os posts, categorias e tags. E para os comentários é usado o Disqus, pois fica muito mais fácil integrar.

Algo que não gostei muito foi do fato de o script original usar o hpricot, 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 .

Além dessa migração troquei o domínio de felipediesel.net para felipediesel.com e tive que fazer um monte de redirecionamentos.

CSS específico para cada página com RubyOnRails

March 26, 2010 -

Muitas vezes queremos adicionar um CSS específico para uma página. Você poderia fazer isso adicionando uma folha de estilo específica daquela página (em inglês) ou criando um id específico para cada página.

Com Rails eu faço da seguinte forma:

E no CSS:

O “page_” 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.

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 Shaun pode ser mais útil.

Livro jQuery - A Biblioteca do Programador Javascript

February 3, 2009 -

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.

jQuery por Maujor

A Editora Novatec me mandou um exemplar do livro jQuery - A Biblioteca do Pramador da Javascript, escrito pelo Maurício Samy Silva, 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.

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 $() e como funcionam as expressões até efeitos avançados e plugins.

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.

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!

Portanto recomendo o livro tanto para quem apenas ouviu falar dessa tal de jQuery, quanto para quem já é expert no assunto. Vá lá no site conferir.

Dica: Listando as rotas no console

September 21, 2008 -

O Carlos Brando publicou hoje um artigo sobre como testar rotas no console. 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:


$ ./script/console
>> app.methods.grep /_path$/

Este comando, pega todos os métodos da aplicação e filtra utilizando uma expressão regular.

Para melhorar a visualização, você pode adicionar o “y” na frente, para que ele converta o array de retorno em yaml:


>> y app.methods.grep /_path$/

E para ficar ainda melhor, adicione o “sort”, para ficar em ordem alfabética:


>> y app.methods.sort.grep /_path$/

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 ‘s’:


>> y app.methods.sort.grep /^s.*_path$/

Se você não conhece Expressões Regulares, dê uma lida na Web, tem muito material. Caso prefira livros, dê uma conferida no “livro do piazinho”, do Aurélio.

E o curso de Rails já acabou…

July 26, 2008 -

Conforme falei no artigo anterior, fiz o curso de Ruby On Rails da e-Genial, 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 Júlio Monteiro muito bom. De quebra ainda conheci muita gente legal e que com certeza manterei contato.

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.

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.

E o ganhador? Bom, não que eu queira me gabar nem nada, mas eu ganhei! :D O prêmio foi um livro muito bom, o Rails Way, do Obie Fernandez. 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ó acessar no github ou fazer o download do tarball.

Gostaria ainda de elogiar o TreinaTom, 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.

O Júlio 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. :)

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 screencast do Peepcode.

Ruby On Rails, aqui vou eu

July 13, 2008 -

Ruby On RailsTenho andado com os meu queixo dolorido nos últimos dias. Há um mês estou fazendo o curso de Ruby On Rails da e-Genial 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.

Pelo que vi até agora o grande diferencial dele é o Active Record. Eu trabalho o CodeIgniter recentemente, mas ele não tem ORM e isso faz uma falta enorme, já que no Rails os Models tem a função de configurar 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.

Outra qualidade que percebi nesse meu “namoro” com Rails, foi a Comunidade, que é muito ativa, trazendo novidades e material quase que diariamente. Tanto a comunidade internacional (dá pra chamar assim?), quanto a brasileira são legais. Isso contou muito na hora que optei pelo Ruby/Rails (em detrimento do Python/Django).

RubyOutra 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.

Me chamou a atenção no Ruby o modo literal com que as coisas são programadas (3.times { print “Hi!” }, 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

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, “toda unanimidade é burra”. Mas eu não estou sozinho.

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!

July 12, 2008 -

Wikipedia…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!

SSH mais simples ainda

June 2, 2008 -

Eu estava brigando a com o rsync 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.

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: ssh servidor.

Para que isso funcione, altere (ou crie se necessário) o arquivo ~/.ssh/config da seguinte forma:


Host servidor
  hostname enredeco.do.host.com
  user nome.do.usuario
  port 22

A porta só especifique se não for o padrão.

Fácil não?

E não esqueça de dar uma olhada no meu artigo sobre como logar sem senha, para facilitar ainda mais sua vida! :D

Utilizando layouts no CodeIgniter

May 21, 2008 -

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: Main com uma action: index, terá a view main/index.php.

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.

Pelo menos não havia… :D

Criei um pequeno hook que faz esse serviço. Crie seu controller como abaixo:


class Main extends Controller {

  function Main()
  {
    parent::Controller();
  }

  function index()
  {
    $this->data->foo = $this->db->get('main_table');
  }

  function show()
  {
    $this->data->foo = $this->db->get('another_table');
    // Você pode definir manualmente a view e o layout da seguinte forma:
    $this->view = 'main/index';
    $this->layout = 'popup';
  }
}

E ao acessar as duas actions a view main/index.php será chamada com os valores definidos na variável $this->data. Também será carregado o layout application/views/layouts/default.php na função index e application/views/layouts/popup.php na função show.

Download

Faça o download da hook ou de uma aplicação de exemplo (CI 1.6.2).

Instalação

Para utilizar este hook, copie o arquivo Layout.php dentro da pasta application/hooks/, defina a opção $config[‘hooks’] com true no config e adicione o seguinte no arquivo application/config/hook.php:


$hook['post_controller'][] = array(
  'class'    => 'Layout',
  'function' => 'view',
  'filename' => 'Layout.php',
  'filepath' => 'hooks',
  'params'   => array()
);

Espero que goste tanto de utilizar isto quanto eu. Me salva algumas linhas de código.

Cortando e redimensionando imagens com o CodeIgniter

April 10, 2008 -

Eu sei que não tenho aparecido muito por aqui, mas o desenvolvimento da nova versão do SiGA 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.

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 CodeIgniter. Na verdade o código serve não só para imagens quadradas, já que o tamanho tem que ser definido literalmente.

Cole o código abaixo na pasta application/library com o nome MY_Image_lib.php:


class MY_Image_lib extends CI_Image_lib {
/**
 * Crop and resize a image
 *
 * @return bool
 */
    function crop_and_resize() {
        $width = $this->width;
        $height = $this->height; 
        $size = getimagesize($this->source_folder . $this->source_image);
        
        if ($size[0] > $size[1]) {
            $this->width =  $width / $height * $size[1]; 
            $this->height = $size[1];           
        } else {
            $this->width = $size[0];
            $this->height =  $height / $width * $size[0];            
        }
        $this->x_axis = ($size[0] - $this->width) / 2;
        $this->y_axis = ($size[1] - $this->height) / 2;
        
        if ( ! $this->crop() ) {
            return false;
        }
        
        $this->width = $width;
        $this->height = $height;
                
        if ( ! $this->resize()) {
            return false;
        }
        return true;
    }
}

Pra usar é muito fácil:


$config = array(
'source_image' => '/path/para/a/imagem.jpg',
'maintain_ratio' => false,
'width' => 48,
'height' => 48);

$this->load->library('image_lib', $config);
$this->image_lib->crop_and_resize();

E temos uma imagem como a mostrada abaixo: