quinta-feira, 15 de março de 2012

Windows vs Linux em 2012

Após 4 anos de uso exclusivo de Windows, resolvi verificar o andamento do GNU/Linux usando e fazendo outras pessoas usarem o Ubuntu 11.10 por uma semana.

Instalação

Na instalação em um notebook Dell Inspiron, todos os drivers foram reconhecidos e a configuração foi muito rápida.

As instalações de utilitários adicionais foram realizadas facilmente e a configuração do meu ambiente de desenvolvimento foi muito melhor do que no Windows.

Continuo não simpatizando com o KDE, gostei muito do Unit, mas o Gnome continua o melhor.


Usabilidade

No geral, a usabilidade e acessibilidade foi perfeita. Lógico que depois de tanto tempo focado no Windows o início foi um pouco estranho, mas nada que atrapalhe.

Nesse tempo também “obriguei” minha esposa usar o Linux e pelo que vi a usabilidade para ela não foi afetada. Coisas como planilhas, textos, vídeos, músicas, internet e alguns aplicativos básicos estão de fácil acesso.

Os aplicativos instalados para atividades extras (gravar DVD, edição de imagens..) também foram satisfatórios.

Conectei um celular com Android e não tive trabalho algum. Mas fiz um teste com um celular básico da LG e não consegui alterar o somente leitura do cartão de memória. Coisas da vida.


Comunidade

A comunidade continua com o mesmo problema de 4 anos atrás. São em sua totalidade de profissionais de TI para profissionais de TI. Ainda não conseguiram imaginar um usuário final leigo nesse universo (a Canonical já). O que é um erro.

Qualquer dúvida minha era sanada com uma velocidade espantosa. Muito superior a resoluções de problemas encontrados no Windows. É excelente eu digitar um simples comando e resolver todos os meus problemas.

Mas é ridículo eu pedir para um usuário final, que nem sabe que existe o Terminal, digitar alguns comandos. Por mais simples que sejam esses comandos.


Resumindo

  • Em desenvolvimento de software o Linux está a frente do Windows.
  • No mundo corporativo não vejo vantagem nenhuma do Windows sobre o Linux, ou vice-versa.
  • No mundo pessoal, onde quem impera são usuários finais, o Windows continua na frente. Isso, acredito eu, ocorre pelo simples fato da Microsoft (e a comunidade de adeptos) tratar desenvolvedores como desenvolvedores e usuários finais como pessoas leigas.

"Do, or do not. There is no try." by Jedi Master Yoda.

segunda-feira, 5 de março de 2012

Instalando o Groovy no Windows


A instalação do Groovy requer o JDK instalado e configurado em sua máquina.



No site do Groovy temos várias opções de instalação. Para a instalação no Windows (acredito que exista uma outra forma mais complicada) vamos baixar o Download Windows-Installer.

A instalação será via assistente.




Durante a instalação temos a opção de escolher a instalação da documentação e dos módulos (na versão 1.8.6 são: Easyb, Gaelyk, Gant, GMock, GroovyServ, Griffon, Scriptom, Spock). Aqui também temos acesso a opção da configuração automátiva das variáveis de ambiente.
Módulos:
  • Easyb - BDD para Groovy
  • Gaelyk - Desenvolva para o GAE (Google App Engine)
  • Gant - Ferramenta de build para criar tarefas do Ant com scripts Groovy
  • GMock - Mocks utilizando Groovy
  • GroovyServ - Servidor de execução de programas Groovy
  • Griffon - Griffon Builders
  • Scriptom - Acesse componentes ActiveX ou COM com Groovy
  • Spock - Framework de Testes e Especificações



Após esse passo, a instalação decorrerá automaticamente, até a configuração das variáveis de ambiente. O instalador fará o trabalho sozinho (desde que tenha sido selecionada a opção no passo 2).





Para a instalação do Groovy é necessário que a variável de ambiente JAVA_HOME esteja configurada. Caso contrário, um aviso será emitido para que a variável seja configurada antes de prosseguir com a instalação.
Para definir a variável de ambiente basta acessar Propriedades do Sistema > Variáveis de Ambiente. Adicione uma nova variável do ambiente com o nome JAVA_HOME e o valor do diretório da instalação do JDK (ex: C:\Java\jdk1.6.0_24).

Uma outra facilidade do assistente de instalação é a Associação de arquivos, que permite definir um programa (no caso o Groovy) que executa com um duplo clique no arquivo.




Feito isso a instalação e configuração do Groovy no Windows está completa.



Para confirmar vamos digitar groovy -h no prompt de comando. O resultado deve ser algo próximo a isso:

sexta-feira, 2 de março de 2012

Programação poliglota

É evidente, nos dias de hoje, que um programador deve conhecer várias linguagens.

Citando o desenvolvimento de sistemas web, o programador deve ter um bom conhecimento em SQL, JavaScript, HTML, CSS e alguma outra linguagem para o back-end como Java, C#, Ruby, Python entre outras. Entendo isso com o básico da programação poliglota. Mas isso não basta!

No artigo Seja poliglota temos uma perspectiva diferente, onde a “idéia é que linguagens diferentes te obrigam a pensar de formas diferentes para resolver o mesmo problema” visando “expandir os seus horizontes”.

Neal Ford fala sobre conhecer várias linguagens para além de usar a linguagem mais apropriada para cada sistema, saber usar a linguagem mais apropriada para cada tarefa a ser resolvida dentro de um único sistema. É isso que devemos buscar!

A definição de programação poliglota como simplesmente conhecer várias linguagens é incompleta. O ideal é buscar a melhor produtividade usando as formas mais adequadas, que temos a disposição, para cada problema em específico.

Como assim?

Nas duas principais plataformas de desenvolvimento atuais, Java e .Net, temos as linguagens “básicas” que são a Java e C#. Porém, podemos contar com várias linguagens baseadas nas plataformas como Ruby (com JRuby/IronRuby), Python (com Jython/IronPython), Haskell (Jaskell/Haskell.Net) além de Scala, Clojure. F#, Boo. São muitas tecnologias para aproveitarmos. E penso que devemos aproveitá-las ao máximo.

Uma situação é a multiconcorrência. Acho um erro desenvolver algo em Java/C#, em vista da dificuldade que linguagens imperativas tem em lidar com o problema, e deixar de lado uma linguagem funcional como Clojure, Haskell ou F#.

Um outra situação é referente a sintaxe. Acho bom desenvolver um código e principalmente testes unitários em linguagens como Ruby/Python/Scala/Groovy, pois nos permite escrever códigos mais elegantes e concisos.

Um exemplo real

Estou num projeto (a equipe é composta por dois programadores) que basicamente possui duas aplicações, e que funcionam em ambientes diferentes: desktop (for Windows) e web.

Chegamos ao consenso, com base em nosso know-how, de usar Object Pascal (Delphi) para a aplicação desktop e Java (usando VRaptor, Hibernate, Google Guice...) para o sistema web.

java, object pascal

Referente aos banco de dados, tinhamos duas opções. Ficar transitando com os bancos (Firebird) nos repositórios (Mercurial) ou controlar apenas os metadados e scripts.
Optando pela segundo opção, automatizamos a criação e atualização dos bancos em um script em Ruby. Ou seja, executando um simples comando, todo o trabalho de atualização dos bancos de dados é realizado automaticamente.

sql, ruby

Para automação de build, gerenciamento de dependências e algumas outras tarefas estamos usando o Gradle (trata-se de um sistema de build baseado em Groovy).

groovy

No front-end do sistema web, obviamente, trabalhamos com HTML, CSS e Javascript, e muito provavelmente vamos usar o jQuery e jQuery UI.

html, css e javascript

Este é o cenário atual ideal, onde nem todas as funcionalidades estão concluídas ou definidas, e mudanças podem e devem acontecer. Ainda teremos que lidar com outras situações, como o uso de uma automação. E para isso vamos em busca de soluções melhores para cada situação que aparecer.

Leia:

quinta-feira, 1 de março de 2012

C++ << Introdução << Parte 1

O C++ ("cê mais mais" em português ou "cee plus plus" em inglês) é uma linguagem de programação multi-paradigma, e compilada, desenvolvida por Bjarne Stroustrup, em 1985, como uma melhoria da linguagem C.

Por ser uma linguagem compilada, o desenvolvimento em C++ exige a instalação de um compilador. Algumas IDEs já possuem um ou mais compiladores integrados.

Instalando um compilador C++ no Windows


A melhor opção que considero para o desenvolvimento de aplicações C++ é o GNU Compiler Collection (GCC). E como o GCC é nativo do ambiente Unix teremos que fazer uso de uma ferramenta, o MinGW (Minimalist GNU for Windows), que portou o GCC para o Windows.

A instalação é simples, basta realizar o download no site do projeto e seguir os passos Next, Next, Finish. Apenas um detalhe: em Repository Catalogues, vamos selecionar a opção "Download latest repository catalogues".

Após confirmar, os pacotes serão atualizados e a instalação será realizada automaticamente.

Um fato interessante é que alguns citam o Next, Next, Finish de forma desdenhosa. Eu acho essa forma de instalação perfeita. Sou preguiçoso e quanto mais facilidades, melhor para mim. Nunca tive qualquer problema com esse tipo de instalação, então não vou perder tempo copiando e colando comandos no CMD.

O ambiente de desenvolvimento


Visando uma maior produtividade, experimentei algumas IDEs e me identifiquei com Eclipse IDE for C/C++ Developers e Code::Blocks.

Eclipse IDE for C/C++ Developers

Eclipse é uma IDE desenvolvida em Java. Foi iniciado na IBM que desenvolveu a primeira versão do produto e doou-o como software livre para a comunidade. Com o uso de plugins, pode ser usado para desenvolver em C/C++. Licenciado pela Eclipse Public License.

Code::Blocks


O Code::Blocks possui suporte a múltiplos compiladores. É uma IDE leve e simples de usar, mas sua interface é feia. Licenciado pela GPL.

Outras duas IDEs merecem destaque: Microsoft Visual Studio (disponibiliza a versão Express gratuita) e Embarcadero C++Builder. Ambas proprietárias.


C faz com que dar um tiro no pé seja fácil; C++ torna isso mais difícil, mas quando nós o fazemos arrebentamos com a perna toda." - Bjarne Stroustrup


[UPDATE 03/03/2012 - Informação sobre o compilador GCC]

quarta-feira, 29 de fevereiro de 2012

(Clojure 4 "IDE para Clojure")

Existem diversas IDEs que podem ser usadas no desenvolvimento em Clojure, porém vou mostrar apenas duas, são elas: Eclipse e Clooj.

Eclipse é minha IDE preferida, então vou mostrar a instalação do plugin e rodar um exemplo básico. Já o Clooj eu realizei apenas alguns testes simples, e o que me chamou a atenção foi a sua simplicidade.

Eclipse

Os usuários do Eclipse podem usar o plugin Counterclockwise. Para instalar acesse o menu Help > Eclipse Marketplace, busque por "Counterclockwise" (ou simplesmente "clojure") e siga as instruções básicas para a instalação.

Depois de instalado, podemos criar um novo projeto (File > New > Other. Na próxima tela selecione Clojure > Clojure Project).

No projeto vamos criar um Clojure File no diretório src com o nome "exemplo.clj".

Importante: Deixe a chamada "(ns exemplo)" no início do arquivo criado.

Para testes vamos fazer um simples exemplo:

(ns exemplo)
(println "Clojure is a dialect of the Lisp programming language created by Rich Hickey.")


Salve o arquivo e vamos executá-lo. Para isso selecione o arquivo "exemplo.clj", clique com o botão direito e vá em Run > Run as > Clojure Application (preload file).

No console (retorno da execução) veremos:

Clojure is a dialect of the Lisp programming language created by Rich Hickey.


Seu Eclipse já está preparado para o Clojure.

Clooj

Clooj é uma simples IDE (Integrated Development Environment) para a linguagem de programação clojure, disponível para download gratuito. Clooj é escrito em clojure, por tanto, é multi-plataforma (assumindo que o Java está instalado em seu sistema operacional).

A versão standalone (contendo o núcleo clojure) é um arquivo jar único que pode ser iniciado clicando duas vezes no ícone de arquivo ou executando java-jar clooj-XXX-standalone.jar da linha de comando.

Página do projeto: https://github.com/arthuredelstein/clooj
Link para download: https://github.com/arthuredelstein/clooj/downloads
Link sobre o Clooj na website oficial do Clojure: http://dev.clojure.org/display/doc/getting+started+with+Clooj

"Mistress, your baby is doing poorly. He needs your attention." - The Robot and the Baby, a story by John McCarthy

segunda-feira, 13 de fevereiro de 2012

Usando Mercurial e Bitbucket com SSH no Windows

Sobre o Mercurial



Mercurial é uma ferramenta multiplataforma de controle de versão distribuída (DVCS), escrito em Python e C e liberado como software livre sob os termos da GNU GPL v2.
O Mercurial oferece alta performance, escalabilidade e descentralidade.

Sobre o Bitbucket



Bitbucket é um serviço web para hospedagem de projetos utilizando o Mercurial (e atualmente também o Git).

Sobre o SSH



Secure Shell ou SSH é, simultaneamente, um programa de computador e um protocolo de rede que permite a conexão com outro computador na rede, de forma a executar comandos de uma unidade remota. A conexão entre o cliente e o servidor é criptografada. (Wikipedia)



Requisitos



Para usar conexões SSH no Windows vamos baixar as seguintes ferramentas:

  • putty.exe (cliente SSH);

  • plink.exe (interface de linha de comando para o PuTTY);

  • puttygen.exe (utilitário para geração de chaves RSA e DSA).



Link para download do PuTTY: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Logicamente, precisaremos também do Mercurial instalado e configurado; e uma conta no Bitbucket.

Fazendo funcionar



Coloque os aplicativos PuTTY (putty.exe, plink.exe e puttygen.exe) numa pasta de sua preferência (ex: C:\PuTTY), e adicione esse caminho ao Path do Windows em Variáveis de Ambiente.

Inicie o programa puttygen.exe, selecione SSH-2 DSA e clique no botão "Generate" em "Generate a public/private key pair". Depois você terá que mover o cursor do mouse ao redor da área em branco (embaixo da barra de progresso) para criar a aleatoriedade para a chave.

Depois de criada, você pode copiar e colar a chave pública em sua conta no Bitbucket (Account > SSH keys). Aconselho manter salvo sua chave pública para quando precisar novamente. Para isso basta clicar em "Save public key".

Após realizado o procedimento com a chave pública, vamos salvar a chave privada na pasta raiz do seu usuário no Windows. Certifique-se de salvar esse arquivo sem uma senha. (Não divulgue a chave privada!)

Novamente na pasta do seu usuário no Windows, vamos abrir o arquivo mercurial.ini e editá-lo na seção [ui]:

  • o campo username que será informado o seu nome completo com o e-mail. Ex: Breno Martinusso <breno@seu_email.com>

  • adicionar a linha: ssh = plink.exe -i "USER_FOLDER/mercurial.ppk", onde USER_FOLDER é o caminho do diretório do seu usuário e mercurial.ppk é o nome do arquivo que contem a sua chave privada.




[ui]
username = Breno Martinusso <breno@seu_mail.com>
editor = gvim

ssh = plink.exe -i "C:/Users/Martinusso/mercurial.ppk"





Agora vamos adicionar o servidor à lista de hosts conhecidos. No prompt de comando execute:

plink ssh://hg@bitbucket.org



Você verá algo como:

PS C:\Users\Martinusso> plink.exe ssh://hg@bitbucket.org
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n) y




Informe "y" para adicionar o servidor para o host conhecido.


E agora?!



Podemos confirmar que está tudo certo realizando um clone de um repositório do Bitbucket. Execute o comando:

hg clone ssh://hg@bitbucket.org/martinusso/project_test

You get treated like a dumb animal long enough, that's what you become. [C. S. Lewis, The Chronicles of Narnia]

domingo, 12 de fevereiro de 2012

Passo a passo - Instalando o Gradle no Windows 7

Gradle

Recentemente iniciei um projeto em Java e resolvi experimentar o Gradle por indicação do Magno Machado.

Basicamente, o Gradle é um sistema de build como o Ant e o Maven, porém baseado na linguagem Groovy. Isso torna seus scripts mais concisos e legíveis, e consequentemente aumenta a flexibilidade ao escrever e manter um script.

A instalação

  1. Baixe o Gradle no site oficial do projeto: http://gradle.org/downloads
  2. Descompacte o Gradle num diretório de sua preferência. (Ex: C:\gradle)
  3. Crie uma variável de ambiente com o nome GRADLE_HOME apontando para o diretório onde está o Gradle (Ex: ;C:\gradle)
  4. Adicione o caminho ;%GRADLE_HOME%\bin ao path do seu sistema. Ou seja, a variável de ambiente Path.
  5. Execute o comando gradle no prompt e verá que o Gradle está instalado e configurado.
Documentação do Gradle: http://gradle.org/documentation.
Documentação do Groovy: http://groovy.codehaus.org/Documentation.