Fonte: http://xkcd.com/378/
segunda-feira, 10 de março de 2008
Pra bom entendedor...
By
Tiago "PacMan" Peczenyj
às
14:07
1 comentários
Tags: off-topic
sexta-feira, 7 de março de 2008
Projeto reconhece profissões de TI
Projeto reconhece profissões de TI, mas exclui criação de conselhos
Fonte: TI Inside
A Comissão de Ciência, Tecnologia, Inovação, Comunicação e Informática (CCT) do Senado aprovou, nesta quarta-feira (5/3), parecer favorável do senador Eduardo Azeredo (PSDB-MG) ao projeto de lei que regulamenta o exercício das profissões de analista de sistemas e técnico de informática. A proposta é de autoria do senador Expedito Júnior (PR-RO) e agora será encaminhada à Comissão de Assuntos Sociais (CAS), na qual receberá decisão terminativa.
(...)
De acordo com a proposta, a profissão de analista de sistemas somente poderá ser exercida por pessoas que possuam diploma de nível superior em análise de sistemas, ciência da computação ou processamento de dados.
Sem comentários...
By
Tiago "PacMan" Peczenyj
às
19:14
5
comentários
Tags: Politica
quinta-feira, 6 de março de 2008
Sobre o "ensino" de Java hoje em dia.
Java é uma linguagem orientada a objetos que contem tipos primitivos e wrappers para estes tipos, é executada sobre uma maquina virtual, com suporte a herança simples mas possui interfaces, com mecanismos de sobreescrita e sobrecarga de métodos, com um sistema de tratamento de exceções que te obriga a tratar determinadas situações e por ai vai.
Ao meu ver o estudo da linguagem deveria focar o domínio do mecanismo de herança e a construção de classes, domínio dos métodos, tipos de retorno, escopos de variavel, conversão de tipos, domínio das estruturas condicionais, de loops e de tratamento de erros, domínio das operações matemáticas e lógicas e,principalmente, domínio da classe String (ok, domínio pode ser uma palavra forte, talvez uma boa noção fosse suficiente em algumas situações).
Com disso tudo, o aluno deveria primeiro trabalhar com argumentos de linha de comando (o que vc acha que o main recebe?), depois passar a estudar a leitura e escrita em arquivo texto e, por fim, leitura pela entrada padrão.
Pois leitura pela entrada padrão é o que vc menos vai fazer em Java. Ninguem faz programa com menuzinho em Java pra console no mercado. Temos coisas mais complexas pela frente e sem conhecer tudo aquilo que eu listei antes só é possivel fazer gambiarras (como as famosas class functions, gigantescos métodos que fazem centenas de coisas com nomes adequados do tipo createTree3).
Ensina-se Java ao contrário: primeiro o camarada programa como se fosse C, perdendo tempo em fazer menus e estruturas de controle pois o usuario pode ter dado um enter, tab, "ç" ou ter digitado algo inválido quando deveria aprender os fundamentos da linguagem. Cria-se vícios que pode ser custoso para remover (como encher o código de getters/setters sem necessidade). A prova disso é que invariavelmente temos comparação de Strings usando o operador == quando deveria ser utilizado os métodos adequados para isso (imagina o susto quando a galera descobre o equalsIgnoreCase).
Eu vejo muitos estudantes incapazes de compilar e executar uma classe (o famoso hello world) pois os mesmos nunca fizeram uso da linha de comando muito menos foram apresentados ao conceito de classpath. Vejo barbaridades típicas de quem não conhece (ou não sabe ler) o javadoc das classes básicas. Fico me perguntando quando esses jovens serão capazes de ler um "Effective Java", por exemplo.
Aqui tem um excelente começo.
Espero que os professores acordem para essa realidade e que os alunos percebam que estão sendo prejudicados e passem a estudar por sua conta os tópicos necessários para sair arrasando pro ai.
By
Tiago "PacMan" Peczenyj
às
08:22
11
comentários
Tags: Java
quarta-feira, 5 de março de 2008
Melhorando o “try()” do Ruby, a maneira “Groovy” [parte final]
class Omega
def a
self
end
def b
self
end
def c
self
end
def to_s
"Omega"
end
end
def da?
begin
yield() if block_given?
rescue => exc
nil
end
end
xyz = nil
a = da? { xyz.a.b.c }
xyz = Omega.new
b = da? { xyz.a.b.c }
puts "da? com nil -> '#{a}'"
puts "da? com Omega -> '#{b}'"Executando:
da? com nil -> ''
da? com Omega -> 'Omega'
O que eu fiz? como a expressão xyz.a.b.c poderia retornar algum erro pois um dos métodos poderia returnar nil, bastaria executar em um bloco de código com a ajuda do método da? (péssimo nome, uma corruptela de "da para executar sem erro? se não, me retorna nil e era wilson...), que captura qualquer erro e some com ele.
Ruby é divertido. :)
ps: teste com
a = da? { xyz.a.b.c } || "nao deu..."
By
Tiago "PacMan" Peczenyj
às
18:21
0
comentários
Tags: Ruby
Melhorando o “try()” do Ruby, a maneira “Groovy” [parte 2]
Vou pedir perdão ao meu amigo Urubatan, que publicou um artigo de mesmo nome.
class Omega
def doIt
puts "ola"
self
end
end
class NullableClass
def method_missing(*x)
self
end
end
class Object
def existe?
self
end
end
class NilClass
def existe?
NullableClass.new
end
end
xyz = Omega.new
xyz . existe? . doIt . doIt
abc = nil
abc . existe? . doIt . doItEstou em duvida sobre o nome do metodo, por enquando fica existe? mesmo.
O que isso faz? Imagine que vc tem uma variavel ou atributo de classe que pode ser nil. Se for nil ela vai lançar um um erro em tempo de execução quando vc for tentar chamar algum método que a NilClass não possua (o que geralmente acontece, é semelhante ao NullPointerException do java).
Eu poderia resolver isso alterando o method_missing da NilClass, porém alguns scripts podem estar esperando erros desse tipo. Decidi então criar um método que, para qualquer objeto, retorna ele mesmo (self). Caso seja nil, ele vai retornar um NullableClass (outro nome infeliz, não tenho nenhuma ideia melhor) que simplesmente retorna ele para qq método requisitado.
IMHO pode ser o suficiente quando queremos fazer um teste simples: o objeto é nil? então não faz nada.
Se alguem achar isso util por favor me avise :)
Ah sim, a execução do script acima resulta em:
ola
ola
By
Tiago "PacMan" Peczenyj
às
15:32
1 comentários
Tags: Ruby
quarta-feira, 27 de fevereiro de 2008
sexta-feira, 22 de fevereiro de 2008
Alterando Multiplos Arquivos (versão final?)
O site Dicas-L trouxe na ultima semana 2 formas de renomear multiplos arquivos (aqui e aqui)#Forma 1
for o in $(ls -1 *.txt); do
mv $o $(echo $o | awk -F. '{print $1".htm"}');
done#Forma 2
for i in `ls *.txt`; do
mv $i $(echo `basename $i .txt`.html)
done
São ambas formas interessantes, porém ao meu ver consomem muito recursos da maquina, sem falar que são um tanto... feios... (nada contra - o que importa é que funcione)
Vou utiliza-los como exemplo de como podemos tornar algo melhor e mais prático (se o tempo permitir).
Vamos dividir as paradas:altera() { mv $1 $(echo `basename $1 .txt`.html) ; }
for i in `ls *.txt`; do
altera $i
done
Agora vamos tomar um cuidado: arquivos com espaço no nomealtera() { mv "$1" $(echo `basename "$1" .txt`.html) ; }
for i in `ls *.txt`; do
altera "${i}"
done
Bom, o for pode iterar sobre uma lista de argumentos. As mascaras de nome de arquivo são expandidos pelo shell durante a execução, logo...for i in *.txt ; do
altera "${i}"
done
Agora, a rotina de alteração do nome do arquivo de destino é complicadissima, depende de um ou mais sub-processos. Isso poderia ser...altera() { mv "$1" "${1%.txt}.html" ; }
Que, inserido no for...for i in *.txt ; do
mv "${i}" "${i%.txt}.html"
done
Interessante, certo? Nenhum sub-processo, exceto o inumeros mv que serão executados. Existem outras formas de fazer a mesma coisals *.txt | awk -F. -v OFS=. '{ O=$0; $NF="html" ;printf "\"%s\" \"%s\"\n",O,$0 }' | xargs -n 2 mv
ls *.txt | sed 's#^\(.\+\)\.[^.]\+$#"&" "\1.html"#g' | xargs -n 2 mv
(rodem as linhas acima sem o mv do xargs para entende-las -- é metaprogramação)
Agora... tudo isso é muito bonito mas... veja se o seu computador possui os comandos mmv ou rename (que facilitam Absurdamente a tarefa)rename .txt .html *.txt
mmv "*.txt" "#1.html"
Simples, não?
Tudo depende do tempo que temos e das nossas necessidades. Mesmo que o rename/mmv sejam uteis, pode ser que a forma com awk / sed valha mais a pena pois o ls pode ser substituido por um find (ja pensou nisso?)
By
Tiago "PacMan" Peczenyj
às
19:27
3
comentários
Tags: Shell
sábado, 2 de fevereiro de 2008
Building Didier Stevens' SpiderMonkey in Cygwin
Eu estava quebrando a cabeça até que encontrei este post.
O Paul Melson ensinou de forma facil a compilar o SpiderMonkey para Cygwin: agora posso criar scripts usando javascript standalone.
Vantagem: Nenhuma, coisa de nerd :)
By
Tiago "PacMan" Peczenyj
às
14:26
0
comentários
Tags: Cygwin, Javascript
quarta-feira, 30 de janeiro de 2008
Twitter.sh versão 2.0
O Bruno me deu uma ótima sugestão: um simples usage.
Entretanto ontem eu fiquei batendo cabeça com os inúmeros tac/tail's mas percebi q um sed resolvia a questão. Alias é possivel também passar uma lista de parâmetros também!
#!/bin/bash
TWIURL=http://m.twitter.com # utilizando versão 'mobile' do twitter
USAGEMSG="Usage: $(basename $0) <twitter-user> [user list...]"
[ -z "$1" ] && { echo "${USAGEMSG}" ; exit 1 ; }
for i in "$@" ; do
echo "==============================="
links -dump "${TWIURL}/${i}" | sed -r '1,3d;/^\ +Older [0-9]+/,$d'
doneAgora chega :)
By
Tiago "PacMan" Peczenyj
às
09:02
2
comentários
Tags: Shell
terça-feira, 29 de janeiro de 2008
Twitter + shell script
Como acessar o twitter a partir de um shell script de apenas 2 linhas? Fácil
#!/bin/bash
links -dump http://m.twitter.com/${1} | tac | sed -n '/\*/,$p' | tac | tail +2Basta informar o username a ser impresso:
$./twitter.sh pac_man
pac_man pac_man fogo controlado agora. about 1 hour ago
Previous Updates
* minha cozinha pegou fogo. about 4 hours ago
* @gchapiewski To com a cuia, onde se compra a erva (mate)? about 9
hours ago
* @pcalcado alias XYZZY='echo -ne Zork!' about 16 hours ago
* XYZZY about 16 hours ago
* 4 horas pra montar um armario. Pelo menos jantei pizza. 08:36 PM
January 28, 2008
* Odeio fazer mudanc,a! Armario ainda nao ta pronto... 03:41 PM January
28, 2008
* Amanha chega a minha mudanc,a. Terei um pc finalmente. 07:41 PM
January 27, 2008
* Odeio limpar a areia dos gatos. 07:38 PM January 27, 2008
* E ainda tenho q desmontar uma geladeira :/ 12:30 PM January 27, 2008
Não consegui fazer com que o links entenda o conjunto de caracteres correto mas... quebra um galho. Depois vou fazer um que submeta um post :)
By
Tiago "PacMan" Peczenyj
às
21:59
1 comentários
Tags: twitter