Arquivo da categoria ‘Programação’

h1

Deixando o FireWatir um pouco mais rápido.

09-12-2009

Realizei alguns testes com o FireWatir mas achei ele um tanto lento, especialmente por ter de esperar ele “digitar” as informações. Então desenvolvi um método para o TextField para que ele somente inclua os valores, sem demorar muito.
Veja o código abaixo.

module FireWatir
  class TextField < InputElement
    def set_fast( setThis )
      assert_exists
      assert_enabled
      assert_not_readonly
      highlight(:set)
      @o.scrollIntoView
      @o.focus
      @o.select()
      @o.fireEvent("onSelect")
      @o.value = ""
      @o.fireEvent("onKeyPress")
      @o.value = setThis
      highlight(:clear)
      @o.fireEvent("onChange")
      @o.fireEvent("onBlur")
    end
  end
end

Para utilizar precisa-se apenas trocar o comando set por set_fast.
require 'rubygems'
require 'firewatir'
ff = FireWatir::Firefox.new
ff.goto('http://www.google.com.br')
ff.text_field(:name,"q").set_fast('dannnylo.wordpress.com')
ff.button(:name,"btnG").click

Esse teste fará com que o firefox entre no google e pesquise pelo meu blog ;) .
Espero ter ajudado.

h1

No tray com Ruby e GTK

25-09-2009

Como tenho ultimamente estado meio ausente do blog, resolvi criar ao menos um post rápido.

Estes dias tive necessidade de colocar um ícone no tray do ubuntu, visando um possível desenvolvimento posterior. Com isso resolvi fazê-lo em Ruby + GTK.

Primeiro é necessário ter instalado o Ruby ( caso não tenha ele instalado veja o tutorial Aqui ) e o GTK.

Para a instalação do Gtk para o ruby no Ubuntu é preciso apenas rodar o comando abaixo:

sudo apt-get install ruby-gnome2

Após a instalação está pronto para usar-mos.

#Adicionando a biblioteca
require "gtk2"
#Criando objeto
tray = Gtk::StatusIcon.new
#Define a imagem que aparecerá
tray.file = "icone.png"
#Cria uma verificação de ação
#No clique no icone
tray.signal_connect('activate') do
puts "Clicou no tray"
quit
end
#Método para fechar o GTK
def quit
Gtk::main_quit
end
#Comando para iniciar o GTK
Gtk.main

Este pequeno código pode gerar inúmeras possibilidades de implementações legais.

Mais tarde posto algumas coisas sobre Ruby com GTK.

h1

Plugin para Passenger no Webmin

07-08-2009

Estes dias estava instalando na empresa onde trabalho um servidor para desenvolvimento e testes, então ao instalar o Webmin (Gerenciador web de servidores), vi a possibilidade de criar um modulo que gerencia-se a criação, edição e remoção de RailsBaseURI e RackBaseURI para o passenger (já estava cansado de adicionar editando diretamente o arquivo), abaixo farei uma explicação de como instalá-lo.
Primeiramente desenvolvi o modulo visando apenas trabalhar com um único virtual host apache, provavelmente mais tarde criarei um que possibilite vários, mas isso é só no futuro.
Como pré requisitos para o modulo tem-se, ter o apache2 instalado, possuir o passenger já funcionando em sua maquina (caso não tenha instalado ainda veja este tutorial), e obviamente ter o webmin instalado.
Crie um o arquivo vazio chamado rails.conf na pasta /etc/apache2 , seguindo o comando abaixo.
sudo touch /etc/apache2/rails.conf
Adicione então ao seu virtualhost a seguinte linha:
Include /etc/apache2/rails.conf
Assim fazendo com que sejam rodados as configurações presentes no arquivo.
Então baixe no link abaixo o arquivo com o módulo.
passenger.wbm.gz.doc (Como o wordpress não permite postar outras extensões renomeie o arquivo para passenger.wbm.gz )
Então abra o webmin acesse Webmin Configuration >> Webmin Modules selecione From uploaded file e encontre o arquivo e clique em install module.
Pronto agora no menu ao lado na categoria server irá aparecer passenger.
Qualquer duvida me poste um comentário.
Obrigado

h1

Problemas ao tentar rodar Shoes + openssl no Windows XP

03-05-2009

Ao tentar usar o openssl com o shoes tive o seguinte problema, ele pedia o arquivo ssleay32.dll, depois de bater um pouco a cabeça, pesquisando e testando algumas soluções, decidi baixar o arquivo de instalação do openssl para windows e lá estava o arquivo que o shoes pedia.
Então copiei da pasta bin o arquivo para a pasta do shoes e não funcionou, deu erro falando que era neste arquivo libeay32.dll, então copiei ele também e pronto, openssl funcionado no windows e sem problemas.

Os instalador do openssl do windows pode ser encontrado neste link openssl-0.9.8e_WIN32.zip. Os arquivos estão dentro da pasta bin.

h1

Brincando com RSA no Ruby através do OpenSSL

27-04-2009

Para utilizar a Cifragem RSA com ruby, utilizaremos o OpenSSl.

Incluindo a biblioteca Openssl

require "openssl"

Criando uma chave privada:

chave_privada= OpenSSL::PKey::RSA.new(1024)

Segundo o algoritmo, a chave privada RSA é formada de três número primos representados pelas letras: P,Q,D.

Para saber o valor de cada uma delas é necessário somente utilizar o seguintes comandos:
chave_privada.p
chave_privada.q
chave_privada.d

Para gerar uma chave publica, a qual será usada na decifragem, é necessário apenas o seguinte comando:

chave_publica=chave_privada.public_key

A partir da chave privada consegue-se cifrar um texto por exemplo: “Brincando com RSA”

texto_cifrado=chave_privada.private_encrypt("Brincando com RSA")

Como resultado se obtém o texto:

texto_cifrado

=>”\215\322\351\35331\273\av\200\372a_k32\f\21230\336z359[\257^900>\343\345>B\335d v24\207\350\327\e\355Z\2263\bfKW06\312\216\nN35\343/\303Kr\217\254\333k%\366\2615Lz\360\253\205\352\212\303?\366P\”\372o C\24736.\233W\252\240\304\27505\23220\272M\305\303\363@Q\353B\311w\363\336\265\363\317′\270\263<\32535g\277\234#238~\316WL\335″

Para decifrar o texto acima, poderíamos utilizar a mesma variável como abaixo:

chave_privada.public_decrypt(texto_cifrado)

=> “Brincando com RSA”

Mas como dificilmente em uma mesma instância existiria cifragem e decifragem RSA, o texto da chave publica deve ser salvo e utiliza-se da seguinte forma, cria-se uma chave publica como no código abaixo:

nova_chave_publica = OpenSSL::PKey::RSA.new(chave_publica)

Assim para decifrar o texto é só utilizar o seguinte comando:

nova_chave_publica.public_decrypt(texto_cifrado)

Para saber os valores de E e N que formam a chave publica utiliza-se os seguintes comandos
chave_privada.e
chave_privada.n

Para mais informações acesse a Documentação oficial.

h1

Passenger: Error message: No such file or directory – /nonexistent

18-12-2008

Ontem ao instalar o sistema no servidor de um cliente, me deparei com o seguinte erro :

Error message:
No such file or directory - /nonexistent

Já tinha visto este erro, mas não sabia como resolvê-lo e nem porque ele acontecia.
Ele existe pois alguns serviços do pessenger estavam sendo rodados por um usuário chamado nobody, e ao procurar a pasta “home” deste usuário, o ruby recebia “/nonexistent” como sendo sua pasta.

Update: Existe uma forma melhor de resolver isto, do que a apresentada abaixo, veja ela Aqui. Obrigado Walter.

A solução encontrada pra esse erro foi criar a pasta /nonexistent com o comando com permissões de super usuário.
# mkdir /nonexistent

Esta foi a solução mais rápida encontrada, para ser resolvido o problema, mas acho que deve existir uma forma melhor de corrigi-lo.

Espero ter ajudado.

h1

Desabilitando clique com o botão direito via javascript

15-12-2008

Para desabilitar é necessário colocar as seguintes linhas no final da página:

document.oncontextmenu = function (evt) { e=evt||event; if(e==evt){e.preventDefault();e.stopPropagation();e.stopped = true;} return false;}

Testado no IE, FF, Opera e Chrome.

h1

Usando/ Instalando outras versões do rails

11-12-2008

Mesmo após o lançamento do rails 2.2 muitos servidores e programadores ainda usam o rails 1.2, pois tem maior número de servidores que o suportam, ou porque já possuem um sistema desenvolvido nesta versão.

Para instalar versões mais antigas do rails utilize o comando:
gem install rails -v VERSAO
Ou seja instalar a versão 1.2.6 use:
gem install rails -v 1.2.6

Atenção: Este comando necessita de permissões de administrador.

Após instalado, para criar uma aplicação com uma das versões anteriores utilize na seguinte sintaxe:
rails _VERSAO_ nome_da_aplicacao
No caso de uma aplicacao rails 1.2.6 o comando ficaria assim.
rails _1.2.6_ blog

h1

Dicas para Integrações/Exportações com Ruby on Rails

27-11-2008

Por ter suporte a diferentes tipos de bancos de dados, ruby / ruby on rails se torna uma ótima ferramenta para fazer integrações/exportações com bancos legados.
Mas aí surge o grande problema, normalmente bancos de dados legados, não seguem o padrões para os quais o Active Record foi desenvolvido, mas para isso foram desenvolvidos alguns itens dentro do própria classe ActiveRecord para você poder adaptar o seu Ruby/Ruby on Rails ao seu velho banco de dados legado.
Entre elas estão:
set_table_name

Este método faz com que o model acesse a tabela informada. Ele torna-se necessário pois como padrão o model tenta acessar a tabela que tem o mesmo nome que o seu arquivo/classe pluralizado, e também para poder criar models com nomes mais faceis e de melhor entendimento.

set_table_name "nome_da_tabela"

set_primary_key

Este método faz com que o model reconheça um campo primário diferente de id que é o padrão.

set_primary_key "nome_do_campo_primary_key"

set_inheritance_column

Outra coisa normal a se deparar em uma importação/exportação é com o seguinte erro:
ActiveRecord::SubclassNotFound: The single-table inheritance mechanism failed to locate the subclass: 'folder'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite Nodulo.inheritance_column to use another column for that information.
Ele aparece pois um dos campos da tabela possui o nome reservado pelo ActiveRecord, no caso acima o mais conhecido, o aparecimento do campo ‘type’, quando se está desenvolvendo o banco de dados do zero aconselha-se a trocar o nome do campo, mas quando temos de fazer o uso da tabela e não podemos modificar nada tempos um “problema”. Os nomes reservados são palavras utilizadas neste caso pelo activerecord para dar informações sobre o campo. No caso do type ele serve para informar qual é a o tipo do campo (subclasse).

Para solucionar isso utiliza-se o método abaixo para trocar o nome do campo da tabela, sem necessitar alterar realmente no banco de dados.
set_inheritance_column "novo_nome_para_o_campo"

Abaixo um exemplo de utilização.

Exemplo:

class Nodulo < ActiveRecord::Base
set_table_name "node"
set_primary_key "node_id"
set_inheritance_column "tipo"
end

h1

Problemas com o ruby + openssl

28-10-2008

Hoje fui testar os passos que comentei em outro post no ubuntu 8.10 , pra verificar se estavam corretos.

Pra não ficar na monotonia resolvi instalar o ruby do source, como eu já sabia que poderia ter problemas na hora de instalar o rubygems com o zlib instalei os pacotes zlib1g e zlib1g-dev, como citado na atualização daquele post.

Continuei feliz da vida instalando, funcionou direitinho o ruby , rubygems e o rails, e quando fui instalar o passenger o gem instalou corretamente mas tive uma feliz surpresa na hora de rodar o comando : sudo passenger-install-apache2-module

Apareceu então a seguinte tela:* GNU C++ compiler… found at /usr/bin/g++
* Ruby development headers… found
* OpenSSL support for Ruby… not found
* RubyGems… found
* Rake… found at /usr/local/bin/rake
* Apache 2… found at /usr/sbin/apache2
* Apache 2 development headers… found at /usr/bin/apxs2
* Apache Portable Runtime (APR) development headers… found at /usr/bin/apr-1-config
* fastthread… found
* rack… found

Pesquisei um pouco e encontrei em alguns fóruns a dica de instalar os pacotes: libopenssl-ruby1.8, openssl, libssl-dev e libssl0.9.8 , instalei os pacotes e nada.

Lembrei então de que as versões >= 1.8.7 ficam na pasta /usr/local/lib e não na /usr/lib que é a padrão da versão 1.8.6 que está como instável nos repositórios do ubuntu.

Então não teve jeito, desinstalei o ruby, apagando mesmo a pasta /usr/local/lib/ruby e na hora de instalar, adicionei o seguinte:
./configure --with-openssl-dir=/usr/lib
make
sudo make install

Após isso não tive mais problemas, instalei o rubygems, o rails e o passenger.
Espero que isso ajude.
Agradeço pelas visitas… qualquer dúvida é só deixar um comentário.
Obrigado