10 anos de Ruby on Rails e minha história com ele

As vésperas de participar da minha primeira RubyConf, resolvi tirar as teias de aranha desse blog e dar sinal de vida.

Lendo a retrospectiva dos 10 anos de Ruby on Rails no blog do Akita, resolvi consultar quando foi a primeira vez que comentei sobre esse assunto por aqui e onde esse momento se encaixava na linha do tempo apresentada por ele.

Para minha surpresa, a primeira vez que falei dele aqui foi há quase 9 anos, quando Rails ainda estava bem na sua infância e nem a versão 1.0 tinha sido lançada. Bem antes até do próprio Akita, que hoje é um dos grandes nomes do Rails no Brasil, ter iniciado seu blog.

Na época eu estava animado em usar Rails em um novo projeto que estava começando. Passaram-se 9 anos e o tal projeto que eu ia desenvolver em Rails, acabou não precisando ser feito em web e usei Delphi, pois era a ferramenta que eu mais dominava na época. O “projetinho” virou um produto, que depois virou uma nova empresa, e hoje está com 25 funcionários e mais de 1100 clientes ativos em todo o Brasil.

Com Rails mesmo, apesar de ter sempre acompanhado sua trajetória, só colocamos algo em produção neste ano, mas a tendência é usá-lo em tudo o que fizer sentido daqui pra frente. Algo que me arrependo de não ter feito 9 anos atrás.

Nos vemos na RubyConf amanhã!

Windows NT faz 20 anos

Windows NT faz 20 anos!

Este artigo me fez lembrar quando tive acesso a primeira versão do Windows NT, em disquetes de 3 1/2 polegadas. Lembro de ter instalado no meu super 486 com 16 MEGA de RAM, o que na época era uma máquina topo de linha.

Pior de tudo? Praticamente nada funcionava, pois não existiam drivers de 32-bits, tive que voltar ao DOS/Windows 3.11, até a chegada do Windows 95.

 

Economize muito espaço em disco com JPEGmini

Meu computador pessoal é um MacBook Air 11″ com 256GB de SSD. Nele armazeno todas as minhas fotos e videos que gravei nos últimos 15 anos.

Para gerenciar pouco mais de 14000 itens entre fotos e videos, uso o Aperture da Apple. O único problema é que estes itens já estavam ocupando mais de 100GB, ou seja, quase 50% do disco. E vocês sabem que espaço em SSD vale ouro.

Recentemente tomei conhecimento do JPEGmini, um aplicativo milagroso que prometia reduzir o tamanho das suas fotos em quase 5x sem perder a qualidade. Imediatamente achei que fosse conversa fiada, mas continuei lendo o artigo, pois foi escrito por um cara que parece realmente entender do que está falando.

O que realmente me impressionou foi quando vi que ele usou filtros do Photoshop para comparar as diferenças entre uma imagem original e uma bem menor processada pelo JPEGmini e o resultado foi que as diferença eram praticamente inexistentes. Não tive dúvidas que deveria testar em minhas fotos.

Baixei a versão para Mac na App Store e fiz alguns testes. Fiquei muito satisfeito e decidi rodar em todos os meus arquivos.

Antes de rodar, fiz um levantamento na minha biblioteca do Aperture e percebi que dos 100GB, 50GB eram de video, 35GB eram fotos e o resto eram previews e outros arquivos de controle que o Aperture cria.

Selecionei todas as minhas fotos e mandei o JPEGmini fazer sua mágica. Cerca de 1 dia depois, o resultado foi uma economia de 25 GIGAS! Isso mesmo, uma redução de 70% (SETENTA PORCENTO) no tamanho das minhas fotos, sem perder qualidade. De 35GB de fotos, fiquei com pouco mais de 10GB!

Ainda tenho um backup das fotos em tamanho original, mas duvido muito que eu vá usar. Já comparei várias vezes e não consigo notar nenhuma diferença de qualidade, então não vejo muito o que temer. Simplesmente fantástico! E valeu cada centavo dos US$19,99.

Por enquanto só tem versão para Mac, mas a versão Windows está chegando.

E se você trabalha pesadamente com imagens, eles tem a versão server.

O que eu realmente espero é que essa tecnologia de compressão chegue logo as cameras, celulares e todos os dispositivos que manipulam fotos.

Update: Claro que eu sei que não existe mágica. O que o JPEGmini faz é recomprimir suas fotos usando uma compressão muito superior mas sem quebrar a compatibilidade com o formato JPEG, e essa última parte que é o fantástico dele. Pois tecnologias de compressão melhores surgem com certa frequência até, mas na prática acabam sendo inviáveis pois tornam os arquivos incompatíveis com a maioria dos aplicativos que só conhecem os formatos “padrões” de mercado.

Magic Trackpad

Desde que comecei a usar um MacBook em 2009, uma das coisas que mais gosto é o fantástico trackpad em conjunto com os gestos suportados pelo OS X. A praticidade para se rolar a tela, navegar para frente e para trás em páginas, mudar de aplicativos, girar imagens e documentos, tudo feito com gestos no trackpad é algo que você não sabia que precisava, mas muito difícil de ficar sem depois que se acostuma.

O único problema é que quando eu queria trabalhar com um teclado e monitor externo, acabava tendo que abrir mão do trackpad e indo para um mouse.

Uma das soluções oferecidas pela Apple é o Magic Mouse, que também suporta gestos multitoque. Testei esse mouse algumas vezes nas lojas mas nunca achei muito fácil fazer os gestos nele.

Felizmente a Apple nos oferece uma segunda solução, que na minha opinião é muito superior: o Magic Trackpad. Mesmo sem nunca ter testado, resolvi arriscar e comprei.

Cheguei em casa, tirei da embalagem, pareei com o Mac por Bluetooth e foi satisfação à primeira usada. Ele funciona de forma perfeitamente idêntica ao trackpad do MacBook. Todos os gestos são feitos com muita facilidade. Só o posicionamento dele que é um pouco diferente, pois ele fica ao lado do teclado e não na frente, mas isso é algo que se acostuma rapidamente.

Enfim, para quem gosta muito do trackpad do MacBook, recomendo muito o Magic Trackpad, acho difícil não gostar. Valeu a pena os salgados R$269.

E com ele adiciono mais um hardware Apple aos meus equipamentos. É impressionante como a Apple vai te dominando aos poucos.

Minha opinião sobre a compra do AnyDAC pela Embarcadero

No início a Borland criou a BDE. Apostamos nela, desenvolvemos nosso sistemas com ela e tudo estava caminhando.

Em determinado momento, decidiram que a BDE não servia mais, então simplesmente criaram outro framework preferido para acesso a dados no Delphi, o dbExpress, que era “uma nova visão” e resolvia todos os problemas anteriores.

Concordo que o dbExpress sempre foi simples e vinha evoluindo em passos de tartaruga, mas funciona de forma aceitável. Sempre usei com drivers de terceiros, pois os da Borland/Embarcadero são sofríveis. E se os drivers de terceiros funcionavam bem, fica claro uma questão de relaxo com os drivers nativos.

Além de ele servir para acesso aos bancos de dados, o dbExpress também foi estranhamente utilizado como base para todo o novo framework de comunicação DataSnap, e isso o tornou uma parte ainda mais importante no Delphi.

De repente, do nada, a Embarcadero anuncia, estrondosamente, que comprou um pacote de componentes de acesso a dados. Componente este que tem exatamente a mesma função do dbExpress. E agora? Qual mensagem isso passa para nós?

Marco Cantu, o novo responsável pelo Delphi, postou em seu blog que essa novidade é uma excelente notícia para os desenvolvedores Delphi, e que o dbExpress nunca chegou a ser o que deveria, etc.

Infelizmente pra mim é o seguinte: É mais barato para a Embarcadero comprar algo pronto que funciona do que melhorar o dbExpress. Deixando o custo de migração de um framework para outro para os clientes. Lógico que eles vão esconder isso com a desculpa de que estão oferecendo algo muito melhor do que antes. Mas e o custo de migrar? E o tempo investigo no dbExpress? O tempo que nós perdemos migrando de um framework para outro é tempo não investido em entregar valor para nossos clientes. Isso não é proteger nosso investimento como eles tanto gostam de dizer.

Talvez vocês achem que isso não é um problema pois o dbExpress certamente vai continuar por aí, assim como a BDE está. Mas duvido muito que teremos mais melhorias nele, com muita sorte talvez resolvam bugs mais graves, mas certamente tentarão forçar a migração para o AnyDAC, que é o novo preferido.

Junto com o AnyDAC, parece que contrataram o único desenvolvedor responsável pelo produto, para continuar evoluindo ele. Ok, mas e quando esse cara sair? O que vai acontecer? Porque mais cedo ou mais tarde isso pode acontecer. Será que vão investir para continuarem evoluindo o produto ou vão deixar ele parado até acharem outro para comprar, enquanto nós ficamos com o abacaxi de migrar nossos sistemas?

O que dizem é que depois que o Steve Shaughnessy deixou a Embarcadero, o dbExpress ficou sem rumo, pois ele era o cara que direcionava o desenvolvimento desta área. Quem nos garante que o mesmo não vai acontecer com o AnyDAC daqui alguns anos?

Mas o que me deixa mais inseguro com tudo isso, é que ninguém garante que este tipo de atitude não vai acontecer em outras áreas do Delphi. E se amanhã eles decidem que o DataSnap não é mais legal e compram um outro pacote de componentes “melhor”? Tudo o que investimos de tempo no DataSnap vai praticamente para o ralo.

E isso também nos leva a outro questionamento: será que realmente não era possível evoluir a VCL para multi-plataforma? Ou era difícil e caro demais? Mais fácil comprar algo pronto (FireMonkey), mesmo que capenga e ir melhorando conforme os clientes tentassem usar e começassem a reclamar porque nada funcionava?

E que fique claro que eu não sou contra evolução, mesmo que se precise quebrar uma coisa aqui ou ali, mas com uma boa razão, acho perfeitamente justificável. Mas trocar por completo o framework acho pura falta de comprometimento com os clientes.

UPDATE: O AnyDAC foi lançado pela Embarcadero com o nome FireDAC.

9 anos de blog

E no último dia 13 meu blog completou 9 anos de existência. Não é pouca coisa não. É uma pena que ele há muito tempo deixou de receber atenção.

E para comemorar o aniversário, estou pensando em migrar ele para o AWS, usando Elastic Beanstalk e RDS. Alguém ai já está rodando algo nestes serviços? Ambos ainda parecem marcados como “beta”.

Se eu chegar a migrar, aviso vocês.

Resolvendo por inércia

É engraçado como algumas situações se resolvem por inércia. Segue pequena história para tirar a poeira do blog.

No dia 15/08 ficou disponível o Windows 8 para assinantes MSDN e TechNet. Verifiquei que eu não tinha nenhuma assinatura ativa, tanto minha MSDN e TechNet estavam expiradas. Decidi renovar a TechNet, por ser um terço do preço da MSDN.

Segui todos os passos para renovação, informei cartão de crédito e tudo. Recebi confirmação por e-mail que minha renovação estava sendo processada e que eu deveria aguardar. Dois dias depois recebi outro e-mail dizendo que minha compra estava pendente, e eu precisava enviar cópia dos documentos da empresa (CNPJ e IE) para um fax nos EUA. Se eu não mandasse em 30 dias, a compra seria cancelada.

Como não era nada muito urgente, deixei na lista de coisas a fazer antes de 30 dias. Para minha surpresa (e satisfação), ontem, após 4 dias do e-mail solicitando os documentos, recebi confirmação da compra realizada com sucesso, incluindo nota fiscal e os dados para acesso aos benefícios da assinatura. Sem eu enviar nenhum documento ou qualquer outra ação da minha parte, ou seja, resolvido por inércia total.

Moral da história: se algo não é urgente, deixe passar alguns dias, a coisa pode se “auto-resolver a si mesmo”. ;)

TPodcast 9 – Podcast.Free;

No último episódio do TPodcast, explicamos porque decidimos encerrar o podcast mas também discutimos vários assuntos que já estavam na lista.

Clique aqui para ouvir.

  • Veja aqui como assinar no iTunes e outros aplicativos.
  • Versão zip, disponível aqui.

TPodcast 8 – Vivendo nas Nuvens

Neste episódio conversamos sobre vários assuntos relacionados a nuvem. Amazon Web Services, que foi lançado este mês no Brasil, Windows Azure, Google App Engine, iTune Store, iTunes Match, além de eventos que participamos e dos comentários gerados no último episódio.

Clique aqui para ouvir.

  • Veja aqui como assinar no iTunes e outros aplicativos.
  • Versão zip, disponível aqui.

E como sempre, aguardamos comentários e sugestões para os novos episódios!

TPodcast 7 – Entrevista com Presidente da Embarcadero do Brasil

Neste episódio recebemos José Eugênio Braga, presidente da Embarcadero do Brasil, e Kelver Merlotti, gerente de treinamento, onde discutimos os 10 tópicos mais votados pelos ouvintes e outros assuntos relacionados:

  • Preço da ferramenta
  • Burocracia para compra
  • Versão gratuita
  • Parcerias com instituições de ensino
  • Treinamentos oficiais e centros de treinamento
  • Apoio a projetos open source
  • Futuro da VCL
  • Quantidade de desenvolvedores Delphi no Brasil e no mundo
  • Pirataria
  • Grupo Delphi Certificação
  • Portal da Embarcadero do Brasil

Clique aqui para ouvir.

  • Veja aqui como assinar no iTunes e outros aplicativos.
  • Versão zip, disponível aqui.

E como sempre, aguardamos comentários e sugestões para os novos episódios!

Presidente da Embarcadero do Brasil no TPodcast

Inicialmente a idéia era ter o Kelver Merlotti, gerente de treinamento da Embarcadero, como convidado para o TPodcast, mas depois de tantas perguntas não relacionadas a treinamento, o presidente da Embarcadero, José Eugênio Braga, se interessou em participar, para poder responder de forma mais abrangente as questões dos desenvolvedores brasileiros.

A gravação que estava agendada para ontem, foi adiada para 05/12. Portanto, continuem contribuindo com as perguntas no Google Moderator. Vamos selecionar as mais votadas até 30/11 para poder enviar a eles com antecedência.

Acho que é uma boa oportunidade de ouvir os planos da Embarcadero no Brasil, fazer reclamações, dar feedback, elogiar, etc. Participem!

Kelver Merlotti da Embarcadero no próximo TPodcast

No próximo episódio do TPodcast nosso convidado será o Kelver Merlotti, gerente de treinamento da Embarcadero do Brasil.

Ajude a escolher as perguntas que faremos a ele através do Google Moderator.

Envie suas perguntas ou vote em perguntas existentes. As mais votadas serão utilizadas durante a gravação, que deve acontecer na próxima segunda, então não deixe de participar.

TPodcast 6 – Windows 8

Neste episódio eu, Erick Sasse, e Leonel Togniolli discutimos os seguintes assuntos:

Clique aqui para ouvir.

  • Veja aqui como assinar no iTunes e outros aplicativos.
  • Versão zip, disponível aqui.

E como sempre, aguardamos comentários!

Meu Momento Favorito de Steve Jobs

Pouco mais de um mês atrás, quando Steve Jobs renunciou ao cargo de CEO da Apple, separei esse video para postar no blog, mas decidi que aguardaria mais um pouco, pois um momento mais triste ainda estaria por vir.

Agora que ele se foi, gostaria de compartilhar esse famoso e belo discurso, que é certamente meu momento favorito dele:

Obrigado Steve! Seu impacto no mundo da tecnologia será lembrado por muito tempo.

TPodcast 5 – O Mês dos Eventos

Neste episódio eu e Leonel discutimos os vários eventos de desenvolvimento que participamos no mês de setembro, além de uma série de outros:

A idéia era falar do Windows 8 também, mas como acabou ficando extenso, decidimos adiar para o próximo episódio.

Clique aqui para ouvir.

  • Veja aqui como assinar no iTunes e outros aplicativos.
  • Versão zip, disponível aqui.

E como sempre, aguardamos comentários!

Buscando comentários sobre drivers dbExpress do Delphi

Há anos venho utilizando drivers dbExpress de terceiros (DevArt) em meus aplicativos. O motivo é simples: sempre comprei Delphi Professional, que não traz drivers para Firebird e MSSQL.

No Delphi XE2 fiz upgrade de todas as licenças para Enterprise, e esta versão já traz os drivers. Então estou considerando migrar dos drivers da DevArt para eles, e ter um produto de terceiro a menos para me preocupar.

Gostaria de saber de quem usa esses drivers se estão satisfeitos. Só preciso acessar Firebird 2.5+ e SQL Server 2005+. Agradeço qualquer comentário.

Netflix: Usei e gostei, mas precisa melhorar

A Netflix finalmente chegou ao Brasil com seu serviço de vídeo via streaming. Como eu já estava interessado no serviço há muito tempo, assim que recebi o e-mail informando que estava disponível, já me inscrevi para o teste de um mês gratuito.

Inicialmente testei no notebook e me decepcionei, pois a qualidade de video era bem baixa. Desanimei.

Um dia depois resolvi testar no PS3, onde é possível baixar o aplicativo da Netflix e logar com a mesma conta do site. A experiência foi bem melhor. No PS3, após alguns segundos de vídeo ruim, a imagem vai melhorando até chegar em HD, e com a minha conexão de 10 mega da Net, ficou totalmente estável em HD. Assisti um filme inteiro de 2 horas e só percebi a qualidade da imagem reduzir uma única vez por poucos segundos. Achei excelente.

Fiz mais testes com o PC e percebi que se tiver um pouco mais de paciência, a imagem também pode ficar muito boa, porém a estabilidade é bem menor da que consegui no PS3. Talvez seja porque o notebook é conectado via wifi. Já o PS3 está conectado via cabo.

Ainda disso, existem outros problemas menores, como por exemplo vários filmes tem apenas versão dublada em português, ou em alguns casos, apenas espanhol. Também percebi problemas em visualizar alguns caracteres acentuados em legendas no notebook. No PS3 não percebi esse problema.

O acervo decepcionou. Não existem lançamentos. O conteúdo mais novo que encontrei foi de 2008, e mesmo assim é bem raro. A maioria é bem mais velha que isso. E apesar de ter muita coisa boa, falta muita coisa também.

Um detalhe engraçado são algumas traduções dos gêneros de filmes como “filmes sobre carniceiros e assassinos em série”, ou coisas do tipo “filmes para crianças com animais que falam”, ou ainda “filmes tórridos”.

Mas no final das contas a experiência que tive no PS3 valeu muito a pena. Consigo controlar o aplicativo todo usando meu controle remoto e ficou muito simples para navegar pelo acervo e começar assistir qualquer coisa instantaneamente.

Em breve vai estar disponível também no Xbox 360, iPhone, iPad e outros. E por enquanto, eles conseguiram garantir os meus R$14,99 por mês.

 

 

 

 

 

TPodcast 4 – Novidades do Delphi XE2

Neste episódio:

  • Minha experiência de upgrade no Mac para o Mac OS X Lion e algumas novidades que ele traz.
  • Fim dos softwares da Apple vendidos em caixa.
  • Prova de certificação Delphi. Eu fiz e como foi.
  • Provinha do Google Developer Day solucionada em Delphi.
  • Qual o melhor livro sobre Delphi? (Respondemos a pergunta enviada pelo Ricardo Ramos)
  • Novidades do Delphi XE2
  • Suporte a Windows 64 e quem precisa disso (artigo para referência: The Future of Delphi Compiler)
  • FireMonkey
  • Suporte a Mac OS X
  • Suporte a iOS
  • LiveBindings
  • VCL Styles
  • DataSnap Mobile Connectors
  • FastReport 4 (e seus PDFs que só funcionam no Windows)
  • Documentation Insight
  • Blog Delphi for Mac

Clique aqui para ouvir.

  • Veja aqui como assinar no iTunes e outros aplicativos.
  • Versão zip, disponível aqui.

E como sempre, aguardamos comentários!

Prova de Certificação Delphi Developer

Recentemente a Embarcadero ressuscitou o programa de certificação para desenvolvedores Delphi, conforme comentamos no episódio #03 do TPodcast.  São dois níveis, Delphi Developer e Delphi Master Developer.

Junto com a volta do programa, ela presenteou todos os donos de Delphi registrado com um voucher para fazer a prova do primeiro nível, Delphi Developer, gratuitamente. Não tinha intenção em me certificar, mas já que era free, porque não experimentar?

São 60 questões de diversas categorias como fundamentos, tipos de dados, variáveis, procedures e functions, classes e objetos, interfaces, pacotes, gerenciamento de memória, banco de dados, etc. Você tem 60 minutos para responder todas.

Eu fiz em 30 minutos e acertei 58 de 60. Infelizmente não consegui descobrir quais errei.

A prova é fácil. Eu fui praticamente lendo, selecionando e pulando para a próxima. Em média gastei 30 segundos por questão. O conteúdo é algo que todo desenvolvedor Delphi realmente deveria saber sem pensar muito. Se esse era o objetivo da prova, acho que foi alcançado.

Ao final, se você for aprovado, tem direito a baixar um certificado em PDF de 9 MB assinado pelo David I:

 

Conforme eu já comentei no TPodcast, se você é um desenvolvedor Delphi, eu acho que vale a pena investir nessa certificação. Eu certamente daria uma atenção especial ao currículo de um desenvolvedor certificado, só pelo fato de ele ter ido atrás, ter tido o interesse em fazer a prova, investido tempo nisso, etc. Master Developer certamente teria um peso bem maior, mas até esse primeiro certificado, já seria um bom diferencial.

 

Prova do Google Developer Day em Delphi

Essa foi a primeira vez que decidi resolver a prova proposta pelo Google para quem quer participar do Google Developer Day.

Basicamente você tinha que escrever código para ler e extrair informações de um texto. Palavras que tem tamanho X e começam com letras específicas, palavras que tem tamanho Y e não possuem determinada letra, converter palavras em números usando uma formula maluca deles, ordenar o texto usando uma ordem de alfabeto totalmente diferente do nosso. Coisas desse tipo.

O mais interessante é que eles deram dois textos, em um deles já informando as respostas e o outro é o que você tinha que usar para responder. Isso facilitou muito.

Decidi usar TDD. Criei minha classe para fazer a leitura do texto com os métodos e propriedades que ela precisaria expor para me informar as respostas e antes de codificar a classe, já escrevi os testes baseados nas respostas do texto A. Rodei os testes e obviamente todos falharam, a partir daí comecei a codificar para cada um dos testes passar. Depois dos testes passarem, fiz um segundo projeto com interface visual, permitindo que o usuário digitasse qualquer texto em “Googlon”, que seria automaticamente processado pelo meu parser.

O bom desse tipo de abordagem é que depois você pode refatorar o código sem medo, pois está protegido pelos testes. Se caso você quebre alguma coisa, vai saber imediatamente. Tanto que quando estava escrevendo esse post, percebi que eu tinha uma lista totalmente desnecessária na minha classe. Removi e rodei os testes. Todos passaram, o que quer dizer que não quebrei nada. Não precisei sequer rodar o projeto com a interface visual para testar a mudança. Ou seja, além de tranquilidade, TDD te dá muito mais produtividade, pois você consegue alterar o código com muito mais rapidez.

As duas coisas que deram mais trabalho na solução do problema em Delphi foram:

  • Ordenar a string usando um alfabeto ordenado de forma diferente do nosso. Eu tinha certeza que existia algum algoritmo testado e comprovado para isso, pois é algo que já deve ter sido feito milhões de vezes. Perdi tempo procurando. Por fim não encontrei e fiz o meu mesmo. Ele vai comparando letra por letra e quando a letra é igual, compara a próxima. Se não existir a próxima letra em uma das palavras, ela é menor.
  • Perceber que o Delphi estava silenciosamente informando valores inválidos quando estourava a capacidade do tipo Integer. Isso eu achei bem estranho, pois esperava que fosse levantada uma exception em caso de estourar o tipo. Por algum motivo que ainda não descobri, o código que eu escrevi para converter a palavra para valor numérico não levanta nada, simplesmente informa o valor errado se você usar Integer. O que acontece é que, não sei por qual motivo, o Delphi vem por padrão com “Range Checking” desativado (valeu Cesar!). Ativando esta opção, o código quebra e você consegue perceber o problema imediatamente. Troquei para Int64 e resolveu.

Enfim, levei duas ou três horas para resolver os problemas e acho que valeu o desafio. Principalmente para ficar ainda mais atento com as limitações dos tipos (como no caso do Integer) e o tal do Range Checking desativado por padrão.

Acho que vale a pena tentar resolver, principalmente porque a prova é diferente para cada um. Esse é o link para a prova, e você pode fazer mesmo que não pretenda participar do evento. Meu projeto completo está aqui, mas recomendo você fazer o seu antes de analisar o meu. Quem sabe você não tem idéias muito melhores?