.pgpass

Estou configurando um sistema simples de backup da base de dados do Job4Dev, usando as ferramentas crontab do linux e pg_dump do Postgres. Clássico.

Mas me deparei com um probleminha: a base de dados é criada com um usuário diferente do meu usuário no servidor. E o comportamento padrão do pg_dump (e de qualquer ferramenta relacionada ao Postgres)
é de pedir a senha em um prompt, o que é obviamente problemático em uma tarefa automatizada.

A solução é criar um arquivo chamado .pgpass, armazenado na raiz do home dir do usuário que irá executar o comando com a permissão 600 (qualquer outra permissão fará com que o arquivo seja ignorado) e contendo a seguinte informação:

hostname:port:database:username:password

Pronto, agora qualquer comando que envolva a tupla (host, port, database, username) descrita no arquivo tem acesso direto à base. Mais informações podem ser encontradas aqui.

PC 2.0

Enquanto boa parte da molecada por aí que ainda não aprendeu a pensar por conta própria ficou triste com o anúncio da Google que encerrava as especulações sobre o gPhone, ficando sem imagens que pudessem copiar para os seus (spam-)blogs, e por tabela sem assunto para entupir os agregadores de conteúdo com notícias idênticas, o “velhaco” aqui parou para pensar no impacto e no potencial futuro da Open Handset Alliance. Eu vi, e gostei. Um plano como esse é uma lição clara de quem aprendeu com o Passado para pensar o Futuro.

Se você não entendeu o que estou falando, fique tranquilo. Vamos por partes.

Computação Pessoal

Computeiros, tautologicamente, têm suas vidas focadas no computador. Ficamos com o tocador de música ligado o dia inteiro, com nossas coleções imensas de canções nem sempre obtidas legalmente. Resgatamos contato com nosso amigo que se mudou para o Curdistão para popularizar o futebol de botão. Mantemos nossas memórias, vídeos, fotos, cartinhas de amor que queríamos enviar para a nossa musa mas ficamos com vergonha de mandar, já que você, no fundo, no fundo, sabia que não era muito romântico declarar algo como “você é tão bela quanto a Lara Croft no Tomb Raider 2″. O computador é o meio, começo e o fim de boa parte de nosso cotidiano.

Para nós e para os profissionais que já estão fazendo parte diretamente ou indiretamente da Economia Digital, a linha que separa o computador-pessoal do computador-ferramenta-de-trabalho é tênue, cada vez mais imperceptível. Entretanto, há muitos outros que olham o computador como uma besta indomável, complexa, para não dizer supérflua.

Isso não quer dizer, entretanto, que eles estão livres da evolução tecnológica. Mesmo aqueles que se recusam a sentar na frente de um monitor estão fazendo parte da revolução que começou nos anos 80, da Computação Pessoal.

Vou tentar simplificar: Computação Pessoal é tudo que envolve o uso de um computador, cuja finalidade principal não é o trabalho. Aquela viagem chata que você levava o Game Boy? Computação Pessoal. O seu primeiro Discman? Computação Pessoal. O seu decoder de tv a cabo? Câmera Digital de 32 Gigapixels? Tudo é Computação Pessoal.

O ponto mais interessante. Mesmo os tecnófobos, estes que não sabem nem mexer em um mouse, provavelmente têm o seu “Computador Pessoal”. À diferença de nós, estes fazem uso da tecnologia através de outro dispositivo. Para eles, o PC é outro e cabe no bolso: é o telefone celular.

Acho que o que eu escrevi acima não é nenhuma novidade. A velocidade do ciclo de desenvolvimento dos aparelhos celulares, as toneladas de funcionalidade presentes nos aparelhos mais básicos, as inúmeras apresentações de executivos falando sobre a questão da convergência digital, etc, etc. Você não precisa de mais um blogger chato querendo dizer “Eureka! Celulares vão se tornar tão poderosos quanto computadores”, não é mesmo?

Padronização do Desktop: um pouco de História.

Computadores, hoje, são quase oni-presentes e aparentemente são bastante diferentes. Mas, por baixo de marca, gabinete, ou até mesmo sistema operacional, todos acabam sendo muito parecidos. Todo mundo (e por todo mundo, entenda “mais de 99,99% dos consumidores normais”) tem um computador que usa um chip com arquitetura x86 (ou alguma extensão dela, como a x86-64). Placas auxiliares são instaladas em slots padronizados (AGP, PCI ou PCI-x). Periféricos se comunicam através de USB. Comunicação sem fio é predominantemente feita por Wi-Fi (802.11*).

Tudo isso não acontece por acaso. São padrões determinados pela indústria, com o propósito primário de facilitar o desenvolvimento e a fabricação de componentes para um sistema complexo. Assim, subsistemas desse sistema complexo podem ser trocados com razoavel segurança. Assim como eu sei que eu posso colocar qualquer motor elétrico de 110V na tomada aqui de casa, eu sei que eu posso comprar qualquer Pen Drive USB para o meu computador, e sei que vai funcionar.

É claro que essa padronização não surgiu de uma hora para outra. Os primeiros mini-computadores e computadores que pretendiam ser de uso doméstico tinham arquiteturas completamente diferentes entre si. Um computador como o Altair rodava apenas programas feitos para ele, e era arquiteturalmente diferente de um TRS-80. Um usuário entusiasta de um computador aprendia a programar para uma máquina e assim ficava, pois não havia necessidade de portar seu aplicativo para outra arquitetura.

Isso é muito comum, se analisarmos o progresso e a evolução de inventos humanos. Traçando um paralelo com a teoria de evolução de Darwin, uma nova tecnologia pressiona o surgimento de novos produtos (assim como uma mudança no ambiente causa um aumento no número de mutações genéticas em espécies já existentes), e desses novos produtos sobrevivem os que se mostram mais aptos ao ambiente (o produto que satisfaz melhor o público é o que acaba sendo mais copiado e prospera), determinando qual será a tendência de design de produtos. Veja como os aparelhos de TV e os primeiros aviões eram diferentes entre si, e vejam o quanto eles são similares hoje em dia. Dá pra sacar que, até com memes, existe o que é chamado de “survival of the fittest”?

No fim de 1970, as apostas de todos provavelmente seriam na Apple, com o Apple I e com o Apple II. Seus computadores poderosos e fáceis de usar começaram a ganhar momento. Empresas passaram a desenvolver aplicativos para ele. O sucesso do Visicalc serviu como um efeito bola de neve. Mais pessoas queriam o Apple por conta do Visicalc, que aumentava o interesse dos desenvolvedores pela plataforma Apple, que fazia da Apple a arquitetura com uma coleção de software mais interessante. Darwin trabalhava, enquanto a concorrência padecia. Por mais simples que fossem as arquiteturas da época, era trabalhoso portar software. Muitos programas ainda eram desenvolvidos em linguagem de máquina. Compiladores BASIC eram caros e para profissionais. A Apple parecia a grande vitoriosa.

Parecia. A Apple passou a ter concorrência da IBM e do padrão PC. Aproveitando a explosão do mercado de computadores para uso doméstico, a IBM deu a sua tacada: um padrão livre, que pudesse ser seguido por qualquer que quisesse montar um computador compatível. Dessa forma, uma empresa que quisesse entrar no mercado de desktops poderia fornecer apenas um componente do produto, ao invés de ter que desenvolver todo um computador (e ainda ter que tentar competir com a Apple). Isso também serviu para incentivar a concorrência, o que levou a uma redução acelerada dos custos.

Vá lá: tudo que a IBM acertou com o padrão-PC, ela errou ao ter dado uma licença de fornecimento exclusiva do Sistema Operacional para uma empresa pequena, chamada Micro-soft-com-hífen. Mas a estratégia do padrão aberto funcionou. A Apple, que manteve-se verticalizada (oferecendo hardware e software) acabou perdendo terreno para os milhares de concorrentes horizontais que trabalhavam no padrão IBM-PC.

Fale com o Miguel, se quiser mais detalhes da história da Apple. Mas vou resumir: eles teimaram um bom tempo em manter-se verticais, e só recentemente abriram mão disso, e foram obrigados a admitir que a estratégia vertical não deu certo. O hardware de um Macintosh é, hoje, virtualmente idêntico ao de um computador da HP ou da Dell. Para desgosto de muitos fanáticos, hoje é um Intel que roda em Macs. Até mesmo software para o mercado de DTP tem menos features em suas versões para Mac OS, comparada com a versão para Windows. Muito do charme some quando se tira o teclado com backlight.

Pois bem. Não é de hoje que o mercado de desktop é chato, sem grandes surpresas. Como eu já disse antes, POSIX já ganhou, e boa parte do pacote de soluções que gerou bilhões para a Microsoft-sem-o-hífen já é “good enough” há uns bons 6 anos.
Se é que existe alguma coisa que ainda é sexy para desenvolvedores, isso está em aplicativos que fazem uso da Internet e dos avanços de telecomunicações.

O Mercado de Mobile

Entra o mercado de mobile. Acho que foi em 1999 que meu pai chegou em casa com um StarTac, da Motorola. O que tinha de especial? Pouca coisa, além de um desenho moderno e o fato de ser um dos primeiros modelos no Brasil que foram trazidos para as linhas digitais. De qualquer forma, podemos ver o quanto mudou em apenas 8 anos. Celulares hoje em dia mandam mensagens de texto, mensagens multímidia, possuem câmera integrada, mp3, possuem jogos, conectam à internet, fazem cafezinho e até pagam suas contas - inclusive aquela conta absurdamente cara da sua última fatura de celular.

Tudo muito legal, tudo muito divertido. Mas ainda falta alguma coisa. Por exemplo: e se eu quiser trocar a minha câmera digital? Ou como faço para adicionar um HD ao meu smartphone? E se eu quiser usar outra bateria, ou adicionar uma placa que me permita usar dois chips GSM no mesmo aparelho?

Mudanças em hardware, nem pensar. Software deveria ser um pouco mais flexível, mas ainda está longe do satisfatório. Diferentes sistemas operacionais, diferentes versões, diversos padrões de rede (GSM, CDMA, iDen, entre outros) e - mais importante - diferentes plataformas de desenvolvimento de software fazem com que planejar um produto para o mercado mobile seja tão fácil quanto atirar em um grilo usando uma escopeta numa sala pequena, depois de tomar meia garrafa de tequila. Chamar de “mercado dinâmico” é um eufemismo. É um mercado caótico.
Quer adicionar uma outra variável na brincadeira? A penetração de aparelhos celulares é muito maior que a de computadores domésticos. No Brasil, já passamos há tempo a marca de 60 milhões de aparelhos ativos. Isso passa (em muito) o número de computadores. Na Itália, mais de 90% da população possui telefone celular. Os números de usuários de Internet não chegam à metade. O celular é, sem dúvida, o Verdadeiro Computador Pessoal.

E aí apareceu a oportunidade de ouro para a Apple e o iPhone. Do mesmo jeito que fizeram com o Apple I e com o Apple II, a estratégia para o iPhone é reduzir o número de subsistemas (poucos aplicativos de terceiros, sistema operacional próprio, software próprio) e lutar para manter controle sobre cada uma das partes. Quem melhor que Steve Jobs, com seu senso de design, para delimitar o melhor ponto para atender todos os requisitos conflitantes que existe num mercado caótico como o mobile?

Enquanto todos batem cabeça e não se entendem, a Apple usa a sua vantagem como fabricante de hardware e espera neutralizar as operadoras de telefonia futuramente, apostando no crescimento do Wi-Fi e pensando que o seu iPhone poderá ser um telefone (VoIP) e, principalmente, como um dispositivo para a distribuição de conteúdo digital. Só depois, e quando for do seu interesse, ela precisaria abrir o iPhone para terceiros. Ela nem mesmo precisaria ter um “Visicalc”, pois ela já se encarregou de fazer isso antes: chama-se iTunes Music Store.

Do jeito que se vê hoje, a Apple tem tudo em mãos para se tornar a força dominante do mercado de mobile computing. A vingança de Steve Jobs, tardia, seria em sua dominação do Verdadeiro Computador Pessoal.

Android: estamos de novo em 1981

Not so fast, Steve. Você acreditou mesmo que todo mundo ia ficar assistindo você ficar com todo o bolo? As operadoras de telefonia ainda querem briga. E aqueles que desenvolvem software também precisam ter um ambiente onde eles sabem que seu sistema rode sem que eles tenham que pedir permissão para ninguém.

Qual a melhor maneira de garantir isso? Ora, lançando um padrão de referência para quem quiser desenvolver dispositivos móveis! Foi exatamente isso que a Google fez essa semana. Ao invés de lançar um aparelho de celular, foi anunciado o Android. O Android é uma plataforma aberta de desenvolvimento, com especificação de sistema operacional, middleware e aplicativos finais. Quem quiser desenvolver um aplicativo para um celular que seja Android, basta trabalhar de acordo com a spec.

Os fanáticos por Java vão apontar para o JavaME, como forma de ter uma plataforma de desenvolvimento livre e definida. Eu vou dizer “Nice try, but no.” Do mesmo jeito que acontece no desktop, aplicativos JavaME acabam limitados pela qualidade da implementação das bibliotecas que funcionam “embaixo”. Por exemplo: assim como um toolkit como o SWT tem que ser um mínimo denominador comum entre os ambientes gráficos subjacentes (GTK, MFC, Cocoa), uma implementação de JavaME é, no máximo, tão poderosa quanto o pior sistema usado atualmente nos aparelhos celulares. O padrão do Android é a partir do zero, não fica obrigado então a fazer nenhum tipo de compromisso por conta de limitação tecnológica.

Em suma: Android é a versão mobile do padrão IBM-PC. Não importa se você for um desenvolvedor de aplicativo ou de componentes para celular, você poderá ter um pouco mais de segurança na hora de começar o seu investimento. Isso levará a muita inovação no mercado, pois teremos mais empresas tentando arriscar algo novo, sem medo de ver seu investimento sendo jogado fora por alguma reorientação tecnológica. Isso levará a redução ainda maior de custos. De comoditização total de hardware. Até mesmo podemos pensar em maior integração entre serviços que hoje só são pensados para web. Um celular Android poderá, efetivamente, tornar-se o PC 2.0.

Apple vs o resto. Dessa vez, até pode ser diferente.

Cabe a Apple decidir se vai querer que o iPhone se torne um sucesso como o Mac ou como o iPod. Usuários (e lucros) ela terá em qualquer hipótese. Entretanto, a insistência da Apple em manter todo o controle da arquitetura se mostrou falha na guerra dos desktops. Até hoje, com geeks tietando a Apple da mesma forma que adolescentes tietavam Britney Spears, o mercado da Apple não passa de magros 3%. Será que ela vai se posicionar, de novo, para manter apenas um nicho ou pretende ir para as cabeças?

Dois fatores pesam a favor, dessa vez. O primeiro: é muito difícil que o Google faça por alguma empresa o que a IBM fez pela Microsoft, o que levaria a uma grande procura por celulares com o padrão Android e a um possível monopólio de algum serviço dentro dele. O outro: o mercado de mobile business está bem mais maduro, hoje, do que o mercado de computadores era em 1981. Quase metade dos habitantes do planeta usa um celular, e a imensa maioria já está acostumada a mudar de aparelho a cada 18 meses. Não há nada que impeça que eles resolvam fazer a mudança.

De um jeito ou de outro, é uma época bem interessante para trabalhar com o desenvolvimento de aplicações para o Verdadeiro Computador Pessoal.

Escolhendo uma distro Linux

Distribuição Linux é igual a gosto: cada um tem a sua preferida. Eu já brinquei com pelo menos 4: RedHat, Fedora, Mandrake e Suse. Cada uma tem peculariedades interessantes, caracteristicas próprias que as diferenciam das outras: instaladores gráficos para newbies, bons sistemas de configuração, segurança, aplicativos desktop, entre outros. Escolher a mais adequada para o seu caso pode ser uma tarefa longa.

Encontrei na internet o site Linux Distribution Chooser (http://www.zegeniestudios.net/ldc/index.php) que, a partir de uma série de perguntas, tenta determinar qual a melhor distribuição para o usuário. No meu caso, a resposta foi Mandriva. Em alguns casos, o sistema oferece várias possibilidades. Mandei o link para uma série de amigos geeks, e todos pareceram concordar com os resultados. Para aqueles que querem se aventurar neste mundo, pode ser um bom chute inicial, para evitar uma escolha totalmente aleatória.

Folding@HOME e PS3 (ou “Os vídeo-games e a inovação na computação - parte 3″)

Andei meio distante deste blog nos últimos três meses por diversos motivos mas voltando a escrever, queria falar de um mesmo assunto sobre o qual eu estava falando da última vez que eu escrevi aqui: Os vídeo-games e a inovação na computação. Para quem tiver interesse em ler os dois primeiros artigos sobre este assunto eles estão aqui e aqui.

Desta vez queria falar sobre como todo o poder de processamento dos novos vídeo-games podem ser usados para… não rodar jogos! Mas, se não formos rodar jogos em vídeo-games, o que faremos com eles?

Bom, como disse no primeiro artigo sobre este assunto, pelo menos dois dos vídeo-games desta nova geração, o PlayStation 3 e o XBox 360, na minha opinião, tem como objetivos se tornarem as centrais de entertenimento da casa, gerenciando conteúdo e conectando todos os dispositivos multimídia de uma casa. Mas além disso, pelo menos o PlayStation 3, já nasceu como um computador completo. Desde que foi lançado era possível conectar um teclado e um mouse a ele, rodar Linux e, com isso, usá-lo como um desktop. Vá lá que não é um desktop lá grandes coisas porque a pouco memória (só 256 MB) e o mal uso do processador Cell pela maior parte dos aplicativos do sistema operacional, que utilizam apenas um dos nove núcleos dele, tornam a experiência não muito boa.

No entanto, se bem usados todos os núcleos do processador Cell eles podem entregar até 200 GFlops, o que é muito se comparado com os cerca de 15 GFlops de um Athlon 64, por exemplo. No caso do processador Cell, as aplicações que tiram maior proveito deste poder de processamento são aquelas que possuem grande parte do seu trabalho concentrado em processamento matemático pesado e intenso.

E daí? E daí que se as aplicações forem bem escritas, podem usufruir de todo este poder de processamento e se tornarem muito poderosas. Um bom exemplo disso são as aplicações do BOINC. Para quem não conhece o BOINC, ele é um projeto criado pela Berkeley University. BOINC significa “Berkeley Open Infrastrucutre for Network Computing”. Ou seja, é basicamente um projeto que cria aplicações clientes para diversas plataformas que utilizam o tempo de processamento ocioso em computadores distribuídos em rede (na Internet, por exemplo) para processar coisas que um computador sozinho levaria milhares de anos para processar, mesmo que ele fosse bem poderoso. A rede criada pelo BOINC já possui diversas aplicações e uma das mais antigas e populares é o Folding@Home. O Folding@HOME utiliza a infra-estrutura do BOINC para fazer cálculos poderosos sobre como átomos e moléculas se juntam para formar proteínas. A formação de proteínas é um processo complexo e a forma espacial das moléculas de proteínas é importantíssima na função que elas exercem nos organismos vivos. O Folding@Home realiza cálculos para tentar entender como se dá o processo de empacotamento e desempacotamento das moléculas de proteínas e qual é a influência destes processos no desenvolvimento de doenças. Para quem quiser saber mais sobre o BOINC e o Folding@Home, pode ver aqui e aqui.

As aplicações do BOINC são um exemplo prático de aplicações que necessitam de grande poder de processamento. E, pensando nisso, o pessoal do Folding@Home ficou de olho grande no poder de processamento do processador Cell presente no PlayStation 3 e desenvolveu um cliente específico para esta plataforma para utilizar o poder de processamento ocioso dos vídeo-games! Ou seja, se você não estiver jogando, vai poder ajudar pesquisas importantes para o avanço da humanidade. Para se ter uma idéia da “ajudinha” que os PlayStation 3 estão dando para o Folding@Home, eles representam cerca de 10% dos processadores sendo utilizados de forma distribuída por esta aplicação, mas, por outro lado, entregam mais da metade do poder de processamento atual! Para maiores informações sobre isso, basta clicar aqui. Uma ajuda e tanto vindo de vídeo-games! Quem poderia imaginar algo assim há algum tempo atrás?

O ponto importante disso tudo é que o nível de convergência que estamos vivendo atualmente das várias tecnologias e mídias de distribuição de conteúdo estão fazendo com que coisas antes centradas apenas em entertenimento, como vídeo-games, já estão sendo pensadas hoje também como componentes centrais de sistemas distribuídos em todo o mundo. E, como vimos, não estou falando de jogos online.

Google Desktop para Linux

Muitos usuários de Windows e Mac já conhecem o Google Desktop - uma ferramenta que permite fazer buscas nos arquivos armazenados no seu computador (arquivos pdf, histórico da web, mails, etc …). Além disto, nas suas últimas versões há a funcionalidade de uma barra lateral, onde você pode instalar diversos gadgets (pequenas aplicações que variam desde leitores de notícias, até visualizador de fotos de seu Picasa, relógio, task lists … - muito similar aos gadgets que você pode instalar em seu iGoogle).

Depois de muito tempo, finalmente a Google lança a versão desta ferramenta para Linux:

Google Desktop now available for Linux

No entanto, esta versão contém apenas as funcionalidades de busca - não há ainda a barra lateral. Além disto, os instaladores disponíveis são para versões de 32 bit. De qualquer forma, funciona bem, e é melhor que utilizar o find para buscar arquivos, além de permitir busca por palavras dentro dos documentos. Vale a pena conferir.

Powered by ScribeFire.

Palm Inc adota Linux

Segundo o Palm Info Center, a Palm anunciou que irá lançar uma plataforma móvel baseada em Linux rodando entre outras coisas o navegador Opera. Depois do anuncio da separação da Palm e Palm Source (que produz o SO), parece que finalmente as coisas estão tomando um rumo decente…

VNC

Por Ricardo Capitanio

Uma bela manhã de sol de Janeiro, ligo o monitor do meu servidorzinho (um Pentium III 500MHz rodando Windows 2003 Server) e de repente: poof, já era. Há três anos estava dando sinais de que, mais cedo ou mais tarde, isso iria acontecer. Eis que fiquei com o servidorzinho sem monitor.

Qual era a melhor solução, sendo que não queria comprar um outro monitor? Instalar um linux? Compartilhar o monitor? Não. A solução se chama VNC (Valeu Lazarini!).

VNC, do inglês Virtual Network Computing, é um software que permite a interação e visualização remota de um computador (server), usando um simples programa (viewer) em outro computador através da rede (Internet/Intranet). Vale ressaltar que os sistemas operacionais podem ser dos mais variados (Linux, Mac OS, Windows, etc).

“Ah não mais isso é muito complicado, instalação dificil, cheia de configurações. Sou usuário Windows e não que me estressar com arquivos de configuração, portas, senhas, protocolos.” Dificil nada! Com o realVNC (www.realVNC.com) é possível instalar sem traumas e com poucos cliques (Windows style: next next next next) tanto o aplicativo servidor como o aplicativo cliente. O cliente é até dispensável pois é possível acessar o seu micro tranquilamente pelo seu navegador preferido, através de um applet Java que funciona muito bem via uma conexão http.

Licença? GPL.

Além de resolver o problema, o VNC ainda se mostrou como uma sendo uma boa forma de economizar energia e espaço sem mais um monitor pela casa.

[Ricardo Capitanio é Engenheiro de Computação formado pela UNICAMP. Atualmente está fazendo mestrado em Engenharia de Computação na Faculdade de Engenharia Elétrica e de Computação da UNICAMP e é presidente da AIESEC Campinas]

Pendrive Linux

Rodar Linux sem necessidade de instalar o sistema no HD do computador não é novidade: os CDs “bootaveis” são uma mão na roda e funcionam muito bem. O problema é que arquivos tinham que ser gravados no HD.

O pendrive da Mandriva resolve isso. O produto é um pendrive de 2GB com a disto linux Mandriva instalado, que permite o boot direto à partir do dispositivo, e tem um sistema de arquivos formatado que permite gravar os dados.

Linutop

Achei o site do Linutop no RSS do Top Links do de.licio.us. O site é bem simples e não dá muitas informações, mas a idéia parece ser bem interessante: um terminal low-cost e low-power rodando linux e um conjunto reduzido de aplicações para o dia a dia (Firefox, abiword, Gaim, Totem Media player e PDF reader). Se alguém tiver mais informações, postem comentários.

Do site:

“Linutop is a Linux-based diskless computer. It offers a completely silent, low-power operation in an extremely small package. “

Ainda do site, configuração:

“Specifications:
- AMD Geode
- 512 Mb ROM
- 256 Mb RAM
- 4x USB 2.0 ports
- audio in & out
- 100baseT Ethernet
- VGA output
- Size: 9.3 x 2.7 x 15 cm
- Weight: 280 gr
Expandability:
- USB2 , Wifi connection, Flat pannel “

Java e Linux

Uma das coisas mais interessantes que eu já presenciei é a diferença de percepção existente entre os desenvolvedores Java em geral e as pessoas da comunidade Linux. Nos últimos dois anos eu participei de vários eventos da tecnologia Java no Brasil. Dentre eles, os mais importantes com certeza foram os dois Sun Tech Days. Para aqueles que não conhecem, o Sun Tech Days é o maior evento de Java no Brasil. Ele é organizado pela Sun Microsystems Inc. e também acontece em outros países. Estes eventos seriam os segundos mais importantes depois do Java One, maior evento de Java do mundo que acontece anualmente em San Fracisco.

Nestes eventos sobre Java, é muito interessante a forma como a grande maioria dos desenvolvedores tem uma atitude de repúdio com o Windows, a tecnologia .NET e outras coisas vindas da Microsoft. Este tipo de comportamento é de certa forma normal em vários grupos de pessoas envolvidas com tecnologia. Até aí não vejo nada demais. A Microsoft mexe com o âmago de muitas pessoas, seja lá em qual sentido isto acontece. Obviamente, este tipo de comportamento é seguido pela defesa de tecnologias livres, aí incluindo, é claro, o sistema operacional Linux. Isto é ainda mais exacerbado pelo recente movimento da própria Sun na abertura do código-fonte de vários de seus produtos, inclusive o sistema operacional Solaris e da IDE de desenvolvimento NetBeans.

Neste ponto chego ao ponto interessante que comentei no inicio deste artigo. Ao mesmo tempo em que muitas pessoas envolvidas com Java no Brasil são a favor do software livre e do Linux, boa parte das pessoas da comunidade que eu já conheci não gostam da tecnologia Java. Existem, obviamente, vários motivos para este tipo de comportamento da pessoas da comunidade. Muitos não vêem com bons olhos as iniciativas de software livre da própria Sun devido às restrições das licenças da Sun. Especificamente em relação a Java, as licenças da maquina virtual Java e do SDK não são licenças de software livres. Os softwares são distribuídos gratuitamente e sua especificação é desenvolvida através do Java Community Process (JCP), que é um processo aberto a toda a comunidade para desenvolvimento das especificações de tecnologias relativas ao Java. No entanto, a implementação da Sun da máquina virtual Java e do seu SDK não possuem o código-fonte aberto, ainda.

Digo ainda porque existe uma certa boa vontade da Sun em liberalizar um pouco algumas questões relativas à licença do Java. Acho que ainda estamos um pouco longe de termos o código-fonte do Java SE da Sun liberados para a comunidade de software livre, mas no último Java One um dos principais assuntos foi a flexibilização da licença Java para que a implementação de Java SE da Sun possa, por exemplo, ser distribuída sem grandes problemas em distribuições Linux.

Apesar desta aparente boa vontade, posso estar enganado, mas as notícias mais recentes que tenho é que as distribuições Linux que antes estavam vendo com bons olhos a iniciativa da Sun para mudança da licença do Java agora estão com um pé atrás novamente. Isto porque as mudanças feitas na licença aparentemente não foram suficientes para que o Java possa ser disponibilizado juntamente com os outros pacotes de instalação das distribuições.

Esta questão legal, que é importante por um lado, acaba afetando diretamente os usuários finais que tem várias dificuldades para instalar o ambiente Java em Linux e utilizar este ambiente, por exemplo, dentro de seu navegador para acessar a um Internet Banking ou outra aplicação baseada em Java. Este tipo de dificuldade prática causada pelos problemas de licença acaba pesando muito na visão da comunidade de software livre sobre a tecnologia Java.

Não sei até que ponto este tipo de comportamento entre as pessoas envolvidas com a tecnologia Java e com a comunidade de software livre acontece em outras partes do mundo. No entanto, é interessante por si só verificar este tipo de relação no Brasil porque o Brasil é de longe o país com a maior comunidade de usuários Java do mundo e um dos mais ativos participantes em projetos de software livre também.

[Linux Shell] Mão na roda

Nos últimos meses eu andei processando e extraindo dados de algumas centenas de milhares de arquivos de genética. Na maioria dos casos eu uso Perl ou Python para fazer o processamento mais pesado e gerar arquivos de resumo…relatórios simplificados: em geral, um conjunto de colunas. Eu costumava fazer o processamento final desses relatórios em programas de planilha como Excel ou OpenOffice. Mas graças a alguns hackers jedi que trabalham comigo eu aprendi alguns truques velhos conhecidos dos usuários antigos de linux, e antes de abrir esses programas, eu vejo se eu consigo extrair as informações necessárias usando os programinhas utilitários do Shell do Linux. É incrível a quantidade de pequenos utilitários de linha de comando que executam tarefas muito simples e que podem ser uma mão na roda (isso sem mencionar awk e sed..mas aí já complica). Como eu sou um mero iniciante na arte de processamento simples de texto em shell, conheço apenas alguns que vou citar aqui. Se conhecer outros, let me know :-)

  • cut : pega um arquivo contendo colunas separadas por algum delimitador (tipo csv) e extrai uma ou mais colunas.
    Por exemplo cut -f1,2 -d” ” meuarquivo extrai as colunas 1 e 2 do arquivo meuarquivo cujas colunas estão delimitadas por espaços.
  • sort: Lê linhas de um arquivo e imprime a versão ordenada crescentemente. A opção -n indica que as linhas representam números, a opção -r ordena decrescentemente o arquivo e -u elimina elementos duplicados.
  • uniq: Lê um arquivo e descarta linhas idênticas sucessivas, imprimindo o resultado. Caso o arquivo esteja ordenado, elimina linhas duplicadas. A opção -c imprime o número de vezes sucessivas que uma linha apareceu no arquivo.
  • grep: Esse é um clássico. Recupera linhas que contenham uma palavra ou expressão regular: muito útil para filtros. A opção -v faz com que o comando imprima as linhas que não contenham a palavra passada como filtro (inverte o processamento).
  • wc: analisa um arquivo e conta quantas linhas, palavras, caracteres o arquivo possui. A opção -l imprime apenas o número de linhas de um arquivo.

Encadeando esses comandos de forma apropriada, é possível se obter informações bem interessantes de forma muito rápida. Por exemplo, se considerarmos o seguinte arquivo:

SCEP 2 PERFECT SCBF 2 P ERFECT SCCC 1 MISC
SCCC 3 P
ERFECT SCSG 2 MISC SCCC 3 MISC SCSG 1 MISC
SCSB 1 P ERFECT SCRF 1 PERFECT SCAC 1 PERFECT

Digamos que eu queira saber quantas vezes cada número aparece na segunda coluna, apenas nas linhas contendo a flag PERFECT. O comando em shell seria o seguinte:

grep PERFECT file | cut -f2 -d” ” | sort -n | uniq -c

C.Q.D. Have fun !

Stallman, Linux e Politica

A ZNet publicou uma entrevista muito interessante com Richard Stallman, onde ele fala sobre o movimento Software Livre, sobre o sistema Linux (ou melhor, GNU/Linux) e sobre política. Longo, mas bastante interessante. Vale ressaltar a explicação entre as diferenças dos movimentos de Open Source e Free Software, e a menção à UNIVATES e ao SAGU.

Clique aqui para ler o artigo.

PS: Agradeço ao Danilo, que me indicou o texto.