Java & .NET

Eu estava revendo meu arquivo de documentos e encontrei um artigo que escrevi para a revista Fórum Access em março de 2005, falando sobre um dilema comum a muitos desenvolvedores: “qual é a melhor opção, Java ou .NET?” Bem, gostaria de compartilhar esse artigo com vocês. Veja abaixo a íntegra do referido artigo


Java e .NET: dois lados da mesma moeda?

Desde que comecei a me envolver com a Informática, algo sempre me deixou curioso: ver como certas pessoas se envolviam em intermináveis discussões sobre quais seriam as melhores ferramentas de desenvolvimento. Ainda posso me lembrar das brigas entre os programadores de dBASE e os de Clipper, mais tarde repetida pelos programadores de Access e Visual Basic.

Por falar em Visual Basic, quando entrei no colégio técnico, as comparações começaram em torno dele. “O Delphi é melhor que o VB”, ou então “o Visual C++ é para programadores de verdade; VB é para crianças”.

Peça a qualquer desenvolvedor e ele vai lhe contar casos semelhantes. Como num encontro de torcedores de times de futebol rivais, sempre há alguém “puxando a sardinha” para o lado da sua ferramenta preferida.

Com o advento da plataforma .NET não podia ser diferente. A Microsoft finalmente conseguiu, com seu moderno modelo de desenvolvimento, ameaçar o então inabalável Java em seu reduto, o desenvolvimento de aplicações para a Internet.

“E daí”, você pode se perguntar, “o que eu tenho a ver com tudo isso?”. Bem, se você tira seu sustento do desenvolvimento de sistemas, este é um assunto do seu interesse.

Especialista ou generalista?

Um dilema que sempre atormentou a nós, profissionais de Informática, é decidir o quanto devemos nos manter atualizados, sem exageros. Sabemos que as novidades em nossa área vêm em velocidade vertiginosa, e que é humanamente impossível mantermo-nos a par de tudo que é lançado. Junte-se a isso a preferência por essa ou aquela tecnologia, e acabamos optando por nos especializar em umas poucas ferramentas. Essa especialização faz com que muitas pessoas, por vezes incertas de terem optado pelo rumo correto, digam repetidamente a todos que “a linguagem ABC é muito melhor que a XYZ”, como se estivessem tentando se(Convencer a si próprias disso?/ convencer a elas mesmas?) convencer disso.

Por conta dessa tendência de especialização, há quem diga que nossa área começa a sofrer de um problema que já vem preocupando aos profissionais da Medicina: está desaparecendo o “clínico-geral”. Muitos médicos recém-formados, de olho em modismos ou na busca por áreas mais rentáveis, acabam se especializando excessivamente. Com isso, depois de um tempo, tornam-se incapazes de diagnosticar um simples resfriado.

Da mesma forma que um clínico-geral tem um papel fundamental na Medicina, por ser ele quem tem o primeiro contato com o paciente, ajudando-o inclusive a identificar qual especialista deve ser procurado, assim é o profissional generalista: com uma visão mais ampla do mercado, ele consegue fornecer orientações mais lúcidas, imparciais e precisas a seus clientes.

“Não ponha todos os ovos na mesma cesta”

Isso não quer dizer que não deve haver especialistas. Porém, um grau muito alto de especialização pode ser perigoso num mercado tão dinâmico como o de Informática.

Os leitores com mais de trinta anos – e com pelo menos quinze anos no desenvolvimento de sistemas – certamente se lembrarão do Clipper, e do quanto ele foi relevante. Se você dissesse a qualquer analista de sistemas, há quinze anos atrás, que o Clipper estava fadado a morrer em pouco tempo, provavelmente ele iria rir de você. A vasta maioria de todos os aplicativos comerciais da época era baseado na linguagem de programação derivada do venerável dBASE.

Entretanto, em maio de 1990, foi lançado um produto que iria mudar o mundo: O Windows 3.0. Com sua interface gráfica e a habilidade de aproveitar melhor a memória do micro (veja quadro), abriu um novo horizonte de possibilidades. A partir daí, e com o constante avanço do hardware, os clientes passaram a exigir programas que rodassem nesse novo ambiente, praticamente sepultando o outrora inabalável Clipper. Ninguém teria previsto tal acontecimento.

Provavelmente, muitos especialistas em Clipper não conseguiram se ajustar às mudanças, e eventualmente tiveram problemas, até mesmo financeiros, durante a transição. Por outro lado, os “clínicos-gerais” da Informática, com sua abordagem mais generalista, adaptaram-se mais rapidamente à nova realidade do mercado, lucrando muito com isso.

A revolução chamada Windows

Enquanto no Brasil ainda se conhecia apenas o MS-DOS (e a versão mais popular ainda era a 3.3) no quartel-general da Microsoft, em Redmond, uma revolução acontecia silenciosamente. A Microsoft estava colocando todos os seus esforços de desenvolvimento no OS/2 1.1, um projeto em parceria com a IBM para criar o “sistema operacional do futuro”, capaz de substituir o DOS.

A versão mais recente do Windows era a 2.0. Ainda muito primitiva, era incapaz de rodar programas DOS, além de estar limitada pela barreira de 640Kbytes da memória convencional, o que impedia a criação de programas avançados.

Quem virou o jogo, abrindo o caminho para a Informática como a conhecemos hoje, foi David Weise, ex-integrante da equipe de desenvolvimento do Windows, criador da técnica que permitiu ao Windows executar aplicações em modo protegido (um recurso dos processadores que permite a utilização de toda a memória do micro), virtualmente eliminando a barreira dos 640K. Tudo isso feito sem que ninguém soubesse, como se fosse um pet project – um projeto de estimação, feito nas horas vagas. Só aí foi apresentado a Steve Ballmer o que viria a ser o Windows 3.0, e o resto é história. O Windows 3.0 foi um dos lançamentos mais bem-sucedidos do mercado de software, vendendo mais de dez milhões de cópias num mês.

Não tente abraçar o mundo

Será que é possível conciliar as duas coisas? Quer dizer, como ser generalista, conhecendo um pouco de cada ferramenta, e ainda assim ser bom o bastante no que se faz, se destacando num mercado tão competitivo? O fato é que não existem fórmulas mágicas. Cabe a você, leitor, achar seu próprio ponto de equilíbrio. Uma dica é tentar achar um denominador comum, alguma convergência entre as diferentes tecnologias. Um exemplo bem típico é a programação orientada a objetos. Sabemos que há inúmeras linguagens orientadas a objetos – desde o VB até o Java, passando pelo C++, C# e o Delphi, dentre outras – completamente distintas entre si, mas os princípios básicos, tais como herança, polimorfismo, classes, objetos etc. são exatamente os mesmos. Assim, se você for muito bom na análise e programação orientadas a objeto seu handicap é muito maior, pois pode aprender uma nova linguagem de programação em questão de dias. Bastará aprender a nomenclatura dos comandos.

Uma outra habilidade muito valorizada no profissional é a capacidade de ver o processo em que está envolvido como um todo, não apenas a parte pela qual é responsável. Estar a par do negócio de sua empresa permite perceber no mercado novas técnicas, que podem ser aplicadas em seu dia-a-dia. Essa visão mais aberta, com o tempo, permitirá identificar novas tendências de mercado, dando-lhe uma grande vantagem estratégica: a agilidade para se adaptar.

Empregabilidade é tudo

Em meu último emprego, numa companhia de seguros, trabalhei inicialmente com Visual Basic 6.0, desenvolvendo sistemas desktop para os clientes internos (aplicações de suporte ao negócio para os diferentes departamentos) e externos (kits de cálculo para os corretores de seguros). Na época ainda não tínhamos uma Intranet, e o website era bastante precário. Apesar de eu ter um excelente domínio da linguagem, que poderia me permitir certa acomodação (“faço apenas o que pedirem, nada além disso”), eu não estava satisfeito. Sentia que o futuro era a Internet e, portanto, deveria me aprofundar mais num campo do qual tinha apenas noções básicas: o desenvolvimento de aplicações Web.

A Microsoft estava, então, trabalhando a todo o vapor no .NET, e resolvi apostar minhas fichas na nova versão do ASP. Depois de muita insistência com a minha chefia, consegui autorização para desenvolver a nova Intranet em VB.NET. O problema é que eu não tinha a menor noção de por onde começar, já que o novo Visual Studio ainda estava no beta 1, e sua documentação era escassa. Além disso, o modelo de desenvolvimento era completamente diferente daquele que eu conhecia. Apesar de tudo, com muita perseverança, consegui colocar a Intranet no ar! O resultado foi tão bom que a equipe começou a ser treinada para portar as aplicações desktop internas para o novo ambiente, de modo a centralizar o acesso e simplificar a manutenção e suporte.

Tudo estava indo muito bem, até que num belo dia meu chefe disse “eu tenho estudado o Java há algum tempo, e acho que pode ser uma alternativa interessante para a empresa. Vamos passar a Intranet toda para Java?”

Não preciso dizer o quanto essa pergunta me tirou do sério. Depois de todo o esforço que foi aprender a programar em ASP.NET sem nenhum tipo de apoio, depois de todo o tempo despendido na codificação das aplicações, ele me diz na maior naturalidade que quer que eu jogue meu serviço no lixo e recomece do zero? “Bom, tudo bem. Só que eu não sei programar em Java”, eu disse. “Onde vamos fazer o curso?”

“Curso? Não, não tem curso. Pega este livro aqui e vai lendo. Se tiver alguma dúvida, me pergunta.”

Na hora fiquei revoltado. Mas devo admitir que foi uma das melhores coisas que me aconteceram, profissionalmente falando. Programar em Java ampliou meus horizontes, me deu uma bagagem que eu não tinha.

Foi aí que percebi que ser generalista poderia ampliar ainda mais minha empregabilidade. Durante o aprendizado do Java, vi que poderia trabalhar em projetos com qualquer linguagem orientada a objetos, tanto para desktop quanto para a Web. VB 6, VB.NET, C#, Java, tanto faz. Lembre-se, ache o denominador comum – a orientação a objetos, a análise de sistemas – que programar torna-se apenas uma questão de sintaxe.

O mundo dos objetos

A diferença entre as diferentes linguagens orientadas a objeto são bastante sutis. Veja alguns exemplos de um típico “Alô mundo” em diferentes linguagens de programação.

VB.NET

Imports System

        Namespace MeuProjeto
        Public Class MainClass
        Public Shared Sub Main(Args() As String)
        Console.WriteLine("Alô mundo!")
        End Sub
        End Class
        End Namespace
        

C#

using System;

        namespace MeuProjeto {
        public class MainClass {
        public static void Main(string[] args)
        Console.WriteLine("Alô mundo!");
        }
        }
        }
        

Java

package MeuProjeto;

        imports java.lang.*;

        public class MainClass {
        public static void main(String[] args)
        System.out.println("Alô mundo!");
        }
        }
        

E aqui um exemplo de uma classe típica, com herança e implementação de interfaces:

VB.NET

Imports System

        Namespace MeuProjeto
        Public Class MinhaClasse
        Inherits ClasseAncestral
        Implements IMinhaInterface

        Public Sub MeuMétodo(Parâmetros() As Object)
        For i As Integer = 0 To Parâmetros.Length – 1
        Console.WriteLine(Parâmetros(i))
        Next
        End Sub
        End Class
        End Namespace
        

C#

using System;

        namespace MeuProjeto {
        public class MinhaClasse:
        ClasseAncestral,
        IMinhaInterface {

        public void MeuMétodo(object[] Parâmetros)
        for(int i = 0; i < Parâmetros.Length; i++) {
        Console.WriteLine(Parâmetros[i]);
        }
        }
        }
        }
        

Java

package MeuProjeto;

        import java.lang.*;

        public class MinhaClasse
        extends ClasseAncestral
        implements MinhaInterface {

        public void MeuMétodo(Object[] Parâmetros) {
        for(int i = 0; i < Parâmetros.length; i++) {
        System.out.println(Parâmetros[i]);
        }
        }
        }
        

Software livre

Java e C# são muito semelhantes, e não por acaso. Quem conhece uma linguagem facilmente aprende a outra. Ambas têm suas qualidades e defeitos, mas por enquanto o Java tem uma vantagem difícil de ser batida: é mais maduro. Como está disponível há mais tempo, pôde ser mais aprimorado. Além disso, foi abraçado pela comunidade do software livre, que é responsável por alguns dos melhores softwares do mundo. O C# caminha na mesma direção, uma vez que ele também é um padrão aberto. Uma coisa é certa: envolva-se com a comunidade do software livre. Você só tem a ganhar com isso. Além de ter acesso a várias ferramentas de alta qualidade e totalmente livres para uso, você conhecerá gente competente do mundo inteiro, podendo aumentar em muito seu nível de conhecimento.

Impossível falar de software livre e não lembrar do Linux, né? Certamente muitos dos leitores se perguntam: Windows ou Linux? Em qual devo investir? Os dois são excelentes produtos, e podem se complementar. Estude-os de maneira imparcial e procure tirar o maior proveito de cada um deles.

Conclusão

A verdade é que só você pode decidir qual o caminho certo. Ferramentas como Java e C# podem ser concorrentes ferrenhos, e você pode querer optar por um dos lados. Ou então eles podem ser apenas formas diferentes de resolver o mesmo problema – e você estará livre para usar qualquer um dos dois a qualquer momento. Lembre-se apenas que quanto mais abertos estiverem seus olhos, mais difícil será cair num buraco pelo caminho.

Visual Studio 2005 SP1

S. “Soma” Somasegar, vice-presidente da divisão de desenvolvimento da Microsoft, acabou de anunciar o lançamento do Service Pack 1 (SP1) do Visual Studio 2005:

VS 2005 SP1 is released!

We released Visual Studio 2005 Service Pack 1 earlier today.

This Service Pack addresses a range of issues that were found through customer and partner feedback as well as our own internal testing.  Many of these issues were reported by you and I thank you for taking the time to report them to us.  The release also adds a number of customer requested functionality and enhancements to some of the most common development scenarios to Visual Studio that I think you’ll find interesting and valuable.

For developers using Windows Vista we also released a beta of the Visual Studio 2005 SP1 Update for Windows Vista.

O pacote de atualizações contém correções de erros e novos recursos. Foram atualizados:

  • Visual Studio Standard, Professional e Team Editions
  • Express Editions
  • Team Foundation Server

Para mais informações, consulte a página de downloads do Service Pack. Veja também o blog de Brian Harry para mais informações sobre os novos recursos e as correções de erros do Team Foundation Server SP1.

Ainda segundo Brian Harry, a lista completa com as mudanças do SP1 deve ficar pronta em breve.

Série de webcasts sobre Visual Studio Team System em 2007

(EDIT: As datas do terceiro e quarto webcasts foram alteradas de 14/02 e 28/02 para 15/02 e 01/03, respectivamente. Abaixo estão as datas corretas)

(EDIT 2: As datas dos dois últimos webcasts foram alteradas de 28/03 e 11/04 para 22/03 e 29/03, respectivamente. Abaixo estão as datas corretas)

Programe-se já para uma série de webcasts que apresentarei no MSDN Brasil em 2007. Os webcasts estão sendo agendados no sistema de eventos da Microsoft e logo devem estar abertos para inscrições.

Confira as datas:

  • 17/jan: Implantando e administrando o Team Foundation Server
    Orientações sobre instalação e configuração do TFS; criação e administração de projetos e usuários.
  • 23/jan: Apresentando o Visual Studio Team Edition for Database Professionals
    Conheça a mais nova Team Edition do Visual Studio Team System. Voltada a profissionais de bancos de dados (DBAs e desenvolvedores de bancos de dados), oferece recursos avançados tais como controle de versão de banco de dados, geração de massa de testes, gerenciamento de “schema” e dados, testes unitários e muito mais
  • 31/jan: Check-in e check-out no TFS
    Entenda as novidades no controle de versão do TFS, tais como check-outs múltiplos, políticas de check-in e resolução de conflitos
  • 15/fev: Branches, Labels e Merging
    Dicas e orientações sobre como gerenciar múltiplas versões de softwares e desenvolvimento paralelo
  • 01/mar: Shelving
    Utilize melhor um dos recursos exclusivos do TFS para obter mais produtividade e segurança no controle de seu código-fonte
  • 22/mar: Revisão de código com Team Foundation Server
    Uso da ferramenta de controle de versão, work items e políticas de check-in de modo a criar um processo de revisão de código em empresas de desenvolvimento de sistemas
  • 29/mar: Utilizando o TFS na Internet
    Como configurar e otimizar o TFS para acesso pela internet, disponibilizando acesso para equipes e desenvolvedores remotos

TFS + TFS MSSCCI Provider + Branch = Confusão!

Inúmeras vezes já mencionei o TFS MSSCCI Provider e os benefícios de obter integração com seu IDE preferido, sem ficar limitado ao VS 2005. Já publiquei até artigos a respeito. Porém, recentemente passamos por uma situação curiosa aqui na Fórum Access que gostaria de compartilhar com vocês.

Imagine o seguinte cenário:

  1. Um usuário tem uma solução VS.NET 2003 sob controle de versão no TFS, na pasta $/teamproject/trunk/src/solution;
  2. Seu workspace está configurado da seguinte forma: $/teamproject -> c:projectsteamproject
  3. Esse usuário cria um branch de $/teamproject/trunk/src em $/teamproject/branches/b1/src (usando o Team Explorer; ainda não é possível fazer isso através do MSSCCI provider);
  4. A seguir, esse mesmo usuário abre o VS.NET 2003 e tenta abrir c:projectsteamprojectbranchesb1solutionsolution.sln
  5. Tudo fica muito confuso. Ele não sabe mais se as alterações estão ocorrendo no branch ou no trunk.

Isso acontece porque:

  1. Quando o VS.NET 2003 tenta abria a solução, percebe que as configurações de integração com o TFS (“source control binding“) estão erradas. Isso porque originalmente a solução estava no diretório local c:projectsteamprojecttrunksrcsolution (que, devido à configuração do workspace, corresponde a $/teamproject/trunk/src/solution) e agora está em c:projectsteamprojectbranchesb1srcsolution (que, também devido à configuração do workspace, corresponde a $/teamproject/branches/b1/src/solution). Como os caminhos não estão mais consistentes, pede ao usuário que corrija;
  2. O usuário abre a caixa de diálogo Change Source Control (no menu File | Source Control) e o botão Browse (que permitiria indicar qual o diretório correto, efetivamente corrijindo o mapeamento do workspace) está desabilitado;
  3. O usuário desvincula (“unbind”) e revincula (“bind”) a solução, na esperança de que isso forçaria a exibição de uma caixa de diálogo que permitiria indicar o diretório correto, corrigindo assim a configuração da solução. Porém, alguns instantes após clicar em Bind o Visual Studio indica que o binding é válido (não aparece nenhuma caixa de diálogo) – parece que o Visual Studio (na verdade, o provedor TFS MSSCCI) foi esperto o suficiente para corrigir sozinho o caminho do mapeamento, tomando por base o diretório onde se encontra a solução;
  4. Finalmente, o usuário descobre que a solução ainda aponta para o trunk e não para o branch. Isso acontece porque o provedor TFS MSSCCI resolveu o problema com a seguinte lógica:
    • Usuário abriu a solução a partir de c:projectsteamprojectbranchesb1solution;
    • As informações sobre o binding do controle de versão, contidas no arquivo .sln da solução, indicam que ela está ligada a $/teamproject/trunk/src/solution. (Era de se esperar, pois esse era o valor presente no arquivo no momento em que foi feito o branch);
    • O provedor TFS MSSCCI, ao invés de corrigir as informações de binding, baseando-se no diretório a partir do qual a solução foi aberta, cria um novo mapeamento no workspace, acreditando que o diretório da solução foi movido ao invés de perceber que é um branch.

 

A Microsoft já identificou o comportamento mencionado acima como um bug e o time de produto já está trabalhando numa correção. Avisarei assim que souber de alguma novidade. Nesse meio-tempo, você deverá editar todos os arquivos .sln e .csproj/.vbproj no Bloco de Notas, corrigindo manualmente as informações de binding antes de abrir a solução no VS.NET 2003.

 

IMPORTANTE  Ainda que este artigo mencione o VS.NET 2003, o bug é do TFS MSSCCI Provider e, por isso, afeta outros produtos tais como VS.NET 2002 e Visual Basic 6.0.

Renomeando sua instância do TFS

Mais uma descoberta advinda do nosso uso diário do TFS aqui na Fórum Access.

Nosso servidor TFS, inicialmente, foi configurado com um nome NetBIOS (“tfsserver”). Agora que já está´a todo vapor, chegou a hora de colocá-lo na Internet, para que nossos colaboradores possam acessá-lo remotamente – até mesmo de suas casas!

Para isso, registramos um FQDN (“fully-qualified domain name“) em nosso DNS, fizemos a publicação no ISA Server, ajustamos os arquivos de configuração…

Tudo está funcionando muito bem, obrigado. Porém, quando um usuário clicou com o botão direito sobre um team project e selecionou “Show Project Portal”, qual não foi nossa surpresa quando o URL aberto no Internet Explorer continha o nome antigo – mesmo o usuário tendo conectado no TFS usando o nome novo!

Etienne Tremblay, que também é um MVP de Team System, tem um excelente post sobre esse assunto no seu blog:

Changing to a friendly Team Foundation Server Name

So you just finish installing TFS, it works great and you’re about to give out the name to all your devs so they can start using the great new features in TFS but the name of the server uses corporate naming standard and is called rtmtgbs001 that is a great name for the ITO folks they know the scheme and can find that server to patch it and all that but for devs and project manager, and other consumers of TFS data it’s a bit hard to remember and if you have many servers it because quite difficult to remember.

So you create a new url in DNS called tfs.myorg.mycompany.com viable internally (note I’m not talking about make it available on the internet yet that will be implemented in SP1 I’ll come back to that when I have more info) so what should you do to accomplish this. Here are the steps to do that for a single server install (note this probably will work for a dual server install as well I just have not tested it). Note also that this is not I repeat not are windows server rename, the name (netbios, domain sid, etc) stays the same, its just to change the access of TFS to a friendlier name.

I’m writing this entry to try to unravel the mystery of this, I have looked around on the internet to find a solution for this and got a lot of conflicting answers in forums and in the Microsoft documentation. So I contacted my friends at Microsoft and got what needed to be done. This may vary from site to site but at least it will be mostly correct. As always test this before implementing in production. I have done those steps on my production servers and all is good…

Quer saber mais sobre o time do Team Foundation Server?

Brian Keller, Technical Evangelist do Team System, vai fazer uma entrevista para o Channel 9 com o time de desenvolvimento do Team Foundation Server nos dias 14 e 15 de dezembro.

On Dec. 14 & 15 I will be filming more Visual Studio Team System Channel 9 interviews on-site with the Team Foundation Server team in Raleigh, North Carolina. I am pleased to announce that Brian Harry has graciously agreed to take some time on camera to talk about the roadmap for Team Foundation Server which he posted last week. I am also scheduling time with several of the other engineers on the team to go deep on areas such as the Migration Toolkit, the upcoming Power Tools, the Team Build enhancements, and some of the Administrative and Operations improvements being planned for Team Foundation Server.

Essa é uma grande oportunidade para tirar suas dúvidas a respeito do Team Foundation Server. Envie as perguntas que você gostaria que fossem feitas durante a entrevista!

Visual Studio for Database Professionals: RTM!!!

 

EDIT: Esqueci do link do produto. Desculpe. :)

 

Depois de um longo e tenebroso inverno*, foi lançado no último dia 30 de novembro o Visual Studio for Database Professionals (codinome "DataDude").

Os principais recursos dessa nova Team Edition são:

  • Controle de versão dos objetos de bancos de dados (tabelas, views, stored procedures etc…);
  • Gerenciamento do schema (estrutura) do banco de dados, sendo capaz de atualizar diretamente os bancos de dados de desenvolvimento e produção para que reflitam a estrutura definida no projeto;
  • Gerenciamento de dados, de forma que seja possivel sincronizar os dados entre desenvolvimento e produção, e até mesmo gerar os scripts de INSERT para popular uma base de dados vazia;
  • Geração de massas de testes a partir de dados aleatórios ou de bancos de referência (como o banco de produção), além de oferecer suporte a "plugins" de geração de dados;
  • Testes unitários de objetos do banco de dados, em especial stored procedures. Os testes unitários do banco de dados estão intimamente ligados aos recursos de teste já existentes nas edições Team Developer e em especial a Team Tester.

Segundo previsões, o DB Pros deve estar disponível para download para assinantes MSDN na próxima quinta-feira, dia 07 de dezembro.

Importante: Para poder instalar o DB Pros você deve ter o Visual Studio Team Suite. Se sua assinatura do MSDN for de alguma das outras edições do Visual Studio Team System (Architect, Developer, Tester) você nao tem licença de uso do DB Pros. Nesse caso você deve fazer um upgrade de sua assinatura para o Team Suite ou adquirir uma nova assinatura para o DB Pros (disponível num futuro próximo).

 

* Nem tão longo assim. Na verdade esse produto consegui a impressionante façanha de ser concebido, desenvolvido e lançado em menos de um ano! Para os padrões Microsoft, não é pouca coisa.