Paperclip Rails

Posted March 29th, 2009 in Desenvolvimento by felipepavao

Mais um post sobre Rails e dessa vez darei uma dica para usuários de MAC que estão apanhando para rodar o Paperclip e perceberam que o redimensionamento de imagem não funcionava. Entretanto, antes de começar, você pode ler um pouco mais sobre esta gem no blog Nome do Jogo, que fez um pequeno tutorial sobre  como usar o Paperclip. Se preferir em inglês, você poderá acompanhar o post do Jim Neath.

Continuando, é importante saber que o Paperclip utiliza a biblioteca de tratamento de imagens ImageMagick. Você poderá instalar utilizando o DarwinPorts.

Então vamos a dica. No MAC OS X, o Paperclip não encontra automaticamente o path do executável do ImageMagick que realiza os redimensionamentos. Para isso, realize as configurações que são descritas no post do Ricardo Shiota. Já para UBUNTU, é um pouco mais fácil a instalação. Apenas instale o ImageMagick utilizando apt e aproveite.

Gerenciador de pacotes, DarwinPorts e Mac OS

Posted March 21st, 2009 in Desenvolvimento by felipepavao

Mais uma dica rápida para quem está acostumado a utilizar um gerenciador de pacotes em sistemas Linux, via linha de comando. Basta instalar o gerenciador de pacotes DarwinPorts e ser feliz. Lá no site, você faz o download do .dmg e instala o programa clicando (como Windows). Depois disso, você terá o atalho “port” e poderá instalar diversos outros programas.

Update: Lembrando que para compilar qualquer coisa no Mac OS é preciso ter o pacote de programas XCode. Ele encontra-se disponível no Disco 2 de instalação do Mac OS X ou download em:  http://developer.apple.com/tools/download/

Auto-relacionamento em Rails

Posted March 19th, 2009 in Desenvolvimento by felipepavao

Finalmente o primeiro post sobre Rails. Essa dica é muito legal e prática para quem quer fazer auto-relaciomento com Rails. Estou postando porque não foi tão fácil encontrar a solução. Para facilitar, vamos exemplificar:

Vamos supor que em nosso sistema (um blog, por exemplo) temos categorias. E categorias podem possuir categorias filhas. Temos aí um auto-relacionamento para fazer, certo ?

No Rails, isso é muito fácil. No esquema das migrations, deveríamos ter algo parecido com isso:

class CreateCategories < ActiveRecord::Migration
  def self.up
    create_table :categories do |t|
      t.string :name
      t.string :description
      t.integer :father_id
	end
  end
 
  def self.down
    drop_table :categories
  end
end

A coluna father_id indica a o ID de uma categoria pai. Seria como uma Foreign Key. Agora precisamos definir o relacionamento no Model para que o Rails possa compreender a tabela que criamos.

class Category < ActiveRecord::Base
	has_many :children, :class_name => "Category", :foreign_key => "father_id"
	belongs_to :father, :class_name => "Category"
end

Essas duas linhas de código significam o seguinte:

  • A primeira linha, indica que Category tem filhos, utilizando o Model Category e chave estrangeira father_id;
  • A segunda linha diz que o mesmo Model Category pertence a um Category, estabelecendo aí o auto-relacionamento.

A partir daí, você já pode brincar e descobrir os filhos de um Category pai usando @category.children. Para descobrir o pai de um Category, use @category.father.

Para quem quiser aprender mais sobre relacionamentos no Rails, acesse o Guia Rails, ainda na versão em Inglês.  Em breve haverá uma versão em português. Assim que sair eu anunciarei por aqui.

Google Friend Connect e WordPress

Posted March 18th, 2009 in Desenvolvimento by felipepavao

Que o Google costuma fazer aplicativos de sucesso todo mundo sabe. E quando estes programas nos atingem e nos possibilitam aumentar a interação com nossos usuários, fica melhor ainda (Leia mais sobre o Google Friend Connect).

Uma maneira fácil de implementar este programa em seu blog feito em WordPress, é utilizar a plataforma de widgets. O primeiro passo é criar a estrutura da aplicação no site do Google Friend Connect. Faça também o upload dos arquivos que o Google indica para o diretório raiz do blog: o canvas.html e rpc_relay.html.

Depois disso, entre na administração do seu blog feito em WordPress e clique na seção de widgets. Crie um widget do tipo texto, insira um nome para ele e cole o trecho de código que o Google gerou. Se o seu blog utiliza a estrutura de widgets, certamente a aplicação aparecerá no site. É importante salientar que seu blog necessariamente deve ter no sidebar.php ou na parte referente ao seu menu, uma estrutura que possa reconhecer os widgets.

google-friend-connect-as-wordpress-widget

Como instalar o Google Friend Connect no blog sem utilizar a estrutura de widgets ?

Ao invés de colar o trecho de código em widgets, sera necessário colar o trecho HTML fornecido pelo Google no arquivo sidebar.php (ou no local apropriado) de sua estrutura de templates.

Testes de Django Middleware

Posted March 18th, 2009 in Desenvolvimento by felipepavao

Ainda não consegui parar e escrever sobre Rails aqui no blog, mas tenho descoberto coisas interessantes de Django. O novo desafio, aqui no trabalho, foi criar e testar um Middleware que tinha a função de identificar o User-Agent de um request e setar alguns parâmetros para que a aplicação pudesse se desenvolver a partir daí. É mais ou menos parecido com o que já foi mencionado aqui, anteriormente.

from django.conf import settings
from app.pub.structure import *
from django import http
import re
 
class IdentifyMiddleware(object):
 
    def process_request(self, request):
 
        # LIST PERFIS
        perfil = Perfil()
        perfis = perfil.all()
 
        for p in perfis:
            if p.regular_expression:
                logging.info("Identify User: regexp [%s]" % p.regular_expression)
                r = re.compile(p.regular_expression, re.IGNORECASE)
                if r.search(request.META['HTTP_USER_AGENT']):
                    request.perfil = p
                    return
 
        # SET PERFIL NONE
        perfil.name = "none"
        request.perfil = perfil

Esse Middleware lista expressões regulares guardadas em um banco de dados e compara com o User-Agent do request. Uma vez encontrada, é setado uma propriedade no request chamada perfil, identificando assim o tipo de request que estamos trabalhando. O teste realizado no Middleware era verificar se o request realmente trazia o parâmetro perfil setado.

#!/usr/bin/python
# vim: ai ts=4 sts=4 et sw=4
 
import unittest
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
#from django.test import TestCase
from django.http import HttpRequest
from app.handset.identify import IdentifyMiddleware
from django.conf import settings
 
class TestIdentify(unittest.TestCase):
 
    def _get_request(self, path):
        request = HttpRequest()
        request.META = {
            'SERVER_NAME': settings.CDA_URL
        }
 
        request.path = path_info = "/%s" % path
        return request
 
    def testPerfilIphone(self):
        request = self._get_request('identify')
        request.META = {
                        'HTTP_USER_AGENT':'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A538a Safari/419.3'
                        }
        IdentifyMiddleware().process_request(request)
        self.assertEquals(request.perfil.name, 'IPhone')
 
    def testPerfilStandard(self):
        request = self._get_request('identify')
        request.META = {
                        'HTTP_USER_AGENT':'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009030422 Ubuntu/8.10 (intrepid) Firefox/3.0.7'
                        }
        IdentifyMiddleware().process_request(request)
 
        self.assertEquals(request.perfil.name, 'standard')
 
if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(TestIdentify)
    unittest.TextTestRunner(verbosity=2).run(suite)

O teste por si só se explica, mas vale salientar o ponto onde foi utilizado a biblioteca HttpRequest do próprio Django para montar o request. Outro ponto é quando o teste instancia o método IdentifyMiddleware().process_request(request) do Middleware, o parâmetro request se mantem por referência, não necessitando de um retorno (return alguma coisa) do Middleware para continuar a testar o parâmetro perfil adicionado ao request.

Com certeza o próximo texto será sobre Rails, que é um framework que voltei a estudar muito para desenvolver projetos pessoais. Até lá.

WordPress plugin redirection

Posted March 13th, 2009 in Desenvolvimento by felipepavao

Já falamos do nosso plugin preferido para formulário de contato, o Contact Form 7. Então, seguindo a série de posts sobre bons plugins de WordPress,  vamos falar agora sobre um outro plugin, que faz redirecionamento de URLs, quando as alteramos em nossos blogs.

A utilização deste plugin é bem fácil, pois após instalado, ele monitora todas as alterações de URL para realizar o redirecionamento, facilitando a vida do WordPress ao localizar uma nova URL.

Wordpress plugin redirection

Aconselhamos a utilização do plugin Redirection para as pessoas que desejam alterar suas URLs sem correr o risco de erros 404..

Print screen no Mac OS x

Posted March 13th, 2009 in Utilidades by felipepavao

Bom, estou passando alguns problemas no meu servidor, mas ainda não sei se o problema é mesmo do servidor ou desta instalação do WordPress. De qualquer forma, perdi alguns rascunhos de bons posts para iniciar assuntos de Rails.

Como precisei recuperar alguns posts, precisei também fazer uns screenshots de imagens que não tinha mais. Só que fazer print screen no Mac não é tão trivial.

Por sorte, encontrei um artigo de um companheiro de Globo.com, o GC, que dá todas as dicas. Fica a dica dele, para todos que precisarem.

Aprenda a programar – programação para todos

Posted March 13th, 2009 in Desenvolvimento by felipepavao

Muitos amigos intessados em iniciar no mundo da programação têm dúvidas de como começar ou qual linguagem escolher para estudar, e se sentem perdidos neste imenso campo de informação. Para melhorar isso, indico a todos os leitores que sejam iniciantes, a praticarem os tutoriais de iniciação em Python e Ruby.

python logoruby logo

Não irei defender nenhuma delas, mas considero sendo estas 2 grandes linguagens em que um novo programador se sentirá confortável para desenvolver desde os conceitos básicos até os mais avançados. Divirta-se.

WordPress português

Posted March 12th, 2009 in Desenvolvimento by felipepavao

Para quem não sabe, nosso sistema de blogs preferido, o WordPress, tem traduções para várias línguas, inclusive nosso português. Para fazer download da versão tupiniquim, basta acessar br.wordpress.org.

As vantagens de utilizar uma versão em nosso idioma é de que nem todos os usuários/blogueiros tem facilidade com o inglês. Por isso, uma grande equipe de brasileiros se dedica a cada nova atualização do WordPress para manter os arquivos de tradução também atualizados. Esta é a grande maravinha do Open Source. E ainda tem gente que é contra ou tem medo disso…

Blog sobre Rails, Django e internet

Posted March 11th, 2009 in Projetos by felipepavao

Como sabem, sou a pessoa  responsável pelo projeto BlogFactory e pelas postagem no Blog da Fábrica. E ultimamente, por estar estudando muitas tecnologias diferentes, senti a necessidade de registrar minhas observações e compartilhar com a comunidade esse conhecimento. Surgiu então o StartAPP.org com layout simples e objetivo. Optamos por utilizar um layout padrão encontrado no repositório do WordPress para que a ideia deste novo projeto não ficasse na gaveta. Mas já estamos trabalhando em algumas customizações para dar uma identidade visual única ao projeto.

Portanto, quem tiver interesse em trocar ideias sobre software, internet, Rails, Django, não deixe de conferir o StartAPP.org.

Página 1 de 212