Author Archives: Erick Sasse

Podcast Piloto – Social Coding e DVCS

Eu e o Leonel Togniolli colocamos em prática algo que eu queria fazer já há algum tempo. Gravamos um bate papo abordando um tema sobre desenvolvimento. É o nosso episódio piloto do que pode se tornar um podcast sobre desenvolvimento.

Convidei o Leonel porque além de meu amigo, é um desenvolvedor experiente e com quem estou constantemente discutindo sobre desenvolvimento (e games). Mas na verdade eu não queria passar vergonha sozinho, isso sim!

A gravação é simples, feita via Skype mesmo, então ignorem algumas falhas no áudio de vez em quando. E nos dêem feedback, de todo tipo. Se vale a pena continuar com isso, se é perda de tempo, se ficou legal, sugestão de assuntos que podemos abordar em episódios futuros, etc.

Clique aqui para ouvir.

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

Links comentados no podcast:

Padrão Publish/Subscribe em Delphi

Imagine que você tem o cadastro do mesmo cliente aberto em várias janelas usando datasets diferentes. Ao atualizar um deles, você quer disparar um refresh nos outros.

Um dos padrões que resolvem esse problema é o Publish/Subscribe. Ele permite que objetos interessados em uma mensagem, “assinem” notificações, de forma a serem avisados sempre que essa mensagem for disparada. A grande vantagem desse padrão é o desacoplamento, pois quem assina não necessariamente precisa conhecer quem publica e vice-versa.

Para utilizar esse padrão nos meus sistemas, implementei o NotificationService.

Quando um objeto deseja ser notificado sobre um assunto, ele faz uma assinatura, passando o ID da mensagem que está interessado:

GetNotificationService.Subscribe(MetodoASerExecutado, MsgUmClienteFoiAtualizado);

Onde MetodoASerExecutado é um TNotifyEvent, que já estamos carecas de usar no dia a dia em todos os componentes do Delphi. Ele será executado sempre que a mensagem MsgUmClienteFoiAtualizado for disparada por outro objeto.

Para enviar a mensagem a todos os interessados, também é muito simples, bastando o objeto que está gerando a mensagem chamar:

GetNotificationService.SendMessage(Self, MsgUmClienteFoiAtualizado);

Nesse caso, ele passa um objeto como sender, que não necessariamente precisa ser ele mesmo (Self), e o ID da mensagem (MsgUmClienteFoiAtualizado). Feito isso, o NotificationService vai varrer a lista de assinantes, identificar quem está interessado nessa mensagem e disparar todos os métodos passando o mesmo sender.

Quando o objeto interessado na mensagem for destruído ou não desejar mais receber as notificações, basta cancelar a assinatura, chamando:

GetNotificationService.UnSubscribe(MetodoASerExecutado);

Bem simples de usar e muito útil para resolver alguns problemas no dia a dia de desenvolvimento. O código fonte inclui um demo com mais detalhes.

O projeto está hospedado no BitBucket. Se quiser baixar os fontes, instale o Mercurial na sua máquina, abra uma linha de comando e digite:

hg clone https://bitbucket.org/esasse/notificationservice

Um dos motivos em publicar esse projeto foi para conhecer os recursos do BitBucket e do Mercurial como DVCS. Por isso, se tiver alguma sugestão de melhoria no código ou simplesmente quiser fazer uma versão diferenciada, faça um fork do projeto no próprio BitBucket e fique a vontade!

Para mais informações sobre esses recursos de compartilhamento de código usando BitBucket e Mercurial, veja meu post anterior.

Social Coding e DVCS

Muita gente usa Orkut e Facebook, mas vocês conhecem as redes sociais para programadores?

Os mais conhecidos são GitHub e BitBucket. Eles permitem que você publique e compartilhe seus códigos com controle de versão, siga e seja seguido por outros desenvolvedores, acompanhe e participe de outros projetos, etc. A idéia já tomou proporções tão grandes que muitas empresas, pelo menos lá fora, tem até utilizado o histórico desses sites para avaliar a contratação de programadores.

Uma característica importante desses sites é que são baseados em DVCS, ou seja, Controle de Versão Distribuído. E a principal diferença entre o GitHub e o BitBucket, é exatamente o sistema de controle de versão usado. No GitHub é o Git e no BitBucket é o Mercurial.

Algum tempo atrás eu já havia me decidido que se eu fosse migrar do Subversion para um sistema distribuído, seria o Mercurial por ser mais amigável no Windows do que o Git, e também por ter sido a ferramenta adotada no Kiln, ferramenta que se integra totalmente ao FogBugz, que já usamos na empresa.

Abri uma conta no BitBucket e procurei projetos Delphi. Encontrei vários e escolhi o DelphiClean do Nick Hodges para fazer um fork e entender como funcionava o processo.

Quando se faz um fork, você tem um cópia de todo o repositório do projeto original no seu novo projeto, incluindo todo histórico de commits, etc. O mais interessante é que ele não perde o “parentesco” com o projeto original, e esse é um dos grandes benefícios, porque você pode fazer alterações, comitar no seu repositório e depois se for uma correção de bug ou uma melhoria, pode oferecer ao dono do outro projeto puxar suas alterações para o projeto original através do “pull request”.

Se vocês observarem o meu fork, que nomeei MyDelphiCleaner, poderão observar que ele tem exatamente o mesmo histórico de commits do DelphiClean original, além de um commit meu, realizado após o fork. Repare também que o site mostra que o meu projeto é fork do DelphiClean do Nick.

O meu commit foi remover uma linha de código que estava comentada e por isso só estava sujando o código. Como isso é uma melhoria no código, enviei um “pull request” para o Nick, mas ainda não foi incorporada ao projeto original porque ele me respondeu dizendo que não sabe como fazer. Hehe.

Esse tipo de compartilhamento de código, puxa, empurra, fork em repositório, são as grandes vantagens dos DVCS, e o que me faz concluir que grande parte do sucesso desses sites se deve em muito ao DVCS. Acho que seria muito difícil, construir um site desse tipo usando Subversion por exemplo.

Enfim, ainda sou bem iniciante nisso também, mas acho que vale a pena investir um tempo para entender como funciona, principalmente para aprender melhor o funcionamento dos DVCS, e quem sabe no caminho contribuir com outros desenvolvedores fazendo forks de seus projetos e mandando melhorias. Quer começar? Abra uma conta no BitBucket, baixe o Mercurial e faça um fork do meu projeto NotificationService, que é uma classe de notificação em Delphi, da qual falarei em um futuro post.

Criando Atributos de Validação Customizados no ASP.NET MVC

Andei estudando um pouco de ASP.NET MVC, e para quem conhece, sabe que um dos recursos básicos que se vê logo de início é como usar atributos para validação dos modelos.

As validações básicas como campos requeridos, tamanho, expressão regular entre outros, já existem no próprio framework. Então para você determinar que um campo é requerido por exemplo, você decora a propriedade desta forma:

public class Pessoa
{
    [Required]
    public string Nome { get; set; }
}

Mas eu estava interessado em criar alguns customizados, pois seria bem prático poder decorar campos como CNPJ, CPF, CEP  e obter a validação específica direto no modelo.

Felizmente isso é muito fácil. Basta criar uma classe derivada de System.ComponentModel.DataAnnotations.ValidationAttribute e sobrescrever o método IsValid retornando true ou false. Veja como ficaria para o atributo CPF:

public class CPFAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var cpf = Convert.ToString(value);

        if (String.IsNullOrEmpty(cpf))
            return true;

        return CPF.Validate(cpf); // Aqui chamada para sua função de validar CPF
    }
}

Feito isso, basta decorar a propriedade específica da classe:

public class Pessoa
{
    [Required]
    public string Nome { get; set; }
    [CPF]
    public string CPF { get; set; }
}

O único detalhe é que essas validações ocorrem apenas no servidor, e não no cliente, como é o padrão (pelo menos no MVC3) da maioria das validações já presentes no framework. Então você vai precisar verificar o ModelState.IsValid no controller.

Esse código foi testado no ASP.NET MVC 3, então não sei se funciona em versões anteriores.

Comentários do blog agora com Disqus

O Disqus é um sistema para gerenciar comentários na web. Ele se integra com os principais sistemas de blog existentes na web, além de fornecer uma série de outros recursos adicionais interessantes para os usuários.

Decidi instalar ele aqui porque a migração foi ridiculamente simples e ele mantém os comentários em sincronia com o WordPress, então a qualquer momento que eu quiser remover, não perco nenhum comentário. Além disso, ele importou automaticamente todos os milhares de comentários que já existiam aqui no blog.

Qualquer problema, me avisem. E comentem alguma coisa aí para podermos estrear e ver se funciona bem. :)

Livro Clean Code

Clean Code: A Handbook of Agile Software Craftsmanship, por Robert C. Martin (@unclebobmartin), também conhecido como “Uncle Bob”.

Como o próprio nome já diz, é um livro sobre escrever código limpo, código de fácil leitura e manutenção. E apesar de abordar muitos pontos iguais a outros livros desse tipo, como Code Complete (Steve McConnell), Refactoring (Martin Fowler), The Pragmatic Programmer (Andrew Hunt, David Thomas), é um assunto sempre interessante, pois escrever código limpo é difícil e de certa forma até subjetivo, o que torna ainda mais importante conhecer diversos pontos de vista, técnicas, etc.

Todo o código de exemplo do livro é em Java, mas isso não deve ser problema para a maioria dos programadores, pois conhecer um pouco da sintaxe Java é praticamente obrigatório devido a tanto conteúdo que existe nessa linguagem. Em alguns raros momentos, o livro fica um pouco específico demais em Java, mas não chega a ser um problema.

Um dos princípios interessantes que o tio Bob prega no livro é a regra de escoteiro: “você deve sempre deixar o lugar mais limpo do que encontrou”, ou seja, sempre “comitar” o código um pouco melhor do que estava. Dessa forma você evita que ele se deteriore com o tempo. Mesmo que sejam pequenas melhorias, uma variável renomeada, um método extraído. Por menor que sejam, sempre valem a pena.

O livro aborda tópicos importantes para o dia-a-dia de qualquer programador. Nomeação de variáveis, métodos, funções, classes. Boas práticas para utilização de comentários, que quase nunca devem ser usados. Código para tratamento de erros, testes, etc.

Por mais que muitas coisas você já saiba, já tenha lido em outros lugares ou até pratique muitas delas no dia-a-dia, sempre temos algo para melhorar. Muitas coisas você começa a praticar quando vê os conceitos mas vai relaxando com o tempo. Por isso acho sempre bom ler esse tipo de livro para manter as idéias frescas na cabeça. Recomendo.

Usando Beyond Compare Lite do Delphi XE no TortoiseSVN

Há um bom tempo eu tenho usado a própria ferramenta de diff que acompanha o TortoiseSVN e estou satisfeito.

Mas hoje lembrei que no Delphi XE você recebe a versão Lite do Beyond Compare e decidi testar. Como não uso a integração da IDE com o SVN, decidi trocar no Tortoise.

Basta ir em Settings, External Programs, Diff Viewer, setar para External e colocar a linha de comando abaixo fazendo os devidos ajustes para a pasta onde você tem o Delphi XE instalado:

C:\Program Files (x86)\Embarcadero\RAD Studio\8.0\bin\BCompareLite.exe %base %mine /title1=%bname /title2=%yname /leftreadonly

Não sei se dá pra usar para Merge também, isso vou deixar para ver depois, se gostar do diff dele.

Vídeo da minha palestra Controle de Versão com Subversion

Segue o vídeo da minha palestra no Firebird Developers Day 2010.

Na verdade é um screencast, pois só mostra imagens da tela e áudio capturados pelo meu próprio notebook. De qualquer forma acho que o resultado até que ficou suficiente para ser compartilhado.

Esse vídeo e vários outros do FDD 2010 também estão disponíveis em um DVD vendido pela Firebase.

Extrair primeiro nome usando SQL v2.0

Fiz o refactoring aplicando as ótimas dicas que recebi do pessoal no post anterior e a versão 2.0 da consulta ficou assim:

Firebird

SELECT LEFT(NOME_COMPLETO, POSITION(' ' IN (NOME_COMPLETO || ' '))) FROM TABELA

SQL Server

SELECT LEFT(NOME_COMPLETO, CHARINDEX(' ', NOME_COMPLETO + ' ') ) FROM TABELA

Muito melhor! Obrigado pelas dicas.

Extrair primeiro nome usando SQL

Você tem um campo string onde guarda o nome completo e precisa escrever uma consulta que traga apenas o primeiro nome.

Eu cheguei ao resultado abaixo, não conseguindo uma consulta que funcionasse ao mesmo tempo com Firebird e SQL Server.

Firebird

SELECT IIF(POSITION(‘ ‘ IN NOME_COMPLETO) > 0, SUBSTRING(NOME_COMPLETO FROM 1 FOR POSITION(‘ ‘ IN NOME_COMPLETO) – 1), NOME_COMPLETO) FROM TABELA

SQL Server

SELECT CASE WHEN CHARINDEX(' ', NOME_COMPLETO) > 0 THEN SUBSTRING(NOME_COMPLETO, 1, CHARINDEX(' ', NOME_COMPLETO) - 1) ELSE NOME_COMPLETO END FROM TABELA

Qualquer idéia melhor é bem-vinda.

UPDATE: Baseado no feedback recebido, refatorei a consulta, veja aqui a versão 2.

Delphi Conference 2010

Essa semana aconteceu em São Paulo a Delphi Conference 2010, evento gratuito realizado pela Embarcadero para apresentar novidades do Delphi e demais ferramentas da empresa. Eu já tinha participado ano passado e estive presente novamente este ano.

As palestras durante o dia todo abordaram vários temas em diferentes níveis, exatamente como já se é esperado neste tipo de evento, e acredito que são muito válidas para os desenvolvedores que não acompanham as novidades dia-a-dia pela Internet.

No meu caso como sempre estou lendo blogs, acompanhando eventos online, etc, normalmente não existe muita novidade para se ver e o que vale a pena em participar é poder encontrar os amigos, bater papo e trocar idéias com outros desenvolvedores.

Por ser um evento gratuito, torna-se ainda mais fácil de participar, e nesse ponto a Embarcadero está de parabéns. Eventos gratuitos são bem raros. Então se você é desenvolvedor Delphi é um evento que eu certamente recomendo a participação.

Quis comentar aqui para apoiar o evento, pois acho importante termos um evento como esse no Brasil e não queria deixar passar em branco. Para um review um pouco mais detalhado, vejam o que o Leonel Togniolli publicou no ITWeb.

 

Estamos contratando desenvolvedores

Tenho duas vagas abertas para desenvolvedores nas minhas equipes. Um vai trabalhar na Monde e outro na Cadena. Estamos em Americana-SP e o trabalho é no nosso escritório, então se você não for da região, teria que estar disposto a mudar para cá.

Se você tem paixão por programar, está o tempo todo procurando formas melhores de resolver os problemas e adora facilitar a vida dos usuários com seus aplicativos, é uma boa oportunidade para trabalhar em uma empresa que valoriza os desenvolvedores e procura sempre as melhores ferramentas para realizar o trabalho. Todas os desenvolvedores usam máquinas bem rápidas, com pelo menos dois monitores, e sempre com as últimas versões do Windows, Delphi (nossas licenças do Delphi XE chegaram hoje), Visual Studio, etc.

Somos uma empresa 99% Delphi, então conhecimento nesta ferramenta é um diferencial muito importante, porém não é fator eliminatório. Se você é um desenvolvedor talentoso mas não conhece muito Delphi, não deixe de participar.

A contratação é CLT/efetivo. Oferecemos salário compatível e ótimos benefícios como café da manhã, almoço e  café da tarde (as vezes pão com mortadela) totalmente grátis. Academia, convênio médico, livros técnicos a vontade, participação em eventos, máquina de café expresso (desenvolvedor normalmente é movido a cafeína), refrigerantes e sucos a vontade, área de lazer com TV LCD 40 e Xbox 360 (precisamos relaxar entre um refactoring e outro), etc.

Interessado? Envie seu CV para mim: esasse@gmail.com. Avaliaremos tanto desenvolvedores com pouca ou com mais experiência.

Resumo do TechEd 2010

Na semana passada aconteceu no Expo Center Norte em São Paulo o TechEd, maior evento da Microsoft no Brasil. Eu estive lá e vou tentar resumir os principais assuntos que acompanhei.

Pela primeira vez (acredito eu), a abertura do evento foi transmitida ao vivo pela Internet, o que é bem legal para quem não pôde estar lá. Só no final da cortaram a transmissão online antes da demo do Kinect, que era exclusiva para os presentes. Provavelmente quiseram valorizar quem pagou (caro) para estar lá, mas na minha opinião não era necessário, a experiência de ver ao vivo já foi muito superior e perderam uma ótima oportunidade de muito mais gente ver o Kinect.

O foco principal do evento foi computação nas nuvens (ou Cloud Computing) e a plataforma Windows Azure, que a Microsoft oferece como solução nessa área. Eu assisti várias palestras focadas no Azure e achei bem interessante. Pra quem não sabe, Windows Azure permite que você rode seus aplicativos e/ou bancos de dados nos data centers da Microsoft.

Alias, estes data centers são um show a parte, estado da arte em TI. Todos os servidores são montados dentro de containers, sendo que cada um destes containers pode ter até 2500 servidores. Um data center pode ter cerca de 50 containers, então estamos falando de algo em torno de 125.000 servidores em um único prédio. Não é brincadeira. A Microsoft está construindo os maiores data centers do planeta, investindo pesadíssimo.

Em particular achei bem interessante o SQL Azure, que depois de criado, você acessa exatamente como se fosse um SQL Server normal. Usando os mesmos métodos de acesso que já estamos acostumados. Você pode abrir seu SSMS, configurar a conexão e sair usando numa boa. Ainda não fiz testes com Delphi, mas pelo que vi lá, acredito que seja totalmente transparente acessar um banco no SQL Azure usando os mesmos drivers e componentes que já estamos acostumados. Bem interessante.

Além disso assisti um ótima palestra do Luciano Moreira, sobre cache de plano de execução, com muitas dicas interessantes de analise de performance, inclusive com importantes alertas para os que acreditam que as stored procedures são sempre a melhor opção.

Outro assunto que me interessei foi Entity Framework 4, que acredito ser hoje o framework mais promovido pela MS para acesso a dados. Ele realmente vem evoluindo bastante nos últimos anos e quem tem oportunidade de usar, deveria dar uma atenção especial a ele. Aliado ao LINQ, formam uma dupla fantástica para acesso a dados usando classes de negócio ao invés de datasets.

Também procurei assistir algumas palestras de tecnologias que não conheço nada como Windows Workflow Foundation (que achei muito interessante) e outras. No caso do Workflow Foundation me parece uma grande quebra de paradigma no desenvolvimento de aplicativos. Pretendo pesquisar melhor e ver se encontro casos de sucesso, para ter uma idéia de como estão aplicando.

Evitei palestras sobre WPF e Silverlight, pois são duas tecnologias que realmente não me vejo aplicando em nada. O único caso onde eu usaria Silverlight seria para brincar um pouco com desenvolvimento para Windows Phone 7, porque aparentemente é a melhor opção nesta plataforma. Aliás vi uma palestra sobre desenvolvimento para Windows Phone 7 e parece bem legal, mas não me vejo trocando meu iPhone por ele.

Uma oportunidade interessante que tive foi testar o Kinect, o novo acessório de reconhecimento de movimentos para o Xbox 360. Pra mim a tecnologia do Kinect é muito incrível. Ele consegue mapear seu esqueleto e monitorar toda a movimentação do corpo em tempo real sem nenhuma calibração. É impressionante. Escrevi todos os detalhes no meu outro blog sobre games.

Tinha wifi gratuito mas era limitado a alguns locais e funcionava muito precariamente, então acabei não usando, fiquei no 3G do celular que funcionava bem melhor.

Eles ainda não conseguiram criar um guia prático para que você consiga ver todas as palestras em determinado horário. Muitas vezes você muda de idéia sobre a palestra que quer assistir, e era bem chato ficar olhando nas diversas páginas do guia de palestras para achar as outras que estavam no mesmo horário.

Mas no geral o evento estava bem melhor que no ano anterior. Se alguém que lê meu blog foi, diga aí o que achou.

Novidades do Delphi XE (2011)

A nova versão do Delphi foi lançada oficialmente. Ela é parte do pacote RAD Studio XE, que incluí os produtos Delphi XE, C++ Builder XE, Delphi Prism XE e RadPHP XE.

Comentarei aqui apenas sobre o Delphi XE, pois é o que eu uso. Sobre os outros produtos a única coisa que notei, mas nem sei se é novidade nessa versão, é terem removido o nome Delphi da IDE para PHP. Finalmente corrigiram esse erro. Era muito estranho “Delphi for PHP”.

Então o que realmente há de novo no Delphi?

A página oficial das novidades relaciona os itens e tentei investigar e comentar cada um, mas como muito poucos detalhes foram divulgados, ficou meio difícil.

DataSnap

  • Novos wizards para criação de clientes e servidores: É útil, pois com certeza facilita a criação de projetos que dependem de vários componentes e acaba ajudando quem não está acostumado com a tecnologia e não saberia bem como começar um projeto do zero.
  • Suporte a protocolos Javascript, REST, HTTP e HTTPS: HTTP é bem básico, não tinha ainda? O resto é bem vindo.
  • Filtros para compactação e criptografia dos dados: Essencial.
  • “User roles” para autenticação: Não encontrei detalhes, mas aparentemente é apenas uma interface para autenticação de acesso. Isso realmente quero saber mais detalhes.

Cloud Computing

  • Componentes para acesso a Windows Azure: É interessante ver a Embarcadero abraçando uma tecnologia ainda tão pouco utilizada, além do que os serviços suportados (blobs, queues e tables) estão todos disponíveis via REST, o que torna a necessidade destes componentes um pouco duvidosa, pois em teoria são apenas requisições HTTP. De qualquer forma, quem pretende trabalhar com Azure já teve a vida um pouco facilitada.
  • Distribuição fácil para Amazon EC2: Mais um recurso que acredito atender uma parcela muito pequena de usuários. Procurei e não achei detalhes. Sempre achei que o Amazon EC2 fossem servidores padrão e para fazer um deploy fosse apenas questão de transferir os arquivos. Preciso entender melhor quais são essas facilidades incluídas para dar uma opinião melhor sobre o recurso.

Integração com Subversion

  • Esse recurso já comentei que não pretendo utilizar. Além de código fonte, trabalho com muito mais arquivos do que adiciono no projeto do Delphi, então prefiro controlar tudo usando apenas uma ferramenta, que é o TortoiseSVN. Parece também que a integração vai suportar apenas as tarefas mais comuns como import, update, commit e show log. Apesar de esses serem os mais usados, eu com certa frequência uso outros e teria que manter o TortoiseSVN para eles.

Alta Produtivida e “Code Intelligence”

  • Melhoria na geração de código a partir de modelos: Pra quem usa modelagem visual é bom, eu não uso.
  • Geração de diagrama de sequência: Idem acima.
  • Melhorias no formatador de código: Até hoje não consegui usar o formatador do Delphi porque ele nunca funcionou do jeito que eu queria. Confesso que nunca investi muito tempo para customizar ele, mas nessa segunda versão pretendo dar uma nova chance a ele. Porém já li alguns comentários negativos nos forums.
  • Melhoradas pesquisas e IDE Insight: Para pesquisar em código fonte uso o Grep Search do GExperts, que sempre foi muito superior ao da IDE. O IDE Insight é um recurso que gostei muito quando foi anunciado, mas acabei nunca usando. Já conheço praticamente todos os atalhos para as funções que uso na IDE. Mas também não encontrei detalhes sobre o que foi melhorado.
  • Novos atalhos para navegar em código modificado: Atalhos são sempre bem-vindos, mas não achei detalhes.

Linguagem, Compilador e Bibliotecas

  • Atualizações na VCL, RTL e STL: Aqui provavelmente são bugs corrigidos e pequenas melhorias, pois não encontrei detalhes. Só não sei o que é STL.
  • Expressões regulares na RTL: Isso é bem legal, expressões regulares são bem úteis principalmente para validação de dados.
  • Melhorias em TStrings e Date/Time: Isso deveria estar incluido já no tópico de atualizações na VCL/RTL, colocado separadamente parece que estão querendo apenas ter mais items. De qualquer forma, TStrings é uma das classes mais importantes do Delphi e tem que estar mesmo em constante melhoria.
  • Suporte para abas internas na OpenTools API: Melhorias na OTAPI são importantes para permitir melhor integração de ferramentas de terceiros na IDE.
  • Melhoria na performace do compilador: Velocidade do compilador é importante pois impacta diretamente na produtividade do desenvolvedor, então este é outro ponto que deveria mesmo receber atenção em todos os releases.

Até aqui são as reais melhorias no produto. Pare um pouco e analise novamente as novidades acima. Na minha opinião, tem pouca coisa que justifique o upgrade até aqui. Não achei nenhuma melhoria na linguagem por exemplo.

Acho que a Embarcadero também percebeu isso. E então resolveu adicionar uma série de ferramentas de terceiros no pacote:

FinalBuilder

Ferramenta para automatizar seus builds. Simplesmente fantástica. Sou usuário há anos e recomendo a todo mundo. Já até palestrei sobre ele em algum evento sobre Delphi. Automatizar os builds na minha opinião é totalmente essencial para qualquer desenvolvimento, mesmo que você trabalhe sozinho. E por ser a minha ferramenta preferida para isso, fiquei muito satisfeito em ver ela adicionada ao Delphi.

Por outro lado, é um atrativo que para mim não faz diferença, pois eu já tenho as licenças e pago independente do Delphi. Talvez eu consiga usar a licença do Delphi ao invés de pagar por uma separada? Ainda não sei.

Importante observar que está disponível apenas na versão Enterprise ou acima.

AQTime

Ferramenta para analisar a performance do seu código, facilitando descobrir os gargalos, permitindo otimizações mais precisas mostrando onde realmente está o problema. AQTime é o profiler lider há anos entre os desenvolvedores Delphi. Já baixei trials várias vezes e é uma ferramenta que sempre quis adotar no meu dia-a-dia, mas até hoje fui adiando. Agora ninguém terá desculpas, ter uma ferramenta dessa na mão e não usar é um tremendo desperdício. Disponível inclusive na versão Pro do Delphi.

CodeSite

Ferramenta para adicionar logs no seu código. Ele é concorrente do SmartInspect, outra ferramenta que uso há anos e é minha ferramenta preferida para log. Também considero ferramenta essencial no desenvolvimento, principalmente para entender o comportamento do seu aplicativo internamente. Muitas vezes você acha que sabe o que ele está fazendo, mas vai ficar surpreso quando começar a logar tudo e monitorar.

Beyond Compare

Ferramenta para comparar arquivos. Não considero muito importante essa adição, mas ele também sempre foi popular entre os desenvolvedores Delphi. Pra mim outras ferramentas free sempre me atenderam o suficiente. Eles provavelmente adicionaram o BC ao pacote devido a integração com Subversion, para terem uma boa ferramenta para diff e merge. Melhor isso do que desenvolver alguma coisa simples demais.

IP*Works

Pacote de componentes para suporte a protocolos IP. Concorrente direto do Indy, que está meio largado, mantido pelo trabalho voluntário de alguns poucos corajosos. Esse pacote só conheço de nome, mas parece ser bom.

Conclusão

Na minha opinião essa versão veio muito fraca de novidades no produto, mas totalmente recheada de ferramentas extremamente úteis de terceiros. Se você somar tudo, é um upgrade que acaba valendo a pena, principalmente se você ainda não usa Finalbuilder ou AQTime.

Eu farei o upgrade por vários motivos:

  • Gosto de usar e fornecer as melhores e mais novas ferramentas para minha equipe.
  • Quero começar a usar novos recursos do DataSnap.
  • Quero começar a usar o AQTime.
  • Estou fazendo minha parte para garantir a manutenção e continuidade do produto que utilizo e dependo diariamente.

Vem aí o Delphi XE

Delphi XE é o nome oficial do “Delphi 2011″. Agora os produtos da Embarcadeiro estão recebendo o XE no nome e as próximas versões serão Delphi XE2, Delphi XE3, etc. Um pouco sobre essa nova forma de nomear as versões foi explicada pelo Tim Del Chiaro em seu blog.

Apesar das mudanças no nome, o que realmente importa são as melhorias no produto pra decidir se vale a pena ou não investir numa atualização. Hoje foi publicado o primeiro vídeo mostrando algumas das novidades. Prometeram publicar novos vídeos a cada terça-feira.

Você pode assistir o vídeo na página RAD Studio XE Sneak Preview.

Até agora foi mostrado integração com o Subversion e melhoria da modelagem visual de objetos.

Apesar de eu usar Subversion o tempo todo, não sinto nenhuma necessidade em integrar na IDE. É uma novidade legal e acho até que votei nela no QC, mas com o tempo foi perdendo a relevância para mim. Acho que o TortoiseSVN atende tão bem que provavelmente eu nem usaria essa integração na IDE. Inclusive controlo muitos arquivos não reconhecidos pela IDE do Delphi e preciso ver como a integração lidaria com isso.

Modelagem visual de objetos foram raras as vezes que usei e não tenho muito interesse. Nunca me achei mais produtivo usando isso, talvez porque quase sempre eu conheço muito bem o código que estou mexendo.

Vou aguardar os próximos vídeos, mas por enquanto vou ficando com o Delphi 2010 mesmo.

E vocês, o que acharam?

Copiando arquivos sem a estrutura de pastas

Esse comando me foi tão útil hoje que precisava compartilhar para tentar ajudar mais alguém.

Eu tinha uma árvore imensa de diretórios no Windows com arquivos espalhados em todas as pastas de todos os níveis. Precisava consolidar todos os arquivos em uma única pasta.

Pesquisei um pouco e cheguei a essa dica que resolveu meu problema em apenas uma linha de comando:

For /r "c:\origem" %d in (*) do copy "%d" "E:\destino"

Esse comando varre toda a estrutura de pastas em c:\origem e copia para a pasta e:\destino. Como eu precisava mover os arquivos, fiz uma pequena adaptação:

For /r "c:\origem" %d in (*) do move /Y "%d" "d:\destino"

Foi só deixar executando e algum tempo depois estava tudo como eu precisava. Fantástico. Espero que ajude mais alguém.

Slides da minha palestra no FDD e recomendação de livro

O feedback que recebi da minha palestra “Controle de Versão com Subversion e TortoiseSVN” no FDD foi muito bom, obrigado a todos que estiveram lá.

Você pode baixar os slides da minha palestra aqui ou de todas as palestras do evento no site Firebase. A palestra também foi gravada em vídeo pela Firebase, mas não sei quando estará disponível.

Algo que eu esqueci de recomendar nos slides é um livro que me ajudou muito a definir minha forma de trabalho com o Subversion:

Pragmatic Version Control using Subversion do Mike Mason:

Recomendo bastante esse livro. Ele explica como trabalhar com branches, como organizar o repositório, etc. Ele só não aborda essas operações usando o TortoiseSVN, mas é bem simples depois para você associar as funções de linha de comando com o TortoiseSVN.

Bizarrices do mundo corporativo

Existem algumas atitudes que eu simplesmente não entendo.

ATM

Em geral acontece assim: um determinado cliente quer vender o produto de um banco e para isso é necessário troca de arquivos com o sistema do banco. Como o cliente usa nosso sistema, entramos em contato com o banco para obter a documentação de integração. Aí começa o parto.

Por diversas vezes só conseguimos essa documentação após passar a ficha completa do nosso cliente que está querendo fazer a integração. O banco que deveria ser uma das partes mais interessadas, se posiciona como se estivesse fazendo um grande favor em nos fornecer as informações de como vender seus produtos! É o fim do mundo.

No meu caso sempre vi isso acontecer com bancos, e o pior, já aconteceu até quando eu queria documentação de padrões abertos como CNAB. Será que existe um mandamento básico que todo banco deve seguir?

Maltratarás todas as empresas de software que queiram ajudar a vender nossos produtos.

Não é problema fornecer os dados do cliente, mas o que eu não entendo é porque eles querem nos obrigar a isso. Essa documentação deveria estar publicada no site de todos os bancos para qualquer um baixar.

Que mal eu posso fazer em ter a documentação e/ou tirar dúvidas sobre ela sem fornecer informações do meu cliente? Na pior das hipóteses vou ter um produto integrado com eles mas sem clientes para usar e o prejudicado serei eu mesmo. Duvido que estão preocupados comigo. Vai entender.

Minha palestra sobre controle de versão no FDD

Fui convidado para palestrar sobre controle de versão com Subversion e TortoiseSVN no Firebird Developers Day. Apesar de ser uma palestra de nível introdutório, é um assunto interessante pois a quantidade de desenvolvedores que ainda não usa nenhum controle de versão é assustadora.

Alguns tópicos que pretendo abordar:

  • Como usar o Subversion através do TortoiseSVN.
  • Como organizar o repositório.
  • Um repositório para tudo ou repositórios separados?
  • Como compartilhar código entre projetos.
  • Como manter código de terceiros no repositório.
  • Branching e Merging, quando e como usar.
  • Instalando um servidor SVN na sua rede local em poucos cliques.
  • Diferenças entre controle de versão centralizado como Subversion e distribuido como Mercurial e Git.

Gostaria de ver algo diferente abordado? Me avise.

Se você ainda não usa controle de versão, ou está tentando convencer aquele desenvolvedor que trabalha com você a usar, agora tem mais um bom motivo para não perder o FDD.

Se você já conhece Subversion e TortoiseSVN talvez a palestra não traga muitas novidades, mas fique a vontade para aparecer se quiser trocar idéias sobre como está usando, dificuldades, etc.

Firebird Developers Day 2010

Nós temos o privilégio de ter no Brasil o maior evento de Firebird do mundo. Sim, é o maior do mundo. Eu já participei da conferência internacional do Firebird em Praga na República Tcheca e ela não chega nem perto da quantidade de participantes que o FDD consegue reunir aqui no Brasil.

Além disso, a qualidade das palestras (que é o que realmente importa) também é muito boa, tanto dos brasileiros quanto dos palestrantes internacionais que sempre estão presentes.

Enfim, é o evento para quem trabalha com Firebird.

www.FirebirdDevelopersDay.com.br