segunda-feira, 7 de dezembro de 2009

MACOSX: Configurando teclado US International

Para utilizarmos os caracteres acentuados do português corretamente no MACOSX é necessário configurar o layout do teclado para US International. E para isso, o procedimento é bem simples:

  1. Baixe o arquivo dmg aqui.
  2. Abra o arquivo dmg e copie o arquivo US International para o diretorio /Library/Keyboard Layouts - exatamente com esse nome, caso não exista na sua distribuição
  3. Faça logout para que o novo layout seja reconhecido e login novamente.
  4. Vá em 'System Preference', escolha 'International' >> 'Input Menu' e seleciona US International na lista
  5. Selecione o layout correspondente na barra superior do MACOSX (escolhendo o icone da bandeira americana) - caso não mude automaticamente.
  6. Pronto, instalação do novo layout concluída. Você pode testar digitando acentos seguidos por letras como á, ç ou ó.

Simples assim.

Referência aqui.

sábado, 28 de novembro de 2009

Rootkits no Linux

Rootkits são trojans que tentam esconder sua presença fazendo-se passar por drivers, processos ou arquivos do sistema operacional. Ao contrário do que possa parecer, os sistemas Linux também podem ser afetados por eles, embora não seja tão frequente quanto no Windows.

Para verificar se o seu sistema está infectado, existem diversas opção, gratuitas e pagas. Entre elas, duas são especialmente simples de instalar e executar:

chkrootkit

Para instalar, basta abrir uma janela de terminal (shell) e executar:

sudo apt-get install chkrootkit

e confirmar a instalação - será necessária a senha de root (administrador do sistema). Para executar, basta digitar

sudo chkrootkit.

Será realizada uma varredura no sistema e apresentado um relatório com os resultados. Fique atento para os avisos.

rkhunter

Outra opção é o rkhunter. O procedimento de instalação é similar:

sudo apt-get install rkhunter

confirmando a instalação - este requer algumas confirmações adicionais. A execução também é a mesma:

sudo rkhunter --check para executar a varredura padrão no sistema ou

sudo rkhunter para obter mais opções.

Ambas as soluções são gratuitas e os procedimentos foram executados sobre o Ubunto 9.10, mas não devem variar muito em outras distribuições. As duas ferramentas apenas identificam a existência dos rootkits, sem removê-los. Isso é tema para outros artigos.

domingo, 5 de julho de 2009

Checklist para Scrum

Uma das reuniões previstas no Scrum é a Sprint Retrospective. Nesse encontro, a equipe discute o sprint anterior, o que foi bom (e deve ser mantido), o que não foi bom (e precisa ser melhorado ou não repetido) e o que poderia ser feito de novo para melhorar ainda mais os próximos sprints. É um momento excelente para captar opções de melhorias vindas do próprio time, com base em fatos concretos e experiências reais.
Contudo, fica uma questão: como manter esse conhecimento ao longo do tempo e transformá-lo em um 'asset' da empresa, aplicavel não apenas para o time em questão, para todos os times de scrum, replicando as melhores práticas e evitando cometer os mesmos erros?
Uma forma que aplicamos, com relativo sucesso (importando a idéia dos métodos de gerenciamento da rotina) foi a criação de um checklist: Uma lista de perguntas que é aplicada sempre ao final das reuniões de planning, e atualizada ao final de cada reunião de retrospective. Serve como uma verificação de que os pontos principais levantados pela equipe no passado estão sendo considerados no planejamento e não foram esquecidos. Questões como:
  • Reservamos tempo suficiente para testes? E homologação?
  • Existe algum item de backlog que não está claro? Todos sabem o objetivo de cada um?
  • Temos algum evento previsto para ocorrer durante o próximo sprint? Algum membro do time tem algum compromisso marcado, férias, ou precisará se ausentar? Se sim, irá impactar nos prazos?
Essa lista, que pode parecer simples e óbvia para equipes mais experientes, pode auxiliar muito novas equipes, evitando falhas comuns no planejamento e auxiliando a alcançar o objetivo assumido pela equipe.
Importante: No modelo que implementamos, fica a critério dos Scrum Masters (ou do PMO, quando existir um) selecionar os pontos que devem ou não ser incluidos nessa lista comum. É importante separar o que é específico de um projeto, e portanto deve ser incluído apenas naquele contexto, e o que pode beneficiar todos os demais times de Scrum. É uma tarefa importante, que irá transformar o conhecimento adquirido pelas equipes em conhecimento corporativo, fazendo com que velhos erros não sejam repetidos, mesmo por equipes novas. O checklist pode ficar disponivel on-line , com ferramentas como blogs e wikis corporativos, e ser consultado por todos.

quarta-feira, 1 de julho de 2009

Java 6 no MAC

Nos últimos dias, tive uma surpresa ao tentar compilar um projeto Java 6 usando o maven. Ao que parece, o Java 6 para MAC somente funciona nas versões 64 bits e, ainda assim, não é default. A alteracão usando a interface de preferences também não funciona. Para configura-lo, é preciso alterar as variaveis de ambiente JAVA_HOME e PATH:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
export PATH=$PATH:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/bin

Depois disso, a compilação no maven funcionou e consegui adiciona-los no eclipse.

Fica a dica. Referencia da solução:

http://mail-archives.apache.org/mod_mbox/maven-users/200810.mbox/%3CB795E29E-15C4-45F7-A6A6-B6A0ED7AD923@resolvesw.com%3E

domingo, 7 de junho de 2009

Google Wave























Lançado durante o evento para desenvolvedores Google I/O, o Google Wave promete revolucionar a comunicação na internet.
Criado como uma espécie de agregador de diversas ferramentas de comunicação, o Wave é uma mistura de e-mail, blog, wikis, redes sociais, instant messenger, além de permitir compartilhamento de arquivos e fotos. Mais legal ainda: tudo em tempo real.
Um dos recursos mais inovadores do Wave é possibilitar criar conversar dentro de conversas. Um usuário pode, por exemplo, selecionar parte de uma conversar (literalmente) e iniciar uma conversa nova (paralela à principal) a partir daquele trecho. Outro usuário pode comentar o comentário anterior, e assim uma nova linha surge a partir da conversa original.
Outro recurso bacana é a possibilidade de arrastar arquivos e imagens diretamente para a janela do browser. Esse recurso ainda não é suportado pelo HTML atual, sendo previsto para a próxima versão (HTML 5), portanto é necessário instalar um plug-in fornecido pelo Google para suportar a funcionalidade. Mas vale a pena.
A ferramenta está em beta (e qual não está?), sem data prevista de lançamento, mas o Google deve liberar um beta em breve. O vídeo do lançamento é um pouco longo (1:30h) mas vale a pena assistir.

Disponível em:

http://wave.google.com/




sábado, 6 de junho de 2009

Mongrel: Executando sua aplicação Rails

Ao instalar o netbeans, você ganha de presente o webrick, um servidor que atende a maioria das necessidades durante o desenvolvimento. Para producão, todavia, pode ser necessário um servidor mais robusto. Uma opção simples (e popular) é o mongrel, um servidor desenvolvido originalmente por Zed A. Shaw.
Para usuários linux, a instalação é simples:

  • sudo apt-get install mongrel
  • cd [myapp]
  • ./mongrel_rails start -d
Para parar o servidor:

  • ./mongrel_rails stop (no mesmo diretorio da aplicacão)

Mais informações em :

http://mongrel.rubyforge.org/

No link você também encontra documentação e o procedimento para usuários windows.

Dica: Terminator: Múltiplos terminais para linux

Essa vai para os usuários do linux: Se você tem problemas para posicionar múltiplos terminais simultaneamente na tela, uma dica é usar o terminator. Ele permitie dividir uma mesma janela em diversos terminais, movendo todas ao mesmo tempo. Como (excelente) benefício adicional, permite que vc crie 'grupos de janelas' e replica tudo o que você digita em qualquer uma delas para as demais - uma excelente pedida para quem é sysadmin (e mesmo para quem não é) mas precisa atualizar diversos servidores, executando a mesma sequência de comandos.
Vêem ainda com diversar teclas de atalho, para simplificar a sua vida.

Para instalar, basta digitar:

sudo apt-get install terminator

Fortemente recomendado.

terça-feira, 17 de março de 2009

CMMi x Scrum: Compatíveis?

O CMMi, sigla para Capability Maturity Model Integration é definido como um modelo de referência que contém práticas necessárias a maturidade em áreas/disciplinas específicas, como engenharia de sistemas, engenharia de software, desenvolvimento de processo, entre outros (fonte: wikipedia, br). Trocando em miúdos, define um conjunto de boas práticas de gerenciamento para o processo de desenvolvimento de software. Parte-se da premissa de que a qualidade do produto final (os sistemas entregues) está diretamente ligada à maturidade do processo responsável por sua construção. Embora tenha perdido parte de sua popularidade, o CMMi continua importante, em especial para fábricas de software, pois diversas organizações somente adquirem software ou serviços relacionados de empresas com certificação nível 3 - entre elas o governo americano, possivelmente um dos maiores compradores de software do mundo.

Scrum, por sua vez, é uma metodologia de gerenciamento ágil de projetos, que vem ganhando ampla adesão da comunidade e empresas ligadas ao processo de criação de software. Entre outras razões, destacam-se os resultados obtidos, além da simplicidade do processo. É considerado um dos métodos 'light', pois possui poucas práticas e controle, quando comparado à métodos mais 'tradicionais'. A pergunta que fica é: É possível para uma organização adotar as práticas do Scrum e ainda assim obter o grau de CMMi? O método é suficiente para obter a certificação?

O CMMi é dividido em níveis de maturidade. Quando mais avançada em seus níveis, mais estável é o processo de desenvolvimento da organização e maior o seu grau de maturidade. De forma resumida:

  • Nível 1: Processo Ad-hoc - não definido, não existe um processo claro de desenvolvimento. Nesse nível, os resultados não podem ser previstos.
  • Nível 2: Processo Repetido - Nesse nível, um processo inicial é definido e seguindo sempre.
  • Nível 3: Processo Definido - Aqui, o processo é claramente definido, suas entradas, etapas e saídas estão claras, e ele é seguindo sempre.
  • Nível 4: Gerenciado - O processo é medido e são tomadas ações corretivas (gerenciamento)
  • Nível 5: Melhoria continua - O processo inclui, em si mesmo, revisões freqüentes, com o objetivo de otimizá-lo continuamente.
No início o CMMi foi relacionado ao modelo tradicional de desenvolvimento de software, ou 'waterfall'. Essa comparação, embora natural, não é uma restrição do modelo. Se compararmos os níveis de maturidade do CCMi com as práticas previstas no Scrum - começando pelo nível 2, veremos que ele atende muitos dos requisitos previstos:

  • Nível 2 - Processo Repetido
Ao adotar Scrum como metodologia, a organização passa automaticamente a contar com um processo sobre o qual operar.

As reuniões de planejamento de Releases servem para construir uma visão para o projeto, bem como definir os objetos e o produto final, ainda que em alto nível, sem o grau de detalhamento previsto em outras metodologias.

As reuniões de planejamento de Sprint definem ou reavaliam prioridades, decisões e soluções adotadas, adaptando o projeto a realidade coorporativa, que está em constante evolução.

As reuniões diárias serem como ponto de comunicação constante entre os membros da equipe, realinhando e adaptando o projeto em uma base diária.

  • Nível 3 - Processo definido
Da mesma forma, Scrum passa a ser o processo definido para a organização. Entretanto, será necessário (re)definir as práticas de engenharia de software que serão aplicadas - Scrum é um método para gerenciamento de projetos e não prevê organicamente nenhuma dessas práticas. Para atingir esse estágio, será necessário complementar o processo, com a ajuda da(s) equipe(s), já que a metodologia é empírica.

  • Nível 4 - Processo Gerenciado (quantitativo)
Existem poucos controle 'formais' previstos no Scrum, destacando-se o burndown chart, que permite avaliar a taxa de 'consumo' do backlog, tando dos sprints como dos releases. Além disso, é possível medir a velocidade da equipe, a taxa como que ela consegue entregar software completo e funcional (itens do backlog). Com isso em mãos, é possível tomar medidas corretivas e buscando aumentar a velocidade - ferramentas, automação de processos repetitivos, etc., que são a chave para o próximo nível.

Fica a critério da organização definir controles e métricas adicionais que julgar necessários. Vale lembrar, contudo, que a maioria dos controles do scrum ocorre nas diversas reuniões prevista, de maneira mais informal. Esses checkpoints se configuram como as melhores fontes de informação para identificar se o projeto está nos trilhos.

  • Nível 5 - Melhoria continua

Sprint Review e Sprint Retrospective são previstos como momentos para apresentar o trabalho desenvolvido e para que a própria equipe encontre métodos para melhorar o trabalho, baseado na experiência passada, respectivamente. As lições aprendidas devem ser registradas, passar a fazer parte da base de conhecimentos da empresa, e transmitidas aos demais times. Com essas informações, a gerência e o próprio time podem tomar medidas que ampliem a capacidade de resposta do time, melhorem a qualidade e eliminem processos desnecessários.

Em seu livro 'Agile Projet management with Scrum', Ken Schwaber faz um breve comparativo entre algumas das KPAs (Key practice areas) dos liveis dois e três do CMMi e as praticas do Scrum, que reproduzo aqui. Uma marca simples significa aderência parcial, uma dupla significa aderência completa:


Level Key Process Area Rating
2 Requirements management **
2 Software Project planning **
2 Software Project tracking and oversight **
2 Software subcontract management **
2 Software quality assurance **
2 Software configuration management *
3 Organization process focus *
3 Organization process definition *
3 Training program *
3 Integrated Software management *
3 Software product engineering **
3 Intergroup coordination **
3 Peer review **
O que não está previsto no método - práticas de engenharia de software - são as principais adaptações que deverão ser incluídas pela organização. Essas práticas deverão provir das melhores práticas de arquitetura, complementadas com a experiência da equipe, obtida de forma empírica. Quando definidas, devem ser comunicadas, reforçadas e medidas pela gerência. Uma combinação das práticas do Scrum (para projetos) e de XP (Extreme Programming), para complementar a engenharia de software, pode ajudar. Para níveis de maturidade superiores ao três, contudo, diversos novos processos de controle deverão ser adotados, tanto técnicos quanto gerenciais.

Conclusões

O que vimos é que Scrum pode fornecer o arcabouço sobre o qual construir (e evoluir) o gerenciamento de projetos de software, com algumas adaptações, sendo em uma primeira analise, compatível com a maioria dos processos do CMMi, ao menos até o nivel 3. Acima desse nível (4 e 5) serão necessárias diversas adaptações, incluindo novos processos e controles, tanto de engenharia de software, como de gestão. Valerá uma analise de custo-benefício com relação a adoção dessas práticas complementares. O desafio, como sempre, é manter a flexibilidade e agilidade, com a organização necessária para garantir a qualidade do produto final.

quarta-feira, 25 de fevereiro de 2009

Escalando projetos com Scrum

Scrum é uma metodologia de gerenciamento ágil de projetos que vem ganhando popularidade nos últimos anos, utilizado principalmente em projetos de desenvolvimento de software, onde o grau de incerteza e variação de escopo tendem a ser altos.

Assim como a maioria dos métodos ágeis, Scrum funciona melhor com times relativamente pequenos, até 7 ou 8 integrantes. Isso se deve em grande parte ao fato de que a comunicação direta e constante é um dos fundamentos do método. Quando o time cresce acima desse limite – que como tudo no Scrum, é empírico – o esforço de comunicação começa a se tornar gradativamente maior, as informações tendem a fluir mais lentamente e começa a ser necessário empregar outros mecanismos para garantir que os stakeholders recebam as informações de que necessitam. Em resumo, a eficiência começa a cair gradativamente.

Considere ainda que, em diversos projetos, não é possivel ter todo o time compartilhando o mesmo ambiente físico. Em alguns casos, as equipe podem estar inclusive em países e fusos horários diferentes, o que dificulta ainda mais a comunicação e interação entre os integrantes da equipe.

Uma das soluções proposta por Ken Schwaber, um dos criadores do Scrum, em seu livro ‘Agile Project Management with Scrum’ (que recomendo fortemente) para aplicar Scrum em equipe maiores é o chamado ‘Scrum of Scrums’. Em resumo, significa quebrar o time em equipes menores, multi-disciplinares, evitando assim os ‘silos de competências’. Esses times menores, que estarão dentro do limite de integrantes recomendado, devem ser auto-suficiêntes, no sentido de serem capazes de entregar conjuntos completos de funcionalidade a cada Sprint.

Para sincronizar os esforços dos diversos times, os Scrum Masters de cada equipe devem se reunir no equivalente a ‘Daily Metting’ - participam apenas os representantes de cada time, e o Scrum Master Principal. Nessa reunião também se aplicam os mesmos principios da original: Os representantes de cada equipe dizem o que o foi realizado desde a reunião anterior, em que irão trabalhar até a próxima, e o que está impedindo-os de realizar seu trabalho ou obter o máximo desempenho. Para auxiliar as diversas equipes, é recomendado que exista a figura do Scrum Master central. Este herda as mesmas atribuições dos Scrum Masters no Scrum tradicional, mas seu compromisso é relativo ao conjunto dos times. Por exemplo, se diversas equipes reportam problemas com o ambiente de homologação, é seu papel conseguir (de alguma forma) que esse impedimento seja removido. As retrospectivas, que ocorrem no final de cada Sprint também devem ser realizadas de forma semelhante, com os representantes de cada time.

Para isso, algumas condicões devem ser observadas. Em especial, o projeto deve ser passível de ser divido em funcionalidades e essas distribuídas aos diversos times, o que nem sempre é simples. É preciso também criar uma arquitetura inicial, padrões e práticas claras de engenharia, de forma a evitar que o sistema se torne uma colcha de retalhos.

Em seu livro, Ken menciona algumas equipes que utilizaram, com sucesso, um ‘Sprint Zero’, onde especialistas (engenheiros seniores) foram responsáveis por criar uma arquitetura inicial, além de definir os padrões que seriam utilizados no restante do projeto. Nos Sprints seguintes, cada um dos diversos times que foram formados recebeu pelo menos um dos integrantes do ‘Sprint Zero’, que se tornou responsável por disseminar o conhecimento da arquitetura e garantir a aderência das novas funcionalidades desenvolvidas aos padrões e práticas de engenharia de software. Esses integrantes se tornaram a ponte para disseminar a visão comum do projeto entre os times.

Claro, coordenar os esforços de um conjunto de equipes tende a ser um desafio maior do que em times simples – e exigirá deles, Scrum Master e Product Owner as conhecidas adaptabilidade, flexibilidade e criatividade tão conhecidas no Scrum. Caberá ao time do projeto bolar soluções para os problemas que surgirem, não apenas nas questões técnicas mas também em aspectos como comunicação e integração, fatores críticos ao sucesso de qualquer projeto, e em especial para equipes geograficamente separadas. Soluções criativas como blogs, wikis, programas de mensagens instantâneas podem auxiliar bastante. Existem opções gratuitas para todas essas ferramentas. Pessoalmente, recomendo ainda que a reunião diária seja realizada utilizando uma ferramenta de video-conferência, ou no mínimo, com de um conference-call. Uma conversa de alguns minutos pode eliminar algumas dezenas de e-mails.

quarta-feira, 11 de fevereiro de 2009

Ruby on Rails no NetBeans 6.5

Para quem está dando os primeiros passos na plataforma Ruby on Rails e está a procura de um ambiente para desenvolvimento, uma boa opção pode ser o NetBeans. Popularmente conhecido como IDE Java, o programa em sua versão 6.5, possui suporte para essa linguagem que vêem se tornando conhecida pela rapidez e facilidade no desenvolvimento web. O usuário pode escolher entre baixar a versão específica para Ruby – cerca de 54 MB – ou a versão completa da plataforma, com cerca de 201 Mb, mas que inclui suporte também para PHP, C++, Java, além do próprio Ruby.

Baixar o programa simplifica bastante a configuração do ambiente. O IDE já vêem com um servidor web com suporte a Ruby. Também não é necessário instalar as ruby gems básicas (necessárias para suportar o Rails), elas já estão configuradas. O desenvolvedor pode ainda gerar a clássica aplicação Depot, usada como referencia para iniciantes na linguagem. Para quem está começando, recomendo a combinação Rails + MySQL. O banco é simples de instalar e em 10 minutos (downloads a parte) todo o seu ambiente está pronto para trabalhar.




O Netbeans é gratuito e pode ser baixado em:
http://www.netbeans.org/downloads/
Disponível para plataformas Windows (2000/XP/Vista), Linux, Mac e Solaris.

sábado, 7 de fevereiro de 2009

Um gadget para ampliar fatia de mercado do Google Docs

O Google faz mais um movimento para popularizar o uso de sua suite de ferramentas, o Google Docs.

Lançado recentemente, o Google Docs Gadget for the Desktop é um gadget que permite aos usuários encontrar e acessar seus arquivos armazenados on-line, a partir da área de trabalho. O programa possui versões para Linux e Windows.

O lançamento ocorre logo após pesquisa da ClickStream Technologies indicar que o OpenOffice é utilizado por 5% dos usuários, contra apenas 1% do Google Docs.

A liderança folgada ainda fica o Microsoft Office, com 51% do mercado.