sábado, novembro 25, 2006

Ruby on Rails

Um colega de trabalho, o Chico Ary (http://chicoary.wordpress.com/), certa feita falou sobre um tal de Ruby on Rails. Na época não dei muita atenção, apenas fiz a anotação mental de que seria algo interessante para se dar uma olhada quando sobrasse tempo.



Acontece que não há tempo livre para quem trabalha na área de informática. Foi portanto num dia em que estava de saco cheio do trabalho que estava tendo com um sistema em PHP que resolvi olhar o que era esse tal desse Rails.



Eu não sei se dizer que eu estava trabalhando nessa aplicação php por 4 meses e, começando a reescreve-la (do zero) em RoR (Ruby on Rails) consegui atingir 50% da funcionalidade que tinha (além de algumas cositas mas) em 9 dias faz jus à tecnologia.



Falo sério. O RoR aumentou minha produtividade de modo assombroso. Os detalhes mínimos que tomavam meu tempo no PHP são entregues ao Rails. Além disso a sintaxe do Ruby é agradável, mais fácil de se ler e se escrever. Em resumo é muito mais prático.



Acho que uma forma de comparação é colocando dois códigos lado a lado, então vamos lá (eu tirei a conexão ao banco porque no Rails é um arquivo de configuração enquanto que no PHP está no próprio código)



Temos 4 tabelas. tickets, categories, user_groups e users. Um ticket pertence a uma categoria que por sua vez pertence a um grupo de usuários responsável. Um user pode pertencer a vários grupos e, obviamente, um grupo tem vários users (implicitamente temos a 5a tabela). Queremos imprimir a lista dos usuários responsáveis por aquele ticket:



Em php:



$sql = "SELECT * FROM tickets WHERE id = 10";

$result = mysql_query($sql);

$ticket = mysql_fetch_array($result);



$sql = "SELECT * FROM categories WHERE id = " . $ticket["category_id"];

$result = mysql_query($sql);

$category= mysql_fetch_array($result);



$sql = "SELECT * FROM user_groups WHERE id = " . $category["id"];

$result = mysql_query($sql);

$user_group =
mysql_fetch_array($result);



$sql = "SELECT * FROM user_groups_user WHERE user_group_id = " . $user_group["id];

$result = mysql_query($sql);


while $user =
mysql_fetch_array($result)

{

$sql = "SELECT * FROM users WHERE id = " . $user["id"];

$result2 = mysql_query($sql);

$user_data = mysql_fetch_array($result2);

echo "Nome do usuário: " . $user_data["full_name"];

}

Você faz as contas. Certo, eu poderia ter usado um JOIN na consulta, mas ainda assim o código seria desnecessariamente complicado. No rails? Faríamos assim:



No modelo de Ticket:

belongs_to :category



No modelo de Category

belongs_to :user_group



No modelo de UserGroup

has_and_belongs_to_many :users



No modelo de User

has_and_belongs_to_many :user_groups



no código



ticket = Ticket.find(10) # o id do ticket era 10, lembra?

lista_usuarios = ""

for user in ticket.category.user_group.users

lista_usuarios = "Nome do usuário: " + user.full_name + "\n"

end



render :text = lista_usuarios


Agora me diga: o que foi mais legível? Mais fácil de escrever? Então visite www.rubyonrails.org e comece a conversão! :)



Se quiser um tutorial bom e gratuito, tem lá no www.rubyonbr.org





powered by performancing firefox

sexta-feira, outubro 20, 2006

Dos2Unix

Eis um utilitário bem interessante. Ele converte as quebras de linha do formato dos(CRLF) para o formato unix(LF) e vice-versa. Ótimo para quem usa Linux e pega alguns scripts prontos que fazem você usar algumas coisas do DOS. Bom, eu achei útil em duas ocasiões aqui em casa. O nome do pacote não é óbvio: sysutils. Para instalar, o velho apt-get install sysutils dá conta do recado.

sexta-feira, outubro 13, 2006

Firefox 2.0

O release oficial do Firefox 2.0 está se aproximando. Salvo engano está marcado para o dia 24 de outubro, uma terça-feira (é dia de encontro do pessoal do Mozilla no saguão de um hotel - é sempre lá que são lançadas versões alpha, beta, RCs etc). Fiz o download do RC2 para instalar no meu pendrive e testar as novas funcionalidades. Posso dizer que gostei muito da nova versão. Não espere grandes mudanças. O diferente está nas novas funcionalidades. Tudo que era bom foi mantido praticamente do mesmo jeito.

A interface mesmo. Sinceramente, gostava mais da antiga, mas não me incomoda a nova. Só um pouco mais "metálica", eu acho, na falta de palavra melhor.

Uma característica muito legal é o search suggestion: funciona especialmente bem com o google, claro. Você vai digitando a sua busca e o google sugere as palavras pra você completar a frase, como o GMail, ao você digitar o e-mail de um contato.

Outra coisa bacana é o phishing filter. Claro que até extraterrestres já sabem que existem pessoas enviando e-mails falsos, mas parece que muita gente não consegue entender que o Bradesco ou o Banco do Brasil não enviariam para eles e-mails com erru groceiros de portugês especialmente pontuassão concordânsia ortografia. Para essas pessoas o phishing filter já ajuda bastante.

Mas, sinceramente, o que eu mais gostei foi uma característica um tanto escondida: UNDO CLOSE TAB! Já apertou o botão do meio na aba errada (sim, o botão do meio fecha uma aba, mesmo que seja de rodinha)? Pois clique logo após com o botão direito na barra de abas e desfaça a operação. Só isso já vale o upgrade, com certeza! :)

sábado, outubro 07, 2006

GNU make

Já estava chegando a hora de criar vergonha na cara e começar a programar algumas inutilidades para Linux. Achei esse manual incrível sobre o GNU make (ja que o pessoal lá faz tanta questão da nomenclatura) e que, apesar de provavelmente já conhecido por qualquer programador Linux, achei válido colocar aqui para os que estão começando ou desejando começar.

Dêem uma olhada no manual do GNU make

sexta-feira, setembro 22, 2006

Putty e o Ctrl+S

Essa me deu muito trabalho: toda vez que eu apertava Ctrl+S acidentalmente no Putty(costume dos programas Windows), a sessão travava. Dava um trabalho danado, porque eu tinha que fechar o Putty e abrir novamente o arquivo, etc, digitar senha e tal... E se você estiver no vi, tem que dar um Recover e depois lembrar de excluir o arquivo temporário. Enfim, uma trabalheira.

Mas os seus problemas acabaram!!! Simplesmente pressione Ctrl+Q e tudo voltará ao normal! :)

quinta-feira, setembro 21, 2006

Jogos para Linux

O Linux não é uma plataforma para jogos? Se você quiser se divertir deverá fazer dual boot para o Windows ou usar o wine? Bom, não é a opinião dos caras da Techgage, que fizeram a lista dos 10 melhores jogos para Linux. E olha que não é Tetris e outros que vêm junto com o Gnome ou KDE não! :)

PS: Ainda acho que faltam muitos jogos, e que apesar do wine ser bacana, a melhor solucao ainda é o Windows (ao menos para jogos).

Shell Revealed

É isso aí! Parece até curso de shell script para Linux né não? O Shell Revealed , na verdade, é o blog do pessoal que desenvolve a interface ao usuário do Windows Vista. Um bom lugar para dar uma olhada no que vai mudar para nós programadores que estamos presos às vontades da gigante. Claro que tem coisas legais, como a tal da TaskDialog, por exemplo, por isso vale a pena dar uma olhada.