quarta-feira, 5 de agosto de 2009
Kent Beck diz: "No Tests?"
Kent Beck sugere a abolição de testes para pequenos projetos.
Discussão sobre isso por Mark Levison, aqui.
Testes são como muitas coisas em software, uma questão de julgamento ("sensibilidade"?).
Nesse quesito, concordo com número, gênero e grau com Kent.
Se você está numa fase exploratória... simplesmente tentando novas ideias para ver se pode se comprometer com
essa ou aquela abordagem, por que usar TDD, por exemplo?
Agora, se você é muito apegado ao design e fazendo um trabalho exploratório, e você prefere TDD - então use-o! Use o melhor de seu julgamento para fazer a decisão baseada na sua situação atual.
Em tempo: não sou um "expert" em TDD, até comprei o livro que achei certo, mas tenho feito poucas coisas.
Para mim, prefiro ser pragmático, NÃO dogmático. Eu prefiro usar meu cérebro para fazer o que faz mais sentido em todas as circunstâncias, não é uma cega fidelidade a um modelo de processo para processo. Se fazendo "concepção e codificação" funciona melhor para você e sua equipe para dar consistência às ideias, vá em frente. Só não se esqueça de voltar atrás e "fazer as coisas certas", uma vez que você vai se comprometer a uma abordagem que vai ficar no código.
terça-feira, 4 de agosto de 2009
Diversity of opinions on JDK 7
* 10.4% (51 votes) - It's a major step forwardBeside this vote, the poll also gathered more open ended responses in regards to JDK 7 which also show a wide diversity of opinions on this release.
* 30.3% (148 votes) - It includes some important features
* 16.3% (80 votes) - It's a typical JDK release
* 41.5% (203 votes) - The most significant problems are not addressed
* 1.2% (6 votes) - Other
Read the entire post entitled 'Poll Reveals Diversity of Opinions on JDK 7', here.
Métricas
O desafio que eu vejo não é tanto sobre como recolher métricas no desenvolvimento de software. Vários anos usei métricas (quem lembra do famoso ciclomático?) quando trabalhava em sistemas de missão crítica e sempre tentei deixar o meu código e modelos de implementação tão bom quanto possível, sem ser muito louco por tudo.
O que é um bom nível de métrica? Sim, isso todos nós sabemos, "Você não pode melhorar o que você não mede."
Mas o que estamos tentando melhorar? Qualidade? Confiabilidade? Agilidade para fazer alterações? Lucro?
O que fazer para correlacionar uma medição a um resultado desejado? Podemos vincular um conjunto de métricas e o seu impacto sobre as metas comerciais para o software? Menos complexidade igual a mais lucro e mais (felizes) clientes?
Ou vamos parar logo para que "sensibilidade" (métricas) atinjam "qualidade" e, presumo que se medirmos uma determinada aplicação para satisfazer o "direito" no nível de qualidade, o valor comercial irá naturalmente seguir?
Este é um dilema difícil para a nossa indústria. Mas temos que começar por algum lado.
No mundo da engenharia, existem medidas que podem ser vinculados ao desempenho desejado e custo. Precisamos de algo semelhante que queremos ver maduro, e não apenas saias-justas, desculpas e "sensibilidade" técnicas; muito menos aves de mau agouro (embora acho essas aves úteis).
Estou certo que algumas pessoas têm isso como uma ciência ... e para eles, deve ser uma bela vantagem competitiva que é provavelmente difícil para partilhar publicamente.
quarta-feira, 22 de julho de 2009
O Google Chrome OS e a comunidade
“No dia 7 de julho, o Google contou ao mundo sobre um projeto chamado “Google Chrome OS”. É um novo sistema operacional, feito para rodar (a princípio) em netbooks. Como era de se esperar do Google, vai haver uma forte ênfase em aplicativos web; parece que o Google vem trabalhando bastante em uma inicialização rápida, na segurança e em uma interface de usuário simplificada. O Google promete abrir o código lá para o fim do ano; espera-se a comercialização do produto para o segundo semestre de 2010. A maior parte da imprensa vê o Chrome OS como um ataque direto à Microsoft, e é provável que seja mesmo.
Por Jonathan Corbet”
Publicado originalmente no: lwn.net
terça-feira, 14 de julho de 2009
Instalando um certificado SSL
Podemos ter uma importação pura e simples de um certificado, onde somente a chave pública é enviada ao servidor; no exemplo abaixo, procedimento para a importação de um certificado emitido pelo SERASA:
keytool -import -alias serasa -file serasa.cer
Será requisitado que você entre com uma password... essa password será a chave privada da keystore; ele só servirá para abrir o certificado do SERASA, onde contém a chave pública.
Enter keystore password:
Re-enter new password:Quando aparecer "Trust this certificate? [no]:", escreva yes
Owner: CN=Autoridade Certificadora Raiz Brasileira, ST=DF, L=Brasilia, OU=Instituto Nacional de Tecnologia da Informacao - ITI, O=ICP-Brasil, C=BR
Issuer: CN=Autoridade Certificadora Raiz Brasileira, ST=DF, L=Brasilia, OU=Instituto Nacional de Tecnologia da Informacao - ITI, O=ICP-Brasil, C=BR
Serial number: 4
Valid from: Fri Nov 30 10:58:00 BRST 2001 until: Wed Nov 30 21:59:00 BRST 2011
Certificate fingerprints:
MD5: 96:89:7D:61:D1:55:2B:27:E2:5A:39:B4:2A:6C:44:6F
SHA1: 8E:FD:CA:BC:93:E6:1E:92:5D:4D:1D:ED:18:1A:43:20:A4:67:A1:39
Signature algorithm name: SHA1withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
Key_CertSign
Crl_Sign
#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 8A FA F1 57 84 11 13 35 90 42 FA 57 49 54 69 0D ...W...5.B.WITi.
0010: A4 C4 F0 37 ...7
#4: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
[DistributionPoint:
[URIName: http://acraiz.icpbrasil.gov.br/LCRacraiz.crl]
#5: ObjectId: 2.5.29.32 Criticality=false
CertificatePolicies [
[CertificatePolicyId: [2.16.76.1.1.0]
[PolicyQualifierInfo: [
qualifierID: 1.3.6.1.5.5.7.2.1
qualifier: 0000: 16 2C 68 74 74 70 3A 2F 2F 61 63 72 61 69 7A 2E .,http://acraiz.
0010: 69 63 70 62 72 61 73 69 6C 2E 67 6F 76 2E 62 72 icpbrasil.gov.br
0020: 2F 44 50 43 61 63 72 61 69 7A 2E 70 64 66 /DPCacraiz.pdf
]] ]
Trust this certificate? [no]: yes
Certificate was added to keystorePara listar a chave importada...
keytool -listSerá requisitada a password e posterior listagem... neste ponto, a keystore se encontra em $HOME/.keystore
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
serasa, 18/02/2008, trustedCertEntry,
Certificate fingerprint (MD5): 96:89:7D:61:D1:55:2B:27:E2:5A:39:B4:2A:6C:44:6FMelhor renomear o arquivo .keystore para um nome que se entenda... como:
mv ../../.keystore serasa.jksUsaremos então como keystore, serasa.jks
Dica: No Windows a keystore fica armazena no userdir, e.g., C:\Documents and Settings\ccsilva.
Mais tem um detalhe...Obviamente você já deve ter percebido que precisará da senha da keystore, criptografada, para depois abrir o certificado e retirar a assinatura; ela não pode aparecer em plain-text e normalmente vai numa tag de properties, como abaixo:
user.jks=gHUrtR3FCQbigUmFOY/eXKxOtcajYEhp+g==RO6SyDLaAQ==Então, se procurar no Google, vai ser uma tristeza, pois se deparará com um monte de códigos, e outras tantas coisas "jogado ao céu" e, tudo fica complicado... e era para criptografar uma senha somente, não se preocupe, você somente vai precisar de um pequeno aplicativo, disponível aqui (cortesia do Marcelo Torres). Depois descompacte e execute:
$ java -jar criptografia.jar
Agora use copy/paste e faça bom uso da senha criptografada...
Obviamente, quem leu até aqui, irá perceber que precisa de algum
conhecimento adquirido, para enfim, fazer bom uso do post, práticoe sintético.
sexta-feira, 10 de julho de 2009
Instalando o Pronto! Gerenciador de Projetos Ágeis
"Pronto! é um sistema para controle de tarefas baseado no método ágil Scrum. É um projeto de código livre que conta com a sua colaboração!"
Fiquei imediatamente interessado, pois "browseando" o git, descobri que ele usa o ZK, um framework RIA que estou também interessado em conhecer. Fui em frente:
- para os pacientes, comece lendo aqui...
a) baixei o plugin do git pro Eclipse, apontei pra lá e baixei o projeto, já todo prontinho... antes tive que instalar o maven2 e também um plugin do Maven2 para Eclipse;
b) depois fiz toda a configuração do maven2 para ele criar um repositório local (M2_HOME); já havia mexido com o maven, então foi tranquilo.
c) gerei o pronto-xxx.war, joguei dentro do jboss 4.2.3.GA, usando jdk 1.6.0_u14, criei a base de dados usando um script fornecido pelo pacote, seguindo a sugestão do site do Pronto!;
- os impacientes, começam lendo aqui...
d) coloquei o jdbc (baixe a "8.3-605 JDBC 3") do Postgres, que é o banco de dados recomendado e tenho boa familiaridade com ele, dentro do JBOSS_HOME/server/pronto/lib (veja que sempre trabalho com uma cópia do default - JBOSS_HOME/server/default - e mantenho ela sempre íntegra);
e) alterei o IP para o Postgress no DataSource, alterei o nome para pronto-ds.xml e copiei para JBOSS_HOME/server/pronto/deploy (pode ser qualquer nome, desde que tenha o sufixo *-ds.xml);
f) criei um pequeno bootstrap para o startup do JBoss, já que não costumo alterar os arquivos e nem a infraestrutura, chamado run-pronto.sh, que deve ser colocado em JBOSS_HOME/bin; verifique esse arquivo e veja se precisa alteração, como IP por ex.;
#!/bin/bash
# alguns snippets para o bootstrap do Pronto
JAVA_OPTS="-Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m -Xss128k"
# exportar a variavel JBOSS_HOME (por garantia)
export JBOSS_HOME=/opt/jboss-4.2.3.GA
# inicia o JBoss numa instancia e num IP especificos
#./run.sh -c pronto --host 192.168.0.185
# IP padrao localhost
./run.sh -c pronto --host localhost
g) baixar e renomear o arquivo web archive para pronto.war e copiar em JBOSS_HOME/server/pronto/deploy;
h) para testar, siga abaixo:
cd JBOSS_HOME/bin
./run-pronto.sh
pelo browser: http://localhost:8080/pronto
usuário: admin
senha: admin
- para aqueles que tempo = ouro!
i) baixe um bundle pronto+jboss aqui; descompacte em qualquer lugar, verifique o pronto-ds.xml e o run-pronto.sh, para coisas de IP,... startup, aponte o browser para http://localhost:8080/pronto-agile e enjoy it!
Pronto!
quarta-feira, 8 de julho de 2009
Guides: Providing your SSH Key - Linux
Linux
Step 1: Check to see if you already have a public/private key pair for your user.
If you do, it will be in your~/.ssh directory.
[~]$ cd .ssh
[~/.ssh]$ ls
config id_dsa.pub
id_dsa known_hosts Key pairs are always named like something and something.pub. The something file is your private key and must be kept secret. The something.pub file is your public key, and this is what you’ll belong public domain.Step 2: Generate a public/private dsa key pair if you don’t already have one.
This is done with thessh-keygen program:
[~/.ssh]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/tom/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tom/.ssh/id_dsa.
Your public key has been saved in /home/tom/.ssh/id_dsa.pub.
The key fingerprint is:
Step 3: Upload your public key to Someone.
Copy your public key to the clipboard so you can easily paste it into your web browser. If you have xclip installed then:
[~/.ssh]$ cat id_dsa.pub | xclip The xclip command copies whatever is sent to it via STDIN to the clipboard (you may have to use xclip -selection clipboard), ensuring that you won’t have any extraneous newlines or other problems. If you don’t have xclip then either install it using your OS’s package manager or print out the public key to a terminal so that you can manually copy the key data.
[~/.ssh]$ cat id_dsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1FlHRbbxXIv/hLDTeJczlEqGNt0oFcoPEEENHThzP5ku
PDsitSSUH2MATP014G/3BzaI9pdnhf02MSEcmtmIKXrm05/dzxEmp9yOY32YHyk6/rLUGGTJuWOpGt3J
6H5LWxq9yeRUuFG/pCRH3+KxOyzasSHXfXJaC5v7wPxUdAeg9k0jwsUjnqUcYvzo5+GwCXV9dIwY3Sr/
OrL2l8SCdSWyd3PLufJXKQHlouHB0NI/+G/QjWmkB8c1PJh/VuIe36mqv82V9XXKvYNaVWwz5Sg6aY9u
p2lgDEme+AFdPPjOnkdF6OHCr7ymKg6c/B2YCbOW7QN/L4uAdVOhTNnJMQ== tom@volcano Copy the entirety of the public key to the clipboard. It is important that there are no newlines in the key (copying from the cat output in your console should work properly. Now you can simply select the place box and paste in your public key!
