Alex Florentino

KISS - Keep It Simple, Stupid
April 7th, 2009

Meu Primeiro Evento Ruby On Rails

Participei do meu primeiro evento Ruby On Rails, conforme minhas expectativas o evento foi bom, valeu apena o dinheiro e o tempo investido.

O Evento foi o Ruby e Rails no mundo Real 2009 confesso que o termo “mundo real” ficou mais no nome do que nas palestras.

1. Criando um Instant Messenger usando Rails

Palestra foi razoavel, falou sobre Jabber e XMPP de forma bem rapido afinal não da para apresentar um tema deste em 1 hora.

2. Ruby, Rails e empreendedorismo

Essa palestra sobre empreendedorismo ficou muito solta no evento, mais gostei, na verdade sempre gosto deste tema.

3. Ruby Desktop

Eu particularmente não gostei deste assunto, Ruby para Desktop ? é bom ter uma idéia sim, mas se vc realmente precisa desenvolver para desktop(windows) é melhor usar Delphi(.Net), ou java!

4. Outsorcing, ou como trabalhar para empresas gringas

Na minha opinião a melhor apresentação, salvou o evento e deu mais sentido no termo “Mundo Real” no nome do evento.

5. GlassFish on Rails: Escalabilidade e Confiabilidade

Palestra muito rapida, sobre um tema pesado! mais foi uma palestra e pesquisando na web você descobre que rodar sua aplicação no JRails + Glassfish pode ser uma boa saida.

6. Só os imaturos não testam

Uma das melhores palestras, Com bastante exemplos de utilização de testes e sobre a evolução dos desenvolvedores.

7. O que é e como funciona o RubyLearning

Uma palestra informativa sobre o projeto e como funciona, gostei!

8. Ruby, muito mais do que reflexivo!

Apresentada pelo Fabio Kung, realmente muito boa apresentação! Ele mostrou tecnicas para manipulação da linguagem usando ParseTree, ele deu exemplo de como usar essa ferramenta gerar métricas de qualidade do seu código.

Em resumo foi um bom evento, e compensou o investimento(R$50)
os organizadores estão de parabéns.

February 26th, 2009

Css Framework

Se você já teve que montar um layout de um site com css usando tableless, você já deve saber como essa simples tarefa pode se torna um pesadelo para um iniciante.

É comum problemas, uma propriedade funciona na versão 7 do IE outra não.

Com base nisso esta surgindo o idéia de CSS Framework, basicamente eles fornecem toda essa infra-estrutura de CSS para você, como por exemplo definir fontes padrões, e claro montar o layout, ou grid do seu site.

Abaixo irei explicar como utilizar o Blue Print CSS e construir uma estrutura basica de um site, header, footer e menu esquerdo.

1. Faça o download do framework em http://www.blueprintcss.org/

2. Descompacte o arquivo e copie a pasta blueprint para o diretorio raiz do seu site, neste exemplo irei utilizar c:\trabalho\site1

3. Vamos carregar o nosso framework em nosso site

index.html


<!DOCTYPE html PUBLIC "-/W3c/DTD HTML 4.01/EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<link rel="stylesheet" href="blueprint/screen.css" type="text/css" media="screen,projection">
<link rel="stylesheet" href="blueprint/print.css" type="text/css" media="print">
<!--[uf IE]>
<link rel="stylesheet" href="blueprint/ie.css" type="text/css" media="screen, projection">
<![endif]-->
</head>
<body>
</body>
</html>

pronto o nosso CSS Framework esta instalando agora vamos começar a usa-lo.

4. Definindo o nosso layout completo:


<!DOCTYPE html PUBLIC "-/W3c/DTD HTML 4.01/EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<link rel="stylesheet" href="blueprint/screen.css" type="text/css" media="screen,projection">
<link rel="stylesheet" href="blueprint/print.css" type="text/css" media="print">
<!--[uf IE]>
<link rel="stylesheet" href="blueprint/ie.css" type="text/css" media="screen, projection">
<![endif]-->
</head>
<div id="container">
<h1> Aqui é conteúdo do header. </h1>
<hr>
<h2 class="alt"> Simples teste </h2>
<hr>

<div class="span-15 prepend=1 colborder">
<p> Um simples texto para conteúdo </p>
</div>

<div class="span-7 last">
<ul>
<li><a href="#"> MENU 1 </a></li>
<li><a href="#"> MENU 2 </a></li>
</ul>
</div>
<hr>
<p> Um simples rodapé </p>

</div>
<body>
</body>
</html>

é essa uma estrutura basica de um layout em html, bom com isso já é possivel ter uma ideia do framework, mais é necessario um aprofundamento maior para entender toda logica do framework.

Baixe os arquivos utilizados acima junto com framework AQUI.

January 29th, 2009

Autenticação com ruby on rails - restful authentication + OpenID

Todo programador  já deve ter escrito varios e varios sistemas onde exista a necessidade de proteger algumas paginas, qual é a solução mais comum ? escrever mais uma vez código para login de usuario, acabando por duplicar código entre projetos.

Outro efeito ruim disso é que acaba duplicando informações de acesso de usuarios, exemplo cada sistema tem sua própria base de dados de usuario, para resolver(ou tentar) este problema foi criado OpenID.

O funcionamento do OpenID, em linhas gerais, é o seguinte: usuario é dono de uma url digamos http://ualex.myopenid.com e  este usuario deseja logar no meu sistema que suporta autenticação por OpenID, ele simplesmente digita sua url na tela de login do meu sistema e logo depois é direcionado para um OpenID provider, neste caso myopenid.com, no site do OpenID provider o usuario digita sua  senha e comprova que é dono da URL, logo após isso ele é redirecionado para minha aplicação e continua navegando normalmente.

Parece complicado não é ?  OpenID tem uma especificação bem clara e existe varios frameworks em varias liguagens para tratar o processo de autenticação, existe até frameworks para criar seu próprio OpenID Provider, este útil para centralizar autenticação de usuarios de aplicações web dentro de uma empresa.

Neste tutorial irei aproveitar aplicação construida no post sobre restful authentication para implementar autenticação por OpenID, vamos la.

1. Instalar a biblioteca openid-ruby


gem install ruby-openid

2. Instalar o plugin open_id_authentication


git clone git://github.com/rails/open_id_authentication.git vendor/plugins/open_id_authentication

3. Criar as migrations do open_id_authentication


rake open_id_authentication:db:create

4. Criar uma migration para alterar nossa tabela users


ruby script\generate migration add_identity_url_for_users

Nossa nova migration irá conter :


class AddIdentityUrlForUsers < ActiveRecord::Migration
def self.up
add_column :users, :identity_url, :string
end

def self.down
remove_column :users, :identity_url
end
end

5. Alterar nosso controller Session para permitir autenticação por OpenID ou por password

Com certeza essa é umas das partes mais “complicadas” do processo, você irá precisar fazer as seguintes alterações no seu controller session(criado pelo restful_authentication).


def create
if using_open_id?
open_id_authentication()
else
password_authentication()
end
end

def open_id_authentication
authenticate_with_open_id do |result, identity_url|
if result.successful?
if @current_user = User.find_by_identity_url(identity_url)
success_login()
else
failed_login "Sorry, no user by that identity URL exists (#{identity_url})"
end
else
failed_login result.message
end
end
end

def success_login
session[:user_id] = @current_user.id
redirect_to(root_url)
flash[:notice] = "Sucesso"
end

def  failed_login(message)
flash[:notice] = message
redirect_to(new_session_url)

end

def password_authentication
logout_keeping_session!
user = User.authenticate(params[:login], params[:password])
if user
# Protects against session fixation attacks, causes request forgery
# protection if user resubmits an earlier form using back
# button. Uncomment if you understand the tradeoffs.
# reset_session
self.current_user = user
new_cookie_flag = (params[:remember_me] == "1")
handle_remember_cookie! new_cookie_flag
redirect_back_or_default('/')
flash[:notice] = "Logged in successfully"
else
note_failed_signin
@login       = params[:login]
@remember_me = params[:remember_me]
render :action => 'new'
end
end

altere seu arquivo conforme o código acima.

6. Adicionando a opção OpenID na tela de login

vamos adicionar em nossa tela de login um field para usuario entrar com sua url, e caso esta url estiver presente autenticar por OpenID.


//arquivo: sessions/new.html.erb
<p><%= label_tag "OpenID URL" %>
<p><%= text_field_tag 'openid_identifier' %></p>

7. Alterar nossa view para permitir o cadastro de nossa url de autenticação


adicione o novo field identity_url para quando o usuario estiver no processo de signup, ele possa entrar com a OpenID url.

//arquivo: users/new.html.erb

<p><%= label_tag 'Identity url' %><br/>
<%= f.text_field :identity_url %></p>

8. Corrigindo um  detalhe para torna nosso site mais seguro


//arquivo models/user.rb

attr_accessible :login, :email, :name, :password, :password_confirmation, :identity_url

note foi adicionado o :identity_url no final da listagem.

9. Finalizando

Pronto, se você chegou até aqui é hora de testar, para criar um OpenID(free) acesse o http://www.myopenid.com e faça o seu cadastro, uma dica é utilize o rails 2.2 e tentei inicialmente o rails 2.1.1 mais existe uma incompatibilidade entre os frameworks nessa versão.

December 16th, 2008

Autenticação com ruby on rails - restful authentication

1. Criando novo projeto de exemplo

 rails -d mysql todo

2. gerando um scaffold simples, com o propósito demonstrar como funciona restful authentication

 ruby script\generate scaffold todo descricao:text prazo:date feito:boolean

vamos criar também nosso banco de dados para isso não se esqueça de configurar seu arquivo config\database.yml (development)

 rake db:create

e executa nossa migration para ele criar a tabela todos:

 rake db:migrate

agora é um bom momento para você startar sua aplicação e fazer alguns testes:

 ruby script/server

3. Baixando restful authentication

no diretorio raíz do seu do seu projeto

 git clone git://github.com/technoweenie/restful-authentication.git vendor/plugins/restful_authentication

para rodar esse comando você irá precisar instalar um cliente git

4. Rodar um generate que irá criar uma estrutura de autenticação em nosso projeto

 ruby script\generate authenticated user sessions

Este generate irá criar o user model para você que nada mais é que sua tabela de usuarios
e também irá criar o controlador sessions, que será usado para login e logout.

novamente precisamos executar uma migration para atualizar nosso banco de dados

 rake db:migrate

e precisamos incluir o modulo AuthenticatedSystem em nosso application controler (app\controllers\application.rb) para que a nossa infra-estrutura de autenticação fique disponivel para nossa aplicação.

 include AuthenticatedSystem

5. vamos alterar  no nosso controller todo para pedir autenticação,
para isso basta adicionar a linha:

 before_filter :login_required , :except => [:index]

lembre se para cadastrar um novo usuario http://localhost:3000/signup

Pronto esta feito! implementamos nosso sistema de autenticação.

December 5th, 2008

Reset da senha do mysql

Por um acaso já aconteceu de você esquecer a senha de root do mysql, para corrigir é muito simples basta iniciar o servidor mysql com a opção –skip-grant-tables e logo apoós logar sem senha e dar um update na tabela user, exemplo.


mysqld-nt.exe --skip-grant-tables

c:> mysql

use mysql

update user set password='' where user='root' and host='localhost'

pronto com isso você remove o password do root para o localhost.

December 3rd, 2008

Deployment com Ruby On Rails - Capistrano

Como desenvolvedor sempre surge a tarefa do deployment, ou seja, colocar o seu trabalho para rodar, no mundo web existe várias formas de fazer isso,  exemplo se o site for em PHP, é comum a utilização de FTP, SFTP e RSYNC.  Por outro lado se for java(JSP e Servlet) essa pode não ser uma medida eficiente já que normalmente envolve parar e iniciar o tomcat.

Mas independente da tecnologia,  essa é uma terefa rotineira e repetitiva então é razoável automatiza-la, é comum nesse aspecto a utlização de shell scripts, .bat etc.

No mundo ruby on rails temos uma ferramenta muito boa para fazer isso é o : CAPISTRANO que automatiza essa tarefa, de forma muito elegante.

basicamente para utiliza-lo, você precisa seguir alguns passos básicos.

1. Instalar o capistrano atráves do GEM


gem install -y capistrano

2. Capification é basicamente criar alguns arquivos modelos no seu projeto Ruby On Rails , basta ir para raiz do seu projeto e digitar:


capify .

3. Algumas configurações basicas no arquivo config/deploy.rb


set :application, "seuprojeto"
set :repository,  "https://urlseurepositorio/svn"
set :deploy_to, "/pathnoseuservidor/#{application}"
set :user, "userssh"
role :app, "servidorapp"
role :web, "servidorapp"
role :db,  "servidorapp", :primary => true

Arquivo bem simples, e para quem já criou script de deploy na mão, é bem simples de entender.

4. Criar o arquivo script/spin, esse arquivo é que você colocar o comando para reiniciar sua aplicação no caso como eu uso Passenger, basta :


touch /pathyourproject/current/tmp/restart.txt

faça um commit das alterações.

5. Vamos criar a estrutura basica no nosso servidor


cap deploy:setup

6. E por último fazer um release


cap deploy:update //(copia os última versão do servidor de código fonte)
cap deploy:start //(faz o release, e se for caso reinicia a aplicação)

pronto em questões de minutos usando o Capistrano você automatiza o deployment do seu projeto,
eu já fiz shell script para fazer isso e também já usei o Apache Ant e digo uma coisa o
Capistrano é uma solução elegante para essa tarefa.

November 18th, 2008

Fazendo upload de arquivos grande com PHP

Caso em seu sistema PHP você precise fazer upload de arquivos grandes, antes de mais nada você precisa revisar sua configuração do PHP, e esteja certo de setar corretamenta os parâmetros :

upload_max_filesize = 50M
post_max_size = 50M

November 13th, 2008

ActiveRecord sem Rails

No mundo Ruby On Rails ja é comum a utilização do ActiveRecord o que pode não ser tão comum é a utilização do framework AR fora de uma aplicação Rails.

Exemplo no sistema que estou trabalhando preciso fazer alguns testes, e portanto sempre preciso apagar o banco de dados e carrega-lo com dados novamente, não queria fazer isso com os sql inserts, é ae que entra o ActiveRecord.


require 'rubygems'
require 'active_record'

ActiveRecord::Base.establish_connection({
:adapter => 'mysql', :database => 'database', :username => 'root', :password => '', :host => 'localhost'})

class Pessoa < ActiveRecord::Base
set_table_name "pessoa"
end

agora você já pode fazer algumas mágicas, exemplo :


irb -r ActiveRecordTest.rb

p = Pessoa.new

p.save

o que acontece é que você já é capaz de salvar dados no seu banco de dados, sem utilizar SQL.

Definitivamente ActiveRecord é muito prático!

November 4th, 2008

Horário de verão no ubuntu e php

Recentemente estou encontrando varios problemas com servidores linux(ubuntu) por causa do horário de verão, encontrei um problema também com php, ou seja, no console o comando date retorna uma data e no php a função date retorna outra data…

Nesse caso é melhor começar organizando as coisas primeiro , no console

1. tz-select

selecione a zona correta de sua região

2. apt-get install tz-brasil

esse programa tomará conta do horario de verão, irá se encarregar de mudar a hora no momento correto.

com esses comandos consegui fazer date do linux ser igual a função date do PHP.

dependendo da sua necessidade pode ser necessario reiniciar o apache, mysql etc.

boa sorte.

October 21st, 2008

Acertando a hora no Linux

Nessa época de horario de verão não é raro ter que acertar o horario das maquinas na mão, então para facilitar segue um exemplo do comando date:

date -s “10/21/2008 16:11″

fonte