31.7.05

Programming in Haskell

Um livro introdutório sobre a linguagem de programação Haskell - uma linguagem "puramente funcional de propósito geral". Além de um preview do livro, o site disponibiliza também slideshows (powerpoint) de cada um dos capítulos do livro. Um "kickstart" interessante para quem não conhece nada da linguagem.
O próprio site do haskell (da haskell??) tem uma boa quantidade de manterial interessanste, inclusive aplicações desenvolvidas na linguagem. O site também tenta desmistificar algumas idéias sobre a programação funcional e faz comparações com o modelo procedural/imperativo.

E pra quem simplesmente não acredita em programação "puramente funcional", apresentamos a O'Haskell!! :D

f [] = []
f (x:xs) = f ys ++ [x] ++ f zs
where
ys = [a | a  xs, a  x]
zs = [b | b  xs, b > x]

29.7.05

Genéricos: Mais críticas

Como eu sou o principal responsável por evitar que esse site se torne uma espécie de "Java Partyline", aqui vai mais um artigo criticando a implementação de genéricos na linguagem. É um comentário de Bruce Eckel sobre o artigo de Ken Arnold do qual eu falei neste post. Um trecho para abrir o apetite:

As much as Java people like to dis C++ for just about everything, C++ templates are much more straightforward than Java generics, because they are consistent. With erasure, you have to constantly remind yourself that you only think you know what a particular parameterized type is. But because you don't really (except sometimes), it causes all kinds of confusion. And a programming language is supposed to be an abstraction to reduce confusion, so Ken's comment about complexity: "I don't see that the value is there to justify the cost," is legitimate.


Vale lembrar que Eckel e Arnold são dois famosos expoentes da comunidade Java, autores de livros importantes sobre a linguagem (Arnold é co-autor do oficial "The Java Programming Language"), e não outsiders.

Eu acho que os genéricos foram implementados da melhor maneira possível considerando o requerimento de não quebrar a compatibilidade, e para conseguir isso foi necessária tanta teoria que um programador médio não faz nem idéia. Mas teria sido provavelmente melhor se a Sun não tivesse se preocupado tanto com compatibilidade e planejado uma forma de transição para que o código antigo continuasse a interoperar com o novo. Vai saber, evoluir um sistema muito utilizado é complicado de qualquer forma.

O Hibernate está enrolando a sua cabeça?

O "Road to Hibernate" é um tutorial introdutório sobre o Hibernate (se não o melhor framework Objeto-Relacional Java, pelo menos o mais "buzz word" já há um bom tempo).
O tutorial cobre muitos pontos críticos da tecnologia (como os problemas causados pela definição errada de caches e modelo de transaçao, que só são percebidas "tarde demais").

27.7.05

WEP Cracking

Continuando no tópico Wardriving, uma ferramenta muito interessante (ou não, dependendo de que lado da rede wireless você está). Ela quebra uma chave WEP rapidinho, permitindo entrar em redes privadas/criptografadas. E é open-source.
Ops!
(o link é colaboração do Rafael Torres! :))

Wardriving

Significa andar por ai com um laptop equipado com uma placa de rede wireless para tentar detectar redes wi-fi com brechas de seguranças. Um aparelho de GPS também pode ser utilizado p/ marcar a posição, latitude e longitude, onde a rede é encontrada. Já existe até uma versão do KNOPPIX (Linux Live CD) para esse fim, o Auditor. Esta versão traz várias ferramentas para este tipo de prática como wi-fi scanners além de scripts de força bruta para quebrar senha WEP. ;)

26.7.05

Biscoito da Sorte do Dia

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."

- Rich Cook

O Jdeveloper agora é grátis. Que m*, ein ?

Depois da Borland ter aberto o código-fonte do Jbuilder para a comunidade Eclipse, a Oracle jogou pesado e anunciou que a IDE Java da Oracle (Jdeveloper) poderá ser totalmente utilizada sem a necessidade de licenciamento, observando as regras no Site OTN da Oracle.

O pessoal da Oracle e os amantes do Jdeveloper (existe algum?) que me perdoem, mas não sei o que tem de tão bom nessa notícia, que só tende a piorar ainda mais o Jdev (e tem como?). Ao meu ver, a Oracle está tirando um peso dos seus ombros tornando o Jdev gratuito. Afinal, a partir de agora, se houverem mais reclamações que a ferramenta é ruim, a Oracle simplemente vai responder: "Tá reclamando de que? A IDE é de graça".

Já que estamos falando da Oracle, ela se ofereceu para liderar o projeto JavaServer Faces (JSF) dentro da comunidade open-source Eclipse Foundation e também irá participar do projeto Apache MyFaces como contribuidor.

StringBuffer ou StringBuilder?

A classe StringBuilder foi introduzida no Java 5.0. Trata-se de uma versão non-thread-safe (portanto, mais rápida) da velha e boa StringBuffer. As operações da StringBuilder são iguais às de sua prima. Então, se antes você fazia:
StringBuffer bf = new StringBuffer();
bf.append("google");
bf.append("tron!");
System.out.println(bf.toString());
Agora você faz:
StringBuilder bf = new StringBuilder();
bf.append("google");
bf.append("tron!");
System.out.println(bf.toString());

(O que? Você faz concatenação de strings usando a classe String??? Bad, bad developer. No donuts for you...)

25.7.05

Mapeamento Objeto-Relacional: Técnicas e Implementações

Outro artigo da série de artigos velhos. Conceitos básicos e estratégias para o mapeamento objeto entre objetos e bases de dados relacionais. Versão online aqui ou PDF aqui.

23.7.05

Você sofre de GeekBlock?

Just as writers are prone to writer's block, programmers are prone to GeekBlock.

Maybe we can't find the cause of a particular bug,or maybe we just can't stop surfing the web when we know there's things we should be doing.

Having found myself in the clutches of GeekBlock more than once, I've put together some notes from the inside.

22.7.05

Java Generics

Artigo véeeeelho sobre a introdução dos Generics no Java 1.5 (ops, falha nossa...). Pode ainda servir de referência, though.

21.7.05

A Microsoft Certified Professional mais jovem do planeta!

"Meet Arfa, a promising young software programmer from Faisalabad, Pakistan, who is believed to be the youngest Microsoft Certified Professional in the world. She received the certification when she was 9. During a recent meeting with Bill Gates, she presented him with a poem she wrote that celebrated his life story."

20.7.05

Dasher

Se você usa algum dispositivo sem teclado completo (PDA, por exemplo) ou só quer usar uma mão e mesmo assim escrever em uma velocidade razoável, pode valer a pena dar uma olhada no Dasher, um software para entrada de texto baseado em gestos contínuos de apontar.

Segundo o site é possível chegar tranquilamente a 25 palavras por segundo, e os usuários experientes chegam até 39 palavras por segundo; além disso, funciona em qualquer língua.

No endereço tem demonstrações de usuários entrando texto com o bicho; realmente, parece um jogo de videogame. Isso porque uma das idéias principais da interface é usar zoom; tenho certeza que Jef Raskin aprovaria.

19.7.05

Mbooster - Compilador J2ME

Com o aumento da demanda por desenvolvimento J2ME, começam a surgir novas ferrramentas no horizonte para auxiliar no desenvolvimento. Este é a proposta do MBooster, um compilador especifico para J2ME que promete reduzir o byte code. Quando será que teremos o "JikesME" ?

http://www.innaworks.com/mBooster.html

18.7.05

RSS Screensaver


Um screensaver interessante, que permite exibir RSS Feeds no seu desktop. Por enquanto, disponível somente para Windows (com o Not Yet Framework instalado).

Momento Dilbert...

17.7.05

Will RFID-guided robots rule the world?

Os robôs guiados por RFID são uma das novas tendências mecatrônicas.

Enquanto isso, teóricos da conspiração, malucos, religiosos e jornalistas discutem se o RFID não é, na verdade, um sinal do apocalipse...

16.7.05

A Máquina de Turing

Que tal uma Máquina de Turing toda feita de LEGO?

Introduzida por Alan M. Turing em 1936, a Máquina de Turing é uma abstração usada no estudo da Teoria da Computação: o que um computador pode ou não fazer.

O processo computacional foi graficamente mostrado no artigo de Turing quando ele pediu ao leitor que considerasse em dispositivo que pudesse ler e escrever símbolos em uma fita que estava dividida em quadrados. Uma cabeça de leitura/gravação se moveria em qualquer direção ao longo da fita, um quadrado por vez, e uma unidade de controle poderia interpretar uma lista de instruções simples sobre leitura e gravação de símbolos nos quadrados, movendo-se ou não para a direita ou esquerda. O quadrado que é "lido" em cada etapa é conhecido como "quadrado ativo". A regra que está sendo executada determina o que se convencionou chamar 'estado' da máquina. A fita é potencialmente infinita.

14.7.05

DAOGen

Todo programador já teve aqueles dias em que não tem saco para fazer nada. Imagina então que em um destes dias você tem de implementar um DAO para acessar o banco de dados com Interface para lá, implementacao para cá e uma Factory no meio de brinde. Bem, pensando nisso surgiu o projeto DAOGen, que simplesmente faz todo o "trabalho sujo" para você (que eu gosto, Mas sou minoria no meio). Basta gerar as classes seguindo o passo a passo e dentro de segundos... Voilá, um DAO quentinho saindo do forno. Agora é só utilizar o famoso ctrl + xupis e ctrl + cuspis.

http://titaniclinux.net/daogen/

Palm's new logo


A Palm (antiga PalmOne, que um dia já se chamou Palm Inc), a empresa que mais sofre de crise de identidade no mundo da tecnologia, mudou de nome e de logo. Mais uma vez. Novamente.

O software e os carros...

Numa conferência sobre software (COMDEX), Bill Gates disparou:

"Se a GM tivesse desenvolvido sua tecnologia como a Microsoft, todos nós estaríamos dirigindo carros de 25 dólares que fariam 1.000 milhas com um galão de gasolina"

Eis a resposta da GM:

"Se a GM tivesse desenvolvido sua tecnologia como a Microsoft, todos teríamos carros com as seguintes características:
1 - Sem nenhuma razão aparente, o carro bateria num poste duas vezes por dia.
2 - Eventualmente, seu carro morreria na estrada sem razão aparente. Você aceitaria o fato, daria nova partida e continuaria dirigindo.
3 - Toda vez que as faixas da estrada fossem repintadas, você teria de comprar um novo carro.
4 - Eventualmente, executando uma manobra como uma conversão a esquerda, seu carro deixaria de funcionar e você teria de mandar reinstalar o motor.
5 - Uma única pessoa por vez poderia usar o carro, a menos que você optasse pelo modelo "CarNT". Ainda assim você teria de adquirir mais bancos.
6 - A Macintosh produziria um carro movido a energia solar, mais confortável, cinco vezes mais rápido e duas vezes mais fácil de dirigir, mas que funcionaria apenas em 5% das rodovias.
7 - Luzes indicadoras de óleo, água, temperatura e alternador seriam substituídas por uma simples luz de "falha geral do veículo".
8 - Os bancos exigiriam que todos tivessem as mesmas medidas corporais.
9 - O airbag perguntaria "Você tem Certeza?" antes de disparar.
10 - Eventualmente, sem razão aparente, o carro trancaria o dono fora e não deixaria entrar, a menos que este simultaneamente puxasse a maçaneta, girasse a chave e segurasse na antena do rádio.
11 - A GM exigiria de todos os compradores a aquisição de uma coleção de mapas rodoviários em encadernação de luxo, produzidos por uma subsidiária da GM, mesmo que eles não quisessem os mapas ou precisassem deles.
A tentativa de não adquirir este acessório reduziria o desempenho de veículo em 50%.
12 - Toda vez que a GM lançasse um novo modelo, os motoristas teriam de reaprender a dirigir, porque nenhum dos seus comandos seria operado da mesma maneira que no modelo anterior.
13 - Você teria de pressionar o botão Iniciar para desligar o Motor."

Will computing flow like electricity?

A "computação pervasiva" é a última moda da TI. Computadores em todo lugar? Casas inteligentes? Roupas que sabem quantas vezes foram lavadas? Geladeiras que só deixam você comprar leite desnatado?
Let the software set the flow...

"Industry executives respond to Nicholas G. Carr's contention that utility computing will evolve in much the same way electricity did a century ago."

13.7.05

txt2tags

Uma ferramenta de geração de documentos em Python. Você escreve seus documentos em arquivos txt com uma marcação simples (i.e.: **negrito**, //itálico//, etc, etc), E o txt2tags converte o documento para formatos específicos (html, sgml, pagemaker, manpage, latex). 300% geeky.

12.7.05

Engenharia de Software ?

Publiquei em meu outro blog um artigo relativamente longo (para blogs) e opinativo sobre o estado atual da engenharia de software. Ele reúne algumas idéias e impressões minhas com as de um paper de John Allen que está linkado lá. Claro que ainda assim é muito curto para um assunto complexo, e como não é uma opinião muito comum, pouca gente deve concordar, mas esta lá para quem quiser pensar sobre o assunto. Comentários são bem vindos.

11.7.05

C Family Interview

Dennis Ritchie, Bjarne Stroustrup e James Gosling criadores do C, C++ e Java respectivamente, foram entrevistados e responderam uma série de perguntas respectivas à criação de suas linguagens e previsões para o futuro. O resultado desta entrevista foi publicado no Java Report, 5(7), de Julho de 2000 e no C++ Report, 12(7), de Julho/Agosto de 2000, e pode ser visto em http://www.gotw.ca/publications/c_family_interview.htm. Vale a pena conferir!!!

Quanto se ganha trabalhando com TI?

Pesquisa da ComputerWorld. Enquanto os profissionais da área nem sequer conseguem se organizar para criar regulamentos para a profissão, continuam as pesquisas com números irreais (seja para cima, seja para baixo). Aliás, num país do tamanho do nosso, com cidades tão diferentes em potencial econômico, 'médias' se tornam um troço tão certeiro quanto as pesquisas estatísticas da equipe da marketing da Companhia Cibernética de Sírius...

Momento Dilbert

Palavras sábias! Qualquer semelhança com a realidade é mera coincidência... ;)

10.7.05

Marc Fleury fala sobre o Open Source

Entrevista interessante com o criador do JBoss (e de uma das mais importantes empresas "Open Source-based" do mundo). Ele fala das pessoas que contribuem com o Open Source como um "hobby", dá seu ponto de vista a respeito do sonho de "liberdade, igualdade e fraternidade" pregado por alguns alienados do movimento Open Source e afirma: "ninguém pode trabalhar de graça". Worth reading!

9.7.05

Definições Geniais: "Software detestável"

Detestável (adjetivo): software que não é testável.

Definição do site do Martin Fowler

Nova Versão C++ (C++0x)

Bjarne Stroustrup, criador do C++, publicou um artigo no C/C++ Users Journal em maio deste ano, comentado sobre sugestões quem vem recebedo desde a última release do C++ em 1998 (C++98) . O artigo na verdade é um guia de desenvolvimento de uma nova linguagem, quase 100% compatível com C++, o C++0x. Além de abordar tópicos de grande importância como Type Safety, Generic Programming e Performance, Bjarne saliente que diferente de outras linguagens não gostaria de ver o C++0x rotulando como uma linguagen para "windows" ou "web", mas sim como uma linguagem robusta de propósito geral.

Ruby on Rails no FISL 6.0

Mais uma sobre Ruby on Rails (veja post anterior). David Hansson, o principal responsável pela framework para aplicações web com mais hype no momento, esteve no Fórum Internacional de Software Livre este ano (edição 6.0), fazendo mais uma apresentação que impressionou muita gente.

8.7.05

Assertions e Annotations

Capítulo do livro "Agile Java", sobre dois dos mais interessantes recursos do Java 1.4/1.5

7.7.05

Context-Free Design Grammar



Uma linguagem de programação para geração de fractais, com a sintaxe similar ao Logo! Uh???

6.7.05

Como vai se chamar o Java 8?

O Java 5 foi batizado de Tiger. Java 6 vai se chamar Mustang. Java 7 também já tem nome: Dolphin. E o pessoal já está pensando no Java 8...

O mais interessante é que um dos candidatos a nome é 'Brazil'!

5.7.05

REST

"Web Services" foram a tecnologia da moda por algum tempo, até que todos perceberam que (como quase todas as tecnologias da moda), não serviam para muita coisa. Depois de muitos estudos (e experimentalismos arquiteturais), os Web Services estão voltando a tona, mais maduros e fáceis de usar (quem disser que se sentia confortável trabalhando com SABONETE está mentindo!!)
O REST é um padrão de implementação de Web Services que vem ganhando adeptos (como o flickr e o google, dentre outros.
Definições, exemplos e origem do tal REST você encontra aqui, aqui, aqui e aqui...

4.7.05

Struts Shale

Um novo projeto do Craig McClanahan (pai do Struts), o Struts Shale será composto de 8 subprojetos - core, taglibs, tiles, el, faces, scripting, application e shale. O objetivo principal do projeto vai ser prover um framework de desenvolvimento para 'facilitar e padronizar' o desenvolvimento de aplicações no padrão JSF.

3.7.05

Greasemonkey?

Greasemonkey is a Firefox extension which lets you to add bits of DHTML ("user scripts") to any web page to change its behavior. In much the same way that user CSS lets you take control of a web page's style, user scripts let you easily control any aspect of a web page's design or interaction.

Java Plugin Framework 0.6

O JPF é um 'runtime engine' que permite a descoberta, localização e carga dinâmica de plugins, provendo uma infra-estrutura padrão de plugins para projetos. Se você trabalha naquele grande projeto cheio de módulos com carga dinâmica e atualização online, o JPF pode ajudar.
Este artigo no theServerSide.com fala um pouco a respeito do JPF.

1.7.05

AJAX: A Fresh Look at Web Development

Um artigo interessante sobre a tecnologia AJAX - Asynchronous Javascript and XML - com bons exemplos de utilização prática.