Redirecionamento 301

Posted February 22nd, 2009 in Desenvolvimento by felipepavao

Estamos nos preparando para migrar o Primeira Chance e precisamos fazer algumas alterações de infra-estrutura para que o Google perceba nossa mudança. A melhor forma de fazer isso, é realizer o famoso “Redirect 301“, que faz o redirecionamento permanente de qualquer url que você deseje para uma nova.

Para exemplificar, veja como agiremos: em um primeiro momento, teremos que redirecionar todas as chamadas para um subdomínio “vagas”. Criaremos então um arquivo .htaccess na raiz do site com o seguinte conteúdo:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://vagas.primeirachance.com.br/$1 [R=301,L]

Este script captura todas as chamadas HTTP e faz o redirecionamento 301 permanente para o novo endereço, realizando a nossa tarefa de maneira bastante simples

Dropbox no Ubuntu e MacOs

Posted February 22nd, 2009 in Utilidades by felipepavao

Antes de mais nada, quero salientar que este post é programado. Certamente estarei tomando uma cerveja e comendo uns petiscos em alguma praia da Região dos Lagos.

Mas, fugindo um pouco do foco do blog, deixo uma dica de grande utilidade para quem precisa de espaço: o compartilhador de arquivos Dropbox. É um serviço que oferece 2GB de espaço para compartilhamento de arquivos pessoais, sendo possível também compartilhar pastas entre seus amigos preferidos, e ainda possui uma conta paga no valor de $9,99 por mês ou $99 por ano.

A gerência de seus arquivos é feito a partir de um programa instalado no computador. Sua instalação no Windows e MacOS X é muito fácil, pois estes sistemas já possuem bons programas instaladores. No Linux (mais precisamente no Ubuntu), o programa se integra ao Nautilus, bastando reiniciá-lo (killall nautilus) para observar seu ícone no sistema (próximo ao relógio).

Dropbox

Mac, Apache, PHP e MySQL

Posted February 20th, 2009 in Desenvolvimento by felipepavao

Post rápido para ir bem pro carnaval em Cabo Frio. Desde que comprei um Macbook (1 semana atrás), ainda não havia parado para levantar o ambiente de desenvolvimento PHP. Como Apache e PHP já vem instalados, prefiro deixar um link onde pode ser encontrado maiores explicações (Leia http://foundationphp.com/tutorials/php_leopard.php).

O problema que enfrentei foi em fazer a conexão com o MySQL. Geralmente quem usa o PHP, define na função de conexão com o banco, o parâmetro “localhost” de instância. Por algum motivo, o PHP não consegue estabelecer conexão e eu tive que utilizar como parâmetro o endereço físico do socket MySQL: “:/tmp/mysql.sock“.

E para fechar o post, apenas mais um detalhe: é preciso instalar a biblioteca de conexão do PHP com o MySQL. Para isso, faça o download em http://www.entropy.ch/software/macosx/php/. Antes de instalar o aplicativo, crie o link simbólico do cliente do apache (sim, é uma correção de bug pois o programa considera o endereço do apache como sendo /etc/httpd. Faça o link ln -s /etc/apache2 /etc/httpd. Após isso, instale o pacote baixado no site Entropy e seja feliz.

Update: Para evitar ter que ficar usando na conexão o endereço do socket do Mysql, basta setar o parâmetro mysql.default_socket = /tmp/mysql.sock dentro do php.ini (/etc/private)

Aplicações web Iphone e Django

Posted February 18th, 2009 in Desenvolvimento by felipepavao

Para os que não sabem, eu trabalho desenvolvendo sites para dispositivos móveis (celulares e smarthphones) na Globo.com, e no último projeto que utilizamos o Django, precisávamos desenvolver um identificador de User Agent. Este identificador direcionaria a renderização de templates para o endereço correto onde os arquivos customizados se encontravam, pois fizemos templates específicos para os aparelhos portáteis da Apple.

Seguindo a linha do Django e após algumas pesquisas, encontramos um Middleware que resolvia a questão.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from django.conf import settings
import re
 
class iPhoneMiddleware(object):
    """
    If the Middleware detects an iPhone/iPod the template dir changes to the
    iPhone template folder.
    """
 
    def __init__(self):
        self.normal_templates = settings.TEMPLATE_DIRS
        self.iphone_templates = (settings.TEMPLATE_DIRS[0] + '/iphone',)
 
    def process_request(self, request):
        p = re.compile('iPhone|iPod', re.IGNORECASE)
        if p.search(request.META['HTTP_USER_AGENT']):
            # user agent looks like iPhone or iPod
            settings.TEMPLATE_DIRS = self.iphone_templates
        else:
            # other user agents
            settings.TEMPLATE_DIRS = self.normal_templates
        return

O código é muito explicativo, mas vale denotar o ponto chave, quando o script executa a expressão regular procurando pelas palavras “iPhone|iPod” vindas do parâmetro “User Agent”, ele altera o endereço padrão dos templates para a pasta padrão ou para o path + “/iphone”.
Está aí a mágica do negócio.

A função do Middleware para o Django

Posted February 17th, 2009 in Desenvolvimento by felipepavao

Apesar de preferir utilizar em meus projetos pessoais o Rails, tenho estudado e trabalhado muito com o Django. E uma das características mais legais que eu encontrei foi a questão dos Middlewares.

Em comparação com o Rails, seria como um filtro (:before_filter por exemplo) que executaria um comportamento antes da ação principal. O Middleware também tem essa função no Django: é executado antes do processamento da view (que no Rails seria o controller). Veja na imagem como é processado um request com a utilização de Middlewares:

1
2
3
4
5
6
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
)

Processamento de um request no Django

Este trecho de código fica declarado no arquivo de configurações do Django. Ele indica a ordem como os Middlewares serão executados. Essa abordagem nos traz a facilidade de incluir uma série de comportamentos antes de ter um método da view executado.

Plugin Contact form 7 WordPress

Posted February 16th, 2009 in Desenvolvimento by felipepavao

Todos sabemos que o WordPress (CMS que a BlogFactory utiliza nos blogs que desenvolvemos) possui diversos plugins interessantes que facilitam nossas vidas. Porém sentíamos dificuldade em encontrar um bom plugin que nos fornecesse um formulário de contato. Achamos que o Contact Form 7 se destaca perante os mais conhecidos (WordPress Contact Form,Contact Form II) pois tem uma configuração bastante fácil e permite total customização.

O plugin permite que se grave várias configurações de formulário para utilização em diferentes lugares do blog e também permite validação dos campos. Além disso, ele tem um gerador que te auxília a criar o formulário. As respostas para as validações podem ser traduzidas para o português facilmente.

Screenshot do plugin Contact Form 7

Aconselhamos a utilização deste plugin que tende a ser adotado por vários blogs, pelo que parece, está ganhando um apoio do pessoal do WordPress.

Internet, software, eventos e dicas

Posted February 14th, 2009 in Projetos by felipepavao

Sejam bem vindos ao meu novo espaço. O título do blog resume o que pretendo fazer aqui, desejo compartilhar descobertas e trocar idéias sobre software, internet, linguagens e tudo que envolve esses temas.

Falando agora um pouco sobre mim, meu nome é Felipe Santiago e atualmente trabalho como desenvolvedor da Globo.com. Sou entusiasta de metodologias ágeis, incluindo linguagens e boas práticas para desenvolvimento de software.

Espero manter constância na atualização deste blog e compartilhar um pouco do que eu aprendi nestes últimos tempos.

Abraços e até mais.

Atualização WordPress 2.7.1

Posted February 13th, 2009 in Desenvolvimento by felipepavao

Post rápido para comunicar que temos atualização do nosso sistema de blogs preferido, o WordPress. São algumas atualizações de segurança e não podemos deixar de fazer para garantir o bom funcionamento do sistema

As dicas de atualização para a versão 2.7 também valem para esta versão, então basta seguir este post. Atualize também o wp-config.php e coloque as informações pertinentes a sua configuração de instalação do WordPress.