quarta-feira, 28 de maio de 2008

Pesquisando nos Grupos do Yahoo

Meu amigo MrBits me deu essa grande ideia:

#!/bin/bash
QTDE=20
CHARSET=UTF-8
GROUP=shell-script

while getopts g:c:q: OPTION ; do
case $OPTION in
g) GROUP=$OPTARG ;;
c) CHARSET=$OPTARG ;;
q) QTDE=$OPTARG ;;
esac
done

shift $(($OPTIND -1))

SEARCH="$@"

if [ -z "$SEARCH" ]; then
echo "Usage: $(basename $0) [-q qtde] [-g grupo] [-c charset] search"
exit 1
fi

BASEURL="http://br.groups.yahoo.com/group"
URL="${BASEURL}/${GROUP}/msearch?submit=OK&charset=${CHARSET}&cnt=${QTDE}&query=${SEARCH// /+}"
SEDCMD="/message/!d;/${GROUP}/!d;/.*[0-9]/!d;s#/group#${BASEURL}#g;s/<[^>]*span>//g;s/$/<br \/>/"

LYNXOPT="-dump -force_html -assume_charset=${CHARSET}"
lynx $LYNXOPT <( curl -b /tmp/cookie$$ -sL "${URL}" | sed "${SEDCMD}" )


Vejamos em uso:
$ ./find.sh              
Usage: find.sh [-q qtde] [-g grupo] [-c charset] search

$ ./find.sh -q 10 getopts # procurando por getopts limitando a 10 registros
[1]Re: [shell-script] Script de busca de mensagens
[2]Re: [shell-script] Re: script iterativo / passo a passo
[3]Re: [shell-script] Script de Backup
[4]Re: [shell-script] Script de Backup
[5]Re: [shell-script] Script de Backup
[6]Re: [shell-script] Script de Backup
[7]Re: [shell-script] Echo e executa: superecho
[8]Re: [shell-script] testar se parametro $1 foi passado
[9]Re: [shell-script] Echo e executa: superecho
[10]Re: [shell-script] testar se parametro $1 foi passado

References

1. http://br.groups.yahoo.com/group/shell-script/message/26373
2. http://br.groups.yahoo.com/group/shell-script/message/26204
3. http://br.groups.yahoo.com/group/shell-script/message/26078
4. http://br.groups.yahoo.com/group/shell-script/message/26076
5. http://br.groups.yahoo.com/group/shell-script/message/26075
6. http://br.groups.yahoo.com/group/shell-script/message/26072
7. http://br.groups.yahoo.com/group/shell-script/message/25742
8. http://br.groups.yahoo.com/group/shell-script/message/25720
9. http://br.groups.yahoo.com/group/shell-script/message/25719
10. http://br.groups.yahoo.com/group/shell-script/message/25718


Divertido, não? o default é procurar no grupo shell-script do yahoo, mas ele pode investigar em qualquer um.

Valeu Mr.Bits!!

terça-feira, 27 de maio de 2008

Francisco Ayala: Ciencia e Religiao

Interessante conclusão do Francisco J. Ayala:

Considere que pelo menos 20% das gravidezes notoriamente terminam em aborto espontâneo. Se isso resulta de anatomia divinamente inspirada Deus é o médico que mais realiza abortos.


Vale a pena ler o resto aqui

O começo:
Ex-padre defende que Deus e teoria evolutiva de Darwin são compatíveis

Para um professor universitário, Francisco J. Ayala passa muito tempo na estrada.
Biólogo e geneticista evolutivo na Universidade da Califórnia em Irvine, ele freqüentemente fala em universidades, igrejas e qualquer outro lugar, geralmente em defesa da teoria da evolução e contra argumentos do criacionismo e seu primo ideológico, o design inteligente.

quarta-feira, 21 de maio de 2008

Hello World orientado a objetos

Hoje em dia é raro um desenvolvedor conhecer bem apenas uma linguagem. Em nome da multidisciplinaridade, decidi mostrar algums exemplos do mesmo programa: uma classe HelloWord com um construtor que recebe uma mensagem ("ola mundo") e um método show() que imprime essa mensagem.

Vejamos um exemplo em C++

#include <iostream>
#include <string>
using namespace std;

class HelloWorld{
string mensagem;
public:
HelloWorld(string mensagem) { // construtor!
this->mensagem = mensagem;
}

void show() { // metodo show
cout << "mensagem: " << this->mensagem << endl;
}
};
int main()
{
HelloWorld obj("ola mundo");
obj.show();
return(0);
}


Agora o mesmo código em Java:

package Hello;

public class HelloWorld{
private String mensagem;
public HelloWorld(String mensagem){
this.mensagem = mensagem;
}
public void show() {
System.out.println("mensagem: " + mensagem);
}
public static void main(String [] args){
HelloWorld obj = new HelloWorld("ola mundo");
obj.show();
}
}


Agora, percebam a simplicidade do Ruby:
class HelloWorld
def initialize(mensagem)
@mensagem = mensagem
end
def show
puts "mensagem: #{@mensagem}"
end
end

obj = HelloWorld.new "ola mundo"
obj.show


Agora em Perl (sim, Perl!)
package HelloWorld;

sub new
{
my ($class, $mensagem) = @_;
my $self = { mensagem => $mensagem };
bless $self, $class; # abençoando a variavel!
return $self;
}

sub show
{
my $self = shift; # sim, ela vem como argumento!
print "mensagem: " . $self->{mensagem} . "\n";
}

my $obj = new HelloWorld("ola mundo");
$obj->show(); # parece artificial, não?

1;


PHP também é:
<?php

Class HelloWorld{
var $mensagem = "";
function HelloWorld($mensagem){
$this->mensagem = $mensagem;
}
function show(){
echo "mensagem : " . $this->mensagem . "<br/>";
}
}

$obj = new HelloWorld("ola mundo");
$obj->show();
?>


Por fim, vamos criar um tipo usando JavaScript
function HelloWorld(mensagem){
this.mensagem = mensagem;
this.show = function(){
alert("mensagem: " + this.mensagem);
}
}

var obj = new HelloWorld("ola mundo");
obj.show();


Edit: Python, atendendo a diversos pedidos
class HelloWorld:
def __init__(self, arg):
self.message = arg

def show(self):
print "mensagem: ", self.message

hello = HelloWorld("Ola Mundo")
hello.show()


A diferença entre uma linguagem e outra está (entre outras coisas) na sintaxe: em Perl eu tenho que criar os mecanismos na mão (com bless e receber $self) mas em Java e Ruby é tudo muito natural. Em Javascript eu não tenho uma construtor propriamente dito (muito menos classes) mas uma função (e crio um objeto dando um new nessa função).

Vou abordar o tema "herança" no proximo post, espero que seja útil :)

sexta-feira, 2 de maio de 2008

CRDS - Conselho Regional de Desenvolvedores de Software

Num futuro não muito distante, o carlinhos está desenvolvendo um pequeno sistema de contas a pagar para a Padaria do Manoel. Entretando o seu local de trabalho recebe uma visita de um fiscal do CRDS!

- Pronto
- Sr Carlos Silva?
- É ele.
- Meu nome é Teobaldo, sou fiscal do Conselho Regional de Desenvolvedores de Software. Fiquei sabendo que nesse recindo está sendo desenvolvido um "software".
- Exato! To desenvolvendo um...
- Antes de mais nada, qual a sua formação?
- Sou formado em ciências da computação pela faculdade VIVA VIVER, do Acre, na modalidade EAD. Meu trabalho de conclusão foi "um sistema escrito em java para a web 2.0".
- Puxa, ultimamente só tem dado essa faculdade.
- Po, ela custa 49,99 por mês...
- É claro. Continuando, onde está a ART desse sistema?
- Bom, é um sistema pequeno, com menos de mil linhas, precisa ART?
- Claro, e vc pode imprimir o boleto pelo site da CRDS, não tem desculpas.
- Ok. Eu pagarei...
- E onde está a documentação do sistema? Cadê o levantamento de requisitos, análise de impacto, análise de riscos, análise...
- EI! O meu sistema foi feito utilizando metodologias ágeis! É uma mistura de SCRUM com XP proporcionando um contrato de escopo aberto onde eu tento atender as necessidades do cliente, evitando burocracia, trabalhando em sprints de 15 dias...
- Ok, mas o CRDS exige essa documentação no template .doc que vc pode baixar do site
- Mas q .doc ?? Ta maluco, eu uso openoffice no meu linux.
- Linux ?? Vc desenvolve em um sistema operacional não homologado pela CRDS? Se ainda fosse Ubuntu...
- Mas Ubuntu é linux.
- Chega, se não tem documentação, como vc sabe que o sistema funciona?
- Eu uso testes unitários!
- Humm... teste precisa de um profissional habilitado em testes.
- Mas eu uso JUNIT, veja!
- Ei... q java esquisito é esse com esses @ e esses "maior e menor"?
- Isso se chama Annotations e Generics! Ta desde o Java 1.5
- Desculpe mas o CRDS só permite o uso de Java 1.4.2 que é a versão homologada para o Windows E Ubuntu.
- E se eu estivesse usando MacOS ?
- MacOS não foi homologado pelo CRDS ainda.
- Mas java é multiplataforma!
- Certo certo... e o modelo ER?
- Eu uso Hibernate para Abstrair o modelo ER..
- Hibernate ? Ok, terei que embargar o seu sistema...

TDD com Perl

É possivel fazer Test Driven Development com Perl? Mas claro :)

Artigo interessante sobre Test::More:
http://www.testingreflections.com/node/view/5333

Tutorial bem sucinto:
http://www.wgz.org/chromatic/perl/IntroTestMore.pdf

Excelente apresentação:
http://wellington.pm.org/archive/200606/tdd/

Pra descontrair...


Regulamentar a profissão dos outros é refresco

Na onda da campanha contra a regulamentação das profissões da área de informática

Eu, que trabalho como Analista de Sistemas e tenho Bacharelado em Física incompleto, tenho uma grande inveja do Phillip Calçado, que trabalha na Austrália, e postou recentemente sobre essa “lei”.

http://blog.fragmental.com.br/2008/03/21/ainda-bem-que-estou-aqui/

Cito a opinião da Sociedade Brasileira de Computação

1. Exercício da profissão de Informática deve ser livre e independer de diploma ou comprovação de educação formal.
2. Nenhum conselho de profissão pode criar qualquer impedimento ou restrição ao princípio acima.
3. A área deve ser Auto-Regulada.


Parece que os politicos querem saber mais de informática do que quem é da área (se bobear ninguem sabe o que é a ACM, devem achar que é um politico a pouco falecido). Fico com pena de algumas pessoas egoístas que pensam “tenho diploma, logo essa lei me favorece”. A nação brasileira frperde como um todo, retrocendendo décadas numa das atitudes mais lastimáveis de todos os tempos.

Parafraseando o Rodrigo Kumpera:

Para ser programador vamos precisar ter diploma, enquanto isso para fazer política basta assinar o nome. Regulamentar a profissão dos outros é refresco.


Segue a thread: http://br-linux.org/2008/campanha-contra-o-projeto-de-lei-6072007-de-regulamentacao-das-profissoes-da-area-de-informatica/

Código transparente, contas fechadas ?

Engraçado como começamos a falar em “Transparência de Contas” e aparece gente dizendo q queremos acabar com o FISL. Parece que a ideia é “Aceite o FISL como ele É ou tu és contra o software livre no Brasil (e provavelmente usa Windows em casa)”.

Mesmo que o FISL acabasse (o que não vai acontecer, e ninguem quer) existem dezenas de eventos acontecendo pelo Brasil afora (alguns com palestrantes internacionais até). O FLISOL aconteceu em diversas cidades simultaneamente, por exemplo. Esses eventos só tendem a crescer e se profissionalizar, criando todo um ecossistema de divulgação de conhecimento técnico.

“Código transparente, contas fechadas” é um lema perigoso que pode acabar com a reputação da comunidade de software livre brasileira.