segunda-feira, junho 21, 2010

Eu tenho todo o conhecimento do mundo...

Ontem estava no mercado com minha esposa e ela disse: "Queria fazer um molho de maracujá, como será que faz?"

Dei de ombros e continuamos pegando os refrigerantes, de repente parei e disse: "Peraí, eu SEI como fazer esse molho!".

Saquei o celular, abri o browser, Google, "molho de maracujá" e... bingo! Primeiro resultado já tinha a receita com todos os ingredientes. Compramos tudo e almocei um pelo pernil regado a molho agridoce.


Eu tenho todo o conhecimento do mundo...

...eu, e qualquer pessoa com acesso a internet. :)


Desde que comprei esse celular, e acesso a internet com ele, me pareceu que consigo fazer ou saber qualquer coisa que eu precise. Nós de gravata? Fácil! Receitas? Imediatamente! O que significa "nó cego"? Tá na mão! Algoritmos? Pra qualquer coisa que vc deseje...

Assinei o Safari (da O'Reilly), coloquei o Stanza e comecei a baixar livros gratuitos e comprar outros da Pragmatic Bookshelf (fazem meses que não leio um livro "físico"). E posso consultar toda minha biblioteca de conhecimento a qualquer momento.

Isso começou a me dar a impressão que consigo saber qualquer coisa que eu queira, de qualquer assunto, a qualquer momento.

Não bastasse isso, esse nossos pequenos e maravilhosos "gadgets" nos dão "super-poderes" (hmm... essa palavra ainda tem hífen?)

Memória fotográfica? Bom... o celular tem uma câmera e um gravador de som. Também tem uma agenda "buzina" meus compromissos.

Senso de direção? Viva o Google Maps e o TomTom.

Telepatia? Experimente SMS (boooommm... dá pra simplesmente fazer uma ligação :-p)

Pare um momento e pense como uma pessoa de 1980... "tudo isso é ficção científica!" =\

Acho que estou ficando velho...

quarta-feira, maio 19, 2010

Apanhando das expressões regulares no Ruby

Estava eu brincando com o Ruby 1.9 e tentando fazer uma expressão regular bem simples:
#encoding: utf-8
puts "isso é inaceitável".scan(/\w+/)
resultado:
isso
inaceit
vel
Uh-oh... =/ nada bom.

Procurei por todo lado, tentando achar o que eu estava fazendo de errado. Achei vários posts dizendo que isso deveria funcionar e ninguém com o mesmo problema que eu. Não sei o que fiz de errado até agora, se alguém souber, por favor me avise =/

De qualquer maneira, tentei resolver o problema sem sucesso. Então, na documentação do Oniguruma, achei um "paliativo":
#encoding: utf-8
puts "isso é aceitável".scan(/\p{Word}+/)

E o resultado:
isso
é
aceitável

Ótimo!

Além disso, fuçando lá vi várias outras classes bastante úteis, como "\p{Alpha}", "\p{Alnum}, "\p{Upper}" e "\p{Lower}" entre outros. É possível também negar a classe usando um "\P" (maiúsculo) como prefixo.

quarta-feira, abril 14, 2010

Java missed the boat?

Ontem eu estava dando uma olhada no JDK 7 para ver em que pé estava. Queria saber principalmente de closures que, a priori, iam ficar de fora.
Para minha surpresa (tá, tá... cheguei atrasado na festa), estava lá na página da Sun um pequeno artigo sobre closures de Dezembro de 2009 dizendo: "Vamos colocar uma versão de closures simplificada no JDK 7":
... It’s time to learn from the past debate and move forward. Sun will initiate the design and implementation of a simple closures feature, as outlined above, and add it to JDK 7 so as to enable broad experimentation. If all goes well then we’ll later submit a language-change JSR which would, in turn, be proposed as a component of the eventual Java SE 7 JSR. (ênfase minha)
Não entendi nada =/ Depois de tanto afirmarem que não ia, pra que a pressa agora? Colocar closures em Java vai ser um "puta trampo". Não pelos closures em si, mas muito da API deveria ser reescrita ou expandida.
Procurando um pouco mais achei um bug (ID: 5014235) na Sun Developer Network que acho que explica bem o que significa colocarem closures agora.
Closures are a great thing. Unfortunately, Java missed the boat in 1997. Since then, we've added a collections framework without closures (one of the prime uses), built graphics APIs around nested classes etc. We have tons of control constructs that could be defined using closures but aren't (assert and foreach, for example). So the advantage of adding closures now would be relatively small compared to the huge benefit you get if you add them from day one.
(ênfase minha de novo)
Resumo da ópera: o trampo de colocar vai trazer um benefício bem menor que o esperado, já que todos os lugares onde closure seria realmente bom já estão usando outros esquemas.
Se colocarem agora, para não tornar o código anterior incompatível, terão que adicionar vários métodos e maneiras "alternativas" de se fazer as coisas. Não sei vocês, mas acho que isso vai embananar o código, ora com closures, ora sem.
Não me leve a mal, adoro closures e acho que deveriam ser parte essencial de qualquer linguagem, mas colocar elas no Java agora vai dar um tremendo trabalho e quebrar a integridade conceitual da coisa (popular: "bagunçar o coreto").
Quer closures, gosta da JVM e de tipagem estática? Vai pro Scala que você vai estar mais bem servido e com uma linguagem conceitualmente consistente. De quebra, você ainda ganha type inference, currying, pattern matching, operator overloading (hmmm... na verdade é notação infix, mas dá na mesma), imutabilidade fácil e mais um paco de técnicas realmente úteis para programar.
Muito tarde para o Java.

quarta-feira, março 31, 2010

Sobre a carreira

Eu estava revisando meu currículo esses tempos atrás e comecei a ver no que já trabalhei, não em tecnologia, mas os negócios em que trabalhei, e fiquei surpreso com a quantidade de coisa que 'entuia os meu norônio'. Olha que beleza:
Comecei dando aula de DOS, WordStar, Lotus-123 e QuattroPro, depois seguem aulas de Windows, Access e 3DStudio (versão DOS!).
Largo as aulas e vou dar manutenção em um sistema auxiliar de uma indústria de celulose e papel.
Pouco tempo depois começo a mexer com e-commerce e um portal.
Mais um ano e vou pra bioinformática mexer com análise de DNA.
Saio e vou trabalhar com e-government na Secretaria da Fazenda do Estado de São Paulo.
Na sequência engata um sistema para configuração de equipamento de medição remota, e o front-end de um e-banking.
Fico 2 meses parado e vou trabalhar com replicação de autorização em catracas eletrônicas, middleware para transferência de dados entre fabricantes de móveis, CRM, e um site para corrida de cavalos.
Nesse meio tempo correm em paralelo: mais aulas e mais sistemas para bioinformática.
Saio e vou trabalhar com logística, segurança pública e análise de recursos hídricos.
E agora, fazem duas semanas, tráfego de controle aéreo controle de tráfego aéreo.
...
De DNA a burocracia, de caminhões e cavalos a aeronaves. Tenho certeza que tenho alguma lição pra tirar disso, mas não sei qual :D
O mais engraçado é que, no final de cada sistema, eu (e todo mundo que tinha trabalhado no projeto) sabia mais que muita gente da área. Acho que é efeito colateral de quando você tem que esmiuçar tudo quanto é regra para poder fazer o software. Depois que passa o projeto a memória faz seu trabalho e lentamente você vai esquecendo tudo que aprendeu. Eu me divirto no processo, mas às vezes me parece um tremendo esforço em vão, já que vou esqueçendo tudo. =/

Ginger - Scratch you own itch

3 meses que não escrevo nada... não sei pq insisto em manter um blog :) Vai ver é pro meu ego ter algum lugar onde estravazar.
Já ouvi aquela idéia do "scratch you own itch"? Dizem que muitos produtos legais vêm disso, ou seja, quando o desenvolvedor fica incomodado o suficiente com algo e faz um programa pra resolver seu problema.
Bom, eu trabalho com Java 8 horas por dia (e Ruby nas outras 2 horas) e estou sempre reescrevendo os mesmos utilitários o tempo todo para todo projeto que entro. Então, resolvi "coçar minha coceira" e montar uma lib de uma vez com esses utilitários. Aproveitando para dar uma polida geral neles para ficarem bem bacanas.
Nasce então a "Ginger", uma pretensiosa biblioteca que promete acabar com todos os seus problemas (haha! Silver bullet!!! haha!). Brincadeira! Ginger ainda é pré-adolescente e vai levar um tempo até servir de algo. Mas ela está lá, para quem quiser apreciar e, principalmente, criticar.
Ginger hoje tem um objeto "DuckType", que facilita a parte de reflexão, e estou trabalhando em facilitar expressões regulares e manipulação de texto.
Acabou que me empolguei com umas idéias nessa parte e resolvi fazer umas experimentações. Acho que descobri um jeito de expandir expressões regulares para fazer algumas coisas "impossíveis" do tipo "encontre tudo que não for isso", e facilitar o uso de lookahead e lookbehind, que são sempre complicadas.
É isso aí, opiniões são bem vindas. :)

segunda-feira, janeiro 18, 2010

Sensatez não dá Ibope

(Edição: arrumando acentuação [você não odeia quando essa bagaça zoa com os acentos?])
Eu estava conversando com um colega hoje sobre esse artigo sobre Injeção de Dependência e comentando sobre a polêmica levantada. A conclusão foi "O artigo é bom, mas bem que o Uncle Bob podia ser um pouco mais imparcial; existem casos onde Injeção de Dependência é bom, ele poderia ter falado neles também". Só que se ele tivesse sido imparcial, provavelmente o artigo não teria tanta popularidade :) A gente instintivamente vai atrás de polêmica. Moral da história: "Sensatez não faz sucesso". Taí uma coisa realmente preocupante...

quarta-feira, dezembro 23, 2009

Desenvolvimento de software é uma coisa irônica

Engraçado como o desenvolvimento de software tem uma tend?ncia a ser irônico e tirar um sarro dos seus esforços: 1 - Quanto mais flexível você tenta fazer o software, menos flexível ele fica. 2 - Quanto mais rápido você tenta contruí-lo, mas demora terminá-lo. 3 - Quanto mais simples você o faz, mais robusto ele fica. 4 - Mas quanto mais você tenta fazê-lo robusto e escalável, menos ele fica. 5 - Se você faz direito, demora menos tempo. 6 - Se você faz nas coxas pra ganhar tempo, você perde tempo. 7 - E quanto mais você estuda, mais aprende que nâo sabe o suficiente. 8 - Mas se não estuda, tem absoluta certeza que sabe tudo o que precisa. Tem horas que acho que o negócio é pensar de ponta-cabeça =/