InfoQ x TheServerSide

Março 31, 2008

Alguns anos atrás o TheServerSide era o meu site de tecnologia (e Java) preferido em geral. Muitas discussões interessantes rolavam por lá, tinha os Tech Talks, os simpósios, artigos, etc. Era muito bom para acompanhar o que estava acontecendo de importante na nossa área.

De uns tempos para cá, a qualidade do site despencou, e agora praticamente só noticiam coisas do tipo “XYZ was released”. Onde XYZ podia ser qualquer coisa. Framework, servidor de aplicações, biblioteca, livro, qualquer coisa. Muito raramente eu vejo alguma coisa que me motive a ler mais do que o título.

Já o InfoQ traz diariamente várias coisas pelas quais me interesso. Tem tanto conteúdo de qualidade que eu não consigo acompanhar a velocidade de divulgação das coisas. E isso é ótimo, pois sempre sei que encontrarei coisas boas para ler por lá. Uma coisa que eu gosto no InfoQ é que nele eu vejo muita coisa boa além de Java. Conteúdo sobre metodologias de desenvolvimento, outras linguagens, outras plataformas. Novidades que podem me agregar bastante coisa. Quase todas as vezes que sai alguma notícia “XYZ was released” no TheServerSide eu não ligo a mínima pro que tá sendo lançado. E se é algo que me interessa, eu rapidamente viria a saber do lançamento em algum outro lugar.

Uma coisa que o InfoQ e o TheServerSide têm em comum é que ambos foram fundados pelo Floyd Marinescu. O TheServerSide foi fundado no final de 99, e o InfoQ no começo de 2006. Floyd Marinescu deixou o TSS em agosto de 2005, então muito provavelmente sua saída teve significativo impacto na qualidade do site. Atualmente o TSS é o 4o site da minha lista de preferências, atrás do InfoQ, Artima e DeveloperWorks. Mas do jeito que a coisa está indo não sei se ele vai conseguir sobreviver por muito tempo.

Especialmente depois que eu comecei a escrever artigos pra Java Magazine, eu passei a reparar bastante nas formas de exposição de conteúdo técnico. Conseguir cativar um público de alto nível é muito difícil. Desenvolvedores, arquitetos e gerentes de software não têm muito tempo para desperdiçar, pois a quantidade de coisas a estudar é enorme. Para conseguir que um público assim leia o que você se propõe a escrever, você precisa escrever de forma precisa, mas também estimulante. Se você simplesmente jogar informações nos leitores, não vai conquistar o apreço deles e eles não continuarão acompanhando as suas publicações.

Uma coisa que eu tento fazer nos meus artigos é sempre mostrar a motivação por trás do que estou falando. Especialmente se for um tema polêmico ou controverso, é fundamental estimular a discussão das pessoas. Ninguém gosta de ouvir a “Voz do Brasil”, mas conheço muitas pessoas que gostam de ouvir a Band News, com a apresentação do Ricardo Boechat (eu sou uma dessas pessoas). Talvez as notícias presentes nos 2 programas sejam as mesmas. Entretanto, eu sempre me interesso pelas opiniões do Boechat, e eu nunca ouvi coisa mais enfadonha que a Voz do Brasil.

Comecei falando do InfoQ e terminarei falando sobre o mesmo. Este site é um belo exemplo de conteúdo técnico de qualidade, com temas que realmente atraem os leitores mais exigentes. O Floyd Marinescu parece uma excelente referência de como oferecer conteúdo para a nossa área.

Aos poucos venho começando a escrever meus artigos e também aqui no blog, e meu objetivo será sempre a linha do InfoQ. Conteúdo de qualidade com inteligência por trás. Quero escrever coisas que eu gostaria de ler se fosse outra pessoa escrevendo. Escrever bem é muito mais do que escrever corretamente. Espero conseguir atingir estes objetivos, e se possível ajudar a Java Magazine a ganhar cada vez mais qualidade. E é claro que sempre vou receber muito bem as críticas e opiniões de quem quiser colaborar nesta empreitada ;)


Livros

Março 31, 2008

Inspirado pelo post do Guilherme, finalmente arrumei tempo para desengavetar a página de livros que eu queria colocar aqui no blog. Já está disponível a página de livros aqui, onde coloquei uma lista de livros que já li, estou lendo ou pretendo ler. Como a lista é enorme, eu ainda não coloquei todos, mas já tem uma boa quantidade.

Progressivamente irei complementando esta lista, colocando meus comentários nela e classificando um pouco os livros para ficar melhor de ler. Comentários e dicas de livros são muito bem-vindos, então não hesitem em visitar e deixar suas opiniões aqui.


10 principais barreiras para o sucesso do desktop Linux

Março 29, 2008

Recentemente eu li um artigo muito interessante sobre as principais barreiras que dificultam o sucesso em massa do desktop Linux. Eu já uso Linux em casa desde 2003 e utilizei uma boa variedade de distribuições. Já usei distribuições baseadas em Debian, outras derivadas do Red Hat. Algumas utilizavam Gnome, outras KDE (meu preferido).

Entre as distribuições que me lembro que já usei estão (em ordem mais ou menos cronológica): Conectiva, Red Hat, Knoppix, Mandrake/Mandriva, Suse, Ubuntu/Kubuntu, Mepis e Pc LinuxOS. De uma maneira geral a minha distribuição preferida é o Kubuntu, pois faço questão do KDE e de uma maneira geral o Ubuntu/Kubuntu é a distribuição melhor suportada para a maioria das coisas que você for usar. Após esta experiência em variadas distribuições, pude conhecer o suficiente sobre Linux para saber me virar bem em qualquer versão que eu tenha que usar.

Recentemente a Globo.com migrou os desktops dos desenvolvedores para Linux. Eu já estou usando Linux no trabalho há quase 1 ano, mas as pessoas em geral receberam seus desktops novos com Linux no começo desse ano. Grande parte das pessoas ainda não havia usado Linux como desktop, conhecendo apenas algumas coisas de linha de comando pela experiência de acessar nossos servidores. Com isso, tenho tentado ajudar da melhor forma possível para que a transição deles seja suave. Eu gosto muito de Linux e quero que sua adoção cresça e que as pessoas em geral tenham uma boa experiência de uso.

Apesar de gostar bastante e utilizá-lo quase em tempo integral, não sou do tipo fanático que só vê vantagens. Há algumas coisas que incomodam razoavelmente se você não souber contorná-las, e um novo usuário freqüentemente encontra dificuldades com isso. Como este artigo que mencionei aborda de forma bem interessante estas barreiras comuns, listarei-as aqui e deixarei meus comentários.

1 - Consistência e percepção: com a enorme variedade de distribuições disponíveis, os usuários têm uma enorme liberdade de escolha. Entretanto, isso também traz a característica de que as coisas mudam muito de uma distribuição para a outra. Se você sabe como usar ou configurar alguma coisa em uma determinada distribuição, isto não garante que você conseguirá fazer a mesma coisa em outra distro. A facilidade de uso de uma distribuição para a outra varia bastante. Isto sem dúvida dificulta que um usuário experiente ajude um iniciante, caso a distribuição seja diferente. Como o Windows é uma coisa só, a interface e as configurações não mudam quase nada de um usuário pro outro. Isso facilitou muito a adoção em massa, e usuários novos conseguem rapidamente aprender com usuários experientes. Embora isto possa incomodar os puristas, eu acho que o Linux teria bem mais chances de sucesso se em vez de centenas de distribuições, tivéssemos umas 3 ou 4 no máximo, e os esforços ficassem concentrados nestas.

2 - Fraco suporte a dispositivos móveis: com pouquíssimas exceções, sincronizar dispositivos móveis no Linux é pauleira. Enquanto isto não for tão simples quanto usar um pen drive, esta barreira complicará muito o uso do Linux por usuários comuns. Eu sei que sincronizar um celular ou PDA é bem mais difícil de implementar do que acessar um pen drive, mas o usuário final não quer saber disso quando escolhe um sistema operacional para usar.

3 - Encontrar software compatíveis ao mudar de SO é difícil: é claro que existe muito mais software para Windows do que para Linux. A maioria dos softwares possui equivalentes no Linux, mas a qualidade destes substitutos varia muito. Usuário não-técnicos vão relutar muito em trocar o Office pelo Open Office. Apesar de eu conseguir usar tranqüilamente o Open Office em geral, os formatos amplamente aceitos ainda são os da Microsoft. Tentar usar o Open Office para modificar arquivos do Word ou Excel pode trazer muitas dores de cabeça, especialmente se você precisar salvar no formato Office original. Existe o Crossover Office que suporta muito bem o Office no Linux, mas ele não é gratuito e pouca gente conhece. Ainda temos muito que avançar nesta área.

4 - Problemas com wireless: é vastamente sabido que utilizar dispositivos wireless em geral no Linux é muito complicado ainda, e dependendo do seu hardware e distribuição, isto pode ser muito tranqüilo ou um pesadelo. Os procedimentos de contorno disso variam muito de uma distribuição para a outra, e um usuário comum dificilmente vai saber se virar com isso. Probleminha complicado também.

5 - Listas de compatibilidade de hardware: alguns fabricantes principais de hardware já suportam muito bem o Linux e isto vem melhorando rapidamente. Para a grande maioria dos componentes já é possível usar tudo perfeitamente no Linux, mas caso você tenha algum modelo não muito comum, pode ter problemas. Além disso, é difícil saber previamente se tudo vai funcionar antes de você tentar. Os CDs bootáveis ajudam muito nisso, permitindo que você teste previamente seu hardware antes de instalar em disco. Este problema eu acredito que muito em breve deixará de ser considerado.

6 - Necessidade de compilar novos módulos de drivers: caso você precise instalar um novo driver no Windows, basicamente você usa um instalador com Next -> Next -> Next. No Linux, você pode precisar compilar o driver, e isto é bem enjoado. Eu lembro que quando comecei a usar Linux em casa, algumas distribuições não vinham nem com módulo de USB ativo. Eu já tive que compilar e configurar módulo de USB para conseguir usar pen drives e câmeras digitais. Isto é muito chato, mas felizmente hoje em dia acontece muito pouco. Exceto em casos muito específicos você nunca precisará mais fazer isso, e acho que já podemos deixar esse problema em segundo plano.

7 - Sério interesse comercial: boa parte das empresas não-técnicas ainda não se importam muito com Linux. Com isso, ainda é freqüente termos que nos virar para conseguirmos reproduzir formatos proprietários de música, vídeo e outras coisas. As empresas em si não disponibilizam codecs pra Linux na maioria dos casos. Eles são desenvolvidos de forma open source, e em alguns casos o suporte ainda é ruim. Acho que daqui a uns 2 ou 3 anos já teremos uma parcela suficiente de usuários não-Windows para que esta postura mude. Enquanto o Windows tem mais de 90% do mercado, financeiramente não é tão fácil convencer diretorias de empresas a investir em outros sistemas operacionais. Se conseguirmos ter algo entre 15 e 20% dos usuários com Linux e Mac, a coisa já muda um pouco de figura, e o suporte melhorará.

8 - Software prontamente disponível: os usuários de Windows estão acostumados a encontrar os softwares para instalar na internet, baixar o instalador e Next -> Next -> Next. No Linux isto é diferente, como já falei previamente. As pessoas estranham inicialmente o conceito de repositórios de pacotes, mas isso na verdade facilita bastante os usuários depois que eles aprendem isso. Este problema será reduzido à medida que mais empresas comecem a adotar Linux. Usuários iniciantes serão capazes de aprender isso rapidamente com usuários experientes, e daqui a algum tempo esta diferença já deve ser vista até como um ponto forte do Linux.

9 - Workarounds vs. correções de bugs: as distribuições variam muito em termos de agilidade de uma para a outra. Algumas oferecem o que há de mais recente em termos de software para os usuários, mas isto os expõe também a mais bugs. Como estas distribuições são mais populares, rapidamente surgem formas conhecidas de contornar os problemas, antes de saírem as correções dos bugs. Outras distribuições (como Debian e Slackware) colocam apenas versões altamente testadas e maduras em seus lançamentos. Os usuários ficam com software defasado, mas muito mais estável. Devido a este fato, algumas distribuições são muito mais usadas em desktops, e outras muito mais comuns em servidores. O kernel do linux e seus princiais módulos são muito, muito estáveis e confiáveis. Já os software gráficos e de uso por usuários finais têm qualidade bem inferior. Temos aplicações de alta qualidade (como as que fazem parte das suites do KDE e Gnome), mas também temos softwares cheios de bugs que podem prejudicar a usabilidade. Ao longo do tempo a qualidade vai melhorando, e para a maioria dos softwares usados por pessoas comuns os bugs são poucos.

10 - Evangelistas e puristas: algumas pessoas têm uma visão pragmática e realista quanto ao Linux, e enxergam claramente suas qualidades, mas também as falhas. Outras simplesmente acham que é a melhor coisa do mundo para todos, sem analisar as dificuldades que pessoas comuns enfrentam. Precisamos ter uma postura madura em relação a software. Não podemos “nos apaixonar cegamente” por nada. Se enxergamos os pontos onde o Linux precisa melhorar e discutirmos eles abertamente, será muito mais fácil progredir. Entrar em flame wars de Linux x Windows é perda de tempo e energia. Cada um tem suas vantagens, e as pessoas podem ter opiniões e gostos diferentes. É ótimo que existam os 2, pois a concorrência ajuda a elevar o nível geral dos sistemas.

Torço muito para que o Linux continue evoluindo bastante e que em breve tenhamos cada vez mais facilidade para usá-lo. Posso dizer que desde 2003 quando comecei a usar, ele já melhorou e muito. Não dá nem pra comparar a situação atual com a de 2003. Estamos num patamar muito superior.

O mesmo eu não posso dizer do Windows. Em 2003 o Windows XP já estava amplamente disponível e as pessoas já o conheciam bem. Eu gosto bastante do Windows XP, ele é um ótimo sistema operacional. Já a sua “evolução”, o Windows Vista, pra mim é uma porcaria. Eu não consigo usá-lo. É muito mais pesado que o Windows XP e não me trouxe nenhuma vantagem. Eu já instalei ele em casa e ele veio no meu notebook, mas eu já voltei para o Windows XP em todas as máquinas que tiveram o Vista. Por mim eu simplesmente pulo a atualização pro Vista e espero por uma nova versão do Windows que venha depois. Muita gente compartilha desta opinião, então a Microsoft precisa trabalhar bastante.

Com o crescimento da adoção de open source, acho que aos poucos o Windows terá seu domínio reduzido, embora ainda deva continuar dominando por muitos anos. Acho que o Linux está bem encaminhado e evoluindo bastante na comparação com o Windows. Vamos torcer para que ambos evoluam bastante ao longo do tempo, pois assim todos nós ganhamos. E chega de flame wars, por favor :)


IBM investe US$ 10 mi no Postgresql. Mais consolidações à vista?

Março 27, 2008

Essa semana fiquei sabendo pelo blog do Savio Rodrigues que a IBM investiu US$ 10 milhões no EnterpriseDB, uma derivação comercial do Postgresql, mas cujos desenvolvedores atuam no desenvolvimento do produto open source também.

Com isso, até o momento o EnterpriseDB já recebeu no total US$ 37,5 mi, o que é bem próximo dos US$ 39 mi que o MySql havia recebido antes de ser comprado pela Sun. Torço para que isso ajude bastante no desenvolvimento do banco de dados e que eles consigam trazer ainda mais qualidade aos seus produtos. O Postgresql é um banco open source muito maduro e confiável já há muitos anos e o EnterpriseDB adiciona recursos interessantes para grandes empresas. Entre as principais forças do EnterpriseDB está a sua garantia de compatibilidade com código feito para o Oracle. Eles garantem por contrato que a sintaxe SQL, tipos de dados, packages, stored procedures, trigger e views desenvolvidas para o Oracle irão funcionar conforme esperado no EnterpriseDB. Isto sem dúvida é um facilitador para empresas que possuam grandes bases Oracle e queiram progressivamente migrar seus bancos de dados.

Eu usei pela primeira vez o Postgresql no começo de 2003, e sempre o considerei melhor que o Mysql. A principal razão pela qual o Postgres perdeu espaço para o MySql foi o fato de que o Postgres não tinha um instalador nativo para Windows antes da versão 8.0, que saiu em janeiro de 2005. O MySql tinha muito menos funcionalidades e confiabilidade, mas como era fácil utilizá-lo no Windows, sua adoção aumentou rapidamente.

Eu ainda considero o Postgres melhor do que o MySql e ele é o meu banco de dados preferido quando eu tenho a liberdade de escolher. Espero que eles continuem desenvolvendo bastante o produto e recebam mais investimentos. Eles merecem um ótimo lugar no mercado de bancos de dados, e torço para que eles consigam tanto ou mais sucesso que o MySql.

Aproveitando esta discussão, algo que me veio à cabeça diz respeito à consolidação das pilhas de produtos no mercado. Será que faria sentido que a Red Hat comprasse o EnterpriseDB e a Oracle comprasse uma distribuição Linux?

A Sun atualmente possui a pilha completa, indo do sistema operacional até o middleware Java, e inclui um banco de dados (MySql). A IBM não vende mais sistemas operacionais próprios (até onde sei), mas suporta bastante o Linux e tem seu banco de dados e o middleware Java EE.

A Oracle tem tudo menos o sistema operacional, especialmente depois da compra da BEA. A Red Hat tem tudo menos o banco de dados. Ambas fizeram compras significativas no passado. Será que veremos as 2 empresas completando sua pilha de produtos em breve?

Isto é algo que eu gostaria de saber, e seria bem interessante ver como o mercado se comportaria depois de tais movimentos.


PJ x CLT

Março 25, 2008

Há quase 2 anos eu trabalho como pessoa jurídica. Com uma boa freqüência as pessoas me perguntam como funciona isso, quais são as diferenças principais em relação ao regime CLT, qual a carga tributária para PJs, etc.

No sentido de ajudar a esclarecer estas dúvidas, resolvi escrever este post, para facilitar as consultas dos interessados e me poupar várias repetições da mesma coisa :)

Pois bem, para trabalhar como pessoa jurídica você precisa abrir uma empresa como sociedade limitada (pelo menos este é o caso mais comum para quem trabalha com informática) . A empresa terá pelo menos dois sócios, no meu caso o meu sócio é o meu irmão. Mensalmente você emitirá notas fiscais para a empresa que te contratar, e receberá seu salário em uma conta de pessoa jurídica.

Sobre o valor da nota fiscal incidem os seguintes impostos:

  • ISS: 5% (valor do Rio de Janeiro, varia de uma cidade para a outra. 5% é o teto, e é o valor cobrado na maioria das capitais)
  • PIS: 0,65%
  • COFINS: 3%
  • IRPJ: 2,4%
  • Contribuição Social: 2,88%

Além destes impostos sobre o valor da NF, existem 2 despesas fixas: INSS e Contabilidade. Atualmente meu INSS é de R$ 117,80 mensais, e a contabilidade me cobra 1/2 salário mínimo por mês. Na verdade a LAFS (empresa que me presta serviços de contabilidade) cobra 13 parcelas anuais de 1/2 salário mínimo, então diluindo ao longo do ano dá aproximadamente R$ 210 de contabilidade. O total de encargos mensais então dá cerca de 14% + R$ 340.

A contratação CLT possui a tributação completamente diferente, e custa mais caro para o empregador. Enquanto um funcionário que seja PJ custa pouca coisa além do valor da NF, um funcionário CLT custa aproximadamente o dobro do que recebe. Na prática isto quer dizer que um funcionário CLT que ganhe R$ 5000 irá custar para a empresa cerca de R$ 10000. O salário líquido deste funcionário será algo em torno de R$ 4000. Com os mesmos custos, esta empresa poderia dar ao funcionário PJ um salário por volta de R$ 9500, o que daria um salário líquido em torno de R$ 7700. Nada mal, não é?

É claro que as coisas não são tão simples assim. Há vários fatores a serem considerados. Para fazer uma boa comparação das 2 formas de contratação, você tem que transformar em dinheiro todos os benefícios que lhe forem oferecidos como CLT. Transforme em dinheiro o seu ticket refeição, FGTS, plano de saúde, ticket alimentação, auxílios diversos, etc. Além disso, como os PJs não têm 13o e nem todos têm férias, dilua ao longo do ano o seu 13o e férias, e considere que você está ganhando eles ao longo do ano.

Só de mencionar estas contas a serem feitas já fica claro que a decisão entre uma ou outra forma de contratação depende muito da sua situação específica, e do seu momento na vida. Atualmente ainda não sou casado e nem tenho dependentes, então o plano de saúde que eu poderia ganhar como benefício seria só para mim, e equivalente a cerca de R$ 250 por mês. Se eu fosse casado e tivesse 1 filho, esse valor subiria para uns R$ 600 provavelmente. Como não tenho dependentes, preciso menos de estabilidade, e posso me dar ao luxo de correr mais riscos na carreira. Provavelmente minha postura com relação a estas coisas mudará à medida que eu vá envelhecendo, mas neste momento caso eu possa escolher, prefiro atuar como pessoa jurídica, caso as propostas tenham custos semelhantes para a empresa contratante.

Espero ter conseguido explicar de forma clara as principais características das 2 formas de contratação. A contratação como pessoa jurídica é uma forma que existe de trabalhar sofrendo uma incidência menor de impostos, mas também com menos garantias. Como nosso país tributa de forma abusiva os trabalhadores, e depois vemos os políticos fazerem orgias com nosso dinheiro, eu não tenho absolutamente nenhum problema na consciência trabalhando desta forma. Acho perfeitamente justo, e gostaria que tanto os PJs como os CLTs pagassem drasticamente menos impostos, ou pelo menos tivessem serviços decentes oferecidos pelo governo. Enquanto continuarmos trabalhando mais de 40% do ano só pra pagar impostos, vou tentar escolher as melhores formas lícitas de pagar menos impostos, pois eu valorizo muito o meu esforço para dar meu dinheiro suado de mão beijada para a corrupção que domina nosso país, estado, cidade…


Antes de partir

Março 24, 2008

Já há algumas semanas eu queria ver este filme, e hoje finalmente fui. O filme conta com dois dos meus atores preferidos (Jack Nicholson e Morgan Freeman) e superou as minhas expectativas.

Já há algum tempo eu tenho evitado um pouco os filmes pipoca e procurado filmes mais substanciosos. Isto tem a ver com o gosto da minha namorada também, que não gosta de filmes cheios de efeitos especiais, explosões, guerras, essas coisas. Eu gosto de filmes pipoca também, mas de uma maneira geral, tenho me divertido mais com filmes na linha de “Antes de partir”.

Filmes pipoca podem ser muito divertidos, mas basicamente você se distrai durante o filme e depois já está pensando em outras coisas. Claro que alguns filmes desse gênero são sensacionais e marcam bastante, mas não são a maioria. Já os filmes com menos efeitos especiais tentam te cativar de uma forma diferente. Alguns conseguem te fazer pensar sobre várias coisas, possivelmente têm um impacto até sobre a sua forma de ver algumas coisas.

“Antes de partir” fala de dois coroas completamente diferentes um do outro que acabam dividindo um quarto de hospital quando estavam em tratamento de câncer. Ambos recebem dos médicos a notícia de que teriam apenas cerca de 6 meses de vida, e então tomam uma decisão interessante. Saem pelo mundo fazendo diversas coisas das quais tinham vontade e tentam aproveitar da melhor forma possível seu final de vida.

O filme é muito bonito e me fez pensar sobre várias coisas. Já há algum tempo tenho percebido que deixei de fazer coisas que eu fazia sempre anteriormente. Esse mês encontrei o pessoal da faculdade pra jogar sinuca no aniversário do Rodolfo, o que lamentavelmente temos feito pouco. Sinto uma baita saudade dessa turma. Também sinto muita falta do pessoal do colégio. É uma pena que a vida acabe nos tirando o tempo que gostaríamos de ter com tantas pessoas queridas. Acabo só conseguindo vê-los poucas vezes ao ano. Durante vários anos da minha vida joguei vôlei diariamente, e passava os verões inteiros jogando na praia e aproveitando as férias com meus amigos.

Atualmente vivemos uma vida muito corrida. Para termos sucesso e conquistarmos um bom padrão de vida e conforto para a família temos que nos privar de muitas coisas que antigamente podíamos fazer com freqüência. Eu gosto muito do que faço e tenho um enorme prazer em estudar continuamente, tentar evoluir, aprender mais e me tornar um profissional melhor. Talvez seja por isso que às vezes me percebo dentro de um turbilhão de acontecimentos, e vejo as coisas passando tão rápido. As exigências sobre nós crescem continuamente, e especialmente em uma cidade problemática como o Rio de Janeiro, temos que fazer um tremendo esforço para conquistar um pouco mais de conforto.

Este filme me fez refletir sobre várias coisas da minha vida, e trouxe muita saudade de diversas épocas boas da minha vida. Ver a forma que os dois doentes encararam a doença também foi algo interessante. A alegria que eles demonstraram ao aproveitar uns poucos momentos depois de uma vida com tamanha dedicação ao trabalho me fez pensar bastante também. Às vezes vemos a vida passar tão rápido, nos privamos de tantas coisas, e será que fazemos sempre as escolhas certas? Não sei, mas vou refletir mais sobre isso também.

Para finalizar, recomendo a todos que ainda não tenham visto este filme que o façam em breve. Muito muito bom. E ao meu querido avô que perdi há quase 2 anos com a mesma doença, digo-lhe que pensei muito em você também. Quanta saudade!


E eu achava que era bom pra fazer contas de cabeça…

Março 24, 2008

Eu sempre fui considerado bom de contas. Meu pai me estimulou quando eu estava ainda sendo alfabetizado, e eu aprendi a tabuada antes de todos os meus colegas de classe. Não errava uma, e eu gostava de fazer contas complicadas de cabeça.

À medida que fui crescendo minha afeição por contas continuou, e eu fazia bem rapidamente contas de raiz quadrada e exponenciais simples, com uma boa precisão. Uma vez tomando um chopp na faculdade com meus amigos e uns professores (o Mauros e o Gerson, que dupla aquela), o Mauros me falou que essa facilidade para contas é muito boa, pois ajuda a manter a acuidade do raciocínio e isso provavelmente me livraria de qualquer chance de ter Mal de Alzheimer quando ficasse mais velho. Eu nunca parei pra verificar se isso é verdade, mas quem me falou merece muito crédito :)

Pois bem, depois desse tempo todo, esse fim de semana eu vi um vídeo que o Bairos me mandou, que me fez questionar a minha dita “facilidade para fazer contas” :) O vídeo em questão saiu no Ted.com, um site com umas palestras muito legais. O vídeo em questão pode ser visto aqui. O palestrante se define - com toda justiça, devo dizer - como “mathemagician”. O cara pede pra platéia números de até 5 algarismos e calcula o valor destes números ao quadrado, com uma velocidade absurda. Eu sou capaz de fazer rapidamente estas contas até 2 algarismos. Com 3 algarismos eu até consigo fazer, demorando um pouquinho. 4 algarismos em diante, no way :) Esse cara é muito sinistro, ele deve ter um processador multi-core com cache enorme, porque o que ele fez me deixou completamente pasmo.

Coisas assim são legais para vermos o quanto a mente humana é capaz de nos surpreender. E claro, para lembrarmos que humildade nunca faz mal a ninguém, pois não faltam exemplos de gênios que primavam pela absoluta simplicidade e nos deixaram legados fabulosos.


Bancos de dados já são commodities?

Março 17, 2008

Nos últimos meses trabalhei em uma boa diversidade de projetos, no trabalho, em projetos pessoais e artigos. Sem motivo nenhum especial, lidei nestes projetos com uma boa variedade de servidores de bancos de dados.

A maioria das coisas que faço no trabalho envolvem o Oracle, mas nos projetos pessoais utilizei o SQL Server, Postgresql, MySql e o Derby. 5 produtos diferentes, cada um com suas particularidades. Este convívio com diferentes bancos de dados me permitiu uma boa análise do momento em que já estamos em relação ao uso dos mesmos.

Na prática, basicamente o que mudava para mim de um BD para o outro era saber qual ferramenta de administração que eu deveria utilizar e qual driver jdbc precisaria baixar. Nos casos em que a camada de persistência era com jdbc diretamente (em vez de mapeamento objeto-relacional), eu precisava também prestar um pouco de atenção com pequenas diferenças na sintaxe SQL de cada um.

Algo que me chamou a atenção quando parei para pensar sobre isso foi que para a maioria dos projetos, qualquer servidor de banco de dados que eu utilizasse me atenderia sem problemas. Em termos de funcionalidades, o que eu preciso em um banco de dados não é nada sofisticado. Eu gosto de tratar do SGBD como um repositório confiável e eficiente para persistência de dados. Prefiro deixar toda a inteligência da aplicação fora do BD. O que eu espero de um bom servidor de BD é que ele mantenha os dados íntegros, ofereça recursos de restrições de integridade, índices, sub-queries e mais algumas funcionalidades nada extraordinárias.

Como falei, não gosto de colocar inteligência no banco de dados, então descarto o uso de stored procedures, triggers e coisas do gênero sempre que possível. A maioria dos SGBDs atuais suporta todos estes recursos que mencionei. Para a maioria das aplicações que desenvolvemos, o Oracle, Sql Server, DB2, Postgres ou MySql sem dúvida servem tranqüilamente. O conjunto de aplicações que tem acessos suficientes para derrubar qualquer um destes servidores é muito pequeno. Se na maioria dos casos qualquer SGBD serve, será que já podemos considerar os bancos de dados como commodities?

É claro que existem aplicações nas quais as exigências sobre o banco de dados são muito críticas. Alguns sistemas usam intensamente o servidor de banco de dados e possuem tabelas com milhões de registros que precisam de uma indexação muito eficiente. Embora talvez seja possível usar perfeitamente o Postgres e o MySql nestes casos, eu tomaria uma postura mais conservadora e só adotaria um dos 2 após diversos testes de carga sobre a aplicação usando eles.

Da mesma forma que existem aplicações que precisam de um servidor de banco de dados extremamente robusto, existem aplicações nas quais a praticidade de uso é o requisito mais importante. Temos por exemplo casos em que utilizar o Derby ou HSQLDB no modo embedded podem ser muito convenientes. É claro que o Derby e o HSQLDB não agüentam a mesma carga que os outros servidores mencionados. Todavia, a capacidade de empacotar o banco de dados dentro da sua aplicação pode ser muito conveniente, e nestes casos o Derby e o HSQLDB não poderiam ser substituídos por nenhum outro desta lista.

Nos casos em que os requisitos de banco de dados não são convencionais, algumas opções podem se mostrar muito mais adequadas do que outras. Entretanto, na maioria das aplicações, a troca de um produto pelo outro não fará muita diferença. Os recursos que realmente precisamos a maior parte do tempo estão disponíveis na maioria dos produtos.

A forte competição imposta pelos BDs open source fez com que os SGBDs comerciais passassem a oferecer versões gratuitas de seus produtos, com algumas limitações de uso. Para enfrentar este novo desafio, o Postgresql e o Mysql foram investindo cada vez mais esforço em seus produtos e hoje já têm uma ampla gama de recursos que antigamente só víamos em produtos comerciais. Com esta evolução do mercado, temos um largo leque de opções para escolher e estimo que em 90% dos casos, qualquer uma das opções atenderá plenamente.

Na minha opinião, isto já é suficiente para classificar os bancos de dados como commodities, na maioria dos casos. Já podemos ir na farmácia e pedir pelo genérico ;)


mod_rewrite

Março 11, 2008

Hoje assisti a um Tech Talk bem interessante na Globo, sobre mod_rewrite. Além de funcionalidades interessantes deste módulo do Apache, as discussões na apresentação me trouxeram vários questionamentos de como incluir de forma mais ativa o Apache em uma arquitetura RESTFul.

Eu já utilizei bastante o Apache na remota época em que eu desenvolvia algumas coisas em Php. Na verdade não fazia nada de muito sofisticado, mas tinha boa familiaridade com os módulos, com a configuração, essas coisas. Depois que foquei mais no uso de servidores de aplicação Java, deixei o Apache em segundo plano. Praticamente só vinha usando o Apache para servir conteúdo estático, e claro, nele também ficam configurados os conectores para comunicação com os servidores de aplicação.

Como tenho trabalhado bastante com web services REST, venho tentando explorar ao máximo os recursos do HTTP para elaborar protocolos de comunicação concisos e intuitivos. Neste sentido, o Apache oferece recursos muito interessantes. Por exemplo, quando utilizamos URIs no formato /usuario/123456/item/25 para representar um determinado item de um determinado usuário, a resposta a esta requisição é cacheável pelo Apache. Entretanto, ao utilizar URIs neste formato você precisa definir uma forma de fazer o parsing da URI para pegar os parâmetros relevantes.

No meu artigo de REST da Java Magazine de Abril eu usei o StringTokenizer do JDK para fazer a quebra da URI e pegar os valores que me interessavam. A JSR-311 define uma forma bem interessante de fazer isso com annotations também. E hoje fui descobrir que o mod_rewrite também pode fazer facilmente a quebra de URIs neste formato em URIs com parâmetros em query string por exemplo.

Uma utilização inteligente do cache do servidor web e de módulos de proxy também pode tornar a arquitetura da aplicação bem eficiente e reduzir bastante a carga sobre os servidores de aplicação. Se eu posso utilizar diretamente o cache do Apache para várias URIs, não vale a pena deixar as requisições chegarem ao container de servlets, mesmo que ele responda também com dados em cache.

Vendo o poder e a facilidade de uso de alguns módulos do Apache, me sinto obrigado a ter total familiaridade com ele novamente. Aos poucos irei estudando e integrando os módulos do Apache à arquitetura das minhas aplicações REST, pois isto pode trazer um belo ganho de performance e escalabilidade. Afinal de contas, quem quer explorar a fundo os recursos do HTTP não pode abrir mão de explorar a fundo um servidor tão confiável e maduro como o Apache, não é mesmo?

OBS: uns anos atrás eu dizia pra mim mesmo que o dia que eu conhecesse pelo menos vagamente metade dos projetos na home da Apache Software Foundation eu já teria uma boa bagagem. Hoje em dia já conheço mais da metade do projetos da home, e admiro cada vez mais esta fundação. O mundo open source não chegaria aos pés do que é hoje sem a existência da ASF. Um belo exemplo de qualidade em software!


Java Magazine 55

Março 8, 2008

Java Magazine 55 - Março de 2008

Caros amigos, nos próximos dias chega às bancas a edição 55 da Java Magazine. Nesta edição sai um artigo meu entitulado “Web services WS-*“.

Este artigo é uma continuação do artigo da edição 54, na qual fiz uma análise dos web services REST e web services WS-*. Na edição 54, o foco era mais teórico, discutindo várias questões relevantes da implementação de web services nas 2 linhas de desenvolvimento.

Neste artigo, o objetivo é partir de um problema real de arquitetura orientada a serviços, e então realizar a modelagem e implementação utilizando a pilha WS-*. O exemplo adotado para contextualizar o problema é o processo de leilão do Mercado Livre, mas num contexto de leilão com apenas 1 usuário adquirindo um determinado item. O desenvolvimento foi feito utilizando o Apache Axis 2, uma das opções mais populares para o desenvolvimento deste nicho em Java.

Na edição 56, esta série será complementada com outro artigo prático, que utiliza a abordagem REST para resolver o mesmo problema proposto para esta edição. O objetivo com estes 2 artigos práticos é utilizar um mesmo exemplo que seja de fácil visualização por parte dos leitores e então descrever os detalhes principais do desenvolvimento de web services utilizando a abordagem WS-* e a abordagem REST.

Espero que os leitores gostem destes artigos e torço para que eles possam contribuir com o entendimento do desenvolvimento de web services, e mais especificamente, a implementação em Java. Ao longo do ano escreverei mais artigos nesta área, então se você tiver interesse no assunto, certamente recomendo acompanhar as edições futuras da revista :)