Bastos

let’s code!

Pattern matching para ruby?

September 18th, 2008 · No Comments

Apenas um hack para mostrar como Ruby é legal!

Tem uma biblioteca legal também chamada Functor: http://github.com/dyoder/functor.

Claro que se você, assim como eu, gosta mesmo desse tipo de feature, busque mais sobre Erlang ou Haskell.

→ No CommentsTags: erlang · hacks · haskell · ruby

Erlang

September 16th, 2008 · 2 Comments

Estou lendo o Programming Erlang, sempre tive vontade de aprender uma linguagem funcional e Erlang é funcional, mas com um plus que me interessa muito, concorrência! Além de outra coisa que eu sempre quis em Ruby ou Python, pattern matching, o que faz meus olhos geeks brilharem!

→ 2 CommentsTags: erlang

Django 1.0, Chrome e Python2.6

September 3rd, 2008 · 4 Comments

Lançado 1.0rc1, Wooohoooo! E veja a nova documentação, que sempre foi um ponto muito forte no Django.

O Google lançou o Chrome! Subprocessos, threads, webkit, V8, opensource! Em um teste de 2 minutos numa VM com Windows posso dizer que ele é lindo!

Por falar em subprocessos, Python 2.6 foi lançado tem suporte a eles, quer dizer, uma ótima alternativa as threads e o GIL!

Essa semana começou ótima!

→ 4 CommentsTags: chrome · django · google · python

Deu muito errado, graças a Deus!

August 24th, 2008 · 1 Comment

Lendo esse post aqui onde ele fala que alguma coisa deu errado com o Linux eu só tenho a falar uma coisa, graças a Deus. Ele não tem essa fatia de mercado por causas que vão bem além do KDE ou do GNOME. A usabilidade de um Gnome é muito boa na verdade! De fato um grande problema são drivers. Drivers (ATI…) e especificações fechadas da Microsoft (SMB…) e outras são grandes problemas! Mas o Linux é seguro, é confiável e tem inúmeras vantagens que o Windows nem pensa em ter…

A briga também não é só para quem tem um rosto bonito não, fique atento no desenvolvimento do Kernel, do Wine, do Gnome. Não é só concurso de quem tem a melhor cara, e sim de quem tem a melhor interface e o melhor desempenho.

Os desenvolvedores de SO não se esquecem da web2.0 não, web2.0 é algo novo, onde o contexto realmente relevante é conteúdo, leva tempo os aplicativos de um SO se adaptarem a essa nova realidade, mas muitos já estão como Photoshop, Firefox ou F-spot.

Outro problema grande é que boa parte dessas aplicações usam flash ou muito javascript, para isso nossos browsers tem que ser bastante rápidos e as equipes do Firefox ou Webkit por exemplo já estão correndo atrás para prover a tecnologia que aplicativos com base na web precisam.

Web é realmente a plataforma que vai vingar para boa parte dos softwares mas os SOs vão sim tem um papel importante, não quero usar meu banco online e um vírus entrar no meu pc, pegar minha senhas e tirar dinheiro da minha conta.

Sou desenvolvedor, uso Linux, e não sou xiita não, OSX é massa :D Sou 1% feliz em não ter que me preocupar com segurança, estabilidade e ter na minha mão algo que realmente posso utilizar e tirar proveito da melhor maneira possível!

ps: FreeBSD não é Linux!

*Esse post foi escrito em um Laptop HP, usando Archlinux (sem dual boot), Firefox e Awesome, ah, Windows XP não instala com o SATA habilitado, não tem driver…

→ 1 CommentTags: archlinux · flames · linux · windows

Dtrace

August 13th, 2008 · 3 Comments

Bem, minhas experiências com o Solaris 10 não foram das melhores, Linux é user friendly :D
Mas hoje tive boas horas com ele, instalei o Dtrace e vi que realmente é uma ferramenta bastante legal, pensando até em instalar o Open Solaris na máquina, mesmo que seja no virtual-box.

→ 3 CommentsTags: dtrace · solaris

PHP 5.3 com suporte a closures e funções anônimas

August 8th, 2008 · 2 Comments

Bem, um código vale mais que mil palavras:

$array = array(1, 2, 3, 4, 5);
array_map(function($text) { echo $text, PHP_EOL; }, $array);

Via http://gist.github.com/4646 e http://wiki.php.net/rfc/closures

→ 2 CommentsTags: php

Para pegar os classificados do Diário do Nordeste com Ruby :D

August 3rd, 2008 · 1 Comment

Para quem detesta a interface do classificados do Diário do Nordeste (Fortaleza):

#!ruby
require 'rubygems'
require 'hpricot'
require 'open-uri'
doc = Hpricot(open("http://diariodonordeste.globo.com/classif/consultando.asp?Filtro=#{$*[0]}&Operador=OU&Filtro2="))
doc.search(".anuncio").each do | anuncio |
    puts '****'
    puts anuncio.inner_text.strip
    puts anuncio.inner_text.scan(/[0-9]{4}+\.[0-9]{4}+/)
end

Para usar:
ruby diario.rb notebook

→ 1 CommentTags: hack · ruby

Pegando estatísticas do Memcached usando Sockets

July 31st, 2008 · No Comments

Eu queria ver as estatísticas do memcached, então resolvi procurar na internet e achei isso: http://lists.danga.com/pipermail/memcached/2003-October/000354.html, mas ai resolvi mudar um pouco para pegar todos os dados e virou:

#!/usr/bin/perl
use IO::Socket;
my $socket = IO::Socket::INET->new( PeerAddr => $ARGV[0],
                                    PeerPort => $ARGV[1],
                                    Proto    => "tcp",
                                    Type     => SOCK_STREAM)
					or die($@);
print $socket "stats\n";
$out = <$socket>
while ($out ne "END\r\n") {
    if ($out =~ m/STAT (\w+) ([0-9.]+)/) {
        print "$1 $2\n";
    }
    $out = <$socket>
}
close($socket);

*Para usa: ./memcachecheck.pl IP PORTA

Mas ai um colega de trabalho (Rudy Matela) me falou que podia ser feito em shell script:

#!/bin/sh
echo -e 'stats\nquit' | netcat $1 $2 | grep STAT | sed -e "s/STAT //"  -e "s/ /\\t/"

* Para usa: ./memcachecheck.sh IP PORTA

Muito mais legal! Porém resolvi também fazer em Ruby:

#!/usr/bin/ruby
require 'socket'
out = TCPSocket.open($*[0],$*[1]) do |socket|
  socket.puts 'stats'
  socket.puts 'quit'
  socket.read
end
out.each { |line| print line.gsub(/STAT /,"") if line =~ /STAT (\w+) ([0-9.]+)/ }

* Para usa: ./memcachecheck.rb IP PORTA

→ No CommentsTags: bash · memcached · perl · ruby · sockets

Diferença de Pro.new para lambda em Ruby

July 25th, 2008 · No Comments

Um colega estava com um problema, algo como isso aqui não funcionava como ele desejava:

def g
x = Proc.new { return 'ok' }
x.call
puts "Não irá mostrar isso"
end

Depois da chamada do pro x não se conseguia mais executar o resto da função. Ai tentando com lambda:

def g
x = lambda { return 'ok' }
x.call
puts "Irá mostrar isso"
end

Depois da chamada de x a função continuava a ser executada, procurando a diferença, bem é o seguinte, todo o centexto externo é passado para o Proc e assim se é chamado return ele não só executa return no escopo dele, ele executa um return no escopo externo! O mesmo não acontece com o lambda, que apesar de ver o contexto externo ele não “pega” para si esse contexto e usa como se fosse o dele.

Olhe esse exemplo:

def x
  y = 1
  f = Proc.new{ return y + 1 }
  f.call
  puts y
end

def z
  h = 1
  f = lambda { return h + 1 }
  f.call
  puts h
end

puts 'x:'
x()
puts 'z:'
z()

Vai imprimir:

x:
z:
1

Olhem esse outro:

def x
  y = 1
  puts Proc.new{ y = y + 1 }.call
  puts y
end

def z
  h = 1
  puts lambda { h =  h + 1; return h }.call
  puts h
end

puts 'call x'
x()
puts 'call z'
z()

No proc ele muda o valor e sem o return dentro ele não saí do contexto de x, já o lambda altera o valor e mesmo com return não sai do contexto de z.

call x
2
2
call z
2
2

Veja mais aqui e aqui.

→ No CommentsTags: ruby · tips

Dica para Gitweb

July 23rd, 2008 · No Comments

Quando forem colocar o gitweb em um servidor para sevir repositórios sem working copy e com working copy, lembre-se de colocar o usuário do servidor no grupo que tenha acesso a pasta do repositório, aparentemente se ele não estiver no grupo os repositórios criados com a opção “–bare” não aparecem listados.

→ No CommentsTags: apache · cgi · git · tips

Precisa instalar imagemagick no Solaris 10?

July 18th, 2008 · No Comments

Instalando da fonte:
# export PATH=/opt/csw/bin:/usr/ccs/bin:/usr/local/bin:$PATH
# export LD_LIBRARY_PATH=/usr/local/lib
# pkgrm CSWimagemagick
# mkdir /usr/local/src
# cd /usr/local/src
# wget ftp://ftp.imagemagick.org/pub/ImageMagick/legacy/ImageMagick-6.3.9-10.tar.bz2
# bunzip2 -dc ImageMagick-6.3.9-10.tar.bz2 | tar xf -
# cd ImageMagick-6.3.9
# ./configure –disable-static –with-modules –without-perl –without-magick-plus-plus –with-quantum-depth=8
# make
# make install

Agora a gem rmagick
# export CFLAGS=-I/opt/csw/include
# gem install rmagick

* Via http://kete.net.nz/documentation/topics/show/160-solaris-installing-required-software

→ No CommentsTags: imagemagick · rails · ruby · solaris

Dica para quem quer instalar Rails em Solaris 10

July 18th, 2008 · No Comments

Para você que quer ou precisa instalar Rails no Solaris, aqui vai a dica: CoolStack. CoolStack são pacotes do SunSource.net que serve para instalar Ruby, Rails, memcached dentre outras coisas que são uma mão na roda na hora de configurar um ambiente em Solaris 10.

→ No CommentsTags: rails · ruby · solaris · sun · tips

Instalei o Passenger, vulgo mod_rails :D

June 5th, 2008 · No Comments

Sem muitos traumas (apenas uma babaquice minha) um ambiente rails rodando com apache.

<VirtualHost *:80>
 ServerName www.railstest.com
 ServerAlias railstest.com
 DocumentRoot /home/tiago/apps/testrails/public
 RailsEnv development
 <Directory "/home/tiago/apps/testrails/public">
 Options FollowSymLinks
 AllowOverride None
 Order allow,deny
 Allow from all
 </Directory>
 RailsBaseURI /
</VirtualHost>

Vou mencionar a babaquice, o DocumentRoot tem que estar apontado para o public como diz o manual.

Para mais leiam a ótima cobertura do Akita sobre o Passenger na RailsConf e outros posts dele sobre o Passenger.

→ No CommentsTags: mod_rails · rails

Ruby-CE

June 3rd, 2008 · 1 Comment

Fundamos ( Eu e Landro Gualter, também da Zusee.com) o grupo Ruby-CE! Ainda falta fazer um site e tal mas o grupo está criado, esperamos também até o fim do ano quem sabe fazer uma “Ruby Conference” aqui no Ceará :D

→ 1 CommentTags: ruby

Viva o Ruby! VMs novas, Especificações etc.

May 26th, 2008 · No Comments

Fazem 2 meses mais ou menos que mudei de emprego e fui trabalhar no Atlântico/Secrel Internacional com Rails e afins. Bem estou bastante satisfeito, Rails me deixou mais contente ainda com minha profissão, Ruby faz programadores felizes!
Bem de fato é uma verdade, claro que a alguns contrapontos como o que Ruby 1.8 é lento, mas isso não chega a ser de fato um problema e para isso várias outras tecnologias estão vindo ou já vieram para resolver o problema como o próprio Mongrel ou a nova VM do Rails (YARV). Mas além dessas VMs estão sendo criadas várias novas como a MagLev e Rubinius.

Temos também o jRuby um port de Ruby para JVM que anda a passos largos todos os dias. Rubinius é baseada na arquitetura do Smalltalk-80 e a MagLev em uma outra VM de smalltalk. E pelo que parece todos vão estar com a mesma especificação!

Como se não bastasse tudo isso, surgiu o mod_rails ou Phusion Passenger que tornou o deployment de aplicações Rails peace of cake no Apache. O Dreamhost já suporta o Passenger, a LocaWeb está começando, isso me cheira a standard como é o mod_php, quem sabe um dia teremos o Passenger como o php nos shared hosts do mundo…

Viva o Ruby que em pouco tempo junto com Rails e outras tecnologias anda crescendo bastante, todo dia surgem novidades e gente querendo melhorar a plataforma, Ruby tem um futuro promissor e fico feliz em fazer parte disso.

→ No CommentsTags: passenger · rails · ruby · smalltalk · vm